diff --git a/.dockerignore b/.dockerignore index 8205411..f54ebcf 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,3 +1,3 @@ ./node_modules/ .env -supergraph.graphql \ No newline at end of file +./dist diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml new file mode 100644 index 0000000..91af34e --- /dev/null +++ b/.github/workflows/publish.yaml @@ -0,0 +1,31 @@ +name: Build and Publish Docker Image + +on: + push: + release: + types: ['published'] + +jobs: + publish-container-image: + permissions: + id-token: write + contents: read + packages: write + attestations: write + uses: datum-cloud/actions/.github/workflows/publish-docker.yaml@v1.7.2 + with: + image-name: graphql-gateway + secrets: inherit + + publish-kustomize-bundles: + permissions: + id-token: write + contents: read + packages: write + uses: datum-cloud/actions/.github/workflows/publish-kustomize-bundle.yaml@v1.7.2 + with: + bundle-name: ghcr.io/datum-cloud/graphql-gateway-kustomize + bundle-path: config + image-overlays: config/base + image-name: ghcr.io/datum-cloud/graphql-gateway + secrets: inherit diff --git a/.gitignore b/.gitignore index 1d91d05..1c15d8b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ node_modules .env -supergraph.graphql \ No newline at end of file +dist/ \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..9068fb1 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,5 @@ +node_modules/ +dist/ +src/mesh/gen/ +*.graphql + diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..238d4d9 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,7 @@ +{ + "semi": false, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "es5", + "printWidth": 100 +} diff --git a/Dockerfile b/Dockerfile index 4309c3a..958aa76 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,34 +1,42 @@ -FROM node:20-alpine AS builder +# --- Stage 1: Build --- +FROM node:22-slim AS builder WORKDIR /app -ARG DATUM_TOKEN -ENV DATUM_TOKEN=$DATUM_TOKEN - -ARG DATUM_BASE_URL -ENV DATUM_BASE_URL=$DATUM_BASE_URL - -# Install dependencies (needed for mesh compose) +# Copy package files COPY package.json package-lock.json ./ + +# Install all dependencies (including devDependencies for build) RUN npm ci -# Copy composition config and API descriptions -COPY mesh.config.ts ./ -COPY config/apis.yaml ./config/apis.yaml +# Copy source code and config +COPY tsconfig.json ./ +COPY src/ ./src/ + +# Build the application +RUN npm run build + +# --- Stage 2: Runtime --- +FROM node:22-slim -# Generate the supergraph at build time -RUN npx mesh-compose -o supergraph.graphql +WORKDIR /app + +# Set the environment to production +ENV NODE_ENV=production + +# Copy package files +COPY package.json package-lock.json ./ -# --- Runtime image: Hive Gateway --- -FROM ghcr.io/graphql-hive/gateway:2.1.19 -RUN npm i @graphql-mesh/transport-rest +# Install only production dependencies +RUN npm ci --omit=dev -WORKDIR /gateway +# Copy compiled gateway and shared code from builder +COPY --from=builder /app/dist/gateway ./dist/gateway +COPY --from=builder /app/dist/shared ./dist/shared -# Copy generated supergraph and gateway configuration -COPY --from=builder /app/supergraph.graphql ./supergraph.graphql -COPY gateway.config.ts ./gateway.config.ts +# Copy runtime configuration +COPY config/ ./config/ EXPOSE 4000 -CMD ["supergraph", "--hive-router-runtime"] \ No newline at end of file +CMD ["node", "dist/gateway/index.js"] diff --git a/README.md b/README.md index 2bf43d2..dc0736b 100644 --- a/README.md +++ b/README.md @@ -1,103 +1,86 @@ ## GraphQL Gateway for Milo APIServer -This project provides a **GraphQL gateway** that sits in front of Milo APIServer REST/OpenAPI services and exposes a unified GraphQL API. It uses **Hive Mesh** at build time to compose a supergraph from OpenAPI specs, and **Hive Gateway** to serve the federated GraphQL endpoint. +This project provides a **GraphQL gateway** that sits in front of Milo APIServer REST/OpenAPI services and exposes a unified GraphQL API. It uses **Hive Gateway** with dynamic supergraph composition from OpenAPI specs at runtime. > **Status**: This gateway is in an **initial, non‑production stage**. It is intended **only for local testing by the Datum team** and **is not production ready**. -### What Hive Mesh is +### Architecture -- **Hive Mesh**: a composition/mesh tool that can read multiple upstream sources (OpenAPI, REST, GraphQL, etc.) and generate a single federated GraphQL schema (a **supergraph**). -- In this project, Hive Mesh: - - Reads Milo OpenAPI definitions listed in `config/apis.yaml`. - - Uses `mesh.config.ts` to map those APIs into subgraphs. - - Outputs `supergraph.graphql`, which Hive Gateway then runs. +- **Dynamic Supergraph Composition**: The gateway dynamically fetches OpenAPI specs from the Milo APIServer and composes a unified GraphQL supergraph at runtime. +- **mTLS Authentication**: Uses client certificates (mTLS) to authenticate with the Kubernetes API server. +- **Polling**: The supergraph is recomposed periodically based on the `POLLING_INTERVAL` environment variable. ### What Hive Gateway is - **Hive Gateway**: a production-ready GraphQL gateway/router from the GraphQL Hive ecosystem. - It: - - Loads the `supergraph.graphql` produced by Hive Mesh. + - Dynamically composes a supergraph from OpenAPI specs fetched from Milo APIServer. - Executes incoming GraphQL operations by delegating to the underlying Milo APIs. - Handles concerns like header propagation, TLS, caching, and observability. -### Why `--hive-router-runtime` +### Environment Variables -- **`--hive-router-runtime`** tells Hive Gateway to use the **Hive Router runtime** as its execution engine. -- In practice this: - - Enables the newer router-style unified graph execution path. - - Improves compatibility with Mesh-based supergraphs and transport plugins (such as HTTP/REST). - - Keeps the gateway aligned with the same runtime used by the standalone Hive Router. - - Increases execution speed +| Variable | Description | Default | +| --------------------- | -------------------------------------------------- | ----------------- | +| `PORT` | Port the gateway listens on | `4000` | +| `KUBECONFIG` | Path to kubeconfig file for K8s authentication | Required | +| `POLLING_INTERVAL` | Interval (ms) between supergraph recomposition | `120000` (2 min) | +| `LOGGING` | Log level (`debug`, `info`, `warn`, `error`) | `info` | +| `NODE_EXTRA_CA_CERTS` | Path to CA certificate for trusting K8s API server | Required for mTLS | -### Project scripts +### Project Scripts Defined in `package.json`: -- **`npm run supergraph:compose`** - - Uses Hive Mesh (`mesh-compose`) and `mesh.config.ts` to generate `supergraph.graphql` locally. - - Reads API groups/versions from `config/apis.yaml` and environment such as `DATUM_TOKEN` and `DATUM_BASE_URL`. +- **`npm run build`** + - Compiles TypeScript source code to JavaScript. -- **`npm run dev`** - - Runs Hive Gateway directly against `supergraph.graphql` in the local working directory. - - Useful for quick local development when you already composed the supergraph. +- **`npm run dev`** + - Runs the gateway in development mode with hot reloading. -- **`npm run start:gateway`** - - Builds a Docker image (`graphql-gateway`) using the provided `Dockerfile`: - - Passes `DATUM_TOKEN` and `DATUM_BASE_URL` as build arguments for Mesh composition. - - Runs `mesh-compose` in the build stage to bake `supergraph.graphql` into the image. - - Starts the container on port `4000` and removes the image when the container exits. - - Intended as a simple “build-and-run” entrypoint for local or ad‑hoc environments. +- **`npm run start`** + - Runs the compiled gateway from `dist/`. -### Querying Milo through the gateway +- **`npm run lint`** + - Runs ESLint on the codebase. -- **Using Postman with `supergraph.graphql`**: - - After running `npm run supergraph:compose`, you will have a local `supergraph.graphql` file. - - In Postman, create a new GraphQL request and **import** or **paste** the contents of `supergraph.graphql` as the schema. - - Point the request URL to your running gateway (for example `http://127.0.0.1:4000/graphql`) and you can start querying Milo through the GraphQL gateway. +### Local Testing -- **Using the built‑in GraphQL UI**: - - When you run the gateway locally (via `npm run dev` or `npm run start:gateway`), it exposes a GraphQL endpoint at `http://127.0.0.1:4000/graphql`. - - Open `http://127.0.0.1:4000/graphql` in your browser to use the UI for exploring the schema and running queries against Milo. +A comprehensive local testing script is provided at `scripts/local-test.sh`. This script: -### Basic usage +1. Verifies the correct kubectl context is active +2. Generates client certificates using cert-manager +3. Creates a local kubeconfig with mTLS credentials +4. Sets up port-forwarding to the Milo APIServer +5. Runs the gateway locally -#### Datum access token (`DATUM_TOKEN`) +**Prerequisites**: -`DATUM_TOKEN` is a **Datum access token**. The easiest way to obtain it is with the `datumctl` CLI (see the official [datumctl docs](https://www.datum.net/docs/quickstart/datumctl/)). +- `kubectl` configured with access to the staging cluster +- `cert-manager` installed in the cluster +- Entry in `/etc/hosts`: `127.0.0.1 milo-apiserver` -- **Get a production token**: +**Usage**: - ```bash - datumctl auth get-token - ``` +```bash +./scripts/local-test.sh +``` -- **Get a staging token**: +### Kubernetes Deployment - ```bash - datumctl auth login --hostname auth.staging.env.datum.net - datumctl auth get-token - ``` +The gateway is deployed to Kubernetes using the manifests in `config/base/`. Key components: -Use the resulting token value as the `TOKEN` environment variable in the commands below. +- **deployment.yaml**: Gateway deployment with mTLS volume mounts +- **service.yaml**: ClusterIP service exposing port 4000 +- **http-route.yaml**: HTTPRoute for ingress configuration +- **milo-control-plane-kubeconfig.yaml**: ConfigMap with kubeconfig template -- **Compose the supergraph locally**: +### Querying Milo through the Gateway - ```bash - export DATUM_TOKEN=your-token - export DATUM_BASE_URL=https://api.staging.env.datum.net - npm run supergraph:compose - ``` +- **Using the built‑in GraphQL UI**: + - When running the gateway, it exposes a GraphQL endpoint at `http://127.0.0.1:4000/graphql`. + - Open this URL in your browser to use the UI for exploring the schema and running queries against Milo. -- **Run the gateway locally (no Docker)**: - - ```bash - npm run dev - ``` - -- **Build and run via Docker**: - - ```bash - export DATUM_TOKEN=your-token - export DATUM_BASE_URL=https://api.staging.env.datum.net - npm run start:gateway - ``` +- **Health Endpoints**: + - `/healthcheck` - Liveness probe + - `/readiness` - Readiness probe (checks if K8s auth is initialized) diff --git a/config/apis.yaml b/config/apis.yaml deleted file mode 100644 index a581672..0000000 --- a/config/apis.yaml +++ /dev/null @@ -1,8 +0,0 @@ -- group: iam.miloapis.com - version: v1alpha1 - -- group: notification.miloapis.com - version: v1alpha1 - -- group: resourcemanager.miloapis.com - version: v1alpha1 diff --git a/config/base/deployment.yaml b/config/base/deployment.yaml new file mode 100644 index 0000000..880e32b --- /dev/null +++ b/config/base/deployment.yaml @@ -0,0 +1,102 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: backend + app.kubernetes.io/instance: graphql-gateway + app.kubernetes.io/name: graphql-gateway + app.kubernetes.io/version: 1.0.0 + name: graphql-gateway +spec: + progressDeadlineSeconds: 600 + replicas: 2 + revisionHistoryLimit: 5 + selector: + matchLabels: + app.kubernetes.io/component: backend + app.kubernetes.io/instance: graphql-gateway + app.kubernetes.io/name: graphql-gateway + strategy: + rollingUpdate: + maxSurge: 1 + maxUnavailable: 0 + type: RollingUpdate + template: + metadata: + labels: + app.kubernetes.io/component: backend + app.kubernetes.io/instance: graphql-gateway + app.kubernetes.io/name: graphql-gateway + spec: + containers: + - name: graphql-gateway + image: ghcr.io/datum-cloud/graphql-gateway:latest + imagePullPolicy: IfNotPresent + ports: + - containerPort: 4000 + name: http + protocol: TCP + env: + - name: LOGGING + value: debug + - name: KUBECONFIG + value: /etc/milo-control-plane/config/kubeconfig + volumeMounts: + - name: milo-control-plane-kubeconfig + mountPath: /etc/milo-control-plane/config + readOnly: true + - name: milo-control-plane-certs + mountPath: /etc/kubernetes/pki/client + readOnly: true + - name: trust-bundle + mountPath: /etc/kubernetes/pki/trust + readOnly: true + resources: + limits: + cpu: 1 + memory: 1Gi + livenessProbe: + failureThreshold: 3 + initialDelaySeconds: 5 + periodSeconds: 5 + timeoutSeconds: 10 + httpGet: + path: /healthcheck + port: 4000 + scheme: HTTP + readinessProbe: + failureThreshold: 3 + initialDelaySeconds: 5 + periodSeconds: 5 + timeoutSeconds: 10 + httpGet: + path: /readiness + port: 4000 + scheme: HTTP + volumes: + - name: milo-control-plane-kubeconfig + configMap: + name: milo-control-plane-kubeconfig + items: + - key: kubeconfig + path: kubeconfig + - name: milo-control-plane-certs + csi: + driver: csi.cert-manager.io + readOnly: true + volumeAttributes: + csi.cert-manager.io/issuer-name: datum-control-plane + csi.cert-manager.io/issuer-kind: ClusterIssuer + csi.cert-manager.io/common-name: graphql-gateway + csi.cert-manager.io/fs-group: '65534' + csi.cert-manager.io/organizations: system:masters + csi.cert-manager.io/key-usages: client auth + - name: trust-bundle + configMap: + name: datum-control-plane-trust-bundle + items: + - key: ca.crt + path: ca.crt + dnsPolicy: ClusterFirst + restartPolicy: Always + terminationGracePeriodSeconds: 30 diff --git a/config/base/http-route.yaml b/config/base/http-route.yaml new file mode 100644 index 0000000..392aaa0 --- /dev/null +++ b/config/base/http-route.yaml @@ -0,0 +1,18 @@ +apiVersion: gateway.networking.k8s.io/v1beta1 +kind: HTTPRoute +metadata: + name: graphql-gateway +spec: + parentRefs: + - name: external-gateway + namespace: envoy-gateway-system + rules: + - matches: + - path: + type: PathPrefix + value: / + backendRefs: + - name: graphql-gateway + kind: Service + group: '' + port: 4000 diff --git a/config/base/kustomization.yaml b/config/base/kustomization.yaml new file mode 100644 index 0000000..e0c8737 --- /dev/null +++ b/config/base/kustomization.yaml @@ -0,0 +1,5 @@ +resources: + - deployment.yaml + - service.yaml + - http-route.yaml + - milo-control-plane-kubeconfig.yaml diff --git a/config/base/milo-control-plane-kubeconfig.yaml b/config/base/milo-control-plane-kubeconfig.yaml new file mode 100644 index 0000000..f0a75a2 --- /dev/null +++ b/config/base/milo-control-plane-kubeconfig.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: milo-control-plane-kubeconfig +data: + kubeconfig: | + apiVersion: v1 + clusters: + - cluster: + certificate-authority: /etc/kubernetes/pki/trust/ca.crt + server: https://milo-apiserver.datum-system.svc.cluster.local:6443 + name: milo-apiserver + contexts: + - context: + cluster: milo-apiserver + user: graphql-gateway + name: graphql-gateway + current-context: graphql-gateway + kind: Config + preferences: {} + users: + - name: graphql-gateway + user: + client-certificate: /etc/kubernetes/pki/client/tls.crt + client-key: /etc/kubernetes/pki/client/tls.key diff --git a/config/base/service.yaml b/config/base/service.yaml new file mode 100644 index 0000000..6129dfb --- /dev/null +++ b/config/base/service.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/instance: graphql-gateway + app.kubernetes.io/name: graphql-gateway + app.kubernetes.io/version: 1.0.0 + name: graphql-gateway +spec: + internalTrafficPolicy: Cluster + ports: + - name: http + port: 4000 + protocol: TCP + targetPort: http + selector: + app.kubernetes.io/component: backend + app.kubernetes.io/instance: graphql-gateway + app.kubernetes.io/name: graphql-gateway + sessionAffinity: None + type: ClusterIP diff --git a/config/resources/parent-resources.yaml b/config/resources/parent-resources.yaml new file mode 100644 index 0000000..1dd7294 --- /dev/null +++ b/config/resources/parent-resources.yaml @@ -0,0 +1,9 @@ +# Parent resources that can scope GraphQL queries +# Users can query via /{apiGroup}/{version}/{kind}s/{name}/graphql +- apiGroup: resourcemanager.miloapis.com + version: v1alpha1 + kind: Organization + +- apiGroup: resourcemanager.miloapis.com + version: v1alpha1 + kind: Project diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..a659cd1 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,27 @@ +import eslint from '@eslint/js' +import tseslint from 'typescript-eslint' + +export default tseslint.config( + eslint.configs.recommended, + ...tseslint.configs.recommended, + { + ignores: ['dist/', 'node_modules/', 'src/mesh/gen/'], + }, + { + files: ['**/*.ts'], + languageOptions: { + parserOptions: { + projectService: true, + tsconfigRootDir: import.meta.dirname, + }, + }, + rules: { + '@typescript-eslint/no-unused-vars': [ + 'error', + { argsIgnorePattern: '^_', varsIgnorePattern: '^_' }, + ], + '@typescript-eslint/consistent-type-imports': 'error', + '@typescript-eslint/no-explicit-any': 'warn', + }, + } +) diff --git a/gateway.config.ts b/gateway.config.ts deleted file mode 100644 index 9aad401..0000000 --- a/gateway.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { defineConfig } from '@graphql-hive/gateway' - -export const gatewayConfig = defineConfig({ - cache: { - type: 'localforage', - driver: ['LOCALSTORAGE'], - name: 'DatumGraphQLGateway', - version: 1.0, - size: 4980736, - storeName: 'keyvaluepairs', - description: 'Cache storage for Datum GraphQL Gateway', - }, - responseCaching: { - session: request => request.headers.get('authentication'), // cache based on the authentication header - ttl: 1000 * 60 * 2, // 2 minutes - } -}) \ No newline at end of file diff --git a/mesh.config.ts b/mesh.config.ts deleted file mode 100644 index f31bb45..0000000 --- a/mesh.config.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { defineConfig } from '@graphql-mesh/compose-cli' -import { loadOpenAPISubgraph } from '@omnigraph/openapi' -import { readFileSync } from 'node:fs'; -import yaml from 'yaml'; - -// read apis.yaml -type ApiEntry = { group: string; version: string } -const apis = yaml.parse(readFileSync('./config/apis.yaml', 'utf8')) as ApiEntry[] - -const baseUrl = process.env.DATUM_BASE_URL - -export const composeConfig = defineConfig({ - subgraphs: apis.map(({ group, version }) => ({ - sourceHandler: loadOpenAPISubgraph( - // subgraph name e.g. IAM_V1ALPHA1 - `${group.split('.')[0].toUpperCase()}_${version.toUpperCase()}`, - { - source: `${baseUrl}/openapi/v3/apis/${group}/${version}`, - endpoint: baseUrl, - schemaHeaders: { - Authorization: 'Bearer {env.DATUM_TOKEN}', - }, - operationHeaders: { - Authorization: '{context.headers.authorization}', - }, - } - ), - })), -}) diff --git a/package-lock.json b/package-lock.json index cb881cf..3364099 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,21 +1,30 @@ { - "name": "graphql", + "name": "graphql-gateway", "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "graphql", + "name": "graphql-gateway", "version": "1.0.0", "license": "ISC", "dependencies": { "@graphql-hive/gateway": "^2.1.19", + "@graphql-hive/router-runtime": "^1.0.1", "@graphql-mesh/compose-cli": "^1.5.3", + "@kubernetes/client-node": "^1.4.0", "@omnigraph/openapi": "^0.109.23", "yaml": "^2.3.2" }, "devDependencies": { - "@types/node": "^24.10.1" + "@eslint/js": "^9.39.1", + "@types/node": "^24.10.1", + "eslint": "^9.39.1", + "prettier": "^3.7.3", + "tsc-alias": "^1.8.16", + "tsx": "^4.19.0", + "typescript": "^5.3.0", + "typescript-eslint": "^8.48.1" } }, "node_modules/@apollo/protobufjs": { @@ -101,15 +110,6 @@ "node": ">=20" } }, - "node_modules/@apollo/utils.keyvaluecache/node_modules/lru-cache": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", - "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, "node_modules/@apollo/utils.logger": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@apollo/utils.logger/-/utils.logger-3.0.0.tgz", @@ -316,23 +316,23 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.936.0.tgz", - "integrity": "sha512-0G73S2cDqYwJVvqL08eakj79MZG2QRaB56Ul8/Ps9oQxllr7DMI1IQ/N3j3xjxgpq/U36pkoFZ8aK1n7Sbr3IQ==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.940.0.tgz", + "integrity": "sha512-SdqJGWVhmIURvCSgkDditHRO+ozubwZk9aCX9MK8qxyOndhobCndW1ozl3hX9psvMAo9Q4bppjuqy/GHWpjB+A==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.936.0", + "@aws-sdk/core": "3.940.0", "@aws-sdk/middleware-host-header": "3.936.0", "@aws-sdk/middleware-logger": "3.936.0", "@aws-sdk/middleware-recursion-detection": "3.936.0", - "@aws-sdk/middleware-user-agent": "3.936.0", + "@aws-sdk/middleware-user-agent": "3.940.0", "@aws-sdk/region-config-resolver": "3.936.0", "@aws-sdk/types": "3.936.0", "@aws-sdk/util-endpoints": "3.936.0", "@aws-sdk/util-user-agent-browser": "3.936.0", - "@aws-sdk/util-user-agent-node": "3.936.0", + "@aws-sdk/util-user-agent-node": "3.940.0", "@smithy/config-resolver": "^4.4.3", "@smithy/core": "^3.18.5", "@smithy/fetch-http-handler": "^5.3.6", @@ -365,24 +365,24 @@ } }, "node_modules/@aws-sdk/client-sts": { - "version": "3.939.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.939.0.tgz", - "integrity": "sha512-tMWQkucImBu4E+D7VLe0zN3zgYlFkrWQS/oVICQwcSn02WyqKV1M+DxMC52sIo2nZPDCReBEhFTqoe5svxrB9g==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.940.0.tgz", + "integrity": "sha512-cjvvaEvvlH2yLx0evcG930Cel77mNlTCyD7uiq1juJkjnkgxDDPBa145oanxUl8WCa5UVDURpQ4ImlWqMyodLQ==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.936.0", - "@aws-sdk/credential-provider-node": "3.939.0", + "@aws-sdk/core": "3.940.0", + "@aws-sdk/credential-provider-node": "3.940.0", "@aws-sdk/middleware-host-header": "3.936.0", "@aws-sdk/middleware-logger": "3.936.0", "@aws-sdk/middleware-recursion-detection": "3.936.0", - "@aws-sdk/middleware-user-agent": "3.936.0", + "@aws-sdk/middleware-user-agent": "3.940.0", "@aws-sdk/region-config-resolver": "3.936.0", "@aws-sdk/types": "3.936.0", "@aws-sdk/util-endpoints": "3.936.0", "@aws-sdk/util-user-agent-browser": "3.936.0", - "@aws-sdk/util-user-agent-node": "3.936.0", + "@aws-sdk/util-user-agent-node": "3.940.0", "@smithy/config-resolver": "^4.4.3", "@smithy/core": "^3.18.5", "@smithy/fetch-http-handler": "^5.3.6", @@ -415,9 +415,9 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.936.0.tgz", - "integrity": "sha512-eGJ2ySUMvgtOziHhDRDLCrj473RJoL4J1vPjVM3NrKC/fF3/LoHjkut8AAnKmrW6a2uTzNKubigw8dEnpmpERw==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.940.0.tgz", + "integrity": "sha512-KsGD2FLaX5ngJao1mHxodIVU9VYd1E8810fcYiGwO1PFHDzf5BEkp6D9IdMeQwT8Q6JLYtiiT1Y/o3UCScnGoA==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.936.0", @@ -439,12 +439,12 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.936.0.tgz", - "integrity": "sha512-dKajFuaugEA5i9gCKzOaVy9uTeZcApE+7Z5wdcZ6j40523fY1a56khDAUYkCfwqa7sHci4ccmxBkAo+fW1RChA==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.940.0.tgz", + "integrity": "sha512-/G3l5/wbZYP2XEQiOoIkRJmlv15f1P3MSd1a0gz27lHEMrOJOGq66rF1Ca4OJLzapWt3Fy9BPrZAepoAX11kMw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.936.0", + "@aws-sdk/core": "3.940.0", "@aws-sdk/types": "3.936.0", "@smithy/property-provider": "^4.2.5", "@smithy/types": "^4.9.0", @@ -455,12 +455,12 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.936.0.tgz", - "integrity": "sha512-5FguODLXG1tWx/x8fBxH+GVrk7Hey2LbXV5h9SFzYCx/2h50URBm0+9hndg0Rd23+xzYe14F6SI9HA9c1sPnjg==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.940.0.tgz", + "integrity": "sha512-dOrc03DHElNBD6N9Okt4U0zhrG4Wix5QUBSZPr5VN8SvmjD9dkrrxOkkJaMCl/bzrW7kbQEp7LuBdbxArMmOZQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.936.0", + "@aws-sdk/core": "3.940.0", "@aws-sdk/types": "3.936.0", "@smithy/fetch-http-handler": "^5.3.6", "@smithy/node-http-handler": "^4.4.5", @@ -476,19 +476,19 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.939.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.939.0.tgz", - "integrity": "sha512-RHQ3xKz5pn5PMuoBYNYLMIdN4iU8gklxcsfJzOflSrwkhb8ukVRS9LjHXUtyE4qQ2J+dfj1QSr4PFOSxvzRZkA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.936.0", - "@aws-sdk/credential-provider-env": "3.936.0", - "@aws-sdk/credential-provider-http": "3.936.0", - "@aws-sdk/credential-provider-login": "3.939.0", - "@aws-sdk/credential-provider-process": "3.936.0", - "@aws-sdk/credential-provider-sso": "3.939.0", - "@aws-sdk/credential-provider-web-identity": "3.939.0", - "@aws-sdk/nested-clients": "3.939.0", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.940.0.tgz", + "integrity": "sha512-gn7PJQEzb/cnInNFTOaDoCN/hOKqMejNmLof1W5VW95Qk0TPO52lH8R4RmJPnRrwFMswOWswTOpR1roKNLIrcw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.940.0", + "@aws-sdk/credential-provider-env": "3.940.0", + "@aws-sdk/credential-provider-http": "3.940.0", + "@aws-sdk/credential-provider-login": "3.940.0", + "@aws-sdk/credential-provider-process": "3.940.0", + "@aws-sdk/credential-provider-sso": "3.940.0", + "@aws-sdk/credential-provider-web-identity": "3.940.0", + "@aws-sdk/nested-clients": "3.940.0", "@aws-sdk/types": "3.936.0", "@smithy/credential-provider-imds": "^4.2.5", "@smithy/property-provider": "^4.2.5", @@ -501,13 +501,13 @@ } }, "node_modules/@aws-sdk/credential-provider-login": { - "version": "3.939.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.939.0.tgz", - "integrity": "sha512-SbbzlsH2ZSsu2szyl494QOUS69LZgU8bYlFoDnUxy2L89YzLyR4D9wWlJzKCm4cS1eyNxPsOMkbVVL42JRvdZw==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.940.0.tgz", + "integrity": "sha512-fOKC3VZkwa9T2l2VFKWRtfHQPQuISqqNl35ZhcXjWKVwRwl/o7THPMkqI4XwgT2noGa7LLYVbWMwnsgSsBqglg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.936.0", - "@aws-sdk/nested-clients": "3.939.0", + "@aws-sdk/core": "3.940.0", + "@aws-sdk/nested-clients": "3.940.0", "@aws-sdk/types": "3.936.0", "@smithy/property-provider": "^4.2.5", "@smithy/protocol-http": "^5.3.5", @@ -520,17 +520,17 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.939.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.939.0.tgz", - "integrity": "sha512-OAwCqDNlKC3JmWb+N0zFfsPJJ8J5b8ZD63vWHdSf9c7ZlRKpFRD/uePqVMQKOq4h3DO0P0smAPk/m5p66oYLrw==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.940.0.tgz", + "integrity": "sha512-M8NFAvgvO6xZjiti5kztFiAYmSmSlG3eUfr4ZHSfXYZUA/KUdZU/D6xJyaLnU8cYRWBludb6K9XPKKVwKfqm4g==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.936.0", - "@aws-sdk/credential-provider-http": "3.936.0", - "@aws-sdk/credential-provider-ini": "3.939.0", - "@aws-sdk/credential-provider-process": "3.936.0", - "@aws-sdk/credential-provider-sso": "3.939.0", - "@aws-sdk/credential-provider-web-identity": "3.939.0", + "@aws-sdk/credential-provider-env": "3.940.0", + "@aws-sdk/credential-provider-http": "3.940.0", + "@aws-sdk/credential-provider-ini": "3.940.0", + "@aws-sdk/credential-provider-process": "3.940.0", + "@aws-sdk/credential-provider-sso": "3.940.0", + "@aws-sdk/credential-provider-web-identity": "3.940.0", "@aws-sdk/types": "3.936.0", "@smithy/credential-provider-imds": "^4.2.5", "@smithy/property-provider": "^4.2.5", @@ -543,12 +543,12 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.936.0.tgz", - "integrity": "sha512-GpA4AcHb96KQK2PSPUyvChvrsEKiLhQ5NWjeef2IZ3Jc8JoosiedYqp6yhZR+S8cTysuvx56WyJIJc8y8OTrLA==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.940.0.tgz", + "integrity": "sha512-pILBzt5/TYCqRsJb7vZlxmRIe0/T+FZPeml417EK75060ajDGnVJjHcuVdLVIeKoTKm9gmJc9l45gon6PbHyUQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.936.0", + "@aws-sdk/core": "3.940.0", "@aws-sdk/types": "3.936.0", "@smithy/property-provider": "^4.2.5", "@smithy/shared-ini-file-loader": "^4.4.0", @@ -560,14 +560,14 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.939.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.939.0.tgz", - "integrity": "sha512-gXWI+5xf+2n7kJSqYgDw1VkNLGRe2IYNCjOW/F04/7l8scxOP84SZ634OI9IR/8JWvFwMUjxH4JigPU0j6ZWzQ==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.940.0.tgz", + "integrity": "sha512-q6JMHIkBlDCOMnA3RAzf8cGfup+8ukhhb50fNpghMs1SNBGhanmaMbZSgLigBRsPQW7fOk2l8jnzdVLS+BB9Uw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.936.0", - "@aws-sdk/core": "3.936.0", - "@aws-sdk/token-providers": "3.939.0", + "@aws-sdk/client-sso": "3.940.0", + "@aws-sdk/core": "3.940.0", + "@aws-sdk/token-providers": "3.940.0", "@aws-sdk/types": "3.936.0", "@smithy/property-provider": "^4.2.5", "@smithy/shared-ini-file-loader": "^4.4.0", @@ -579,13 +579,13 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.939.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.939.0.tgz", - "integrity": "sha512-b/ySLC6DfWwZIAP2Glq9mkJJ/9LIDiKfYN2f9ZenQF+k2lO1i6/QtBuslvLmBJ+mNz0lPRSHW29alyqOpBgeCQ==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.940.0.tgz", + "integrity": "sha512-9QLTIkDJHHaYL0nyymO41H8g3ui1yz6Y3GmAN1gYQa6plXisuFBnGAbmKVj7zNvjWaOKdF0dV3dd3AFKEDoJ/w==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.936.0", - "@aws-sdk/nested-clients": "3.939.0", + "@aws-sdk/core": "3.940.0", + "@aws-sdk/nested-clients": "3.940.0", "@aws-sdk/types": "3.936.0", "@smithy/property-provider": "^4.2.5", "@smithy/shared-ini-file-loader": "^4.4.0", @@ -642,12 +642,12 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.936.0.tgz", - "integrity": "sha512-YB40IPa7K3iaYX0lSnV9easDOLPLh+fJyUDF3BH8doX4i1AOSsYn86L4lVldmOaSX+DwiaqKHpvk4wPBdcIPWw==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.940.0.tgz", + "integrity": "sha512-nJbLrUj6fY+l2W2rIB9P4Qvpiy0tnTdg/dmixRxrU1z3e8wBdspJlyE+AZN4fuVbeL6rrRrO/zxQC1bB3cw5IA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.936.0", + "@aws-sdk/core": "3.940.0", "@aws-sdk/types": "3.936.0", "@aws-sdk/util-endpoints": "3.936.0", "@smithy/core": "^3.18.5", @@ -660,23 +660,23 @@ } }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.939.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.939.0.tgz", - "integrity": "sha512-QeNsjHBCbsVRbgEt9FZNnrrbMTUuIYML3FX5xFgEJz4aI5uXwMBjYOi5TvAY+Y4CBHY4cp3dd/zSpHu0gX68GQ==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.940.0.tgz", + "integrity": "sha512-x0mdv6DkjXqXEcQj3URbCltEzW6hoy/1uIL+i8gExP6YKrnhiZ7SzuB4gPls2UOpK5UqLiqXjhRLfBb1C9i4Dw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.936.0", + "@aws-sdk/core": "3.940.0", "@aws-sdk/middleware-host-header": "3.936.0", "@aws-sdk/middleware-logger": "3.936.0", "@aws-sdk/middleware-recursion-detection": "3.936.0", - "@aws-sdk/middleware-user-agent": "3.936.0", + "@aws-sdk/middleware-user-agent": "3.940.0", "@aws-sdk/region-config-resolver": "3.936.0", "@aws-sdk/types": "3.936.0", "@aws-sdk/util-endpoints": "3.936.0", "@aws-sdk/util-user-agent-browser": "3.936.0", - "@aws-sdk/util-user-agent-node": "3.936.0", + "@aws-sdk/util-user-agent-node": "3.940.0", "@smithy/config-resolver": "^4.4.3", "@smithy/core": "^3.18.5", "@smithy/fetch-http-handler": "^5.3.6", @@ -725,13 +725,13 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.939.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.939.0.tgz", - "integrity": "sha512-paNeLZdr2/sk7XYMZz2OIqFFF3AkA5vUpKYahVDYmMeiMecQTqa/EptA3aVvWa4yWobEF0Kk+WSUPrOIGI3eQg==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.940.0.tgz", + "integrity": "sha512-k5qbRe/ZFjW9oWEdzLIa2twRVIEx7p/9rutofyrRysrtEnYh3HAWCngAnwbgKMoiwa806UzcTRx0TjyEpnKcCg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.936.0", - "@aws-sdk/nested-clients": "3.939.0", + "@aws-sdk/core": "3.940.0", + "@aws-sdk/nested-clients": "3.940.0", "@aws-sdk/types": "3.936.0", "@smithy/property-provider": "^4.2.5", "@smithy/shared-ini-file-loader": "^4.4.0", @@ -796,12 +796,12 @@ } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.936.0.tgz", - "integrity": "sha512-XOEc7PF9Op00pWV2AYCGDSu5iHgYjIO53Py2VUQTIvP7SRCaCsXmA33mjBvC2Ms6FhSyWNa4aK4naUGIz0hQcw==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.940.0.tgz", + "integrity": "sha512-dlD/F+L/jN26I8Zg5x0oDGJiA+/WEQmnSE27fi5ydvYnpfQLwThtQo9SsNS47XSR/SOULaaoC9qx929rZuo74A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.936.0", + "@aws-sdk/middleware-user-agent": "3.940.0", "@aws-sdk/types": "3.936.0", "@smithy/node-config-provider": "^4.3.5", "@smithy/types": "^4.9.0", @@ -927,6 +927,15 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, "node_modules/@babel/helper-globals": { "version": "7.28.0", "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", @@ -1237,18 +1246,6 @@ "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/@envelop/rate-limiter/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/@envelop/response-cache": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/@envelop/response-cache/-/response-cache-9.0.0.tgz", @@ -1270,15 +1267,6 @@ "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/@envelop/response-cache/node_modules/lru-cache": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", - "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, "node_modules/@envelop/types": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/@envelop/types/-/types-5.2.1.tgz", @@ -1292,230 +1280,859 @@ "node": ">=18.0.0" } }, - "node_modules/@escape.tech/graphql-armor-block-field-suggestions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@escape.tech/graphql-armor-block-field-suggestions/-/graphql-armor-block-field-suggestions-3.0.1.tgz", - "integrity": "sha512-pZ+5aFgGW/pUul7nDOZ3PoeWAd9kLDspQ0R+fpz2aTjdIT0yI+f+ZbAGeTVmr5RypRDwjwokG/HjWoxTYTcRwQ==", + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.0.tgz", + "integrity": "sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==", + "cpu": [ + "ppc64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "graphql": "^16.10.0" - }, + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "@envelop/core": "^5.2.3" + "node": ">=18" } }, - "node_modules/@escape.tech/graphql-armor-max-depth": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@escape.tech/graphql-armor-max-depth/-/graphql-armor-max-depth-2.4.2.tgz", - "integrity": "sha512-J9fbW1+W4u3GAcf19wwS0zrNGICCbWn/glvopCoC11Ga0reXvGwgr8EcyuHjTFLL7+pPvWAeVhP4qo6hybcB9w==", + "node_modules/@esbuild/android-arm": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.0.tgz", + "integrity": "sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ==", + "cpu": [ + "arm" + ], + "dev": true, "license": "MIT", - "dependencies": { - "graphql": "^16.10.0" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "@envelop/core": "^5.2.3", - "@escape.tech/graphql-armor-types": "0.7.0" + "node": ">=18" } }, - "node_modules/@escape.tech/graphql-armor-max-tokens": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@escape.tech/graphql-armor-max-tokens/-/graphql-armor-max-tokens-2.5.1.tgz", - "integrity": "sha512-XHui2npOz7Jn8shBZqfyeocWhdl0pUbKiaWmvbF+5rvNoRIGMgwMtaVhmf9ia8oGGbd+cx5EYo1v+oKHzIm79w==", + "node_modules/@esbuild/android-arm64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.0.tgz", + "integrity": "sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "graphql": "^16.10.0" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "@envelop/core": "^5.2.3", - "@escape.tech/graphql-armor-types": "0.7.0" + "node": ">=18" } }, - "node_modules/@escape.tech/graphql-armor-types": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@escape.tech/graphql-armor-types/-/graphql-armor-types-0.7.0.tgz", - "integrity": "sha512-RHxyyp6PDgS6NAPnnmB6JdmUJ6oqhpSHFbsglGWeCcnNzceA5AkQFpir7VIDbVyS8LNC1xhipOtk7f9ycrIemQ==", + "node_modules/@esbuild/android-x64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.0.tgz", + "integrity": "sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", "optional": true, - "dependencies": { - "graphql": "^16.0.0" + "os": [ + "android" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@fastify/busboy": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.2.0.tgz", - "integrity": "sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==", - "license": "MIT" - }, - "node_modules/@fastify/merge-json-schemas": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz", - "integrity": "sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.0.tgz", + "integrity": "sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@graphql-hive/core": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/@graphql-hive/core/-/core-0.13.2.tgz", - "integrity": "sha512-ck2XECtqXJ36lxSajFjtFrflFiG6maAIytYz0wYc/FAu8v5G2YAv7OBHz/pT2AQEttDr2N0/PThZ2Dh4n+kWtw==", + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.0.tgz", + "integrity": "sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@graphql-tools/utils": "^10.0.0", - "@whatwg-node/fetch": "^0.10.6", - "async-retry": "^1.3.3", - "js-md5": "0.8.3", - "lodash.sortby": "^4.7.0", - "tiny-lru": "^8.0.2" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "graphql": "^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + "node": ">=18" } }, - "node_modules/@graphql-hive/core/node_modules/tiny-lru": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-8.0.2.tgz", - "integrity": "sha512-ApGvZ6vVvTNdsmt676grvCkUCGwzG9IqXma5Z07xJgiC5L7akUMof5U8G2JTI9Rz/ovtVhJBlY6mNhEvtjzOIg==", - "license": "BSD-3-Clause", + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.0.tgz", + "integrity": "sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=6" + "node": ">=18" } }, - "node_modules/@graphql-hive/gateway": { - "version": "2.1.19", - "resolved": "https://registry.npmjs.org/@graphql-hive/gateway/-/gateway-2.1.19.tgz", - "integrity": "sha512-Oop0BOI+HBYl29a2q4j1Drv1ZYFRiGo+3LzT9OSDYWd/suUSMJW5tlNgTDYY2j+Vsz3hJk+BTPInpcaMyilcTg==", + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.0.tgz", + "integrity": "sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@commander-js/extra-typings": "^14.0.0", - "@envelop/core": "^5.4.0", - "@escape.tech/graphql-armor-block-field-suggestions": "^3.0.0", - "@escape.tech/graphql-armor-max-depth": "^2.4.2", - "@escape.tech/graphql-armor-max-tokens": "^2.5.0", - "@graphql-hive/gateway-runtime": "^2.3.5", - "@graphql-hive/importer": "^2.0.0", - "@graphql-hive/logger": "^1.0.9", - "@graphql-hive/plugin-aws-sigv4": "^2.0.17", - "@graphql-hive/plugin-opentelemetry": "^1.2.1", - "@graphql-hive/pubsub": "^2.1.1", - "@graphql-mesh/cache-cfw-kv": "^0.105.16", - "@graphql-mesh/cache-localforage": "^0.105.17", - "@graphql-mesh/cache-redis": "^0.105.2", - "@graphql-mesh/cache-upstash-redis": "^0.1.16", - "@graphql-mesh/cross-helpers": "^0.4.10", - "@graphql-mesh/hmac-upstream-signature": "^2.0.8", - "@graphql-mesh/plugin-http-cache": "^0.105.17", - "@graphql-mesh/plugin-jit": "^0.2.16", - "@graphql-mesh/plugin-jwt-auth": "^2.0.9", - "@graphql-mesh/plugin-prometheus": "^2.1.5", - "@graphql-mesh/plugin-rate-limit": "^0.105.5", - "@graphql-mesh/plugin-snapshot": "^0.104.16", - "@graphql-mesh/transport-http": "^1.0.12", - "@graphql-mesh/transport-http-callback": "^1.0.12", - "@graphql-mesh/transport-ws": "^2.0.12", - "@graphql-mesh/types": "^0.104.16", - "@graphql-mesh/utils": "^0.104.16", - "@graphql-tools/code-file-loader": "^8.1.26", - "@graphql-tools/graphql-file-loader": "^8.1.6", - "@graphql-tools/load": "^8.1.6", - "@graphql-tools/utils": "^10.10.3", - "@graphql-yoga/render-graphiql": "^5.16.2", - "@opentelemetry/api": "^1.9.0", - "@opentelemetry/api-logs": "^0.208.0", - "@opentelemetry/context-async-hooks": "^2.2.0", - "@opentelemetry/context-zone": "^2.2.0", - "@opentelemetry/core": "^2.2.0", - "@opentelemetry/exporter-jaeger": "^2.2.0", - "@opentelemetry/exporter-zipkin": "^2.2.0", - "@opentelemetry/propagator-b3": "^2.2.0", - "@opentelemetry/propagator-jaeger": "^2.2.0", - "@opentelemetry/sampler-jaeger-remote": "^0.208.0", - "@opentelemetry/sdk-logs": "^0.208.0", - "@opentelemetry/sdk-metrics": "^2.2.0", - "@opentelemetry/sdk-trace-base": "^2.2.0", - "commander": "^14.0.2", - "dotenv": "^17.2.3", - "graphql-ws": "^6.0.6", - "graphql-yoga": "^5.16.2", - "tslib": "^2.8.1", - "ws": "^8.18.3" - }, - "bin": { - "hive-gateway": "dist/bin.js" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "graphql": "^15.9.0 || ^16.9.0" + "node": ">=18" } }, - "node_modules/@graphql-hive/gateway-runtime": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@graphql-hive/gateway-runtime/-/gateway-runtime-2.3.5.tgz", - "integrity": "sha512-T9gyrL1S1B5Ns/l9XxaoLvB8acQz30E28g10kPs4EU2gIviHcInokDZ4qrFCJ2csQC9XeX/m/Wq9pEtOd09xKQ==", + "node_modules/@esbuild/linux-arm": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.0.tgz", + "integrity": "sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ==", + "cpu": [ + "arm" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@envelop/core": "^5.4.0", - "@envelop/disable-introspection": "^9.0.0", - "@envelop/generic-auth": "^11.0.0", - "@envelop/instrumentation": "^1.0.0", - "@graphql-hive/core": "^0.13.2", - "@graphql-hive/logger": "^1.0.9", - "@graphql-hive/pubsub": "^2.1.1", - "@graphql-hive/signal": "^2.0.0", - "@graphql-hive/yoga": "^0.42.4", - "@graphql-mesh/cross-helpers": "^0.4.10", - "@graphql-mesh/fusion-runtime": "^1.5.1", - "@graphql-mesh/hmac-upstream-signature": "^2.0.8", - "@graphql-mesh/plugin-response-cache": "^0.104.18", - "@graphql-mesh/transport-common": "^1.0.12", - "@graphql-mesh/types": "^0.104.16", - "@graphql-mesh/utils": "^0.104.16", - "@graphql-tools/batch-delegate": "^10.0.5", - "@graphql-tools/delegate": "^11.1.3", - "@graphql-tools/executor-common": "^1.0.5", - "@graphql-tools/executor-http": "^3.0.7", - "@graphql-tools/federation": "^4.2.3", - "@graphql-tools/stitch": "^10.1.3", - "@graphql-tools/utils": "^10.10.3", - "@graphql-tools/wrap": "^11.0.5", - "@graphql-yoga/plugin-apollo-usage-report": "^0.11.2", - "@graphql-yoga/plugin-csrf-prevention": "^3.16.2", - "@graphql-yoga/plugin-defer-stream": "^3.16.2", - "@graphql-yoga/plugin-persisted-operations": "^3.16.2", - "@types/node": "^24.10.1", - "@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-ws": "^6.0.6", - "graphql-yoga": "^5.16.2", - "tslib": "^2.8.1" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "graphql": "^15.9.0 || ^16.9.0" + "node": ">=18" } }, - "node_modules/@graphql-hive/importer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@graphql-hive/importer/-/importer-2.0.0.tgz", - "integrity": "sha512-ZZRZpYEHCd2sbR3cQ61A7SUmWjHdyx2ukL+N4Lg6HtOrLaUuI6dcywvp7ZFnuVNhDf0pmU/PAkE/NW0kXHJfow==", + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.0.tgz", + "integrity": "sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.0.tgz", + "integrity": "sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.0.tgz", + "integrity": "sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.0.tgz", + "integrity": "sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.0.tgz", + "integrity": "sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.0.tgz", + "integrity": "sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.0.tgz", + "integrity": "sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.0.tgz", + "integrity": "sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.0.tgz", + "integrity": "sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.0.tgz", + "integrity": "sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.0.tgz", + "integrity": "sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.0.tgz", + "integrity": "sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.0.tgz", + "integrity": "sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.0.tgz", + "integrity": "sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.0.tgz", + "integrity": "sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.0.tgz", + "integrity": "sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.0.tgz", + "integrity": "sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@escape.tech/graphql-armor-block-field-suggestions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@escape.tech/graphql-armor-block-field-suggestions/-/graphql-armor-block-field-suggestions-3.0.1.tgz", + "integrity": "sha512-pZ+5aFgGW/pUul7nDOZ3PoeWAd9kLDspQ0R+fpz2aTjdIT0yI+f+ZbAGeTVmr5RypRDwjwokG/HjWoxTYTcRwQ==", + "license": "MIT", + "dependencies": { + "graphql": "^16.10.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "@envelop/core": "^5.2.3" + } + }, + "node_modules/@escape.tech/graphql-armor-max-depth": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@escape.tech/graphql-armor-max-depth/-/graphql-armor-max-depth-2.4.2.tgz", + "integrity": "sha512-J9fbW1+W4u3GAcf19wwS0zrNGICCbWn/glvopCoC11Ga0reXvGwgr8EcyuHjTFLL7+pPvWAeVhP4qo6hybcB9w==", + "license": "MIT", + "dependencies": { + "graphql": "^16.10.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "@envelop/core": "^5.2.3", + "@escape.tech/graphql-armor-types": "0.7.0" + } + }, + "node_modules/@escape.tech/graphql-armor-max-tokens": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@escape.tech/graphql-armor-max-tokens/-/graphql-armor-max-tokens-2.5.1.tgz", + "integrity": "sha512-XHui2npOz7Jn8shBZqfyeocWhdl0pUbKiaWmvbF+5rvNoRIGMgwMtaVhmf9ia8oGGbd+cx5EYo1v+oKHzIm79w==", + "license": "MIT", + "dependencies": { + "graphql": "^16.10.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "@envelop/core": "^5.2.3", + "@escape.tech/graphql-armor-types": "0.7.0" + } + }, + "node_modules/@escape.tech/graphql-armor-types": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@escape.tech/graphql-armor-types/-/graphql-armor-types-0.7.0.tgz", + "integrity": "sha512-RHxyyp6PDgS6NAPnnmB6JdmUJ6oqhpSHFbsglGWeCcnNzceA5AkQFpir7VIDbVyS8LNC1xhipOtk7f9ycrIemQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "graphql": "^16.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "9.39.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz", + "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@fastify/busboy": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.2.0.tgz", + "integrity": "sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==", + "license": "MIT" + }, + "node_modules/@fastify/merge-json-schemas": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz", + "integrity": "sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + } + }, + "node_modules/@graphql-hive/core": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@graphql-hive/core/-/core-0.15.1.tgz", + "integrity": "sha512-yJAxBeUp4z0I7N81LWhsd1zkkHIcH89zjkZUzrnWpbLTIXr+08x3UZDtuFN2hFShBvTTskPU+5Cv6bmrtSd5SA==", + "license": "MIT", + "dependencies": { + "@graphql-hive/signal": "^2.0.0", + "@graphql-tools/utils": "^10.0.0", + "@whatwg-node/fetch": "^0.10.13", + "async-retry": "^1.3.3", + "events": "^3.3.0", + "js-md5": "0.8.3", + "lodash.sortby": "^4.7.0", + "tiny-lru": "^8.0.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@graphql-hive/gateway": { + "version": "2.1.21", + "resolved": "https://registry.npmjs.org/@graphql-hive/gateway/-/gateway-2.1.21.tgz", + "integrity": "sha512-z6V63LFgmrVQqI1AzNkfzRBiBk5q/mTd0O6qkFXPz6X/bdw5bwL0A5r+cHmSRWcUP3XmnVD72cjyaNuCp/+sZg==", + "license": "MIT", + "dependencies": { + "@commander-js/extra-typings": "^14.0.0", + "@envelop/core": "^5.4.0", + "@escape.tech/graphql-armor-block-field-suggestions": "^3.0.0", + "@escape.tech/graphql-armor-max-depth": "^2.4.2", + "@escape.tech/graphql-armor-max-tokens": "^2.5.0", + "@graphql-hive/gateway-runtime": "^2.3.7", + "@graphql-hive/importer": "^2.0.0", + "@graphql-hive/logger": "^1.0.9", + "@graphql-hive/plugin-aws-sigv4": "^2.0.19", + "@graphql-hive/plugin-opentelemetry": "^1.2.3", + "@graphql-hive/pubsub": "^2.1.1", + "@graphql-mesh/cache-cfw-kv": "^0.105.16", + "@graphql-mesh/cache-localforage": "^0.105.17", + "@graphql-mesh/cache-redis": "^0.105.2", + "@graphql-mesh/cache-upstash-redis": "^0.1.16", + "@graphql-mesh/cross-helpers": "^0.4.10", + "@graphql-mesh/hmac-upstream-signature": "^2.0.8", + "@graphql-mesh/plugin-http-cache": "^0.105.17", + "@graphql-mesh/plugin-jit": "^0.2.16", + "@graphql-mesh/plugin-jwt-auth": "^2.0.9", + "@graphql-mesh/plugin-prometheus": "^2.1.7", + "@graphql-mesh/plugin-rate-limit": "^0.105.5", + "@graphql-mesh/plugin-snapshot": "^0.104.16", + "@graphql-mesh/transport-http": "^1.0.12", + "@graphql-mesh/transport-http-callback": "^1.0.12", + "@graphql-mesh/transport-ws": "^2.0.12", + "@graphql-mesh/types": "^0.104.16", + "@graphql-mesh/utils": "^0.104.16", + "@graphql-tools/code-file-loader": "^8.1.26", + "@graphql-tools/graphql-file-loader": "^8.1.6", + "@graphql-tools/load": "^8.1.6", + "@graphql-tools/utils": "^10.10.3", + "@graphql-yoga/render-graphiql": "^5.16.2", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/api-logs": "^0.208.0", + "@opentelemetry/context-async-hooks": "^2.2.0", + "@opentelemetry/context-zone": "^2.2.0", + "@opentelemetry/core": "^2.2.0", + "@opentelemetry/exporter-jaeger": "^2.2.0", + "@opentelemetry/exporter-zipkin": "^2.2.0", + "@opentelemetry/propagator-b3": "^2.2.0", + "@opentelemetry/propagator-jaeger": "^2.2.0", + "@opentelemetry/sampler-jaeger-remote": "^0.208.0", + "@opentelemetry/sdk-logs": "^0.208.0", + "@opentelemetry/sdk-metrics": "^2.2.0", + "@opentelemetry/sdk-trace-base": "^2.2.0", + "commander": "^14.0.2", + "dotenv": "^17.2.3", + "graphql-ws": "^6.0.6", + "graphql-yoga": "^5.16.2", + "tslib": "^2.8.1", + "ws": "^8.18.3" + }, + "bin": { + "hive-gateway": "dist/bin.js" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "graphql": "^15.9.0 || ^16.9.0" + } + }, + "node_modules/@graphql-hive/gateway-runtime": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/@graphql-hive/gateway-runtime/-/gateway-runtime-2.3.7.tgz", + "integrity": "sha512-pPVdUzDCfJO3NLpttmB6I15ov+zvXeWxay2OMm9kU5g1amWedKcHF7Lbi+rKrn+WqLotAAgoQOmLu8oI91ApbA==", + "license": "MIT", + "dependencies": { + "@envelop/core": "^5.4.0", + "@envelop/disable-introspection": "^9.0.0", + "@envelop/generic-auth": "^11.0.0", + "@envelop/instrumentation": "^1.0.0", + "@graphql-hive/core": "^0.15.1", + "@graphql-hive/logger": "^1.0.9", + "@graphql-hive/pubsub": "^2.1.1", + "@graphql-hive/signal": "^2.0.0", + "@graphql-hive/yoga": "^0.43.1", + "@graphql-mesh/cross-helpers": "^0.4.10", + "@graphql-mesh/fusion-runtime": "^1.6.1", + "@graphql-mesh/hmac-upstream-signature": "^2.0.8", + "@graphql-mesh/plugin-response-cache": "^0.104.18", + "@graphql-mesh/transport-common": "^1.0.12", + "@graphql-mesh/types": "^0.104.16", + "@graphql-mesh/utils": "^0.104.16", + "@graphql-tools/batch-delegate": "^10.0.7", + "@graphql-tools/delegate": "^12.0.1", + "@graphql-tools/executor-common": "^1.0.5", + "@graphql-tools/executor-http": "^3.0.7", + "@graphql-tools/federation": "^4.2.5", + "@graphql-tools/stitch": "^10.1.5", + "@graphql-tools/utils": "^10.10.3", + "@graphql-tools/wrap": "^11.1.1", + "@graphql-yoga/plugin-apollo-usage-report": "^0.12.0", + "@graphql-yoga/plugin-csrf-prevention": "^3.16.2", + "@graphql-yoga/plugin-defer-stream": "^3.16.2", + "@graphql-yoga/plugin-persisted-operations": "^3.16.2", + "@types/node": "^24.10.1", + "@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-ws": "^6.0.6", + "graphql-yoga": "^5.16.2", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "graphql": "^15.9.0 || ^16.9.0" + } + }, + "node_modules/@graphql-hive/importer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@graphql-hive/importer/-/importer-2.0.0.tgz", + "integrity": "sha512-ZZRZpYEHCd2sbR3cQ61A7SUmWjHdyx2ukL+N4Lg6HtOrLaUuI6dcywvp7ZFnuVNhDf0pmU/PAkE/NW0kXHJfow==", "license": "MIT", "engines": { "node": ">=20.0.0" @@ -1546,13 +2163,13 @@ } }, "node_modules/@graphql-hive/plugin-aws-sigv4": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/@graphql-hive/plugin-aws-sigv4/-/plugin-aws-sigv4-2.0.17.tgz", - "integrity": "sha512-GI7yG7Wz2BnMsYK+yxnG098e1MQ1XNZkeYDPCUoSe34vNm0yeB0Q5jsSnt+NdvFXPxirqaqZlQdlJc8gnKcSSw==", + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/@graphql-hive/plugin-aws-sigv4/-/plugin-aws-sigv4-2.0.19.tgz", + "integrity": "sha512-1T+OCh5/OINCGb7BgIg2aB79byA2kdA5vGK2Tq7LYVgJhoD6I3/a2hcHVP1VJk8l50DXzfwmB4x/UgJxT1dQMg==", "license": "MIT", "dependencies": { "@aws-sdk/client-sts": "^3.931.0", - "@graphql-mesh/fusion-runtime": "^1.5.1", + "@graphql-mesh/fusion-runtime": "^1.6.1", "@whatwg-node/promise-helpers": "^1.3.2", "aws4": "1.13.2", "tslib": "^2.8.1" @@ -1565,13 +2182,13 @@ } }, "node_modules/@graphql-hive/plugin-opentelemetry": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@graphql-hive/plugin-opentelemetry/-/plugin-opentelemetry-1.2.1.tgz", - "integrity": "sha512-y9fsdq+mT4SBNleDWjSfMUrzXkUy5SUvLJG/0RXKAnU1jD5g0rmgOHxPi2L9odAqtb10fomR73iKW3YKIAoyNA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@graphql-hive/plugin-opentelemetry/-/plugin-opentelemetry-1.2.3.tgz", + "integrity": "sha512-sxUul8hY651hLDIOLIMsyuBm1JmKx5E/ZakHhi3CRsQlAxDs9yikmxIiL9EjA3SIwr1NIG8looKTQ4WUz/OZQA==", "license": "MIT", "dependencies": { - "@graphql-hive/core": "^0.13.2", - "@graphql-hive/gateway-runtime": "^2.3.5", + "@graphql-hive/core": "^0.15.1", + "@graphql-hive/gateway-runtime": "^2.3.7", "@graphql-hive/logger": "^1.0.9", "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/transport-common": "^1.0.12", @@ -1627,6 +2244,39 @@ } } }, + "node_modules/@graphql-hive/router-query-planner": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@graphql-hive/router-query-planner/-/router-query-planner-0.0.6.tgz", + "integrity": "sha512-AySFOqD6tcXGFDCoAT8yzD9T8zRHcxWktVqmOFmm2HdQJ4EXKItAadMsNlGIzsETnFaWhufaQR+3Jzu+bzW9yg==", + "license": "MIT", + "engines": { + "bun": "^1", + "node": ">=20" + } + }, + "node_modules/@graphql-hive/router-runtime": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@graphql-hive/router-runtime/-/router-runtime-1.1.1.tgz", + "integrity": "sha512-LiunHxUojdeDMA7i7dNI0+ZCtAPntYcWAWvHcSVrFH/KmcdzRbTYS9emlPcy7WLeGAS6+9LczAo5QnxgLDaRIQ==", + "license": "MIT", + "dependencies": { + "@envelop/core": "^5.4.0", + "@graphql-hive/router-query-planner": "^0.0.6", + "@graphql-mesh/fusion-runtime": "^1.6.1", + "@graphql-mesh/transport-common": "^1.0.12", + "@graphql-tools/executor": "^1.4.13", + "@graphql-tools/executor-common": "^1.0.5", + "@graphql-tools/federation": "^4.2.5", + "@graphql-tools/utils": "^10.10.3", + "@whatwg-node/promise-helpers": "^1.3.2" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, "node_modules/@graphql-hive/signal": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@graphql-hive/signal/-/signal-2.0.0.tgz", @@ -1637,12 +2287,12 @@ } }, "node_modules/@graphql-hive/yoga": { - "version": "0.42.5", - "resolved": "https://registry.npmjs.org/@graphql-hive/yoga/-/yoga-0.42.5.tgz", - "integrity": "sha512-mEcHnT94+XPLSdFF+MsEnavLYTgCMN6JGizliHE0JV7gEure6KuKDXSq2XKcvgoCeCBIIcEqlIYLajat46JtEw==", + "version": "0.43.1", + "resolved": "https://registry.npmjs.org/@graphql-hive/yoga/-/yoga-0.43.1.tgz", + "integrity": "sha512-twFG98ag8ENyFpdBv3eYIYwdrUpFMV+ePMICNDzl8axaKGLsUZQ5PsoNn6+6SYEX7wPYk4pmwqlawIhZTndntQ==", "license": "MIT", "dependencies": { - "@graphql-hive/core": "0.14.0", + "@graphql-hive/core": "0.15.1", "@graphql-yoga/plugin-persisted-operations": "^3.9.0" }, "engines": { @@ -1653,43 +2303,14 @@ "graphql-yoga": "^5.10.8" } }, - "node_modules/@graphql-hive/yoga/node_modules/@graphql-hive/core": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@graphql-hive/core/-/core-0.14.0.tgz", - "integrity": "sha512-Mu4cqRZNqNhrM39KDYZP6DpVx4J/KB1mAUaS4h7sa9tnFyEcybERXfF6GN+88Ksb9ccFH5LV/13JblDPgUrl5g==", - "license": "MIT", - "dependencies": { - "@graphql-tools/utils": "^10.0.0", - "@whatwg-node/fetch": "^0.10.6", - "async-retry": "^1.3.3", - "js-md5": "0.8.3", - "lodash.sortby": "^4.7.0", - "tiny-lru": "^8.0.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "graphql": "^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" - } - }, - "node_modules/@graphql-hive/yoga/node_modules/tiny-lru": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-8.0.2.tgz", - "integrity": "sha512-ApGvZ6vVvTNdsmt676grvCkUCGwzG9IqXma5Z07xJgiC5L7akUMof5U8G2JTI9Rz/ovtVhJBlY6mNhEvtjzOIg==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=6" - } - }, "node_modules/@graphql-mesh/cache-cfw-kv": { - "version": "0.105.16", - "resolved": "https://registry.npmjs.org/@graphql-mesh/cache-cfw-kv/-/cache-cfw-kv-0.105.16.tgz", - "integrity": "sha512-c/M33EatBvKCoXuMMF1yu4BaX9H/WJJrTX3v/qfL1k6vhlMpWiDycKMs1hmSSBXo6HV20EBHgj8Bol+bxdHu/Q==", + "version": "0.105.17", + "resolved": "https://registry.npmjs.org/@graphql-mesh/cache-cfw-kv/-/cache-cfw-kv-0.105.17.tgz", + "integrity": "sha512-lNG10wNcLg4jD/MZfGOZGlgPjt9Qk0w7a8QCyijZrS3vgatsE10x1u05tYmnkFwNAH1tf4xRPEgqSr6e5V9zFQ==", "license": "MIT", "dependencies": { - "@graphql-mesh/types": "^0.104.16", - "@graphql-mesh/utils": "^0.104.16", + "@graphql-mesh/types": "^0.104.17", + "@graphql-mesh/utils": "^0.104.17", "@whatwg-node/promise-helpers": "^1.0.0", "tslib": "^2.4.0" }, @@ -1701,13 +2322,13 @@ } }, "node_modules/@graphql-mesh/cache-inmemory-lru": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/@graphql-mesh/cache-inmemory-lru/-/cache-inmemory-lru-0.8.17.tgz", - "integrity": "sha512-mlvlnWvpkXBJLXQrGECOG6QMvIzET7RTcz84JfJJfoeleGwXWoz2U2giKVxRP2Cw+KFEVWFftog9tcHDlqdnWw==", + "version": "0.8.18", + "resolved": "https://registry.npmjs.org/@graphql-mesh/cache-inmemory-lru/-/cache-inmemory-lru-0.8.18.tgz", + "integrity": "sha512-G6q3+LXeD8OnwcHtz1pO1frBnFBZ0LZG6AIfoV5JQcoKVgU5CnDAGAJMikEJCsxVlpG8HI93sa0+OoDX+YjMgA==", "license": "MIT", "dependencies": { - "@graphql-mesh/types": "^0.104.16", - "@graphql-mesh/utils": "^0.104.16", + "@graphql-mesh/types": "^0.104.17", + "@graphql-mesh/utils": "^0.104.17", "@whatwg-node/disposablestack": "^0.0.6", "tslib": "^2.4.0" }, @@ -1719,14 +2340,14 @@ } }, "node_modules/@graphql-mesh/cache-localforage": { - "version": "0.105.17", - "resolved": "https://registry.npmjs.org/@graphql-mesh/cache-localforage/-/cache-localforage-0.105.17.tgz", - "integrity": "sha512-iDqpRdNpzA1QCp35XJOd+YRbUHqv0XS/wV3RQvlOZbMvlJQ6eQcHlK0m/bpcpULygaB4fypPCOiFFkOe5rcarg==", + "version": "0.105.18", + "resolved": "https://registry.npmjs.org/@graphql-mesh/cache-localforage/-/cache-localforage-0.105.18.tgz", + "integrity": "sha512-TLNCA7iF7eK2w3UeBfF/+z3on2orN+YlRHrMPKol1Crgf0z5DWn0BkRgcFXe/oazsORBEnXQgocT4Ed8Aoi/QA==", "license": "MIT", "dependencies": { - "@graphql-mesh/cache-inmemory-lru": "^0.8.17", - "@graphql-mesh/types": "^0.104.16", - "@graphql-mesh/utils": "^0.104.16", + "@graphql-mesh/cache-inmemory-lru": "^0.8.18", + "@graphql-mesh/types": "^0.104.17", + "@graphql-mesh/utils": "^0.104.17", "localforage": "1.10.0", "tslib": "^2.4.0" }, @@ -1738,14 +2359,14 @@ } }, "node_modules/@graphql-mesh/cache-redis": { - "version": "0.105.2", - "resolved": "https://registry.npmjs.org/@graphql-mesh/cache-redis/-/cache-redis-0.105.2.tgz", - "integrity": "sha512-kV/B3TLgkSOc8TS7wb7KHnSTbs4l0o3P0Oci5jlGBfwskrpvC5Ki1XQmxP1R595aIrc0RYm7owABgBuC+iP59A==", + "version": "0.105.3", + "resolved": "https://registry.npmjs.org/@graphql-mesh/cache-redis/-/cache-redis-0.105.3.tgz", + "integrity": "sha512-8tqc1dd8bJzsIsoFT7PhjlxGx5dd6YRRxVaehFZKXiAl04zaAxh4yr+wyvd+PkoYdSi8qZp0PhJbUBtUKwEegg==", "license": "MIT", "dependencies": { "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/string-interpolation": "0.5.9", - "@graphql-mesh/types": "^0.104.16", + "@graphql-mesh/types": "^0.104.17", "@opentelemetry/api": "^1.9.0", "@whatwg-node/disposablestack": "^0.0.6", "ioredis": "^5.3.2", @@ -1760,14 +2381,14 @@ } }, "node_modules/@graphql-mesh/cache-upstash-redis": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/@graphql-mesh/cache-upstash-redis/-/cache-upstash-redis-0.1.16.tgz", - "integrity": "sha512-6YJJRF0MCFyfTs6X13+/DLJ8igvvgx4TcHU/n1bZ1uu6k5JSjCrchx3wQw0cWc07fXp3WVrDGWJYHJlwxVpsUA==", + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/@graphql-mesh/cache-upstash-redis/-/cache-upstash-redis-0.1.17.tgz", + "integrity": "sha512-aVRIrR4dJacANLpwXKK5lG32MxTnkWM5JgIOIDCV0/Y5GxwT4XWU/2gJD/em4Zy17EIap2bfgjGKNLDUa/qANg==", "license": "MIT", "dependencies": { "@graphql-mesh/cross-helpers": "^0.4.9", - "@graphql-mesh/types": "^0.104.16", - "@upstash/redis": "^1.34.3", + "@graphql-mesh/types": "^0.104.17", + "@upstash/redis": "^1.35.7", "@whatwg-node/disposablestack": "^0.0.6", "tslib": "^2.4.0" }, @@ -1779,17 +2400,17 @@ } }, "node_modules/@graphql-mesh/compose-cli": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@graphql-mesh/compose-cli/-/compose-cli-1.5.3.tgz", - "integrity": "sha512-Wjw3Eg6MiQHw+BRh5XsJl86e4cIE8p4BeuKFrb+qr3NuoNjNfw5UzaBgAo33CoSr5Yp2LfN2Z4oRrIavRsxWQA==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@graphql-mesh/compose-cli/-/compose-cli-1.5.4.tgz", + "integrity": "sha512-VyUYX3Iww4PfTMM/ZoPYhyugtkz7QTHL8wGxwedOUUR5JEkLSEwma9Uq/jUZlpvOSLRlwdtPSQCehVk+fV26uw==", "license": "MIT", "dependencies": { "@commander-js/extra-typings": "^14.0.0", - "@graphql-mesh/fusion-composition": "^0.8.20", - "@graphql-mesh/include": "^0.3.16", + "@graphql-mesh/fusion-composition": "^0.8.21", + "@graphql-mesh/include": "^0.3.17", "@graphql-mesh/string-interpolation": "^0.5.9", - "@graphql-mesh/types": "^0.104.16", - "@graphql-mesh/utils": "^0.104.16", + "@graphql-mesh/types": "^0.104.17", + "@graphql-mesh/utils": "^0.104.17", "@graphql-tools/code-file-loader": "^8.1.7", "@graphql-tools/graphql-file-loader": "^8.0.5", "@graphql-tools/load": "^8.0.1", @@ -1827,12 +2448,12 @@ } }, "node_modules/@graphql-mesh/fusion-composition": { - "version": "0.8.20", - "resolved": "https://registry.npmjs.org/@graphql-mesh/fusion-composition/-/fusion-composition-0.8.20.tgz", - "integrity": "sha512-jl/RmxKJnvgqm7w2Py3PhNv2NwucWNnd2hKWaTTEKQaJOipJw6usy8DjTy+lSDNUyBMQV3tDPO7BamdqabTgCA==", + "version": "0.8.21", + "resolved": "https://registry.npmjs.org/@graphql-mesh/fusion-composition/-/fusion-composition-0.8.21.tgz", + "integrity": "sha512-RneNsLnhcRegLYYLxA1z5ebTDGJytDOPYIUfI475czl/+GjG2fs3Zh2jlI48aX9we01g1Bf2b2WjnxPtZv65Ww==", "license": "MIT", "dependencies": { - "@graphql-mesh/utils": "^0.104.16", + "@graphql-mesh/utils": "^0.104.17", "@graphql-tools/schema": "^10.0.5", "@graphql-tools/stitching-directives": "^4.0.0", "@graphql-tools/utils": "^10.8.0", @@ -1852,9 +2473,9 @@ } }, "node_modules/@graphql-mesh/fusion-runtime": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@graphql-mesh/fusion-runtime/-/fusion-runtime-1.5.1.tgz", - "integrity": "sha512-PvTOHWcXd4O8tGO0eaPFNlco1Fb3vuXfZPlg7Yna4Fu91H/pYN1JHkDextvBk0vWOCnlg1zfZyaDDddkN+PqZQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@graphql-mesh/fusion-runtime/-/fusion-runtime-1.6.1.tgz", + "integrity": "sha512-DppkD0uOwyHyfLJqvc/8TgNceLjPqrLkeEnThTiqPJU7Cqkbt+3M5YYMNQva6DOlKuTUn61eKaS78dvXDEAoFg==", "license": "MIT", "dependencies": { "@envelop/core": "^5.4.0", @@ -1865,14 +2486,14 @@ "@graphql-mesh/types": "^0.104.16", "@graphql-mesh/utils": "^0.104.16", "@graphql-tools/batch-execute": "^10.0.4", - "@graphql-tools/delegate": "^11.1.3", + "@graphql-tools/delegate": "^12.0.1", "@graphql-tools/executor": "^1.4.13", - "@graphql-tools/federation": "^4.2.3", + "@graphql-tools/federation": "^4.2.5", "@graphql-tools/merge": "^9.1.5", - "@graphql-tools/stitch": "^10.1.3", - "@graphql-tools/stitching-directives": "^4.0.5", + "@graphql-tools/stitch": "^10.1.5", + "@graphql-tools/stitching-directives": "^4.0.7", "@graphql-tools/utils": "^10.10.3", - "@graphql-tools/wrap": "^11.0.5", + "@graphql-tools/wrap": "^11.1.1", "@whatwg-node/disposablestack": "^0.0.6", "@whatwg-node/promise-helpers": "^1.3.2", "graphql-yoga": "^5.16.2", @@ -1908,16 +2529,16 @@ } }, "node_modules/@graphql-mesh/include": { - "version": "0.3.16", - "resolved": "https://registry.npmjs.org/@graphql-mesh/include/-/include-0.3.16.tgz", - "integrity": "sha512-zyMZAKMwzOBB6EXButN1U4tmV4ZzHBVEvh49rWyb6TprCbcgVKhCm5WJuj0/EyA+yDGW+oJFbVe9P0Q7QyBaCQ==", + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@graphql-mesh/include/-/include-0.3.17.tgz", + "integrity": "sha512-urQtB+WKPE9Wk3aNcwu8NsNDWBKyzChC+38OGEnp+fWD80Gg3ROcrVj8fKtaH1CqP26OjhKW+rwLrLqYYVPi+w==", "license": "MIT", "dependencies": { - "@graphql-mesh/utils": "^0.104.16", + "@graphql-mesh/utils": "^0.104.17", "dotenv": "^17.0.0", "get-tsconfig": "^4.7.6", "jiti": "^2.0.0", - "sucrase": "^3.35.0" + "sucrase": "^3.35.1" }, "engines": { "node": ">=16.0.0" @@ -1927,13 +2548,13 @@ } }, "node_modules/@graphql-mesh/plugin-http-cache": { - "version": "0.105.17", - "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-http-cache/-/plugin-http-cache-0.105.17.tgz", - "integrity": "sha512-Ilwf1tof/nc3Un2IXSVCvjBUD5t+xBI8/2mhjCDyBiR1qsWVm5DylYB0syo9z+SAQq1eFJEdqbn0BwpsBxmN8g==", + "version": "0.105.18", + "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-http-cache/-/plugin-http-cache-0.105.18.tgz", + "integrity": "sha512-Zhl/ll+cRWnPP1b4y2RzkSW3KR6ui1izt8naDUs1DE1Yo1paGPycOr3o3YQ8DANWF2lj78c/HJ8fHjvOBbYwAw==", "license": "MIT", "dependencies": { - "@graphql-mesh/types": "^0.104.16", - "@graphql-mesh/utils": "^0.104.16", + "@graphql-mesh/types": "^0.104.17", + "@graphql-mesh/utils": "^0.104.17", "@whatwg-node/fetch": "^0.10.6", "@whatwg-node/promise-helpers": "^1.0.0", "http-cache-semantics": "^4.1.1", @@ -1947,13 +2568,13 @@ } }, "node_modules/@graphql-mesh/plugin-jit": { - "version": "0.2.16", - "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-jit/-/plugin-jit-0.2.16.tgz", - "integrity": "sha512-3aoE+NcJSG9s4ARAAVCOAiSOhM3V+O8kki6ptDPL/GsCOzvaYigwG0dDtpLBBcCnRwL5BXPL2VFj97nQHwqqvg==", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-jit/-/plugin-jit-0.2.17.tgz", + "integrity": "sha512-UuI3fGfuyAN7+itXwJXa0vxhjnEvfJpmGRjqE16FJTVepT1+OFoIA0Nignj1+xVhkppUkoNN7e93L9dOQM2TGA==", "license": "MIT", "dependencies": { "@envelop/core": "^5.3.2", - "@graphql-mesh/utils": "^0.104.16", + "@graphql-mesh/utils": "^0.104.17", "@graphql-tools/utils": "^10.8.0", "graphql-jit": "^0.8.7", "tslib": "^2.4.0" @@ -1984,12 +2605,12 @@ } }, "node_modules/@graphql-mesh/plugin-prometheus": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-prometheus/-/plugin-prometheus-2.1.5.tgz", - "integrity": "sha512-JRCyuHSvpe/J5W+z2XUqzgh8txiUFW89dpRc+/MDWM2w2tFM5IAmDfmxJpa5673nbQWWHdchphTRHIFO3JoHJQ==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-prometheus/-/plugin-prometheus-2.1.7.tgz", + "integrity": "sha512-bJcRikCA1Cy/BBG1R2DSSVz0RbXTHg5lTqdlBvo6G0vFbBrQYp/snkhx2YV8aMAhudNKuDrMr9t4AuezFrUibQ==", "license": "MIT", "dependencies": { - "@graphql-hive/gateway-runtime": "^2.3.5", + "@graphql-hive/gateway-runtime": "^2.3.7", "@graphql-hive/logger": "^1.0.9", "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/types": "^0.104.16", @@ -2008,16 +2629,16 @@ } }, "node_modules/@graphql-mesh/plugin-rate-limit": { - "version": "0.105.5", - "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-rate-limit/-/plugin-rate-limit-0.105.5.tgz", - "integrity": "sha512-CwL5xVkzPyUrqEceMWonBIAW2rf5tXSYbzwJBs01CtVl9Iz97i4L/os++GDmXVrN6YzIUVJjVZc+jhRZwTr9QA==", + "version": "0.105.6", + "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-rate-limit/-/plugin-rate-limit-0.105.6.tgz", + "integrity": "sha512-WJAZGV7bL39dvYzel18dtSJVPCcNpdTN7qcXxappm1U6S9Cs3y7l0xku+Dm1n9M7Vm/L/LbNyHolX+EQmmIkoA==", "license": "MIT", "dependencies": { "@envelop/rate-limiter": "^9.0.0", "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/string-interpolation": "0.5.9", - "@graphql-mesh/types": "^0.104.16", - "@graphql-mesh/utils": "^0.104.16", + "@graphql-mesh/types": "^0.104.17", + "@graphql-mesh/utils": "^0.104.17", "@graphql-tools/utils": "^10.8.0", "@whatwg-node/promise-helpers": "^1.0.0", "tslib": "^2.4.0" @@ -2030,17 +2651,17 @@ } }, "node_modules/@graphql-mesh/plugin-response-cache": { - "version": "0.104.18", - "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-response-cache/-/plugin-response-cache-0.104.18.tgz", - "integrity": "sha512-/gUYGjQB96hFlqCnbq2jzRLMmuFq/G7ltne1I3YsBGncx7iZIQfkZhHoz6x3i1Lvt1Qo4JqryfPu9b/77lsSfg==", + "version": "0.104.19", + "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-response-cache/-/plugin-response-cache-0.104.19.tgz", + "integrity": "sha512-siJCDnMTZgo7mlKm3PZ9C/iDjLSSO/8vsZqtgjEyQoXG5hVjU+zIBj0rXcSnQBQfJnHx0FMuTidm4nY5g2cUDw==", "license": "MIT", "dependencies": { "@envelop/core": "^5.3.2", "@envelop/response-cache": "^9.0.0", "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/string-interpolation": "0.5.9", - "@graphql-mesh/types": "^0.104.16", - "@graphql-mesh/utils": "^0.104.16", + "@graphql-mesh/types": "^0.104.17", + "@graphql-mesh/utils": "^0.104.17", "@graphql-tools/utils": "^10.6.2", "@graphql-yoga/plugin-response-cache": "^3.13.1", "@whatwg-node/promise-helpers": "^1.0.0", @@ -2056,15 +2677,15 @@ } }, "node_modules/@graphql-mesh/plugin-snapshot": { - "version": "0.104.16", - "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-snapshot/-/plugin-snapshot-0.104.16.tgz", - "integrity": "sha512-7C49jE/bR1EfYX66mfC3227DWtUGI2J4zSlDuTg/q3ThXT2Y6Mk5DIQGVRdqzMwBg1/u9HiKWLzqjoJZwO1qYA==", + "version": "0.104.17", + "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-snapshot/-/plugin-snapshot-0.104.17.tgz", + "integrity": "sha512-E0s4GWDyDCo8Erba6cJpfxIE1teRtGU2vrzADC44KayQB4qsIcpI45SBK+E2fyb5HhpPdSIePZfjoyNvY0prLA==", "license": "MIT", "dependencies": { "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/string-interpolation": "0.5.9", - "@graphql-mesh/types": "^0.104.16", - "@graphql-mesh/utils": "^0.104.16", + "@graphql-mesh/types": "^0.104.17", + "@graphql-mesh/utils": "^0.104.17", "@whatwg-node/fetch": "^0.10.6", "minimatch": "^10.0.3", "tslib": "^2.4.0" @@ -2167,16 +2788,16 @@ } }, "node_modules/@graphql-mesh/transport-rest": { - "version": "0.9.17", - "resolved": "https://registry.npmjs.org/@graphql-mesh/transport-rest/-/transport-rest-0.9.17.tgz", - "integrity": "sha512-kaqfYrxLMFgLeiu0cXWPfrY7WXxjWmdPxgGGLDhKZKuekIj47LdJXwOWNua8l8f8uaxZcwF+qYDyZcaIV2MnIw==", + "version": "0.9.18", + "resolved": "https://registry.npmjs.org/@graphql-mesh/transport-rest/-/transport-rest-0.9.18.tgz", + "integrity": "sha512-Wdi8iwmB8chLWXrSxnXNqK/UgGPHwLcwQyUeMqBmw29l0fWbpjAYfRIXXy4ja1tOVeBpWZTlE83sUfUDEFWSww==", "license": "MIT", "dependencies": { "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/string-interpolation": "^0.5.9", "@graphql-mesh/transport-common": "^1.0.0", - "@graphql-mesh/types": "^0.104.16", - "@graphql-mesh/utils": "^0.104.16", + "@graphql-mesh/types": "^0.104.17", + "@graphql-mesh/utils": "^0.104.17", "@graphql-tools/utils": "^10.8.0", "@whatwg-node/fetch": "^0.10.6", "dset": "^3.1.3", @@ -2218,14 +2839,14 @@ } }, "node_modules/@graphql-mesh/types": { - "version": "0.104.16", - "resolved": "https://registry.npmjs.org/@graphql-mesh/types/-/types-0.104.16.tgz", - "integrity": "sha512-oYej+bLrxoftXZUwzag2Kdpd7bfOwJalfBpST56ol+zAlys/86S9vviEuyy6y3GDUL4ntyBAfpxmjJkPQROtOw==", + "version": "0.104.17", + "resolved": "https://registry.npmjs.org/@graphql-mesh/types/-/types-0.104.17.tgz", + "integrity": "sha512-lyGfiRxQUw4R10moQ/S5JTtsyUmlwnbdp/6jUjxF3jLVZPIxVYYtK1SxUCKPi9BpCipqX5+o06W7Q+522X4QVA==", "license": "MIT", "dependencies": { "@graphql-hive/pubsub": "^2.1.1", "@graphql-tools/batch-delegate": "^10.0.0", - "@graphql-tools/delegate": "^11.0.0", + "@graphql-tools/delegate": "^12.0.0", "@graphql-tools/utils": "^10.8.0", "@graphql-typed-document-node/core": "^3.2.0", "@repeaterjs/repeater": "^3.0.6", @@ -2240,17 +2861,17 @@ } }, "node_modules/@graphql-mesh/utils": { - "version": "0.104.16", - "resolved": "https://registry.npmjs.org/@graphql-mesh/utils/-/utils-0.104.16.tgz", - "integrity": "sha512-EITT4WfQjGrO6iTIQYcVs6tELTaL9d7dZIWV3/0c8SOECcGS9bzB5aGJtxJ74Qc8TpwpgCwJSxXny6FG90ThpQ==", + "version": "0.104.17", + "resolved": "https://registry.npmjs.org/@graphql-mesh/utils/-/utils-0.104.17.tgz", + "integrity": "sha512-KBaqeIaDXp6kNKUeZJbqc1DpI687dPj+d8TvMh04Xnp1pah8pf7rXOuGyhF6rLL4Zc+tWAvg8UPZRhHQJ8ED2g==", "license": "MIT", "dependencies": { "@envelop/instrumentation": "^1.0.0", "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/string-interpolation": "^0.5.9", - "@graphql-mesh/types": "^0.104.16", + "@graphql-mesh/types": "^0.104.17", "@graphql-tools/batch-delegate": "^10.0.0", - "@graphql-tools/delegate": "^11.0.0", + "@graphql-tools/delegate": "^12.0.0", "@graphql-tools/utils": "^10.8.0", "@graphql-tools/wrap": "^11.0.0", "@whatwg-node/disposablestack": "^0.0.6", @@ -2270,13 +2891,22 @@ "graphql": "*" } }, + "node_modules/@graphql-mesh/utils/node_modules/tiny-lru": { + "version": "11.4.5", + "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-11.4.5.tgz", + "integrity": "sha512-hkcz3FjNJfKXjV4mjQ1OrXSLAehg8Hw+cEZclOVT+5c/cWQWImQ9wolzTjth+dmmDe++p3bme3fTxz6Q4Etsqw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, "node_modules/@graphql-tools/batch-delegate": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/@graphql-tools/batch-delegate/-/batch-delegate-10.0.5.tgz", - "integrity": "sha512-x7lilhSCcyaDD7nAwyxNygk92O+4/1uiGV6yRIyGC63bQ0a1yN2XldNhcf6I8DnDVOshyKJgkMhiWHwXICJDUA==", + "version": "10.0.7", + "resolved": "https://registry.npmjs.org/@graphql-tools/batch-delegate/-/batch-delegate-10.0.7.tgz", + "integrity": "sha512-HBmYj09nkQBWSy8ahJtBNKy724PZelp6eDEHOep+mrkNg6i1Ql8zjlSixTBwG/Koyr9/NMshKJc1TWZA80T56A==", "license": "MIT", "dependencies": { - "@graphql-tools/delegate": "^11.1.3", + "@graphql-tools/delegate": "^12.0.1", "@graphql-tools/utils": "^10.10.3", "@whatwg-node/promise-helpers": "^1.3.2", "dataloader": "^2.2.3", @@ -2308,13 +2938,13 @@ } }, "node_modules/@graphql-tools/code-file-loader": { - "version": "8.1.26", - "resolved": "https://registry.npmjs.org/@graphql-tools/code-file-loader/-/code-file-loader-8.1.26.tgz", - "integrity": "sha512-VamhpBEbrABCjtJqEFBUrHBBVX4Iw7q4Ga8H3W0P7mO+sE1HuTfpWirSdBLlhc6nGcSyTb6FA1mEgGjjUASIHA==", + "version": "8.1.27", + "resolved": "https://registry.npmjs.org/@graphql-tools/code-file-loader/-/code-file-loader-8.1.27.tgz", + "integrity": "sha512-q3GDbm+7m3DiAnqxa+lYMgYZd49+ez6iGFfXHmzP6qAnf5WlBxRNKNjNVuxOgoV30DCr+vOJfoXeU7VN1qqGWQ==", "license": "MIT", "dependencies": { - "@graphql-tools/graphql-tag-pluck": "8.3.25", - "@graphql-tools/utils": "^10.10.3", + "@graphql-tools/graphql-tag-pluck": "8.3.26", + "@graphql-tools/utils": "^10.11.0", "globby": "^11.0.3", "tslib": "^2.4.0", "unixify": "^1.0.0" @@ -2327,9 +2957,9 @@ } }, "node_modules/@graphql-tools/delegate": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-11.1.3.tgz", - "integrity": "sha512-4Fd4s0T4Cv+Hl+4NXRUWtedhQjTOfpPP8MQJOtfX4jnBmwAP88/EhKIIPDssSFPGiyJkL5MLKPVJzVgY4ezDTg==", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-12.0.1.tgz", + "integrity": "sha512-azICGOxSlLbNGwQmcdr8RQHGazk3xGolTnhHcIidew+44XcnIbaF2ms91Bqs3gCT4PEU6Tn1ygl0Mwe/w0z2+g==", "license": "MIT", "dependencies": { "@graphql-tools/batch-execute": "^10.0.4", @@ -2349,12 +2979,12 @@ } }, "node_modules/@graphql-tools/executor": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor/-/executor-1.4.13.tgz", - "integrity": "sha512-2hTSRfH2kb4ua0ANOV/K6xUoCZsHAE6igE1bimtWUK7v0bowPIxGRKRPpF8JLbImpsJuTCC4HGOCMy7otg3FIQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor/-/executor-1.5.0.tgz", + "integrity": "sha512-3HzAxfexmynEWwRB56t/BT+xYKEYLGPvJudR1jfs+XZX8bpfqujEhqVFoxmkpEE8BbFcKuBNoQyGkTi1eFJ+hA==", "license": "MIT", "dependencies": { - "@graphql-tools/utils": "^10.10.3", + "@graphql-tools/utils": "^10.11.0", "@graphql-typed-document-node/core": "^3.2.0", "@repeaterjs/repeater": "^3.0.4", "@whatwg-node/disposablestack": "^0.0.6", @@ -2429,19 +3059,19 @@ } }, "node_modules/@graphql-tools/federation": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@graphql-tools/federation/-/federation-4.2.3.tgz", - "integrity": "sha512-lKv2QIgAnYzN7tvm0M9tgWV+CL+JidUwZ3PPyGMydUTftB950PkwYI+AmdcZo5Kp+1zmuoyPgAjWphtocSBkzA==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@graphql-tools/federation/-/federation-4.2.5.tgz", + "integrity": "sha512-4rXNikiHONACIUgozSX2hgcZKhvZz5JPC5BVV/Jdzntfq/JznrFKbJ0PH1B2u5teXhKzh7K+1P1P32fj0z3L8A==", "license": "MIT", "dependencies": { - "@graphql-tools/delegate": "^11.1.3", + "@graphql-tools/delegate": "^12.0.1", "@graphql-tools/executor": "^1.4.13", "@graphql-tools/executor-http": "^3.0.7", "@graphql-tools/merge": "^9.1.5", "@graphql-tools/schema": "^10.0.29", - "@graphql-tools/stitch": "^10.1.3", + "@graphql-tools/stitch": "^10.1.5", "@graphql-tools/utils": "^10.10.3", - "@graphql-tools/wrap": "^11.0.5", + "@graphql-tools/wrap": "^11.1.1", "@graphql-yoga/typed-event-target": "^3.0.2", "@whatwg-node/disposablestack": "^0.0.6", "@whatwg-node/events": "^0.1.2", @@ -2457,13 +3087,13 @@ } }, "node_modules/@graphql-tools/graphql-file-loader": { - "version": "8.1.7", - "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-file-loader/-/graphql-file-loader-8.1.7.tgz", - "integrity": "sha512-IE7tDdxVIt8OCPn3bdjz+NwQmUAZbLB33p6yNP26Az1RRBuxrfKb4vU+1yh9sF8lQUUyLC0+V/gz32xA3dsLWg==", + "version": "8.1.8", + "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-file-loader/-/graphql-file-loader-8.1.8.tgz", + "integrity": "sha512-dZi9Cw+NWEzJAqzIUON9qjZfjebjcoT4H6jqLkEoAv6kRtTq52m4BLXgFWjMHU7PNLE9OOHB9St7UeZQL+GYrw==", "license": "MIT", "dependencies": { - "@graphql-tools/import": "7.1.7", - "@graphql-tools/utils": "^10.10.3", + "@graphql-tools/import": "7.1.8", + "@graphql-tools/utils": "^10.11.0", "globby": "^11.0.3", "tslib": "^2.4.0", "unixify": "^1.0.0" @@ -2476,9 +3106,9 @@ } }, "node_modules/@graphql-tools/graphql-tag-pluck": { - "version": "8.3.25", - "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-8.3.25.tgz", - "integrity": "sha512-b8oTBe0mDQDh3zPcKCkaTPmjLv1TJslBUKXPNLfu5CWS2+gL8Z/z0UuAhCe5gTveuKDJYjkEO7xcct9JfcDi4g==", + "version": "8.3.26", + "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-8.3.26.tgz", + "integrity": "sha512-hLsX++KA3YR/PnNJGBq1weSAY8XUUAQFfOSHanLHA2qs5lcNgU6KWbiLiRsJ/B/ZNi2ZO687dhzeZ4h4Yt0V6Q==", "license": "MIT", "dependencies": { "@babel/core": "^7.26.10", @@ -2486,7 +3116,7 @@ "@babel/plugin-syntax-import-assertions": "^7.26.0", "@babel/traverse": "^7.26.10", "@babel/types": "^7.26.10", - "@graphql-tools/utils": "^10.10.3", + "@graphql-tools/utils": "^10.11.0", "tslib": "^2.4.0" }, "engines": { @@ -2497,13 +3127,13 @@ } }, "node_modules/@graphql-tools/import": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/@graphql-tools/import/-/import-7.1.7.tgz", - "integrity": "sha512-AKhJrNugn2TlPylmQ4pqbs2w82j0Bwi54Tlpc0TQoO1F942kjxoXqNGpxgXbFgdk+1Ds1pHmpWzQgbmYwlnAgw==", + "version": "7.1.8", + "resolved": "https://registry.npmjs.org/@graphql-tools/import/-/import-7.1.8.tgz", + "integrity": "sha512-aUKHMbaeHhCkS867mNCk9sJuvd9xE3Ocr+alwdvILkDxHf7Xaumx4mK8tN9FAXeKhQWGGD5QpkIBnUzt2xoX/A==", "license": "MIT", "dependencies": { - "@graphql-tools/utils": "^10.10.3", - "@theguild/federation-composition": "^0.20.2", + "@graphql-tools/utils": "^10.11.0", + "@theguild/federation-composition": "^0.21.0", "resolve-from": "5.0.0", "tslib": "^2.4.0" }, @@ -2514,14 +3144,32 @@ "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, + "node_modules/@graphql-tools/import/node_modules/@theguild/federation-composition": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@theguild/federation-composition/-/federation-composition-0.21.0.tgz", + "integrity": "sha512-cdQ9rDEtBpT553DLLtcsSjtSDIadibIxAD3K5r0eUuDOfxx+es7Uk+aOucfqMlNOM3eybsgJN3T2SQmEsINwmw==", + "license": "MIT", + "dependencies": { + "constant-case": "^3.0.4", + "debug": "4.4.3", + "json5": "^2.2.3", + "lodash.sortby": "^4.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "graphql": "^16.0.0" + } + }, "node_modules/@graphql-tools/load": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@graphql-tools/load/-/load-8.1.6.tgz", - "integrity": "sha512-/bUYqGdB2Y6BflW42IjmauBDzxjec3LQmVAuImVGeiOqw1Rca/DDP7KRQe3vEv8yf/xMVj/PkIl+YRjoo12YxA==", + "version": "8.1.7", + "resolved": "https://registry.npmjs.org/@graphql-tools/load/-/load-8.1.7.tgz", + "integrity": "sha512-RxrHOC4vVI50+Q1mwgpmTVCB/UDDYVEGD/g/hP3tT2BW9F3rJ7Z3Lmt/nGfPQuWPao3w6vgJ9oSAWtism7CU5w==", "license": "MIT", "dependencies": { - "@graphql-tools/schema": "^10.0.29", - "@graphql-tools/utils": "^10.10.3", + "@graphql-tools/schema": "^10.0.30", + "@graphql-tools/utils": "^10.11.0", "p-limit": "3.1.0", "tslib": "^2.4.0" }, @@ -2533,12 +3181,12 @@ } }, "node_modules/@graphql-tools/merge": { - "version": "9.1.5", - "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-9.1.5.tgz", - "integrity": "sha512-eVcir6nCcOC/Wzv7ZAng3xec3dj6FehE8+h9TvgvUyrDEKVMdFfrO6etRFZ2hucWVcY8S6drx7zQx04N4lPM8Q==", + "version": "9.1.6", + "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-9.1.6.tgz", + "integrity": "sha512-bTnP+4oom4nDjmkS3Ykbe+ljAp/RIiWP3R35COMmuucS24iQxGLa9Hn8VMkLIoaoPxgz6xk+dbC43jtkNsFoBw==", "license": "MIT", "dependencies": { - "@graphql-tools/utils": "^10.10.3", + "@graphql-tools/utils": "^10.11.0", "tslib": "^2.4.0" }, "engines": { @@ -2549,13 +3197,13 @@ } }, "node_modules/@graphql-tools/schema": { - "version": "10.0.29", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-10.0.29.tgz", - "integrity": "sha512-+Htiupnq6U/AWOEAJerIOGT1pAf4u43Q3n2JmFpqFfYJchz6sKWZ7L9Lpe/NusaaUQty/IOF+eQlNFypEaWxhg==", + "version": "10.0.30", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-10.0.30.tgz", + "integrity": "sha512-yPXU17uM/LR90t92yYQqn9mAJNOVZJc0nQtYeZyZeQZeQjwIGlTubvvoDL0fFVk+wZzs4YQOgds2NwSA4npodA==", "license": "MIT", "dependencies": { - "@graphql-tools/merge": "^9.1.5", - "@graphql-tools/utils": "^10.10.3", + "@graphql-tools/merge": "^9.1.6", + "@graphql-tools/utils": "^10.11.0", "tslib": "^2.4.0" }, "engines": { @@ -2566,18 +3214,18 @@ } }, "node_modules/@graphql-tools/stitch": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/@graphql-tools/stitch/-/stitch-10.1.3.tgz", - "integrity": "sha512-0jxLZJiO2rMFKUtLr6yIYh40w4/IEUQxAPnbaw9T7FCEEbhPiJFes895XJXnR7FCFrtOPSEGSZUXDEYnhbj8nA==", + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/@graphql-tools/stitch/-/stitch-10.1.5.tgz", + "integrity": "sha512-kd4/DMozio7honno4RZMIUl8KiGyeE0XR0/IPYXWoaOOIb+TH/RWddNkKOCR2Lh2rK6Ihy83dGglrrCS1lST8w==", "license": "MIT", "dependencies": { - "@graphql-tools/batch-delegate": "^10.0.5", - "@graphql-tools/delegate": "^11.1.3", + "@graphql-tools/batch-delegate": "^10.0.7", + "@graphql-tools/delegate": "^12.0.1", "@graphql-tools/executor": "^1.4.13", "@graphql-tools/merge": "^9.1.5", "@graphql-tools/schema": "^10.0.29", "@graphql-tools/utils": "^10.10.3", - "@graphql-tools/wrap": "^11.0.5", + "@graphql-tools/wrap": "^11.1.1", "@whatwg-node/promise-helpers": "^1.3.2", "tslib": "^2.8.1" }, @@ -2589,12 +3237,12 @@ } }, "node_modules/@graphql-tools/stitching-directives": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@graphql-tools/stitching-directives/-/stitching-directives-4.0.5.tgz", - "integrity": "sha512-AhoKD8oIDh2A7bRh2oomxeQdY2P3GgtrQSGg1C9Txhij14bka6Au5dvW4xNqY53nBh1Zb8CiCAaKYIaQErZukg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@graphql-tools/stitching-directives/-/stitching-directives-4.0.7.tgz", + "integrity": "sha512-30Ihr7kIQpTPkzggwRe1WjFFfVNAM/pJ2VYHgh8eRK5OQrrJf/UySywTM07NPbyaZgShRd8mBiaVdPd939I/Wg==", "license": "MIT", "dependencies": { - "@graphql-tools/delegate": "^11.1.3", + "@graphql-tools/delegate": "^12.0.1", "@graphql-tools/utils": "^10.10.3", "tslib": "^2.8.1" }, @@ -2606,9 +3254,9 @@ } }, "node_modules/@graphql-tools/utils": { - "version": "10.10.3", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.10.3.tgz", - "integrity": "sha512-2EdYiefeLLxsoeZTukSNZJ0E/Z5NnWBUGK2VJa0DQj1scDhVd93HeT1eW9TszJOYmIh3eWAKLv58ri/1XUmdsQ==", + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.11.0.tgz", + "integrity": "sha512-iBFR9GXIs0gCD+yc3hoNswViL1O5josI33dUqiNStFI/MHLCEPduasceAcazRH77YONKNiviHBV8f7OgcT4o2Q==", "license": "MIT", "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", @@ -2624,12 +3272,12 @@ } }, "node_modules/@graphql-tools/wrap": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-11.0.5.tgz", - "integrity": "sha512-W0lm1AWLUAF2uKyrplC5PmyVJGCD/n7HO/R+bxoAIGQlZ2ESTbdB1DqZalMUF3D6AwmdzgTsDgoZBJgndnWs9g==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-11.1.1.tgz", + "integrity": "sha512-scNeSh+ZDtQqRrQfp+yiNckMgsuUp/BOgFAB/5XczwgIJBERUMDQdniAuXsVC/VHX+6MrTPhsxcoczat4aG4dw==", "license": "MIT", "dependencies": { - "@graphql-tools/delegate": "^11.1.3", + "@graphql-tools/delegate": "^12.0.1", "@graphql-tools/schema": "^10.0.29", "@graphql-tools/utils": "^10.10.3", "@whatwg-node/promise-helpers": "^1.3.2", @@ -2664,9 +3312,9 @@ } }, "node_modules/@graphql-yoga/plugin-apollo-inline-trace": { - "version": "3.16.2", - "resolved": "https://registry.npmjs.org/@graphql-yoga/plugin-apollo-inline-trace/-/plugin-apollo-inline-trace-3.16.2.tgz", - "integrity": "sha512-umKgoHUN5Y+Rp2KLfgCNCUWSeL/+SiYnIoa2VemvHUjZjoMu29OMQnIqcWihd8KFlPQHE4J75yuXuy9OITYbNg==", + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/@graphql-yoga/plugin-apollo-inline-trace/-/plugin-apollo-inline-trace-3.17.1.tgz", + "integrity": "sha512-5SnSiAlrmOgIw0DHu4fU9TFUmrEt+fyOSWGU/qn0FNx/0qKWf7OcO/gaUAox3zP87FRXz+4RiJ8opcb5TN+Nzg==", "license": "MIT", "dependencies": { "@apollo/usage-reporting-protobuf": "^4.1.1", @@ -2678,21 +3326,21 @@ }, "peerDependencies": { "graphql": "^15.2.0 || ^16.0.0", - "graphql-yoga": "^5.16.2" + "graphql-yoga": "^5.17.1" } }, "node_modules/@graphql-yoga/plugin-apollo-usage-report": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/@graphql-yoga/plugin-apollo-usage-report/-/plugin-apollo-usage-report-0.11.2.tgz", - "integrity": "sha512-8vKZX1h9IHu/ppnKoTP3zSZfwqt7891F9vKkEe3EkNtKdJyw3A97iIfAchrOZjNhci8lV7dbxvuJdpZJQ4dssQ==", + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@graphql-yoga/plugin-apollo-usage-report/-/plugin-apollo-usage-report-0.12.1.tgz", + "integrity": "sha512-xrFiYiIx/nk5gbKJxmlTGj35GmWSkqun/KUdOThfsbwTQgrvL5h5fVrS2x+dYuhFAB43wXEOatroH9RQRBaUWA==", "license": "MIT", "dependencies": { "@apollo/server-gateway-interface": "^2.0.0", "@apollo/usage-reporting-protobuf": "^4.1.1", "@apollo/utils.usagereporting": "^2.1.0", - "@graphql-tools/utils": "^10.9.1", - "@graphql-yoga/plugin-apollo-inline-trace": "^3.16.2", - "@whatwg-node/promise-helpers": "^1.2.4", + "@graphql-tools/utils": "^10.11.0", + "@graphql-yoga/plugin-apollo-inline-trace": "^3.17.1", + "@whatwg-node/promise-helpers": "^1.3.2", "tslib": "^2.8.1" }, "engines": { @@ -2700,44 +3348,44 @@ }, "peerDependencies": { "graphql": "^15.2.0 || ^16.0.0", - "graphql-yoga": "^5.16.2" + "graphql-yoga": "^5.17.1" } }, "node_modules/@graphql-yoga/plugin-csrf-prevention": { - "version": "3.16.2", - "resolved": "https://registry.npmjs.org/@graphql-yoga/plugin-csrf-prevention/-/plugin-csrf-prevention-3.16.2.tgz", - "integrity": "sha512-+GchkAmiaQP4/rUv9bAxiWCNDhPY5EgUa5RHMJH6kpmBSUzSY+d1+uY+aVpzLXvmC4L4bGXgGGZlyLm6Hnyy2Q==", + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/@graphql-yoga/plugin-csrf-prevention/-/plugin-csrf-prevention-3.17.1.tgz", + "integrity": "sha512-oLOx8H4p3WqCpIUcK09/xGUYf7+eG3kU3aYSI4eqtkwp/uU45IIvfZTp/EYyLC+J6HtlRp7fFly0IUAhERJ+5w==", "license": "MIT", "engines": { "node": ">=18.0.0" }, "peerDependencies": { - "graphql-yoga": "^5.16.2" + "graphql-yoga": "^5.17.1" } }, "node_modules/@graphql-yoga/plugin-defer-stream": { - "version": "3.16.2", - "resolved": "https://registry.npmjs.org/@graphql-yoga/plugin-defer-stream/-/plugin-defer-stream-3.16.2.tgz", - "integrity": "sha512-yeyww8E1jfm7Cx16CshEC/Uj2LqGqGqlCyhXWqt18InFiVcI28OiavFhW45qFxLPcc7QYBigRJhODLqGlfkxhQ==", + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/@graphql-yoga/plugin-defer-stream/-/plugin-defer-stream-3.17.1.tgz", + "integrity": "sha512-3zS9tqkkl7gMjP4oEDTn3dp7aG6Ut9hlJeTRiR10UPwEzC+vA0IanrPbFSDntpyZuEbW6hQVwAyHmR2OLzWOhg==", "license": "MIT", "dependencies": { - "@graphql-tools/utils": "^10.6.1" + "@graphql-tools/utils": "^10.11.0" }, "engines": { "node": ">=18.0.0" }, "peerDependencies": { "graphql": "^15.2.0 || ^16.0.0", - "graphql-yoga": "^5.16.2" + "graphql-yoga": "^5.17.1" } }, "node_modules/@graphql-yoga/plugin-jwt": { - "version": "3.10.2", - "resolved": "https://registry.npmjs.org/@graphql-yoga/plugin-jwt/-/plugin-jwt-3.10.2.tgz", - "integrity": "sha512-sPAo3UjbF5gsCeeNAZEcxA6LF1IjE7RoiOws9sjvShkgPruygku/Ugr6UPNJV7ryVEvsVNWaNz9T8NggpcB3RQ==", + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@graphql-yoga/plugin-jwt/-/plugin-jwt-3.11.1.tgz", + "integrity": "sha512-HaUv2CHIcX7tsmbXpyLIyjq0MXakKdJMInwVOGJRzA8I17RtVOSJsyXHPz9xWf+Mib3v9g/UErjJSwJrATyf0Q==", "license": "MIT", "dependencies": { - "@whatwg-node/promise-helpers": "^1.2.4", + "@whatwg-node/promise-helpers": "^1.3.2", "@whatwg-node/server-plugin-cookies": "^1.0.3", "jsonwebtoken": "^9.0.0", "jwks-rsa": "^3.0.0", @@ -2748,29 +3396,29 @@ }, "peerDependencies": { "graphql": "^15.2.0 || ^16.0.0", - "graphql-yoga": "^5.16.2" + "graphql-yoga": "^5.17.1" } }, "node_modules/@graphql-yoga/plugin-persisted-operations": { - "version": "3.16.2", - "resolved": "https://registry.npmjs.org/@graphql-yoga/plugin-persisted-operations/-/plugin-persisted-operations-3.16.2.tgz", - "integrity": "sha512-L9SMwO6c71JfXF9LujGlNLWZonmYJqTTqVjPLLwGm5PerIzW2rFkaEskE5Sp015kanD/wFoRQi0AdZMXJ40oqw==", + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/@graphql-yoga/plugin-persisted-operations/-/plugin-persisted-operations-3.17.1.tgz", + "integrity": "sha512-88zbgam1QQ0RC003I6SFNyJYUAEZ5db/9gCgBKO5EaRYbRmQM4gb33WQ/dRcTf4tVdxVYWyMEOjOmkXfT5ssDA==", "license": "MIT", "dependencies": { - "@whatwg-node/promise-helpers": "^1.2.4" + "@whatwg-node/promise-helpers": "^1.3.2" }, "engines": { "node": ">=18.0.0" }, "peerDependencies": { "graphql": "^15.2.0 || ^16.0.0", - "graphql-yoga": "^5.16.2" + "graphql-yoga": "^5.17.1" } }, "node_modules/@graphql-yoga/plugin-prometheus": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/@graphql-yoga/plugin-prometheus/-/plugin-prometheus-6.11.3.tgz", - "integrity": "sha512-EeMWisS3M43tI9K/jMMwiR2KWRdYfUBzcx3tg5vkoZQbVytCIDT1RB2s5HPFzi3X9D7Cs+m/9XMUOCrOCfHvug==", + "version": "6.12.1", + "resolved": "https://registry.npmjs.org/@graphql-yoga/plugin-prometheus/-/plugin-prometheus-6.12.1.tgz", + "integrity": "sha512-2BTEx311ZV9SyiQxMTzKn8nIXlASN6QBgCy0ZeaOhkb4aJkWUr/6rBXEmzC6VxCev/x2DbPidzjucuzqWBfGaQ==", "license": "MIT", "dependencies": { "@envelop/prometheus": "^14.0.0" @@ -2780,38 +3428,38 @@ }, "peerDependencies": { "graphql": "^15.2.0 || ^16.0.0", - "graphql-yoga": "^5.16.2", + "graphql-yoga": "^5.17.1", "prom-client": "^15.0.0" } }, "node_modules/@graphql-yoga/plugin-response-cache": { - "version": "3.18.2", - "resolved": "https://registry.npmjs.org/@graphql-yoga/plugin-response-cache/-/plugin-response-cache-3.18.2.tgz", - "integrity": "sha512-anKtEYUmiSb0/OPuMkKLL478rZvuYnI2i7lCdyRexHH0jxiBpWqbq441ZX1XKqw50YSyu7a+RLyINxDeQL3hLw==", + "version": "3.19.1", + "resolved": "https://registry.npmjs.org/@graphql-yoga/plugin-response-cache/-/plugin-response-cache-3.19.1.tgz", + "integrity": "sha512-JKA+slIyx/p7G0x3VHpbyDKNkForFbseO4NhTkJOjvFNmUZaQjxdlV/5rPrtboBYyFq//Wa/2Pvv2wwMxBif4Q==", "license": "MIT", "dependencies": { "@envelop/core": "^5.3.0", "@envelop/response-cache": "^9.0.0", - "@whatwg-node/promise-helpers": "^1.2.4" + "@whatwg-node/promise-helpers": "^1.3.2" }, "engines": { "node": ">=18.0.0" }, "peerDependencies": { "graphql": "^15.2.0 || ^16.0.0", - "graphql-yoga": "^5.16.2" + "graphql-yoga": "^5.17.1" } }, "node_modules/@graphql-yoga/render-graphiql": { - "version": "5.16.2", - "resolved": "https://registry.npmjs.org/@graphql-yoga/render-graphiql/-/render-graphiql-5.16.2.tgz", - "integrity": "sha512-QTxmGZR/sZODnMZdsXpyoFEoIjzx5dRvqtW8XRiLq8TN+nCwVujmEehxPw9Fd6bu8pBbjs4dOgGCVss6OjOByw==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/@graphql-yoga/render-graphiql/-/render-graphiql-5.17.1.tgz", + "integrity": "sha512-5F5OSYfNu6eN3rFXmZeHSiTK5RXLn3u+3dwIt1+cQ5MhlHlFp1XHESu9o1ElvNXkEbYA6y1cKwdFW2v2xJ7oRQ==", "license": "MIT", "engines": { "node": ">=18.0.0" }, "peerDependencies": { - "graphql-yoga": "^5.16.2" + "graphql-yoga": "^5.17.1" } }, "node_modules/@graphql-yoga/subscription": { @@ -2843,9 +3491,9 @@ } }, "node_modules/@grpc/grpc-js": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.1.tgz", - "integrity": "sha512-sPxgEWtPUR3EnRJCEtbGZG2iX8LQDUls2wUS3o27jg07KqJFMq6YDeWvMo1wfpmy3rqRdS0rivpLwhqQtEyCuQ==", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.2.tgz", + "integrity": "sha512-QzVUtEFyu05UNx2xr0fCQmStUO17uVQhGNowtxs00IgTZT6/W2PBLfUkj30s0FKJ29VtTa3ArVNIhNP6akQhqA==", "license": "Apache-2.0", "dependencies": { "@grpc/proto-loader": "^0.8.0", @@ -2879,6 +3527,58 @@ "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", "license": "Apache-2.0" }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@ioredis/as-callback": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@ioredis/as-callback/-/as-callback-3.0.0.tgz", @@ -2967,12 +3667,60 @@ "url": "https://opencollective.com/js-sdsl" } }, + "node_modules/@jsep-plugin/assignment": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@jsep-plugin/assignment/-/assignment-1.3.0.tgz", + "integrity": "sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==", + "license": "MIT", + "engines": { + "node": ">= 10.16.0" + }, + "peerDependencies": { + "jsep": "^0.4.0||^1.0.0" + } + }, + "node_modules/@jsep-plugin/regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@jsep-plugin/regex/-/regex-1.0.4.tgz", + "integrity": "sha512-q7qL4Mgjs1vByCaTnDFcBnV9HS7GVPJX5vyVoCgZHNSC9rjwIlmbXG5sUuorR5ndfHAIlJ8pVStxvjXHbNvtUg==", + "license": "MIT", + "engines": { + "node": ">= 10.16.0" + }, + "peerDependencies": { + "jsep": "^0.4.0||^1.0.0" + } + }, "node_modules/@json-schema-tools/meta-schema": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/@json-schema-tools/meta-schema/-/meta-schema-1.8.0.tgz", "integrity": "sha512-pbRAbHidPTf96LhmHXA6bl4D4tz4HrwjZ7A5ConcLFPdCj+93GhsCCFsq+AWti4VOs+9QTezX5l0zLNA+TZv1g==", "license": "Apache-2.0" }, + "node_modules/@kubernetes/client-node": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@kubernetes/client-node/-/client-node-1.4.0.tgz", + "integrity": "sha512-Zge3YvF7DJi264dU1b3wb/GmzR99JhUpqTvp+VGHfwZT+g7EOOYNScDJNZwXy9cszyIGPIs0VHr+kk8e95qqrA==", + "license": "Apache-2.0", + "dependencies": { + "@types/js-yaml": "^4.0.1", + "@types/node": "^24.0.0", + "@types/node-fetch": "^2.6.13", + "@types/stream-buffers": "^3.0.3", + "form-data": "^4.0.0", + "hpagent": "^1.2.0", + "isomorphic-ws": "^5.0.0", + "js-yaml": "^4.1.0", + "jsonpath-plus": "^10.3.0", + "node-fetch": "^2.7.0", + "openid-client": "^6.1.3", + "rfc4648": "^1.3.0", + "socks-proxy-agent": "^8.0.4", + "stream-buffers": "^3.0.2", + "tar-fs": "^3.0.9", + "ws": "^8.18.2" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -3009,18 +3757,18 @@ } }, "node_modules/@omnigraph/json-schema": { - "version": "0.109.17", - "resolved": "https://registry.npmjs.org/@omnigraph/json-schema/-/json-schema-0.109.17.tgz", - "integrity": "sha512-7Bw20TuTu+7hGIY+iJhQh+4lEXgsIddEs6aLtygvY8/ptT/MumCJeFnNrMtyvMKDepLj37TIARy6J+W6cejULg==", + "version": "0.109.18", + "resolved": "https://registry.npmjs.org/@omnigraph/json-schema/-/json-schema-0.109.18.tgz", + "integrity": "sha512-J3MmcOe0bldFvWdal8WphxznmcpZsHdV/YncUDS38uW4GT8jUUcADWpUOXYRCUn8/ZLSpNhDFhO8Qo+C8+cUyQ==", "license": "MIT", "dependencies": { "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/string-interpolation": "0.5.9", "@graphql-mesh/transport-common": "^1.0.0", - "@graphql-mesh/transport-rest": "^0.9.17", - "@graphql-mesh/types": "^0.104.16", - "@graphql-mesh/utils": "^0.104.16", - "@graphql-tools/delegate": "^11.0.0", + "@graphql-mesh/transport-rest": "^0.9.18", + "@graphql-mesh/types": "^0.104.17", + "@graphql-mesh/utils": "^0.104.17", + "@graphql-tools/delegate": "^12.0.0", "@graphql-tools/utils": "^10.8.0", "@json-schema-tools/meta-schema": "^1.7.5", "@whatwg-node/fetch": "^0.10.6", @@ -3044,36 +3792,19 @@ "graphql": "*" } }, - "node_modules/@omnigraph/json-schema/node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, "node_modules/@omnigraph/openapi": { - "version": "0.109.23", - "resolved": "https://registry.npmjs.org/@omnigraph/openapi/-/openapi-0.109.23.tgz", - "integrity": "sha512-g509jWhGUHY4BKxZJv3QAajDUfqEVfPK+wKUx2O3w7nOImn9OUqBgyqS3NrJRnAKNdmppenELbse3rZwsePmJA==", + "version": "0.109.24", + "resolved": "https://registry.npmjs.org/@omnigraph/openapi/-/openapi-0.109.24.tgz", + "integrity": "sha512-ceDNoNs7lo7jZEWwxq58GMU3D7YaMykin+sEERyzmONldOZkC/1OqvU90WoeJ0vW+GEWTSwHQuQIzJoF2nUeig==", "license": "MIT", "dependencies": { "@graphql-mesh/cross-helpers": "^0.4.10", - "@graphql-mesh/fusion-composition": "^0.8.20", + "@graphql-mesh/fusion-composition": "^0.8.21", "@graphql-mesh/string-interpolation": "^0.5.9", - "@graphql-mesh/types": "^0.104.16", - "@graphql-mesh/utils": "^0.104.16", + "@graphql-mesh/types": "^0.104.17", + "@graphql-mesh/utils": "^0.104.17", "@graphql-tools/utils": "^10.6.4", - "@omnigraph/json-schema": "^0.109.17", + "@omnigraph/json-schema": "^0.109.18", "change-case": "^4.1.2", "json-machete": "^0.97.6", "openapi-types": "^12.1.0", @@ -3108,14 +3839,14 @@ } }, "node_modules/@opentelemetry/auto-instrumentations-node": { - "version": "0.67.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/auto-instrumentations-node/-/auto-instrumentations-node-0.67.1.tgz", - "integrity": "sha512-Rj7hwoq8pogneB8KfiFpDhr2q55LxqJIjcfx42x2m0xRwuTQQ4wuWGPMslQ+EY9nh688T3edzao/Jx3YNjAMAQ==", + "version": "0.67.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/auto-instrumentations-node/-/auto-instrumentations-node-0.67.2.tgz", + "integrity": "sha512-kAuv1SVIA9YfmKLJG5fN4ps1z1E2j0cy6dnb/pDri0gcczWAQdt4iCh3ZOyBn2KwfooQohGa81iQSiZgswxyXw==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "^0.208.0", "@opentelemetry/instrumentation-amqplib": "^0.55.0", - "@opentelemetry/instrumentation-aws-lambda": "^0.60.1", + "@opentelemetry/instrumentation-aws-lambda": "^0.61.0", "@opentelemetry/instrumentation-aws-sdk": "^0.64.0", "@opentelemetry/instrumentation-bunyan": "^0.54.0", "@opentelemetry/instrumentation-cassandra-driver": "^0.54.0", @@ -3491,9 +4222,9 @@ } }, "node_modules/@opentelemetry/instrumentation-aws-lambda": { - "version": "0.60.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-lambda/-/instrumentation-aws-lambda-0.60.1.tgz", - "integrity": "sha512-yW1TV6e0p0UZk/hfn+sndC1NXJIF23UvUcvzjcmnh+T/4BXhps7B20sYTcXvH43yw1mWNGL0KAwGoHzCI53RWw==", + "version": "0.61.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-lambda/-/instrumentation-aws-lambda-0.61.0.tgz", + "integrity": "sha512-yS7lzFhPL37CsGHolNSGA4UnEgiyyO/to1hHXcQ54JCOc4dVHxI319v5/A/UkVlcY7kF85RzqtKyBUZh7XxQWQ==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "^0.208.0", @@ -4579,9 +5310,9 @@ } }, "node_modules/@smithy/core": { - "version": "3.18.5", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.18.5.tgz", - "integrity": "sha512-6gnIz3h+PEPQGDj8MnRSjDvKBah042jEoPgjFGJ4iJLBE78L4lY/n98x14XyPF4u3lN179Ub/ZKFY5za9GeLQw==", + "version": "3.18.6", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.18.6.tgz", + "integrity": "sha512-8Q/ugWqfDUEU1Exw71+DoOzlONJ2Cn9QA8VeeDzLLjzO/qruh9UKFzbszy4jXcIYgGofxYiT0t1TT6+CT/GupQ==", "license": "Apache-2.0", "dependencies": { "@smithy/middleware-serde": "^4.2.6", @@ -4686,12 +5417,12 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "4.3.12", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.12.tgz", - "integrity": "sha512-9pAX/H+VQPzNbouhDhkW723igBMLgrI8OtX+++M7iKJgg/zY/Ig3i1e6seCcx22FWhE6Q/S61BRdi2wXBORT+A==", + "version": "4.3.13", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.13.tgz", + "integrity": "sha512-X4za1qCdyx1hEVVXuAWlZuK6wzLDv1uw1OY9VtaYy1lULl661+frY7FeuHdYdl7qAARUxH2yvNExU2/SmRFfcg==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.18.5", + "@smithy/core": "^3.18.6", "@smithy/middleware-serde": "^4.2.6", "@smithy/node-config-provider": "^4.3.5", "@smithy/shared-ini-file-loader": "^4.4.0", @@ -4705,15 +5436,15 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "4.4.12", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.12.tgz", - "integrity": "sha512-S4kWNKFowYd0lID7/DBqWHOQxmxlsf0jBaos9chQZUWTVOjSW1Ogyh8/ib5tM+agFDJ/TCxuCTvrnlc+9cIBcQ==", + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.13.tgz", + "integrity": "sha512-RzIDF9OrSviXX7MQeKOm8r/372KTyY8Jmp6HNKOOYlrguHADuM3ED/f4aCyNhZZFLG55lv5beBin7nL0Nzy1Dw==", "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^4.3.5", "@smithy/protocol-http": "^5.3.5", "@smithy/service-error-classification": "^4.2.5", - "@smithy/smithy-client": "^4.9.8", + "@smithy/smithy-client": "^4.9.9", "@smithy/types": "^4.9.0", "@smithy/util-middleware": "^4.2.5", "@smithy/util-retry": "^4.2.5", @@ -4880,13 +5611,13 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "4.9.8", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.9.8.tgz", - "integrity": "sha512-8xgq3LgKDEFoIrLWBho/oYKyWByw9/corz7vuh1upv7ZBm0ZMjGYBhbn6v643WoIqA9UTcx5A5htEp/YatUwMA==", + "version": "4.9.9", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.9.9.tgz", + "integrity": "sha512-SUnZJMMo5yCmgjopJbiNeo1vlr8KvdnEfIHV9rlD77QuOGdRotIVBcOrBuMr+sI9zrnhtDtLP054bZVbpZpiQA==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.18.5", - "@smithy/middleware-endpoint": "^4.3.12", + "@smithy/core": "^3.18.6", + "@smithy/middleware-endpoint": "^4.3.13", "@smithy/middleware-stack": "^4.2.5", "@smithy/protocol-http": "^5.3.5", "@smithy/types": "^4.9.0", @@ -4987,13 +5718,13 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.3.11", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.11.tgz", - "integrity": "sha512-yHv+r6wSQXEXTPVCIQTNmXVWs7ekBTpMVErjqZoWkYN75HIFN5y9+/+sYOejfAuvxWGvgzgxbTHa/oz61YTbKw==", + "version": "4.3.12", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.12.tgz", + "integrity": "sha512-TKc6FnOxFULKxLgTNHYjcFqdOYzXVPFFVm5JhI30F3RdhT7nYOtOsjgaOwfDRmA/3U66O9KaBQ3UHoXwayRhAg==", "license": "Apache-2.0", "dependencies": { "@smithy/property-provider": "^4.2.5", - "@smithy/smithy-client": "^4.9.8", + "@smithy/smithy-client": "^4.9.9", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, @@ -5002,16 +5733,16 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.14.tgz", - "integrity": "sha512-ljZN3iRvaJUgulfvobIuG97q1iUuCMrvXAlkZ4msY+ZuVHQHDIqn7FKZCEj+bx8omz6kF5yQXms/xhzjIO5XiA==", + "version": "4.2.15", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.15.tgz", + "integrity": "sha512-94NqfQVo+vGc5gsQ9SROZqOvBkGNMQu6pjXbnn8aQvBUhc31kx49gxlkBEqgmaZQHUUfdRUin5gK/HlHKmbAwg==", "license": "Apache-2.0", "dependencies": { "@smithy/config-resolver": "^4.4.3", "@smithy/credential-provider-imds": "^4.2.5", "@smithy/node-config-provider": "^4.3.5", "@smithy/property-provider": "^4.2.5", - "@smithy/smithy-client": "^4.9.8", + "@smithy/smithy-client": "^4.9.9", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, @@ -5180,6 +5911,13 @@ "@types/node": "*" } }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/express": { "version": "4.17.25", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", @@ -5220,6 +5958,19 @@ "ioredis": ">=5" } }, + "node_modules/@types/js-yaml": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", + "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/jsonwebtoken": { "version": "9.0.10", "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz", @@ -5275,6 +6026,16 @@ "undici-types": "~7.16.0" } }, + "node_modules/@types/node-fetch": { + "version": "2.6.13", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.13.tgz", + "integrity": "sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.4" + } + }, "node_modules/@types/oracledb": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/@types/oracledb/-/oracledb-6.5.2.tgz", @@ -5284,87 +6045,366 @@ "@types/node": "*" } }, - "node_modules/@types/pg": { - "version": "8.15.6", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.15.6.tgz", - "integrity": "sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ==", + "node_modules/@types/pg": { + "version": "8.15.6", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.15.6.tgz", + "integrity": "sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^2.2.0" + } + }, + "node_modules/@types/pg-pool": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/pg-pool/-/pg-pool-2.0.6.tgz", + "integrity": "sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==", + "license": "MIT", + "dependencies": { + "@types/pg": "*" + } + }, + "node_modules/@types/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-qHHxQ+P9PysNEGbALT8f8YOSHW0KJu6l2xU8DYY0fu/EmGxXdVnuTLvFUvBgPJMSqXq29SYHveejeAha+4AYgA==", + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/stream-buffers": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/stream-buffers/-/stream-buffers-3.0.8.tgz", + "integrity": "sha512-J+7VaHKNvlNPJPEJXX/fKa9DZtR/xPMwuIbe+yNOwp1YB+ApUOBv2aUpEoBJEi8nJgbgs1x8e73ttg0r1rSUdw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/tedious": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@types/tedious/-/tedious-4.0.14.tgz", + "integrity": "sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.48.1.tgz", + "integrity": "sha512-X63hI1bxl5ohelzr0LY5coufyl0LJNthld+abwxpCoo6Gq+hSqhKwci7MUWkXo67mzgUK6YFByhmaHmUcuBJmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.48.1", + "@typescript-eslint/type-utils": "8.48.1", + "@typescript-eslint/utils": "8.48.1", + "@typescript-eslint/visitor-keys": "8.48.1", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.48.1", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.48.1.tgz", + "integrity": "sha512-PC0PDZfJg8sP7cmKe6L3QIL8GZwU5aRvUFedqSIpw3B+QjRSUZeeITC2M5XKeMXEzL6wccN196iy3JLwKNvDVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.48.1", + "@typescript-eslint/types": "8.48.1", + "@typescript-eslint/typescript-estree": "8.48.1", + "@typescript-eslint/visitor-keys": "8.48.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.48.1.tgz", + "integrity": "sha512-HQWSicah4s9z2/HifRPQ6b6R7G+SBx64JlFQpgSSHWPKdvCZX57XCbszg/bapbRsOEv42q5tayTYcEFpACcX1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.48.1", + "@typescript-eslint/types": "^8.48.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.48.1.tgz", + "integrity": "sha512-rj4vWQsytQbLxC5Bf4XwZ0/CKd362DkWMUkviT7DCS057SK64D5lH74sSGzhI6PDD2HCEq02xAP9cX68dYyg1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.48.1", + "@typescript-eslint/visitor-keys": "8.48.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.48.1.tgz", + "integrity": "sha512-k0Jhs4CpEffIBm6wPaCXBAD7jxBtrHjrSgtfCjUvPp9AZ78lXKdTR8fxyZO5y4vWNlOvYXRtngSZNSn+H53Jkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.48.1.tgz", + "integrity": "sha512-1jEop81a3LrJQLTf/1VfPQdhIY4PlGDBc/i67EVWObrtvcziysbLN3oReexHOM6N3jyXgCrkBsZpqwH0hiDOQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.48.1", + "@typescript-eslint/typescript-estree": "8.48.1", + "@typescript-eslint/utils": "8.48.1", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.48.1.tgz", + "integrity": "sha512-+fZ3LZNeiELGmimrujsDCT4CRIbq5oXdHe7chLiW8qzqyPMnn1puNstCrMNVAqwcl2FdIxkuJ4tOs/RFDBVc/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.48.1.tgz", + "integrity": "sha512-/9wQ4PqaefTK6POVTjJaYS0bynCgzh6ClJHGSBj06XEHjkfylzB+A3qvyaXnErEZSaxhIo4YdyBgq6j4RysxDg==", + "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*", - "pg-protocol": "*", - "pg-types": "^2.2.0" + "@typescript-eslint/project-service": "8.48.1", + "@typescript-eslint/tsconfig-utils": "8.48.1", + "@typescript-eslint/types": "8.48.1", + "@typescript-eslint/visitor-keys": "8.48.1", + "debug": "^4.3.4", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@types/pg-pool": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/pg-pool/-/pg-pool-2.0.6.tgz", - "integrity": "sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, "license": "MIT", "dependencies": { - "@types/pg": "*" + "balanced-match": "^1.0.0" } }, - "node_modules/@types/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-qHHxQ+P9PysNEGbALT8f8YOSHW0KJu6l2xU8DYY0fu/EmGxXdVnuTLvFUvBgPJMSqXq29SYHveejeAha+4AYgA==", - "license": "MIT" - }, - "node_modules/@types/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "license": "MIT" - }, - "node_modules/@types/send": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", - "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", - "license": "MIT", + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", "dependencies": { - "@types/node": "*" + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@types/serve-static": { - "version": "1.15.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", - "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", - "license": "MIT", - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "<1" + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@types/serve-static/node_modules/@types/send": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", - "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "node_modules/@typescript-eslint/utils": { + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.48.1.tgz", + "integrity": "sha512-fAnhLrDjiVfey5wwFRwrweyRlCmdz5ZxXz2G/4cLn0YDLjTapmN4gcCsTBR1N2rWnZSDeWpYtgLDsJt+FpmcwA==", + "dev": true, "license": "MIT", "dependencies": { - "@types/mime": "^1", - "@types/node": "*" + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.48.1", + "@typescript-eslint/types": "8.48.1", + "@typescript-eslint/typescript-estree": "8.48.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@types/tedious": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@types/tedious/-/tedious-4.0.14.tgz", - "integrity": "sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.48.1.tgz", + "integrity": "sha512-BmxxndzEWhE4TIEEMBs8lP3MBWN3jFPs/p6gPm/wkv02o41hI6cq9AuSmGAaTTHPtA1FTi2jBre4A9rm5ZmX+Q==", + "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*" + "@typescript-eslint/types": "8.48.1", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@upstash/redis": { - "version": "1.35.6", - "resolved": "https://registry.npmjs.org/@upstash/redis/-/redis-1.35.6.tgz", - "integrity": "sha512-aSEIGJgJ7XUfTYvhQcQbq835re7e/BXjs8Janq6Pvr6LlmTZnyqwT97RziZLO/8AVUL037RLXqqiQC6kCt+5pA==", + "version": "1.35.7", + "resolved": "https://registry.npmjs.org/@upstash/redis/-/redis-1.35.7.tgz", + "integrity": "sha512-bdCdKhke+kYUjcLLuGWSeQw7OLuWIx3eyKksyToLBAlGIMX9qiII0ptp8E0y7VFE1yuBxBd/3kSzJ8774Q4g+A==", "license": "MIT", "dependencies": { "uncrypto": "^0.1.3" @@ -5499,6 +6539,16 @@ "acorn": "^8" } }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, "node_modules/agent-base": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", @@ -5525,9 +6575,9 @@ } }, "node_modules/ajv-formats": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "license": "MIT", "dependencies": { "ajv": "^8.0.0" @@ -5541,22 +6591,6 @@ } } }, - "node_modules/ajv/node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, "node_modules/ansi-color": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/ansi-color/-/ansi-color-0.2.1.tgz", @@ -5595,6 +6629,33 @@ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", "license": "MIT" }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -5619,16 +6680,134 @@ "retry": "0.13.1" } }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, "node_modules/aws4": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", "license": "MIT" }, + "node_modules/b4a": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", + "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", + "license": "Apache-2.0", + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/bare-events": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", + "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", + "license": "Apache-2.0", + "peerDependencies": { + "bare-abort-controller": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } + }, + "node_modules/bare-fs": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.2.tgz", + "integrity": "sha512-veTnRzkb6aPHOvSKIOy60KzURfBdUflr5VReI+NSaPL6xf+XLdONQgZgpYvUuZLVQ8dCqxpBAudaOM1+KpAUxw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4", + "bare-url": "^2.2.2", + "fast-fifo": "^1.3.2" + }, + "engines": { + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } + } + }, + "node_modules/bare-os": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.2.tgz", + "integrity": "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "bare": ">=1.14.0" + } + }, + "node_modules/bare-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-os": "^3.0.1" + } + }, + "node_modules/bare-stream": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.7.0.tgz", + "integrity": "sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "streamx": "^2.21.0" + }, + "peerDependencies": { + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } + } + }, + "node_modules/bare-url": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.3.2.tgz", + "integrity": "sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-path": "^3.0.0" + } + }, "node_modules/baseline-browser-mapping": { - "version": "2.8.30", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.30.tgz", - "integrity": "sha512-aTUKW4ptQhS64+v2d6IkPzymEzzhw+G0bA1g3uBRV3+ntkH+svttKseW5IOR4Ed6NUVKqnY7qT3dKvzQ7io4AA==", + "version": "2.8.32", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.32.tgz", + "integrity": "sha512-OPz5aBThlyLFgxyhdwf/s2+8ab3OvT7AdTNvKHBwpXomIYeXqpUUuT8LrdtxZSsWJ4R4CU1un4XGh5Ez3nlTpw==", "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.js" @@ -5643,6 +6822,19 @@ "node": "*" } }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bintrees": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz", @@ -5650,11 +6842,22 @@ "license": "MIT" }, "node_modules/bowser": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.13.0.tgz", - "integrity": "sha512-yHAbSRuT6LTeKi6k2aS40csueHqgAsFEgmrOsfRyFpJnFv5O2hl9FYmWEUZ97gZ/dG17U4IQQcTx4YAFYPuWRQ==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.13.1.tgz", + "integrity": "sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==", "license": "MIT" }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/braces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", @@ -5773,6 +6976,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/camel-case": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", @@ -5784,9 +6997,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001756", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001756.tgz", - "integrity": "sha512-4HnCNKbMLkLdhJz3TToeVWHSnfJvPaq6vu/eRP0Ahub/07n484XHhBF5AJoSGHdVrS8tKFauUQz8Bp9P7LVx7A==", + "version": "1.0.30001757", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001757.tgz", + "integrity": "sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==", "funding": [ { "type": "opencollective", @@ -5814,6 +7027,23 @@ "upper-case-first": "^2.0.2" } }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/change-case": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", @@ -5834,6 +7064,44 @@ "tslib": "^2.0.3" } }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/cjs-module-lexer": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", @@ -5881,6 +7149,18 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/commander": { "version": "14.0.2", "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz", @@ -5890,6 +7170,13 @@ "node": ">=20" } }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, "node_modules/constant-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", @@ -5919,6 +7206,21 @@ "node": ">=16.0.0" } }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/dataloader": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.2.3.tgz", @@ -5948,6 +7250,13 @@ } } }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -5965,6 +7274,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/denque": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", @@ -6041,9 +7359,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.259", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.259.tgz", - "integrity": "sha512-I+oLXgpEJzD6Cwuwt1gYjxsDmu/S/Kd41mmLA3O+/uH2pFRO/DvOjUyGozL8j3KeLV6WyZ7ssPwELMsXCcsJAQ==", + "version": "1.5.263", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.263.tgz", + "integrity": "sha512-DrqJ11Knd+lo+dv+lltvfMDLU27g14LMdH2b0O3Pio4uk0x+z7OR+JrmyacTPN2M8w3BrZ7/RTwG3R9B7irPlg==", "license": "ISC" }, "node_modules/emoji-regex": { @@ -6052,6 +7370,15 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT" }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/error": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", @@ -6091,6 +7418,63 @@ "node": ">= 0.4" } }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.0.tgz", + "integrity": "sha512-jd0f4NHbD6cALCyGElNpGAOtWxSq46l9X/sWB0Nzd5er4Kz2YTm+Vl0qKFT9KUJvD8+fiO8AvoHhFvEatfVixA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.0", + "@esbuild/android-arm": "0.27.0", + "@esbuild/android-arm64": "0.27.0", + "@esbuild/android-x64": "0.27.0", + "@esbuild/darwin-arm64": "0.27.0", + "@esbuild/darwin-x64": "0.27.0", + "@esbuild/freebsd-arm64": "0.27.0", + "@esbuild/freebsd-x64": "0.27.0", + "@esbuild/linux-arm": "0.27.0", + "@esbuild/linux-arm64": "0.27.0", + "@esbuild/linux-ia32": "0.27.0", + "@esbuild/linux-loong64": "0.27.0", + "@esbuild/linux-mips64el": "0.27.0", + "@esbuild/linux-ppc64": "0.27.0", + "@esbuild/linux-riscv64": "0.27.0", + "@esbuild/linux-s390x": "0.27.0", + "@esbuild/linux-x64": "0.27.0", + "@esbuild/netbsd-arm64": "0.27.0", + "@esbuild/netbsd-x64": "0.27.0", + "@esbuild/openbsd-arm64": "0.27.0", + "@esbuild/openbsd-x64": "0.27.0", + "@esbuild/openharmony-arm64": "0.27.0", + "@esbuild/sunos-x64": "0.27.0", + "@esbuild/win32-arm64": "0.27.0", + "@esbuild/win32-ia32": "0.27.0", + "@esbuild/win32-x64": "0.27.0" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -6100,6 +7484,228 @@ "node": ">=6" } }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.39.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", + "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.1", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.7.0" + } + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -6112,6 +7718,12 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "license": "MIT" }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "license": "MIT" + }, "node_modules/fast-glob": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", @@ -6128,6 +7740,18 @@ "node": ">=8.6.0" } }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -6149,12 +7773,52 @@ "rfdc": "^1.2.0" } }, - "node_modules/fast-uri": { + "node_modules/fast-json-stringify/node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/fast-json-stringify/node_modules/fast-uri": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.4.0.tgz", "integrity": "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==", "license": "MIT" }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/fast-xml-parser": { "version": "5.2.5", "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", @@ -6182,6 +7846,23 @@ "reusify": "^1.0.4" } }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/fengari": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/fengari/-/fengari-0.1.4.tgz", @@ -6202,6 +7883,19 @@ "fengari": "^0.1.0" } }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -6214,18 +7908,87 @@ "node": ">=8" } }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, "node_modules/foreach": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz", "integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==", "license": "MIT" }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/forwarded-parse": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/forwarded-parse/-/forwarded-parse-2.1.2.tgz", "integrity": "sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==", "license": "MIT" }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -6342,15 +8105,29 @@ } }, "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, "license": "ISC", "dependencies": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 6" + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globby": { @@ -6394,6 +8171,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, "node_modules/graphql": { "version": "16.12.0", "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.12.0.tgz", @@ -6493,20 +8277,20 @@ } }, "node_modules/graphql-yoga": { - "version": "5.16.2", - "resolved": "https://registry.npmjs.org/graphql-yoga/-/graphql-yoga-5.16.2.tgz", - "integrity": "sha512-heaD8ejapeEZ8+8CxB6DbYzkvMfC4gHEXr1Gc2CQCXEb5PVaDcEnQfiThBNic1KLPpuZixqQdJJ0pjcEVc9H7g==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/graphql-yoga/-/graphql-yoga-5.17.1.tgz", + "integrity": "sha512-Izb2uVWfdoWm+tF4bi39KE6F4uml3r700/EwULPZYOciY8inmy4hw+98c6agy3C+xceXvTkP7Li6mY/EI8XliA==", "license": "MIT", "dependencies": { "@envelop/core": "^5.3.0", "@envelop/instrumentation": "^1.0.0", - "@graphql-tools/executor": "^1.4.0", + "@graphql-tools/executor": "^1.5.0", "@graphql-tools/schema": "^10.0.11", - "@graphql-tools/utils": "^10.6.2", + "@graphql-tools/utils": "^10.11.0", "@graphql-yoga/logger": "^2.0.1", "@graphql-yoga/subscription": "^5.0.5", "@whatwg-node/fetch": "^0.10.6", - "@whatwg-node/promise-helpers": "^1.2.4", + "@whatwg-node/promise-helpers": "^1.3.2", "@whatwg-node/server": "^0.10.14", "lru-cache": "^10.0.0", "tslib": "^2.8.1" @@ -6524,6 +8308,16 @@ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "license": "ISC" }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/has-property-descriptors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", @@ -6548,6 +8342,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -6587,6 +8396,15 @@ "node": ">= 0.10.x" } }, + "node_modules/hpagent": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-1.2.0.tgz", + "integrity": "sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, "node_modules/http-cache-semantics": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", @@ -6621,6 +8439,33 @@ "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", "license": "MIT" }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/import-in-the-middle": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-2.0.0.tgz", @@ -6633,6 +8478,16 @@ "module-details-from-path": "^1.0.3" } }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, "node_modules/ioredis": { "version": "5.8.2", "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.8.2.tgz", @@ -6689,6 +8544,28 @@ "node": ">=10" } }, + "node_modules/ip-address": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -6752,6 +8629,22 @@ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "license": "MIT" }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/isomorphic-ws": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", + "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", + "license": "MIT", + "peerDependencies": { + "ws": "*" + } + }, "node_modules/isows": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/isows/-/isows-1.0.7.tgz", @@ -6834,6 +8727,15 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsep": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jsep/-/jsep-1.4.0.tgz", + "integrity": "sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==", + "license": "MIT", + "engines": { + "node": ">= 10.16.0" + } + }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -6855,6 +8757,13 @@ "bignumber.js": "^9.0.0" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, "node_modules/json-machete": { "version": "0.97.6", "resolved": "https://registry.npmjs.org/json-machete/-/json-machete-0.97.6.tgz", @@ -6915,6 +8824,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -6936,6 +8852,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/jsonpath-plus": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-10.3.0.tgz", + "integrity": "sha512-8TNmfeTCk2Le33A3vRRwtuworG/L5RrgMvdjhKZxvyShO+mBu2fP50OWUjRLNtvw344DdDarFh9buFAZs5ujeA==", + "license": "MIT", + "dependencies": { + "@jsep-plugin/assignment": "^1.3.0", + "@jsep-plugin/regex": "^1.0.4", + "jsep": "^1.4.0" + }, + "bin": { + "jsonpath": "bin/jsonpath-cli.js", + "jsonpath-plus": "bin/jsonpath-cli.js" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/jsonwebtoken": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", @@ -7008,6 +8942,30 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/lie": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", @@ -7037,6 +8995,22 @@ "lie": "3.1.1" } }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", @@ -7188,12 +9162,12 @@ } }, "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" } }, "node_modules/lru-memoizer": { @@ -7272,6 +9246,39 @@ "node": ">=8.6" } }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/minimatch": { "version": "10.1.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", @@ -7308,6 +9315,20 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/mylas": { + "version": "2.1.14", + "resolved": "https://registry.npmjs.org/mylas/-/mylas-2.1.14.tgz", + "integrity": "sha512-BzQguy9W9NJgoVn2mRWzbFrFWWztGCcng2QI9+41frfk+Athwgx3qhqhvStz7ExeUUu7Kzw427sNzHpEZNINog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/raouldeheer" + } + }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -7319,6 +9340,13 @@ "thenify-all": "^1.0.0" } }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, "node_modules/no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", @@ -7362,17 +9390,24 @@ "license": "MIT" }, "node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, "license": "MIT", - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, "engines": { "node": ">=0.10.0" } }, + "node_modules/oauth4webapi": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-3.8.3.tgz", + "integrity": "sha512-pQ5BsX3QRTgnt5HxgHwgunIRaDXBdkT23tf8dfzmtTIL2LTpdmxgbpbBm0VgFWAIDlezQvQCTgnVIUmHupXHxw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -7403,12 +9438,43 @@ "node": ">= 0.4" } }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, "node_modules/openapi-types": { "version": "12.1.3", "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz", "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==", "license": "MIT" }, + "node_modules/openid-client": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-6.8.1.tgz", + "integrity": "sha512-VoYT6enBo6Vj2j3Q5Ec0AezS+9YGzQo1f5Xc42lreMGlfP4ljiXPKVDvCADh+XHCV/bqPu/wWSiCVXbJKvrODw==", + "license": "MIT", + "dependencies": { + "jose": "^6.1.0", + "oauth4webapi": "^3.8.2" + }, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/openid-client/node_modules/jose": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.3.tgz", + "integrity": "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/opentracing": { "version": "0.14.7", "resolved": "https://registry.npmjs.org/opentracing/-/opentracing-0.14.7.tgz", @@ -7418,6 +9484,24 @@ "node": ">=0.10" } }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -7442,6 +9526,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", @@ -7452,6 +9552,19 @@ "tslib": "^2.0.3" } }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/pascal-case": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", @@ -7478,6 +9591,26 @@ "tslib": "^2.0.3" } }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -7525,12 +9658,12 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" @@ -7542,7 +9675,20 @@ "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "license": "MIT", "engines": { - "node": ">= 6" + "node": ">= 6" + } + }, + "node_modules/plimit-lit": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/plimit-lit/-/plimit-lit-1.6.1.tgz", + "integrity": "sha512-B7+VDyb8Tl6oMJT9oSO2CW8XC/T4UcJGrwOVoNGwOQsQYhlpfajmrMj5xeejqaASq3V/EqThyOeATEOMuSEXiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "queue-lit": "^1.5.1" + }, + "engines": { + "node": ">=12" } }, "node_modules/pluralize": { @@ -7593,6 +9739,32 @@ "node": ">=0.10.0" } }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.3.tgz", + "integrity": "sha512-QgODejq9K3OzoBbuyobZlUhznP5SKwPqp+6Q6xw6o8gnhr4O85L2U915iM2IDcfF2NPXVaM9zlo9tdwipnYwzg==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/process": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/process/-/process-0.10.1.tgz", @@ -7644,6 +9816,26 @@ "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", "license": "Apache-2.0" }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/qs": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", @@ -7659,6 +9851,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/queue-lit": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/queue-lit/-/queue-lit-1.5.2.tgz", + "integrity": "sha512-tLc36IOPeMAubu8BkW8YDBV+WyIgKlYU7zUNs0J5Vk9skSZ4JfGlPOqplP0aHdfv7HL0B2Pg6nwiq60Qc6M2Hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -7679,6 +9881,32 @@ ], "license": "MIT" }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/readline-sync": { "version": "1.4.10", "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", @@ -7783,6 +10011,12 @@ "node": ">=0.10.0" } }, + "node_modules/rfc4648": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/rfc4648/-/rfc4648-1.5.4.tgz", + "integrity": "sha512-rRg/6Lb+IGfJqO05HZkN50UtY7K/JhxJag1kP23+zyMfrvoB0B7RWv06MbOzoc79RgCdNTiUaNsTT1AJZ7Z+cg==", + "license": "MIT" + }, "node_modules/rfdc": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", @@ -7869,6 +10103,29 @@ "node": ">= 0.4" } }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", @@ -7950,6 +10207,16 @@ "node": ">=8" } }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, "node_modules/snake-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", @@ -7960,6 +10227,34 @@ "tslib": "^2.0.3" } }, + "node_modules/socks": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "license": "MIT", + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/sprintf-js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", @@ -7972,6 +10267,26 @@ "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==", "license": "MIT" }, + "node_modules/stream-buffers": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.3.tgz", + "integrity": "sha512-pqMqwQCso0PBJt2PQmDO0cFj0lyqmiwOMiMSkVtRokl7e+ZTRYgDHKnuZNbqjiJXgsg4nuqtD/zxuo9KqTp0Yw==", + "license": "Unlicense", + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/streamx": { + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz", + "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", + "license": "MIT", + "dependencies": { + "events-universal": "^1.0.0", + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + } + }, "node_modules/string-template": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", @@ -8003,6 +10318,19 @@ "node": ">=8" } }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/strnum": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz", @@ -8046,6 +10374,44 @@ "node": ">= 6" } }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar-fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.1.tgz", + "integrity": "sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0" + } + }, + "node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "license": "MIT", + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, "node_modules/tdigest": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz", @@ -8055,6 +10421,15 @@ "bintrees": "1.0.2" } }, + "node_modules/text-decoder": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "license": "Apache-2.0", + "dependencies": { + "b4a": "^1.6.4" + } + }, "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", @@ -8102,12 +10477,12 @@ } }, "node_modules/tiny-lru": { - "version": "11.4.5", - "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-11.4.5.tgz", - "integrity": "sha512-hkcz3FjNJfKXjV4mjQ1OrXSLAehg8Hw+cEZclOVT+5c/cWQWImQ9wolzTjth+dmmDe++p3bme3fTxz6Q4Etsqw==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-8.0.2.tgz", + "integrity": "sha512-ApGvZ6vVvTNdsmt676grvCkUCGwzG9IqXma5Z07xJgiC5L7akUMof5U8G2JTI9Rz/ovtVhJBlY6mNhEvtjzOIg==", "license": "BSD-3-Clause", "engines": { - "node": ">=12" + "node": ">=6" } }, "node_modules/tinyglobby": { @@ -8126,35 +10501,6 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -8199,18 +10545,134 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "license": "MIT" }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, "node_modules/ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", "license": "Apache-2.0" }, + "node_modules/tsc-alias": { + "version": "1.8.16", + "resolved": "https://registry.npmjs.org/tsc-alias/-/tsc-alias-1.8.16.tgz", + "integrity": "sha512-QjCyu55NFyRSBAl6+MTFwplpFcnm2Pq01rR/uxfqJoLMm6X3O14KEGtaSDZpJYaE1bJBGDjD0eSuiIWPe2T58g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^3.5.3", + "commander": "^9.0.0", + "get-tsconfig": "^4.10.0", + "globby": "^11.0.4", + "mylas": "^2.1.9", + "normalize-path": "^3.0.0", + "plimit-lit": "^1.2.6" + }, + "bin": { + "tsc-alias": "dist/bin/index.js" + }, + "engines": { + "node": ">=16.20.2" + } + }, + "node_modules/tsc-alias/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || >=14" + } + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, + "node_modules/tsx": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.27.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.48.1.tgz", + "integrity": "sha512-FbOKN1fqNoXp1hIl5KYpObVrp0mCn+CLgn479nmu2IsRMrx2vyv74MmsBLVlhg8qVwNFGbXSp8fh1zp8pEoC2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.48.1", + "@typescript-eslint/parser": "8.48.1", + "@typescript-eslint/typescript-estree": "8.48.1", + "@typescript-eslint/utils": "8.48.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, "node_modules/uncrypto": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", @@ -8235,6 +10697,18 @@ "node": ">=0.10.0" } }, + "node_modules/unixify/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "license": "MIT", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/update-browserslist-db": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", @@ -8283,6 +10757,16 @@ "tslib": "^2.0.3" } }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, "node_modules/url-join": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", @@ -8324,6 +10808,32 @@ "webidl-conversions": "^3.0.0" } }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -8341,6 +10851,12 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, "node_modules/ws": { "version": "8.18.3", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", @@ -8393,15 +10909,18 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", - "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", "license": "ISC", "bin": { "yaml": "bin.mjs" }, "engines": { "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" } }, "node_modules/yargs": { diff --git a/package.json b/package.json index 40b57d3..d11ebf5 100644 --- a/package.json +++ b/package.json @@ -1,25 +1,44 @@ { - "name": "graphql", + "name": "graphql-gateway", "version": "1.0.0", - "description": "", - "main": "index.js", + "description": "GraphQL Gateway with scoped resource support", + "main": "dist/gateway/index.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "supergraph:compose": "npx mesh-compose -o supergraph.graphql", - "dev": "npx hive-gateway supergraph", - "start:gateway": "docker build --build-arg DATUM_TOKEN=$DATUM_TOKEN --build-arg DATUM_BASE_URL=$DATUM_BASE_URL -t graphql-gateway . && docker run --rm -p 4000:4000 graphql-gateway && docker rmi graphql-gateway" + "dev": "tsx src/gateway/index.ts", + "build": "tsc && tsc-alias", + "start": "node dist/gateway/index.js", + "local:setup": "bash scripts/local-test.sh", + "supergraph:compose": "npx mesh-compose -c src/mesh/index.ts -o src/mesh/gen/supergraph.graphql", + "docker:gateway": "docker build -t graphql-gateway . && docker run --rm -p 4000:4000 graphql-gateway && docker rmi graphql-gateway", + "format": "prettier --write .", + "format:check": "prettier --check .", + "lint": "eslint .", + "lint:fix": "eslint . --fix" }, - "keywords": [], + "keywords": [ + "graphql", + "gateway", + "api" + ], "author": "", "license": "ISC", "type": "commonjs", "dependencies": { "@graphql-hive/gateway": "^2.1.19", + "@graphql-hive/router-runtime": "^1.0.1", "@graphql-mesh/compose-cli": "^1.5.3", + "@kubernetes/client-node": "^1.4.0", "@omnigraph/openapi": "^0.109.23", "yaml": "^2.3.2" }, "devDependencies": { - "@types/node": "^24.10.1" + "@eslint/js": "^9.39.1", + "@types/node": "^24.10.1", + "eslint": "^9.39.1", + "prettier": "^3.7.3", + "tsc-alias": "^1.8.16", + "tsx": "^4.19.0", + "typescript": "^5.3.0", + "typescript-eslint": "^8.48.1" } } diff --git a/scripts/local-test.sh b/scripts/local-test.sh new file mode 100755 index 0000000..9613fb8 --- /dev/null +++ b/scripts/local-test.sh @@ -0,0 +1,354 @@ +#!/bin/bash +set -e + +# ============================================================================= +# GraphQL Gateway Local Test Setup Script +# ============================================================================= +# This script sets up everything needed to test the gateway locally with mTLS. +# +# Prerequisites: +# - kubectl configured to access a cluster with milo-apiserver +# - cert-manager installed in the cluster +# - datum-control-plane ClusterIssuer configured +# +# Usage: +# ./scripts/local-test.sh # Full setup + run gateway +# ./scripts/local-test.sh setup # Only setup (no gateway) +# ./scripts/local-test.sh run # Only run gateway (assumes setup done) +# ./scripts/local-test.sh clean # Cleanup +# ============================================================================= + +# Required kubectl context +REQUIRED_CONTEXT="gke_datum-cloud-staging_us-east4_infrastructure-control-plane-staging" + +# Check kubectl context before doing anything +check_kubectl_context() { + local current_context + current_context=$(kubectl config current-context 2>/dev/null) + + if [ -z "$current_context" ]; then + echo -e "\033[0;31m[ERROR]\033[0m Unable to get current kubectl context. Is kubectl configured?" + exit 1 + fi + + if [ "$current_context" != "$REQUIRED_CONTEXT" ]; then + echo -e "\033[0;31m[ERROR]\033[0m Wrong kubectl context!" + echo "" + echo " Current context: $current_context" + echo " Required context: $REQUIRED_CONTEXT" + echo "" + echo "Please switch to the correct context:" + echo " kubectl config use-context $REQUIRED_CONTEXT" + echo "" + exit 1 + fi + + echo -e "\033[0;32m[INFO]\033[0m kubectl context verified: $current_context" +} + +# Run context check immediately (except for help command) +if [ "${1:-}" != "--help" ] && [ "${1:-}" != "-h" ]; then + check_kubectl_context +fi + +LOCAL_DIR="/tmp/graphql-gateway-test" +NAMESPACE="${NAMESPACE:-datum-system}" +CERT_NAMESPACE="${CERT_NAMESPACE:-default}" +CERT_NAME="graphql-gateway-local-test" +APISERVER_HOST="milo-apiserver" +APISERVER_PORT="6443" + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +log_info() { echo -e "${GREEN}[INFO]${NC} $1"; } +log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } +log_error() { echo -e "${RED}[ERROR]${NC} $1"; } + +# ============================================================================= +# Setup Functions +# ============================================================================= + +setup_directories() { + log_info "Creating local directory structure..." + mkdir -p "$LOCAL_DIR/pki/client" + mkdir -p "$LOCAL_DIR/pki/trust" + mkdir -p "$LOCAL_DIR/config" + log_info "Directories created at $LOCAL_DIR" +} + +extract_ca_cert() { + log_info "Extracting CA certificate from cluster..." + + # Try different ConfigMap names + for cm_name in "datum-control-plane-trust-bundle" "trust-bundle" "datum-control-plane-system-bundle"; do + if kubectl get configmap "$cm_name" -n "$NAMESPACE" &>/dev/null; then + kubectl get configmap "$cm_name" -n "$NAMESPACE" -o jsonpath='{.data.ca\.crt}' > "$LOCAL_DIR/pki/trust/ca.crt" + log_info "CA certificate extracted from ConfigMap: $cm_name" + return 0 + fi + done + + log_error "Could not find CA certificate ConfigMap. Please manually copy CA to: $LOCAL_DIR/pki/trust/ca.crt" + return 1 +} + +create_client_cert() { + log_info "Creating client certificate..." + + # Check if certificate already exists + if kubectl get certificate "$CERT_NAME" -n "$CERT_NAMESPACE" &>/dev/null; then + log_info "Certificate $CERT_NAME already exists, checking if ready..." + else + log_info "Creating Certificate resource..." + cat << EOF | kubectl apply -f - +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: $CERT_NAME + namespace: $CERT_NAMESPACE +spec: + secretName: ${CERT_NAME}-cert + issuerRef: + name: datum-control-plane + kind: ClusterIssuer + commonName: graphql-gateway-local + subject: + organizations: + - system:masters + usages: + - client auth + duration: 24h +EOF + fi + + # Wait for certificate to be ready + log_info "Waiting for certificate to be ready..." + if ! kubectl wait --for=condition=Ready certificate/"$CERT_NAME" -n "$CERT_NAMESPACE" --timeout=120s; then + log_error "Certificate not ready. Check cert-manager logs." + kubectl describe certificate "$CERT_NAME" -n "$CERT_NAMESPACE" + return 1 + fi + + log_info "Certificate is ready!" +} + +extract_client_cert() { + log_info "Extracting client certificates..." + + SECRET_NAME="${CERT_NAME}-cert" + + kubectl get secret "$SECRET_NAME" -n "$CERT_NAMESPACE" -o jsonpath='{.data.tls\.crt}' | base64 -d > "$LOCAL_DIR/pki/client/tls.crt" + kubectl get secret "$SECRET_NAME" -n "$CERT_NAMESPACE" -o jsonpath='{.data.tls\.key}' | base64 -d > "$LOCAL_DIR/pki/client/tls.key" + + log_info "Client certificates extracted to $LOCAL_DIR/pki/client/" +} + +create_kubeconfig() { + log_info "Creating local kubeconfig..." + + cat > "$LOCAL_DIR/config/kubeconfig" << EOF +apiVersion: v1 +clusters: +- cluster: + certificate-authority: $LOCAL_DIR/pki/trust/ca.crt + server: https://${APISERVER_HOST}:${APISERVER_PORT} + name: milo-apiserver +contexts: +- context: + cluster: milo-apiserver + user: graphql-gateway-local + name: local +current-context: local +kind: Config +preferences: {} +users: +- name: graphql-gateway-local + user: + client-certificate: $LOCAL_DIR/pki/client/tls.crt + client-key: $LOCAL_DIR/pki/client/tls.key +EOF + + log_info "Kubeconfig created at $LOCAL_DIR/config/kubeconfig" +} + +setup_hosts_entry() { + log_info "Checking /etc/hosts for $APISERVER_HOST entry..." + + if grep -q "$APISERVER_HOST" /etc/hosts; then + log_info "Host entry for $APISERVER_HOST already exists" + else + log_warn "Need to add $APISERVER_HOST to /etc/hosts (requires sudo)" + echo "" + echo "Please run this command manually:" + echo " sudo sh -c 'echo \"127.0.0.1 $APISERVER_HOST\" >> /etc/hosts'" + echo "" + read -p "Press Enter after adding the hosts entry (or Ctrl+C to cancel)..." + + if ! grep -q "$APISERVER_HOST" /etc/hosts; then + log_error "Host entry not found. Please add it manually." + return 1 + fi + fi +} + +start_port_forward() { + log_info "Starting port-forward to milo-apiserver..." + + # Kill any existing port-forward + pkill -f "kubectl port-forward.*milo-apiserver.*${APISERVER_PORT}" 2>/dev/null || true + sleep 1 + + # Start port-forward in background + kubectl port-forward -n "$NAMESPACE" svc/milo-apiserver "${APISERVER_PORT}:${APISERVER_PORT}" & + PF_PID=$! + + # Wait for port-forward to be ready + sleep 3 + + if ! kill -0 $PF_PID 2>/dev/null; then + log_error "Port-forward failed to start" + return 1 + fi + + log_info "Port-forward started (PID: $PF_PID)" + echo "$PF_PID" > "$LOCAL_DIR/port-forward.pid" +} + +verify_connection() { + log_info "Verifying mTLS connection..." + + if curl -sk --cert "$LOCAL_DIR/pki/client/tls.crt" \ + --key "$LOCAL_DIR/pki/client/tls.key" \ + --cacert "$LOCAL_DIR/pki/trust/ca.crt" \ + "https://${APISERVER_HOST}:${APISERVER_PORT}/healthz" | grep -q "ok"; then + log_info "mTLS connection verified successfully!" + return 0 + else + log_warn "Could not verify connection (this might be okay, healthz endpoint may not exist)" + return 0 + fi +} + +run_gateway() { + log_info "Starting GraphQL Gateway..." + echo "" + echo "=========================================" + echo "Gateway Configuration:" + echo " KUBECONFIG: $LOCAL_DIR/config/kubeconfig" + echo " CA Cert: $LOCAL_DIR/pki/trust/ca.crt" + echo " Server: https://${APISERVER_HOST}:${APISERVER_PORT}" + echo "=========================================" + echo "" + + cd "$(dirname "$0")/.." + + npm install + + NODE_EXTRA_CA_CERTS="$LOCAL_DIR/pki/trust/ca.crt" \ + KUBECONFIG="$LOCAL_DIR/config/kubeconfig" \ + npm run dev +} + +# ============================================================================= +# Cleanup Function +# ============================================================================= + +cleanup() { + log_info "Cleaning up..." + + # Stop port-forward + if [ -f "$LOCAL_DIR/port-forward.pid" ]; then + PID=$(cat "$LOCAL_DIR/port-forward.pid") + kill "$PID" 2>/dev/null || true + rm "$LOCAL_DIR/port-forward.pid" + log_info "Stopped port-forward" + fi + + # Delete certificate + if kubectl get certificate "$CERT_NAME" -n "$CERT_NAMESPACE" &>/dev/null; then + kubectl delete certificate "$CERT_NAME" -n "$CERT_NAMESPACE" + kubectl delete secret "${CERT_NAME}-cert" -n "$CERT_NAMESPACE" 2>/dev/null || true + log_info "Deleted certificate and secret" + fi + + # Remove local directory + if [ -d "$LOCAL_DIR" ]; then + rm -rf "$LOCAL_DIR" + log_info "Removed $LOCAL_DIR" + fi + + log_info "Cleanup complete!" + echo "" + echo "Note: You may want to remove the /etc/hosts entry manually:" + echo " sudo sed -i '' '/$APISERVER_HOST/d' /etc/hosts" +} + +# ============================================================================= +# Full Setup +# ============================================================================= + +full_setup() { + echo "" + echo "=========================================" + echo " GraphQL Gateway Local Test Setup" + echo "=========================================" + echo "" + + setup_directories + extract_ca_cert + create_client_cert + extract_client_cert + create_kubeconfig + setup_hosts_entry + start_port_forward + verify_connection + + echo "" + log_info "Setup complete!" + echo "" +} + +# ============================================================================= +# Main +# ============================================================================= + +case "${1:-all}" in + setup) + full_setup + echo "Run './scripts/local-test.sh run' to start the gateway" + ;; + run) + if [ ! -f "$LOCAL_DIR/config/kubeconfig" ]; then + log_error "Setup not complete. Run './scripts/local-test.sh setup' first" + exit 1 + fi + + # Start port-forward if not running + if [ ! -f "$LOCAL_DIR/port-forward.pid" ] || ! kill -0 $(cat "$LOCAL_DIR/port-forward.pid") 2>/dev/null; then + start_port_forward + fi + + run_gateway + ;; + clean|cleanup) + cleanup + ;; + all|"") + full_setup + run_gateway + ;; + *) + echo "Usage: $0 [setup|run|clean|all]" + echo "" + echo "Commands:" + echo " setup - Set up certificates and configuration only" + echo " run - Run the gateway (assumes setup is done)" + echo " clean - Clean up all resources" + echo " all - Full setup + run gateway (default)" + exit 1 + ;; +esac diff --git a/src/gateway/auth/index.ts b/src/gateway/auth/index.ts new file mode 100644 index 0000000..56e6d34 --- /dev/null +++ b/src/gateway/auth/index.ts @@ -0,0 +1,77 @@ +import { env } from '@/gateway/config' +import { getK8sMTLSConfig, createMTLSFetch } from '@/gateway/clients' +import { log } from '@/shared/utils' + +// K8s mTLS state +let k8sServer: string | null = null +let mtlsFetch: typeof fetch | null = null +let initialized = false + +/** + * Initialize K8s authentication by loading mTLS credentials from kubeconfig. + * + * This also overrides the global fetch to use mTLS for ALL HTTP requests + * to the K8s API server, including internal GraphQL Mesh fetches. + * + * @throws Error if KUBECONFIG is not set or kubeconfig is invalid + */ +export function initAuth(): void { + if (initialized) { + log.warn('K8s auth already initialized, skipping') + return + } + + if (!env.kubeconfigPath) { + throw new Error('KUBECONFIG environment variable is required') + } + + const mtlsConfig = getK8sMTLSConfig({ kubeconfigPath: env.kubeconfigPath }) + + k8sServer = mtlsConfig.server + mtlsFetch = createMTLSFetch(mtlsConfig) + + // Override global fetch to use mTLS for requests to the K8s API server + const originalFetch = globalThis.fetch + globalThis.fetch = ((input: RequestInfo | URL, init?: RequestInit) => { + const url = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url + + if (url.startsWith(k8sServer!)) { + log.debug('Using mTLS fetch for K8s API request', { url }) + return mtlsFetch!(input, init) + } + + return originalFetch(input, init) + }) as typeof fetch + + initialized = true + log.info('K8s mTLS auth initialized', { server: k8sServer }) +} + +/** + * Get the K8s cluster server URL. + * @throws Error if auth not initialized + */ +export function getK8sServer(): string { + if (!k8sServer) { + throw new Error('K8s auth not initialized. Call initAuth() first.') + } + return k8sServer +} + +/** + * Get the mTLS fetch function for making authenticated requests. + * @throws Error if auth not initialized + */ +export function getMTLSFetch(): typeof fetch { + if (!mtlsFetch) { + throw new Error('K8s auth not initialized. Call initAuth() first.') + } + return mtlsFetch +} + +/** + * Check if auth has been initialized. + */ +export function isInitialized(): boolean { + return initialized +} diff --git a/src/gateway/clients/index.ts b/src/gateway/clients/index.ts new file mode 100644 index 0000000..4543243 --- /dev/null +++ b/src/gateway/clients/index.ts @@ -0,0 +1,2 @@ +export { getK8sMTLSConfig, createMTLSFetch } from './k8s' +export type { K8sAuthConfig, K8sMTLSConfig } from './k8s' diff --git a/src/gateway/clients/k8s.ts b/src/gateway/clients/k8s.ts new file mode 100644 index 0000000..ec12df9 --- /dev/null +++ b/src/gateway/clients/k8s.ts @@ -0,0 +1,159 @@ +import { readFileSync } from 'node:fs' +import * as https from 'node:https' +import { KubeConfig } from '@kubernetes/client-node' +import { log } from '@/shared/utils' + +export interface K8sAuthConfig { + /** Path to kubeconfig file (required) */ + kubeconfigPath: string +} + +export interface K8sMTLSConfig { + /** Cluster server URL */ + server: string + /** Path to client certificate */ + certPath: string + /** Path to client key */ + keyPath: string + /** Path to CA certificate */ + caPath: string +} + +/** + * Load kubeconfig and extract mTLS configuration. + * + * @param config - Configuration with kubeconfig file path + * @returns mTLS configuration including cert paths and server URL + * @throws Error if kubeconfig cannot be loaded or cert paths not found + */ +export function getK8sMTLSConfig(config: K8sAuthConfig): K8sMTLSConfig { + const { kubeconfigPath } = config + + log.debug('Loading kubeconfig', { path: kubeconfigPath }) + + const kubeConfig = new KubeConfig() + + try { + kubeConfig.loadFromFile(kubeconfigPath) + } catch (error) { + const message = error instanceof Error ? error.message : String(error) + log.error('Failed to load kubeconfig', { path: kubeconfigPath, error: message }) + throw new Error(`Failed to load kubeconfig from ${kubeconfigPath}: ${message}`) + } + + const cluster = kubeConfig.getCurrentCluster() + if (!cluster?.server) { + throw new Error('No cluster server found in kubeconfig') + } + + const user = kubeConfig.getCurrentUser() + if (!user) { + throw new Error('No user found in kubeconfig') + } + + // Check for client certificate auth + if (!user.certFile) { + throw new Error('No client certificate path found in kubeconfig user') + } + if (!user.keyFile) { + throw new Error('No client key path found in kubeconfig user') + } + + // CA can be in cluster config + const caPath = cluster.caFile + if (!caPath) { + throw new Error('No CA certificate path found in kubeconfig cluster') + } + + log.info('Kubeconfig loaded', { + context: kubeConfig.getCurrentContext(), + cluster: cluster.server, + user: user.name, + certPath: user.certFile, + keyPath: user.keyFile, + caPath, + }) + + return { + server: cluster.server, + certPath: user.certFile, + keyPath: user.keyFile, + caPath, + } +} + +/** + * Create a custom fetch function that uses mTLS for authentication. + * + * @param mtlsConfig - mTLS configuration with cert paths + * @returns Fetch function with mTLS support + */ +export function createMTLSFetch(mtlsConfig: K8sMTLSConfig): typeof fetch { + log.debug('Creating mTLS fetch', { + certPath: mtlsConfig.certPath, + keyPath: mtlsConfig.keyPath, + caPath: mtlsConfig.caPath, + }) + + // Read certificates + const cert = readFileSync(mtlsConfig.certPath, 'utf8') + const key = readFileSync(mtlsConfig.keyPath, 'utf8') + const ca = readFileSync(mtlsConfig.caPath, 'utf8') + + // Create HTTPS agent with mTLS + const agent = new https.Agent({ + cert, + key, + ca, + rejectUnauthorized: true, + }) + + log.info('mTLS fetch created successfully') + + // Return custom fetch using the mTLS agent + return async (input: RequestInfo | URL, init?: RequestInit): Promise => { + const url = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url + const parsedUrl = new URL(url) + + return new Promise((resolve, reject) => { + const options: https.RequestOptions = { + hostname: parsedUrl.hostname, + port: parsedUrl.port || 443, + path: parsedUrl.pathname + parsedUrl.search, + method: init?.method || 'GET', + headers: init?.headers as Record, + agent, + } + + const req = https.request(options, (res) => { + const chunks: Buffer[] = [] + + res.on('data', (chunk: Buffer) => chunks.push(chunk)) + res.on('end', () => { + const body = Buffer.concat(chunks).toString('utf8') + + // Create a Response-like object + const response = new Response(body, { + status: res.statusCode || 200, + statusText: res.statusMessage || 'OK', + headers: new Headers(res.headers as Record), + }) + + resolve(response) + }) + }) + + req.on('error', (error) => { + log.error('mTLS request failed', { url, error: error.message }) + reject(error) + }) + + // Write body if present + if (init?.body) { + req.write(init.body) + } + + req.end() + }) + } +} diff --git a/src/gateway/config/env.ts b/src/gateway/config/env.ts new file mode 100644 index 0000000..5af6ac3 --- /dev/null +++ b/src/gateway/config/env.ts @@ -0,0 +1,19 @@ +import { config as sharedConfig } from '@/shared/config' + +/** + * Environment configuration for the gateway. + * All values can be overridden via environment variables. + */ +export const env = { + /** Port for the gateway (default: 4000) */ + port: Number(process.env.PORT) || 4000, + + /** Log level for the gateway */ + logLevel: sharedConfig.logLevel, + + /** Path to the KUBECONFIG file (required) */ + kubeconfigPath: process.env.KUBECONFIG || '', + + /** Polling interval for supergraph composition in milliseconds (default: 20m) */ + pollingInterval: Number(process.env.POLLING_INTERVAL) || 1_200_000, +} diff --git a/src/gateway/config/index.ts b/src/gateway/config/index.ts new file mode 100644 index 0000000..5246d52 --- /dev/null +++ b/src/gateway/config/index.ts @@ -0,0 +1,12 @@ +// Environment configuration +export { env } from './env' + +// Routing configuration +export { + parentResources, + validParentResources, + scopedEndpoints, + validKindsPlural, + SCOPED_RESOURCE_PATTERN, + availableEndpoints, +} from './routes' diff --git a/src/gateway/config/routes.ts b/src/gateway/config/routes.ts new file mode 100644 index 0000000..788e49e --- /dev/null +++ b/src/gateway/config/routes.ts @@ -0,0 +1,38 @@ +import { readFileSync } from 'node:fs' +import { resolve } from 'node:path' +import yaml from 'yaml' +import type { ParentResource } from '@/gateway/types' + +const ROOT_DIR = resolve(__dirname, '../../..') + +// Load parent resources configuration from YAML +const parentResourcesPath = resolve(ROOT_DIR, 'config/resources/parent-resources.yaml') +export const parentResources = yaml.parse( + readFileSync(parentResourcesPath, 'utf8') +) as ParentResource[] + +// Build a set of valid parent resource combinations for fast lookup +// Format: "apiGroup/version/kind" (kind in lowercase) +export const validParentResources = new Set( + parentResources.map((p) => `${p.apiGroup}/${p.version}/${p.kind.toLowerCase()}`) +) + +// Pre-compute scoped endpoint patterns for documentation +export const scopedEndpoints = Array.from(validParentResources).map((key) => { + const [apiGroup, version, kind] = key.split('/') + return `/${apiGroup}/${version}/${kind}s/{name}/graphql` +}) + +// Build valid kinds from configuration (pluralized, lowercase) +export const validKindsPlural = [ + ...new Set(Array.from(validParentResources).map((key) => key.split('/')[2] + 's')), +] + +// URL pattern for scoped resources - built dynamically from config +export const SCOPED_RESOURCE_PATTERN = + validKindsPlural.length > 0 + ? new RegExp(`^/([^/]+)/([^/]+)/(${validKindsPlural.join('|')})/([^/]+)/graphql$`) + : null + +// All available endpoints for documentation +export const availableEndpoints = ['/graphql', '/healthcheck', '/readiness', ...scopedEndpoints] diff --git a/src/gateway/handlers/graphql.ts b/src/gateway/handlers/graphql.ts new file mode 100644 index 0000000..f570a2c --- /dev/null +++ b/src/gateway/handlers/graphql.ts @@ -0,0 +1,79 @@ +import type { IncomingMessage } from 'node:http' +import { sendJson, parseUrl } from '@/gateway/utils' +import { validParentResources, scopedEndpoints, SCOPED_RESOURCE_PATTERN } from '@/gateway/config' +import { gateway } from '@/gateway/runtime' +import { log } from '@/shared/utils' +import type { ScopedMatch, GatewayHandler } from '@/gateway/types' + +/** + * Parse a scoped URL match into a structured object. + */ +const parseScopedMatch = (match: RegExpExecArray): ScopedMatch => { + const [, apiGroup, version, kindPlural, resourceName] = match + return { + apiGroup, + version, + kindPlural, + kind: kindPlural.replace(/s$/, ''), + resourceName, + } +} + +/** + * Set headers for scoped resource requests. + * These headers are used by the upstream API to route to the correct resource. + */ +const setScopedHeaders = (req: IncomingMessage, scoped: ScopedMatch): void => { + req.headers['x-resource-api-group'] = scoped.apiGroup + req.headers['x-resource-version'] = scoped.version + req.headers['x-resource-kind'] = scoped.kind + req.headers['x-resource-name'] = scoped.resourceName + req.headers['x-resource-endpoint-prefix'] = + `/apis/${scoped.apiGroup}/${scoped.version}/${scoped.kindPlural}/${scoped.resourceName}/control-plane` +} + +/** Check if the path is the root GraphQL endpoint */ +export const isRootGraphQL = (pathname: string): boolean => { + return pathname === '/graphql' +} + +/** Check if the path is a scoped GraphQL endpoint */ +export const isScopedGraphQL = (pathname: string): boolean => { + return SCOPED_RESOURCE_PATTERN?.test(pathname) === true +} + +/** Check if the path is any GraphQL endpoint (root or scoped) */ +export const isGraphQLEndpoint = (pathname: string): boolean => { + return isRootGraphQL(pathname) || isScopedGraphQL(pathname) +} + +/** + * Handle GraphQL requests (both root and scoped). + * Parses the URL, validates scoped resources, and forwards to the gateway. + */ +export const handleGraphQL: GatewayHandler = async (req, res) => { + const url = parseUrl(req.url!, req.headers.host!) + const scopedMatch = SCOPED_RESOURCE_PATTERN?.exec(url.pathname) + + if (scopedMatch) { + const scoped = parseScopedMatch(scopedMatch) + const lookupKey = `${scoped.apiGroup}/${scoped.version}/${scoped.kind}` + + if (!validParentResources.has(lookupKey)) { + log.warn(`Invalid parent resource: ${lookupKey}`) + return sendJson(res, 404, { + error: 'Invalid parent resource', + message: `No APIs are scoped to ${lookupKey}`, + validEndpoints: scopedEndpoints, + }) + } + + log.info(`Scoped request: ${scoped.kind}/${scoped.resourceName}`) + setScopedHeaders(req, scoped) + } else { + log.info('Root GraphQL request') + req.headers['x-resource-endpoint-prefix'] = '' + } + + return gateway(req, res) +} diff --git a/src/gateway/handlers/health.ts b/src/gateway/handlers/health.ts new file mode 100644 index 0000000..5a6c09f --- /dev/null +++ b/src/gateway/handlers/health.ts @@ -0,0 +1,25 @@ +import type { IncomingMessage, ServerResponse } from 'node:http' +import { sendJson } from '@/gateway/utils' +import { isInitialized } from '@/gateway/auth' + +const HEALTH_PATHS = new Set(['/health', '/healthz', '/healthcheck']) + +export const isHealthCheck = (pathname: string): boolean => { + return HEALTH_PATHS.has(pathname) +} + +export const handleHealthCheck = (_req: IncomingMessage, res: ServerResponse): void => { + sendJson(res, 200, { status: 'ok' }) +} + +export const isReadinessCheck = (pathname: string): boolean => { + return pathname === '/readiness' +} + +export const handleReadinessCheck = (_req: IncomingMessage, res: ServerResponse): void => { + if (isInitialized()) { + sendJson(res, 200, { status: 'ready' }) + } else { + sendJson(res, 503, { status: 'not ready', reason: 'K8s auth not initialized' }) + } +} diff --git a/src/gateway/handlers/index.ts b/src/gateway/handlers/index.ts new file mode 100644 index 0000000..bcc61a2 --- /dev/null +++ b/src/gateway/handlers/index.ts @@ -0,0 +1,3 @@ +export { isHealthCheck, handleHealthCheck, isReadinessCheck, handleReadinessCheck } from './health' + +export { isRootGraphQL, isScopedGraphQL, isGraphQLEndpoint, handleGraphQL } from './graphql' diff --git a/src/gateway/index.ts b/src/gateway/index.ts new file mode 100644 index 0000000..4b69f41 --- /dev/null +++ b/src/gateway/index.ts @@ -0,0 +1,57 @@ +import { createGatewayServer } from './server' +import { env, scopedEndpoints } from './config' +import { initAuth, getK8sServer } from './auth' +import { initializeGateway } from './runtime' +import { log } from '@/shared/utils' + +const main = async () => { + // Initialize K8s authentication before starting the server + try { + initAuth() + } catch (error) { + const message = error instanceof Error ? error.message : String(error) + log.error('Failed to initialize K8s auth', { error: message }) + process.exit(1) + } + + // Initialize gateway: compose supergraph eagerly + start background polling + try { + await initializeGateway() + } catch (error) { + const message = error instanceof Error ? error.message : String(error) + log.error('Failed to initialize gateway', { error: message }) + process.exit(1) + } + + const server = createGatewayServer() + + server.listen(env.port, () => { + log.info(`Gateway listening on port ${env.port}`) + log.info(`K8s API server: ${getK8sServer()}`) + log.info('Endpoints: /graphql, /healthcheck, /readiness') + + if (scopedEndpoints.length > 0) { + log.info('Scoped endpoints:') + for (const endpoint of scopedEndpoints) { + log.info(` ${endpoint}`) + } + } + }) + + // Graceful shutdown + const shutdown = (signal: string) => { + log.info(`${signal} received, shutting down gracefully...`) + server.close(() => { + log.info('Server closed') + process.exit(0) + }) + } + + process.on('SIGTERM', () => shutdown('SIGTERM')) + process.on('SIGINT', () => shutdown('SIGINT')) +} + +main().catch((error) => { + log.error('Startup failed', { error: String(error) }) + process.exit(1) +}) diff --git a/src/gateway/runtime/index.ts b/src/gateway/runtime/index.ts new file mode 100644 index 0000000..98cf700 --- /dev/null +++ b/src/gateway/runtime/index.ts @@ -0,0 +1,168 @@ +import { createGatewayRuntime } from '@graphql-hive/gateway' +import { unifiedGraphHandler } from '@graphql-hive/router-runtime' +import { composeSubgraphs } from '@graphql-mesh/compose-cli' +import { loadOpenAPISubgraph } from '@omnigraph/openapi' +import { env } from '@/gateway/config' +import { getK8sServer, getMTLSFetch } from '@/gateway/auth' +import { log } from '@/shared/utils' +import type { ApiEntry } from '@/shared/types' + +/** Response shape from /openapi/v3 endpoint */ +interface OpenAPIPathsResponse { + paths: Record +} + +/** + * Fetch API list dynamically from the K8s OpenAPI endpoint. + * Returns paths like "apis/iam.miloapis.com/v1alpha1". + * Called on each polling interval to pick up real-time updates. + */ +const fetchApisFromOpenAPI = async (): Promise => { + const server = getK8sServer() + const fetchFn = getMTLSFetch() + const openApiUrl = `${server}/openapi/v3` + + try { + log.info(`Fetching API list from ${openApiUrl}`) + const response = await fetchFn(openApiUrl) + + if (!response.ok) { + throw new Error(`Failed to fetch OpenAPI paths: ${response.status} ${response.statusText}`) + } + + const data = (await response.json()) as OpenAPIPathsResponse + const apis = Object.keys(data.paths).map((path) => ({ path })) + + log.info(`Discovered ${apis.length} APIs from OpenAPI endpoint`, { + apis: apis.map((a) => a.path), + }) + + return apis + } catch (error) { + log.error(`Failed to fetch APIs from OpenAPI endpoint: ${error}`) + throw error + } +} + +/** Logger wrapper compatible with GraphQL Mesh Logger interface */ +const meshLogger = { + log: console.log.bind(console), + debug: console.debug.bind(console), + info: console.info.bind(console), + warn: console.warn.bind(console), + error: console.error.bind(console), + child: () => meshLogger, +} + +/** + * Derive a unique subgraph name from an API path. + * e.g., "apis/iam.miloapis.com/v1alpha1" -> "APIS_IAM_MILOAPIS_COM_V1ALPHA1" + * e.g., "api/v1" -> "API_V1" + */ +const getSubgraphName = (path: string): string => { + return path + .replace(/[^a-zA-Z0-9]/g, '_') // Replace non-alphanumeric with underscores + .replace(/_+/g, '_') // Collapse multiple underscores + .replace(/^_|_$/g, '') // Trim leading/trailing underscores + .toUpperCase() +} + +/** + * Create subgraph handlers for each API defined in the configuration. + * Each subgraph loads its schema from the K8s API server's OpenAPI endpoint. + */ +const getSubgraphs = (apis: ApiEntry[]) => { + const server = getK8sServer() + const fetchFn = getMTLSFetch() + + return apis.map(({ path }) => ({ + sourceHandler: loadOpenAPISubgraph(getSubgraphName(path), { + source: `${server}/openapi/v3/${path}`, + endpoint: `${server}{context.headers.x-resource-endpoint-prefix}`, + fetch: fetchFn, + operationHeaders: { + Authorization: '{context.headers.authorization}', + }, + }), + })) +} + +/** Cached supergraph SDL - updated by background polling */ +let supergraphSdl: string = '' + +/** + * Compose supergraph by fetching OpenAPI specs at runtime. + * Called on startup and periodically based on pollingInterval. + * Fetches API list from OpenAPI endpoint on each call for real-time discovery. + * Updates the cached supergraphSdl variable. + */ +const composeSupergraph = async (): Promise => { + log.info('Composing supergraph from OpenAPI specs...') + + // Fetch APIs dynamically from OpenAPI endpoint on each poll + const apis = await fetchApisFromOpenAPI() + const handlers = getSubgraphs(apis) + const subgraphs = await Promise.all( + handlers.map(async ({ sourceHandler }) => { + const result = sourceHandler({ + fetch: globalThis.fetch, + cwd: process.cwd(), + logger: meshLogger, + }) + const schema = await result.schema$ + return { name: result.name, schema } + }) + ) + + const result = composeSubgraphs(subgraphs) + supergraphSdl = result.supergraphSdl + log.info('Supergraph composed successfully') + + return result.supergraphSdl +} + +/** + * Returns the cached supergraph SDL. + * Falls back to composing if not ready (safety mechanism). + */ +const getSupergraph = async (): Promise => { + if (!supergraphSdl) { + log.warn('Supergraph not ready, composing on demand...') + return composeSupergraph() + } + return supergraphSdl +} + +/** + * Start background polling to refresh the supergraph SDL. + */ +const startPolling = (): void => { + setInterval(async () => { + try { + await composeSupergraph() + } catch (error) { + log.error(`Failed to refresh supergraph: ${error}`) + } + }, env.pollingInterval) +} + +/** + * Initialize the gateway: compose supergraph eagerly, then start background polling. + * Must be called before handling requests. + */ +export const initializeGateway = async (): Promise => { + await composeSupergraph() + startPolling() + log.info(`Background polling started (interval: ${env.pollingInterval}ms)`) +} + +/** + * Gateway runtime instance. + * Uses the cached supergraph SDL which is refreshed by background polling. + */ +export const gateway = createGatewayRuntime({ + supergraph: getSupergraph, + pollingInterval: env.pollingInterval, + logging: env.logLevel, + unifiedGraphHandler, +}) diff --git a/src/gateway/server.ts b/src/gateway/server.ts new file mode 100644 index 0000000..3bde3be --- /dev/null +++ b/src/gateway/server.ts @@ -0,0 +1,44 @@ +import { createServer } from 'node:http' +import { sendJson, parseUrl } from './utils/' +import { availableEndpoints } from './config' +import { log } from '@/shared/utils' +import { + isHealthCheck, + handleHealthCheck, + isReadinessCheck, + handleReadinessCheck, + isGraphQLEndpoint, + handleGraphQL, +} from './handlers' + +export const createGatewayServer = () => { + return createServer(async (req, res) => { + const url = parseUrl(req.url!, req.headers.host!) + const { pathname } = url + + // Log incoming request (debug level to avoid noise) + log.info(`${req.method} ${pathname}`) + + // GraphQL endpoints (root and scoped) + if (isGraphQLEndpoint(pathname)) { + return handleGraphQL(req, res) + } + + // Health check endpoints (liveness) - don't log these to avoid noise + if (isHealthCheck(pathname)) { + return handleHealthCheck(req, res) + } + + // Readiness endpoint - don't log these to avoid noise + if (isReadinessCheck(pathname)) { + return handleReadinessCheck(req, res) + } + + // 404 for everything else + log.warn(`Not found: ${pathname}`) + sendJson(res, 404, { + error: 'Not Found', + availableEndpoints, + }) + }) +} diff --git a/src/gateway/types/index.ts b/src/gateway/types/index.ts new file mode 100644 index 0000000..32db10d --- /dev/null +++ b/src/gateway/types/index.ts @@ -0,0 +1,23 @@ +import type { ServerResponse, IncomingMessage } from 'node:http' + +export type ParentResource = { + apiGroup: string + kind: string + version: string +} + +export type ScopedMatch = { + apiGroup: string + version: string + kindPlural: string + kind: string + resourceName: string +} + +export type RequestHandler = ( + req: IncomingMessage, + res: ServerResponse, + url: URL +) => Promise | void + +export type GatewayHandler = (req: IncomingMessage, res: ServerResponse) => Promise | void diff --git a/src/gateway/utils/index.ts b/src/gateway/utils/index.ts new file mode 100644 index 0000000..69c6d32 --- /dev/null +++ b/src/gateway/utils/index.ts @@ -0,0 +1,10 @@ +import type { ServerResponse } from 'node:http' + +export const sendJson = (res: ServerResponse, status: number, body: object): void => { + res.writeHead(status, { 'Content-Type': 'application/json' }) + res.end(JSON.stringify(body)) +} + +export const parseUrl = (url: string, host: string): URL => { + return new URL(url, `http://${host}`) +} diff --git a/src/shared/config/index.ts b/src/shared/config/index.ts new file mode 100644 index 0000000..28bbfc5 --- /dev/null +++ b/src/shared/config/index.ts @@ -0,0 +1,5 @@ +import type { LogLevel } from '@/shared/types' + +export const config = { + logLevel: (process.env.LOGGING || 'info') as LogLevel, +} diff --git a/src/shared/types/index.ts b/src/shared/types/index.ts new file mode 100644 index 0000000..8ef145f --- /dev/null +++ b/src/shared/types/index.ts @@ -0,0 +1,6 @@ +/** API path discovered from OpenAPI endpoint (e.g., "apis/iam.miloapis.com/v1alpha1") */ +export type ApiEntry = { + path: string +} + +export type LogLevel = 'debug' | 'info' | 'warn' | 'error' diff --git a/src/shared/utils/index.ts b/src/shared/utils/index.ts new file mode 100644 index 0000000..342c891 --- /dev/null +++ b/src/shared/utils/index.ts @@ -0,0 +1 @@ +export { log } from './logger' diff --git a/src/shared/utils/logger.ts b/src/shared/utils/logger.ts new file mode 100644 index 0000000..82b7452 --- /dev/null +++ b/src/shared/utils/logger.ts @@ -0,0 +1,40 @@ +import type { LogLevel } from '@/shared/types' +import { config } from '@/shared/config' + +const LOG_LEVELS: Record = { + debug: 0, + info: 1, + warn: 2, + error: 3, +} + +const currentLevel = LOG_LEVELS[config.logLevel] + +const formatMessage = (level: string, message: string, data?: object): string => { + const timestamp = new Date().toISOString() + const dataStr = data ? ` ${JSON.stringify(data)}` : '' + return `${timestamp} [${level.toUpperCase()}] ${message}${dataStr}` +} + +export const log = { + debug: (message: string, data?: object): void => { + if (currentLevel <= LOG_LEVELS.debug) { + console.debug(formatMessage('debug', message, data)) + } + }, + info: (message: string, data?: object): void => { + if (currentLevel <= LOG_LEVELS.info) { + console.info(formatMessage('info', message, data)) + } + }, + warn: (message: string, data?: object): void => { + if (currentLevel <= LOG_LEVELS.warn) { + console.warn(formatMessage('warn', message, data)) + } + }, + error: (message: string, data?: object): void => { + if (currentLevel <= LOG_LEVELS.error) { + console.error(formatMessage('error', message, data)) + } + }, +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..52402a9 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "commonjs", + "lib": ["ES2022"], + "outDir": "./dist", + "rootDir": "./src", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "baseUrl": ".", + "paths": { + "@/*": ["src/*"] + } + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist", "src/mesh"] +}