diff --git a/.changeset/curvy-crabs-play.md b/.changeset/curvy-crabs-play.md new file mode 100644 index 00000000000..aaf900aa446 --- /dev/null +++ b/.changeset/curvy-crabs-play.md @@ -0,0 +1,8 @@ +--- +'@apollo/server-integration-testsuite': major +'@apollo/server-plugin-response-cache': major +'@apollo/server-gateway-interface': major +'@apollo/server': major +--- + +Drop support for Node.JS v14, v16, and v20. diff --git a/.changeset/five-tips-matter.md b/.changeset/five-tips-matter.md new file mode 100644 index 00000000000..3f83e051024 --- /dev/null +++ b/.changeset/five-tips-matter.md @@ -0,0 +1,7 @@ +--- +'@apollo/server': major +--- + +Remove `precomputedNonce` landing page configuration option + +This option was introduced and subsequently deprecated in v4. Removing this configuration in v4 is strictly an improvement to the security of your landing page, and no longer exists in v5. diff --git a/.changeset/large-lines-burn.md b/.changeset/large-lines-burn.md new file mode 100644 index 00000000000..d5c4645a051 --- /dev/null +++ b/.changeset/large-lines-burn.md @@ -0,0 +1,5 @@ +--- +'@apollo/server': patch +--- + +ApolloServerPluginSubscriptionCallback now takes a `fetcher` argument, like the usage and schema reporting plugins. The default value is Node's built-in fetch. diff --git a/.changeset/orange-plants-change.md b/.changeset/orange-plants-change.md new file mode 100644 index 00000000000..062833d4480 --- /dev/null +++ b/.changeset/orange-plants-change.md @@ -0,0 +1,5 @@ +--- +'@apollo/server': major +--- + +Remove `status400ForVariableCoercionErrors` configuration option; this regression mitigation is now the default behavior in Apollo Server v5. diff --git a/.circleci/config.yml b/.circleci/config.yml index 92f46c5cd76..3f81522ad30 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -56,17 +56,33 @@ jobs: - setup-node - run: npm run test:smoke - Full incremental delivery tests with graphql-js 17 canary: + Full incremental delivery tests with graphql 17 alpha 2: docker: - image: cimg/base:stable environment: INCREMENTAL_DELIVERY_TESTS_ENABLED: t + GRAPHQL_JS_VERSION: 17.0.0-alpha.2 steps: - setup-node: - node-version: "18" + node-version: "20" # Install a prerelease of graphql-js 17 with incremental delivery support. # --legacy-peer-deps because nothing expects v17 yet. - - run: npm i --legacy-peer-deps graphql@17.0.0-alpha.2 + - run: npm i --legacy-peer-deps "graphql@${GRAPHQL_JS_VERSION}" + - run: npm run test:ci + - run: npm run test:smoke + + Test with recent graphql-js alpha: + docker: + - image: cimg/base:stable + environment: + GRAPHQL_JS_VERSION: 17.0.0-alpha.9 + steps: + - setup-node: + node-version: "20" + # Install a newer prerelease of graphql-js 17; we do not yet support + # its incremental delivery format. + # --legacy-peer-deps because nothing expects v17 yet. + - run: npm i --legacy-peer-deps "graphql@${GRAPHQL_JS_VERSION}" - run: npm run test:ci - run: npm run test:smoke @@ -142,18 +158,17 @@ workflows: matrix: parameters: node-version: - - "14" - - "16" - - "18" - "20" - "22" + - "24" - "Check for FIXM\x45" - Prettier - ESLint - Spell check - Codegen check - Smoke test built package - - Full incremental delivery tests with graphql-js 17 canary + - Full incremental delivery tests with graphql 17 alpha 2 + - Test with recent graphql-js alpha - Changesets security-scans: jobs: diff --git a/.codesandbox/ci.json b/.codesandbox/ci.json index 7fd61999aff..c37f0c2f656 100644 --- a/.codesandbox/ci.json +++ b/.codesandbox/ci.json @@ -9,5 +9,5 @@ "packages/usage-reporting-protobuf" ], "sandboxes": ["apollo-server-typescript-3opde","apollo-server"], - "node": "18" + "node": "20" } diff --git a/.config/mise/config.toml b/.config/mise/config.toml index b1df7eca366..859356b8f66 100644 --- a/.config/mise/config.toml +++ b/.config/mise/config.toml @@ -3,11 +3,6 @@ # It's what we use to set up tools in CI. [tools] -# This actually uses the copy of npm that comes with Node to install the version -# of npm that we want. Since we test on ancient versions of Node like v14, we -# want to use a slightly more modern npm. Listing it before "node" means we'll -# actually use it instead of the version that comes with node. -"npm:npm" = "9.9.4" node = "22.17.0" [env] diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 35958be1f78..00000000000 --- a/.eslintignore +++ /dev/null @@ -1,3 +0,0 @@ -dist -generated -smoke-test diff --git a/.eslintrc.cjs b/.eslintrc.cjs deleted file mode 100644 index 01c05b2b042..00000000000 --- a/.eslintrc.cjs +++ /dev/null @@ -1,27 +0,0 @@ -module.exports = { - root: true, - parser: '@typescript-eslint/parser', - plugins: ['@typescript-eslint', 'import'], - extends: ['plugin:import/typescript'], - overrides: [ - { - // Enable import/extensions on all TS files because our ESM builds require - // you to specify local imports as full paths with extensions. We don't - // need this on tests because Jest doesn't require it. - files: ['**/*.ts'], - excludedFiles: '**/__tests__/**/*.ts', - rules: { - // Disallow importing a node module without it being specified in package.json - 'import/no-extraneous-dependencies': 'error', - 'import/extensions': ['error', 'ignorePackages'], - '@typescript-eslint/consistent-type-imports': [ - 'error', - { - prefer: 'type-imports', - fixStyle: 'inline-type-imports', - }, - ], - }, - }, - ], -}; diff --git a/CHANGELOG_historical.md b/CHANGELOG_historical.md index 0806882e92c..0de95620394 100644 --- a/CHANGELOG_historical.md +++ b/CHANGELOG_historical.md @@ -575,7 +575,7 @@ Certain undersupported and underused Apollo Server features have been removed in - `apollo-engine-reporting`: Fix regression introduced by [#3614](https://github.com/apollographql/apollo-server/pull/3614) which caused `PersistedQueryNotFoundError`, `PersistedQueryNotSupportedError` and `InvalidGraphQLRequestError` errors to be triggered before the `requestDidStart` handler triggered `treeBuilder`'s `startTiming` method. This fix preserves the existing behavior by special-casing these specific errors. [#3638](https://github.com/apollographql/apollo-server/pull/3638) fixes [#3627](https://github.com/apollographql/apollo-server/issues/3627) - `apollo-server-cloud-functions`: Transmit CORS headers on `OPTIONS` request. [#3557](https://github.com/apollographql/apollo-server/pull/3557) - `apollo-server-caching`: De-compose options interface for `KeyValueCache.prototype.set` to accommodate better TSDoc annotations for its properties (e.g. to specify that `ttl` is defined in _seconds_). [#3619](https://github.com/apollographql/apollo-server/pull/3619) -- `apollo-server-core`, `apollo-server-caching`: Introduce a `ttl` property, specified in seconds, on the options for automated persisted queries (APQ) which applies specific TTL settings to the cache `set`s during APQ registration. Previously, all APQ cache records were set to 300 seconds. Additionally, this adds support (to the underlying `apollo-server-caching` mechanisms) for a time-to-live (TTL) value of `null` which, when supported by the cache implementation, skips the assignment of a TTL value altogether. This allows the cache's controller to determine when eviction happens (e.g. cache forever, and purge least recently used when the cache is full), which may be desireable for network cache stores (e.g. Memcached, Redis). [#3623](https://github.com/apollographql/apollo-server/pull/3623) +- `apollo-server-core`, `apollo-server-caching`: Introduce a `ttl` property, specified in seconds, on the options for automated persisted queries (APQ) which applies specific TTL settings to the cache `set`s during APQ registration. Previously, all APQ cache records were set to 300 seconds. Additionally, this adds support (to the underlying `apollo-server-caching` mechanisms) for a time-to-live (TTL) value of `null` which, when supported by the cache implementation, skips the assignment of a TTL value altogether. This allows the cache's controller to determine when eviction happens (e.g. cache forever, and purge least recently used when the cache is full), which may be desirable for network cache stores (e.g. Memcached, Redis). [#3623](https://github.com/apollographql/apollo-server/pull/3623) - `apollo-server-core`: Upgrade TS to 3.7.3 [#3618](https://github.com/apollographql/apollo-server/pull/3618) ## v2.9.14 diff --git a/docs/source/_sidebar.yaml b/docs/source/_sidebar.yaml index 51db08d74b0..218e88687ba 100644 --- a/docs/source/_sidebar.yaml +++ b/docs/source/_sidebar.yaml @@ -1,7 +1,7 @@ switcher: heading: 'Apollo Server' versions: - - label: v4 + - label: v4–v5 latest: true href: ./ - label: v3 @@ -13,10 +13,12 @@ items: href: '.' - label: Get started href: './getting-started' - - label: New in v4 + - label: New in v4 and v5 children: - - label: Migrating to Apollo Server 4 + - label: Migrating from Apollo Server 4 href: './migration' + - label: Migrating from Apollo Server 3 + href: './migration-from-v3' - label: Previous versions href: './previous-versions' - label: Changelog diff --git a/docs/source/api/apollo-server.mdx b/docs/source/api/apollo-server.mdx index e6585ccdf8e..76631990309 100644 --- a/docs/source/api/apollo-server.mdx +++ b/docs/source/api/apollo-server.mdx @@ -506,9 +506,9 @@ If this is set to any string value, use that value instead of the environment va -**Set this option to `true`.** It mitigates a regression introduced in Apollo Server v4 where the server returns a 200 status code (instead of 400) when a client query provides invalid variables. [Learn more.](../migration/#known-regressions) +> Note: Apollo Server v5 defaults this option to `true`. This option is deprecated in v5 and will be ignored in a future major version. -Apollo Server v5 will _always_ behave as if this option is `true` (and will ignore any provided value). +**Apollo Server v4 users should set this option to `true` (or better yet, upgrade to v5).** It mitigates a regression introduced in Apollo Server v4 where the server returns a 200 status code (instead of 400) when a client query provides invalid variables. @@ -651,7 +651,7 @@ const response = await server.executeOperation({ The `response` object returned from `executeOperation` is a `GraphQLResponse`, which has `body` and `http` fields. -Apollo Server 4 supports incremental delivery directives such as `@defer` and `@stream` (when combined with an appropriate version of `graphql-js`), and so the structure of `response.body` can represent either a single result or multiple results. `response.body.kind` is either `'single'` or `'incremental'`. If it is `'single'`, then incremental delivery has not been used, and `response.body.singleResult` is an object with `data`, `errors`, and `extensions` fields. If it is `'incremental'`, then `response.body.initialResult` is the initial result of the operation, and `response.body.subsequentResults` is an async iterator that will yield subsequent results. (The precise structure of `initialResult` and `subsequentResults` is defined by `graphql-js` and may change between the current pre-release of `graphql-js` v17 and its final release; if you write code that processes these values before `graphql-js` v17 has been released you may have to adapt it when the API is finalized.) +Apollo Server 4 and 5 support incremental delivery directives such as `@defer` and `@stream` when combined with pre-release version `17.0.0-alpha.2` of `graphql-js`, and so the structure of `response.body` can represent either a single result or multiple results. `response.body.kind` is either `'single'` or `'incremental'`. If it is `'single'`, then incremental delivery has not been used, and `response.body.singleResult` is an object with `data`, `errors`, and `extensions` fields. If it is `'incremental'`, then `response.body.initialResult` is the initial result of the operation, and `response.body.subsequentResults` is an async iterator that will yield subsequent results. (The precise structure of `initialResult` and `subsequentResults` is defined by `graphql-js` and may change between the current pre-release of `graphql-js` v17 and its final release; if you write code that processes these values before `graphql-js` v17 has been released you may have to adapt it when the API is finalized. Apollo Server currently only supports `17.0.0-alpha.2`, not newer alphas which use a different format.) The `http` field contains an optional numeric `status` code and a `headers` map specifying any HTTP status code and headers that should be set. diff --git a/docs/source/api/express-middleware.mdx b/docs/source/api/express-middleware.mdx index 240f588338b..1578807cb99 100644 --- a/docs/source/api/express-middleware.mdx +++ b/docs/source/api/express-middleware.mdx @@ -5,7 +5,7 @@ api_reference: true import TopLevelAwait from "../shared/top-level-await.mdx" -This API reference documents Apollo Server 4's [Express](https://expressjs.com/) integration, the `expressMiddleware` function. +This API reference documents Apollo Server's [Express](https://expressjs.com/) integration, the `expressMiddleware` function. Apollo Server integrates with these Express versions through official integrations: - [**Express v4**](https://www.npmjs.com/package/@as-integrations/express4): Install with `npm install @as-integrations/express4` @@ -15,7 +15,7 @@ You must also install Express itself. Both packages export a function named `exp -The Express v4 integration is also bundled in `@apollo/server` at `@apollo/server/express4`. While you can use this bundled version now, we recommend installing the separate package. Express v5 requires the separate package, and future Apollo Server versions will remove the bundled integration. +In Apollo Server 4, you can also import the Express v4 integration from `@apollo/server/express` without installing a second package. This does not support Express v5, and it was removed in Apollo Server 5. We recommend installing the separate package to make upgrading Apollo Server and Express easier. diff --git a/docs/source/api/plugin/inline-trace.mdx b/docs/source/api/plugin/inline-trace.mdx index e36925193df..c5f73fd6d24 100644 --- a/docs/source/api/plugin/inline-trace.mdx +++ b/docs/source/api/plugin/inline-trace.mdx @@ -5,7 +5,7 @@ api_reference: true ## Using the plugin -> 📣 **New in Apollo Server 4**: error details are not included in traces by default. For more details, see [Error Handling](../../data/errors/#masking-and-logging-errors). +> 📣 **New since Apollo Server 4**: error details are not included in traces by default. For more details, see [Error Handling](../../data/errors/#masking-and-logging-errors). This article documents the options for the `ApolloServerPluginInlineTrace` plugin, which you can import from `@apollo/server/plugin/inlineTrace`. diff --git a/docs/source/api/plugin/landing-pages.mdx b/docs/source/api/plugin/landing-pages.mdx index a96c03b9745..75630399494 100644 --- a/docs/source/api/plugin/landing-pages.mdx +++ b/docs/source/api/plugin/landing-pages.mdx @@ -55,7 +55,7 @@ Available configuration options are listed in each plugin's reference below. ## Default non-production landing page -In non-production environments, Apollo Server 4's landing page is an embedded version of [Apollo Sandbox](/graphos/explorer/sandbox) (served at `http://localhost:4000` by default): +In non-production environments, Apollo Server's landing page is an embedded version of [Apollo Sandbox](/graphos/explorer/sandbox) (served at `http://localhost:4000` by default): Apollo Sandbox @@ -636,7 +636,7 @@ If `false`, the embedded Explorer rendered by Apollo Server doesn't initialize e ## GraphQL Playground landing page -By default, Apollo Server 2 provided a GraphQL Playground landing page. For migration purposes, we've published the [`@apollo/server-plugin-landing-page-graphql-playground`](https://www.npmjs.com/package/@apollo/server-plugin-landing-page-graphql-playground) package, a GraphQL Playground plugin compatible with Apollo Server 4. However, we aren't supporting this plugin with documentation or security updates since the GraphQL Playground project is officially [retired](https://github.com/graphql/graphql-playground/issues/1143) and we do not recommend its continued use. Instead, we recommend migrating to the actively maintained [Apollo Sandbox](/graphos/explorer/sandbox) (the default landing page in Apollo Server 4) at your earliest convenience. +By default, Apollo Server 2 provided a GraphQL Playground landing page. For migration purposes, we've published the [`@apollo/server-plugin-landing-page-graphql-playground`](https://www.npmjs.com/package/@apollo/server-plugin-landing-page-graphql-playground) package, a GraphQL Playground plugin compatible with Apollo Server. However, we aren't supporting this plugin with documentation or security updates since the GraphQL Playground project is officially [retired](https://github.com/graphql/graphql-playground/issues/1143) and we do not recommend its continued use. Instead, we recommend migrating to the actively maintained [Apollo Sandbox](/graphos/explorer/sandbox) (the default landing page in Apollo Server) at your earliest convenience. ## Disabling the landing page diff --git a/docs/source/api/plugin/subscription-callback.mdx b/docs/source/api/plugin/subscription-callback.mdx index 69945eebb6a..b3f84d2e1b2 100644 --- a/docs/source/api/plugin/subscription-callback.mdx +++ b/docs/source/api/plugin/subscription-callback.mdx @@ -6,8 +6,6 @@ minVersion: 4.9.0 This document covers the usage of the subscription callback plugin for use in Apollo Federation with GraphOS Router. For more information about the protocol itself, see the [subscription callback protocol](/router/executing-operations/subscription-callback-protocol). -> ⚠️ **Note**: The subscription callback protocol is currently in [preview](/resources/product-launch-stages#preview). Breaking changes might be introduced during the preview period. - ## Using the plugin This article documents the options for the `ApolloServerPluginSubscriptionCallback` plugin, which you can import from `@apollo/server/plugin/subscriptionCallback`. diff --git a/docs/source/api/plugin/usage-reporting.mdx b/docs/source/api/plugin/usage-reporting.mdx index bbcdb84a9ab..490d4ddfe97 100644 --- a/docs/source/api/plugin/usage-reporting.mdx +++ b/docs/source/api/plugin/usage-reporting.mdx @@ -3,8 +3,11 @@ title: "API Reference: Usage Reporting Plugin" api_reference: true --- -> Sending metrics from Apollo Server to GraphOS requires an [Enterprise plan](https://www.apollographql.com/pricing). -> If your organization doesn't have an Enterprise plan, you can test out this functionality by signing up for a free [GraphOS trial](https://studio.apollographql.com/signup?referrer=docs-content). + + +While Insights are available on all GraphOS plans, metrics retention varies by [plan](https://www.apollographql.com/pricing?referrer=docs-content). + + Apollo Server's built-in usage reporting plugin gathers data on how your clients use the operations and fields in your GraphQL schema. The plugin also handles pushing this usage data to [GraphOS](/graphos/), as described in [Metrics and logging](../../monitoring/metrics/). @@ -12,7 +15,7 @@ This plugin is designed to be used in an Apollo Gateway or in a monolithic serve ## Default installation -> 📣 **New in Apollo Server 4**: error details are not included in traces by default. For more details, see [Error Handling](../../data/errors/#masking-and-logging-errors). +> 📣 **New since Apollo Server 4**: error details are not included in traces by default. For more details, see [Error Handling](../../data/errors/#masking-and-logging-errors). Apollo Server automatically installs and enables this plugin with default settings if you [provide a graph API key and a graph ref to Apollo Server](../../monitoring/metrics/#sending-metrics-to-graphos) and your server is not a federated subgraph. You usually do this by setting the `APOLLO_KEY` and `APOLLO_GRAPH_REF` (or `APOLLO_GRAPH_ID` and `APOLLO_GRAPH_VARIANT`) environment variables. No other action is required. diff --git a/docs/source/api/standalone.mdx b/docs/source/api/standalone.mdx index bd86484f15e..3673946e98c 100644 --- a/docs/source/api/standalone.mdx +++ b/docs/source/api/standalone.mdx @@ -9,7 +9,7 @@ This API reference documents the `startStandaloneServer` function. ## Overview -This `startStandaloneServer` function helps you get started with Apollo Server quickly. This function is recommended for all projects that don't require serverless support or a particular Node.js framework (such as Fastify). Under the hood, the `startStandaloneServer` function uses Apollo Server 4's Express integration (i.e., [`expressMiddleware`](./express-middleware)). +This `startStandaloneServer` function helps you get started with Apollo Server quickly. This function is recommended for all projects that don't require serverless support or a particular Node.js framework (such as Fastify). Because it sets helpful defaults, this function is less configurable than other Apollo Server integrations. Complex projects might eventually need to [swap to using `expressMiddleware`](#swapping-to-expressmiddleware) (this process is straightforward). @@ -59,11 +59,11 @@ The `startStandaloneServer` function's second optional argument is an object for -An optional asynchronous [`context` initialization function](../data/context/#the-context-function). +An optional asynchronous [`context` initialization function](../data/context/#the-context-function).
-The `context` function should return an object that all your server's resolvers share during an operation's execution. This enables resolvers to share helpful context values, such as a database connection. +The `context` function should return an object that all your server's resolvers share during an operation's execution. This enables resolvers to share helpful context values, such as a database connection.
-The `context` function receives `req` and `res` options which are `http.IncomingMessage` and `http.ServerResponse` types. +The `context` function receives `req` and `res` options which are `http.IncomingMessage` and `http.ServerResponse` types. (In Apollo Server 4, these happen to be implemented using Express's subclasses which have some extra Express-provided functionality, though this was an undocumented fact that users should not have relied on. In Apollo Server 5, the standalone server is not built on Express; if you need to use Express-specific request/response functionality, [swap to `expressMiddleware`](#swapping-to-expressmiddleware).) @@ -81,7 +81,7 @@ The `context` function receives `req` and `res` options which are `http.Incoming -An optional `listen` configuration object. The `listen` option accepts an object with the same properties as the [`net.Server.listen` _options object_](https://nodejs.org/api/net.html#serverlistenoptions-callback). +An optional `listen` configuration object. The `listen` option accepts an object with the same properties as the [`net.Server.listen` _options object_](https://nodejs.org/api/net.html#serverlistenoptions-callback).
If no `port` is specified, this defaults to using `{port: 4000}`. @@ -98,7 +98,6 @@ Below is a full example of setting up `startStandaloneServer`: ```ts -// npm install @apollo/server graphql import { ApolloServer } from '@apollo/server'; import { startStandaloneServer } from '@apollo/server/standalone'; import { typeDefs, resolvers } from './schema'; @@ -163,7 +162,6 @@ Next, we can modify our code to match the following: ```ts -// npm install @apollo/server express graphql cors import { ApolloServer } from '@apollo/server'; import { expressMiddleware } from '@as-integrations/express5'; import { ApolloServerPluginDrainHttpServer } from '@apollo/server/plugin/drainHttpServer'; diff --git a/docs/source/data/context.mdx b/docs/source/data/context.mdx index 56523ced760..dbe227e4358 100644 --- a/docs/source/data/context.mdx +++ b/docs/source/data/context.mdx @@ -9,8 +9,6 @@ You can pass useful things through your `contextValue` that any resolver might n ## The `context` function -> 📣 Apollo Server 4 changes the syntax for defining a `context` function. [See more details.](../migration/#context-initialization-function) - The `context` function should be _asynchronous_ and return an **object**. This object is then accessible to your server's resolvers and plugins using the name [`contextValue`](#the-contextvalue-object). You can pass a `context` function to your integration function of choice (e.g., `expressMiddleware` or `startStandaloneServer`). diff --git a/docs/source/data/errors.mdx b/docs/source/data/errors.mdx index ee21fe1b503..3775a468a73 100644 --- a/docs/source/data/errors.mdx +++ b/docs/source/data/errors.mdx @@ -5,8 +5,6 @@ description: Making errors actionable on the client and server import TopLevelAwait from "../shared/top-level-await.mdx" -> Apollo Server v4 introduced a regression where providing invalid variables yields a 200 status code instead of 400. To mitigate this regression, provide the `status400ForVariableCoercionErrors: true` option to your `ApolloServer` constructor. For more information, see the [migration guide](../migration/#known-regressions). - Whenever Apollo Server encounters errors while processing a GraphQL operation, its response to the client includes an `errors` array containing each error that occurred. Each error in the array has an `extensions` field that provides additional useful information, including an error `code` and (while in development mode) a `stacktrace`. @@ -437,7 +435,7 @@ new ApolloServer({ ### For Apollo Studio reporting -> **New in Apollo Server 4:** error details are [_not_ included in traces by default](../migration#usage-reporting-and-inline-trace-plugins-mask-errors-by-default). Instead, `` replaces each error's message, and the `maskedBy` error extension replaces all other extensions. The `maskedBy` extension includes the name of the plugin that performed the masking (`ApolloServerPluginUsageReporting` or `ApolloServerPluginInlineTrace`). +> 📣 **New in Apollo Server 4+:** error details are [_not_ included in traces by default](..migration-from-v3#usage-reporting-and-inline-trace-plugins-mask-errors-by-default). Instead, `` replaces each error's message, and the `maskedBy` error extension replaces all other extensions. The `maskedBy` extension includes the name of the plugin that performed the masking (`ApolloServerPluginUsageReporting` or `ApolloServerPluginInlineTrace`). You can use Apollo Studio to analyze your server's error rates. By default, the operations sent to Studio as detailed traces _don't_ contain error details. @@ -614,7 +612,8 @@ GraphQL, by design, does not use the same conventions from REST to communicate v Apollo Server uses different HTTP status codes in various situations: - If Apollo Server hasn't correctly started up or is in the process of shutting down, it responds with a 500 status code. - The former can happen if you use a serverless integration and it sends requests to an Apollo Server instance that had an error on startup. The latter happens if you aren't properly [draining your server](../api/plugin/drain-http-server/#using-the-plugin). -- If Apollo Server can't parse the request into a legal GraphQL document and validate it against your schema, it responds with a 400 status code. This can also happen with other request problems, such as if a client attempts to send a batched HTTP request when `allowBatchedHttpRequests` isn't enabled or if CSRF prevention blocks a request. +- If Apollo Server can't parse the request into a legal GraphQL document and validate it against your schema, it responds with a 400 status code. This can also happen with other request problems, such as if a client attempts to send a batched HTTP request when `allowBatchedHttpRequests` isn't enabled, if CSRF prevention blocks a request, or if the client provided invalid variables (eg, missing a required variable, or providing a variable of the wrong type). + - Apollo Server 4 introduced a regression where providing invalid variables yields a 200 status code instead of 400. To mitigate this regression, [upgrade to Apollo Server v5](../migration) or provide the `status400ForVariableCoercionErrors: true` option to your `ApolloServer` constructor. In Apollo Server v5, this option defaults to true and is deprecated; it will be removed in a future major version. - If a request uses an invalid HTTP method (`GET` with a mutation, or any HTTP method other than `GET` or `POST`), then Apollo Server responds with a 405 status code. - If your `context` function throws, Apollo Server responds with a 500 status code. - If there is an unexpected error during the processing of the request (either a bug in Apollo Server or a plugin hook throws), Apollo Server responds with a 500 status code. diff --git a/docs/source/data/fetching-data.mdx b/docs/source/data/fetching-data.mdx index f1d82044479..7bb0a14709b 100644 --- a/docs/source/data/fetching-data.mdx +++ b/docs/source/data/fetching-data.mdx @@ -219,18 +219,18 @@ const resolvers = { Apollo Server 3 contained [an abstract class named `DataSource`](/apollo-server/v3/data/data-sources) that each of your data sources could subclass. You'd then initialize each of your `DataSource` subclasses using a special `dataSources` function, which attaches your data sources to your `context` behind the scenes. -In Apollo Server 4, you can now create your data sources in the same `context` function as the rest of your per-request setup, **avoiding** the `DataSource` superclass entirely. We recommend [making a custom class for each data source](#creating-data-source-classes), with each class best suited for that particular source of data. +Since Apollo Server 4, you can now create your data sources in the same `context` function as the rest of your per-request setup, **avoiding** the `DataSource` superclass entirely. We recommend [making a custom class for each data source](#creating-data-source-classes), with each class best suited for that particular source of data. ### Modern data sources -Apollo maintains the following open-source data source for Apollo Server 4: +Apollo maintains the following open-source data source for Apollo Server 4+: | Class | Examples | For Use With | | --- | --- | --- | | [`RESTDataSource`](https://github.com/apollographql/datasource-rest) | [See Fetching Rest](./fetching-rest)| HTTP/REST APIs | -The community maintains the following open-source data sources for Apollo Server 4: +The community maintains the following open-source data sources for Apollo Server 4+: | Class | Source | For Use With | @@ -240,7 +240,7 @@ The community maintains the following open-source data sources for Apollo Server ### Legacy data source classes -> ⚠️ **Note**: The community built each data source package below for use with Apollo Server 3. [As shown below](#using-datasource-subclasses), you can still use these packages in Apollo Server 4 with a bit of extra setup. +> ⚠️ **Note**: The community built each data source package below for use with Apollo Server 3. [As shown below](#using-datasource-subclasses), you can still use these packages in Apollo Server 4+ with a bit of extra setup. The below data source implementations extend the generic [`DataSource` abstract class](https://github.com/apollographql/apollo-server/blob/main/packages/apollo-datasource/src/index.ts), from the deprecated `apollo-datasource` package. Subclasses of `DataSource` define the logic required to communicate with a particular store or API. @@ -260,7 +260,7 @@ The larger community maintains the following open-source implementations: In Apollo Server 3, immediately after constructing each `DataSource` subclass, your server would invoke the `initialize({ cache, context })` method on each new `DataSource` behind the scenes. -To replicate this in Apollo Sever 4, you can manually invoke the `initialize` method in the constructor function of each `DataSource` subclass, like so: +To replicate this in Apollo Server 4+, you can manually invoke the `initialize` method in the constructor function of each `DataSource` subclass, like so: diff --git a/docs/source/data/fetching-rest.mdx b/docs/source/data/fetching-rest.mdx index 4d092d51d9b..c907c0bb868 100644 --- a/docs/source/data/fetching-rest.mdx +++ b/docs/source/data/fetching-rest.mdx @@ -254,7 +254,7 @@ class MoviesAPI extends RESTDataSource { ### Specifying cache TTL -> 📣 **New in Apollo Server 4**: Apollo Server no longer automatically provides its cache to data sources. [See here for more details](../migration/#datasources). +> 📣 **New since Apollo Server 4**: Apollo Server no longer automatically provides its cache to data sources. [See here for more details](../migration-from-v3/#datasources). The `RESTDataSource` class can cache results from the REST API it fetches from **if either of the following is true**: @@ -411,7 +411,7 @@ this.get('/movies/1', { signal: AbortSignal.timeout(myTimeoutMilliseconds) }); ## Intercepting fetches -> **New in Apollo Server 4**: Apollo Server 4 now uses the [`@apollo/utils.fetcher`](../migration#apolloutilsfetcher-replaces-apollo-server-env) interface under the hood for fetching. This interface lets you choose your own implementation of the Fetch API. To ensure compatibility with all Fetch implementations, the request provided to hooks like `willSendRequest` is a plain JS object rather than a `Request` object with methods. +> **New since Apollo Server 4**: Apollo Server now uses the [`@apollo/utils.fetcher`](../migration-from-v3#apolloutilsfetcher-replaces-apollo-server-env) interface under the hood for fetching. This interface lets you choose your own implementation of the Fetch API. To ensure compatibility with all Fetch implementations, the request provided to hooks like `willSendRequest` is a plain JS object rather than a `Request` object with methods. `RESTDataSource` includes a `willSendRequest` method that you can override to modify outgoing requests before they're sent. For example, you can use this method to add headers or query parameters. This method is most commonly used for authorization or other concerns that apply to all sent requests. diff --git a/docs/source/data/subscriptions.mdx b/docs/source/data/subscriptions.mdx index fdf492da976..43385e5f2eb 100644 --- a/docs/source/data/subscriptions.mdx +++ b/docs/source/data/subscriptions.mdx @@ -3,13 +3,17 @@ title: Subscriptions in Apollo Server description: Persistent GraphQL read operations --- -
+ -**Apollo Server does not provide built-in support for subscriptions.** You can enable support for subscriptions as [described below](#enabling-subscriptions). +**Apollo Server does not provide built-in support for subscriptions in non-federated graphs.**

-This article uses the `graphql-ws` library to add support for subscriptions to Apollo Server 4. We no longer recommend using the previously documented `subscriptions-transport-ws`, because this library is not actively maintained. For more information about the differences between the two libraries, see [Switching from `subscriptions-transport-ws`](#switching-from-subscriptions-transport-ws). +If your Apollo Server is a subgraph running behind GraphOS Router, you can use the [subscription callback plugin](../api/plugin/subscription-callback) to allow your server to respond to subscription operations.

-
+For non-federated graphs, you can enable support for subscriptions as [described below](#enabling-subscriptions) by adding the third-party `graphql-ws` library to your server.

+ +(We previously documented how to use the library `subscriptions-transport-ws`, which is no longer actively maintained. For help migrating from `subscriptions-transport-ws`, see [the Apollo Server 3 docs](/apollo-server/v3/data/subscriptions/#switching-to-graphql-ws).) + + **Subscriptions** are long-lasting GraphQL read operations that can update their result whenever a particular server-side event occurs. Most commonly, updated results are _pushed_ from the server to subscribing clients. For example, a chat application's server might use a subscription to push newly received messages to all clients in a particular chat room. @@ -44,7 +48,7 @@ subscription PostFeed { ## Enabling subscriptions -> Subscriptions are **not** supported by Apollo Server 4's `startStandaloneServer` function. To enable subscriptions, you must first [swap to using the `expressMiddleware` function](../api/express-middleware) (or any other Apollo Server integration package that supports subscriptions). +> Subscriptions are **not** supported by Apollo Server's `startStandaloneServer` function. To enable subscriptions, you must first [swap to using the `expressMiddleware` function](../api/express-middleware) (or any other Apollo Server integration package that supports subscriptions). > > The following steps assume you've already swapped to [`expressMiddleware`](../api/express-middleware). @@ -206,7 +210,7 @@ httpServer.listen(PORT, () => { -> ⚠️ **Running into an error?** If you're using the `graphql-ws` library, your specified subscription protocol must be consistent across your backend, frontend, and **every other tool** you use (including [Apollo Sandbox](/graphos/explorer/subscriptions-explorer)). For more information, see [Switching from `subscriptions-transport-ws`](#switching-from-subscriptions-transport-ws). +> ⚠️ **Running into an error?** If you're using the `graphql-ws` library, your specified subscription protocol must be consistent across your backend, frontend, and **every other tool** you use (including [Apollo Sandbox](/graphos/explorer/subscriptions-explorer)). For more information, see [Switching from `subscriptions-transport-ws`](/apollo-server/v3/data/subscriptions/#switching-to-graphql-ws) in the Apollo Server 3 docs. ## Resolving a subscription @@ -507,7 +511,7 @@ For more examples of using `onConnect` and `onDisconnect`, see the [`graphql-ws` ### Example: Authentication with Apollo Client -> If you plan to use subscriptions with Apollo Client, ensure **[both your client and server subscription protocols are consistent](#switching-from-subscriptions-transport-ws)** for the subscription library you're using (this example uses the `graphql-ws` library). +> If you plan to use subscriptions with Apollo Client, ensure **[both your client and server subscription protocols are consistent](/apollo-server/v3/data/subscriptions/#switching-to-graphql-ws)** for the subscription library you're using (this example uses the `graphql-ws` library). In Apollo Client, the `GraphQLWsLink` constructor supports adding information to `connectionParams` ([example](/react/data/subscriptions/#5-authenticate-over-websocket-optional)). Those `connectionParams` are sent to your server when it connects, allowing you to extract information from the client request by accessing `Context.connectionParams`. @@ -589,115 +593,3 @@ The following are community-created `PubSub` libraries for popular event-publish - [MongoDB](https://github.com/mjwheatley/graphql-mongodb-subscriptions) If none of these libraries fits your use case, you can also create your own `PubSubEngine` subclass. If you create a new open-source library, click **Edit on GitHub** to let us know about it! - -## Switching from `subscriptions-transport-ws` - -> If you use subscriptions with Apollo Client you must ensure **[both your client and server subscription protocols are consistent](/react/data/subscriptions/#supported-subscription-protocols)** for the subscription library you're using. - -This article previously demonstrated using the `subscriptions-transport-ws` library to set up subscriptions. However, this library is no longer actively maintained. You can still use it with Apollo Server, but we strongly recommend using [`graphql-ws`](https://www.npmjs.com/package/graphql-ws) instead. - -For details on how to switch from `subscriptions-transport-ws` to `graphql-ws`, follow the steps in the [Apollo Server 3 docs](/apollo-server/v3/data/subscriptions/#switching-to-graphql-ws). - -### Updating subscription clients - -If you intend to [switch from `subscriptions-transport-ws` to `graphql-ws`](/apollo-server/v3/data/subscriptions/#switching-to-graphql-ws) you will need to update the following clients: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Client NameTo use graphql-ws (RECOMMENDED)To use subscriptions-transport-ws
- -[Apollo Studio Explorer](/graphos/explorer/) - - - -[`graphql-ws`](/graphos/explorer/subscriptions-explorer) - - - -[`subscriptions-transport-ws`](/graphos/explorer/subscriptions-explorer) - -
- -[Apollo Client Web](/react/data/subscriptions) - - - -Use [`GraphQLWsLink`](/react/api/link/apollo-link-subscriptions/)
-(Requires v3.5.10 or later) - -
- -Use [`WebSocketLink`](/react/api/link/apollo-link-ws/) - -
- -[Apollo iOS](/ios/fetching/subscriptions/) - - - -[`graphql_transport_ws`](/ios/api/ApolloWebSocket/enums/WebSocket.WSProtocol/#graphql_transport_ws)
-(Requires v0.51.0 or later) - -
- -[`graphql_ws`](/ios/api/ApolloWebSocket/enums/WebSocket.WSProtocol/#graphql_ws) - -
- -[Apollo Kotlin](/kotlin/essentials/subscriptions/) - - - -[`GraphQLWsProtocol`](/kotlin/essentials/subscriptions/#customizing-your-websocket-protocol)
-(Requires v3.0.0 or later) - -
- -[`SubscriptionWsProtocol`](/kotlin/essentials/subscriptions/#customizing-your-websocket-protocol) - -
diff --git a/docs/source/deployment/heroku.md b/docs/source/deployment/heroku.md index dc108e49f89..ebf39c81a53 100644 --- a/docs/source/deployment/heroku.md +++ b/docs/source/deployment/heroku.md @@ -2,8 +2,6 @@ title: Deploying with Heroku --- -> Heroku is planning to [phase out their free tier in the near future](https://blog.heroku.com/next-chapter). - Heroku is a common platform-as-a-service solution that enables you to deploy Apollo Server and have a running GraphQL endpoint in a matter of minutes. ## Prerequisites diff --git a/docs/source/getting-started.mdx b/docs/source/getting-started.mdx index 4612c59b78e..56c9de3b608 100644 --- a/docs/source/getting-started.mdx +++ b/docs/source/getting-started.mdx @@ -11,7 +11,7 @@ This tutorial helps you: - Run an instance of Apollo Server that lets you execute queries against your schema This tutorial assumes that you are familiar with the command line and -JavaScript and have installed a recent Node.js (v14.16.0+) version. Additionally, for those interested, this tutorial includes an optional section describing how to set up Apollo Server with TypeScript. +JavaScript and have installed a recent Node.js (v20.0.0+) version. Additionally, for those interested, this tutorial includes an optional section describing how to set up Apollo Server with TypeScript. ## Step 1: Create a new project @@ -49,7 +49,7 @@ your project's `node_modules` directory: Follow the instructions below to set up with either TypeScript or JavaScript: - + #### Set up with TypeScript @@ -79,8 +79,8 @@ touch tsconfig.json "compilerOptions": { "rootDirs": ["src"], "outDir": "dist", - "lib": ["es2020"], - "target": "es2020", + "lib": ["es2023"], + "target": "es2023", "module": "esnext", "moduleResolution": "node", "esModuleInterop": true, diff --git a/docs/source/index.mdx b/docs/source/index.mdx index bfa696b6a2c..ae082fa3b4a 100644 --- a/docs/source/index.mdx +++ b/docs/source/index.mdx @@ -4,11 +4,11 @@ subtitle: Learn how to build scalable, production-ready GraphQL APIs description: Learn how Apollo Server simplifies building GraphQL APIs with its straightforward setup and support for any data source or client. --- -> 📣 **Apollo Server 4 is generally available!** +> 📣 **Apollo Server 5 is generally available!** > -> [See what's new](/apollo-server/migration/) or check out the [tutorial for migrating from Apollo Server 3](https://www.apollographql.com/tutorials/side-quest-as4?referrer=docs-content). +> Apollo Server 5 is a small upgrade focused largely on adjusting which dependency versions are supported. [Upgrading from v4 to v5](/apollo-server/migration/) usually only takes a few minutes. Because the behavior of Apollo Server has changed minimally between v4 and v5, these docs document both versions. > -> Docs for Apollo Server 3 are [available here](/apollo-server/v3/). +> Still on Apollo Server 3? AS3 has been end-of-life since October 2024. We've got a [full migration guide for upgrading directly from v3 to v5](/apollo-server/migration-from-v3/). Docs for v3 are [available here](/apollo-server/v3/). **Apollo Server is an [open-source](https://github.com/apollographql/apollo-server), spec-compliant GraphQL server** that's compatible with any GraphQL client, including [Apollo Client](/react). It's the best way to build a production-ready, self-documenting GraphQL API that can use data from any source. diff --git a/docs/source/integrations/building-integrations.md b/docs/source/integrations/building-integrations.md index fc370c45412..84d63676de1 100644 --- a/docs/source/integrations/building-integrations.md +++ b/docs/source/integrations/building-integrations.md @@ -7,8 +7,8 @@ description: "" > building a new integration, we recommend seeing if there's > [an integration for your framework of choice](./integration-index) that suits your needs. -One of the driving forces behind Apollo Server 4 is the creation of a stable, -well-defined API for processing HTTP requests and responses. Apollo Server 4's +One of the driving forces behind Apollo Server 4+ was the creation of a stable, +well-defined API for processing HTTP requests and responses. Apollo Server's API enables external collaborators, like you, to build integrations with Apollo Server in their web framework of choice. @@ -118,7 +118,7 @@ Apollo Server responds to a variety of requests via both `GET` and `POST` such a Integrations _are_ responsible for parsing a request's body and using the values to construct the `HTTPGraphQLRequest` that Apollo Server expects. -In Apollo Server 4's Express integration, you set up the `express.json()` JSON middleware, which handles parsing JSON request bodies with a `content-type` of `application/json`. Integrations can require a similar middleware (or plugin) for their ecosystem, or they can handle body parsing themselves. +In Apollo Server's Express integration, you set up the `express.json()` JSON middleware, which handles parsing JSON request bodies with a `content-type` of `application/json`. Integrations can require a similar middleware (or plugin) for their ecosystem, or they can handle body parsing themselves. For example, a correctly parsed body should have a shape resembling this: @@ -135,7 +135,7 @@ Your integration should pass along whatever it parses to Apollo Server; Apollo S Apollo Server also accepts GraphQL queries [sent using `GET`](../workflow/requests) with query string parameters. Apollo Server expects a raw query string for these types of HTTP requests. Apollo Server is indifferent to whether or not the `?` is included at the beginning of your query string. Fragments (starting with `#`) at the end of a URL should not be included. -Apollo Server 4's Express integration computes the query string using the request's full URL, like so: +Apollo Server's Express integration computes the query string using the request's full URL, like so: ```ts import { parse } from 'url'; diff --git a/docs/source/integrations/integration-index.mdx b/docs/source/integrations/integration-index.mdx index b1b6a70a840..831f8875495 100644 --- a/docs/source/integrations/integration-index.mdx +++ b/docs/source/integrations/integration-index.mdx @@ -6,14 +6,12 @@ import IntegrationTable from "../shared/integration-table.mdx" > Are you looking to build a new integration? Or help maintain an existing integration? See [Building Web Framework Integrations for Apollo Server](./building-integrations) for step-by-step guidance! -Apollo Server 4's [`startStandaloneServer`](../api/standalone) function spins up a basic web server with sensible defaults. The server is a fully functional GraphQL server supporting all of Apollo Server's GraphQL-level customizations, but it offers minimal opportunities for HTTP-level configuration. +Apollo Server's [`startStandaloneServer`](../api/standalone) function spins up a basic web server with sensible defaults. The server is a fully functional GraphQL server supporting all of Apollo Server's GraphQL-level customizations, but it offers minimal opportunities for HTTP-level configuration. If you need more control over how your GraphQL server speaks HTTP, you should instead use an _integration_. Integrations are packages which connect the Apollo Server API to your favorite web framework. Apollo maintains an [integration](../api/express-middleware) between Apollo Server and [Express](https://expressjs.com/), the most popular Node.js web framework. The integration with Express v4 is published as [`@as-integrations/express4`](https://www.npmjs.com/package/@as-integrations/express), and the integration with Express v5 is published as [`@as-integrations/express5`](https://www.npmjs.com/package/@as-integrations/express5). Both packages export the function [`expressMiddleware`](../api/express-middleware). -> The Express v4 integration is also included in the main `@apollo/server` package, exported from `@apollo/server/express4`. Its behavior is identical to the `@as-integrations/express4`. Express v5 is only supported by the external package. (A future major version of Apollo Server will remove `@apollo/server/express4`.) - > Have you built, or are you maintaining, an Apollo Server integration that isn't listed here? Please [submit a PR](https://github.com/apollographql/apollo-server/blob/main/docs/source/integrations/integration-index.mdx) to be added to this list! The larger community maintains the following open-source integrations for Apollo Server: diff --git a/docs/source/integrations/mern.mdx b/docs/source/integrations/mern.mdx index 7082b4e8f54..26f0928eaef 100644 --- a/docs/source/integrations/mern.mdx +++ b/docs/source/integrations/mern.mdx @@ -10,7 +10,7 @@ Apollo Server is designed to work seamlessly with MERN stack (MongoDB, Express, ## Prerequisites This tutorial assumes that you're familiar with the command line and JavaScript. Additionally, it requires the following: -- You've installed a recent Node.js version (`v14.16.0+`). +- You've installed a recent Node.js version (`v20+`). - You've completed MongoDB's [MERN stack tutorial](https://www.mongodb.com/languages/mern-stack-tutorial) or have your own existing MERN stack application. - The tutorial's code examples build off the tutorial, but you can adapt them to your application's requirements. - You have a MongoDB database with a `records` collection that has `name`, `position`, and `level` columns. diff --git a/docs/source/integrations/plugins-event-reference.mdx b/docs/source/integrations/plugins-event-reference.mdx index 2bdc96991c5..96b742801b1 100644 --- a/docs/source/integrations/plugins-event-reference.mdx +++ b/docs/source/integrations/plugins-event-reference.mdx @@ -184,7 +184,7 @@ const server = new ApolloServer({ ### `requestDidStart` -> **New in Apollo Server 4**: In Apollo Server 4, `requestDidStart` hooks are called in parallel rather than in series. +> 📣 **New since Apollo Server 4**: `requestDidStart` hooks are called in parallel rather than in series. The `requestDidStart` event fires whenever Apollo Server begins fulfilling a GraphQL request. diff --git a/docs/source/migration-from-v3.mdx b/docs/source/migration-from-v3.mdx new file mode 100644 index 00000000000..dcca7a349df --- /dev/null +++ b/docs/source/migration-from-v3.mdx @@ -0,0 +1,1918 @@ +--- +title: Migrating from Apollo Server 3 +--- + +import TopLevelAwait from "./shared/top-level-await.mdx" +import IntegrationTable from "./shared/integration-table.mdx" + +Apollo Server 4 is a major refactor, focused on improving Apollo Server's extensibility and making it simpler to use, maintain, and document. Apollo Server 5 is a smaller upgrade focused largely on adjusting which versions of Node.js and Express are supported. This page tells you what to do to migrate your server from Apollo Server 3 directly to Apollo Server 5. (The differences between Apollo Server 4 and 5 are small enough that there is no advantage to trying to upgrade in two separate steps.) + +Apollo Server 4 and 5 provide the following features: +* A well-defined API with a stable HTTP abstraction, enabling contributors to easily [build and maintain integrations](./integrations/building-integrations) in their preferred frameworks. +* A new `@apollo/server` package, combining numerous [smaller packages](#packages-merged-into-apolloserver) and including the [`startStandaloneServer`](#migrate-from-apollo-server) function. +* Apollo-maintained packages to integrate with the Express web framework via the [`expressMiddleware`](#migrate-from-apollo-server-express) function. +* Packages that can be used as either ECMAScript or CJS modules. +* Experimental support for [incremental delivery](./workflow/requests#incremental-delivery-experimental) when combined with a pre-release of `graphql-js`. + +> For a list of all breaking changes, see the [changelog](https://github.com/apollographql/apollo-server/blob/main/packages/server/CHANGELOG.md). + +> 🚚 This guide helps you migrate from Apollo Server 3 to Apollo Server 5. If you are using Apollo Server 2, you must first [migrate to Apollo Server 3](https://www.apollographql.com/docs/apollo-server/v3/migration) before following this guide. + +We recommend that all users of [previous versions](./previous-versions) of Apollo Server upgrade to Apollo Server 5 as soon as possible. Apollo Server 4 is deprecated, with end-of-life on January 26, 2026. Apollo Server 3 has been end-of-life since October 22, 2024. Apollo Server 2 has been end-of-life since October 22, 2023. + +## The new `@apollo/server` package + +Apollo Server 3 is distributed as a [fixed set of packages](/apollo-server/v3/integrations/middleware) for integrating with different web frameworks and environments. The main "batteries-included" [`apollo-server` package](/apollo-server/v3/integrations/middleware#apollo-server) reduces setup time by providing a minimally customizable GraphQL server. + +In Apollo Server 3, the `apollo-server-core` package defines an `ApolloServer` "base" class, which each integration package (`apollo-server-express`,`apollo-server-lambda`, etc.) subclasses with a slightly different API. This packaging structure means that new integration package releases are lockstep versioned to Apollo Server itself, making it challenging to support major versions of frameworks and add integration-specific changes. Additionally, Apollo Server 3 doesn't provide a way to add new integrations for additional frameworks. + +Apollo Server 4+ takes a different approach to integrations by providing a stable web framework integration API, which includes explicit support for serverless framework life cycles. + +The new `@apollo/server` package contains: + +- The `ApolloServer` class +- A [standalone server](#migrate-from-apollo-server) (similar to Apollo Server 3's `apollo-server` package) +- A set of [core plugins](#plugins-are-in-deep-imports) (similar to Apollo Server 3's `apollo-server-core` package) + +There are no integration-specific subclasses in Apollo Server 4+. Instead, there's a single `ApolloServer` class with a single API that all integrations use. + +In Apollo Server 3, the Apollo Server core team was responsible for maintaining every integration package. With Apollo Server 4+, the AS core team no longer directly maintains most integration packages. Instead, we work with the broader open source community [to maintain Apollo Server integrations](./integrations/integration-index/), enabling those who regularly use different web frameworks to make the best choices for their framework's integration. + +For those migrating from Apollo Server 3 to Apollo Server 5, use the below flowchart to see your migration path: + +```mermaid +graph TB; + server("Am I using the apollo-server package?"); + server--No-->express("Am I using the apollo-server-express package?"); + server--Yes-->useStandAlone("Use the startStandaloneServer function"); + express--No-->otherIntegration("See if a community-supported integration exists"); + express--Yes-->useExpressMiddleware("Use the expressMiddleware function"); + class useStandAlone,useExpressMiddleware secondary; +``` + +- If you're currently using the `apollo-server` package, you should use the [`startStandaloneServer`](#migrate-from-apollo-server) function. +- If you're currently using the `apollo-server-express` package, you should use the [`expressMiddleware`](#migrate-from-apollo-server-express) function in the `@as-integrations/express4` package. + +The [`@apollo/server` package](https://www.npmjs.com/package/@apollo/server) exports these functions alongside the `ApolloServer` class. + +> In Apollo Server 4, `@apollo/server` also contains a copy of the same `expressMiddleware` function from `@as-integrations/express4` package, exported from `@apollo/server/express4`. This copy does not exist in Apollo Server 5. As our recommendation is to upgrade directly to Apollo Server 5 from Apollo Server 3, you should use the separate integration package. + +If you are using another Apollo Server 3 framework integration package (such as `apollo-server-koa` or `apollo-server-lambda`), check out our [list of integrations](./integrations/integration-index) to see if a community-maintained integration package exists for your framework of choice. + +If there is no Apollo Server integration for your favorite framework _yet_, help the broader community by [building a new integration](./integrations/building-integrations)! You can also [join the discussions about maintaining our existing integrations](https://github.com/apollographql/apollo-server/labels/integration-collaborators). + +Below are a few high-level changes for using framework integrations: + +- You can pass your [`context` initialization function](#context-initialization-function) directly to your framework's integration function (e.g., `expressMiddleware` or `startStandaloneServer`) instead of the `ApolloServer` constructor. +- You are responsible for [setting up HTTP body parsing and CORS](#http-body-parsing-and-cors) using your framework integration's standard functionality. +- If you want your server to listen on a specific URL path, pass that path directly to your framework's router instead of using the [`path` option](#path-parsing). If you did not specify a URL path, the default in Apollo Server 3 was `/graphql`, so to preserve existing behavior, you should specify that path explicitly. + +The following sections show how servers using `apollo-server` or `apollo-server-express` can update to Apollo Server 5. + + + +### Migrate from `apollo-server` + +In Apollo Server 3, the `apollo-server` package is a "batteries-included" package that wraps `apollo-server-express`, providing an HTTP server with minimal HTTP-level customization. + +If you used the "batteries included" `apollo-server` package in Apollo Server 3, use the `startStandaloneServer` function in Apollo Server 5. + +This Apollo Server 3 code: + + + +```ts title="apollo-server-3-standalone.ts" +// npm install apollo-server graphql +import { ApolloServer } from 'apollo-server'; +import { typeDefs, resolvers } from './schema'; + +interface MyContext { + token?: String; +} + +const server = new ApolloServer({ + typeDefs, + resolvers, + context: async ({ req }) => ({ token: req.headers.token }), +}); +const { url } = await server.listen(4000); +console.log(`🚀 Server ready at ${url}`); +``` + + + +looks like this in Apollo Server 5: + + + +```ts title="apollo-server-5-standalone.ts" +// npm install @apollo/server graphql +import { ApolloServer } from '@apollo/server'; +import { startStandaloneServer } from '@apollo/server/standalone'; +import { typeDefs, resolvers } from './schema'; + +interface MyContext { + token?: String; +} + + +const server = new ApolloServer({ typeDefs, resolvers }); +const { url } = await startStandaloneServer(server, { + context: async ({ req }) => ({ token: req.headers.token }), + listen: { port: 4000 }, +}); +console.log(`🚀 Server ready at ${url}`); +``` + + + +The `startStandaloneServer` function accepts two arguments; the first is the instance of `ApolloServer` that should begin listening for incoming requests. The second is an object for configuring your server's options, which most notably accepts the following properties: + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Name /
Type
Description
+ + ##### `context` + + `Function` + + + + An optional `context` initialization function. The `context` function receives `req` and `res` options ([see below for more details.](#context-initialization-function)). + + In Apollo Server 3, you pass the `context` function to the constructor. In Apollo Server 5, you pass the `context` function to `startStandaloneServer`. + +
+ + ##### `listen` + + `Object` + + + + An optional `listen` configuration option. The `listen` option accepts an object with the same properties as the [`net.Server.listen` options object](https://nodejs.org/api/net.html#serverlistenoptions-callback). + + For example, in Apollo Server 3, if you used `server.listen(4321)`, you'll pass `listen: { port: 4321 }` to the `startStandaloneServer` function in Apollo Server 5. If you didn't pass any arguments to Apollo Server 3's `server.listen()` method; you don't need to specify this `listen` option. +
+ +The `startStandaloneServer` function doesn't enable you to configure your server's CORS behavior. If you previously used the `cors` constructor option to customize your CORS settings in Apollo Server 3, use the [`expressMiddleware` function](#migrate-from-apollo-server-express) in Apollo Server 5. + +Similarly, if you used the `stopGracePeriodMillis` constructor option in Apollo Server 3, use the [`expressMiddleware` function](#migrate-from-apollo-server-express) and specify `stopGracePeriodMillis` to the `ApolloServerPluginDrainHttpServer` plugin. + +### Migrate from `apollo-server-express` + +If you used the `apollo-server-express` package in Apollo Server 3, use the `expressMiddleware` function in Apollo Server 5 (i.e., instead of using `server.applyMiddleware` or `server.getMiddleware`). + +> The following assumes you are using Express v4. If you would like to use Express v5 (which was not supported by Apollo Server 3), you can follow the instructions below, but use the package `@as-integrations/express5` instead of `@as-integrations/express4`. + +To migrate from Apollo Server 3's `apollo-server-express` package to using the `expressMiddleware` function, do the following: + +1. Install the `@apollo/server`, `@as-integrations/express4`, and `cors` packages. +2. Import symbols from `@apollo/server` (i.e., instead of from `apollo-server-express` and `apollo-server-core`). +3. Add `cors` to your server setup. +4. Remove the Apollo Server 3 `apollo-server-express` and `apollo-server-core` packages. +5. If you are using `apollo-server-express`'s default `/graphql` URL path (i.e., not specifying another URL with the [path option](/apollo-server/v3/api/apollo-server/#path)), you can mount `expressMiddleware` at `/graphql` to maintain behavior. To use another URL path, mount your server (with `app.use`) at the specified path. + +This Apollo Server 3 code: + + + +```ts title="apollo-server-3.ts" +// npm install apollo-server-express apollo-server-core express graphql +import { ApolloServer } from 'apollo-server-express'; +import { ApolloServerPluginDrainHttpServer } from 'apollo-server-core'; +import express from 'express'; +import http from 'http'; +import { typeDefs, resolvers } from './schema'; + +interface MyContext { + token?: String; +} + +const app = express(); +const httpServer = http.createServer(app); +const server = new ApolloServer({ + typeDefs, + resolvers, + context: async ({ req }) => ({ token: req.headers.token }), + plugins: [ApolloServerPluginDrainHttpServer({ httpServer })], +}); +await server.start(); +server.applyMiddleware({ app }); +await new Promise(resolve => httpServer.listen({ port: 4000 }, resolve)); +console.log(`🚀 Server ready at http://localhost:4000${server.graphqlPath}`); +``` + + + +looks like this in Apollo Server 5: + + + +```ts title="apollo-server-5.ts" +// npm install @apollo/server express graphql cors +import { ApolloServer } from '@apollo/server'; +import { ApolloServerPluginDrainHttpServer } from '@apollo/server/plugin/drainHttpServer'; +import { expressMiddleware } from '@as-integrations/express4'; +import express from 'express'; +import http from 'http'; +import cors from 'cors'; +import { typeDefs, resolvers } from './schema'; + +interface MyContext { + token?: String; +} + +const app = express(); +const httpServer = http.createServer(app); +const server = new ApolloServer({ + typeDefs, + resolvers, + plugins: [ApolloServerPluginDrainHttpServer({ httpServer })], +}); +await server.start(); +app.use('/graphql', + cors(), + express.json(), + expressMiddleware(server, { + context: async ({ req }) => ({ token: req.headers.token }), + }), +); + +await new Promise(resolve => httpServer.listen({ port: 4000 }, resolve)); +console.log(`🚀 Server ready at http://localhost:4000/graphql`); +``` + + + + +### Removed integrations + +Apollo Server 4+ takes a fundamentally different approach to web framework integrations. By offering a well-defined API with a stable HTTP abstraction, Apollo Server 4+ enables contributors to build and maintain integrations for the first time. + +To that end, the Apollo Server core team no longer maintains the following integration packages for Apollo Server 4+: +* [`apollo-server-fastify`](https://www.npmjs.com/package/apollo-server-fastify) +* [`apollo-server-hapi`](https://www.npmjs.com/package/apollo-server-hapi) +* [`apollo-server-koa`](https://www.npmjs.com/package/apollo-server-koa) +* [`apollo-server-lambda`](https://www.npmjs.com/package/apollo-server-lambda) +* [`apollo-server-micro`](https://www.npmjs.com/package/apollo-server-micro) +* [`apollo-server-cloud-functions`](https://www.npmjs.com/package/apollo-server-cloud-functions) +* [`apollo-server-cloudflare`](https://www.npmjs.com/package/apollo-server-cloudflare) +* [`apollo-server-azure-functions`](https://www.npmjs.com/package/apollo-server-azure-functions) + +Instead, we now work with the broader community to maintain the following open-source integrations for Apollo Server: + + + +> If an integration doesn't exist for your framework, you can always [build your own](./integrations/building-integrations)! + +In Apollo Server 3, the `apollo-server-express` package supported both Express and its older predecessor [Connect](https://github.com/senchalabs/connect). In Apollo Server 4+, `expressMiddleware` no longer supports Connect. An interested developer could [build a Connect-specific middleware](./integrations/building-integrations), and a PR to this migration guide is welcome if someone does this! + +### Packages merged into `@apollo/server` + +As shown above, Apollo Server 4+ combines the functionality of the `apollo-server`, `apollo-server-express`, and `apollo-server-core` packages into a new `@apollo/server` package. + +But wait: there's more! The `@apollo/server` package also combines the following packages: +- [`apollo-server-errors`](https://www.npmjs.com/package/apollo-server-errors) +- [`apollo-server-plugin-base`](https://www.npmjs.com/package/apollo-server-plugin-base) +- [`apollo-server-types`](https://www.npmjs.com/package/apollo-server-types) + + +### Plugins are in deep imports + +In Apollo Server 3, the `apollo-server-core` package exports built-in plugins, like `ApolloServerUsageReporting`, at the top level. To use these plugins, you must install *both* the `apollo-server-core` package and the package you use to import `ApolloServer` (e.g., `apollo-server` or `apollo-server-express`). + +In Apollo Server 4+, these built-in plugins are part of the main `@apollo/server` package, which also imports the `ApolloServer` class. The `@apollo/server` package exports these built-in plugins with deep exports. This means you use deep imports for each built-in plugin, enabling you to evaluate only the plugin you use in your app and making it easier for bundlers to eliminate unused code. + +There's one exception: the `ApolloServerPluginLandingPageGraphQLPlayground` plugin is now in its own package `@apollo/server-plugin-landing-page-graphql-playground`, which you can install separately. + +This plugin installs the [unmaintained](https://github.com/graphql/graphql-playground/issues/1143) GraphQL Playground project as a landing page and is provided for compatibility with Apollo Server 2. This package was only published once, and is **not** actively supported. We strongly recommend you switch to the [default landing page](./api/plugin/landing-pages), which installs the actively maintained Apollo Sandbox. + + Apollo Server exports the following plugins: + +| Plugin | Import path | +|--------|-------------| +| `ApolloServerPluginCacheControl` | `@apollo/server/plugin/cacheControl` | +| `ApolloServerPluginCacheControlDisabled` | `@apollo/server/plugin/disabled` | +| `ApolloServerPluginDrainHttpServer` | `@apollo/server/plugin/drainHttpServer` | +| `ApolloServerPluginInlineTrace` | `@apollo/server/plugin/inlineTrace` | +| `ApolloServerPluginInlineTraceDisabled` | `@apollo/server/plugin/disabled` | +| `ApolloServerPluginLandingPageDisabled` | `@apollo/server/plugin/disabled` | +| `ApolloServerPluginLandingPageLocalDefault` | `@apollo/server/plugin/landingPage/default` | +| `ApolloServerPluginLandingPageProductionDefault` | `@apollo/server/plugin/landingPage/default` | +| `ApolloServerPluginSchemaReporting` | `@apollo/server/plugin/schemaReporting` | +| `ApolloServerPluginUsageReporting` | `@apollo/server/plugin/usageReporting` | +| `ApolloServerPluginUsageReportingDisabled` | `@apollo/server/plugin/disabled` | + +For example, replace this Apollo Server 3 code: + +```ts +import { ApolloServerPluginUsageReporting } from 'apollo-server-core'; +``` + +with this Apollo Server 5 code: + +```ts +import { ApolloServerPluginUsageReporting } from '@apollo/server/plugin/usageReporting'; +``` + +You can also import each plugin's associated TypeScript types (e.g., `ApolloServerPluginUsageReportingOptions`) from the same deep import as that plugin. + +Once you've updated your imports, you can remove your project's dependency on `apollo-server-core`. + + +## Bumped dependencies + +### Node.js + +Apollo Server 5 supports Node.js v20.0.0 and later. (Apollo Server 3 supports Node.js v12.) This includes all [LTS and Current major versions at the time of release](https://nodejs.org/en/about/releases/). + +If you're using an older EOL version of Node.js, upgrade your runtime before upgrading to Apollo Server 5. + +If your server requires you to use an [HTTP proxy](./security/proxy-configuration/) to make external connections, we strongly recommend running Node.js v24 or newer, which has built-in support for communicating through HTTP proxies. + + +### `graphql` + +Apollo Server has a peer dependency on [`graphql`](https://www.npmjs.com/package/graphql) (the core JS GraphQL implementation). Apollo Server 5 supports `graphql` v16.11.0 and later. (Apollo Server 3 supports `graphql` v15.3.0 through v16.) + +If you're using an older version of `graphql`, upgrade it to a supported version before upgrading to Apollo Server 5. + +Note that upgrading `graphql` may require you to upgrade other libraries that are installed in your project. For example, if you use Apollo Server with Apollo Gateway, you should upgrade Apollo Gateway to some v2.x version for full `graphql` 16 support before upgrading to Apollo Server 5. (This is also recommended because Apollo Gateway v0.x is end-of-life.) + +### TypeScript + +If you use Apollo Server with TypeScript, you must use TypeScript v4.7.0 or newer. + +For background, Apollo Server uses type system features introduced in v4.7. We want to put out ["downleveled"](https://github.com/sandersn/downlevel-dts) versions of `@apollo/server`'s type definitions for older versions of TypeScript, but have found TypeScript's `typesVersions` feature [challenging to use](https://github.com/apollographql/apollo-server/issues/6423). + +If supporting older versions of TypeScript is important to you and you'd like to help us get `typesVersions` working, we'd appreciate PRs! + +## Removed constructor options + +The following `ApolloServer` constructor options have been removed in favor of other features or configuration methods. + +### `dataSources` + +> 📣 See our new [Fetching Data](./data/fetching-data) article for more information on how the _concept_ of a data source has changed in Apollo Server 4+. + +In Apollo Server 3, the top-level [`dataSources` constructor option](/apollo-server/v3/data/data-sources#adding-data-sources-to-apollo-server) essentially adds a post-processing step to your app's context function, creating `DataSource` subclasses and adding them to a `dataSources` field on your [`context`](/apollo-server/v3/data/resolvers/#the-context-argument) object. This means the TypeScript type the `context` function returns is _different_ from the `context` type your resolvers and plugins receive. Additionally, this design obfuscates that `DataSource` objects are created once per request (i.e., like the rest of the context object). + +Apollo Server 4+ removes the `dataSources` constructor option. You can now treat `DataSources` like any other part of your `context` object. + +In Apollo Server 3, immediately after constructing each `DataSource` subclass, Apollo Server invokes the `dataSource.initialize({ cache, context })` function on each new `DataSource`. If you need to replicate this behavior in Apollo Server 5, you can pass the `cache` and `context` arguments to each `DataSource` constructor. In Apollo Server 5, you can find `cache` as a new readonly field on `ApolloServer`. + +For example, below, we use the `RESTDataSource` class to create a `DataSource` with Apollo Server 3: + + + +```ts title="Apollo Server 3" +import { RESTDataSource, RequestOptions } from 'apollo-datasource-rest'; +import { ApolloServer } from 'apollo-server'; + +// highlight-start +class MoviesAPI extends RESTDataSource { + // highlight-end + override baseURL = 'https://movies-api.example.com/'; + + override willSendRequest(request: RequestOptions) { + request.headers.set('Authorization', this.context.token); + } + + async getMovie(id: string): Promise { + return this.get(`movies/${encodeURIComponent(id)}`); + } + + async updateMovie(movie: Movie): Promise { + return this.patch( + 'movies', + // Syntax for passing a request body + { id: movie.id, movie }, //highlight-line + ); + } +} + +interface ContextValue { + token: string; + dataSources: { + moviesAPI: MoviesAPI; + } +}; + +const server = new ApolloServer({ + typeDefs, + resolvers, + //highlight-start + context: ({ req: ExpressRequest }): Omit => { + //highlight-end + return { + token: getTokenFromRequest(req), + }; + }, + //highlight-start + dataSources: (): ContextValue['dataSources'] => { + return { + moviesAPI: new MoviesAPI(), + }; + }, + //highlight-end +}); + +await server.listen(); +``` + + + +Below is how you write the same code in Apollo Server 5. + + + +```ts title="Apollo Server 5" +import { RESTDataSource, AugmentedRequest } from '@apollo/datasource-rest'; +// KeyValueCache is the type of Apollo server's default cache +import type { KeyValueCache } from '@apollo/utils.keyvaluecache'; +import { ApolloServer } from '@apollo/server'; +import { startStandaloneServer } from '@apollo/server/standalone'; + +class MoviesAPI extends RESTDataSource { // highlight-line + override baseURL = 'https://movies-api.example.com/'; + private token: string; + + constructor(options: { token: string; cache: KeyValueCache }) { + super(options); // this sends our server's `cache` through + this.token = options.token; + } + + override willSendRequest(path: string, request: AugmentedRequest) { + request.headers.authorization = this.token; + } + + async getMovie(id: string): Promise { + return this.get(`movies/${encodeURIComponent(id)}`); + } + + async updateMovie(movie: Movie): Promise { + return this.patch( + 'movies', + // Note the way we pass request bodies has also changed! + { body: { id: movie.id, movie } }, //highlight-line + ); + } +} +// highlight-start +interface ContextValue { + token: string; + dataSources: { + moviesAPI: MoviesAPI; + }; +} +// highlight-end + +const server = new ApolloServer({ + typeDefs, + resolvers, +}); + +const { url } = await startStandaloneServer(server, { + context: async ({ req }) => { + const token = getTokenFromRequest(req); + const { cache } = server; + return { + token, + //highlight-start + dataSources: { + moviesAPI: new MoviesAPI({ cache, token }), + }, + //highlight-end + }; + }, +}); + +console.log(`🚀 Server ready at ${url}`); +``` + + + +> In Apollo Server 4+, we've moved `apollo-datasource-rest` to the new [`@apollo/datasource-rest`](https://www.npmjs.com/package/@apollo/datasource-rest) package. Most of the functionality between the two packages is the same. However, some small syntax differences exist in how we pass a request's `headers`, `params`, `cacheOptions`, and `body`. See [Fetching from REST](./data/fetching-rest#method-parameters) for more details. + +If you want to access your entire context's value within your `DataSource`, you can do so by making your context value a `class` (enabling it to refer to itself via `this` in its constructor): + + + +```ts +import { RESTDataSource, WillSendRequestOptions } from '@apollo/datasource-rest'; //highlight-line +import { KeyValueCache } from '@apollo/utils.keyvaluecache'; +import { ApolloServer } from '@apollo/server'; +import { startStandaloneServer } from '@apollo/server/standalone'; +import { IncomingMessage } from 'http'; + +class MoviesAPI extends RESTDataSource { + override baseURL = 'https://movies-api.example.com/'; + private contextValue: ContextValue; + + constructor(options: { contextValue: ContextValue; cache: KeyValueCache }) { + super(options); // this should send `cache` through + this.contextValue = options.contextValue; + } + + override willSendRequest(path: string, request: WillSendRequestOptions) { + request.headers['authorization'] = this.contextValue.token; + } + + async getMovie(id):Promise { + return this.get(`movies/${encodeURIComponent(id)}`); + } +} + +// highlight-start +class ContextValue { + public token: string; + public dataSources: { + moviesAPI: MoviesAPI; + }; + + constructor({ req, server }: { req: IncomingMessage; server: ApolloServer }) { + this.token = getTokenFromRequest(req); + const { cache } = server; + this.dataSources = { + moviesAPI: new MoviesAPI({ cache, contextValue: this }), + }; + } +} +// highlight-end + +const server = new ApolloServer({ + typeDefs, + resolvers, +}); + +await startStandaloneServer(server, { + context: async ({ req }) => new ContextValue({ req, server }), //highlight-line +}); +``` + + + +If you want to migrate quickly to Apollo Server 5 *without* altering your data sources, the snippet below replicates Apollo Server 3's `dataSources` behavior with a custom plugin. + + + +```ts +import { ApolloServerPlugin, BaseContext } from "@apollo/server"; +import type { DataSource } from "apollo-datasource"; + +type DataSources = Record; +type DataSourcesFn = () => DataSources; + +interface ContextWithDataSources extends BaseContext { + dataSources?: DataSources; +} + +export const ApolloDataSources = (options: { + dataSources: DataSourcesFn, +}): ApolloServerPlugin => ({ + requestDidStart: async (requestContext) => { + const dataSources = options.dataSources(); + const initializers = Object.values(dataSources).map(async (dataSource) => { + if (dataSource.initialize) + dataSource.initialize({ + cache: requestContext.cache, + context: requestContext.contextValue, + }); + }); + + await Promise.all(initializers); + + requestContext.contextValue.dataSources = dataSources; + }, +}); + +const server = new ApolloServer({ + schema, + plugins: [ApolloDataSources({ dataSources })], +}); +``` + + + +We include this as a short-term fix and encourage you to [create custom data source classes](./data/fetching-data#creating-data-source-classes) best suited for each source. + +### `modules` + +In Apollo Server 3, there are [several ways](https://github.com/apollographql/apollo-server/issues/6062) to provide your `ApolloServer` instance with a schema. One of the most common ways is to provide `typeDefs` and `resolvers` options (each of which can optionally be an array). Another way is using the `modules` option with an array of objects, each object containing `typeDefs` and `resolvers` keys. Under the hood, these two options use entirely different logic to do the same thing. + +To simplify its API, Apollo Server 4+ removes the `modules` constructor option. You can replace any previous usage of `modules` with the following syntax: + +```ts +new ApolloServer({ + typeDefs: modules.map({ typeDefs } => typeDefs), + resolvers: modules.map({ resolvers } => resolvers), +}) +``` + +Additionally, the corresponding `GraphQLSchemaModule` TypeScript type is no longer exported. + +### `mocks` and `mockEntireSchema` +In Apollo Server 3, the `mocks` and `mockEntireSchema` constructor options enable Apollo Server to return simulated data for GraphQL operations based on your server's schema. Under the hood, Apollo Server 3's mocking functionality is provided via an outdated version of the [`@graphql-tools/mocks`](https://www.npmjs.com/package/@graphql-tools/mock) library. + +Apollo Server 4+ removes both the `mocks` and `mockEntireSchema` constructor options. You can instead directly incorporate the `@graphql-tools/mock` package into your app, enabling you to get the most up-to-date mocking features. For more details on configuring mocks, see the [`@graphql-tools/mocks` docs](https://www.graphql-tools.com/docs/mocking). + +The following examples compare the `mocks` and `mockEntireSchema` constructor options in Apollo Server 3 on the left and a replacement using `@graphql-tools/mock` on the right. You can also incrementally apply these changes in Apollo Server 3 without affecting behavior. + + + +```ts title="Apollo Server 3" +new ApolloServer({ + mocks: true, +}); +``` + +```ts title="Apollo Server 5" +import { addMocksToSchema } from '@graphql-tools/mock'; +import { makeExecutableSchema } from '@graphql-tools/schema'; + +new ApolloServer({ + schema: addMocksToSchema({ + schema: makeExecutableSchema({ typeDefs, resolvers }), + }), +}); +``` + + + + + +```ts title="Apollo Server 3" +const mocks = { + Int: () => 6, +}; + +new ApolloServer({ + mocks, +}); +``` + +```ts title="Apollo Server 5" +import { addMocksToSchema } from '@graphql-tools/mock'; +import { makeExecutableSchema } from '@graphql-tools/schema'; + +const mocks = { + Int: () => 6, +}; + +new ApolloServer({ + schema: addMocksToSchema({ + schema: makeExecutableSchema({ typeDefs, resolvers }), + mocks, + }), +}); +``` + + + + + +```ts {6} title="Apollo Server 3" +const mocks = { + Int: () => 6, +}; +new ApolloServer({ + mocks, + mockEntireSchema: false, +}); +``` + +```ts {11} title="Apollo Server 5" +import { addMocksToSchema } from '@graphql-tools/mock'; +import { makeExecutableSchema } from '@graphql-tools/schema'; + +const mocks = { + Int: () => 6, +}; +new ApolloServer({ + schema: addMocksToSchema({ + schema: makeExecutableSchema({ typeDefs, resolvers }), + mocks, + preserveResolvers: true, + }), +}); +``` + + + + +### `debug` + +In Apollo Server 3, the `debug` constructor option (which defaults to `true` unless the `NODE_ENV` environment variable is either `production` or `test`) controls several unrelated aspects of Apollo Server: +- If `debug` is `true`, GraphQL responses with errors include stack traces. +- If `debug` is `true` and `ApolloServer` uses the default `logger`, Apollo Server prints all `DEBUG` log-level messages. + - Apollo Server 3 rarely sends messages at the `DEBUG` level, so this primarily affects plugins that use the provided `logger` to send `DEBUG` messages. +- The `debug` flag is also available to plugins on `GraphQLRequestContext` to use as they wish. + +Apollo Server 4+ removes the `debug` constructor option. In its place is a new `includeStacktraceInErrorResponses` option which controls its namesake feature. Like `debug`, this option defaults to `true` unless the `NODE_ENV` environment variable is either `production` or `test`. + +If you use `debug` in Apollo Server 3, you can use `includeStacktraceInErrorResponses` with the same value in Apollo Server 5: + +```ts +const apolloServerInstance = new ApolloServer({ + typeDefs, + resolvers, + includeStacktraceInErrorResponses: true, +}); +``` + +Additionally, if your app or a plugin uses `DEBUG`-level log messages and your server doesn't use a custom `logger`, you are responsible for setting the default log level. For example, you can use the same `Logger` implementation that Apollo Server uses by default: + +```ts +import loglevel from 'loglevel'; + +const logger = loglevel.getLogger('apollo-server'); +logger.setLevel(shouldShowDebugMessages ? loglevel.levels.DEBUG : loglevel.levels.INFO); +const server = new ApolloServer({ + logger, + // ... +}); +``` + +(Note that the stack traces themselves have moved from `extensions.exception.stacktrace` to `extensions.stacktrace`.) + +### `formatResponse` hook + +Apollo Server 3 provides the `formatResponse` hook as a top-level constructor argument. The `formatResponse` hook is called after an operation successfully gets to the "execution" stage, enabling you to transform the structure of GraphQL response objects before sending them to a client. + +The `formatResponse` hook receives a successful operation's `response` and `requestContext` (containing an unset `response` field). If the `formatResponse` hook returns a non-null `GraphQLResponse`, it uses that response instead of the initially received `response` argument. + +Apollo Server 4+ removes the `formatResponse` hook. We instead recommend using the `willSendResponse` plugin hook, which enables you to do everything you previously did with `formatResponse`. The `willSendResponse` plugin hook receives an operation's `requestContext`, which has a `response` field containing a `GraphQLResponse` object. Note that the `willSendResponse` hook is allowed to mutate the `requestContext.response` field. + +> Apollo Server 4+ changes the structure of `GraphQLResponse`, [see below for more details](#graphqlresponse). + +Apollo Server calls the `willSendResponse` plugin hook for all requests that get far enough along to invoke `requestDidStart` (i.e., requests with a parsable JSON body, etc. ). This means that Apollo Server calls the `willSendResponse` hook in _more_ contexts than the previous `formatResponse` hook. + +To only use `willSendResponse` after an operation's "execution" stage (i.e., like the previous `formatResponse` hook), you can make a filter checking for the existence of a `data` field in the result. If an operation has a `data` field in the result, it has made it to the execution phase. Note, there are some edge cases: for example, an error in the coercion of variable values calls `formatResponse` but doesn't have `data` in the result. If differentiating these edge cases is important to you, please open an issue, and we'll help. + +For example, if your Apollo Server 3 code used `formatResponse` like this: + +```ts +new ApolloServer({ + typeDefs, + resolvers, + formatResponse({ response, requestContext }) { + return { + ...response, + extensions: { + ...(response.extensions), + hello: 'world', + }, + }, + }, +}), +``` + +your Apollo Server 5 code can use `willSendResponse`, like so: + +```ts +new ApolloServer({ + typeDefs, + resolvers, + plugins: [ + { + async requestDidStart() { + return { + async willSendResponse(requestContext) { + const { response } = requestContext; + // Augment response with an extension, as long as the operation + // actually executed. (The `kind` check allows you to handle + // incremental delivery responses specially.) + if (response.body.kind === 'single' && 'data' in response.body.singleResult) { + response.body.singleResult.extensions = { + ...response.body.singleResult.extensions, + hello: 'world', + }; + } + }, + }; + }, + }, + ], +}); +``` + +### `executor` + +In Apollo Server 3, there are two different ways to specify a replacement for `graphql-js`'s execution functionality. Both of them involve defining a function of the type `GraphQLExecutor`. One way is to specify that function directly as the `executor` constructor option. The other way involves using the `gateway` option. + +In Apollo Server 4+, this redundancy has been removed: there is no longer an `executor` constructor option. (Additionally, the TypeScript `GraphQLExecutor` type has been renamed `GatewayExecutor` and moved to the `@apollo/server-gateway-interface` package.) + +If your Apollo Server 3 code defined an `executor` function and used it like this: + + + +```ts +new ApolloServer({ + executor, + // ... +}); +``` + + + +your Apollo Server code can use `gateway`, like so: + + + +```ts +new ApolloServer({ + gateway: { + async load() { + return { executor }; + }, + onSchemaLoadOrUpdate() { + return () => {}; + }, + async stop() {}, + }, +}); +``` + + + + +## Removed features + +Several small features have been removed from Apollo Server 4+. + +### Health checks + +In Apollo Server 3, the health check feature supports a simple `HTTP`-level health check that always returns a 200 status code. + +Apollo Server 4+ no longer supports built-in health checks. We found that running a trivial GraphQL query was a better way of checking the status of your server, because a query ensures your server successfully serves traffic _and_ performs GraphQL operations. + +Every GraphQL server supports a trivial query that requests the [`__typename`](./schema/schema/#the-__typename-field) of the top-level `Query` type. This means every GraphQL server can respond to a `GET` request to a URL, such as: + +```bash +https://your.server/?query=%7B__typename%7D +``` + +> You should also send an `apollo-require-preflight: true` header alongside your health check, so it isn't blocked by the [CSRF prevention](./security/cors/#preventing-cross-site-request-forgery-csrf) feature. + +If you want a health check for your HTTP server unrelated to the health of the GraphQL execution engine (i.e., like Apollo Server 3's health check feature), you can add a `GET` handler that always succeeds to your web framework. + + +To prevent inaccurate positive health checks, ensure that the `Accept` header is either unset or explicitly set to `application/json`. + + + +Using a trivial query with Apollo Server 3's health check feature always produces a GraphQL response. Apollo Server 4+ returns an HTML page unless the `Accept` header's value is unset or explicitly set to `application/json`. + + + +### Path parsing + +In Apollo Server 3, many framework integrations enable you to use the `path` option to configure the [URL path](/apollo-server/v3/api/apollo-server/#path) where Apollo Server processes requests. By default, the `path` option uses the `/graphql` URL path. + +In Apollo Server 4+, you should use your framework's routing feature to mount your integration at the URL path where you want Apollo Server to process requests. For example, if you are using `apollo-server-express` in Apollo Server 3 and would like to continue using the default `/graphql` path, you should now mount the `expressMiddleware` function at the `/graphql` path. + +> Apollo Server 3's batteries-included `apollo-server` package, replaced by `startStandaloneServer` in Apollo Server 4+, serves all URLs (i.e., rather than only listening on `/graphql`). + +### HTTP body parsing and CORS + +In Apollo Server 3, framework integrations automatically set up HTTP body parsing and CORS response headers. You can customize your integration's CORS or body parsing functionality using the Apollo Server API; these configuration options [vary by integration](/apollo-server/v3/api/apollo-server#cors-1). + +In Apollo Server 4+, it's your responsibility to set up HTTP body parsing and CORS headers for your web framework. Specifically, when using [`expressMiddleware`](#migrate-from-apollo-server-express), you can use the native [`express.json()`](https://expressjs.com/en/api.html#express.json) function (available in Express `v4.16.0` onwards) for body parsing and the `cors` npm package for CORS headers. You can install and use the `cors` package in your Express app, just like with any other JSON-based API server. If you passed a `cors` option to `applyMiddleware` or `getMiddleware`, pass the same value to the `cors` function. If you passed a `bodyParserConfig` option to `applyMiddleware` or `getMiddleware`, pass the same value to the [`express.json()`](https://expressjs.com/en/api.html#express.json) function. + +Note that [`startStandaloneServer`](#migrate-from-apollo-server) sets up body parsing and CORS functionality for you, but you can't configure this behavior. In Apollo Server 3, you could configure the batteries-included `apollo-server`'s CORS behavior via the `cors` constructor option. In Apollo Server 5, if you need to configure CORS behavior, use `expressMiddleware` rather than `startStandaloneServer`. + +### `gql` GraphQL tag + +Apollo Server 3 depends on the [`graphql-tag`](https://www.npmjs.com/package/graphql-tag) npm package and re-exports its `gql` template literal tag. The `gql` tag is essentially a caching wrapper around `graphql-js`'s parser, and most IDEs know to treat the contents of `gql` strings as GraphQL. + +Apollo Server 4+ does not depend on the `graphql-tag` library, nor does it export the `gql` tag. If you want to continue using the `gql` tag, you can directly install `graphql-tag` into your app, then update your import, replacing this line: + +```ts +import { gql } from 'apollo-server'; +``` + +with this line: + +```ts +import gql from 'graphql-tag'; +``` + +The `apollo-server` package exports `gql` as a named export, whereas the `gql` tag is the default export for `graphql-tag`. + + +### `ApolloError` + +Apollo Server 4+ removes both `ApolloError` and `toApolloError` in favor of using `GraphQLError`. + +The `graphql` package exports `GraphQLError`, and you can use it like so: +```ts +import { GraphQLError } from 'graphql'; + +// ... +throw new GraphQLError(message, { + extensions: { code: 'YOUR_ERROR_CODE' }, +}); +``` + +If you used the optional `code` argument with `ApolloError`: +``` +throw new ApolloError(message, 'YOUR_ERROR_CODE'); +``` + +you should now pass your error code to `GraphQLError`'s `extensions` option; see the above code snippet for an example. + +### Built-in error classes + +Apollo Server 3 exports several error classes. Apollo Server uses some of these error classes in specific situations (e.g., `SyntaxError`, `ValidationError`, and `UserInputError`), while other classes (`ForbiddenError` and `AuthenticationError`) are for users to use in their apps. All of these error classes are subclasses of the main `ApolloError` class. + +In Apollo Server 4+, [`ApolloError` no longer exists](#apolloerror), so Apollo Server doesn't export specific error classes. Instead, you can create your own error codes using `graphql`'s `GraphQLError` class. Additionally, Apollo Server now provides an enum of error codes ([`ApolloServerErrorCode`](https://github.com/apollographql/apollo-server/blob/main/packages/server/src/errors/index.ts)) that you can check against to see if a given error is one of the types recognized by Apollo Server. + +In Apollo Server 3, you can throw a new `ForbiddenError`, like so: + +```ts +import { ForbiddenError } from 'apollo-server'; +throw new ForbiddenError("my message", { myExtension: "foo" }) +``` + +In Apollo Server 5, you should define your own error using `GraphQLError`, like so: + +```ts +import { GraphQLError } from 'graphql'; +throw new GraphQLError("my message", { + extensions: { + code: 'FORBIDDEN', + myExtension: "foo", + }, +}); +``` + +For an `AuthenticationError`, use the code `'UNAUTHENTICATED'`. + +In Apollo Server 3, you can check the type of an error, like so: + +```ts +if (error instanceof SyntaxError) +``` + +In Apollo Server 5, you can use the `ApolloServerErrorCode` enum to check if an error is one of the types recognized by Apollo Server, like so: + +```ts +import { ApolloServerErrorCode } from '@apollo/server/errors'; +if (error.extensions?.code === ApolloServerErrorCode.GRAPHQL_PARSE_FAILED) +``` + +For `ValidationError`, use `ApolloServerErrorCode.GRAPHQL_VALIDATION_FAILED`. For `UserInputError`, use `ApolloServerErrorCode.BAD_USER_INPUT`. + +### `__resolveObject` + +Apollo Server 4+ removes the dependency on `@apollographql/apollo-tooling`, additionally removing the `__resolveObject` pseudo-resolver. The `__resolveObject` function was an undocumented predecessor to the [`__resolveReference`](./using-federation/api/apollo-subgraph/#__resolvereference) method. While we believe `__resolveObject` is a useful feature, it would work better if implemented directly in `graphql-js` rather than in Apollo Server. + +### `requestAgent` option to `ApolloServerPluginUsageReporting` + +Apollo Server's usage reporting plugin (i.e., `ApolloServerPluginUsageReporting`) lets you replace its HTTP client using the [`fetcher` option](./api/plugin/usage-reporting/#fetcher). In Apollo Server 3, you can use an older `requestAgent` option, passed to the `fetcher` function via the non-standard `agent` option. + +Apollo Server 4+ removes the `requestAgent` option from `ApolloServerPluginUsageReporting`. Now, all of the options you pass to `ApolloServerPluginUsageReporting`'s `fetcher` are part of the Fetch API spec. + +If you are using `requestAgent` in Apollo Server 3, you can use the `node-fetch` npm package to override `fetcher`. + +So, where you previously wrote: + +```ts +ApolloServerPluginUsageReporting({ requestAgent }) +``` + +You can now run `npm install node-fetch@2` and write: + +```ts +import fetch from 'node-fetch'; +ApolloServerPluginUsageReporting({ + fetcher: (url, options) => fetch(url, { + ...options, + agent: requestAgent, + }), +}); +``` + +### `rewriteError` plugin option + +In Apollo Server 3, you can specify a function to rewrite errors before sending them to Apollo's server via the `rewriteError` option to `ApolloServerPluginUsageReporting` (for monoliths) and `ApolloServerPluginInlineTrace` (for subgraphs). + +In Apollo Server 4+, you specify the same function as the `transform` option on the `sendErrors` option to `ApolloServerPluginUsageReporting` and the `includeErrors` option to `ApolloServerPluginInlineTrace`. + +(Additionally, the [default behavior has changed to mask errors](#usage-reporting-and-inline-trace-plugins-mask-errors-by-default).) + +So, where you previously wrote: + +```ts +// monoliths +new ApolloServer({ + plugins: [ApolloServerPluginUsageReporting({ rewriteError })], + // ... +}) + +// subgraphs +new ApolloServer({ + plugins: [ApolloServerPluginInlineTrace({ rewriteError })], + // ... +}) +``` + +you can now write: + +```ts +// monoliths +new ApolloServer({ + plugins: [ApolloServerPluginUsageReporting({ + sendErrors: { transform: rewriteError }, + })], + // ... +}) + +// subgraphs +new ApolloServer({ + plugins: [ApolloServerPluginInlineTrace({ + includeErrors: { transform: rewriteError }, + })], + // ... +}) +``` + + +### Doubly-escaped `variables` and `extensions` in requests + +Apollo Server 3 and 4+ both accept `POST` requests with a JSON body. + +Apollo Server 3 supports an edge case where the `variables` and +`extensions` fields inside a `POST` request's JSON-encoded body can be JSON-encoded strings. + +Apollo Server 4+ requires that within a `POST` request's JSON-encoded body, the `variables` and `extensions` fields must be objects (not doubly-encoded). + +For example, below is a valid query: + +```json +{ + "query": "{ __typename }", "extensions": { "foo": 1 } +} +``` + +Whereas this query would be invalid: + +```json +{ + "query": "{ __typename }", "extensions": "{ \"foo\": 1 }" +} +``` + +(Moreover, Apollo Server 4+ responds with a 400 status code if `variables` and `extensions` are provided in a `POST` body with any type other than object, such as array, boolean, or null. Similarly, it responds with a 400 status code if `operationName` is provided in a `POST` body with any type other than string.) + +If you'd like to restore the previous behavior, you can `JSON.parse` the `variables` and `extensions` fields after your framework has parsed the request body. In Express that might look like: + +```ts +app.use(express.json()); +app.use((req, res, next) => { + if (typeof req.body?.variables === 'string') { + try { + req.body.variables = JSON.parse(req.body.variables); + } catch (e) { + // https://github.com/graphql/graphql-over-http/blob/main/spec/GraphQLOverHTTP.md#json-parsing-failure + res.status(400).send(e instanceof Error ? e.message : e); + return; + } + } + next(); +}); +app.use(expressMiddleware(server)); +``` + + +## Changed features + +### New approach to serverless frameworks + +In Apollo Server 3, our approach to creating serverless frameworks involves subclassing `ApolloServer` and overriding the [`serverlessFramework()`](https://github.com/apollographql/apollo-server/blob/5188b1ee408b5e2a983662b0f3a15283c071e522/packages/apollo-server-core/src/ApolloServer.ts#L813) method. + +In Apollo Server 4+, serverless integrations differentiate themselves by using the `startInBackgroundHandlingStartupErrorsByLoggingAndFailingAllRequests` method. The length of this function's name discourages its use when building non-serverless apps. + +Users of serverless integrations shouldn't call any start-related functions before passing in an `ApolloServer` instance: + +```ts +const server = new ApolloServer({ + typeDefs, + resolvers, +}); + +exports.handler = startServerAndCreateLambdaHandler(server); +``` + +In the above example, the `startServerAndCreateLambdaHandler` serverless integration function should call the +`server.startInBackgroundHandlingStartupErrorsByLoggingAndFailingAllRequests()` +method. + +Apollo Server 4+'s other non-serverless framework integrations expect the developer to await the `server.start()` method, before validating that the server has started by calling `server.assertStarted()`. + +### `context` initialization function + +In Apollo Server 3, you could provide an initial [`context`](/apollo-server/v3/data/resolvers#the-context-argument) to your resolvers by adding a `context` initialization function to the `ApolloServer` constructor: + +```ts +// Apollo Server 3 Constructor +const server = new ApolloServer({ + typeDefs, + resolvers, + csrfPrevention: true, + context: ({ req }) => ({ + authScope: getScope(req.headers.authorization) + }) +}); +``` + +In Apollo Server 4+, the `context` function is a named argument passed into your web integration function (e.g., `expressMiddleware` or `startStandaloneServer`). `ApolloServer` itself now has a generic type parameter specifying the type of your context value. The `context` function should return an object, which is then accessible to your server's resolvers and plugins (via the [`contextValue` field](./data/context)). + +Below is an example of providing a `context` initialization function to the `startStandaloneServer` function: + + + +```ts {13-15} +interface MyContext { + token: String; +} + +const server = new ApolloServer({ + typeDefs, + resolvers, +}); + +const { url } = await startStandaloneServer(server, { + // A named context function is required if you are not + // using ApolloServer + context: async ({req, res}) => ({ + token: await getTokenForRequest(req), + }), + listen: { port: 4000 } +}) +``` + + + +The `context` function's syntax is similar for the `expressMiddleware` function: + + + +```ts {17-19} +interface MyContext { + token: String; +} + +const server = new ApolloServer({ + typeDefs, + resolvers, +}); + +await server.start(); +const app = express(); + +app.use( + // A named context function is required if you are not + // using ApolloServer + expressMiddleware(server, { + context: async ({ req, res }) => ({ + token: await getTokenForRequest(req), + }), + }), +); +``` + + + +In the [`expressMiddleware`](#migrate-from-apollo-server-express) function, the `req` and `res` objects passed to the `context` function are `express.Request` and `express.Response` types. In the [`startStandaloneServer`](#migrate-from-apollo-server) function, the `req` and `res` objects are `http.IncomingMessage` and `http.ServerResponse` types. If you need to use Express-specific properties in your `context` function, use `expressMiddleware`. + +### `executeOperation` accepts context value + +The [`server.executeOperation`](./api/apollo-server/#executeoperation) method enables you to execute GraphQL operations by specifying an operation's text directly instead of doing so via an HTTP request. You can use `executeOperation` to [test your server](./testing/testing). + +In Apollo Server 3, you can indirectly specify an operation's context value by passing a second optional argument to `executeOperation`; `ApolloServer` then passes this argument to its `context` function. For example, if you're using `apollo-server-express`, you can create an Express request and response then pass them to `executeOperation` as a `{ req, res }` object. + +In Apollo Server 4+, the `executeOperation` method optionally receives a context value directly, bypassing your `context` function. If you want to test the behavior of your `context` function, we recommend running actual HTTP requests against your server. + +Additionally, the [structure of the returned `GraphQLResponse` has changed](#graphqlresponse), as described below. + +So a test for Apollo Server 3 that looks like this: + + + +```ts +const server = new ApolloServer({ + typeDefs: "type Query { hello: String!}", + resolvers: { + Query: { + hello: (_, __, context) => `Hello ${context.name}!`, + }, + }, + context: async ({ req }) => ({ name: req.headers.name }), +}); + +const result = await server.executeOperation({ + query: 'query helloContext { hello }', +}, { + // highlight-start + // A half-hearted attempt at making something vaguely like an express.Request, + // and not bothering to make the express.Response at all. + req: { headers: { name: 'world' } }, + // highlight-end +}); + +expect(result.data?.hello).toBe('Hello world!'); // -> true +``` + + + +looks like this in Apollo Server 5: + + + +```ts +interface MyContext { + name: string; +} + +const server = new ApolloServer({ + typeDefs: "type Query { hello: String!}", + resolvers: { + Query: { + hello: (_, __, context) => `Hello ${context.name}!`, + }, + }, +}); + +const { body } = await server.executeOperation({ + query: 'query helloContext { hello }', +}, { + // highlight-start + contextValue: { + name: 'world', + } + // highlight-end +}); + +// Note the use of Node's assert rather than Jest's expect; if using +// TypeScript, `assert` will appropriately narrow the type of `body` +// and `expect` will not. +assert(body.kind === 'single'); +expect(body.singleResult.data?.hello).toBe('Hello world!'); // -> true +``` + + + +### Error formatting changes + +#### `formatError` improvements + +Apollo Server 3 supports the `formatError` hook, which has the following signature: + +```ts +(error: GraphQLError) => GraphQLFormattedError +``` + +This hook receives an `error` already altered by Apollo Server 3, and differs from the initially thrown error. + +In Apollo Server 4+, this becomes: + +```ts +(formattedError: GraphQLFormattedError, error: unknown) => GraphQLFormattedError +``` + +Above, `formattedError` is the default JSON object sent in the response according to the [GraphQL specification](https://spec.graphql.org/draft/#sec-Errors), and `error` is the originally thrown error. If you need a field from the original error that isn't in `GraphQLFormattedError`, you can access that value from the `error` argument. + +One caveat: if the error was thrown inside a resolver, `error` is not the error your resolver code threw; it is a `GraphQLError` wrapping it and adding helpful context such as the `path` in the operation to the resolver's field. If you want the exact error you threw, Apollo Server 4+ provides the `unwrapResolverError` function in `@apollo/server/errors`, which removes this outer layer if you pass it a resolver error (and returns its argument otherwise). + +So, you can format errors like this: + +```ts +import { unwrapResolverError } from '@apollo/server/errors'; + +new ApolloServer({ + formatError: (formattedError, error) => { + // Don't give the specific errors to the client. + if (unwrapResolverError(error) instanceof CustomDBError) { + return { message: 'Internal server error' }; + } + + // Strip `Validation: ` prefix and use `extensions.code` instead + if (formattedError.message.startsWith('Validation:')) { + return { + ...formattedError, + message: formattedError.message.replace(/^Validation: /, ''), + extensions: { ...formattedError?.extensions, code: 'VALIDATION' }, + }; + } + + // Otherwise, return the original error. The error can also + // be manipulated in other ways, as long as it's returned. + return formattedError; + }, + // ... +}); +``` + +#### `error.extensions.exception` is removed + +When Apollo Server 3 formats an error, it may add an extension called `exception`. This extension is an object with a field for every *enumerable* property of the originally thrown error. (This does not apply if the originally thrown error was already a `GraphQLError`.) In addition, [when in dev/debug mode](#debug), `exception` contains an array of strings called `stacktrace`. + +For example, if this code runs in a resolver: + +```ts +const e = new Error("hello"); +e.extraProperty = "bye"; +throw e; +``` + +then (in debug mode) Apollo Server 3 will format the error like this: + +```ts +{ + "errors": [ + { + "message": "hello", + "locations": [ + { + "line": 2, + "column": 3 + } + ], + "path": ["x"], + "extensions": { + "code": "INTERNAL_SERVER_ERROR", + "exception": { + "extraProperty": "bye", + "stacktrace": [ + "Error: hello", + " at Object.x (file:///private/tmp/as3-t/server.mjs:8:27)", + " at field.resolve (/private/tmp/as3-t/node_modules/apollo-server-core/dist/utils/schemaInstrumentation.js:56:26)", + // more lines elided + ] + } + } + } + ] +} +``` + +It was often hard to predict exactly which properties of which errors would be publicly exposed in this manner, which could lead to surprising information leaks. + +In Apollo Server 4+, there is no `exception` extension. The `stacktrace` is provided directly on `extensions`. If you'd like to copy some or all properties from the original error onto the formatted error, you can do that with the `formatError` hook. + +If you'd like your errors to be formatted like they are in Apollo Server 3 (with the stack trace and the enumerable properties of the original error on the `exception` extension), you can provide this `formatError` implementation: + + + +```ts +function formatError( + formattedError: GraphQLFormattedError, + error: unknown, +) { + const originalError = unwrapResolverError(error); + const exception: Record = { + ...(typeof originalError === 'object' ? originalError : null), + }; + delete exception.extensions; + if (formattedError.extensions?.stacktrace) { + exception.stacktrace = formattedError.extensions.stacktrace; + } + const extensions: Record = { + ...formattedError.extensions, + exception, + }; + delete extensions.stacktrace; + return { + ...formattedError, + extensions, + }; +} +``` + + + +Apollo Server 3.5.0 and newer included a TypeScript `declare module` declaration that teaches TypeScript that `error.extensions.exception.stacktrace` is an array of strings on *all* `GraphQLError` objects. Apollo Server 4+ does not provide a replacement for this: that is, we do not tell TypeScript the type of `error.extensions.code` or `error.extensions.stacktrace`. (The Apollo Server 3 `declare module` declaration also incorrectly teaches TypeScript that `error.extensions.exception.code` is a string, which should have been `error.extensions.code` instead.) + + + +### Improvements to error handling outside of resolvers + +Apollo Server 3 returns some errors relating to GraphQL operations over HTTP/JSON as `text/plain` error messages. + +Apollo Server 4+ now returns all non-landing-page-related responses as `application/json` JSON responses. This means all single-error responses render like any other GraphQL error: + +```json disableCopy +{ + "errors":[{"message": "..."}] +} +``` + +Additionally, the [`formatError` hook](./data/errors/#for-client-responses) receives and can format all of these error instances. + +Apollo Server 4+ also introduces new plugin hooks `startupDidFail`, `contextCreationDidFail`, `invalidRequestWasReceived`, and `unexpectedErrorProcessingRequest`, enabling plugins to observe errors in new settings. + +In Apollo Server 3, if your `context` function throws, then the string `"Context creation failed: "` is *always* prepended to its message, and the error is rendered with HTTP status code 500 (if the error is a GraphQLError with `extensions.code` equal to `INTERNAL_SERVER_ERROR`) or 400. You cannot select a different HTTP status code or control HTTP response headers. + +In Apollo Server 4+, if your `context` function throws, the string `"Context creation failed: "` is only prepended to the message if the thrown error was not a `GraphQLError`. There is no special-casing of `extensions.code`; instead, you can use [`extensions.http`](./data/errors/#setting-http-status-code-and-headers) to set the HTTP status code or headers. If this extension is not provided, the status code defaults to 500 (not 400). + +In Apollo Server 4+, if the `execute` function throws an error, that error is rendered with the HTTP status code 500 (rather than 400). Note that the `execute` function commonly returns a non-empty list of errors rather than throwing an explicit error. + +### Warning for servers without draining + +Versions of Apollo Server 3.2 and above add a "draining" phase to server shutdown, enabling a server to complete in-progress operations before continuing to shut down. Without this draining phase, operations can reach your server even after it has stopped, causing those operations to fail. + +In Apollo Server 4+, if your server _hasn't_ set up draining and it receives an operation as the server is shutting down, the server logs a warning before failing that operation. + +If you are using the `startStandaloneServer` function, your server drains automatically. If you are using `expressMiddleware` or another `http.Server`-based web server, you can add draining using the [`ApolloServerPluginDrainHttpServer` plugin](./api/plugin/drain-http-server/#using-the-plugin). + +### Cache control plugin sets `cache-control` header for uncached requests + +The cache control plugin is installed by default. It does two things: it calculates `requestContext.overallCachePolicy` based on static and dynamic hints, and it sets the `Cache-Control` response HTTP header. + +In Apollo Server 3, the cache control plugin only sets the `Cache-Control` header when the response is cacheable. + +In Apollo Server 4+, the cache control plugin also sets the `Cache-Control` header (to the value `no-store`) when the response is not cacheable. + +To restore the behavior from Apollo Server 3, you can install the cache control plugin and set `calculateHttpHeaders: 'if-cacheable'`: + + + +```ts +import { ApolloServer } from '@apollo/server'; +import { ApolloServerPluginCacheControl } from '@apollo/server/plugin/cacheControl'; + +new ApolloServer({ + // ... + plugins: [ + ApolloServerPluginCacheControl({ calculateHttpHeaders: 'if-cacheable' }), + ], +}); +``` + + + + +### `CacheScope` type + +In Apollo Server 4+, `CacheScope` is now a union of strings (`PUBLIC` or `PRIVATE`) rather than an enum: + +```ts +export type CacheScope = 'PUBLIC' | 'PRIVATE'; +``` + +You can no longer type `CacheScope.Public` or `CacheScope.Private`. Instead, just use the string `'PUBLIC'` or `'PRIVATE'`. Values defined as `CacheScope` will only accept those two values, so any typos are still caught at compile time. + +You can now import `CacheScope` from the new `@apollo/cache-control-types` package (instead of importing it from an Apollo Server package). This enables libraries that work with multiple GraphQL servers (such as `@apollo/subgraph`) to refer to `CacheScope` without depending on `@apollo/server`. + + +### `parseOptions` only affects operation parsing + +In Apollo Server 3, the `parseOptions` constructor option is used to modify how GraphQL parsing works in two unrelated places: when parsing GraphQL operations, and when parsing the schema if the schema is provided via `typeDefs`. If you are using `typeDefs`, you cannot control these options (such as `noLocation`) independently. In addition, the TypeScript definition of the `parseOptions` option uses a type (from the `@graphql-tools/schema` package whose `makeExecutableSchema` function implements the `typeDefs` option) that contains options such as `assumeValidSDL` which are only relevant for parsing schemas. + +In Apollo Server 4+, the `parseOptions` constructor option is only used when parsing GraphQL operations, and its TypeScript type only contains options relevant to parsing operations. + +If you used both of the `parseOptions` and `typeDefs` constructor options in Apollo Server 3 like this: + +```ts +const parseOptions = { noLocation: true }; +new ApolloServer({ + typeDefs, + resolvers, + parseOptions, +}); +``` + +and you would like to continue to apply the same options to both operation and schema parsing in Apollo Server 5, run `npm install @graphql-tools/schema`, and change your code to this: + +```ts +import { makeExecutableSchema } from '@graphql-tools/schema'; + + +const parseOptions = { noLocation: true }; +new ApolloServer({ + schema: makeExecutableSchema({ + typeDefs, + resolvers, + // Note that if you're using `@graphql-tools/schema` v9 or newer, the parse + // options such as noLocation are passed *directly* to makeExecutableSchema, + // which we accomplish here with the `...` syntax. + // In older versions, pass it as a single option named `parseOptions` + // (ie, remove the `...`). + ...parseOptions, + }), + // This one affects operation parsing. Note that if you set any SDL-specific + // options in parseOptions, you'll need to pass a `parseOptions` here that + // does not contain those options. + parseOptions, +}); +``` + +### Content-Type response header + +In Apollo Server 3, the `Content-Type` response header is `application/json`. Apollo Server 4+ includes the encoding via the `charset` parameter: `application/json; charset=utf-8` as recommended by the [GraphQL over HTTP spec](https://github.com/graphql/graphql-over-http/blob/main/spec/GraphQLOverHTTP.md#media-types). + +## "Disabled" plugins cannot be combined with their enabled counterpart + +Apollo Server has several plugins that are installed by default in certain conditions. To override this behavior, each of these plugins has a "disabled" counterpart that prevents this default installation. + +But what happens if you combine the manual installation of a plugin with its disabled counterpart? Consider the following code: + +```ts +const server = new ApolloServer({ + schema, + plugins: [ + ApolloServerPluginUsageReporting(), + ApolloServerPluginUsageReportingDisabled(), + ] +}); +await server.start(); +``` + +In Apollo Server 3, the "disabled" plugin is simply ignored if combined with its enabled counterpart. This could lead to confusion, as it can appear that an attempt to disable a feature is completely ignored. + +In Apollo Server 4+, `await server.start()` will throw if you combine a "disabled" plugin with its enabled counterpart, with an error like `You have tried to install both ApolloServerPluginUsageReporting and ApolloServerPluginUsageReportingDisabled`. If your server throws this error, choose whether you want the feature enabled or disabled, and install only the appropriate plugin. + +(This change affects the usage reporting, inline trace, and cache control features. It also affects the schema reporting feature, although `ApolloServerPluginSchemaReportingDisabled` did not exist in Apollo Server 3. For technical reasons, it does not affect the landing page feature: combining `ApolloServerPluginLandingPageDisabled` with a landing page plugin should be considered as unspecified behavior which may change in a future release of Apollo Server.) + +## Plugin API changes + +### Fields on `GraphQLRequestContext` + +Most plugin API hooks take a `GraphQLRequestContext` object as their first argument. Apollo Server 4+ makes several changes to the `GraphQLRequestContext` object. + +The `context` field has been renamed `contextValue` for consistency with the `graphql-js` API and to help differentiate from the `context` option of integration functions (the *function* which returns a context value). + +The `GraphQLRequestContext.logger` field is now `readonly`. If you depended on the ability to change the `logger`, please file an issue. + +Apollo Server 4+ removes the `schemaHash` field from `GraphQLRequestContext`. This field is an unstable hash of a JSON encoding resulting from running a GraphQL introspection query against your schema. The `schemaHash` field is not guaranteed to change when the schema changes (e.g., it is not affected by changes to schema directive applications). If you want a schema hash, you can use `graphql-js`'s `printSchema` function on the `schema` field and then hash the output. + +Apollo Server 4+ removes the `debug` field from `GraphQLRequestContext` because `ApolloServer` no longer has a [vague `debug` option](#debug). There is no direct replacement for this field. If this is a problem for you, please open a GitHub issue, and we can find an appropriate improvement. + + +### Fields on `GraphQLServerContext` + +Apollo Server 4+ makes several changes to the `GraphQLServerContext` object. + +Apollo Server 4+ renames the TypeScript type for the argument to the `serverWillStart` plugin hook from `GraphQLServiceContext` to `GraphQLServerContext`, for consistency with the hook name. + +Apollo Server 4+ removes the `schemaHash` field (see the [previous section](#fields-on-graphqlrequestcontext) for details). + +Apollo Server 4+ removes the `persistedQueries` field from `GraphQLServerContext`. We don't have a reason for providing this particular configuration to plugins, but if having this field is important for you, please file a GitHub issue. + +Apollo Server 4+ removes the `serverlessFramework` field, with the new `startedInBackground` field providing essentially the same information. In Apollo Server 3, the `serverlessFramework` field returns `true` if using a subclass of `ApolloServer` for a serverless framework. In Apollo Server 4+, there are no subclasses, and the [new API](#new-approach-to-serverless-frameworks) handles startup errors in a serverless-friendly way. The `startedInBackground` field returns `true` if your server is started using the `server.startInBackgroundHandlingStartupErrorsByLoggingAndFailingAllRequests()` method (which should be done by your serverless integration). + +### `GraphQLRequest` + +Apollo Server 4+ refactors the `GraphQLRequest` object, which is available to plugins as `requestContext.request` and as an argument to `server.executeOperation`. + +Specifically, the `http` field is now an `HTTPGraphQLRequest` type instead of a type based on the Fetch API's `Request` object. The `HTTPGraphQLRequest` object does not contain a URL path, and its `headers` field is a `Map` (with lower-case keys) rather than a Fetch API `Headers` object. + +### `GraphQLResponse` + +Apollo Server 4+ refactors the [`GraphQLResponse` object](https://github.com/apollographql/apollo-server/blob/main/packages/server/src/externalTypes/graphql.ts#L25), which is available to plugins as `requestContext.response` and is the type `server.executeOperation` returns. + +In Apollo Server 3, the `data`, `errors`, and `extensions` fields existed at the top level, right beside `http`. + +Because Apollo Server 4+ supports incremental delivery directives such as `@defer` and `@stream` (when combined with an appropriate version of `graphql-js`), the structure of the response can now represent either a single result or multiple results, so these fields no longer exist at the top level of `GraphQLResponse`. + +Instead, there is a `body` field at the top level of `GraphQLResponse`. `response.body.kind` is either `'single'` or `'incremental'`. If it is `'single'`, then incremental delivery has not been used, and `response.body.singleResult` is an object with `data`, `errors`, and `extensions` fields. If it is `'incremental'`, then `response.body.initialResult` is the initial result of the operation, and `response.body.subsequentResults` is an async iterator that will yield subsequent results. (The precise structure of `initialResult` and `subsequentResults` is defined by `graphql-js` and may change between the current pre-release of `graphql-js` v17 and its final release; if you write code that processes these values before `graphql-js` v17 has been released you may have to adapt it when the API is finalized.) + +Additionally, the `data` and `extensions` fields are both type `Record`, rather than `Record`. + +The value of `http.headers` is now a `Map` rather than a Fetch API `Headers` object. All keys in this map must be lower-case; if you insert any header name with capital letters, it will throw. + +### `plugins` constructor argument does not take factory functions + +In Apollo Server 3, each element of the `plugins` array provided to `new ApolloServer` could either be an `ApolloServerPlugin` (ie, an object with fields like `requestDidStart`) or a zero-argument "factory" function returning an `ApolloServerPlugin`. + +In Apollo Server 4+, each element must be an `ApolloServerPlugin`. If you used a factory function in order to refer to the `ApolloServer` object itself when setting up your plugin, you may want to use the new `ApolloServer.addPlugin` method which you may call on your `ApolloServer` before you call `start` or `startStandaloneServer`. + +For example, if your Apollo Server 3 code looked like this: + + + +```ts +const server = new ApolloServer({ + typeDefs, + plugins: [ + makeFirstPlugin, + () => makeSecondPlugin(server), + ], +}); +``` + + + +then your Apollo Server 5 code can look like this: + + + +```ts +const server = new ApolloServer({ + typeDefs, + plugins: [ + makeFirstPlugin(), + ], +}); +server.addPlugin(makeSecondPlugin(server)); +``` + + + +### Changes to plugin semantics + +In Apollo Server 4+, `requestDidStart` hooks are called in parallel rather than in series. + +Apollo Server 4+ more consistently handles errors thrown by multiple plugin hooks. Each error is wrapped in an "Unexpected error handling request" error and invoked using the new `unexpectedErrorProcessingRequest` plugin hook. + +In Apollo Server 3, if a `didResolveOperation` hook threw a `GraphQLError`, the server would return a 400 error by default. In Apollo Server 4+, the server will return a 500 by default, but this can be configured by setting [`extensions.http`](./data/errors/#setting-http-status-code-and-headers) on the `GraphQLError` object. + +### Custom `gateway` and `GraphQLDataSource` implementations + +The `gateway` option to the `ApolloServer` constructor is designed to be used with the `ApolloGateway` class from the `@apollo/gateway` package. Apollo Server 4+ changes the details of how Apollo Server interacts with this object. If you use [any version of `@apollo/gateway` that supports `graphql` 16](#graphql) as your server's `gateway` (which includes all non-EOL versions of `@apollo/gateway`), these changes won't affect you. However, if you provide something _other_ than an `ApolloGateway` instance to this option, you might need to adjust your custom code. + +All the TypeScript types you need to define your `gateway` are now part of the `@apollo/server-gateway-interface` package rather than being exported from an Apollo Server package directly. Additionally, many of these types have been renamed. + +In Apollo Server 2, the TypeScript type used for the `gateway` constructor option is called `GraphQLService`. In Apollo Server 3, the TypeScript type changed to `GatewayInterface`, but the `apollo-server-core` package continued to export an identical `GraphQLService` type. Apollo Server 4+ no longer exports the legacy `GraphQLService` type. Instead, use `GatewayInterface`, now exported from `@apollo/server-gateway-interface`. + +In Apollo Server 3, your `gateway` may define either `onSchemaChange` or the newer `onSchemaLoadOrUpdate`. In Apollo Server 4+, your `gateway` must define `onSchemaLoadOrUpdate`. + +In Apollo Server 3, the `GatewayInterface.load` method returns `Promise`, which contains a `schema` and an `executor`. Apollo Server 4+ renames `GraphQLServiceConfig` to `GatewayLoadResult` (exported from `@apollo/server-gateway-interface`), which now only has an `executor` field. You can use the `onSchemaLoadOrUpdate` hook if you want to receive the schema. + +In Apollo Server 3, the `executor` function took an argument of type `GraphQLRequestContextExecutionDidStart`. While Apollo Server 4+ still has a type with this name, that type is *not* the argument to the `executor`. Instead, the argument to the executor has type `GatewayGraphQLRequestContext` (exported from `@apollo/server-gateway-interface`). The structure of this data type matches the structure of `GraphQLRequestContextExecutionDidStart` from *Apollo Server 3*, not the structure in Apollo Server 4+. + +Similarly, if you create a custom `GraphQLDataSource` type (returned from `@apollo/gateway`'s `buildService` hook), the argument to its `process` method has changed from being Apollo Server 3's `GraphQLRequestContext` to the same `GatewayGraphQLRequestContext`. (For clarity: `GraphQLDataSource` is the class which Apollo Gateway uses to talk to subgraphs; it is unrelated to the Apollo Server 3 [`dataSources` option](#datasources).) + +Additionally, the following types have been renamed and are now exported from `@apollo/server-gateway-interface`: +- `GraphQLExecutor` is now `GatewayExecutor` +- `SchemaLoadOrUpdateCallback` is now `GatewaySchemaLoadOrUpdateCallback` +- `Unsubscriber` is now `GatewayUnsubscriber` + +With the exception of requiring `onSchemaLoadOrUpdate`, all the changes described above are about the *names* and exporting packages of the TypeScript types; the actual runtime API between Apollo Server and Apollo Gateway is unchanged in Apollo Server 4+. That is, you should just have to update type declarations, not the runtime code itself. + +## Changes to defaults + +Apollo Server 3 introduced several recommended features after the initial v3.0.0 release, but these features were turned off by default for backward compatibility. In Apollo Server 4+, the recommended behavior _is_ the default. In each case, you can still configure your server to match the default behavior of Apollo Server 3 if you want to. + + +### CSRF prevention is on by default + +Apollo Server 3.7 added a recommended security feature called CSRF prevention, which you can enable with the constructor option `csrfPrevention: true`. In Apollo Server 4+, `true` is the default value. If you want to disable this recommended security feature, pass `csrfPrevention: false`. For more information about CSRF prevention and CORS, see [Configuring CORS](./security/cors). + + +### HTTP batching is off by default + +Apollo Server supports [batching HTTP requests](./workflow/requests/#batching), enabling a single HTTP request to execute multiple GraphQL operations. In Apollo Server 3, support for HTTP batching was on by default. + +In Apollo Server 4+, you must explicitly enable this feature by passing `allowBatchedHttpRequests: true` to the `ApolloServer` constructor. + +Not all GraphQL clients support HTTP batching, and batched requests do not support incremental delivery. HTTP batching can help performance by sharing a `context` object across operations, but it can make it harder to understand the amount of work any given request does. + + +### Default cache is bounded + +Each Apollo Server has a cache backend used in several features, including APQs, the response cache plugin, and `RESTDataSource`. Apollo Server uses an in-memory cache by default, but you can configure it to use a different backend (such as Redis or Memcached) using the `cache` constructor option. + +In Apollo Server 3, the default cache is an _unbounded_ in-memory cache. This cache is vulnerable to denial of service attacks via memory exhaustion, and we do not recommend that users use the default cache. + +In Apollo Server 4+, the default cache is a _bounded_ in-memory cache backend (which _is safe_ for production use). This is equivalent to passing `cache: 'bounded'` in Apollo Server 3.9 or newer. + +If you want to customize the cache Apollo Server uses, Apollo provides two wrapper packages to help with this process: +* [`@apollo/utils.keyvadapter`](https://github.com/apollographql/apollo-utils/tree/main/packages/keyvAdapter) - provides a [`KeyvAdapter`](https://github.com/apollographql/apollo-utils/tree/main/packages/keyvAdapter#keyvadapter-class) wrapper class to use alongside the [`keyv`](https://www.npmjs.com/package/keyv) package. +* [`@apollo/utils.keyvaluecache`](https://github.com/apollographql/apollo-utils/tree/main/packages/keyValueCache) - provides both the [`KeyValueCache`](https://github.com/apollographql/apollo-utils/tree/main/packages/keyValueCache#keyvaluecache-interface) TypeScript interface and a [`InMemoryLRUCache`](https://github.com/apollographql/apollo-utils/tree/main/packages/keyValueCache#inmemorylrucache) class (a wrapper around the `lru-cache` package). + +For examples of using both `KeyvAdapter` and `InMemoryLRUCache`, see [Configuring external caching](./performance/cache-backends#configuring-external-caching). + +If you want your server to use an unbounded in-memory cache (which might make your server vulnerable to memory exhaustion attacks), you can use the default `Keyv` implementation with no arguments: + + + +```ts +import { ApolloServer } from '@apollo/server'; +import { KeyvAdapter } from '@apollo/utils.keyvadapter'; +import Keyv from 'keyv'; + +new ApolloServer({ + // DANGEROUS: Match the unsafe default behavior of Apollo Server 3's with an + // unbounded in-memory cache. + cache: new KeyvAdapter(new Keyv()), + // ... +}); + +``` + + + + +### Local landing page defaults to Embedded Apollo Sandbox + +In Apollo Server 3, the default development landing page is a splash page containing a link to the Apollo Sandbox (hosted at `https://studio.apollographql.com/`). This Sandbox only works if your server's CORS configuration allows the origin `https://studio.apollographql.com/`. The [`ApolloServerPluginLandingPageLocalDefault`](./workflow/build-run-queries/#configuring-the-default-landing-page) plugin enables you to embed Apollo Sandbox directly on your server's landing page. Passing `embed: true` to the `ApolloServerPluginLandingPageLocalDefault` plugin allows your Sandbox to make same-origin requests to your server with no additional CORS configuration. + +In Apollo Server 4+, the default development landing page is the *embedded* Apollo Sandbox. Note that nothing changes about the default production landing page. + +To use the splash page from Apollo Server 3, you can add the following to your Apollo Server 5 constructor: + + + +```ts +import { ApolloServer } from '@apollo/server'; +import { ApolloServerPluginLandingPageLocalDefault, ApolloServerPluginLandingPageProductionDefault } + from '@apollo/server/plugin/landingPage/default'; + +new ApolloServer({ + // ... + plugins: [ + process.env.NODE_ENV === 'production' + ? ApolloServerPluginLandingPageProductionDefault() + : ApolloServerPluginLandingPageLocalDefault({ embed: false }) + ], +}); +``` + + + + +### Usage reporting and inline trace plugins mask errors by default + +In Apollo Server 3, traces sent to Apollo's servers from monolith servers by the usage reporting plugin contain the full message and extensions of every GraphQL error that occurs in the operation by default. Similarly, inline traces sent from subgraphs to Apollo Gateways (which are then sent to Apollo's servers) contain full error details by default. You can modify or drop these errors with `rewriteError` options to the appropriate plugins. + +In Apollo Server 4+, error details are *not* included in traces by default. By default, error messages are replaced with `` and error extensions are replaced with a single extension `maskedBy` naming the plugin which performed the masking (`ApolloServerPluginUsageReporting` or `ApolloServerPluginInlineTrace`). + +To restore the Apollo Server 3 behavior, you can pass `{ unmodified: true }` to an option on each plugin: + +```ts +// monoliths +new ApolloServer({ + plugins: [ApolloServerPluginUsageReporting({ + sendErrors: { unmodified: true }, + })], + // ... +}) + +// subgraphs +new ApolloServer({ + plugins: [ApolloServerPluginInlineTrace({ + includeErrors: { unmodified: true }, + })], + // ... +}) +``` + +(As [described above](#rewriteerror-plugin-option), the `rewriteError` option has been replaced by a `transform` option on `sendErrors` or `includeErrors`.) + + +### Usage reporting plugin is off by default on subgraphs + +In an Apollo Federation supergraph, your Apollo Gateway or GraphOS Router sends [usage reports](./api/plugin/usage-reporting/) to Apollo's servers; information about what happens inside individual subgraph servers is sent from the subgraphs to the Gateway or Router via [inline traces](./api/plugin/inline-trace/). That is to say: the usage reporting plugin is *not* designed for use in federated subgraphs. + +In Apollo Server 3, if you provide an Apollo API key and graph ref and do not explicitly install the `ApolloServerPluginUsageReporting` or `ApolloServerPluginUsageReportingDisabled` plugins, the `ApolloServerPluginUsageReporting` plugin will be installed with its default configuration, even if the server is a subgraph. + +In Apollo Server 4+, this automatic installation does not occur in federated subgraphs. You still can explicitly install `ApolloServerPluginUsageReporting` in your subgraph, though this is not recommended and a warning will be logged. + +## Renamed packages + +The following packages have been renamed in Apollo Server 4+: + - `apollo-datasource-rest` is now [`@apollo/datasource-rest`](https://www.npmjs.com/package/@apollo/datasource-rest). + - `apollo-server-plugin-response-cache` is now [`@apollo/server-plugin-response-cache`](https://www.npmjs.com/package/@apollo/server-plugin-response-cache). + - `apollo-server-plugin-operation-registry` (which supports a legacy GraphOS feature that should not be used for new graphs) is now [`@apollo/server-plugin-operation-registry`](https://www.npmjs.com/package/@apollo/server-plugin-operation-registry). + - `apollo-reporting-protobuf` (an internal implementation detail for the usage reporting plugin) is now [`@apollo/usage-reporting-protobuf`](https://www.npmjs.com/package/@apollo/usage-reporting-protobuf). + +All actively maintained Apollo Server packages now start with `@apollo/`. + + +## TypeScript type changes + +Several Apollo Server 4+ changes only affect TypeScript typings, not runtime behavior. For example, we rename several specific TypeScript interfaces to be more straightforward and change which packages we use to define other interfaces. + +### Improved typing for `context` + +In Apollo Server 3, you never explicitly specify the type of your context value when setting up your server. This means there is no compile-time check to ensure your `context` function return type matches the type of your context value (read by your resolvers and plugins). `ApolloServer` has a generic parameter, but that parameter is the type of the *arguments passed* to your `context` function, _not_ the type of your app's context value. + +In Apollo Server 4+, you specify the type of your context value as a generic parameter to `ApolloServer`. This gives you proper `context` typing throughout, ensuring that the type returned from your `context` function matches the type available in your resolvers and plugins. For example: + +```ts +// You can optionally create a TS interface to set up types +// for your context +interface MyContext { + token: String +} + +// Create a new ApolloServer instance, passing in your +// context's types to ApolloServer's integration function. +const server = new ApolloServer({ + typeDefs, + resolvers: { + Query: { + hello: (root, args, { token }) { + return token; // token is properly inferred as a string + }, + }, + }, + plugins: [{ + async requestDidStart({ contextValue }) { + // token is properly inferred as a string; note that in Apollo Server 4 you + // write `contextValue` rather than `context` in plugins. + console.log(contextValue.token); + }, + }], +}); + +const { url } = await startStandaloneServer(apolloServerInstance, { + context: async ({req, res}) => ({ + // You now get proper type inference within your context function! + token: await getTokenForRequest(req), + }), + listen: { port: 4000 } +}); +``` + +### Improved typing for `validationRules` + +In Apollo Server 3, the `validationRules` option was declared as a list of functions that returned `any`. However, at runtime the functions actually needed to return a `graphql-js` `ASTVisitor`. In Apollo Server 4+, the TypeScript type ensures that `validationRules` is a list of `graphql-js` `ValidationRule`s. If your `validationRules` has a TypeScript error, you will need to fix one or more of your rules to correctly return `ASTVisitor`s. + +### `@apollo/utils.fetcher` replaces `apollo-server-env` + +In Apollo Server 3, the `apollo-server-env` package primarily provides TypeScript typings and polyfills for the `fetch` and `URL` APIs. + +Apollo Server 4+ introduces `@apollo/utils.fetcher`, which defines a minimal fetch API (`Fetcher`) that provides Fetch API TypeScript typings. + +The `@apollo/utils.fetcher` package has a more precise name and only supports argument structures that are likely to be compatible across implementations of the Fetch API. Specifically, `@apollo/utils.fetcher` doesn't permit you to pass `Request` or `Headers` objects to `fetch` because libraries often can only recognize their implementations of these interfaces. + +### `@apollo/cache-control-types` + +In Apollo Server 3, you could import the `CacheScope`, `CacheHint`, `CacheAnnotation`, `CachePolicy`, and `ResolveInfoCacheControl` types from your chosen Apollo Server package. + +In Apollo Server 4+, the new `@apollo/cache-control-types` package exports the [`CacheScope`](#cachescope-type), `CacheHint`, `CacheAnnotation`, `CachePolicy`, and `ResolveInfoCacheControl` types. This enables libraries that work with multiple GraphQL servers (such as `@apollo/subgraph`) to refer to these types without depending on `@apollo/server`. + +Apollo Server 4+ no longer uses the `declare module` TypeScript feature to declare that all `GraphQLResolveInfo` objects (i.e., the `info` argument to resolvers) have a `cacheControl` field. Instead, `@apollo/cache-control-types` provides a `GraphQLResolveInfoWithCacheControl` interface that you can cast `info` to (if you don't want run-time validation), or if you do want runtime validation, you can use the `maybeCacheControlFromInfo` and `cacheControlFromInfo` functions. + +For example, if you had this resolver in Apollo Server 3: + +```ts + someField(parent, args, context, { cacheControl }) { + cacheControl.setCacheHint({ maxAge: 100 }); + } +``` + +you can write this in Apollo Server 5: + +```ts +import { cacheControlFromInfo } from '@apollo/cache-control-types'; + +// ... + someField(parent, args, context, info) { + cacheControlFromInfo(info).setCacheHint({ maxAge: 100 }); + } +``` + +Alternatively, you can declare `info` to be of type `GraphQLResolveInfoWithCacheControl`. For example, if using `graphql-code-generator` with `typescript-resolvers`, you can use the `customResolveInfo` option. + +Note: this is a TypeScript-specific change. The runtime representation hasn't changed, and JavaScript code can continue to access `info.cacheControl` directly. + +The `CacheAnnotation` type is no longer exported from any package. + +### Renamed types + +This section lists the TypeScript-only types (i.e., interfaces, not classes) that Apollo Server 4+ changes (not including those mentioned elsewhere in this article). + +Apollo Server 4+ changes the name of the constructor options type from `Config` to `ApolloServerOptions`. In Apollo Server 3, some integration packages export their own versions of this type (e.g., `ApolloServerExpressConfig`). In Apollo Server 4+, there is only one `ApolloServer` type with only one constructor, so these additional types are no longer necessary. + +Two types in `apollo-server-express` now have more explicit names exported from `@as-integrations/express4` (and `@as-integrations/express5`). `GetMiddlewareOptions` is now `ExpressMiddlewareOptions` and `ExpressContext` is now `ExpressContextFunctionArgument`. + +### Removed types + +This section lists the TypeScript-only types (i.e., interfaces, not classes) that Apollo Server 4+ removes (not including those mentioned elsewhere in this article). + +In Apollo Server 3, the `GraphQLOptions` type was internally used to create integrations and was exported for technical reasons; it is now gone in Apollo Server 4+. + +Apollo Server 4+ removes the `applyMiddleware` function and its related `ServerRegistration` type. + +In Apollo Server 3, the `CorsOptions` and `OptionsJson` types are re-exported from the `cors` and `body-parser` packages. Apollo Server 4+ no longer handles these tasks for you, so these types aren't exported. + +The `ServerInfo` type (returned from `server.listen()` in `apollo-server`) is gone in Apollo Server 4+. The `startStandaloneServer` function now returns a simpler data structure with no type name. diff --git a/docs/source/migration.mdx b/docs/source/migration.mdx index 58a5466ef72..a8dfc569efb 100644 --- a/docs/source/migration.mdx +++ b/docs/source/migration.mdx @@ -1,1942 +1,177 @@ --- -title: Migrating to Apollo Server 4 +title: Migrating from Apollo Server 4 --- -import TopLevelAwait from "./shared/top-level-await.mdx" -import IntegrationTable from "./shared/integration-table.mdx" +While Apollo Server 4 came with numerous breaking changes, the Apollo Server team is pleased to say that Apollo Server 5 has almost none! -> 📣 **Apollo Server 4 is [generally available](/graphos/reference/feature-launch-stages#general-availability)!** If you learn best by doing, check out the [tutorial for migrating from Apollo Server 3](https://www.apollographql.com/tutorials/side-quest-as4?referrer=docs-content). +Apollo Server 5 is a small upgrade focused largely on adjusting which versions of Node.js and Express are supported. This page tells you what to do to migrate your server from Apollo Server 4 to Apollo Server 5. -Apollo Server 4 focuses on improving Apollo Server's extensibility and making it simpler to use, maintain, and document. To learn more about the inspiration behind this release, see the [Apollo Server Roadmap](https://github.com/apollographql/apollo-server/blob/24a841bc68d/ROADMAP.md). +Most users will only have to: +- Confirm that you are running a non-EOL version of Node.js +- Maybe do a backwards-compatible upgrade of GraphQL.js +- If using Express, adjust how you import `expressMiddleware` +- If using an [HTTP proxy](./security/proxy-configuration/) to make HTTP requests, adjust how you configure it -Apollo Server 4 provides the following features: -* A well-defined API with a stable HTTP abstraction, enabling contributors to easily [build and maintain integrations](./integrations/building-integrations) in their preferred frameworks. -* A new `@apollo/server` package, combining numerous [smaller packages](#packages-merged-into-apolloserver) and including the [`startStandaloneServer`](#migrate-from-apollo-server) function. -* Apollo-maintained packages to integrate with the Express web framework via the [`expressMiddleware`](#migrate-from-apollo-server-express) function. -* Packages that can be used as either ECMAScript or CJS modules. -* Experimental support for [incremental delivery](./workflow/requests#incremental-delivery-experimental) when combined with a pre-release of `graphql-js`. +If you are still on Apollo Server v3, the [migrating from Apollo Server 3](./migration-from-v3) guide shows you how to migrate directly from v3 to v5. -> For a list of all breaking changes, see the [changelog](https://github.com/apollographql/apollo-server/blob/main/packages/server/CHANGELOG.md). +We recommend that all users of [previous versions](./previous-versions) of Apollo Server upgrade to Apollo Server 5 as soon as possible. Apollo Server 4 is deprecated, with end-of-life on January 26, 2026. Apollo Server 3 has been end-of-life since October 22, 2024. Apollo Server 2 has been end-of-life since October 22, 2023. -> 🚚 This guide helps you migrate from Apollo Server 3 to Apollo Server 4. If you are using Apollo Server 2, you must first [migrate to Apollo Server 3](https://www.apollographql.com/docs/apollo-server/v3/migration) before following this guide. +## Require Node.js v20 -We recommend that all users of [previous versions](./previous-versions) of Apollo Server upgrade to Apollo Server 4 as soon as possible. Apollo Server 3 is end-of-life as of October 22, 2024. Apollo Server 2 is end-of-life as of October 22, 2023. +Apollo Server 5 supports Node.js v20.0.0 and later. (Apollo Server 4 supports Node.js v14.16.0 and later.) This includes all non-EOL major versions at the time of release. -## The new `@apollo/server` package +If you're using Node.js v14, v16, or v18, upgrade your runtime before upgrading to Apollo Server 5 to at least v20; we recommend upgrading all the way to the latest version. -Apollo Server 3 is distributed as a [fixed set of packages](/apollo-server/v3/integrations/middleware) for integrating with different web frameworks and environments. The main "batteries-included" [`apollo-server` package](/apollo-server/v3/integrations/middleware#apollo-server) reduces setup time by providing a minimally customizable GraphQL server. +If your server requires you to use an [HTTP proxy](./security/proxy-configuration/) to make external connections, we strongly recommend running Node.js v24 or newer, which has built-in support for communicating through HTTP proxies. -In Apollo Server 3, the `apollo-server-core` package defines an `ApolloServer` "base" class, which each integration package (`apollo-server-express`,`apollo-server-lambda`, etc.) subclasses with a slightly different API. This packaging structure means that new integration package releases are lockstep versioned to Apollo Server itself, making it challenging to support major versions of frameworks and add integration-specific changes. Additionally, Apollo Server 3 doesn't provide a way to add new integrations for additional frameworks. +If you can't upgrade to a non-EOL version of Node.js, you can continue to use Apollo Server 4. -Apollo Server 4 takes a different approach to integrations by providing a stable web framework integration API, which includes explicit support for serverless framework life cycles. +## Require GraphQL.js v16.11.0 -The new `@apollo/server` package contains: +Apollo Server 5 supports GraphQL.js v16.11.0 and later, as a peer dependency. (Apollo Server 4 supports GraphQL.js v16.6.0 and later.) -- The `ApolloServer` class -- A [standalone server](#migrate-from-apollo-server) (similar to Apollo Server 3's `apollo-server` package) -- A set of [core plugins](#plugins-are-in-deep-imports) (similar to Apollo Server 3's `apollo-server-core` package) +Before upgrading to Apollo Server 5, make sure the version of `graphql` in your server is at least v16.11.0. There are no backward-incompatible changes between v16.6.0 and v16.11.0 (but there are several nice improvements, including a fix to a [serious bug that can crash your Node server](https://github.com/graphql/graphql-js/issues/3528).) -There are no integration-specific subclasses in Apollo Server 4. Instead, there's a single `ApolloServer` class with a single API that all integrations use. -In Apollo Server 3, the Apollo Server core team was responsible for maintaining every integration package. With Apollo Server 4, the AS core team no longer directly maintains most integration packages. Instead, we work with the broader open source community [to maintain Apollo Server integrations](./integrations/integration-index/), enabling those who regularly use different web frameworks to make the best choices for their framework's integration. +## Separate package for the Express integration -For those migrating from Apollo Server 3 to Apollo Server 4, use the below flowchart to see your migration path: +Apollo Server defines a generic API for integrating with web frameworks via [separately-distributed integration packages](./integrations/integration-index). -```mermaid -graph TB; - server("Am I using the apollo-server package?"); - server--No-->express("Am I using the apollo-server-express package?"); - server--Yes-->useStandAlone("Use the startStandaloneServer function"); - express--No-->otherIntegration("See if a community-supported integration exists"); - express--Yes-->useExpressMiddleware("Use the expressMiddleware function"); - class useStandAlone,useExpressMiddleware secondary; -``` - -- If you're currently using the `apollo-server` package, you should use the [`startStandaloneServer`](#migrate-from-apollo-server) function. -- If you're currently using the `apollo-server-express` package, you should use the [`expressMiddleware`](#migrate-from-apollo-server-express) function in the `@as-integrations/express4` package. - -The [`@apollo/server` package](https://www.npmjs.com/package/@apollo/server) exports these functions alongside the `ApolloServer` class. - -> In Apollo Server 4, `@apollo/server` also contains a copy of the same `expressMiddleware` function from `@as-integrations/express4` package. We recommend you use the separate integration package instead of the copy in `@apollo/server`, which a future major version of Apollo Server will remove. - -If you are using another Apollo Server 3 framework integration package (such as `apollo-server-koa` or `apollo-server-lambda`), check out our [list of integrations](./integrations/integration-index) to see if a community-maintained integration package exists for your framework of choice. - -If there is no Apollo Server integration for your favorite framework _yet_, help the broader community by [building a new integration](./integrations/building-integrations)! You can also [join the discussions about maintaining our existing integrations](https://github.com/apollographql/apollo-server/labels/integration-collaborators). - -Below are a few high-level changes for using framework integrations: - -- You can pass your [`context` initialization function](#context-initialization-function) directly to your framework's integration function (e.g., `expressMiddleware` or `startStandaloneServer`) instead of the `ApolloServer` constructor. -- You are responsible for [setting up HTTP body parsing and CORS](#http-body-parsing-and-cors) using your framework integration's standard functionality. -- If you want your server to listen on a specific URL path, pass that path directly to your framework's router instead of using the [`path` option](#path-parsing). If you did not specify a URL path, the default in Apollo Server 3 was `/graphql`, so to preserve existing behavior, you should specify that path explicitly. - -The following sections show how servers using `apollo-server` or `apollo-server-express` can update to Apollo Server 4. - - - -### Migrate from `apollo-server` - -In Apollo Server 3, the `apollo-server` package is a "batteries-included" package that wraps `apollo-server-express`, providing an HTTP server with minimal HTTP-level customization. - -If you used the "batteries included" `apollo-server` package in Apollo Server 3, use the `startStandaloneServer` function in Apollo Server 4. - -This Apollo Server 3 code: - - - -```ts title="apollo-server-3-standalone.ts" -// npm install apollo-server graphql -import { ApolloServer } from 'apollo-server'; -import { typeDefs, resolvers } from './schema'; - -interface MyContext { - token?: String; -} - -const server = new ApolloServer({ - typeDefs, - resolvers, - context: async ({ req }) => ({ token: req.headers.token }), -}); -const { url } = await server.listen(4000); -console.log(`🚀 Server ready at ${url}`); -``` - - - -looks like this in Apollo Server 4: - - - -```ts title="apollo-server-4-standalone.ts" -// npm install @apollo/server graphql -import { ApolloServer } from '@apollo/server'; -import { startStandaloneServer } from '@apollo/server/standalone'; -import { typeDefs, resolvers } from './schema'; - -interface MyContext { - token?: String; -} - - -const server = new ApolloServer({ typeDefs, resolvers }); -const { url } = await startStandaloneServer(server, { - context: async ({ req }) => ({ token: req.headers.token }), - listen: { port: 4000 }, -}); -console.log(`🚀 Server ready at ${url}`); -``` - - - -The `startStandaloneServer` function accepts two arguments; the first is the instance of `ApolloServer` that should begin listening for incoming requests. The second is an object for configuring your server's options, which most notably accepts the following properties: - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Name /
Type
Description
- - ##### `context` - - `Function` - - - - An optional `context` initialization function. The `context` function receives `req` and `res` options ([see below for more details.](#context-initialization-function)). - - In Apollo Server 3, you pass the `context` function to the constructor. In Apollo Server 4, you pass the `context` function to `startStandaloneServer`. - -
- - ##### `listen` - - `Object` - - - - An optional `listen` configuration option. The `listen` option accepts an object with the same properties as the [`net.Server.listen` options object](https://nodejs.org/api/net.html#serverlistenoptions-callback). - - For example, in Apollo Server 3, if you used `server.listen(4321)`, you'll now pass `listen: { port: 4321 }` to the `startStandaloneServer` function in Apollo Server 4. If you didn't pass any arguments to Apollo Server 3's `server.listen()` method; you don't need to specify this `listen` option. -
- -The `startStandaloneServer` function doesn't enable you to configure your server's CORS behavior. If you previously used the `cors` constructor option to customize your CORS settings in Apollo Server 3, use the [`expressMiddleware` function](#migrate-from-apollo-server-express) in Apollo Server 4. - -Similarly, if you used the `stopGracePeriodMillis` constructor option in Apollo Server 3, use the [`expressMiddleware` function](#migrate-from-apollo-server-express) and specify `stopGracePeriodMillis` to the `ApolloServerPluginDrainHttpServer` plugin. - -### Migrate from `apollo-server-express` - -If you used the `apollo-server-express` package in Apollo Server 3, use the `expressMiddleware` function in Apollo Server 4 (i.e., instead of using `server.applyMiddleware` or `server.getMiddleware`). - -> The following assumes you are using Express v4. If you would like to use Express v5 (which was not supported by Apollo Server 3), you can follow the instructions below, but use the package `@as-integrations/express5` instead of `@as-integrations/express4`. - -To migrate from Apollo Server 3's `apollo-server-express` package to using the `expressMiddleware` function, do the following: - -1. Install the `@apollo/server`, `@as-integrations/express4`, and `cors` packages. -2. Import symbols from `@apollo/server` (i.e., instead of from `apollo-server-express` and `apollo-server-core`). -3. Add `cors` to your server setup. -4. Remove the Apollo Server 3 `apollo-server-express` and `apollo-server-core` packages. -5. If you are using `apollo-server-express`'s default `/graphql` URL path (i.e., not specifying another URL with the [path option](/apollo-server/v3/api/apollo-server/#path)), you can mount `expressMiddleware` at `/graphql` to maintain behavior. To use another URL path, mount your server (with `app.use`) at the specified path. - -This Apollo Server 3 code: - - - -```ts title="apollo-server-3.ts" -// npm install apollo-server-express apollo-server-core express graphql -import { ApolloServer } from 'apollo-server-express'; -import { ApolloServerPluginDrainHttpServer } from 'apollo-server-core'; -import express from 'express'; -import http from 'http'; -import { typeDefs, resolvers } from './schema'; - -interface MyContext { - token?: String; -} - -const app = express(); -const httpServer = http.createServer(app); -const server = new ApolloServer({ - typeDefs, - resolvers, - context: async ({ req }) => ({ token: req.headers.token }), - plugins: [ApolloServerPluginDrainHttpServer({ httpServer })], -}); -await server.start(); -server.applyMiddleware({ app }); -await new Promise(resolve => httpServer.listen({ port: 4000 }, resolve)); -console.log(`🚀 Server ready at http://localhost:4000${server.graphqlPath}`); -``` - - - -looks like this in Apollo Server 4: - - - -```ts title="apollo-server-4.ts" -// npm install @apollo/server express graphql cors -import { ApolloServer } from '@apollo/server'; -import { ApolloServerPluginDrainHttpServer } from '@apollo/server/plugin/drainHttpServer'; -import { expressMiddleware } from '@as-integrations/express4'; -import express from 'express'; -import http from 'http'; -import cors from 'cors'; -import { typeDefs, resolvers } from './schema'; - -interface MyContext { - token?: String; -} - -const app = express(); -const httpServer = http.createServer(app); -const server = new ApolloServer({ - typeDefs, - resolvers, - plugins: [ApolloServerPluginDrainHttpServer({ httpServer })], -}); -await server.start(); -app.use('/graphql', - cors(), - express.json(), - expressMiddleware(server, { - context: async ({ req }) => ({ token: req.headers.token }), - }), -); - -await new Promise(resolve => httpServer.listen({ port: 4000 }, resolve)); -console.log(`🚀 Server ready at http://localhost:4000/graphql`); -``` - - - - -### Removed integrations - -Apollo Server 4 takes a fundamentally different approach to web framework integrations. By offering a well-defined API with a stable HTTP abstraction, Apollo Server 4 enables contributors to build and maintain integrations for the first time. - -To that end, the Apollo Server core team no longer maintains the following integration packages in Apollo Server 4: -* [`apollo-server-fastify`](https://www.npmjs.com/package/apollo-server-fastify) -* [`apollo-server-hapi`](https://www.npmjs.com/package/apollo-server-hapi) -* [`apollo-server-koa`](https://www.npmjs.com/package/apollo-server-koa) -* [`apollo-server-lambda`](https://www.npmjs.com/package/apollo-server-lambda) -* [`apollo-server-micro`](https://www.npmjs.com/package/apollo-server-micro) -* [`apollo-server-cloud-functions`](https://www.npmjs.com/package/apollo-server-cloud-functions) -* [`apollo-server-cloudflare`](https://www.npmjs.com/package/apollo-server-cloudflare) -* [`apollo-server-azure-functions`](https://www.npmjs.com/package/apollo-server-azure-functions) - -Instead, we now work with the broader community to maintain the following open-source integrations for Apollo Server: - - - -> If an integration doesn't exist for your framework, you can always [build your own](./integrations/building-integrations)! - -In Apollo Server 3, the `apollo-server-express` package supported both Express and its older predecessor [Connect](https://github.com/senchalabs/connect). In Apollo Server 4, `expressMiddleware` no longer supports Connect. An interested developer could [build a Connect-specific middleware](./integrations/building-integrations), and a PR to this migration guide is welcome if someone does this! - -### Packages merged into `@apollo/server` - -As shown above, Apollo Server 4 combines the functionality of the `apollo-server`, `apollo-server-express`, and `apollo-server-core` packages into a new `@apollo/server` package. - -But wait: there's more! The `@apollo/server` package also combines the following packages: -- [`apollo-server-errors`](https://www.npmjs.com/package/apollo-server-errors) -- [`apollo-server-plugin-base`](https://www.npmjs.com/package/apollo-server-plugin-base) -- [`apollo-server-types`](https://www.npmjs.com/package/apollo-server-types) - - -### Plugins are in deep imports - -In Apollo Server 3, the `apollo-server-core` package exports built-in plugins, like `ApolloServerUsageReporting`, at the top level. To use these plugins, you must install *both* the `apollo-server-core` package and the package you use to import `ApolloServer` (e.g., `apollo-server` or `apollo-server-express`). - -In Apollo Server 4, these built-in plugins are part of the main `@apollo/server` package, which also imports the `ApolloServer` class. The `@apollo/server` package exports these built-in plugins with deep exports. This means you use deep imports for each built-in plugin, enabling you to evaluate only the plugin you use in your app and making it easier for bundlers to eliminate unused code. - -There's one exception: the `ApolloServerPluginLandingPageGraphQLPlayground` plugin is now in its own package `@apollo/server-plugin-landing-page-graphql-playground`, which you can install separately. - -This plugin installs the [unmaintained](https://github.com/graphql/graphql-playground/issues/1143) GraphQL Playground project as a landing page and is provided for compatibility with Apollo Server 2. This package will **not** be supported after Apollo Server 4 is released. We strongly recommend you switch to Apollo Server's 4's [default landing page](./api/plugin/landing-pages), which installs the actively maintained Apollo Sandbox. - - Apollo Server exports the following plugins: - -| Plugin | Import path | -|--------|-------------| -| `ApolloServerPluginCacheControl` | `@apollo/server/plugin/cacheControl` | -| `ApolloServerPluginCacheControlDisabled` | `@apollo/server/plugin/disabled` | -| `ApolloServerPluginDrainHttpServer` | `@apollo/server/plugin/drainHttpServer` | -| `ApolloServerPluginInlineTrace` | `@apollo/server/plugin/inlineTrace` | -| `ApolloServerPluginInlineTraceDisabled` | `@apollo/server/plugin/disabled` | -| `ApolloServerPluginLandingPageDisabled` | `@apollo/server/plugin/disabled` | -| `ApolloServerPluginLandingPageLocalDefault` | `@apollo/server/plugin/landingPage/default` | -| `ApolloServerPluginLandingPageProductionDefault` | `@apollo/server/plugin/landingPage/default` | -| `ApolloServerPluginSchemaReporting` | `@apollo/server/plugin/schemaReporting` | -| `ApolloServerPluginUsageReporting` | `@apollo/server/plugin/usageReporting` | -| `ApolloServerPluginUsageReportingDisabled` | `@apollo/server/plugin/disabled` | - -For example, replace this Apollo Server 3 code: - -```ts -import { ApolloServerPluginUsageReporting } from 'apollo-server-core'; -``` - -with this Apollo Server 4 code: - -```ts -import { ApolloServerPluginUsageReporting } from '@apollo/server/plugin/usageReporting'; -``` - -You can also import each plugin's associated TypeScript types (e.g., `ApolloServerPluginUsageReportingOptions`) from the same deep import as that plugin. - -Once you've updated your imports, you can remove your project's dependency on `apollo-server-core`. - -## Known regressions - -### Appropriate 400 status codes - -Apollo Server v4 responds to an invalid `variables` object with a 200 status code, whereas v3 responds appropriately with a 400 status code. This regression was introduced in [PR #6502](https://github.com/apollographql/apollo-server/pull/6502) and brought to our attention in [Issue #7462](https://github.com/apollographql/apollo-server/issues/7462). - -Specifically, this regression affects cases where _input variable coercion_ fails. Variables of an incorrect type (i.e. `String` instead of `Int`) or unexpectedly `null` are examples that fail variable coercion. Additionally, missing or incorrect fields on input objects as well as custom scalars that throw during validation will also fail variable coercion. For additional specifics on variable coercion, see the "Input Coercion" sections in the [GraphQL spec](https://spec.graphql.org/June2018/#sec-Scalars). - -We recommend mitigating this regression unless you've already modified your application to work around it. To do so, add the `status400ForVariableCoercionErrors: true` option to your `ApolloServer` constructor: - - - -```ts -new ApolloServer({ - // ... - status400ForVariableCoercionErrors: true, -}) -``` - - - -This option will no longer be needed (and will be ignored) in Apollo Server v5. - -## Bumped dependencies - -### Node.js - -Apollo Server 4 supports Node.js 14.16.0 and later. (Apollo Server 3 supports Node.js 12.) This includes all [LTS and Current major versions at the time of release](https://nodejs.org/en/about/releases/). - -If you're using Node.js 12, upgrade your runtime before upgrading to Apollo Server 4. - -(Apollo Server 4 specifically requires v14.16.0 instead of merely v14.0.0, because that is the minimum version of Node.js 14 supported by our minimum supported version of `graphql`, as described in the next section.) - -### `graphql` - -Apollo Server has a peer dependency on [`graphql`](https://www.npmjs.com/package/graphql) (the core JS GraphQL implementation). Apollo Server 4 supports `graphql` v16.6.0 and later, but we *strongly* recommend using at least v16.7.0 due to a [bug in `graphql`](https://github.com/graphql/graphql-js/issues/3528) which can crash your server. (Apollo Server 3 supports `graphql` v15.3.0 through v16.) - -If you're using an older version of `graphql`, upgrade it to a supported version before upgrading to Apollo Server 4. - -Note that upgrading `graphql` may require you to upgrade other libraries that are installed in your project. For example, if you use Apollo Server with Apollo Gateway, you should upgrade Apollo Gateway to at least v0.50.1 or any v2.x version for full `graphql` 16 support before upgrading to Apollo Server 4. - -### TypeScript - -If you use Apollo Server with TypeScript, you must use TypeScript v4.7.0 or newer. - -For background, Apollo Server uses type system features introduced in v4.7. We want to put out ["downleveled"](https://github.com/sandersn/downlevel-dts) versions of `@apollo/server`'s type definitions for older versions of TypeScript, but have found TypeScript's `typesVersions` feature [challenging to use](https://github.com/apollographql/apollo-server/issues/6423). - -If supporting older versions of TypeScript is important to you and you'd like to help us get `typesVersions` working, we'd appreciate PRs! - -## Removed constructor options - -The following `ApolloServer` constructor options have been removed in favor of other features or configuration methods. - -### `dataSources` - -> 📣 See our new [Fetching Data](./data/fetching-data) article for more information on how the _concept_ of a data source has changed in Apollo Sever 4. - -In Apollo Server 3, the top-level [`dataSources` constructor option](/apollo-server/v3/data/data-sources#adding-data-sources-to-apollo-server) essentially adds a post-processing step to your app's context function, creating `DataSource` subclasses and adding them to a `dataSources` field on your [`context`](/apollo-server/v3/data/resolvers/#the-context-argument) object. This means the TypeScript type the `context` function returns is _different_ from the `context` type your resolvers and plugins receive. Additionally, this design obfuscates that `DataSource` objects are created once per request (i.e., like the rest of the context object). - -Apollo Server 4 removes the `dataSources` constructor option. You can now treat `DataSources` like any other part of your `context` object. - -In Apollo Server 3, immediately after constructing each `DataSource` subclass, Apollo Server invokes the `dataSource.initialize({ cache, context })` function on each new `DataSource`. If you need to replicate this behavior in Apollo Server 4, you can pass the `cache` and `context` arguments to each `DataSource` constructor. In Apollo Server 4, you can find `cache` as a new readonly field on `ApolloServer`. - -For example, below, we use the `RESTDataSource` class to create a `DataSource` with Apollo Server 3: - - - -```ts title="Apollo Server 3" -import { RESTDataSource, RequestOptions } from 'apollo-datasource-rest'; -import { ApolloServer } from 'apollo-server'; - -// highlight-start -class MoviesAPI extends RESTDataSource { - // highlight-end - override baseURL = 'https://movies-api.example.com/'; - - override willSendRequest(request: RequestOptions) { - request.headers.set('Authorization', this.context.token); - } - - async getMovie(id: string): Promise { - return this.get(`movies/${encodeURIComponent(id)}`); - } - - async updateMovie(movie: Movie): Promise { - return this.patch( - 'movies', - // Syntax for passing a request body - { id: movie.id, movie }, //highlight-line - ); - } -} - -interface ContextValue { - token: string; - dataSources: { - moviesAPI: MoviesAPI; - } -}; - -const server = new ApolloServer({ - typeDefs, - resolvers, - //highlight-start - context: ({ req: ExpressRequest }): Omit => { - //highlight-end - return { - token: getTokenFromRequest(req), - }; - }, - //highlight-start - dataSources: (): ContextValue['dataSources'] => { - return { - moviesAPI: new MoviesAPI(), - }; - }, - //highlight-end -}); - -await server.listen(); -``` - - - -Below is how you write the same code in Apollo Server 4. - - - -```ts title="Apollo Server 4" -import { RESTDataSource, AugmentedRequest } from '@apollo/datasource-rest'; -// KeyValueCache is the type of Apollo server's default cache -import type { KeyValueCache } from '@apollo/utils.keyvaluecache'; -import { ApolloServer } from '@apollo/server'; -import { startStandaloneServer } from '@apollo/server/standalone'; - -class MoviesAPI extends RESTDataSource { // highlight-line - override baseURL = 'https://movies-api.example.com/'; - private token: string; - - constructor(options: { token: string; cache: KeyValueCache }) { - super(options); // this sends our server's `cache` through - this.token = options.token; - } - - override willSendRequest(path: string, request: AugmentedRequest) { - request.headers.authorization = this.token; - } - - async getMovie(id: string): Promise { - return this.get(`movies/${encodeURIComponent(id)}`); - } - - async updateMovie(movie: Movie): Promise { - return this.patch( - 'movies', - // Note the way we pass request bodies has also changed! - { body: { id: movie.id, movie } }, //highlight-line - ); - } -} -// highlight-start -interface ContextValue { - token: string; - dataSources: { - moviesAPI: MoviesAPI; - }; -} -// highlight-end - -const server = new ApolloServer({ - typeDefs, - resolvers, -}); - -const { url } = await startStandaloneServer(server, { - context: async ({ req }) => { - const token = getTokenFromRequest(req); - const { cache } = server; - return { - token, - //highlight-start - dataSources: { - moviesAPI: new MoviesAPI({ cache, token }), - }, - //highlight-end - }; - }, -}); - -console.log(`🚀 Server ready at ${url}`); -``` - - - -> In Apollo Server 4, we've moved `apollo-datasource-rest` to the new [`@apollo/datasource-rest`](https://www.npmjs.com/package/@apollo/datasource-rest) package. Most of the functionality between the two packages is the same. However, some small syntax differences exist in how we pass a request's `headers`, `params`, `cacheOptions`, and `body`. See [Fetching from REST](./data/fetching-rest#method-parameters) for more details. - -If you want to access your entire context's value within your `DataSource`, you can do so by making your context value a `class` (enabling it to refer to itself via `this` in its constructor): - - - -```ts -import { RESTDataSource, WillSendRequestOptions } from '@apollo/datasource-rest'; //highlight-line -import { KeyValueCache } from '@apollo/utils.keyvaluecache'; -import { ApolloServer } from '@apollo/server'; -import { startStandaloneServer } from '@apollo/server/standalone'; -import { IncomingMessage } from 'http'; - -class MoviesAPI extends RESTDataSource { - override baseURL = 'https://movies-api.example.com/'; - private contextValue: ContextValue; - - constructor(options: { contextValue: ContextValue; cache: KeyValueCache }) { - super(options); // this should send `cache` through - this.contextValue = options.contextValue; - } - - override willSendRequest(path: string, request: WillSendRequestOptions) { - request.headers['authorization'] = this.contextValue.token; - } - - async getMovie(id):Promise { - return this.get(`movies/${encodeURIComponent(id)}`); - } -} - -// highlight-start -class ContextValue { - public token: string; - public dataSources: { - moviesAPI: MoviesAPI; - }; - - constructor({ req, server }: { req: IncomingMessage; server: ApolloServer }) { - this.token = getTokenFromRequest(req); - const { cache } = server; - this.dataSources = { - moviesAPI: new MoviesAPI({ cache, contextValue: this }), - }; - } -} -// highlight-end - -const server = new ApolloServer({ - typeDefs, - resolvers, -}); - -await startStandaloneServer(server, { - context: async ({ req }) => new ContextValue({ req, server }), //highlight-line -}); -``` - - - -If you want to migrate quickly to Apollo Server 4 *without* altering your data sources, the snippet below replicates Apollo Server 3's `dataSources` behavior with a custom plugin. - - - -```ts -import { ApolloServerPlugin, BaseContext } from "@apollo/server"; -import type { DataSource } from "apollo-datasource"; - -type DataSources = Record; -type DataSourcesFn = () => DataSources; - -interface ContextWithDataSources extends BaseContext { - dataSources?: DataSources; -} - -export const ApolloDataSources = (options: { - dataSources: DataSourcesFn, -}): ApolloServerPlugin => ({ - requestDidStart: async (requestContext) => { - const dataSources = options.dataSources(); - const initializers = Object.values(dataSources).map(async (dataSource) => { - if (dataSource.initialize) - dataSource.initialize({ - cache: requestContext.cache, - context: requestContext.contextValue, - }); - }); - - await Promise.all(initializers); - - requestContext.contextValue.dataSources = dataSources; - }, -}); - -const server = new ApolloServer({ - schema, - plugins: [ApolloDataSources({ dataSources })], -}); -``` - - - -We include this as a short-term fix and encourage you to [create custom data source classes](./data/fetching-data#creating-data-source-classes) best suited for each source. - -### `modules` - -In Apollo Server 3, there are [several ways](https://github.com/apollographql/apollo-server/issues/6062) to provide your `ApolloServer` instance with a schema. One of the most common ways is to provide `typeDefs` and `resolvers` options (each of which can optionally be an array). Another way is using the `modules` option with an array of objects, each object containing `typeDefs` and `resolvers` keys. Under the hood, these two options use entirely different logic to do the same thing. - -To simplify its API, Apollo Server 4 removes the `modules` constructor option. You can replace any previous usage of `modules` with the following syntax: - -```ts -new ApolloServer({ - typeDefs: modules.map({ typeDefs } => typeDefs), - resolvers: modules.map({ resolvers } => resolvers), -}) -``` - -Additionally, the corresponding `GraphQLSchemaModule` TypeScript type is no longer exported. - -### `mocks` and `mockEntireSchema` -In Apollo Server 3, the `mocks` and `mockEntireSchema` constructor options enable Apollo Server to return simulated data for GraphQL operations based on your server's schema. Under the hood, Apollo Server 3's mocking functionality is provided via an outdated version of the [`@graphql-tools/mocks`](https://www.npmjs.com/package/@graphql-tools/mock) library. - -Apollo Server 4 removes both the `mocks` and `mockEntireSchema` constructor options. You can instead directly incorporate the `@graphql-tools/mock` package into your app, enabling you to get the most up-to-date mocking features. For more details on configuring mocks, see the [`@graphql-tools/mocks` docs](https://www.graphql-tools.com/docs/mocking). - -The following examples compare the `mocks` and `mockEntireSchema` constructor options in Apollo Server 3 on the left and a replacement using `@graphql-tools/mock` on the right. You can also incrementally apply these changes in Apollo Server 3 without affecting behavior. - - - -```ts title="Apollo Server 3" -new ApolloServer({ - mocks: true, -}); -``` - -```ts title="Apollo Server 4" -import { addMocksToSchema } from '@graphql-tools/mock'; -import { makeExecutableSchema } from '@graphql-tools/schema'; - -new ApolloServer({ - schema: addMocksToSchema({ - schema: makeExecutableSchema({ typeDefs, resolvers }), - }), -}); -``` - - - - - -```ts title="Apollo Server 3" -const mocks = { - Int: () => 6, -}; - -new ApolloServer({ - mocks, -}); -``` - -```ts title="Apollo Server 4" -import { addMocksToSchema } from '@graphql-tools/mock'; -import { makeExecutableSchema } from '@graphql-tools/schema'; - -const mocks = { - Int: () => 6, -}; - -new ApolloServer({ - schema: addMocksToSchema({ - schema: makeExecutableSchema({ typeDefs, resolvers }), - mocks, - }), -}); -``` - - - - - -```ts {6} title="Apollo Server 3" -const mocks = { - Int: () => 6, -}; -new ApolloServer({ - mocks, - mockEntireSchema: false, -}); -``` - -```ts {11} title="Apollo Server 4" -import { addMocksToSchema } from '@graphql-tools/mock'; -import { makeExecutableSchema } from '@graphql-tools/schema'; - -const mocks = { - Int: () => 6, -}; -new ApolloServer({ - schema: addMocksToSchema({ - schema: makeExecutableSchema({ typeDefs, resolvers }), - mocks, - preserveResolvers: true, - }), -}); -``` - - - - -### `debug` - -In Apollo Server 3, the `debug` constructor option (which defaults to `true` unless the `NODE_ENV` environment variable is either `production` or `test`) controls several unrelated aspects of Apollo Server: -- If `debug` is `true`, GraphQL responses with errors include stack traces. -- If `debug` is `true` and `ApolloServer` uses the default `logger`, Apollo Server prints all `DEBUG` log-level messages. - - Apollo Server 3 rarely sends messages at the `DEBUG` level, so this primarily affects plugins that use the provided `logger` to send `DEBUG` messages. -- The `debug` flag is also available to plugins on `GraphQLRequestContext` to use as they wish. - -Apollo Server 4 removes the `debug` constructor option. In its place is a new `includeStacktraceInErrorResponses` option which controls its namesake feature. Like `debug`, this option defaults to `true` unless the `NODE_ENV` environment variable is either `production` or `test`. - -If you use `debug` in Apollo Server 3, you can use `includeStacktraceInErrorResponses` with the same value in Apollo Server 4: - -```ts -const apolloServerInstance = new ApolloServer({ - typeDefs, - resolvers, - includeStacktraceInErrorResponses: true, -}); -``` - -Additionally, if your app or a plugin uses `DEBUG`-level log messages and your server doesn't use a custom `logger`, you are responsible for setting the default log level. For example, you can use the same `Logger` implementation that Apollo Server uses by default: - -```ts -import loglevel from 'loglevel'; - -const logger = loglevel.getLogger('apollo-server'); -logger.setLevel(shouldShowDebugMessages ? loglevel.levels.DEBUG : loglevel.levels.INFO); -const server = new ApolloServer({ - logger, - // ... -}); -``` - -(Note that the stack traces themselves have moved from `extensions.exception.stacktrace` to `extensions.stacktrace`.) - -### `formatResponse` hook - -Apollo Server 3 provides the `formatResponse` hook as a top-level constructor argument. The `formatResponse` hook is called after an operation successfully gets to the "execution" stage, enabling you to transform the structure of GraphQL response objects before sending them to a client. - -The `formatResponse` hook receives a successful operation's `response` and `requestContext` (containing an unset `response` field). If the `formatResponse` hook returns a non-null `GraphQLResponse`, it uses that response instead of the initially received `response` argument. - -Apollo Server 4 removes the `formatResponse` hook. We instead recommend using the `willSendResponse` plugin hook, which enables you to do everything you previously did with `formatResponse`. The `willSendResponse` plugin hook receives an operation's `requestContext`, which has a `response` field containing a `GraphQLResponse` object. Note that the `willSendResponse` hook is allowed to mutate the `requestContext.response` field. - -> Apollo Server 4 changes the structure of `GraphQLResponse`, [see below for more details](#graphqlresponse). - -Apollo Server calls the `willSendResponse` plugin hook for all requests that get far enough along to invoke `requestDidStart` (i.e., requests with a parsable JSON body, etc. ). This means that Apollo Server calls the `willSendResponse` hook in _more_ contexts than the previous `formatResponse` hook. - -To only use `willSendResponse` after an operation's "execution" stage (i.e., like the previous `formatResponse` hook), you can make a filter checking for the existence of a `data` field in the result. If an operation has a `data` field in the result, it has made it to the execution phase. Note, there are some edge cases: for example, an error in the coercion of variable values calls `formatResponse` but doesn't have `data` in the result. If differentiating these edge cases is important to you, please open an issue, and we'll help. - -For example, if your Apollo Server 3 code used `formatResponse` like this: - -```ts -new ApolloServer({ - typeDefs, - resolvers, - formatResponse({ response, requestContext }) { - return { - ...response, - extensions: { - ...(response.extensions), - hello: 'world', - }, - }, - }, -}), -``` - -your Apollo Server 4 code can use `willSendResponse`, like so: - -```ts -new ApolloServer({ - typeDefs, - resolvers, - plugins: [ - { - async requestDidStart() { - return { - async willSendResponse(requestContext) { - const { response } = requestContext; - // Augment response with an extension, as long as the operation - // actually executed. (The `kind` check allows you to handle - // incremental delivery responses specially.) - if (response.body.kind === 'single' && 'data' in response.body.singleResult) { - response.body.singleResult.extensions = { - ...response.body.singleResult.extensions, - hello: 'world', - }; - } - }, - }; - }, - }, - ], -}); -``` - -### `executor` - -In Apollo Server 3, there are two different ways to specify a replacement for `graphql-js`'s execution functionality. Both of them involve defining a function of the type `GraphQLExecutor`. One way is to specify that function directly as the `executor` constructor option. The other way involves using the `gateway` option. - -In Apollo Server 4, this redundancy has been removed: there is no longer an `executor` constructor option. (Additionally, the TypeScript `GraphQLExecutor` type has been renamed `GatewayExecutor` and moved to the `@apollo/server-gateway-interface` package.) - -If your Apollo Server 3 code defined an `executor` function and used it like this: - - - -```ts -new ApolloServer({ - executor, - // ... -}); -``` - - - -your Apollo Server code can use `gateway`, like so: - - - -```ts -new ApolloServer({ - gateway: { - async load() { - return { executor }; - }, - onSchemaLoadOrUpdate() { - return () => {}; - }, - async stop() {}, - }, -}); -``` - - - - -## Removed features - -Several small features have been removed from Apollo Server 4. - -### Health checks - -In Apollo Server 3, the health check feature supports a simple `HTTP`-level health check that always returns a 200 status code. - -Apollo Server 4 no longer supports built-in health checks. We found that running a trivial GraphQL query was a better way of checking the status of your server, because a query ensures your server successfully serves traffic _and_ performs GraphQL operations. - -Every GraphQL server supports a trivial query that requests the [`__typename`](./schema/schema/#the-__typename-field) of the top-level `Query` type. This means every GraphQL server can respond to a `GET` request to a URL, such as: - -```bash -https://your.server/?query=%7B__typename%7D -``` - -> You should also send an `apollo-require-preflight: true` header alongside your health check, so it isn't blocked by the [CSRF prevention](./security/cors/#preventing-cross-site-request-forgery-csrf) feature. - -If you want a health check for your HTTP server unrelated to the health of the GraphQL execution engine (i.e., like Apollo Server 3's health check feature), you can add a `GET` handler that always succeeds to your web framework. - - -To prevent inaccurate positive health checks, ensure that the `Accept` header is either unset or explicitly set to `application/json`. - - - -Using a trivial query with Apollo Server 3's health check feature always produces a GraphQL response. Apollo Server 4 returns an HTML page unless the `Accept` header's value is unset or explicitly set to `application/json`. - - - -### Path parsing - -In Apollo Server 3, many framework integrations enable you to use the `path` option to configure the [URL path](/apollo-server/v3/api/apollo-server/#path) where Apollo Server processes requests. By default, the `path` option uses the `/graphql` URL path. - -In Apollo Server 4, you should use your framework's routing feature to mount your integration at the URL path where you want Apollo Server to process requests. For example, if you are using `apollo-server-express` in Apollo Server 3 and would like to continue using the default `/graphql` path, you should now mount the `expressMiddleware` function at the `/graphql` path. - -> Apollo Server 3's batteries-included `apollo-server` package, replaced by `startStandaloneServer` in Apollo Server 4, serves all URLs (i.e., rather than only listening on `/graphql`). - -### HTTP body parsing and CORS - -In Apollo Server 3, framework integrations automatically set up HTTP body parsing and CORS response headers. You can customize your integration's CORS or body parsing functionality using the Apollo Server API; these configuration options [vary by integration](/apollo-server/v3/api/apollo-server#cors-1). - -In Apollo Server 4, it's your responsibility to set up HTTP body parsing and CORS headers for your web framework. Specifically, when using [`expressMiddleware`](#migrate-from-apollo-server-express), you can use the native [`express.json()`](https://expressjs.com/en/api.html#express.json) function (available in Express `v4.16.0` onwards) for body parsing and the `cors` npm package for CORS headers. You can install and use the `cors` package in your Express app, just like with any other JSON-based API server. If you passed a `cors` option to `applyMiddleware` or `getMiddleware`, pass the same value to the `cors` function. If you passed a `bodyParserConfig` option to `applyMiddleware` or `getMiddleware`, pass the same value to the [`express.json()`](https://expressjs.com/en/api.html#express.json) function. - -Note that [`startStandaloneServer`](#migrate-from-apollo-server) sets up body parsing and CORS functionality for you, but you can't configure this behavior. In Apollo Server 3, you could configure the batteries-included `apollo-server`'s CORS behavior via the `cors` constructor option. In Apollo Server 4, if you need to configure CORS behavior, use `expressMiddleware` rather than `startStandaloneServer`. - -### `gql` GraphQL tag - -Apollo Server 3 depends on the [`graphql-tag`](https://www.npmjs.com/package/graphql-tag) npm package and re-exports its `gql` template literal tag. The `gql` tag is essentially a caching wrapper around `graphql-js`'s parser, and most IDEs know to treat the contents of `gql` strings as GraphQL. - -Apollo Server 4 does not depend on the `graphql-tag` library, nor does it export the `gql` tag. If you want to continue using the `gql` tag, you can directly install `graphql-tag` into your app, then update your import, replacing this line: - -```ts -import { gql } from 'apollo-server'; -``` - -with this line: - -```ts -import gql from 'graphql-tag'; -``` - -The `apollo-server` package exports `gql` as a named export, whereas the `gql` tag is the default export for `graphql-tag`. - - -### `ApolloError` - -Apollo Server 4 removes both `ApolloError` and `toApolloError` in favor of using `GraphQLError`. - -The `graphql` package exports `GraphQLError`, and you can use it like so: -```ts -import { GraphQLError } from 'graphql'; - -// ... -throw new GraphQLError(message, { - extensions: { code: 'YOUR_ERROR_CODE' }, -}); -``` - -If you used the optional `code` argument with `ApolloError`: -``` -throw new ApolloError(message, 'YOUR_ERROR_CODE'); -``` - -you should now pass your error code to `GraphQLError`'s `extensions` option; see the above code snippet for an example. - -### Built-in error classes - -Apollo Server 3 exports several error classes. Apollo Server uses some of these error classes in specific situations (e.g., `SyntaxError`, `ValidationError`, and `UserInputError`), while other classes (`ForbiddenError` and `AuthenticationError`) are for users to use in their apps. All of these error classes are subclasses of the main `ApolloError` class. - -In Apollo Server 4, [`ApolloError` no longer exists](#apolloerror), so Apollo Server doesn't export specific error classes. Instead, you can create your own error codes using `graphql`'s `GraphQLError` class. Additionally, Apollo Server now provides an enum of error codes ([`ApolloServerErrorCode`](https://github.com/apollographql/apollo-server/blob/main/packages/server/src/errors/index.ts)) that you can check against to see if a given error is one of the types recognized by Apollo Server. - -In Apollo Server 3, you can throw a new `ForbiddenError`, like so: - -```ts -import { ForbiddenError } from 'apollo-server'; -throw new ForbiddenError("my message", { myExtension: "foo" }) -``` - -In Apollo Server 4, you should define your own error using `GraphQLError`, like so: - -```ts -import { GraphQLError } from 'graphql'; -throw new GraphQLError("my message", { - extensions: { - code: 'FORBIDDEN', - myExtension: "foo", - }, -}); -``` - -For an `AuthenticationError`, use the code `'UNAUTHENTICATED'`. - -In Apollo Server 3, you can check the type of an error, like so: - -```ts -if (error instanceof SyntaxError) -``` - -In Apollo Server 4, you can use the `ApolloServerErrorCode` enum to check if an error is one of the types recognized by Apollo Server, like so: - -```ts -import { ApolloServerErrorCode } from '@apollo/server/errors'; -if (error.extensions?.code === ApolloServerErrorCode.GRAPHQL_PARSE_FAILED) -``` - -For `ValidationError`, use `ApolloServerErrorCode.GRAPHQL_VALIDATION_FAILED`. For `UserInputError`, use `ApolloServerErrorCode.BAD_USER_INPUT`. - -### `__resolveObject` - -Apollo Server 4 removes the dependency on `@apollographql/apollo-tooling`, additionally removing the `__resolveObject` pseudo-resolver. The `__resolveObject` function was an undocumented predecessor to -the [`__resolveReference`](./using-federation/api/apollo-subgraph/#__resolvereference) method. While we believe `__resolveObject` is a useful feature, it would work better if implemented directly in `graphql-js` rather than in Apollo Server. - -### `requestAgent` option to `ApolloServerPluginUsageReporting` - -Apollo Server's usage reporting plugin (i.e., `ApolloServerPluginUsageReporting`) lets you replace its HTTP client using the [`fetcher` option](./api/plugin/usage-reporting/#fetcher). In Apollo Server 3, you can use an older `requestAgent` option, passed to the `fetcher` function via the non-standard `agent` option. - -Apollo Server 4 removes the `requestAgent` option from `ApolloServerPluginUsageReporting`. Now, all of the options you pass to `ApolloServerPluginUsageReporting`'s `fetcher` are part of the Fetch API spec. - -If you are using `requestAgent` in Apollo Server 3, you can use the `node-fetch` npm package to override `fetcher`. - -So, where you previously wrote: - -```ts -ApolloServerPluginUsageReporting({ requestAgent }) -``` - -You can now write: - -```ts -import fetch from 'node-fetch'; -ApolloServerPluginUsageReporting({ - fetcher: (url, options) => fetch(url, { - ...options, - agent: requestAgent, - }), -}); -``` - -### `rewriteError` plugin option - -In Apollo Server 3, you can specify a function to rewrite errors before sending them to Apollo's server via the `rewriteError` option to `ApolloServerPluginUsageReporting` (for monoliths) and `ApolloServerPluginInlineTrace` (for subgraphs). - -In Apollo Server 4, you specify the same function as the `transform` option on the `sendErrors` option to `ApolloServerPluginUsageReporting` and the `includeErrors` option to `ApolloServerPluginInlineTrace`. - -(Additionally, the [default behavior has changed to mask errors](#usage-reporting-and-inline-trace-plugins-mask-errors-by-default).) - -So, where you previously wrote: - -```ts -// monoliths -new ApolloServer({ - plugins: [ApolloServerPluginUsageReporting({ rewriteError })], - // ... -}) - -// subgraphs -new ApolloServer({ - plugins: [ApolloServerPluginInlineTrace({ rewriteError })], - // ... -}) -``` - -you can now write: - -```ts -// monoliths -new ApolloServer({ - plugins: [ApolloServerPluginUsageReporting({ - sendErrors: { transform: rewriteError }, - })], - // ... -}) - -// subgraphs -new ApolloServer({ - plugins: [ApolloServerPluginInlineTrace({ - includeErrors: { transform: rewriteError }, - })], - // ... -}) -``` - - -### Doubly-escaped `variables` and `extensions` in requests - -Apollo Server 3 and 4 both accept `POST` requests with a JSON body. - -Apollo Server 3 supports an edge case where the `variables` and -`extensions` fields inside a `POST` request's JSON-encoded body can be JSON-encoded strings. - -Apollo Server 4 requires that within a `POST` request's JSON-encoded body, the `variables` and `extensions` fields must be objects (not doubly-encoded). - -For example, below is a valid query: - -```json -{ - "query": "{ __typename }", "extensions": { "foo": 1 } -} -``` - -Whereas this query would be invalid: - -```json -{ - "query": "{ __typename }", "extensions": "{ \"foo\": 1 }" -} -``` - -(Moreover, Apollo Server 4 responds with a 400 status code if `variables` and `extensions` are provided in a `POST` body with any type other than object, such as array, boolean, or null. Similarly, it responds with a 400 status code if `operationName` is provided in a `POST` body with any type other than string.) - -If you'd like to restore the previous behavior, you can `JSON.parse` the `variables` and `extensions` fields after your framework has parsed the request body. In Express that might look like: - -```ts -app.use(express.json()); -app.use((req, res, next) => { - if (typeof req.body?.variables === 'string') { - try { - req.body.variables = JSON.parse(req.body.variables); - } catch (e) { - // https://github.com/graphql/graphql-over-http/blob/main/spec/GraphQLOverHTTP.md#json-parsing-failure - res.status(400).send(e instanceof Error ? e.message : e); - return; - } - } - next(); -}); -app.use(expressMiddleware(server)); -``` - - -## Changed features - -### New approach to serverless frameworks - -In Apollo Server 3, our approach to creating serverless frameworks involves subclassing `ApolloServer` and overriding the [`serverlessFramework()`](https://github.com/apollographql/apollo-server/blob/5188b1ee408b5e2a983662b0f3a15283c071e522/packages/apollo-server-core/src/ApolloServer.ts#L813) method. - -In Apollo Server 4, serverless integrations differentiate themselves by using the `startInBackgroundHandlingStartupErrorsByLoggingAndFailingAllRequests` method. The length of this function's name discourages its use when building non-serverless apps. - -Users of serverless integrations shouldn't call any start-related functions before passing in an `ApolloServer` instance: - -```ts -const server = new ApolloServer({ - typeDefs, - resolvers, -}); - -exports.handler = startServerAndCreateLambdaHandler(server); -``` - -In the above example, the `startServerAndCreateLambdaHandler` serverless integration function should call the -`server.startInBackgroundHandlingStartupErrorsByLoggingAndFailingAllRequests()` -method. - -Apollo Server 4's other non-serverless framework integrations expect the developer to await the `server.start()` method, before validating that the server has started by calling `server.assertStarted()`. - -### `context` initialization function - -In Apollo Server 3, you could provide an initial [`context`](/apollo-server/v3/data/resolvers#the-context-argument) to your resolvers by adding a `context` initialization function to the `ApolloServer` constructor: - -```ts -// Apollo Server 3 Constructor -const server = new ApolloServer({ - typeDefs, - resolvers, - csrfPrevention: true, - context: ({ req }) => ({ - authScope: getScope(req.headers.authorization) - }) -}); -``` - -In Apollo Server 4, the `context` function is a named argument passed into your web integration function (e.g., `expressMiddleware` or `startStandaloneServer`). `ApolloServer` itself now has a generic type parameter specifying the type of your context value. The `context` function should return an object, which is then accessible to your server's resolvers and plugins (via the [`contextValue` field](./data/context)). - -Below is an example of providing a `context` initialization function to the `startStandaloneServer` function: - - +Apollo Server 4 includes a built-in integration with version 4 of the Express web framework directly inside the `@apollo/server` package: the `expressMiddleware` function exported from `@apollo/server/express4`. -```ts {13-15} -interface MyContext { - token: String; -} +In Apollo Server 5, integrating with Express works the same way as integrating with any other web framework: you need to install a separate integration package. Apollo maintains an integration with Express v4 ([`@as-integrations/express4`](https://www.npmjs.com/package/@as-integrations/express4)), as well as an integration with Express v5 ([`@as-integrations/express5`](https://www.npmjs.com/package/@as-integrations/express5)). These separate integrations also work with Apollo Server 4, so you may already be using them. -const server = new ApolloServer({ - typeDefs, - resolvers, -}); - -const { url } = await startStandaloneServer(server, { - // A named context function is required if you are not - // using ApolloServer - context: async ({req, res}) => ({ - token: await getTokenForRequest(req), - }), - listen: { port: 4000 } -}) -``` - - - -The `context` function's syntax is similar for the `expressMiddleware` function: - - - -```ts {17-19} -interface MyContext { - token: String; -} - -const server = new ApolloServer({ - typeDefs, - resolvers, -}); - -await server.start(); -const app = express(); - -app.use( - // A named context function is required if you are not - // using ApolloServer - expressMiddleware(server, { - context: async ({ req, res }) => ({ - token: await getTokenForRequest(req), - }), - }), -); -``` - - - -In the [`expressMiddleware`](#migrate-from-apollo-server-express) function, the `req` and `res` objects passed to the `context` function are `express.Request` and `express.Response` types. In the [`startStandaloneServer`](#migrate-from-apollo-server) function, the `req` and `res` objects are `http.IncomingMessage` and `http.ServerResponse` types. If you need to use Express-specific properties in your `context` function, use `expressMiddleware`. - -### `executeOperation` accepts context value - -The [`server.executeOperation`](./api/apollo-server/#executeoperation) method enables you to execute GraphQL operations by specifying an operation's text directly instead of doing so via an HTTP request. You can use `executeOperation` to [test your server](./testing/testing). - -In Apollo Server 3, you can indirectly specify an operation's context value by passing a second optional argument to `executeOperation`; `ApolloServer` then passes this argument to its `context` function. For example, if you're using `apollo-server-express`, you can create an Express request and response then pass them to `executeOperation` as a `{ req, res }` object. - -In Apollo Server 4, the `executeOperation` method optionally receives a context value directly, bypassing your `context` function. If you want to test the behavior of your `context` function, we recommend running actual HTTP requests against your server. - -Additionally, the [structure of the returned `GraphQLResponse` has changed](#graphqlresponse), as described below. - -So a test for Apollo Server 3 that looks like this: - - - -```ts -const server = new ApolloServer({ - typeDefs: "type Query { hello: String!}", - resolvers: { - Query: { - hello: (_, __, context) => `Hello ${context.name}!`, - }, - }, - context: async ({ req }) => ({ name: req.headers.name }), -}); - -const result = await server.executeOperation({ - query: 'query helloContext { hello }', -}, { - // highlight-start - // A half-hearted attempt at making something vaguely like an express.Request, - // and not bothering to make the express.Response at all. - req: { headers: { name: 'world' } }, - // highlight-end -}); - -expect(result.data?.hello).toBe('Hello world!'); // -> true -``` - - - -looks like this in Apollo Server 4: - - - -```ts -interface MyContext { - name: string; -} - -const server = new ApolloServer({ - typeDefs: "type Query { hello: String!}", - resolvers: { - Query: { - hello: (_, __, context) => `Hello ${context.name}!`, - }, - }, -}); - -const { body } = await server.executeOperation({ - query: 'query helloContext { hello }', -}, { - // highlight-start - contextValue: { - name: 'world', - } - // highlight-end -}); - -// Note the use of Node's assert rather than Jest's expect; if using -// TypeScript, `assert` will appropriately narrow the type of `body` -// and `expect` will not. -assert(body.kind === 'single'); -expect(body.singleResult.data?.hello).toBe('Hello world!'); // -> true -``` - - - -### Error formatting changes - -#### `formatError` improvements - -Apollo Server 3 supports the `formatError` hook, which has the following signature: +This Apollo Server 4 code: ```ts -(error: GraphQLError) => GraphQLFormattedError +import { expressMiddleware } from '@apollo/server/express4'; ``` -This hook receives an `error` already altered by Apollo Server 3, and differs from the initially thrown error. - -In Apollo Server 4, this becomes: - +looks like this in Apollo Server 5: ```ts -(formattedError: GraphQLFormattedError, error: unknown) => GraphQLFormattedError +import { expressMiddleware } from '@as-integrations/express4'; ``` -Above, `formattedError` is the default JSON object sent in the response according to the [GraphQL specification](https://spec.graphql.org/draft/#sec-Errors), and `error` is the originally thrown error. If you need a field from the original error that isn't in `GraphQLFormattedError`, you can access that value from the `error` argument. - -One caveat: if the error was thrown inside a resolver, `error` is not the error your resolver code threw; it is a `GraphQLError` wrapping it and adding helpful context such as the `path` in the operation to the resolver's field. If you want the exact error you threw, Apollo Server 4 provides the `unwrapResolverError` function in `@apollo/server/errors`, which removes this outer layer if you pass it a resolver error (and returns its argument otherwise). +You must first run `npm install @as-integrations/express4`. -So, you can format errors like this: +You can make this change while you're still running Apollo Server 4 before upgrading to Apollo Server 5, or you can make it when you upgrade. -```ts -import { unwrapResolverError } from '@apollo/server/errors'; - -new ApolloServer({ - formatError: (formattedError, error) => { - // Don't give the specific errors to the client. - if (unwrapResolverError(error) instanceof CustomDBError) { - return { message: 'Internal server error' }; - } - - // Strip `Validation: ` prefix and use `extensions.code` instead - if (formattedError.message.startsWith('Validation:')) { - return { - ...formattedError, - message: formattedError.message.replace(/^Validation: /, ''), - extensions: { ...formattedError?.extensions, code: 'VALIDATION' }, - }; - } - - // Otherwise, return the original error. The error can also - // be manipulated in other ways, as long as it's returned. - return formattedError; - }, - // ... -}); -``` +(You may then wish to upgrade Express to v5. If you do, use `@as-integrations/express5` instead; it has the same API as `@as-integrations/express4`.) -#### `error.extensions.exception` is removed -When Apollo Server 3 formats an error, it may add an extension called `exception`. This extension is an object with a field for every *enumerable* property of the originally thrown error. (This does not apply if the originally thrown error was already a `GraphQLError`.) In addition, [when in dev/debug mode](#debug), `exception` contains an array of strings called `stacktrace`. -For example, if this code runs in a resolver: +## Plugins use built-in Node.js fetch to make HTTP requests -```ts -const e = new Error("hello"); -e.extraProperty = "bye"; -throw e; -``` +Certain features require Apollo Server to make outgoing requests to Apollo GraphOS or another server in your infrastructure. Specifically, the [Usage Reporting](./api/plugin/usage-reporting/) and [Schema Reporting](./api/plugin/schema-reporting/) plugins make requests to Apollo GraphOS, and the [Subscription Callback](./api/plugin/subscription-callback/) plugin makes requests to your GraphOS Router. -then (in debug mode) Apollo Server 3 will format the error like this: +In Apollo Server 4, these plugins use the [`node-fetch` npm package](https://www.npmjs.com/package/node-fetch) by default. -```ts -{ - "errors": [ - { - "message": "hello", - "locations": [ - { - "line": 2, - "column": 3 - } - ], - "path": ["x"], - "extensions": { - "code": "INTERNAL_SERVER_ERROR", - "exception": { - "extraProperty": "bye", - "stacktrace": [ - "Error: hello", - " at Object.x (file:///private/tmp/as3-t/server.mjs:8:27)", - " at field.resolve (/private/tmp/as3-t/node_modules/apollo-server-core/dist/utils/schemaInstrumentation.js:56:26)", - // more lines elided - ] - } - } - } - ] -} -``` +In Apollo Server 5, these plugins use the [Node.js built-in `fetch` implementation](https://nodejs.org/api/globals.html#fetch) by default. (Despite the similar names, these are completely different implementations.) -It was often hard to predict exactly which properties of which errors would be publicly exposed in this manner, which could lead to surprising information leaks. +These implementations both make essentially the same HTTP requests, so this behavior change is largely invisible. However, the two libraries implement [HTTP proxy](./security/proxy-configuration/) support in different ways. If you had followed [our directions](./security/proxy-configuration/) to configure your server to use your HTTP proxy using the `global-agent` npm package, you will need to update your server's configuration. -In Apollo Server 4, there is no `exception` extension. The `stacktrace` is provided directly on `extensions`. If you'd like to copy some or all properties from the original error onto the formatted error, you can do that with the `formatError` hook. +> Note you can override how the plugins make requests by passing a `fetcher` option to the `ApolloServerPluginUsageReporting`, `ApolloServerPluginSchemaReporting`, and `ApolloServerPluginSubscriptionCallback` functions, though only the usage reporting and schema reporting functions can be configured in Apollo Server 4. The only change in Apollo Server 5 is which fetcher is used by the default, so if you explicitly specify a `fetcher` to a reporting plugin, nothing will change in Apollo Server 5. -If you'd like your errors to be formatted like they are in Apollo Server 3 (with the stack trace and the enumerable properties of the original error on the `exception` extension), you can provide this `formatError` implementation: +This is simplest if you are running Node.js v24 or newer, where the built-in `fetch` implementation has support for environment-variable-based proxy configuration. - +Specifically, if you have this code in Apollo Server 4: ```ts -function formatError( - formattedError: GraphQLFormattedError, - error: unknown, -) { - const originalError = unwrapResolverError(error); - const exception: Record = { - ...(typeof originalError === 'object' ? originalError : null), - }; - delete exception.extensions; - if (formattedError.extensions?.stacktrace) { - exception.stacktrace = formattedError.extensions.stacktrace; - } - const extensions: Record = { - ...formattedError.extensions, - exception, - }; - delete extensions.stacktrace; - return { - ...formattedError, - extensions, - }; -} -``` - - - -Apollo Server 3.5.0 and newer included a TypeScript `declare module` declaration that teaches TypeScript that `error.extensions.exception.stacktrace` is an array of strings on *all* `GraphQLError` objects. Apollo Server 4 does not provide a replacement for this: that is, we do not tell TypeScript the type of `error.extensions.code` or `error.extensions.stacktrace`. (The Apollo Server 3 `declare module` declaration also incorrectly teaches TypeScript that `error.extensions.exception.code` is a string, which should have been `error.extensions.code` instead.) - - - -### Improvements to error handling outside of resolvers - -Apollo Server 3 returns some errors relating to GraphQL operations over HTTP/JSON as `text/plain` error messages. - -Apollo Server 4 now returns all non-landing-page-related responses as `application/json` JSON responses. This means all single-error responses render like any other GraphQL error: - -```json disableCopy -{ - "errors":[{"message": "..."}] -} +import { bootstrap } from 'global-agent'; // highlight-line +bootstrap(); // highlight-line ``` -Additionally, the [`formatError` hook](./data/errors/#for-client-responses) receives and can format all of these error instances. - -Apollo Server 4 also introduces new plugin hooks `startupDidFail`, `contextCreationDidFail`, `invalidRequestWasReceived`, and `unexpectedErrorProcessingRequest`, enabling plugins to observe errors in new settings. - -In Apollo Server 3, if your `context` function throws, then the string `"Context creation failed: "` is *always* prepended to its message, and the error is rendered with HTTP status code 500 (if the error is a GraphQLError with `extensions.code` equal to `INTERNAL_SERVER_ERROR`) or 400. You cannot select a different HTTP status code or control HTTP response headers. - -In Apollo Server 4, if your `context` function throws, the string `"Context creation failed: "` is only prepended to the message if the thrown error was not a `GraphQLError`. There is no special-casing of `extensions.code`; instead, you can use [`extensions.http`](./data/errors/#setting-http-status-code-and-headers) to set the HTTP status code or headers. If this extension is not provided, the status code defaults to 500 (not 400). - -In Apollo Server 4, if the `execute` function throws an error, that error is rendered with the HTTP status code 500 (rather than 400). Note that the `execute` function commonly returns a non-empty list of errors rather than throwing an explicit error. - -### Warning for servers without draining - -Versions of Apollo Server 3.2 and above add a "draining" phase to server shutdown, enabling a server to complete in-progress operations before continuing to shut down. Without this draining phase, operations can reach your server even after it has stopped, causing those operations to fail. - -In Apollo Server 4, if your server _hasn't_ set up draining and it receives an operation as the server is shutting down, the server logs a warning before failing that operation. - -If you are using the `startStandaloneServer` function, your server drains automatically. If you are using `expressMiddleware` or another `http.Server`-based web server, you can add draining using the [`ApolloServerPluginDrainHttpServer` plugin](./api/plugin/drain-http-server/#using-the-plugin). - -### Cache control plugin sets `cache-control` header for uncached requests - -The cache control plugin is installed by default. It does two things: it calculates `requestContext.overallCachePolicy` based on static and dynamic hints, and it sets the `Cache-Control` response HTTP header. - -In Apollo Server 3, the cache control plugin only sets the `Cache-Control` header when the response is cacheable. - -In Apollo Server 4, the cache control plugin also sets the `Cache-Control` header (to the value `no-store`) when the response is not cacheable. +and have set environment variables such as `GLOBAL_AGENT_HTTP_PROXY` and `GLOBAL_AGENT_NO_PROXY`, then: -To restore the behavior from Apollo Server 3, you can install the cache control plugin and set `calculateHttpHeaders: 'if-cacheable'`: +* Remove the `bootstrap` import and call. +* Remove `global-agent` from your project (eg `npm uninstall global-agent`). +* Check what version of Node.js you are running: + * If you are running Node.js v24 or later, set the `NODE_USE_ENV_PROXY` environment variable to 1. + * If you are running Node.js v20 or v22, [follow our instructions](./security/proxy-configuration#configuring-as5-with-nodejs-v20-or-v22) to set the Undici global dispatcher to the `EnvHttpProxyAgent`. +* If you were previously setting the `GLOBAL_AGENT_HTTP_PROXY` environment variable, set the `HTTP_PROXY` environment variable to the same value instead. +* If you were previously setting the `GLOBAL_AGENT_HTTPS_PROXY` environment variable, set the `HTTPS_PROXY` environment variable to the same value instead. +* If you were previously setting the `GLOBAL_AGENT_NO_PROXY` environment variable, set the `NO_PROXY` environment variable to the same value instead. - +Alternatively, you can continue to use `node-fetch` with Apollo Server 5. To do this, run `npm install node-fetch@2`, and pass it as the `fetcher` option to the plugins that you use: -```ts +```typescript +import nodeFetchFetcher from 'node-fetch'; import { ApolloServer } from '@apollo/server'; -import { ApolloServerPluginCacheControl } from '@apollo/server/plugin/cacheControl'; - -new ApolloServer({ - // ... - plugins: [ - ApolloServerPluginCacheControl({ calculateHttpHeaders: 'if-cacheable' }), - ], -}); -``` - - - - -### `CacheScope` type - -In Apollo Server 4, `CacheScope` is now a union of strings (`PUBLIC` or `PRIVATE`) rather than an enum: - -```ts -export type CacheScope = 'PUBLIC' | 'PRIVATE'; -``` - -You can no longer type `CacheScope.Public` or `CacheScope.Private`. Instead, just use the string `'PUBLIC'` or `'PRIVATE'`. Values defined as `CacheScope` will only accept those two values, so any typos are still caught at compile time. - -You can now import `CacheScope` from the new `@apollo/cache-control-types` package (instead of importing it from an Apollo Server package). This enables libraries that work with multiple GraphQL servers (such as `@apollo/subgraph`) to refer to `CacheScope` without depending on `@apollo/server`. - - -### `parseOptions` only affects operation parsing - -In Apollo Server 3, the `parseOptions` constructor option is used to modify how GraphQL parsing works in two unrelated places: when parsing GraphQL operations, and when parsing the schema if the schema is provided via `typeDefs`. If you are using `typeDefs`, you cannot control these options (such as `noLocation`) independently. In addition, the TypeScript definition of the `parseOptions` option uses a type (from the `@graphql-tools/schema` package whose `makeExecutableSchema` function implements the `typeDefs` option) that contains options such as `assumeValidSDL` which are only relevant for parsing schemas. - -In Apollo Server 4, the `parseOptions` constructor option is only used when parsing GraphQL operations, and its TypeScript type only contains options relevant to parsing operations. - -If you used both of the `parseOptions` and `typeDefs` constructor options in Apollo Server 3 like this: - -```ts -const parseOptions = { noLocation: true }; -new ApolloServer({ - typeDefs, - resolvers, - parseOptions, -}); -``` - -and you would like to continue to apply the same options to both operation and schema parsing in Apollo Server 4, run `npm install @graphql-tools/schema`, and change your code to this: - -```ts -import { makeExecutableSchema } from '@graphql-tools/schema'; - - -const parseOptions = { noLocation: true }; -new ApolloServer({ - schema: makeExecutableSchema({ - typeDefs, - resolvers, - // Note that if you're using `@graphql-tools/schema` v9 or newer, the parse - // options such as noLocation are passed *directly* to makeExecutableSchema, - // which we accomplish here with the `...` syntax. - // In older versions, pass it as a single option named `parseOptions` - // (ie, remove the `...`). - ...parseOptions, - }), - // This one affects operation parsing. Note that if you set any SDL-specific - // options in parseOptions, you'll need to pass a `parseOptions` here that - // does not contain those options. - parseOptions, -}); -``` - -### Content-Type response header - -In Apollo Server 3, the `Content-Type` response header is `application/json`. Apollo Server 4 includes the encoding via the `charset` parameter: `application/json; charset=utf-8` as recommended by the [GraphQL over HTTP spec](https://github.com/graphql/graphql-over-http/blob/main/spec/GraphQLOverHTTP.md#media-types). - -## "Disabled" plugins cannot be combined with their enabled counterpart - -Apollo Server has several plugins that are installed by default in certain conditions. To override this behavior, each of these plugins has a "disabled" counterpart that prevents this default installation. - -But what happens if you combine the manual installation of a plugin with its disabled counterpart? Consider the following code: - -```ts -const server = new ApolloServer({ - schema, - plugins: [ - ApolloServerPluginUsageReporting(), - ApolloServerPluginUsageReportingDisabled(), - ] -}); -await server.start(); -``` - -In Apollo Server 3, the "disabled" plugin is simply ignored if combined with its enabled counterpart. This could lead to confusion, as it can appear that an attempt to disable a feature is completely ignored. - -In Apollo Server 4, `await server.start()` will throw if you combine a "disabled" plugin with its enabled counterpart, with an error like `You have tried to install both ApolloServerPluginUsageReporting and ApolloServerPluginUsageReportingDisabled`. If your server throws this error, choose whether you want the feature enabled or disabled, and install only the appropriate plugin. - -(This change affects the usage reporting, inline trace, and cache control features. It also affects the schema reporting feature, although `ApolloServerPluginSchemaReportingDisabled` did not exist in Apollo Server 3. For technical reasons, it does not affect the landing page feature: combining `ApolloServerPluginLandingPageDisabled` with a landing page plugin should be considered as unspecified behavior which may change in a future release of Apollo Server 4.) - -## Plugin API changes - -### Fields on `GraphQLRequestContext` - -Most plugin API hooks take a `GraphQLRequestContext` object as their first argument. Apollo Server 4 makes several changes to the `GraphQLRequestContext` object. - -The `context` field has been renamed `contextValue` for consistency with the `graphql-js` API and to help differentiate from the `context` option of integration functions (the *function* which returns a context value). - -The `GraphQLRequestContext.logger` field is now `readonly`. If you depended on the ability to change the `logger`, please file an issue. - -Apollo Server 4 removes the `schemaHash` field from `GraphQLRequestContext`. This field is an unstable hash of a JSON encoding resulting from running a GraphQL introspection query against your schema. The `schemaHash` field is not guaranteed to change when the schema changes (e.g., it is not affected by changes to schema directive applications). If you want a schema hash, you can use `graphql-js`'s `printSchema` function on the `schema` field and then hash the output. - -Apollo Server 4 removes the `debug` field from `GraphQLRequestContext` because `ApolloServer` no longer has a [vague `debug` option](#debug). There is no direct replacement for this field. If this is a problem for you, please open a GitHub issue, and we can find an appropriate improvement. - - -### Fields on `GraphQLServerContext` - -Apollo Server 4 makes several changes to the `GraphQLServerContext` object. - -Apollo Server 4 renames the TypeScript type for the argument to the `serverWillStart` plugin hook from `GraphQLServiceContext` to `GraphQLServerContext`, for consistency with the hook name. - -Apollo Server 4 removes the `schemaHash` field (see the [previous section](#fields-on-graphqlrequestcontext) for details). - -Apollo Server 4 removes the `persistedQueries` field from `GraphQLServerContext`. We don't have a reason for providing this particular configuration to plugins, but if having this field is important for you, please file a GitHub issue. - -Apollo Server 4 removes the `serverlessFramework` field, with the new `startedInBackground` field providing essentially the same information. In Apollo Server 3, the `serverlessFramework` field returns `true` if using a subclass of `ApolloServer` for a serverless framework. In Apollo Server 4, there are no subclasses, and the [new API](#new-approach-to-serverless-frameworks) handles startup errors in a serverless-friendly way. The `startedInBackground` field returns `true` if your server is started using the `server.startInBackgroundHandlingStartupErrorsByLoggingAndFailingAllRequests()` method (which should be done by your serverless integration). - -### `GraphQLRequest` - -Apollo Server 4 refactors the `GraphQLRequest` object, which is available to plugins as `requestContext.request` and as an argument to `server.executeOperation`. - -Specifically, the `http` field is now an `HTTPGraphQLRequest` type instead of a type based on the Fetch API's `Request` object. The `HTTPGraphQLRequest` object does not contain a URL path, and its `headers` field is a `Map` (with lower-case keys) rather than a Fetch API `Headers` object. - -### `GraphQLResponse` - -Apollo Server 4 refactors the [`GraphQLResponse` object](https://github.com/apollographql/apollo-server/blob/main/packages/server/src/externalTypes/graphql.ts#L25), which is available to plugins as `requestContext.response` and is the type `server.executeOperation` returns. - -In Apollo Server 3, the `data`, `errors`, and `extensions` fields existed at the top level, right beside `http`. - -Because Apollo Server 4 supports incremental delivery directives such as `@defer` and `@stream` (when combined with an appropriate version of `graphql-js`), the structure of the response can now represent either a single result or multiple results, so these fields no longer exist at the top level of `GraphQLResponse`. - -Instead, there is a `body` field at the top level of `GraphQLResponse`. `response.body.kind` is either `'single'` or `'incremental'`. If it is `'single'`, then incremental delivery has not been used, and `response.body.singleResult` is an object with `data`, `errors`, and `extensions` fields. If it is `'incremental'`, then `response.body.initialResult` is the initial result of the operation, and `response.body.subsequentResults` is an async iterator that will yield subsequent results. (The precise structure of `initialResult` and `subsequentResults` is defined by `graphql-js` and may change between the current pre-release of `graphql-js` v17 and its final release; if you write code that processes these values before `graphql-js` v17 has been released you may have to adapt it when the API is finalized.) - -Additionally, the `data` and `extensions` fields are both type `Record`, rather than `Record`. - -The value of `http.headers` is now a `Map` rather than a Fetch API `Headers` object. All keys in this map must be lower-case; if you insert any header name with capital letters, it will throw. - -### `plugins` constructor argument does not take factory functions - -In Apollo Server 3, each element of the `plugins` array provided to `new ApolloServer` could either be an `ApolloServerPlugin` (ie, an object with fields like `requestDidStart`) or a zero-argument "factory" function returning an `ApolloServerPlugin`. - -In Apollo Server 4, each element must be an `ApolloServerPlugin`. If you used a factory function in order to refer to the `ApolloServer` object itself when setting up your plugin, you may want to use the new `ApolloServer.addPlugin` method which you may call on your `ApolloServer` before you call `start` or `startStandaloneServer`. - -For example, if your Apollo Server 3 code looked like this: - - - -```ts -const server = new ApolloServer({ - typeDefs, - plugins: [ - makeFirstPlugin, - () => makeSecondPlugin(server), - ], -}); -``` - - - -then your Apollo Server 4 code can look like this: - - +import { ApolloServerPluginUsageReporting } from '@apollo/server/plugin/usageReporting'; +import { ApolloServerPluginSchemaReporting } from '@apollo/server/plugin/schemaReporting'; -```ts const server = new ApolloServer({ typeDefs, + resolvers, plugins: [ - makeFirstPlugin(), - ], -}); -server.addPlugin(makeSecondPlugin(server)); -``` - - - -### Changes to plugin semantics - -In Apollo Server 4, `requestDidStart` hooks are called in parallel rather than in series. - -Apollo Server 4 more consistently handles errors thrown by multiple plugin hooks. Each error is wrapped in an "Unexpected error handling request" error and invoked using the new `unexpectedErrorProcessingRequest` plugin hook. - -In Apollo Server 3, if a `didResolveOperation` hook threw a `GraphQLError`, the server would return a 400 error by default. In Apollo Server 4, the server will return a 500 by default, but this can be configured by setting [`extensions.http`](./data/errors/#setting-http-status-code-and-headers) on the `GraphQLError` object. - -### Custom `gateway` and `GraphQLDataSource` implementations - -The `gateway` option to the `ApolloServer` constructor is designed to be used with the `ApolloGateway` class from the `@apollo/gateway` package. Apollo Server 4 changes the details of how Apollo Server interacts with this object. If you use [any version of `@apollo/gateway` that supports `graphql` 16](#graphql) as your server's `gateway`, these changes won't affect you. However, if you provide something _other_ than an `ApolloGateway` instance to this option, you might need to adjust your custom code. - -All the TypeScript types you need to define your `gateway` are now part of the `@apollo/server-gateway-interface` package rather than being exported from an Apollo Server package directly. Additionally, many of these types have been renamed. - -In Apollo Server 2, the TypeScript type used for the `gateway` constructor option is called `GraphQLService`. In Apollo Server 3, the TypeScript type changed to `GatewayInterface`, but the `apollo-server-core` package continued to export an identical `GraphQLService` type. Apollo Server 4 no longer exports the legacy `GraphQLService` type. Instead, use `GatewayInterface`, now exported from `@apollo/server-gateway-interface`. - -In Apollo Server 3, your `gateway` may define either `onSchemaChange` or the newer `onSchemaLoadOrUpdate`. In Apollo Server 4, your `gateway` must define `onSchemaLoadOrUpdate`. - -In Apollo Server 3, the `GatewayInterface.load` method returns `Promise`, which contains a `schema` and an `executor`. Apollo Server 4 renames `GraphQLServiceConfig` to `GatewayLoadResult` (exported from `@apollo/server-gateway-interface`), which now only has an `executor` field. You can use the `onSchemaLoadOrUpdate` hook if you want to receive the schema. - -In Apollo Server 3, the `executor` function took an argument of type `GraphQLRequestContextExecutionDidStart`. While Apollo Server 4 still has a type with this name, that type is *not* the argument to the `executor`. Instead, the argument to the executor has type `GatewayGraphQLRequestContext` (exported from `@apollo/server-gateway-interface`). The structure of this data type matches the structure of `GraphQLRequestContextExecutionDidStart` from *Apollo Server 3*, not the structure in Apollo Server 4. - -Similarly, if you create a custom `GraphQLDataSource` type (returned from `@apollo/gateway`'s `buildService` hook), the argument to its `process` method has changed from being Apollo Server 3's `GraphQLRequestContext` to the same `GatewayGraphQLRequestContext`. (For clarity: `GraphQLDataSource` is the class which Apollo Gateway uses to talk to subgraphs; it is unrelated to the Apollo Server 3 [`dataSources` option](#datasources).) - -Additionally, the following types have been renamed and are now exported from `@apollo/server-gateway-interface`: -- `GraphQLExecutor` is now `GatewayExecutor` -- `SchemaLoadOrUpdateCallback` is now `GatewaySchemaLoadOrUpdateCallback` -- `Unsubscriber` is now `GatewayUnsubscriber` - -With the exception of requiring `onSchemaLoadOrUpdate`, all the changes described above are about the *names* and exporting packages of the TypeScript types; the actual runtime API between Apollo Server and Apollo Gateway is unchanged in Apollo Server 4. That is, you should just have to update type declarations, not the runtime code itself. - -## Changes to defaults - -Apollo Server 3 introduced several recommended features after the initial v3.0.0 release, but these features were turned off by default for backward compatibility. In Apollo Server 4, the recommended behavior _is_ the default. In each case, you can still configure your server to match the default behavior of Apollo Server 3 if you want to. - - -### CSRF prevention is on by default - -Apollo Server 3.7 added a recommended security feature called CSRF prevention, which you can enable with the constructor option `csrfPrevention: true`. In Apollo Server 4, `true` is the default value. If you want to disable this recommended security feature, pass `csrfPrevention: false`. For more information about CSRF prevention and CORS, see [Configuring CORS](./security/cors). - - -### HTTP batching is off by default - -Apollo Server supports [batching HTTP requests](./workflow/requests/#batching), enabling a single HTTP request to execute multiple GraphQL operations. In Apollo Server 3, support for HTTP batching was on by default. - -In Apollo Server 4, you must explicitly enable this feature by passing `allowBatchedHttpRequests: true` to the `ApolloServer` constructor. - -Not all GraphQL clients support HTTP batching, and batched requests do not support incremental delivery. HTTP batching can help performance by sharing a `context` object across operations, but it can make it harder to understand the amount of work any given request does. - - -### Default cache is bounded - -Each Apollo Server has a cache backend used in several features, including APQs, the response cache plugin, and `RESTDataSource`. Apollo Server uses an in-memory cache by default, but you can configure it to use a different backend (such as Redis or Memcached) using the `cache` constructor option. - -In Apollo Server 3, the default cache is an _unbounded_ in-memory cache. This cache is vulnerable to denial of service attacks via memory exhaustion, and we do not recommend that users use the default cache. - -In Apollo Server 4, the default cache is a _bounded_ in-memory cache backend (which _is safe_ for production use). This is equivalent to passing `cache: 'bounded'` in Apollo Server 3.9 or newer. - -If you want to customize the cache Apollo Server uses, Apollo provides two wrapper packages to help with this process: -* [`@apollo/utils.keyvadapter`](https://github.com/apollographql/apollo-utils/tree/main/packages/keyvAdapter) - provides a [`KeyvAdapter`](https://github.com/apollographql/apollo-utils/tree/main/packages/keyvAdapter#keyvadapter-class) wrapper class to use alongside the [`keyv`](https://www.npmjs.com/package/keyv) package. -* [`@apollo/utils.keyvaluecache`](https://github.com/apollographql/apollo-utils/tree/main/packages/keyValueCache) - provides both the [`KeyValueCache`](https://github.com/apollographql/apollo-utils/tree/main/packages/keyValueCache#keyvaluecache-interface) TypeScript interface and a [`InMemoryLRUCache`](https://github.com/apollographql/apollo-utils/tree/main/packages/keyValueCache#inmemorylrucache) class (a wrapper around the `lru-cache` package). - -For examples of using both `KeyvAdapter` and `InMemoryLRUCache`, see [Configuring external caching](./performance/cache-backends#configuring-external-caching). - -If you want your server to use an unbounded in-memory cache (which might make your server vulnerable to memory exhaustion attacks), you can use the default `Keyv` implementation with no arguments: - - - -```ts -import { ApolloServer } from '@apollo/server'; -import { KeyvAdapter } from '@apollo/utils.keyvadapter'; -import Keyv from 'keyv'; - -new ApolloServer({ - // DANGEROUS: Match the unsafe default behavior of Apollo Server 3's with an - // unbounded in-memory cache. - cache: new KeyvAdapter(new Keyv()), - // ... -}); - -``` - - - - -### Local landing page defaults to Embedded Apollo Sandbox - -In Apollo Server 3, the default development landing page is a splash page containing a link to the Apollo Sandbox (hosted at `https://studio.apollographql.com/`). This Sandbox only works if your server's CORS configuration allows the origin `https://studio.apollographql.com/`. The [`ApolloServerPluginLandingPageLocalDefault`](./workflow/build-run-queries/#configuring-the-default-landing-page) plugin enables you to embed Apollo Sandbox directly on your server's landing page. Passing `embed: true` to the `ApolloServerPluginLandingPageLocalDefault` plugin allows your Sandbox to make same-origin requests to your server with no additional CORS configuration. - -In Apollo Server 4, the default development landing page is the *embedded* Apollo Sandbox. Note that nothing changes about the default production landing page. - -To use the splash page from Apollo Server 3, you can add the following to your Apollo Server 4 constructor: - - - -```ts -import { ApolloServer } from '@apollo/server'; -import { ApolloServerPluginLandingPageLocalDefault, ApolloServerPluginLandingPageProductionDefault } - from '@apollo/server/plugin/landingPage/default'; - -new ApolloServer({ - // ... - plugins: [ - process.env.NODE_ENV === 'production' - ? ApolloServerPluginLandingPageProductionDefault() - : ApolloServerPluginLandingPageLocalDefault({ embed: false }) + ApolloServerPluginUsageReporting({ + fetcher: nodeFetchFetcher, + // ... other options + }), + ApolloServerPluginSchemaReporting({ + fetcher: nodeFetchFetcher, + // ... other options + }), ], }); ``` +With this approach, the existing `global-agent` proxy configuration will continue to work. (v2 is the version of `node-fetch` used by Apollo Server 4.) - - - -### Usage reporting and inline trace plugins mask errors by default - -In Apollo Server 3, traces sent to Apollo's servers from monolith servers by the usage reporting plugin contain the full message and extensions of every GraphQL error that occurs in the operation by default. Similarly, inline traces sent from subgraphs to Apollo Gateways (which are then sent to Apollo's servers) contain full error details by default. You can modify or drop these errors with `rewriteError` options to the appropriate plugins. - -In Apollo Server 4, error details are *not* included in traces by default. By default, error messages are replaced with `` and error extensions are replaced with a single extension `maskedBy` naming the plugin which performed the masking (`ApolloServerPluginUsageReporting` or `ApolloServerPluginInlineTrace`). - -To restore the Apollo Server 3 behavior, you can pass `{ unmodified: true }` to an option on each plugin: - -```ts -// monoliths -new ApolloServer({ - plugins: [ApolloServerPluginUsageReporting({ - sendErrors: { unmodified: true }, - })], - // ... -}) - -// subgraphs -new ApolloServer({ - plugins: [ApolloServerPluginInlineTrace({ - includeErrors: { unmodified: true }, - })], - // ... -}) -``` - -(As [described above](#rewriteerror-plugin-option), the `rewriteError` option has been replaced by a `transform` option on `sendErrors` or `includeErrors`.) - - -### Usage reporting plugin is off by default on subgraphs - -In an Apollo Federation supergraph, your Apollo Gateway or GraphOS Router sends [usage reports](./api/plugin/usage-reporting/) to Apollo's servers; information about what happens inside individual subgraph servers is sent from the subgraphs to the Gateway or Router via [inline traces](./api/plugin/inline-trace/). That is to say: the usage reporting plugin is *not* designed for use in federated subgraphs. - -In Apollo Server 3, if you provide an Apollo API key and graph ref and do not explicitly install the `ApolloServerPluginUsageReporting` or `ApolloServerPluginUsageReportingDisabled` plugins, the `ApolloServerPluginUsageReporting` plugin will be installed with its default configuration, even if the server is a subgraph. - -In Apollo Server 4, this automatic installation does not occur in federated subgraphs. You still can explicitly install `ApolloServerPluginUsageReporting` in your subgraph, though this is not recommended and a warning will be logged. - -## Renamed packages +> Note: if you have enabled usage reporting by setting `APOLLO_KEY` and `APOLLO_GRAPH_REF` without any other configuration, you may not have a call to `ApolloServerPluginUsageReporting` in your `plugins` array; you can add a call that just includes `fetcher`. Similarly, if you set `APOLLO_SCHEMA_REPORTING` and don't explicitly call `ApolloServerPluginSchemaReporting`, you can add a call to `ApolloServerPluginSchemaReporting` that just includes `fetcher`. -The following packages have been renamed in Apollo Server 4: - - `apollo-datasource-rest` is now [`@apollo/datasource-rest`](https://www.npmjs.com/package/@apollo/datasource-rest). - - `apollo-server-plugin-response-cache` is now [`@apollo/server-plugin-response-cache`](https://www.npmjs.com/package/@apollo/server-plugin-response-cache). - - `apollo-server-plugin-operation-registry` is now [`@apollo/server-plugin-operation-registry`](https://www.npmjs.com/package/@apollo/server-plugin-operation-registry). - - `apollo-reporting-protobuf` (an internal implementation detail for the usage reporting plugin) is now [`@apollo/usage-reporting-protobuf`](https://www.npmjs.com/package/@apollo/usage-reporting-protobuf). -Note that once Apollo Server 4 is released, all actively maintained Apollo packages will start with `@apollo/`. This leaves the `apollo-` namespace open for community integration packages (e.g., `apollo-server-integration-fastify`). +## Better default HTTP status for variable coercion errors +Apollo Server 3 responds to requests with variable coercion errors (eg, if a number is passed in the `variables` map for a variable declared in the operation as a `String`) with a 400 status code, indicating a client error. -## TypeScript type changes +Apollo Server 4 mistakenly responds to these requests with a 200 status code (success) by default. This was an unintended regression. Starting with Apollo Server v4.6.0, users can pass `status400ForVariableCoercionErrors: true` to restore the intended behavior where variable coercion errors are treated as client errors, and we recommended this value in the documentation. However, for backwards compatibility, Apollo Server 4 still defaulted to responding with a 200 status code to these requests. -Several Apollo Server 4 changes only affect TypeScript typings, not runtime behavior. For example, we rename several specific TypeScript interfaces to be more straightforward and change which packages we use to define other interfaces. +Apollo Server 5 restores the intended behavior: `status400ForVariableCoercionErrors` now defaults to true. -### Improved typing for `context` +If you have built clients or monitoring that depend on the accidental default behavior here, you can explicitly pass `status400ForVariableCoercionErrors: false` to the `ApolloServer` constructor to continue to respond to variable coercion errors with status 200. -In Apollo Server 3, you never explicitly specify the type of your context value when setting up your server. This means there is no compile-time check to ensure your `context` function return type matches the type of your context value (read by your resolvers and plugins). `ApolloServer` has a generic parameter, but that parameter is the type of the *arguments passed* to your `context` function, _not_ the type of your app's context value. +We intend to remove this option in future major versions of Apollo Server. If your use case requires the ability to set `status400ForVariableCoercionErrors: false`, please [open an issue](https://github.com/apollographql/apollo-server/issues) to let us know about it. -In Apollo Server 4, you specify the type of your context value as a generic parameter to `ApolloServer`. This gives you proper `context` typing throughout, ensuring that the type returned from your `context` function matches the type available in your resolvers and plugins. For example: -```ts -// You can optionally create a TS interface to set up types -// for your context -interface MyContext { - token: String -} - -// Create a new ApolloServer instance, passing in your -// context's types to ApolloServer's integration function. -const server = new ApolloServer({ - typeDefs, - resolvers: { - Query: { - hello: (root, args, { token }) { - return token; // token is properly inferred as a string - }, - }, - }, - plugins: [{ - async requestDidStart({ contextValue }) { - // token is properly inferred as a string; note that in Apollo Server 4 you - // write `contextValue` rather than `context` in plugins. - console.log(contextValue.token); - }, - }], -}); - -const { url } = await startStandaloneServer(apolloServerInstance, { - context: async ({req, res}) => ({ - // You now get proper type inference within your context function! - token: await getTokenForRequest(req), - }), - listen: { port: 4000 } -}); -``` - -### Improved typing for `validationRules` - -In Apollo Server 3, the `validationRules` option was declared as a list of functions that returned `any`. However, at runtime the functions actually needed to return a `graphql-js` `ASTVisitor`. In Apollo Server 4, the TypeScript type ensures that `validationRules` is a list of `graphql-js` `ValidationRule`s. If your `validationRules` has a TypeScript error, you will need to fix one or more of your rules to correctly return `ASTVisitor`s. +## Standalone server does not use Express -### `@apollo/utils.fetcher` replaces `apollo-server-env` +In Apollo Server 4, the simple minimally-configurable server created with [`startStandaloneServer`](./api/standalone/) is implemented using the Express web framework and Apollo Server's built-in `expressMiddleware`; Express is itself built on top of Node's built-in HTTP server. -In Apollo Server 3, the `apollo-server-env` package primarily provides TypeScript typings and polyfills for the `fetch` and `URL` APIs. +In Apollo Server 5, the `startStandaloneServer` is built directly on top of Node's built-in HTTP server without using Express. -Apollo Server 4 introduces `@apollo/utils.fetcher`, which defines a minimal fetch API (`Fetcher`) that provides Fetch API TypeScript typings. +While the TypeScript types in Apollo Server 4 were intended to only allow you to treat the server like an `http.Server` and not like an Express server, users of `startStandaloneServer` could have used type-unsafe operations to interact directly with Express-specific features. Additionally, Express does support some extra HTTP-level functionality; for example, by default it sets an `x-powered-by: Express` response header and a dynamic `etag` response header based on the hash of the response body. -The `@apollo/utils.fetcher` package has a more precise name and only supports argument structures that are likely to be compatible across implementations of the Fetch API. Specifically, `@apollo/utils.fetcher` doesn't permit you to pass `Request` or `Headers` objects to `fetch` because libraries often can only recognize their implementations of these interfaces. +If you rely on the fact that the `startStandaloneServer` is powered by Express in Apollo Server 4, you should [swap to `expressMiddleware`](./api/standalone#swapping-to-expressmiddleware) to explicitly depend on Express. You can do this before you upgrade from Apollo Server 4 to Apollo Server 5. -### `@apollo/cache-control-types` -In Apollo Server 3, you could import the `CacheScope`, `CacheHint`, `CacheAnnotation`, `CachePolicy`, and `ResolveInfoCacheControl` types from your chosen Apollo Server package. +## Alpha support for incremental delivery -In Apollo Server 4, the new `@apollo/cache-control-types` package exports the [`CacheScope`](#cachescope-type), `CacheHint`, `CacheAnnotation`, `CachePolicy`, and `ResolveInfoCacheControl` types. This enables libraries that work with multiple GraphQL servers (such as `@apollo/subgraph`) to refer to these types without depending on `@apollo/server`. +Apollo Server 4 supports the [incremental delivery directives `@defer` and `@stream`](./workflow/requests#incremental-delivery-experimental). Enabling these directives requires using v17 of GraphQL.js, which was not yet officially released at the time of AS v4.0.0. The support in Apollo Server 4 was designed specifically around the pre-release `v17.0.0-alpha.2` of GraphQL.js, and requires clients to send an `accept: multipart/mixed; deferSpec=20220824` header. -Apollo Server 4 no longer uses the `declare module` TypeScript feature to declare that all `GraphQLResolveInfo` objects (i.e., the `info` argument to resolvers) have a `cacheControl` field. Instead, `@apollo/cache-control-types` provides a `GraphQLResolveInfoWithCacheControl` interface that you can cast `info` to (if you don't want run-time validation), or if you do want runtime validation, you can use the `maybeCacheControlFromInfo` and `cacheControlFromInfo` functions. +At the time of release of Apollo Server v5.0.0, GraphQL.js v17 is still not officially released. Newer alpha releases of GraphQL.js v17 produce a slightly different format of response. -For example, if you had this resolver in Apollo Server 3: - -```ts - someField(parent, args, context, { cacheControl }) { - cacheControl.setCacheHint({ maxAge: 100 }); - } -``` - -you can write this in Apollo Server 4: - -```ts -import { cacheControlFromInfo } from '@apollo/cache-control-types'; - -// ... - someField(parent, args, context, info) { - cacheControlFromInfo(info).setCacheHint({ maxAge: 100 }); - } -``` +Because GraphQL.js v17's behavior is still in flux, Apollo Server 5 does not yet support the newer incremental delivery format. -Alternatively, you can declare `info` to be of type `GraphQLResolveInfoWithCacheControl`. For example, if using `graphql-code-generator` with `typescript-resolvers`, you can use the `customResolveInfo` option. +Just like in Apollo Server 4, Apollo Server 5 does not support incremental delivery when used with GraphQL.js v16, and does support incremental delivery when used with GraphQL.js `v17.0.0-alpha.2` and clients set `accept: multipart/mixed; deferSpec=20220824`. -Note: this is a TypeScript-specific change. The runtime representation hasn't changed, and JavaScript code can continue to access `info.cacheControl` directly. +The only difference in Apollo Server 5 is that Apollo Server now *explicitly* checks to see if its version of GraphQL.js is `17.0.0-alpha.2`, and only enables it if the version matches exactly. If you are using a newer alpha (or an official v17 release if that has happened by the time you read this), Apollo Server 5 will not support incremental delivery. -The `CacheAnnotation` type is no longer exported from any package. +We hope to support the newer incremental delivery format in a future version of Apollo Server when GraphQL.js v17 is officially released. Note that because this is an experimental feature that currently requires the use of a pre-release of a dependency, we may drop support for the current format in a minor version release of Apollo Server 5 (but we will at least use the `accept` header to return reasonable errors to clients). -### Renamed types -This section lists the TypeScript-only types (i.e., interfaces, not classes) that Apollo Server 4 changes (not including those mentioned elsewhere in this article). +## Unsafe `precomputedNonce` option to landing page plugins removed -Apollo Server 4 changes the name of the constructor options type from `Config` to `ApolloServerOptions`. In Apollo Server 3, some integration packages export their own versions of this type (e.g., `ApolloServerExpressConfig`). In Apollo Server 4, there is only one `ApolloServer` type with only one constructor, so these additional types are no longer necessary. +Apollo Server v4.7.3 attempted to fix a challenge with using the [landing page plugins](./api/plugin/landing-pages/) on Cloudflare Workers by adding a `precomputedNonce` option to avoid using crypto functions during server startup and use a fixed value instead of a random value. We quickly learned that this approach was unsafe, as the entire purpose of a nonce is for it to only be used once. The following week, Apollo Server v4.7.4 fixed the Cloudflare Workers compatibility issue in a different way that did not require a precomputed nonce. -Two types in `apollo-server-express` now have more explicit names exported from `@as-integrations/express4`. `GetMiddlewareOptions` is now `ExpressMiddlewareOptions` and `ExpressContext` is now `ExpressContextFunctionArgument`. +For backwards compatibility reasons, we did not remove the `precomputedNonce` option when we released v4.7.4, though we did make it log a deprecation warning. -### Removed types +In Apollo Server 5, the unsafe `precomputedNonce` option to the landing page plugins does not exist. We do not expect that many users use this option whose non-deprecated lifetime was 8 days. If you do pass this option to a landing page plugin, you should be able to just delete it. -This section lists the TypeScript-only types (i.e., interfaces, not classes) that Apollo Server 4 removes (not including those mentioned elsewhere in this article). +## TypeScript build target changes -In Apollo Server 3, the `GraphQLOptions` type was internally used to create integrations and was exported for technical reasons; it is now gone in Apollo Server 4. +Apollo Server 4 is compiled by the TypeScript compiler targeting the ES2020 standard. Apollo Server 5 is compiled targeting the ES2023 standard. This is not expected to cause any issues, because [Node.js v20 supports ES2023](https://github.com/microsoft/TypeScript/wiki/Node-Target-Mapping). -Apollo Server 4 removes the `applyMiddleware` function and its related `ServerRegistration` type. -In Apollo Server 3, the `CorsOptions` and `OptionsJson` types are re-exported from the `cors` and `body-parser` packages. Apollo Server 4 no longer handles these tasks for you, so these types aren't exported. +## Integration test suite support library TypeScript build target change -The `ServerInfo` type (returned from `server.listen()` in `apollo-server`) is gone in Apollo Server 4. The `startStandaloneServer` function now returns a simpler data structure with no type name. +The [`@apollo/server-integration-testsuite`](https://www.npmjs.com/package/@apollo/server-integration-testsuite) used by integration library authors to test their integration no longer uses `lib: ["dom"]` to tell TypeScript to assume DOM-related symbols are in the global namespace. If your integration library's test suite relied on this behavior, you may need to add `lib: ["dom"]` to the `compilerOptions` section of your test suite's `tsconfig.json`. This should not affect normal use of Apollo Server, just testing for integration library authors. diff --git a/docs/source/monitoring/health-checks.mdx b/docs/source/monitoring/health-checks.mdx index 17fa268103f..3c19a8d4d11 100644 --- a/docs/source/monitoring/health-checks.mdx +++ b/docs/source/monitoring/health-checks.mdx @@ -3,7 +3,7 @@ title: Health Checks description: Determining the health status of Apollo Server --- -> **Apollo Server 4 no longer [supports built-in health checks](../migration/#health-checks)**. Instead, we recommend performing [GraphQL-level health checks](#graphql-level-health-checks) to ensure your server successfully serves traffic _and_ performs GraphQL operations. +> **Apollo Server no longer [supports built-in health checks](../migration-from-v3/#health-checks)**. Instead, we recommend performing [GraphQL-level health checks](#graphql-level-health-checks) to ensure your server successfully serves traffic _and_ performs GraphQL operations. Load balancers often use health checks to determine if a server is available and ready to serve traffic. diff --git a/docs/source/monitoring/metrics.mdx b/docs/source/monitoring/metrics.mdx index f79dfe2fa95..cf3fed0e675 100644 --- a/docs/source/monitoring/metrics.mdx +++ b/docs/source/monitoring/metrics.mdx @@ -3,8 +3,11 @@ title: Metrics and Logging description: How to monitor Apollo Server's performance --- -> Sending metrics from Apollo Server to GraphOS requires an [Enterprise plan](https://www.apollographql.com/pricing). -> If your organization doesn't have an Enterprise plan, you can test out this functionality by signing up for a free [GraphOS trial](https://studio.apollographql.com/signup?referrer=docs-content). + + +While Insights are available on all GraphOS plans, metrics retention varies by [plan](https://www.apollographql.com/pricing?referrer=docs-content). + + Apollo Server integrates seamlessly with [Apollo GraphOS](/graphos/) to help you monitor the execution of your GraphQL operations. Apollo Server additionally provides configurable mechanisms for logging each phase of a GraphQL operation. diff --git a/docs/source/performance/cache-backends.mdx b/docs/source/performance/cache-backends.mdx index 916b64384fd..ac321f9375d 100644 --- a/docs/source/performance/cache-backends.mdx +++ b/docs/source/performance/cache-backends.mdx @@ -11,8 +11,6 @@ There are many cache backend implementations to choose from, including several i ## Configuring in-memory caching -> ⚠️ If you are using Apollo Server 3, see the [previous version of this article](/apollo-server/v3/performance/cache-backends#ensuring-a-bounded-cache) to learn how to protect your cache from denial of service attacks by using a bounded cache. By default, Apollo Server 4's default cache is a _bounded_ in-memory cache backend. - You can configure your server to use a different backend (such as Redis or Memcached) using the `cache` constructor option. If you want to configure the default in-memory cache, Apollo provides the [`InMemoryLRUCache`](https://github.com/apollographql/apollo-utils/tree/main/packages/keyValueCache#inmemorylrucache) class from the `@apollo/utils.keyvaluecache` package. @@ -27,7 +25,7 @@ const server = new ApolloServer({ }); ``` -> Apollo Server 4 provides the equivalent of the above code snippet out-of-the-box and doesn't require you to install the `@apollo/utils.keyvaluecache` package. +> Apollo Server provides the equivalent of the above code snippet out-of-the-box and doesn't require you to install the `@apollo/utils.keyvaluecache` package. In this example, we've increased the default size and provided a default TTL. For more information on these configuration options, see the [`lru-cache` documentation](https://www.npmjs.com/package/lru-cache). diff --git a/docs/source/performance/caching.md b/docs/source/performance/caching.md index 315070d14c3..ecc506cfeba 100644 --- a/docs/source/performance/caching.md +++ b/docs/source/performance/caching.md @@ -298,7 +298,7 @@ query GetReaderBookTitle { ## Using with Federation -> Using cache control with Apollo Federation requires v0.1.0 of `@apollo/subgraph` (previously v0.28 of `@apollo/federation`) in your subgraph, v0.36 of `@apollo/gateway` in your Gateway, and v3.0.2 of Apollo Server in both servers. +> Using cache control with Apollo Federation requires v0.1.0 of `@apollo/subgraph` in your subgraph as well as non-EOL versions of `@apollo/gateway` and Apollo Server. When using [Apollo Federation](/federation), the `@cacheControl` directive and `CacheControlScope` enum may be defined in a subgraph's schema. An Apollo Server-based subgraph will calculate and set the cache hint for the response that it sends to the gateway as it would for a non-federated Apollo Server sending a response to a client. The gateway will then calculate the cache hint for the overall response based on the most restrictive settings among all of the responses received from the subgraphs involved in query plan execution. diff --git a/docs/source/previous-versions.mdx b/docs/source/previous-versions.mdx index 4ad06bb97ca..e8d1314f4f6 100644 --- a/docs/source/previous-versions.mdx +++ b/docs/source/previous-versions.mdx @@ -2,18 +2,21 @@ title: Previous Versions of Apollo Server --- -## Apollo Server 4 is generally available +## Apollo Server 5 is generally available -Apollo Server 4 is the latest version of Apollo Server and is [generally available](/graphos/reference/feature-launch-stages#general-availability). Apollo Server 4 is ready for use in a production environment, and Apollo provides official support for this library. There is currently no planned end-of-life date. +Apollo Server 5 is the latest version of Apollo Server and is [generally available](/graphos/reference/feature-launch-stages#general-availability). Apollo Server 5 is ready for use in a production environment, and Apollo provides official support for this library. There is currently no planned end-of-life date. ## Deprecated versions Deprecated versions continue to receive security patches and updates to address major regressions until their end-of-life date. They typically do not receive new features and other kinds of bug fixes may or may not be backported to deprecated versions at Apollo's discretion. -There are currently no deprecated versions of Apollo Server. - > [Learn more about deprecation and end-of-life.](/graphos/reference/feature-launch-stages#apollo-feature-retirement-stages) +### Apollo Server 4 + +Apollo Server 4 is deprecated and will transition to end-of-life on January 26, 2026. We encourage all Apollo Server 4 users to [**upgrade** to Apollo Server 5 now](./migration). As long as you're already using a non-EOL version of Node.js, the upgrade from v4 should take only a few minutes and require little to no changes. + + ## End-of-life versions Apollo no longer commits to providing any support for these versions. While you may still file issues about security concerns or significant regressions, Apollo may choose not to address them. @@ -24,15 +27,15 @@ End-of-life versions will remain available in the npm registry and can still be ### Apollo Server 3 -[Apollo Server 3](/apollo-server/v3/) is end-of-life as of **October 22, 2024**. We encourage all Apollo Server 3 users to [**upgrade** to Apollo Server 4 now](./migration) as _soon as possible_. +[Apollo Server 3](/apollo-server/v3/) has been end-of-life since **October 22, 2024**. We encourage all Apollo Server 3 users to [**upgrade** to Apollo Server 5](./migration-from-v3) as _soon as possible_. -Note that Apollo Server 2 and 3 were distributed in various npm packages (such as `apollo-server`, `apollo-server-core`, and `apollo-server-express`); Apollo Server 4 combines these packages into a single new [`@apollo/server` package](./migration/#the-new-apolloserver-package). +Note that Apollo Server 2 and 3 were distributed in various npm packages (such as `apollo-server`, `apollo-server-core`, and `apollo-server-express`); Apollo Server 4 combines these packages into a single new [`@apollo/server` package](./migration-from-v3/#the-new-apolloserver-package). ### Apollo Server 2 -[Apollo Server 2](/apollo-server/v2/) is end-of-life as of **October 22, 2023**. We encourage all users of Apollo Server 2 to **upgrade** to Apollo Server 4 as _soon as possible_, first by following the [v3 migration guide](/apollo-server/v3/migration) and then following the [v4 migration guide](./migration). +[Apollo Server 2](/apollo-server/v2/) has been end-of-life since **October 22, 2023**. We encourage all users of Apollo Server 2 to **upgrade** to Apollo Server 4 as _soon as possible_, first by following the [v2 to v3 migration guide](/apollo-server/v3/migration) and then following the [v3 to v5 migration guide](./migration-from-v3). -Note that Apollo Server 2 and 3 were distributed in various npm packages (such as `apollo-server`, `apollo-server-core`, and `apollo-server-express`); Apollo Server 4 combines these packages into a single new [`@apollo/server` package](./migration/#the-new-apolloserver-package). +Note that Apollo Server 2 and 3 were distributed in various npm packages (such as `apollo-server`, `apollo-server-core`, and `apollo-server-express`); Apollo Server 4 combines these packages into a single new [`@apollo/server` package](./migration-from-v3/#the-new-apolloserver-package). Depending on which Apollo Server features you use, the upgrade process might require several changes to your server. The most straightforward upgrade path is to first upgrade from Apollo Server 2 to 3, then once everything works, continue upgrading from Apollo Server 3 to 4. diff --git a/docs/source/schema/directives.md b/docs/source/schema/directives.md index 5fc0b3ec06a..86b26a38e71 100644 --- a/docs/source/schema/directives.md +++ b/docs/source/schema/directives.md @@ -85,9 +85,9 @@ The [GraphQL specification](http://spec.graphql.org/June2018/#sec-Type-System.Di | `@skip(if: Boolean!)` | If `true`, the decorated field or fragment in an operation is _not_ resolved by the GraphQL server. | | `@include(if: Boolean!)` | If `false`, the decorated field or fragment in an operation is _not_ resolved by the GraphQL server. | -## Custom directives +## Custom directives -> ⚠️ Apollo Server does not provide _built-in_ support for custom directives that transform a schema. +> ⚠️ Apollo Server does not provide _built-in_ support for custom directives that transform a schema. Your schema can define custom directives that can then decorate other parts of your schema: @@ -110,13 +110,13 @@ Before you use custom directives in a federated graph, make sure to consider the - Because directives are specific to individual subgraphs, it's technically valid for different subgraphs to define the _same_ directive with _different_ logic. As stated in the previous point, if a custom directive is used in multiple subgraphs to resolve a particular field, you should define the same directive with the same logic across subgraphs. _Composition does not detect or warn about such inconsistencies._ - The composition process treats [executable (client-side)](/federation/federated-types/composition/#executable-directives) and [type system (server-side) directives](/federation/federated-types/composition/#type-system-directives) differently: - An executable directive is composed into the supergraph schema if: - - All subgraphs define the directive identically + - All subgraphs define the directive identically - The directive is not included in any [`@composeDirective`](/federation/federated-types/federated-directives/#composedirective) directives - Type system directives are not composed into the supergraph schema, but they can provide information to the router via the [`@composeDirective`](/federation/federated-types/federated-directives/#composedirective) directive. #### Transformer functions -[As our example shows](https://github.com/apollographql/docs-examples/blob/main/apollo-server/v4/custom-directives/upper-case-directive/src/index.ts), in Apollo Server 3 and 4 you can define a **transformer function** for each of your subgraph schema's custom directives. +[As our example shows](https://github.com/apollographql/docs-examples/blob/main/apollo-server/v4/custom-directives/upper-case-directive/src/index.ts), you can define a **transformer function** for each of your subgraph schema's custom directives. To apply transformer functions to your executable subgraph schema, you first _generate_ the subgraph schema with `buildSubgraphSchema` as usual: diff --git a/docs/source/security/authentication.mdx b/docs/source/security/authentication.mdx index 95f66253ba0..f58ef2d2a34 100644 --- a/docs/source/security/authentication.mdx +++ b/docs/source/security/authentication.mdx @@ -12,9 +12,7 @@ Your GraphQL API probably needs to control which users can see and interact with -GraphOS Router can now provide authentication and authorization for your entire supergraph. While it may make sense to re-apply auth checks at a subgraph level or in a monolith graph, the GraphOS Router has built and provided standard JWT checks that can be setup with a simple YAML configuration and enforce this in a central location for all subgraphs: - -https://www.apollographql.com/blog/centrally-enforce-policy-as-code-for-graphql-apis +GraphOS Router can now provide authentication and authorization for your entire supergraph. While it may make sense to re-apply auth checks at a subgraph level or in a monolith graph, the GraphOS Router has built and provided [standard JWT checks that can be setup with a simple YAML configuration and enforce this in a central location for all subgraphs](https://www.apollographql.com/blog/centrally-enforce-policy-as-code-for-graphql-apis). diff --git a/docs/source/security/cors.mdx b/docs/source/security/cors.mdx index e6afe9aefbb..4b85c72cbd5 100644 --- a/docs/source/security/cors.mdx +++ b/docs/source/security/cors.mdx @@ -3,7 +3,7 @@ title: Configuring CORS description: Control access to your server's resources --- -> 📣 By default, Apollo Server 4 ships with a feature that protects users from CSRF and XS-Search attacks. This feature requires that any client sending operations via `GET` or multipart upload requests _must_ include a special header (such as `Apollo-Require-Preflight`) in that request. For more information, see [Preventing Cross-Site Request Forgery (CSRF)](#preventing-cross-site-request-forgery-csrf). +> 📣 By default, Apollo Server ships with a feature that protects users from CSRF and XS-Search attacks. This feature requires that any client sending operations via `GET` or multipart upload requests _must_ include a special header (such as `Apollo-Require-Preflight`) in that request. For more information, see [Preventing Cross-Site Request Forgery (CSRF)](#preventing-cross-site-request-forgery-csrf). [Cross-Origin Resource Sharing](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) (CORS) is an HTTP-header-based protocol that enables a server to dictate which origins can access its resources. Put another way, your server can specify which websites can tell a user's browser to talk to your server, and precisely which types of HTTP requests are allowed. @@ -86,7 +86,7 @@ If you create a public API or an API to embed in websites you don't control your If your application doesn't fit into any of the above categories, [`startStandaloneServer`](../api/standalone)'s CORS behavior should suit your use case. You can always choose to swap to another Apollo Server integration later to [customize your CORS configuration](#configuring-cors-options-for-apollo-server). ## Configuring CORS options for Apollo Server -> 📣 **New in Apollo Server 4**: if you are using an Apollo Server integration (e.g., [`expressMiddleware`](../api/express-middleware)), you are responsible for [setting up CORS for your web framework](../migration#http-body-parsing-and-cors). +> 📣 **New since Apollo Server 4**: if you are using an Apollo Server integration (e.g., [`expressMiddleware`](../api/express-middleware)), you are responsible for [setting up CORS for your web framework](../migration-from-v3#http-body-parsing-and-cors). Apollo Server's standalone server (i.e., [`startStandaloneServer`](../api/standalone)) serves the `Access-Control-Allow-Origin` HTTP header with the wildcard value (`*`). This allows scripts on any origin to make requests, _without cookies_, to the server and read its responses. @@ -182,7 +182,7 @@ For examples of sending cookies and authorization headers from Apollo Client, se ## Preventing Cross-Site Request Forgery (CSRF) -> By default, Apollo Server 4 ships with a feature protecting from CSRF and XS-Search attacks. If you want to disable this recommended security feature, pass `csrfPrevention: false` to the `ApolloServer` constructor. +> By default, Apollo Server ships with a feature protecting from CSRF and XS-Search attacks. If you want to disable this recommended security feature, pass `csrfPrevention: false` to the `ApolloServer` constructor. Your server's CORS policy enables you to control which websites can talk to your server. In most cases, the browser checks your server's CORS policy by sending a [preflight request](https://developer.mozilla.org/en-US/docs/Glossary/Preflight_request) before sending the actual operation. This is a separate HTTP request. Unlike most HTTP requests (which use the `GET` or `POST` method), this request uses a method called `OPTIONS`. The browser sends an `Origin` header, along with some other headers that start with `Access-Control-`. These headers describe the kind of request that the potentially untrusted JavaScript wants to make. Your server returns a response with `Access-Control-*` headers describing its policies (as described above), and the browser uses that response to decide whether it's OK to send the real request. Processing the `OPTIONS` preflight request never actually executes GraphQL operations. @@ -198,7 +198,7 @@ The most important rule for whether or not a request is ["simple"](https://devel However, Apollo Server also handles [`GET` requests](../workflow/requests#get-requests). `GET` requests do not require a `Content-Type` header, so they can potentially be simple requests. So how can we ensure that we only execute `GET` requests that are _not_ simple requests? If we require the request to include an HTTP header that is never set automatically by the browser, then that is sufficient: requests that set HTTP headers other than the handful defined in the spec must be preflighted. -By default, Apollo Server 4 has a CSRF prevention feature enabled. This means your server only executes GraphQL operations if at least one of the following conditions is true: +By default, Apollo Server 4+ has a CSRF prevention feature enabled. This means your server only executes GraphQL operations if at least one of the following conditions is true: - The incoming request includes a `Content-Type` header that specifies a type other than `text/plain`, `application/x-www-form-urlencoded`, or `multipart/form-data`. Notably, a `Content-Type` of `application/json` (including any suffix like `application/json; charset=utf-8`) is sufficient. This means that all `POST` requests (which must use `Content-Type: application/json`) will be executed. Additionally, all versions of [Apollo Client Web](/react/api/link/apollo-link-http) that support `GET` requests do include `Content-Type: application/json` headers, so any request from Apollo Client Web (`POST` or `GET`) will be executed. - There is a non-empty `X-Apollo-Operation-Name` header. This header is sent with all operations (`POST` or `GET`) by [Apollo iOS](/ios) (v0.13.0+) and [Apollo Kotlin](/kotlin) (all versions, including its former name "Apollo Android"), so any request from Apollo iOS or Apollo Kotlin will be executed. @@ -223,7 +223,7 @@ Note that Apollo Server does not permit executing mutations in `GET` requests (j ### `graphql-upload` -> ⚠️ The [`graphql-upload`](https://www.npmjs.com/package/graphql-upload) package has a known CSRF vulnerability and is turned on by default in version of Apollo Server 2.25.4 and below. If you are using Apollo Server 2 and do not use uploads, you can disable them by passing `uploads: false` to the `ApolloServer` constructor. If you do use uploads, you must update to Apollo Server 3.7 or later and ensure CSRF prevention is enabled to use this feature safely. +> ⚠️ The [`graphql-upload`](https://www.npmjs.com/package/graphql-upload) package has a known CSRF vulnerability. Apollo Server's default behavior fixes the vulnerability by preventing `graphql-upload` from working. **Don't disable Apollo Server's protection**: fix your client to work with it instead. The [third-party `graphql-upload` package](/apollo-server/v3/data/file-uploads) has a known CSRF vulnerability. @@ -233,4 +233,6 @@ Apollo Server 4's default [CSRF prevention feature](#preventing-cross-site-reque For example, if you use the [`apollo-upload-client`](https://github.com/jaydenseric/apollo-upload-client) package with Apollo Client Web, pass `{headers: {'Apollo-Require-Preflight': 'true'}}` to `createUploadLink`. +(Note that `graphql-upload` was included automatically in Apollo Server 2 and enabled by default, meaning that Apollo Server 2 was vulnerable to this exploit, and CSRF protection was only added to Apollo Server in v3.7.0. Apollo Server 2 has been [end-of-life](../previous-versions/) since October 2023 and Apollo Server 3 has been [end-of-life](../previous-versions/) since October 2024, so all non-EOL versions of Apollo Server have this protection enabled.) + For more information about file upload best practices, see [our blog post](https://www.apollographql.com/blog/backend/file-uploads/file-upload-best-practices/). diff --git a/docs/source/security/proxy-configuration.md b/docs/source/security/proxy-configuration.md index 1b35559c307..7ba0a591d94 100644 --- a/docs/source/security/proxy-configuration.md +++ b/docs/source/security/proxy-configuration.md @@ -3,96 +3,115 @@ title: Proxy Configuration description: Configuring proxy settings for outgoing requests --- -Certain features of the Apollo platform (such as [managed federation](https://www.apollographql.com/docs/federation/managed-federation/overview/)) require Apollo Server to make outgoing requests to Apollo Studio. Depending on security policies, you might need to configure an outgoing HTTP proxy in order to allow these requests. +Certain features require Apollo Server to make outgoing requests to Apollo GraphOS or another server in your infrastructure. Depending on security policies, you might need to configure an outgoing HTTP proxy in order to allow these requests. Specifically, the [Usage Reporting](../api/plugin/usage-reporting/) and [Schema Reporting](../api/plugin/schema-reporting/) plugins make requests to Apollo GraphOS, and the [Subscription Callback](../api/plugin/subscription-callback/) plugin makes requests to your GraphOS Router. -Although Apollo Server supports standard Node.js "agent" configuration via [`https.globalAgent`](https://nodejs.org/api/https.html#https_https_globalagent) and [`http.globalAgent`](https://nodejs.org/api/http.html#http_http_globalagent) directly, we recommend using the [`global-agent`](https://github.com/gajus/global-agent#global-agent) package to reduce the amount of necessary configuration involved with [creating a custom agent](https://nodejs.org/api/http.html#http_class_http_agent). +You can override the `fetcher` function these plugins use to make HTTP requests. This page assumes you're using the default fetcher. If you're overriding the fetcher, check the documentation for the implementation of `fetch` you've selected to learn how it supports HTTP proxies. -The `global-agent` package enables the common technique of setting proxy settings using environment variables (e.g. `HTTP_PROXY`, `NO_AGENT`, etc.), which is not supported by Node.js itself (and [may never be](https://github.com/nodejs/node/issues/15620)). +We recommend using environment variables to configure Node.js and HTTP proxy settings. -## Configuring the proxy agent +## Proxy configuration variables -This guide covers the `global-agent` package, which is supported by Node.js version 10 and later. +You can use the following environment variables to configure the proxy: -### Installing the `global-agent` dependency +- `HTTP_PROXY` -First, install the `global-agent` package with your dependency manager: + The URL of your proxy server. -``` -npm install global-agent -``` +- `HTTPS_PROXY` -### Bootstrapping the `global-agent` proxy agent + The URL where HTTPS traffic (i.e. encrypted SSL/TLS traffic) is proxied. If this is not set, HTTPS traffic will route through the HTTP proxy. -After the `global-agent` dependency has been installed, invoke its `bootstrap` method **before** Apollo Server is initialized: +- `NO_PROXY` -```ts -import { ApolloServer } from '@apollo/server'; -import { bootstrap } from 'global-agent'; // highlight-line + A comma-separated list of domains that should be excluded from being proxied. For example, `'*.foo.com,10.0.1.100,baz.com'`. -// Setup global support for environment variable based proxy configuration. -bootstrap(); // highlight-line +If you are using AS4, the environment variables need to be prefixed with `GLOBAL_AGENT_` (for example, `GLOBAL_AGENT_HTTP_PROXY`, `GLOBAL_AGENT_HTTPS_PROXY` and `GLOBAL_AGENT_NO_PROXY`). -// The following represents existing configuration, though its -// important to bootstrap the agent before Apollo Server. -const server = new ApolloServer({ - typeDefs, - resolvers, -}); +To enable the use of these environment variables, refer to the sections below for instructions specific to your Apollo Server and Node.js versions. + +## Configuring AS5 with Node.js v24+ (recommended) + +By default, Apollo Server v5 uses [the Node.js built-in `fetch` implementation](https://nodejs.org/api/globals.html#fetch). + +If you are using Node.js v24 or newer, this implementation has built-in support for configuring your HTTP proxy via environment variables. You can enable this using the [`NODE_USE_ENV_PROXY` environment variable](https://nodejs.org/api/cli.html#node_use_env_proxy1). + +```bash +NODE_USE_ENV_PROXY=1 ``` -### Configuring the proxy using environment variables +You can now use the proxy configuration variables defined above. + +## Configuring AS5 with Node.js v20 or v22 -Depending on the deployment environment (e.g. AWS, Heroku, Kubernetes, Docker, etc.), environment variables may be set differently. These instructions will demonstrate how to start a `node` process using environment variables in a Unix-based shell. +If you are running Apollo Server v5 with Node.js v20 or v22, you need to use a bit of code to enable proxy configuration with the built-in `fetch` implementation. -By default, the above bootstrapping step will enable the following environment variables: +First, install the `undici` library in your app. The built-in `fetch` implementation is based on [Undici](https://www.npmjs.com/package/undici), but you still need to install the package from the npm registry in order to change this global configuration. + +```bash +npm install undici +``` -- `GLOBAL_AGENT_HTTP_PROXY` +Then, add the following to the top of your main server file, before constructing your `ApolloServer` object. - This is often the most important and solely necessary environment variable to set. +```ts +import { setGlobalDispatcher, EnvHttpProxyAgent } from 'undici' -- `GLOBAL_AGENT_HTTPS_PROXY` +setGlobalDispatcher(new EnvHttpProxyAgent()); +``` - This variable defines where HTTPS traffic (i.e. encrypted SSL/TLS traffic) is proxied. If this is not set, HTTPS traffic will route through the HTTP proxy. +You can now use the proxy configuration variables defined above. (You don't need to set `NODE_USE_ENV_PROXY`.) -- `GLOBAL_AGENT_NO_PROXY` +## Configuring AS4 - This variable allows the exclusion of certain domains from being proxied. +By default, Apollo Server v4 uses the [`node-fetch` npm package](https://www.npmjs.com/package/node-fetch) instead of the built-in Node.js `fetch` implementation to make requests to Apollo GraphOS. (Despite the similar names, these are completely different implementations.) This is implemented in terms of the Node.js HTTP `request` API, not its `fetch` API, and configuring this API to use HTTP proxies works differently. -By setting these environment variables, it is possible to configure `global-agent`'s creation of the agent that is used for outgoing requests. If the proxy requires special certificates for SSL/TLS requests, read the details later in this page. +Although Apollo Server supports standard Node.js "agent" configuration via [`https.globalAgent`](https://nodejs.org/api/https.html#https_https_globalagent) and [`http.globalAgent`](https://nodejs.org/api/http.html#http_http_globalagent) directly, we recommend using the [`global-agent`](https://github.com/gajus/global-agent#global-agent) package to reduce the amount of necessary configuration involved with [creating a custom agent](https://nodejs.org/api/http.html#http_class_http_agent). -Using the appropriate environment variables, define them when starting the server. For example, to send all outgoing requests from a Node.js server through `http://proxy:3128`, the configuration would be: +First, install the `global-agent` package: -```shell -$ GLOBAL_AGENT_HTTP_PROXY=http://proxy:3128/ node index.js +``` +npm install global-agent ``` -The `GLOBAL_AGENT_NO_PROXY` environment variable can also be defined to exclude certain URLs from being proxied: +Invoke its `bootstrap` method **before** Apollo Server is initialized: -```shell -$ GLOBAL_AGENT_NO_PROXY='*.foo.com,10.0.1.100,baz.com' node index.js +```ts +import { ApolloServer } from '@apollo/server'; +import { bootstrap } from 'global-agent'; // highlight-line + +// Set up global support for environment variable based proxy configuration. +bootstrap(); // highlight-line + +// The following represents existing configuration, though it is +// important to bootstrap the agent before Apollo Server. +const server = new ApolloServer({ + typeDefs, + resolvers, +}); ``` -> For more information, see [Exclude URLs](https://github.com/gajus/global-agent#exclude-urls) in the `global-agent` documentation. +You can configure the proxy with the `GLOBAL_AGENT_HTTP_PROXY`, `GLOBAL_AGENT_HTTPS_PROXY`, and `GLOBAL_AGENT_NO_PROXY` environment variables, which work identically to the environment variables defined above. -As shown above, the [supported environment variables](https://github.com/gajus/global-agent#environment-variables) are all prefixed with `GLOBAL_AGENT_` to avoid [undesirable by-products](https://github.com/gajus/global-agent#what-is-the-reason-global-agentbootstrap-does-not-use-http_proxy) of using the more common non-prefixed versions (e.g. `HTTP_PROXY`). To disable this default namespacing (i.e. prefixing), the server can be started with `GLOBAL_AGENT_ENVIRONMENT_VARIABLE_NAMESPACE` set to an empty string: +If you would prefer to use environment variable names without the `GLOBAL_AGENT_` prefix (e.g., if `HTTP_PROXY` is already set in your environment), you can set the `GLOBAL_AGENT_ENVIRONMENT_VARIABLE_NAMESPACE` environment variable to an empty string. -```shell -$ GLOBAL_AGENT_ENVIRONMENT_VARIABLE_NAMESPACE="" HTTP_PROXY=http://proxy:3128/ node index.js +``` +GLOBAL_AGENT_ENVIRONMENT_VARIABLE_NAMESPACE="" ``` -Of course, a custom namespace can also be provided as well. For more details on the configuration, see [the documentation for `global-agent`](https://github.com/gajus/global-agent#global-agent). +You can now use the proxy configuration variables defined above. ## Specifying a custom SSL/TLS certificate -Depending on the proxy communication, it may be necessary to extend the default "root" certificates which Node.js trusts to include a certificate provided by the proxy administrator. These certificates will usually allow the proxy to handle SSL/TLS traffic and permits the proxy to analyze such traffic. +Depending on the proxy communication, it may be necessary to extend the default "root" certificates which Node.js trusts to include a certificate provided by the proxy administrator. These certificates will usually allow the proxy to handle SSL/TLS traffic and permit the proxy to analyze such traffic. This can be done [via Node.js' `NODE_EXTRA_CA_CERTS` environment variable](https://nodejs.org/api/cli.html#cli_node_extra_ca_certs_file): 1. The appropriate certificate (i.e. PEM file) must be present on the file-system where the server is running. -2. Start the server with the `NODE_EXTRA_CA_CERTS` environment variable set to that path, combined with the existing proxy configuration variables which were explained above: +2. Start the server with the `NODE_EXTRA_CA_CERTS` environment variable set to that path, combined with the proxy configuration variables defined above. ```shell $ NODE_EXTRA_CA_CERTS=/full/path/to/certificate.pem \ - GLOBAL_AGENT_HTTP_PROXY=http://proxy:3128/ \ + NODE_USE_ENV_PROXY=1 \ + HTTP_PROXY=http://proxy:3128/ \ node index.js ``` diff --git a/docs/source/testing/mocking.mdx b/docs/source/testing/mocking.mdx index 32f1079efd9..2f81d52e21e 100644 --- a/docs/source/testing/mocking.mdx +++ b/docs/source/testing/mocking.mdx @@ -5,7 +5,7 @@ description: Mock your GraphQL data based on a schema. import TopLevelAwait from "../shared/top-level-await.mdx" -> 📣 **New in Apollo Server 4:** Apollo Server 4 removes both the [`mocks` and `mockEntireSchema`](../migration/#mocks-and-mockentireschema) constructor options. This article has been updated to use the `@graphql-tools` package to mock data for Apollo Server. For the most up-to-date information on `@graphql-tools`, we recommend referencing [their documentation](https://www.graphql-tools.com/docs/mocking). +> 📣 **New since Apollo Server 4:** Unlike previous versions, mocking is [no longer built in to Apollo Server](../migration/#mocks-and-mockentireschema). This article teaches you how to use the third-party `@graphql-tools` package to mock data for Apollo Server. For the most up-to-date information on `@graphql-tools`, we recommend referencing [their documentation](https://www.graphql-tools.com/docs/mocking). Mocking enables Apollo Server to return simulated data for GraphQL operations based on your server's schema. The strongly-typed nature of a GraphQL API lends itself to mocking, which is an important part of a GraphQL-first development process. diff --git a/docs/source/using-federation/apollo-gateway-setup.mdx b/docs/source/using-federation/apollo-gateway-setup.mdx index e10c9723922..106fc949d22 100644 --- a/docs/source/using-federation/apollo-gateway-setup.mdx +++ b/docs/source/using-federation/apollo-gateway-setup.mdx @@ -17,7 +17,7 @@ Regardless of which graph router library you start with, you can swap to the oth ## Node.js gateway setup -This section walks through setting up a basic graph router using Apollo Server and the `@apollo/gateway` library. It currently requires [Node.js version 14 or 16](https://nodejs.org/en/download/). +This section walks through setting up a basic graph router using Apollo Server and the `@apollo/gateway` library. Create a new Node.js project with `npm init`, then install the necessary packages: diff --git a/docs/source/workflow/build-run-queries.mdx b/docs/source/workflow/build-run-queries.mdx index 44dfc43d203..940be34be4c 100644 --- a/docs/source/workflow/build-run-queries.mdx +++ b/docs/source/workflow/build-run-queries.mdx @@ -2,7 +2,7 @@ title: Build and Run Queries Against Apollo Server --- -In non-production environments, Apollo Server 4's landing page is an embedded version of [Apollo Sandbox](/graphos/explorer/sandbox) (served at `http://localhost:4000` by default): +In non-production environments, Apollo Server's landing page is an embedded version of [Apollo Sandbox](/graphos/explorer/sandbox) (served at `http://localhost:4000` by default): Apollo Sandbox diff --git a/docs/source/workflow/requests.md b/docs/source/workflow/requests.md index 0c9dc16b52b..54cc7c6ae26 100644 --- a/docs/source/workflow/requests.md +++ b/docs/source/workflow/requests.md @@ -50,7 +50,7 @@ curl --request POST \ ### Batching -By default, Apollo Server 4 [doesn't support batching HTTP requests](../api/apollo-server#allowbatchedhttprequests). To enable HTTP batching, you must explicitly pass `allowBatchedHttpRequests: true` to the `ApolloServer` constructor. +By default, Apollo Server [doesn't support batching HTTP requests](../api/apollo-server#allowbatchedhttprequests). To enable HTTP batching, you must explicitly pass `allowBatchedHttpRequests: true` to the `ApolloServer` constructor. If you have enabled HTTP batching, you can send a batch of queries in a single `POST` request by providing a JSON-encoded array of query objects, like so: @@ -60,7 +60,7 @@ If you have enabled HTTP batching, you can send a batch of queries in a single ` "query": "query { testString }" }, { - "query": "query AnotherQuery{ test(who: \"you\" ) }" + "query": "query AnotherQuery { test(who: \"you\" ) }" } ] ``` @@ -82,7 +82,7 @@ curl --request GET \ https://rover.apollo.dev/quickstart/products/graphql?query=query%20GetBestSellers%28%24category%3A%20ProductCategory%29%7BbestSellers%28category%3A%20%24category%29%7Btitle%7D%7D&operationName=GetBestSellers&variables=%7B%22category%22%3A%22BOOKS%22%7D ``` -Unlike with `POST` requests, `GET` requests do not require a `Content-Type` header. However, if you have Apollo Server 4's default [CSRF prevention](../security/cors#preventing-cross-site-request-forgery-csrf) feature enabled, `GET` requests that don't contain a `Content-Type` header must contain one of the following: +Unlike with `POST` requests, `GET` requests do not require a `Content-Type` header. However, if you have Apollo Server's default [CSRF prevention](../security/cors#preventing-cross-site-request-forgery-csrf) feature enabled, `GET` requests that don't contain a `Content-Type` header must contain one of the following: - A non-empty `X-Apollo-Operation-Name` header - A non-empty `Apollo-Require-Preflight` header @@ -91,7 +91,7 @@ For more details, see [the CSRF prevention documentation](../security/cors#preve ## Incremental delivery (experimental) -Incremental delivery is a [Stage 2: Draft Proposal](https://github.com/graphql/graphql-spec/pull/742) to the GraphQL specification which adds `@defer` and `@stream` executable directives. These directives allow clients to specify that parts of an operation can be sent after an initial response, so that slower fields do not delay all other fields. As of September 2022, the `graphql` library (also known as `graphql-js`) upon which Apollo Server is built implements incremental delivery only in the unreleased major version 17. If a pre-release of `graphql@17.0.0-alpha.2` is installed in your server, Apollo Server 4 can execute these incremental delivery directives and provide streaming [`multipart/mixed`](https://github.com/graphql/graphql-over-http/blob/main/rfcs/IncrementalDelivery.md) responses. +Incremental delivery is a [Stage 2: Draft Proposal](https://github.com/graphql/graphql-spec/pull/742) to the GraphQL specification which adds `@defer` and `@stream` executable directives. These directives allow clients to specify that parts of an operation can be sent after an initial response, so that slower fields do not delay all other fields. As of June 2025, the `graphql` library (also known as `graphql-js`) upon which Apollo Server is built implements incremental delivery only in the unreleased major version 17. If a pre-release of `graphql@17.0.0-alpha.2` is installed in your server, Apollo Server can execute these incremental delivery directives and provide streaming [`multipart/mixed`](https://github.com/graphql/graphql-over-http/blob/main/rfcs/IncrementalDelivery.md) responses. Support for incremental delivery in graphql version 17 is [opt-in](https://github.com/robrichard/defer-stream-wg/discussions/12), meaning the directives are not defined by default. In order to use `@defer` or `@stream`, you must provide the appropriate definition(s) in your SDL. The definitions below can be pasted into your schema as-is: @@ -121,4 +121,6 @@ const schema = new GraphQLSchema({ Clients sending operations with incremental delivery directives need to explicitly indicate that they are expecting to receive `multipart/mixed` responses in an `accept` header. Moreover, because incremental delivery has not yet been finalized in the GraphQL spec and may change before the final version, they need to specify that they expect the particular response format that Apollo Server produces today via a `deferSpec` parameter. Specifically, clients prepared to accept incremental delivery responses should send an `accept` header like `multipart/mixed; deferSpec=20220824`. Note that this header implies that *only* multipart responses should be accepted; typically, clients will send an accept header like `multipart/mixed; deferSpec=20220824, application/json` indicating that either multipart or single-part responses are acceptable. +> Apollo Server *only* supports the specific pre-release `graphql@17.0.0-alpha.2`. Newer alpha versions of `graphql` v17 support a slightly different format for incremental delivery, which Apollo Server does not yet support. Apollo Server 5 checks the version of `graphql` you have installed and will not attempt to support incremental delivery unless it is precisely `17.0.0-alpha.2`. We hope to support the newer incremental delivery protocol in a future release, using a different `deferSpec` value. + You cannot combine [batching](#batching) with incremental delivery in the same request. diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000000..289003ff376 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,67 @@ +import importPlugin from 'eslint-plugin-import'; +import tseslint from 'typescript-eslint'; + +// We have enabled specific lint rules on this repo rather than enabling sets of +// recommended rules. (We may want to enable recommended rules later, though +// many of them might fail for now.) + +export default tseslint.config( + // Files to completely ignore. + { + ignores: [ + '**/dist/**', + '**/generated/**', + '**/coverage/**', + 'smoke-test/**', + ], + }, + // Rules to apply to all TypeScript files. + { + files: ['**/*.ts'], + extends: [ + // Enable typescript-eslint (without any enabled rules). + tseslint.configs.base, + // Enable eslint-plugin-import's typescript configuration (without any + // enabled rules). We should be able to just write + // `importPlugin.flatConfigs.typescript` but there's a bug in the + // currently released version of the plugin (fix PR merged but unreleased) + // that doesn't actually enable the plugin when you use it, so this is a workaround. + // https://github.com/import-js/eslint-plugin-import/pull/3151#issuecomment-2902570482 + { + ...importPlugin.flatConfigs.typescript, + name: `import/typescript`, + plugins: importPlugin.flatConfigs.recommended.plugins, + }, + ], + rules: { + // Make sure we always use `import type` when we can get away with it. + '@typescript-eslint/consistent-type-imports': [ + 'error', + { + prefer: 'type-imports', + fixStyle: 'inline-type-imports', + }, + ], + }, + }, + // Rules that do not apply to test code. + { + files: ['**/*.ts'], + ignores: ['**/__tests__/**/*.ts'], + rules: { + // Enable import/extensions on all TS files because our ESM builds require + // you to specify local imports as full paths with extensions. We don't + // need this on tests because Jest doesn't require it. + 'import/extensions': ['error', 'ignorePackages'], + // Disallow importing a node module without it being specified in + // package.json. We don't enable this for tests because we regularly + // import packages from the top-level package.json in our tests, and + // there's not an easy way in the configuration to say "look at the + // auto-detected closest package.json to the file AND this other specific + // one". + + // https://github.com/import-js/eslint-plugin-import/issues/1913 + 'import/no-extraneous-dependencies': 'error', + }, + }, +); diff --git a/jest.config.base.js b/jest.config.base.js index 55a9fb00fe1..d30cf6a7b98 100644 --- a/jest.config.base.js +++ b/jest.config.base.js @@ -23,4 +23,5 @@ export default { // Ignore '.js' at the end of imports; part of ESM support. '^(\\.{1,2}/.*)\\.js$': '$1', }, + prettierPath: createRequire(import.meta.url).resolve('prettier-2'), }; diff --git a/package-lock.json b/package-lock.json index f4afae1fa21..9c9eb34066f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "apollo-server-monorepo", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { @@ -13,44 +13,30 @@ "@apollo/client": "3.13.8", "@apollo/gateway": "2.11.2", "@apollo/subgraph": "2.11.2", - "@apollo/utils.createhash": "2.0.2", + "@apollo/utils.createhash": "3.0.0", "@changesets/changelog-github": "0.5.1", "@changesets/cli": "2.29.5", - "@graphql-codegen/cli": "3.3.1", - "@graphql-codegen/typescript-operations": "3.0.4", - "@graphql-tools/mock": "8.7.20", - "@graphql-tools/schema": "9.0.19", + "@graphql-codegen/cli": "5.0.6", + "@graphql-codegen/typescript-operations": "4.6.1", + "@graphql-tools/mock": "9.0.23", + "@graphql-tools/schema": "10.0.23", "@rollup/plugin-commonjs": "28.0.6", "@types/async-retry": "1.4.9", - "@types/compression": "1.8.1", + "@types/body-parser": "1.19.5", "@types/cors": "2.8.19", - "@types/express": "4.17.23", - "@types/express-serve-static-core": "4.19.6", - "@types/lodash": "4.17.19", + "@types/finalhandler": "1.2.3", "@types/lodash.sumby": "4.6.9", - "@types/lodash.xorby": "4.7.9", "@types/negotiator": "0.6.4", - "@types/node": "14.18.63", - "@types/node-fetch": "2.6.12", - "@types/qs-middleware": "1.0.4", - "@types/retry": "0.12.5", + "@types/node": "20.14.8", "@types/superagent": "8.1.9", "@types/supertest": "6.0.3", - "@types/test-listen": "1.1.2", - "@types/type-is": "1.6.7", - "@types/uuid": "9.0.8", "@types/whatwg-mimetype": "3.0.2", - "@typescript-eslint/eslint-plugin": "5.62.0", - "@typescript-eslint/parser": "5.62.0", - "@vendia/serverless-express": "4.12.6", "awaiting": "3.0.0", "codecov": "3.8.3", - "compression": "1.8.0", "cors": "2.8.5", - "cspell": "6.31.3", - "eslint": "8.57.1", + "cspell": "9.0.2", + "eslint": "9.27.0", "eslint-plugin-import": "2.32.0", - "express": "4.21.2", "graphql": "16.11.0", "graphql-subscriptions": "3.0.0", "graphql-tag": "2.12.6", @@ -61,36 +47,35 @@ "jest-mock-random": "1.1.1", "jest-serializer-html": "7.1.0", "lodash.sumby": "4.6.0", - "nock": "13.5.6", - "node-fetch": "2.7.0", + "nock": "14.0.4", "prettier": "3.6.2", - "qs-middleware": "1.0.3", + "prettier-2": "npm:prettier@2.8.8", "requisition": "1.7.0", - "rollup": "3.29.5", + "rollup": "4.41.0", "supertest": "7.1.1", - "test-listen": "1.1.0", - "ts-jest": "29.2.6", - "typescript": "5.4.5" + "ts-jest": "29.3.4", + "typescript": "5.8.3", + "typescript-eslint": "8.32.1" }, "engines": { - "node": ">=14.16.0", - "npm": ">=8.5.0" + "node": ">=20", + "npm": ">=8.19.2" } }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/@ampproject/remapping": { - "version": "2.1.2", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.0" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -102,8 +87,6 @@ }, "node_modules/@apollo/client": { "version": "3.13.8", - "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.13.8.tgz", - "integrity": "sha512-YM9lQpm0VfVco4DSyKooHS/fDTiKQcCHfxr7i3iL6a0kP/jNO5+4NFK6vtRDxaYisd5BrwOZHLJpPBnvRVpKPg==", "license": "MIT", "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", @@ -142,18 +125,6 @@ } } }, - "node_modules/@apollo/client/node_modules/@wry/trie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@wry/trie/-/trie-0.5.0.tgz", - "integrity": "sha512-FNoYzHawTMk/6KMQoEG5O4PuioX19UbwdQKF44yw0nLfOypfQdjtfZzo/UIJWAJ23sNIFbD1Ug9lbaDGMwbqQA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@apollo/composition": { "version": "2.11.2", "resolved": "https://registry.npmjs.org/@apollo/composition/-/composition-2.11.2.tgz", @@ -237,11 +208,22 @@ "graphql": "^16.5.0" } }, + "node_modules/@apollo/gateway/node_modules/@apollo/utils.createhash": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@apollo/utils.isnodelike": "^2.0.1", + "sha.js": "^2.4.11" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/@apollo/protobufjs": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.2.7.tgz", - "integrity": "sha512-Lahx5zntHPZia35myYDBRuF58tlwPskwHc5CWBZC/4bMKB6siTBWwtMrkqXcsNwQiFSzSx5hKdRPUmemrEp3Gg==", "hasInstallScript": true, + "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -353,22 +335,26 @@ "link": true }, "node_modules/@apollo/utils.createhash": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@apollo/utils.createhash/-/utils.createhash-2.0.2.tgz", - "integrity": "sha512-UkS3xqnVFLZ3JFpEmU/2cM2iKJotQXMoSTgxXsfQgXLC5gR1WaepoXagmYnPSA7Q/2cmnyTYK5OgAgoC4RULPg==", + "version": "3.0.0", "license": "MIT", "dependencies": { - "@apollo/utils.isnodelike": "^2.0.1", + "@apollo/utils.isnodelike": "^3.0.0", "sha.js": "^2.4.11" }, "engines": { - "node": ">=14" + "node": ">=16" + } + }, + "node_modules/@apollo/utils.createhash/node_modules/@apollo/utils.isnodelike": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=16" } }, "node_modules/@apollo/utils.dropunuseddefinitions": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@apollo/utils.dropunuseddefinitions/-/utils.dropunuseddefinitions-2.0.1.tgz", - "integrity": "sha512-EsPIBqsSt2BwDsv8Wu76LK5R1KtsVkNoO4b0M5aK0hx+dGg9xJXuqlr7Fo34Dl+y83jmzn+UvEW+t1/GP2melA==", + "license": "MIT", "engines": { "node": ">=14" }, @@ -378,26 +364,28 @@ }, "node_modules/@apollo/utils.fetcher": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.fetcher/-/utils.fetcher-2.0.0.tgz", - "integrity": "sha512-RC0twEwwBKbhk/y4B2X4YEciRG1xoKMgiPy5xQqNMd3pG78sR+ybctG/m7c/8+NaaQOS22UPUCBd6yS6WihBIg==", + "dev": true, + "license": "MIT", "engines": { "node": ">=14" } }, "node_modules/@apollo/utils.isnodelike": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@apollo/utils.isnodelike/-/utils.isnodelike-2.0.1.tgz", - "integrity": "sha512-w41XyepR+jBEuVpoRM715N2ZD0xMD413UiJx8w5xnAZD2ZkSJnMJBoIzauK83kJpSgNuR6ywbV29jG9NmxjK0Q==", + "dev": true, + "license": "MIT", "engines": { "node": ">=14" } }, "node_modules/@apollo/utils.keyvaluecache": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.keyvaluecache/-/utils.keyvaluecache-2.1.0.tgz", - "integrity": "sha512-WBNI4H1dGX2fHMk5j4cJo7mlXWn1X6DYCxQ50IvmI7Xv7Y4QKiA5EwbLOCITh9OIZQrVX7L0ASBSgTt6jYx/cg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@apollo/utils.keyvaluecache/-/utils.keyvaluecache-2.1.1.tgz", + "integrity": "sha512-qVo5PvUUMD8oB9oYvq4ViCjYAMWnZ5zZwEjNF37L2m1u528x5mueMlU+Cr1UinupCgdB78g+egA1G98rbJ03Vw==", + "dev": true, + "license": "MIT", "dependencies": { - "@apollo/utils.logger": "^2.0.0", + "@apollo/utils.logger": "^2.0.1", "lru-cache": "^7.14.1" }, "engines": { @@ -408,22 +396,25 @@ "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/@apollo/utils.logger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.logger/-/utils.logger-2.0.0.tgz", - "integrity": "sha512-o8qYwgV2sYg+PcGKIfwAZaZsQOTEfV8q3mH7Pw8GB/I/Uh2L9iaHdpiKuR++j7oe1K87lFm0z/JAezMOR9CGhg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@apollo/utils.logger/-/utils.logger-2.0.1.tgz", + "integrity": "sha512-YuplwLHaHf1oviidB7MxnCXAdHp3IqYV8n0momZ3JfLniae92eYqMIx+j5qJFX6WKJPs6q7bczmV4lXIsTu5Pg==", + "dev": true, + "license": "MIT", "engines": { "node": ">=14" } }, "node_modules/@apollo/utils.printwithreducedwhitespace": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@apollo/utils.printwithreducedwhitespace/-/utils.printwithreducedwhitespace-2.0.1.tgz", - "integrity": "sha512-9M4LUXV/fQBh8vZWlLvb/HyyhjJ77/I5ZKu+NBWV/BmYGyRmoEP9EVAy7LCVoY3t8BDcyCAGfxJaLFCSuQkPUg==", + "license": "MIT", "engines": { "node": ">=14" }, @@ -433,8 +424,7 @@ }, "node_modules/@apollo/utils.removealiases": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@apollo/utils.removealiases/-/utils.removealiases-2.0.1.tgz", - "integrity": "sha512-0joRc2HBO4u594Op1nev+mUF6yRnxoUH64xw8x3bX7n8QBDYdeYgY4tF0vJReTy+zdn2xv6fMsquATSgC722FA==", + "license": "MIT", "engines": { "node": ">=14" }, @@ -444,8 +434,7 @@ }, "node_modules/@apollo/utils.sortast": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@apollo/utils.sortast/-/utils.sortast-2.0.1.tgz", - "integrity": "sha512-eciIavsWpJ09za1pn37wpsCGrQNXUhM0TktnZmHwO+Zy9O4fu/WdB4+5BvVhFiZYOXvfjzJUcc+hsIV8RUOtMw==", + "license": "MIT", "dependencies": { "lodash.sortby": "^4.7.0" }, @@ -458,8 +447,7 @@ }, "node_modules/@apollo/utils.stripsensitiveliterals": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@apollo/utils.stripsensitiveliterals/-/utils.stripsensitiveliterals-2.0.1.tgz", - "integrity": "sha512-QJs7HtzXS/JIPMKWimFnUMK7VjkGQTzqD9bKD1h3iuPAqLsxd0mUNVbkYOPTsDhUKgcvUOfOqOJWYohAKMvcSA==", + "license": "MIT", "engines": { "node": ">=14" }, @@ -469,8 +457,7 @@ }, "node_modules/@apollo/utils.usagereporting": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.usagereporting/-/utils.usagereporting-2.1.0.tgz", - "integrity": "sha512-LPSlBrn+S17oBy5eWkrRSGb98sWmnEzo3DPTZgp8IQc8sJe0prDgDuppGq4NeQlpoqEHz0hQeYHAOA0Z3aQsxQ==", + "license": "MIT", "dependencies": { "@apollo/usage-reporting-protobuf": "^4.1.0", "@apollo/utils.dropunuseddefinitions": "^2.0.1", @@ -487,36 +474,29 @@ } }, "node_modules/@apollo/utils.withrequired": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.withrequired/-/utils.withrequired-2.0.0.tgz", - "integrity": "sha512-+djpTu6AEE/A1etryZs9tmXRyDY6XXGe3G29MS/LB09uHq3pcl3n4Q5lvDTL5JWKuJixrulg5djePLDAooG8dQ==", + "version": "3.0.0", + "license": "MIT", "engines": { - "node": ">=14" + "node": ">=16" } }, "node_modules/@ardatan/relay-compiler": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@ardatan/relay-compiler/-/relay-compiler-12.0.0.tgz", - "integrity": "sha512-9anThAaj1dQr6IGmzBMcfzOQKTa5artjuPmw8NYK/fiGEMjADbSguBY2FMDykt+QhilR3wc9VA/3yVju7JHg7Q==", + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@ardatan/relay-compiler/-/relay-compiler-12.0.3.tgz", + "integrity": "sha512-mBDFOGvAoVlWaWqs3hm1AciGHSQE1rqFc/liZTyYz/Oek9yZdT5H26pH2zAFuEiTiBVPPyMuqf5VjOFPI2DGsQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.14.0", - "@babel/generator": "^7.14.0", - "@babel/parser": "^7.14.0", - "@babel/runtime": "^7.0.0", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.0.0", - "babel-preset-fbjs": "^3.4.0", + "@babel/generator": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/runtime": "^7.26.10", "chalk": "^4.0.0", "fb-watchman": "^2.0.0", - "fbjs": "^3.0.0", - "glob": "^7.1.1", "immutable": "~3.7.6", "invariant": "^2.2.4", "nullthrows": "^1.1.1", "relay-runtime": "12.0.0", - "signedsource": "^1.0.0", - "yargs": "^15.3.1" + "signedsource": "^1.0.0" }, "bin": { "relay-compiler": "bin/relay-compiler" @@ -525,77 +505,10 @@ "graphql": "*" } }, - "node_modules/@ardatan/relay-compiler/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/@ardatan/relay-compiler/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@ardatan/relay-compiler/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/@ardatan/relay-compiler/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@ardatan/relay-compiler/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@ardatan/sync-fetch": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@ardatan/sync-fetch/-/sync-fetch-0.0.1.tgz", - "integrity": "sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA==", "dev": true, + "license": "MIT", "dependencies": { "node-fetch": "^2.6.1" }, @@ -604,100 +517,43 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.27.1", + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/compat-data": { - "version": "7.20.10", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz", - "integrity": "sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==", + "version": "7.27.2", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.17.9", - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.9", - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-module-transforms": "^7.17.7", - "@babel/helpers": "^7.17.9", - "@babel/parser": "^7.17.9", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.9", - "@babel/types": "^7.17.0", - "convert-source-map": "^1.7.0", + "version": "7.27.1", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.1", + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helpers": "^7.27.1", + "@babel/parser": "^7.27.1", + "@babel/template": "^7.27.1", + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -708,66 +564,49 @@ } }, "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", + "version": "6.3.1", "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", - "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", - "dependencies": { - "@babel/types": "^7.23.0", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dev": true, + "version": "7.27.1", + "license": "MIT", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/parser": "^7.27.1", + "@babel/types": "^7.27.1", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", - "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", + "version": "7.27.2", + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", - "semver": "^6.3.0" + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.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-compilation-targets/node_modules/semver": { - "version": "6.3.0", + "version": "6.3.1", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -775,23 +614,26 @@ }, "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "license": "ISC" }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.4.tgz", - "integrity": "sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==", - "dev": true, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-member-expression-to-functions": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/helper-split-export-declaration": "^7.18.6" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.27.1", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -800,386 +642,127 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dependencies": { - "@babel/types": "^7.22.5" - }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", - "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.21.0" - }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "node_modules/@babel/helpers": { + "version": "7.27.1", + "license": "MIT", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", - "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.2", - "@babel/types": "^7.21.2" + "node_modules/@babel/parser": { + "version": "7.27.2", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "bin": { + "parser": "bin/babel-parser.js" }, "engines": { - "node": ">=6.9.0" + "node": ">=6.0.0" } }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "dev": true, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "license": "MIT", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "engines": { - "node": ">=6.9.0" + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", - "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", - "dev": true, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/helper-plugin-utils": "^7.12.13" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.20.2" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", - "dev": true, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "license": "MIT", "dependencies": { - "@babel/types": "^7.20.0" + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/helper-string-parser": { + "node_modules/@babel/plugin-syntax-jsx": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.17.9", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.9", - "@babel/types": "^7.17.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", - "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-flow": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.21.4.tgz", - "integrity": "sha512-l9xd3N+XG4fZRxEP3vXdK6RW7vN1Uf5dxzRC/09wV86wqZ/YYQooBIGNsiRdfNR3/q2/5pPzV4B54J/9ctX5jw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1263,8 +846,7 @@ }, "node_modules/@babel/plugin-syntax-typescript": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", - "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1275,432 +857,99 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", - "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", + "node_modules/@babel/runtime": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.1.tgz", + "integrity": "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", - "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", - "dev": true, + "node_modules/@babel/template": { + "version": "7.27.2", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", - "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", - "dev": true, + "node_modules/@babel/traverse": { + "version": "7.27.1", + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.1", + "@babel/parser": "^7.27.1", + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", - "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", - "dev": true, + "node_modules/@babel/types": { + "version": "7.27.1", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/template": "^7.20.7" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz", - "integrity": "sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==", + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "license": "MIT" + }, + "node_modules/@changesets/apply-release-plan": { + "version": "7.0.12", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@changesets/config": "^3.1.1", + "@changesets/get-version-range-type": "^0.4.0", + "@changesets/git": "^3.0.4", + "@changesets/should-skip-package": "^0.1.2", + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3", + "detect-indent": "^6.0.0", + "fs-extra": "^7.0.1", + "lodash.startcase": "^4.4.0", + "outdent": "^0.5.0", + "prettier": "^2.7.1", + "resolve-from": "^5.0.0", + "semver": "^7.5.3" } }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.21.0.tgz", - "integrity": "sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==", + "node_modules/@changesets/apply-release-plan/node_modules/prettier": { + "version": "2.8.8", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-flow": "^7.18.6" + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" }, "engines": { - "node": ">=6.9.0" + "node": ">=10.13.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz", - "integrity": "sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==", + "node_modules/@changesets/assemble-release-plan": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.9.tgz", + "integrity": "sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz", - "integrity": "sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.21.2", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-simple-access": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz", - "integrity": "sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz", - "integrity": "sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", - "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.6.tgz", - "integrity": "sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", - "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.0", - "@babel/types": "^7.23.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" - }, - "node_modules/@changesets/apply-release-plan": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.0.12.tgz", - "integrity": "sha512-EaET7As5CeuhTzvXTQCRZeBUcisoYPDDcXvgTE/2jmmypKp0RC7LxKj/yzqeh/1qFTZI7oDGFcL1PHRuQuketQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@changesets/config": "^3.1.1", - "@changesets/get-version-range-type": "^0.4.0", - "@changesets/git": "^3.0.4", - "@changesets/should-skip-package": "^0.1.2", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "detect-indent": "^6.0.0", - "fs-extra": "^7.0.1", - "lodash.startcase": "^4.4.0", - "outdent": "^0.5.0", - "prettier": "^2.7.1", - "resolve-from": "^5.0.0", - "semver": "^7.5.3" - } - }, - "node_modules/@changesets/apply-release-plan/node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/@changesets/assemble-release-plan": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.9.tgz", - "integrity": "sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==", - "dev": true, - "license": "MIT", + "license": "MIT", "dependencies": { "@changesets/errors": "^0.2.0", "@changesets/get-dependents-graph": "^2.1.3", @@ -1712,8 +961,6 @@ }, "node_modules/@changesets/changelog-git": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.2.1.tgz", - "integrity": "sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1722,8 +969,6 @@ }, "node_modules/@changesets/changelog-github": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@changesets/changelog-github/-/changelog-github-0.5.1.tgz", - "integrity": "sha512-BVuHtF+hrhUScSoHnJwTELB4/INQxVFc+P/Qdt20BLiBFIHFJDDUaGsZw+8fQeJTRP5hJZrzpt3oZWh0G19rAQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1734,8 +979,6 @@ }, "node_modules/@changesets/changelog-github/node_modules/dotenv": { "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -1784,8 +1027,6 @@ }, "node_modules/@changesets/cli/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", "dependencies": { @@ -1800,8 +1041,6 @@ }, "node_modules/@changesets/config": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@changesets/config/-/config-3.1.1.tgz", - "integrity": "sha512-bd+3Ap2TKXxljCggI0mKPfzCQKeV/TU4yO2h2C6vAihIo8tzseAn2e7klSuiyYYXvgu53zMN1OeYMIQkaQoWnA==", "dev": true, "license": "MIT", "dependencies": { @@ -1816,17 +1055,14 @@ }, "node_modules/@changesets/errors": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@changesets/errors/-/errors-0.2.0.tgz", - "integrity": "sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==", "dev": true, + "license": "MIT", "dependencies": { "extendable-error": "^0.1.5" } }, "node_modules/@changesets/get-dependents-graph": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-2.1.3.tgz", - "integrity": "sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1838,9 +1074,8 @@ }, "node_modules/@changesets/get-github-info": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@changesets/get-github-info/-/get-github-info-0.6.0.tgz", - "integrity": "sha512-v/TSnFVXI8vzX9/w3DU2Ol+UlTZcu3m0kXTjTT4KlAdwSvwutcByYwyYn9hwerPWfPkT2JfpoX0KgvCEi8Q/SA==", "dev": true, + "license": "MIT", "dependencies": { "dataloader": "^1.4.0", "node-fetch": "^2.5.0" @@ -1868,14 +1103,11 @@ }, "node_modules/@changesets/get-version-range-type": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz", - "integrity": "sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@changesets/git": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@changesets/git/-/git-3.0.4.tgz", - "integrity": "sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==", "dev": true, "license": "MIT", "dependencies": { @@ -1888,8 +1120,6 @@ }, "node_modules/@changesets/logger": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@changesets/logger/-/logger-0.1.1.tgz", - "integrity": "sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==", "dev": true, "license": "MIT", "dependencies": { @@ -1962,8 +1192,6 @@ }, "node_modules/@changesets/should-skip-package": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@changesets/should-skip-package/-/should-skip-package-0.1.2.tgz", - "integrity": "sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==", "dev": true, "license": "MIT", "dependencies": { @@ -1973,15 +1201,11 @@ }, "node_modules/@changesets/types": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@changesets/types/-/types-6.1.0.tgz", - "integrity": "sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==", "dev": true, "license": "MIT" }, "node_modules/@changesets/write": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@changesets/write/-/write-0.4.0.tgz", - "integrity": "sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1993,9 +1217,8 @@ }, "node_modules/@changesets/write/node_modules/prettier": { "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin-prettier.js" }, @@ -2006,505 +1229,640 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/@codegenie/serverless-express": { - "version": "4.12.5", - "resolved": "https://registry.npmjs.org/@codegenie/serverless-express/-/serverless-express-4.12.5.tgz", - "integrity": "sha512-CRXqPNzI1gJHI+xfoG1FqbpVo9YYAPc7OCdQu0lDMejPF3OrYLPsk6y1lQ3NtEipK5d0DZTpbiP9x861J+UquA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, "node_modules/@cspell/cspell-bundled-dicts": { - "version": "6.31.3", - "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-6.31.3.tgz", - "integrity": "sha512-KXy3qKWYzXOGYwqOGMCXHem3fV39iEmoKLiNhoWWry/SFdvAafmeY+LIDcQTXAcOQLkMDCwP2/rY/NadcWnrjg==", - "dev": true, - "dependencies": { - "@cspell/dict-ada": "^4.0.1", - "@cspell/dict-aws": "^3.0.0", - "@cspell/dict-bash": "^4.1.1", - "@cspell/dict-companies": "^3.0.9", - "@cspell/dict-cpp": "^5.0.2", - "@cspell/dict-cryptocurrencies": "^3.0.1", - "@cspell/dict-csharp": "^4.0.2", - "@cspell/dict-css": "^4.0.5", - "@cspell/dict-dart": "^2.0.2", - "@cspell/dict-django": "^4.0.2", - "@cspell/dict-docker": "^1.1.6", - "@cspell/dict-dotnet": "^5.0.0", - "@cspell/dict-elixir": "^4.0.2", - "@cspell/dict-en_us": "^4.3.2", - "@cspell/dict-en-common-misspellings": "^1.0.2", - "@cspell/dict-en-gb": "1.1.33", - "@cspell/dict-filetypes": "^3.0.0", - "@cspell/dict-fonts": "^3.0.2", - "@cspell/dict-fullstack": "^3.1.5", - "@cspell/dict-gaming-terms": "^1.0.4", - "@cspell/dict-git": "^2.0.0", - "@cspell/dict-golang": "^6.0.1", - "@cspell/dict-haskell": "^4.0.1", - "@cspell/dict-html": "^4.0.3", - "@cspell/dict-html-symbol-entities": "^4.0.0", - "@cspell/dict-java": "^5.0.5", - "@cspell/dict-k8s": "^1.0.1", - "@cspell/dict-latex": "^4.0.0", - "@cspell/dict-lorem-ipsum": "^3.0.0", - "@cspell/dict-lua": "^4.0.1", - "@cspell/dict-node": "^4.0.2", - "@cspell/dict-npm": "^5.0.5", - "@cspell/dict-php": "^4.0.1", - "@cspell/dict-powershell": "^5.0.1", - "@cspell/dict-public-licenses": "^2.0.2", - "@cspell/dict-python": "^4.0.2", - "@cspell/dict-r": "^2.0.1", - "@cspell/dict-ruby": "^5.0.0", - "@cspell/dict-rust": "^4.0.1", - "@cspell/dict-scala": "^5.0.0", - "@cspell/dict-software-terms": "^3.1.6", - "@cspell/dict-sql": "^2.1.0", - "@cspell/dict-svelte": "^1.0.2", - "@cspell/dict-swift": "^2.0.1", - "@cspell/dict-typescript": "^3.1.1", - "@cspell/dict-vue": "^3.0.0" - }, - "engines": { - "node": ">=14" + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-9.0.2.tgz", + "integrity": "sha512-gGFSfVIvYtO95O3Yhcd1o0sOZHjVaCPwYq3MnaNsBBzaMviIZli4FZW9Z+XNKsgo1zRzbl2SdOXJPP0VcyAY0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/dict-ada": "^4.1.0", + "@cspell/dict-al": "^1.1.0", + "@cspell/dict-aws": "^4.0.10", + "@cspell/dict-bash": "^4.2.0", + "@cspell/dict-companies": "^3.2.1", + "@cspell/dict-cpp": "^6.0.8", + "@cspell/dict-cryptocurrencies": "^5.0.4", + "@cspell/dict-csharp": "^4.0.6", + "@cspell/dict-css": "^4.0.17", + "@cspell/dict-dart": "^2.3.0", + "@cspell/dict-data-science": "^2.0.8", + "@cspell/dict-django": "^4.1.4", + "@cspell/dict-docker": "^1.1.14", + "@cspell/dict-dotnet": "^5.0.9", + "@cspell/dict-elixir": "^4.0.7", + "@cspell/dict-en_us": "^4.4.8", + "@cspell/dict-en-common-misspellings": "^2.0.11", + "@cspell/dict-en-gb-mit": "^3.0.6", + "@cspell/dict-filetypes": "^3.0.12", + "@cspell/dict-flutter": "^1.1.0", + "@cspell/dict-fonts": "^4.0.4", + "@cspell/dict-fsharp": "^1.1.0", + "@cspell/dict-fullstack": "^3.2.6", + "@cspell/dict-gaming-terms": "^1.1.1", + "@cspell/dict-git": "^3.0.5", + "@cspell/dict-golang": "^6.0.21", + "@cspell/dict-google": "^1.0.8", + "@cspell/dict-haskell": "^4.0.5", + "@cspell/dict-html": "^4.0.11", + "@cspell/dict-html-symbol-entities": "^4.0.3", + "@cspell/dict-java": "^5.0.11", + "@cspell/dict-julia": "^1.1.0", + "@cspell/dict-k8s": "^1.0.10", + "@cspell/dict-kotlin": "^1.1.0", + "@cspell/dict-latex": "^4.0.3", + "@cspell/dict-lorem-ipsum": "^4.0.4", + "@cspell/dict-lua": "^4.0.7", + "@cspell/dict-makefile": "^1.0.4", + "@cspell/dict-markdown": "^2.0.10", + "@cspell/dict-monkeyc": "^1.0.10", + "@cspell/dict-node": "^5.0.7", + "@cspell/dict-npm": "^5.2.3", + "@cspell/dict-php": "^4.0.14", + "@cspell/dict-powershell": "^5.0.14", + "@cspell/dict-public-licenses": "^2.0.13", + "@cspell/dict-python": "^4.2.18", + "@cspell/dict-r": "^2.1.0", + "@cspell/dict-ruby": "^5.0.8", + "@cspell/dict-rust": "^4.0.11", + "@cspell/dict-scala": "^5.0.7", + "@cspell/dict-shell": "^1.1.0", + "@cspell/dict-software-terms": "^5.0.9", + "@cspell/dict-sql": "^2.2.0", + "@cspell/dict-svelte": "^1.0.6", + "@cspell/dict-swift": "^2.0.5", + "@cspell/dict-terraform": "^1.1.1", + "@cspell/dict-typescript": "^3.2.1", + "@cspell/dict-vue": "^3.0.4" + }, + "engines": { + "node": ">=20" } }, "node_modules/@cspell/cspell-json-reporter": { - "version": "6.31.3", - "resolved": "https://registry.npmjs.org/@cspell/cspell-json-reporter/-/cspell-json-reporter-6.31.3.tgz", - "integrity": "sha512-ZJwj2vT4lxncYxduXcxy0dCvjjMvXIfphbLSCN5CXvufrtupB4KlcjZUnOofCi4pfpp8qocCSn1lf2DU9xgUXA==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@cspell/cspell-json-reporter/-/cspell-json-reporter-9.0.2.tgz", + "integrity": "sha512-Hy9hKG53cFhLwiSZuRVAd5YfBb5pPj3V2Val69TW1j4+sy3podewqm4sb3RqoB01LcDkLI/mOeMwHz1xyIjfoA==", "dev": true, + "license": "MIT", "dependencies": { - "@cspell/cspell-types": "6.31.3" + "@cspell/cspell-types": "9.0.2" }, "engines": { - "node": ">=14" + "node": ">=20" } }, "node_modules/@cspell/cspell-pipe": { - "version": "6.31.3", - "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-6.31.3.tgz", - "integrity": "sha512-Lv/y4Ya/TJyU1pf66yl1te7LneFZd3lZg1bN5oe1cPrKSmfWdiX48v7plTRecWd/OWyLGd0yN807v79A+/0W7A==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-9.0.2.tgz", + "integrity": "sha512-M1e+u3dyGCJicSZ16xmoVut4pI8ynfqILYiDAYC9+rbn04wJdnWD46ElIZnRriFXx7fu/UsUEexu3lFaqKVGEg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=14" + "node": ">=20" + } + }, + "node_modules/@cspell/cspell-resolver": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@cspell/cspell-resolver/-/cspell-resolver-9.0.2.tgz", + "integrity": "sha512-JkMQb+hcEyZ2ALvEeJvfxoIblRpZlnek50Ew5sLSSZciRuhNvQZS5+Apwt1GXHitTo8/bqXFxABNP36O++YAwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "global-directory": "^4.0.1" + }, + "engines": { + "node": ">=20" } }, "node_modules/@cspell/cspell-service-bus": { - "version": "6.31.3", - "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-6.31.3.tgz", - "integrity": "sha512-x5j8j3n39KN8EXOAlv75CpircdpF5WEMCC5pcO916o6GBmJBy8SrdzdsBGJhVcYGGilqy6pf8R9RCZ3yAmG8gQ==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-9.0.2.tgz", + "integrity": "sha512-OjfZ3vnBjmkctC9xs/87/9bx/3kZYUPJkWsZxzfH4rla/HeIUrm9UZlDqCibhWifhPHrDdV9hDW5QEGXkYR2hw==", "dev": true, + "license": "MIT", "engines": { - "node": ">=14" + "node": ">=20" } }, "node_modules/@cspell/cspell-types": { - "version": "6.31.3", - "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-6.31.3.tgz", - "integrity": "sha512-wZ+t+lUsQJB65M31btZM4fH3K1CkRgE8pSeTiCwxYcnCL19pi4TMcEEMKdO8yFZMdocW4B7VRwzxNoQMw2ewBg==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-9.0.2.tgz", + "integrity": "sha512-RioULo34qbUXuCCLi/DCDxdb++Nm1ospNXzVkKZrSvTG4AjkC95ZhfIOp9jbGSWqL2PGdaHVXgG77EyQbAk5xA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=14" + "node": ">=20" } }, "node_modules/@cspell/dict-ada": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-ada/-/dict-ada-4.0.2.tgz", - "integrity": "sha512-0kENOWQeHjUlfyId/aCM/mKXtkEgV0Zu2RhUXCBr4hHo9F9vph+Uu8Ww2b0i5a4ZixoIkudGA+eJvyxrG1jUpA==", - "dev": true + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-ada/-/dict-ada-4.1.0.tgz", + "integrity": "sha512-7SvmhmX170gyPd+uHXrfmqJBY5qLcCX8kTGURPVeGxmt8XNXT75uu9rnZO+jwrfuU2EimNoArdVy5GZRGljGNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-al": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-al/-/dict-al-1.1.0.tgz", + "integrity": "sha512-PtNI1KLmYkELYltbzuoztBxfi11jcE9HXBHCpID2lou/J4VMYKJPNqe4ZjVzSI9NYbMnMnyG3gkbhIdx66VSXg==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-aws": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-aws/-/dict-aws-3.0.0.tgz", - "integrity": "sha512-O1W6nd5y3Z00AMXQMzfiYrIJ1sTd9fB1oLr+xf/UD7b3xeHeMeYE2OtcWbt9uyeHim4tk+vkSTcmYEBKJgS5bQ==", - "dev": true + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@cspell/dict-aws/-/dict-aws-4.0.10.tgz", + "integrity": "sha512-0qW4sI0GX8haELdhfakQNuw7a2pnWXz3VYQA2MpydH2xT2e6EN9DWFpKAi8DfcChm8MgDAogKkoHtIo075iYng==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-bash": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-bash/-/dict-bash-4.1.1.tgz", - "integrity": "sha512-8czAa/Mh96wu2xr0RXQEGMTBUGkTvYn/Pb0o+gqOO1YW+poXGQc3gx0YPqILDryP/KCERrNvkWUJz3iGbvwC2A==", - "dev": true - }, - "node_modules/@cspell/dict-companies": { - "version": "3.0.19", - "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.0.19.tgz", - "integrity": "sha512-hO7rS4DhFA333qyvf89wIVoclCtXe/2sftY6aS0oMIH1bMZLjLx2B2sQJj6dCiu6gG/By1S9YZ0fXabiPk2Tkg==", - "dev": true - }, - "node_modules/@cspell/dict-cpp": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-5.0.4.tgz", - "integrity": "sha512-Vmz/CCb2d91ES5juaO8+CFWeTa2AFsbpR8bkCPJq+P8cRP16+37tY0zNXEBSK/1ur4MakaRf76jeQBijpZxw0Q==", - "dev": true + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-bash/-/dict-bash-4.2.0.tgz", + "integrity": "sha512-HOyOS+4AbCArZHs/wMxX/apRkjxg6NDWdt0jF9i9XkvJQUltMwEhyA2TWYjQ0kssBsnof+9amax2lhiZnh3kCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/dict-shell": "1.1.0" + } + }, + "node_modules/@cspell/dict-companies": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.2.1.tgz", + "integrity": "sha512-ryaeJ1KhTTKL4mtinMtKn8wxk6/tqD4vX5tFP+Hg89SiIXmbMk5vZZwVf+eyGUWJOyw5A1CVj9EIWecgoi+jYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-cpp": { + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-6.0.8.tgz", + "integrity": "sha512-BzurRZilWqaJt32Gif6/yCCPi+FtrchjmnehVEIFzbWyeBd/VOUw77IwrEzehZsu5cRU91yPWuWp5fUsKfDAXA==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-cryptocurrencies": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-cryptocurrencies/-/dict-cryptocurrencies-3.0.1.tgz", - "integrity": "sha512-Tdlr0Ahpp5yxtwM0ukC13V6+uYCI0p9fCRGMGZt36rWv8JQZHIuHfehNl7FB/Qc09NCF7p5ep0GXbL+sVTd/+w==", - "dev": true + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-cryptocurrencies/-/dict-cryptocurrencies-5.0.4.tgz", + "integrity": "sha512-6iFu7Abu+4Mgqq08YhTKHfH59mpMpGTwdzDB2Y8bbgiwnGFCeoiSkVkgLn1Kel2++hYcZ8vsAW/MJS9oXxuMag==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-csharp": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-csharp/-/dict-csharp-4.0.2.tgz", - "integrity": "sha512-1JMofhLK+4p4KairF75D3A924m5ERMgd1GvzhwK2geuYgd2ZKuGW72gvXpIV7aGf52E3Uu1kDXxxGAiZ5uVG7g==", - "dev": true + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-csharp/-/dict-csharp-4.0.6.tgz", + "integrity": "sha512-w/+YsqOknjQXmIlWDRmkW+BHBPJZ/XDrfJhZRQnp0wzpPOGml7W0q1iae65P2AFRtTdPKYmvSz7AL5ZRkCnSIw==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-css": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.6.tgz", - "integrity": "sha512-2Lo8W2ezHmGgY8cWFr4RUwnjbndna5mokpCK/DuxGILQnuajR0J31ANQOXj/8iZM2phFB93ZzMNk/0c04TDfSQ==", - "dev": true + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.17.tgz", + "integrity": "sha512-2EisRLHk6X/PdicybwlajLGKF5aJf4xnX2uuG5lexuYKt05xV/J/OiBADmi8q9obhxf1nesrMQbqAt+6CsHo/w==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-dart": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-dart/-/dict-dart-2.0.3.tgz", - "integrity": "sha512-cLkwo1KT5CJY5N5RJVHks2genFkNCl/WLfj+0fFjqNR+tk3tBI1LY7ldr9piCtSFSm4x9pO1x6IV3kRUY1lLiw==", - "dev": true + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-dart/-/dict-dart-2.3.0.tgz", + "integrity": "sha512-1aY90lAicek8vYczGPDKr70pQSTQHwMFLbmWKTAI6iavmb1fisJBS1oTmMOKE4ximDf86MvVN6Ucwx3u/8HqLg==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-data-science": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@cspell/dict-data-science/-/dict-data-science-1.0.10.tgz", - "integrity": "sha512-7ZsRCnW0f4Bdo6Cqq8V4gHr8K58h+MP8majcDeMNhpMFUPiiSnvKsDuG9V5jciI/0t+lptPrZwGGIVEDF4Kqtg==", - "dev": true + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@cspell/dict-data-science/-/dict-data-science-2.0.8.tgz", + "integrity": "sha512-uyAtT+32PfM29wRBeAkUSbkytqI8bNszNfAz2sGPtZBRmsZTYugKMEO9eDjAIE/pnT9CmbjNuoiXhk+Ss4fCOg==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-django": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-django/-/dict-django-4.1.0.tgz", - "integrity": "sha512-bKJ4gPyrf+1c78Z0Oc4trEB9MuhcB+Yg+uTTWsvhY6O2ncFYbB/LbEZfqhfmmuK/XJJixXfI1laF2zicyf+l0w==", - "dev": true + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-django/-/dict-django-4.1.4.tgz", + "integrity": "sha512-fX38eUoPvytZ/2GA+g4bbdUtCMGNFSLbdJJPKX2vbewIQGfgSFJKY56vvcHJKAvw7FopjvgyS/98Ta9WN1gckg==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-docker": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@cspell/dict-docker/-/dict-docker-1.1.7.tgz", - "integrity": "sha512-XlXHAr822euV36GGsl2J1CkBIVg3fZ6879ZOg5dxTIssuhUOCiV2BuzKZmt6aIFmcdPmR14+9i9Xq+3zuxeX0A==", - "dev": true + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/@cspell/dict-docker/-/dict-docker-1.1.14.tgz", + "integrity": "sha512-p6Qz5mokvcosTpDlgSUREdSbZ10mBL3ndgCdEKMqjCSZJFdfxRdNdjrGER3lQ6LMq5jGr1r7nGXA0gvUJK80nw==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-dotnet": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-dotnet/-/dict-dotnet-5.0.0.tgz", - "integrity": "sha512-EOwGd533v47aP5QYV8GlSSKkmM9Eq8P3G/eBzSpH3Nl2+IneDOYOBLEUraHuiCtnOkNsz0xtZHArYhAB2bHWAw==", - "dev": true + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/@cspell/dict-dotnet/-/dict-dotnet-5.0.9.tgz", + "integrity": "sha512-JGD6RJW5sHtO5lfiJl11a5DpPN6eKSz5M1YBa1I76j4dDOIqgZB6rQexlDlK1DH9B06X4GdDQwdBfnpAB0r2uQ==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-elixir": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-elixir/-/dict-elixir-4.0.3.tgz", - "integrity": "sha512-g+uKLWvOp9IEZvrIvBPTr/oaO6619uH/wyqypqvwpmnmpjcfi8+/hqZH8YNKt15oviK8k4CkINIqNhyndG9d9Q==", - "dev": true + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@cspell/dict-elixir/-/dict-elixir-4.0.7.tgz", + "integrity": "sha512-MAUqlMw73mgtSdxvbAvyRlvc3bYnrDqXQrx5K9SwW8F7fRYf9V4vWYFULh+UWwwkqkhX9w03ZqFYRTdkFku6uA==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-en_us": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.3.6.tgz", - "integrity": "sha512-odhgsjNZI9BtEOJdvqfAuv/3yz5aB1ngfBNaph7WSnYVt//9e3fhrElZ6/pIIkoyuGgeQPwz1fXt+tMgcnLSEQ==", - "dev": true + "version": "4.4.9", + "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.4.9.tgz", + "integrity": "sha512-5gjqpUwhE+qP9A9wxD1+MGGJ3DNqTgSpiOsS10cGJfV4p/Z194XkDUZrUrJsnJA/3fsCZHAzcNWh8m0bw1v++A==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-en-common-misspellings": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-1.0.2.tgz", - "integrity": "sha512-jg7ZQZpZH7+aAxNBlcAG4tGhYF6Ksy+QS5Df73Oo+XyckBjC9QS+PrRwLTeYoFIgXy5j3ICParK5r3MSSoL4gw==", - "dev": true + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.0.11.tgz", + "integrity": "sha512-xFQjeg0wFHh9sFhshpJ+5BzWR1m9Vu8pD0CGPkwZLK9oii8AD8RXNchabLKy/O5VTLwyqPOi9qpyp1cxm3US4Q==", + "dev": true, + "license": "CC BY-SA 4.0" }, - "node_modules/@cspell/dict-en-gb": { - "version": "1.1.33", - "resolved": "https://registry.npmjs.org/@cspell/dict-en-gb/-/dict-en-gb-1.1.33.tgz", - "integrity": "sha512-tKSSUf9BJEV+GJQAYGw5e+ouhEe2ZXE620S7BLKe3ZmpnjlNG9JqlnaBhkIMxKnNFkLY2BP/EARzw31AZnOv4g==", - "dev": true + "node_modules/@cspell/dict-en-gb-mit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@cspell/dict-en-gb-mit/-/dict-en-gb-mit-3.0.7.tgz", + "integrity": "sha512-fdZbu4jbkzjjTO0jPBGINwQwzNFGapMnhH9D4mDa4UzGGyQFVRx6n/FFwxnfs7CXbuCV6UFSwjHZEAB8pfWn0A==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-filetypes": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-filetypes/-/dict-filetypes-3.0.1.tgz", - "integrity": "sha512-8z8mY1IbrTyTRumx2vvD9yzRhNMk9SajM/GtI5hdMM2pPpNSp25bnuauzjRf300eqlqPY2MNb5MmhBFO014DJw==", - "dev": true + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@cspell/dict-filetypes/-/dict-filetypes-3.0.12.tgz", + "integrity": "sha512-+ds5wgNdlUxuJvhg8A1TjuSpalDFGCh7SkANCWvIplg6QZPXL4j83lqxP7PgjHpx7PsBUS7vw0aiHPjZy9BItw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-flutter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-flutter/-/dict-flutter-1.1.0.tgz", + "integrity": "sha512-3zDeS7zc2p8tr9YH9tfbOEYfopKY/srNsAa+kE3rfBTtQERAZeOhe5yxrnTPoufctXLyuUtcGMUTpxr3dO0iaA==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-fonts": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-fonts/-/dict-fonts-3.0.2.tgz", - "integrity": "sha512-Z5QdbgEI7DV+KPXrAeDA6dDm/vTzyaW53SGlKqz6PI5VhkOjgkBXv3YtZjnxMZ4dY2ZIqq+RUK6qa9Pi8rQdGQ==", - "dev": true + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-fonts/-/dict-fonts-4.0.4.tgz", + "integrity": "sha512-cHFho4hjojBcHl6qxidl9CvUb492IuSk7xIf2G2wJzcHwGaCFa2o3gRcxmIg1j62guetAeDDFELizDaJlVRIOg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-fsharp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-fsharp/-/dict-fsharp-1.1.0.tgz", + "integrity": "sha512-oguWmHhGzgbgbEIBKtgKPrFSVAFtvGHaQS0oj+vacZqMObwkapcTGu7iwf4V3Bc2T3caf0QE6f6rQfIJFIAVsw==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-fullstack": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-fullstack/-/dict-fullstack-3.1.5.tgz", - "integrity": "sha512-6ppvo1dkXUZ3fbYn/wwzERxCa76RtDDl5Afzv2lijLoijGGUw5yYdLBKJnx8PJBGNLh829X352ftE7BElG4leA==", - "dev": true + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-fullstack/-/dict-fullstack-3.2.6.tgz", + "integrity": "sha512-cSaq9rz5RIU9j+0jcF2vnKPTQjxGXclntmoNp4XB7yFX2621PxJcekGjwf/lN5heJwVxGLL9toR0CBlGKwQBgA==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-gaming-terms": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cspell/dict-gaming-terms/-/dict-gaming-terms-1.0.4.tgz", - "integrity": "sha512-hbDduNXlk4AOY0wFxcDMWBPpm34rpqJBeqaySeoUH70eKxpxm+dvjpoRLJgyu0TmymEICCQSl6lAHTHSDiWKZg==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-gaming-terms/-/dict-gaming-terms-1.1.1.tgz", + "integrity": "sha512-tb8GFxjTLDQstkJcJ90lDqF4rKKlMUKs5/ewePN9P+PYRSehqDpLI5S5meOfPit8LGszeOrjUdBQ4zXo7NpMyQ==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-git": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-git/-/dict-git-2.0.0.tgz", - "integrity": "sha512-n1AxyX5Kgxij/sZFkxFJlzn3K9y/sCcgVPg/vz4WNJ4K9YeTsUmyGLA2OQI7d10GJeiuAo2AP1iZf2A8j9aj2w==", - "dev": true + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-git/-/dict-git-3.0.5.tgz", + "integrity": "sha512-I7l86J2nOcpBY0OcwXLTGMbcXbEE7nxZme9DmYKrNgmt35fcLu+WKaiXW7P29V+lIXjJo/wKrEDY+wUEwVuABQ==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-golang": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-6.0.2.tgz", - "integrity": "sha512-5pyZn4AAiYukAW+gVMIMVmUSkIERFrDX2vtPDjg8PLQUhAHWiVeQSDjuOhq9/C5GCCEZU/zWSONkGiwLBBvV9A==", - "dev": true + "version": "6.0.21", + "resolved": "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-6.0.21.tgz", + "integrity": "sha512-D3wG1MWhFx54ySFJ00CS1MVjR4UiBVsOWGIjJ5Av+HamnguqEshxbF9mvy+BX0KqzdLVzwFkoLBs8QeOID56HA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-google": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@cspell/dict-google/-/dict-google-1.0.8.tgz", + "integrity": "sha512-BnMHgcEeaLyloPmBs8phCqprI+4r2Jb8rni011A8hE+7FNk7FmLE3kiwxLFrcZnnb7eqM0agW4zUaNoB0P+z8A==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-haskell": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-haskell/-/dict-haskell-4.0.1.tgz", - "integrity": "sha512-uRrl65mGrOmwT7NxspB4xKXFUenNC7IikmpRZW8Uzqbqcu7ZRCUfstuVH7T1rmjRgRkjcIjE4PC11luDou4wEQ==", - "dev": true + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-haskell/-/dict-haskell-4.0.5.tgz", + "integrity": "sha512-s4BG/4tlj2pPM9Ha7IZYMhUujXDnI0Eq1+38UTTCpatYLbQqDwRFf2KNPLRqkroU+a44yTUAe0rkkKbwy4yRtQ==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-html": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.3.tgz", - "integrity": "sha512-Gae8i8rrArT0UyG1I6DHDK62b7Be6QEcBSIeWOm4VIIW1CASkN9B0qFgSVnkmfvnu1Y3H7SSaaEynKjdj3cs8w==", - "dev": true + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.11.tgz", + "integrity": "sha512-QR3b/PB972SRQ2xICR1Nw/M44IJ6rjypwzA4jn+GH8ydjAX9acFNfc+hLZVyNe0FqsE90Gw3evLCOIF0vy1vQw==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-html-symbol-entities": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.0.tgz", - "integrity": "sha512-HGRu+48ErJjoweR5IbcixxETRewrBb0uxQBd6xFGcxbEYCX8CnQFTAmKI5xNaIt2PKaZiJH3ijodGSqbKdsxhw==", - "dev": true + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.3.tgz", + "integrity": "sha512-aABXX7dMLNFdSE8aY844X4+hvfK7977sOWgZXo4MTGAmOzR8524fjbJPswIBK7GaD3+SgFZ2yP2o0CFvXDGF+A==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-java": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-java/-/dict-java-5.0.5.tgz", - "integrity": "sha512-X19AoJgWIBwJBSWGFqSgHaBR/FEykBHTMjL6EqOnhIGEyE9nvuo32tsSHjXNJ230fQxQptEvRZoaldNLtKxsRg==", - "dev": true + "version": "5.0.11", + "resolved": "https://registry.npmjs.org/@cspell/dict-java/-/dict-java-5.0.11.tgz", + "integrity": "sha512-T4t/1JqeH33Raa/QK/eQe26FE17eUCtWu+JsYcTLkQTci2dk1DfcIKo8YVHvZXBnuM43ATns9Xs0s+AlqDeH7w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-julia": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-julia/-/dict-julia-1.1.0.tgz", + "integrity": "sha512-CPUiesiXwy3HRoBR3joUseTZ9giFPCydSKu2rkh6I2nVjXnl5vFHzOMLXpbF4HQ1tH2CNfnDbUndxD+I+7eL9w==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-k8s": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-k8s/-/dict-k8s-1.0.1.tgz", - "integrity": "sha512-gc5y4Nm3hVdMZNBZfU2M1AsAmObZsRWjCUk01NFPfGhFBXyVne41T7E62rpnzu5330FV/6b/TnFcPgRmak9lLw==", - "dev": true + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@cspell/dict-k8s/-/dict-k8s-1.0.10.tgz", + "integrity": "sha512-313haTrX9prep1yWO7N6Xw4D6tvUJ0Xsx+YhCP+5YrrcIKoEw5Rtlg8R4PPzLqe6zibw6aJ+Eqq+y76Vx5BZkw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-kotlin": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-kotlin/-/dict-kotlin-1.1.0.tgz", + "integrity": "sha512-vySaVw6atY7LdwvstQowSbdxjXG6jDhjkWVWSjg1XsUckyzH1JRHXe9VahZz1i7dpoFEUOWQrhIe5B9482UyJQ==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-latex": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-latex/-/dict-latex-4.0.0.tgz", - "integrity": "sha512-LPY4y6D5oI7D3d+5JMJHK/wxYTQa2lJMSNxps2JtuF8hbAnBQb3igoWEjEbIbRRH1XBM0X8dQqemnjQNCiAtxQ==", - "dev": true + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-latex/-/dict-latex-4.0.3.tgz", + "integrity": "sha512-2KXBt9fSpymYHxHfvhUpjUFyzrmN4c4P8mwIzweLyvqntBT3k0YGZJSriOdjfUjwSygrfEwiuPI1EMrvgrOMJw==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-lorem-ipsum": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-lorem-ipsum/-/dict-lorem-ipsum-3.0.0.tgz", - "integrity": "sha512-msEV24qEpzWZs2kcEicqYlhyBpR0amfDkJOs+iffC07si9ftqtQ+yP3lf1VFLpgqw3SQh1M1vtU7RD4sPrNlcQ==", - "dev": true + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-lorem-ipsum/-/dict-lorem-ipsum-4.0.4.tgz", + "integrity": "sha512-+4f7vtY4dp2b9N5fn0za/UR0kwFq2zDtA62JCbWHbpjvO9wukkbl4rZg4YudHbBgkl73HRnXFgCiwNhdIA1JPw==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-lua": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-lua/-/dict-lua-4.0.1.tgz", - "integrity": "sha512-j0MFmeCouSoC6EdZTbvGe1sJ9V+ruwKSeF+zRkNNNload7R72Co5kX1haW2xLHGdlq0kqSy1ODRZKdVl0e+7hg==", - "dev": true + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@cspell/dict-lua/-/dict-lua-4.0.7.tgz", + "integrity": "sha512-Wbr7YSQw+cLHhTYTKV6cAljgMgcY+EUAxVIZW3ljKswEe4OLxnVJ7lPqZF5JKjlXdgCjbPSimsHqyAbC5pQN/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-makefile": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-makefile/-/dict-makefile-1.0.4.tgz", + "integrity": "sha512-E4hG/c0ekPqUBvlkrVvzSoAA+SsDA9bLi4xSV3AXHTVru7Y2bVVGMPtpfF+fI3zTkww/jwinprcU1LSohI3ylw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-markdown": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@cspell/dict-markdown/-/dict-markdown-2.0.10.tgz", + "integrity": "sha512-vtVa6L/84F9sTjclTYDkWJF/Vx2c5xzxBKkQp+CEFlxOF2SYgm+RSoEvAvg5vj4N5kuqR4350ZlY3zl2eA3MXw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@cspell/dict-css": "^4.0.17", + "@cspell/dict-html": "^4.0.11", + "@cspell/dict-html-symbol-entities": "^4.0.3", + "@cspell/dict-typescript": "^3.2.1" + } + }, + "node_modules/@cspell/dict-monkeyc": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@cspell/dict-monkeyc/-/dict-monkeyc-1.0.10.tgz", + "integrity": "sha512-7RTGyKsTIIVqzbvOtAu6Z/lwwxjGRtY5RkKPlXKHEoEAgIXwfDxb5EkVwzGQwQr8hF/D3HrdYbRT8MFBfsueZw==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-node": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-node/-/dict-node-4.0.2.tgz", - "integrity": "sha512-FEQJ4TnMcXEFslqBQkXa5HposMoCGsiBv2ux4IZuIXgadXeHKHUHk60iarWpjhzNzQLyN2GD7NoRMd12bK3Llw==", - "dev": true + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@cspell/dict-node/-/dict-node-5.0.7.tgz", + "integrity": "sha512-ZaPpBsHGQCqUyFPKLyCNUH2qzolDRm1/901IO8e7btk7bEDF56DN82VD43gPvD4HWz3yLs/WkcLa01KYAJpnOw==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-npm": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.0.8.tgz", - "integrity": "sha512-KuqH8tEsFD6DPKqKwIfWr9E+admE3yghaC0AKXG8jPaf77N0lkctKaS3dm0oxWUXkYKA/eXj6LCtz3VcTyxFPg==", - "dev": true + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.2.4.tgz", + "integrity": "sha512-/hK5ii9OzSOQkmTjkzJlEYWz+PBnz2hRq5Xu7d4aDURaynO9xMAcK31JJlKNQulBkVbQHxFZLUrzjdzdAr/Opw==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-php": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-php/-/dict-php-4.0.1.tgz", - "integrity": "sha512-XaQ/JkSyq2c07MfRG54DjLi2CV+HHwS99DDCAao9Fq2JfkWroTQsUeek7wYZXJATrJVOULoV3HKih12x905AtQ==", - "dev": true + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@cspell/dict-php/-/dict-php-4.0.14.tgz", + "integrity": "sha512-7zur8pyncYZglxNmqsRycOZ6inpDoVd4yFfz1pQRe5xaRWMiK3Km4n0/X/1YMWhh3e3Sl/fQg5Axb2hlN68t1g==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-powershell": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-powershell/-/dict-powershell-5.0.2.tgz", - "integrity": "sha512-IHfWLme3FXE7vnOmMncSBxOsMTdNWd1Vcyhag03WS8oANSgX8IZ+4lMI00mF0ptlgchf16/OU8WsV4pZfikEFw==", - "dev": true + "version": "5.0.14", + "resolved": "https://registry.npmjs.org/@cspell/dict-powershell/-/dict-powershell-5.0.14.tgz", + "integrity": "sha512-ktjjvtkIUIYmj/SoGBYbr3/+CsRGNXGpvVANrY0wlm/IoGlGywhoTUDYN0IsGwI2b8Vktx3DZmQkfb3Wo38jBA==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-public-licenses": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-public-licenses/-/dict-public-licenses-2.0.3.tgz", - "integrity": "sha512-JSLEdpEYufQ1H+93UHi+axlqQm1fhgK6kpdLHp6uPHu//CsvETcqNVawjB+qOdI/g38JTMw5fBqSd0aGNxa6Dw==", - "dev": true + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@cspell/dict-public-licenses/-/dict-public-licenses-2.0.13.tgz", + "integrity": "sha512-1Wdp/XH1ieim7CadXYE7YLnUlW0pULEjVl9WEeziZw3EKCAw8ZI8Ih44m4bEa5VNBLnuP5TfqC4iDautAleQzQ==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-python": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.1.5.tgz", - "integrity": "sha512-wWUWyHdyJtx5iG6Fz9rBQ17BtdpEsB17vmutao+gixQD28Jzb6XoLgDQ6606M0RnFjBSFhs5iT4CJBzlD2Kq6g==", + "version": "4.2.18", + "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.2.18.tgz", + "integrity": "sha512-hYczHVqZBsck7DzO5LumBLJM119a3F17aj8a7lApnPIS7cmEwnPc2eACNscAHDk7qAo2127oI7axUoFMe9/g1g==", "dev": true, + "license": "MIT", "dependencies": { - "@cspell/dict-data-science": "^1.0.0" + "@cspell/dict-data-science": "^2.0.8" } }, "node_modules/@cspell/dict-r": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-r/-/dict-r-2.0.1.tgz", - "integrity": "sha512-KCmKaeYMLm2Ip79mlYPc8p+B2uzwBp4KMkzeLd5E6jUlCL93Y5Nvq68wV5fRLDRTf7N1LvofkVFWfDcednFOgA==", - "dev": true + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-r/-/dict-r-2.1.0.tgz", + "integrity": "sha512-k2512wgGG0lTpTYH9w5Wwco+lAMf3Vz7mhqV8+OnalIE7muA0RSuD9tWBjiqLcX8zPvEJr4LdgxVju8Gk3OKyA==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-ruby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-5.0.0.tgz", - "integrity": "sha512-ssb96QxLZ76yPqFrikWxItnCbUKhYXJ2owkoIYzUGNFl2CHSoHCb5a6Zetum9mQ/oUA3gNeUhd28ZUlXs0la2A==", - "dev": true + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-5.0.8.tgz", + "integrity": "sha512-ixuTneU0aH1cPQRbWJvtvOntMFfeQR2KxT8LuAv5jBKqQWIHSxzGlp+zX3SVyoeR0kOWiu64/O5Yn836A5yMcQ==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-rust": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-4.0.1.tgz", - "integrity": "sha512-xJSSzHDK2z6lSVaOmMxl3PTOtfoffaxMo7fTcbZUF+SCJzfKbO6vnN9TCGX2sx1RHFDz66Js6goz6SAZQdOwaw==", - "dev": true + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-4.0.11.tgz", + "integrity": "sha512-OGWDEEzm8HlkSmtD8fV3pEcO2XBpzG2XYjgMCJCRwb2gRKvR+XIm6Dlhs04N/K2kU+iH8bvrqNpM8fS/BFl0uw==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-scala": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-scala/-/dict-scala-5.0.0.tgz", - "integrity": "sha512-ph0twaRoV+ylui022clEO1dZ35QbeEQaKTaV2sPOsdwIokABPIiK09oWwGK9qg7jRGQwVaRPEq0Vp+IG1GpqSQ==", - "dev": true + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@cspell/dict-scala/-/dict-scala-5.0.7.tgz", + "integrity": "sha512-yatpSDW/GwulzO3t7hB5peoWwzo+Y3qTc0pO24Jf6f88jsEeKmDeKkfgPbYuCgbE4jisGR4vs4+jfQZDIYmXPA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-shell": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-shell/-/dict-shell-1.1.0.tgz", + "integrity": "sha512-D/xHXX7T37BJxNRf5JJHsvziFDvh23IF/KvkZXNSh8VqcRdod3BAz9VGHZf6VDqcZXr1VRqIYR3mQ8DSvs3AVQ==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-software-terms": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-3.2.1.tgz", - "integrity": "sha512-+QXmyoONVc/3aNgKW+0F0u3XUCRTfNRkWKLZQA78i+9fOfde8ZT4JmROmZgRveH/MxD4n6pNFceIRcYI6C8WuQ==", - "dev": true + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-5.0.10.tgz", + "integrity": "sha512-2nTcVKTYJKU5GzeviXGPtRRC9d23MtfpD4PM4pLSzl29/5nx5MxOUHkzPuJdyaw9mXIz8Rm9IlGeVAvQoTI8aw==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-sql": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-sql/-/dict-sql-2.1.1.tgz", - "integrity": "sha512-v1mswi9NF40+UDUMuI148YQPEQvWjac72P6ZsjlRdLjEiQEEMEsTQ+zlkIdnzC9QCNyJaqD5Liq9Mn78/8Zxtw==", - "dev": true + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-sql/-/dict-sql-2.2.0.tgz", + "integrity": "sha512-MUop+d1AHSzXpBvQgQkCiok8Ejzb+nrzyG16E8TvKL2MQeDwnIvMe3bv90eukP6E1HWb+V/MA/4pnq0pcJWKqQ==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-svelte": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-svelte/-/dict-svelte-1.0.2.tgz", - "integrity": "sha512-rPJmnn/GsDs0btNvrRBciOhngKV98yZ9SHmg8qI6HLS8hZKvcXc0LMsf9LLuMK1TmS2+WQFAan6qeqg6bBxL2Q==", - "dev": true + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-svelte/-/dict-svelte-1.0.6.tgz", + "integrity": "sha512-8LAJHSBdwHCoKCSy72PXXzz7ulGROD0rP1CQ0StOqXOOlTUeSFaJJlxNYjlONgd2c62XBQiN2wgLhtPN+1Zv7Q==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-swift": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-swift/-/dict-swift-2.0.1.tgz", - "integrity": "sha512-gxrCMUOndOk7xZFmXNtkCEeroZRnS2VbeaIPiymGRHj5H+qfTAzAKxtv7jJbVA3YYvEzWcVE2oKDP4wcbhIERw==", - "dev": true + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-swift/-/dict-swift-2.0.5.tgz", + "integrity": "sha512-3lGzDCwUmnrfckv3Q4eVSW3sK3cHqqHlPprFJZD4nAqt23ot7fic5ALR7J4joHpvDz36nHX34TgcbZNNZOC/JA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-terraform": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-terraform/-/dict-terraform-1.1.1.tgz", + "integrity": "sha512-07KFDwCU7EnKl4hOZLsLKlj6Zceq/IsQ3LRWUyIjvGFfZHdoGtFdCp3ZPVgnFaAcd/DKv+WVkrOzUBSYqHopQQ==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-typescript": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.1.1.tgz", - "integrity": "sha512-N9vNJZoOXmmrFPR4ir3rGvnqqwmQGgOYoL1+y6D4oIhyr7FhaYiyF/d7QT61RmjZQcATMa6PSL+ZisCeRLx9+A==", - "dev": true + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.2.1.tgz", + "integrity": "sha512-jdnKg4rBl75GUBTsUD6nTJl7FGvaIt5wWcWP7TZSC3rV1LfkwvbUiY3PiGpfJlAIdnLYSeFWIpYU9gyVgz206w==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-vue": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-vue/-/dict-vue-3.0.0.tgz", - "integrity": "sha512-niiEMPWPV9IeRBRzZ0TBZmNnkK3olkOPYxC1Ny2AX4TGlYRajcW0WUtoSHmvvjZNfWLSg2L6ruiBeuPSbjnG6A==", - "dev": true + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-vue/-/dict-vue-3.0.4.tgz", + "integrity": "sha512-0dPtI0lwHcAgSiQFx8CzvqjdoXROcH+1LyqgROCpBgppommWpVhbQ0eubnKotFEXgpUCONVkeZJ6Ql8NbTEu+w==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dynamic-import": { - "version": "6.31.3", - "resolved": "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-6.31.3.tgz", - "integrity": "sha512-A6sT00+6UNGFksQ5SxW2ohNl6vUutai8F4jwJMHTjZL/9vivQpU7y5V4PpsfoPZtx3WZcbrzuTvJ+tLfdbWc4A==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-9.0.2.tgz", + "integrity": "sha512-KhcoNUj6Ij2P8fbRC7QOn3jzbTZFxoQpFGanGU9f+4DfZBH86PCADyKYH+ZpJPlYgrI+Jh4wKzF5y5YKKNrdrw==", "dev": true, + "license": "MIT", "dependencies": { - "import-meta-resolve": "^2.2.2" + "@cspell/url": "9.0.2", + "import-meta-resolve": "^4.1.0" }, "engines": { - "node": ">=14" + "node": ">=20" } }, - "node_modules/@cspell/strong-weak-map": { - "version": "6.31.3", - "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-6.31.3.tgz", - "integrity": "sha512-znwc9IlgGUPioHGshP/zyM8HsuYg1OY5S7HSiVXARh5H8RqcyBsnyn8abc0PPhqPrfDy9Fh5xHsAEPZ55dl1vQ==", + "node_modules/@cspell/filetypes": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@cspell/filetypes/-/filetypes-9.0.2.tgz", + "integrity": "sha512-8KEIgptldoZT3pM+yhYV8nXq5T9Sz0YvZIqwDGEqKJ6j447K+I91QWS7RQDrvHkElMi/2g/h08Efg0RIT+QEaQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=14.6" + "node": ">=20" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "optional": true, - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, + "node_modules/@cspell/strong-weak-map": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-9.0.2.tgz", + "integrity": "sha512-SHTPUcu2e6aYxI5sr1L/9pzz68CArV6WzMvAio//5LbtKI6NtDp/7tARBwLi1G3A3C0289zDHbDKm3wc1lRNhQ==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=20" } }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "optional": true, - "peer": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "node_modules/@cspell/url": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@cspell/url/-/url-9.0.2.tgz", + "integrity": "sha512-KwCDL0ejgwVSZB8KTp8FhDe42UOaebTVIMi3O5GcYHi9Cut8B5QU4tbQOFGXP6E4pjimeO9yIkr9Z34kTljj/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz", - "integrity": "sha512-gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", "dev": true, + "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "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/regexpp": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", - "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", + "version": "4.12.1", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.19.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", - "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", + "node_modules/@eslint/config-array": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", + "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "type-fest": "^0.20.2" + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "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": { @@ -2514,56 +1872,166 @@ "node": "*" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/@eslint/config-helpers": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz", + "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==", "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "node_modules/@eslint/core": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", + "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", + "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.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "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.0", + "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/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": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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.27.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.27.0.tgz", + "integrity": "sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==", + "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.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz", + "integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.14.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@fastify/busboy": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.1.1.tgz", + "integrity": "sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@graphql-codegen/add": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@graphql-codegen/add/-/add-5.0.3.tgz", + "integrity": "sha512-SxXPmramkth8XtBlAHu4H4jYcYXM/o3p01+psU+0NADQowA8jtYkK6MW5rV6T+CxkEaNZItfSmZRPgIuypcqnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-codegen/plugin-helpers": "^5.0.3", + "tslib": "~2.6.0" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, "node_modules/@graphql-codegen/cli": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-3.3.1.tgz", - "integrity": "sha512-4Es8Y9zFeT0Zx2qRL7L3qXDbbqvXK6aID+8v8lP6gaYD+uWx3Jd4Hsq5vxwVBR+6flm0BW/C85Qm0cvmT7O6LA==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-5.0.6.tgz", + "integrity": "sha512-1r5dtZ2l1jiCF/4qLMTcT7mEoWWWeqQlmn7HcPHgnV/OXIEodwox7XRGAmOKUygoabRjFF3S0jd0TWbkq5Otsw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/generator": "^7.18.13", "@babel/template": "^7.18.10", "@babel/types": "^7.18.13", - "@graphql-codegen/core": "^3.1.0", - "@graphql-codegen/plugin-helpers": "^4.2.0", - "@graphql-tools/apollo-engine-loader": "^7.3.6", - "@graphql-tools/code-file-loader": "^7.3.17", - "@graphql-tools/git-loader": "^7.2.13", - "@graphql-tools/github-loader": "^7.3.20", - "@graphql-tools/graphql-file-loader": "^7.5.0", - "@graphql-tools/json-file-loader": "^7.4.1", - "@graphql-tools/load": "^7.8.0", - "@graphql-tools/prisma-loader": "^7.2.49", - "@graphql-tools/url-loader": "^7.13.2", - "@graphql-tools/utils": "^9.0.0", - "@parcel/watcher": "^2.1.0", - "@whatwg-node/fetch": "^0.8.0", + "@graphql-codegen/client-preset": "^4.8.1", + "@graphql-codegen/core": "^4.0.2", + "@graphql-codegen/plugin-helpers": "^5.0.3", + "@graphql-tools/apollo-engine-loader": "^8.0.0", + "@graphql-tools/code-file-loader": "^8.0.0", + "@graphql-tools/git-loader": "^8.0.0", + "@graphql-tools/github-loader": "^8.0.0", + "@graphql-tools/graphql-file-loader": "^8.0.0", + "@graphql-tools/json-file-loader": "^8.0.0", + "@graphql-tools/load": "^8.1.0", + "@graphql-tools/prisma-loader": "^8.0.0", + "@graphql-tools/url-loader": "^8.0.0", + "@graphql-tools/utils": "^10.0.0", + "@whatwg-node/fetch": "^0.10.0", "chalk": "^4.1.0", - "cosmiconfig": "^7.0.0", + "cosmiconfig": "^8.1.3", "debounce": "^1.2.0", "detect-indent": "^6.0.0", - "graphql-config": "^4.5.0", + "graphql-config": "^5.1.1", "inquirer": "^8.0.0", "is-glob": "^4.0.1", "jiti": "^1.17.1", @@ -2575,7 +2043,7 @@ "string-env-interpolation": "^1.0.1", "ts-log": "^2.2.3", "tslib": "^2.4.0", - "yaml": "^1.10.0", + "yaml": "^2.3.1", "yargs": "^17.0.0" }, "bin": { @@ -2584,962 +2052,792 @@ "graphql-codegen": "cjs/bin.js", "graphql-codegen-esm": "esm/bin.js" }, + "engines": { + "node": ">=16" + }, "peerDependencies": { + "@parcel/watcher": "^2.1.0", "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + }, + "peerDependenciesMeta": { + "@parcel/watcher": { + "optional": true + } } }, "node_modules/@graphql-codegen/cli/node_modules/@whatwg-node/fetch": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.8.5.tgz", - "integrity": "sha512-pNvoYGPa0hjbVqs+r0blMjaWlrMeb0snwRCTAEdng5Jm00PY9wO4K8m99BmfLn6WED0FKOXTlF53+en/3xybqw==", + "version": "0.10.8", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.10.8.tgz", + "integrity": "sha512-Rw9z3ctmeEj8QIB9MavkNJqekiu9usBCSMZa+uuAvM0lF3v70oQVCXNppMIqaV6OTZbdaHF1M2HLow58DEw+wg==", "dev": true, + "license": "MIT", "dependencies": { - "@peculiar/webcrypto": "^1.4.0", - "@whatwg-node/node-fetch": "^0.3.3", - "busboy": "^1.6.0", - "urlpattern-polyfill": "^7.0.0", - "web-streams-polyfill": "^3.2.1" + "@whatwg-node/node-fetch": "^0.7.21", + "urlpattern-polyfill": "^10.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@graphql-codegen/client-preset": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/client-preset/-/client-preset-4.8.1.tgz", + "integrity": "sha512-XLF2V7WKLnepvrGE44JP+AvjS+Oz9AT0oYgTl/6d9btQ+2VYFcmwQPjNAuMVHipqE9I6h8hSEfH9hUrzUptB1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/template": "^7.20.7", + "@graphql-codegen/add": "^5.0.3", + "@graphql-codegen/gql-tag-operations": "4.0.17", + "@graphql-codegen/plugin-helpers": "^5.1.0", + "@graphql-codegen/typed-document-node": "^5.1.1", + "@graphql-codegen/typescript": "^4.1.6", + "@graphql-codegen/typescript-operations": "^4.6.1", + "@graphql-codegen/visitor-plugin-common": "^5.8.0", + "@graphql-tools/documents": "^1.0.0", + "@graphql-tools/utils": "^10.0.0", + "@graphql-typed-document-node/core": "3.2.0", + "tslib": "~2.6.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0", + "graphql-sock": "^1.0.0" + }, + "peerDependenciesMeta": { + "graphql-sock": { + "optional": true + } } }, "node_modules/@graphql-codegen/core": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/core/-/core-3.1.0.tgz", - "integrity": "sha512-DH1/yaR7oJE6/B+c6ZF2Tbdh7LixF1K8L+8BoSubjNyQ8pNwR4a70mvc1sv6H7qgp6y1bPQ9tKE+aazRRshysw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@graphql-codegen/core/-/core-4.0.2.tgz", + "integrity": "sha512-IZbpkhwVqgizcjNiaVzNAzm/xbWT6YnGgeOLwVjm4KbJn3V2jchVtuzHH09G5/WkkLSk2wgbXNdwjM41JxO6Eg==", "dev": true, + "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^4.1.0", - "@graphql-tools/schema": "^9.0.0", - "@graphql-tools/utils": "^9.1.1", - "tslib": "~2.5.0" + "@graphql-codegen/plugin-helpers": "^5.0.3", + "@graphql-tools/schema": "^10.0.0", + "@graphql-tools/utils": "^10.0.0", + "tslib": "~2.6.0" }, "peerDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/@graphql-codegen/core/node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true + "node_modules/@graphql-codegen/gql-tag-operations": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@graphql-codegen/gql-tag-operations/-/gql-tag-operations-4.0.17.tgz", + "integrity": "sha512-2pnvPdIG6W9OuxkrEZ6hvZd142+O3B13lvhrZ48yyEBh2ujtmKokw0eTwDHtlXUqjVS0I3q7+HB2y12G/m69CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-codegen/plugin-helpers": "^5.1.0", + "@graphql-codegen/visitor-plugin-common": "5.8.0", + "@graphql-tools/utils": "^10.0.0", + "auto-bind": "~4.0.0", + "tslib": "~2.6.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } }, "node_modules/@graphql-codegen/plugin-helpers": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-4.2.0.tgz", - "integrity": "sha512-THFTCfg+46PXlXobYJ/OoCX6pzjI+9woQqCjdyKtgoI0tn3Xq2HUUCiidndxUpEYVrXb5pRiRXb7b/ZbMQqD0A==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-5.1.0.tgz", + "integrity": "sha512-Y7cwEAkprbTKzVIe436TIw4w03jorsMruvCvu0HJkavaKMQbWY+lQ1RIuROgszDbxAyM35twB5/sUvYG5oW+yg==", "dev": true, + "license": "MIT", "dependencies": { - "@graphql-tools/utils": "^9.0.0", + "@graphql-tools/utils": "^10.0.0", "change-case-all": "1.0.15", "common-tags": "1.8.2", "import-from": "4.0.0", "lodash": "~4.17.0", - "tslib": "~2.5.0" + "tslib": "~2.6.0" + }, + "engines": { + "node": ">=16" }, "peerDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/@graphql-codegen/plugin-helpers/node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - }, "node_modules/@graphql-codegen/schema-ast": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@graphql-codegen/schema-ast/-/schema-ast-3.0.1.tgz", - "integrity": "sha512-rTKTi4XiW4QFZnrEqetpiYEWVsOFNoiR/v3rY9mFSttXFbIwNXPme32EspTiGWmEEdHY8UuTDtZN3vEcs/31zw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/schema-ast/-/schema-ast-4.1.0.tgz", + "integrity": "sha512-kZVn0z+th9SvqxfKYgztA6PM7mhnSZaj4fiuBWvMTqA+QqQ9BBed6Pz41KuD/jr0gJtnlr2A4++/0VlpVbCTmQ==", "dev": true, + "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^4.1.0", - "@graphql-tools/utils": "^9.0.0", - "tslib": "~2.5.0" + "@graphql-codegen/plugin-helpers": "^5.0.3", + "@graphql-tools/utils": "^10.0.0", + "tslib": "~2.6.0" }, "peerDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/@graphql-codegen/schema-ast/node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true + "node_modules/@graphql-codegen/typed-document-node": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typed-document-node/-/typed-document-node-5.1.1.tgz", + "integrity": "sha512-Bp/BrMZDKRwzuVeLv+pSljneqONM7gqu57ZaV34Jbncu2hZWMRDMfizTKghoEwwZbRCYYfJO9tA0sYVVIfI1kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-codegen/plugin-helpers": "^5.1.0", + "@graphql-codegen/visitor-plugin-common": "5.8.0", + "auto-bind": "~4.0.0", + "change-case-all": "1.0.15", + "tslib": "~2.6.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } }, "node_modules/@graphql-codegen/typescript": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-3.0.4.tgz", - "integrity": "sha512-x4O47447DZrWNtE/l5CU9QzzW4m1RbmCEdijlA3s2flG/y1Ckqdemob4CWfilSm5/tZ3w1junVDY616RDTSvZw==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-4.1.6.tgz", + "integrity": "sha512-vpw3sfwf9A7S+kIUjyFxuvrywGxd4lmwmyYnnDVjVE4kSQ6Td3DpqaPTy8aNQ6O96vFoi/bxbZS2BW49PwSUUA==", "dev": true, + "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^4.2.0", - "@graphql-codegen/schema-ast": "^3.0.1", - "@graphql-codegen/visitor-plugin-common": "3.1.1", + "@graphql-codegen/plugin-helpers": "^5.1.0", + "@graphql-codegen/schema-ast": "^4.0.2", + "@graphql-codegen/visitor-plugin-common": "5.8.0", "auto-bind": "~4.0.0", - "tslib": "~2.5.0" + "tslib": "~2.6.0" + }, + "engines": { + "node": ">=16" }, "peerDependencies": { "graphql": "^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, "node_modules/@graphql-codegen/typescript-operations": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript-operations/-/typescript-operations-3.0.4.tgz", - "integrity": "sha512-6yE2OL2+WJ1vd5MwFEGXpaxsFGzjAGUytPVHDML3Bi3TwP1F3lnQlIko4untwvHW0JhZEGQ7Ck30H9HjcxpdKA==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript-operations/-/typescript-operations-4.6.1.tgz", + "integrity": "sha512-k92laxhih7s0WZ8j5WMIbgKwhe64C0As6x+PdcvgZFMudDJ7rPJ/hFqJ9DCRxNjXoHmSjnr6VUuQZq4lT1RzCA==", "dev": true, + "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^4.2.0", - "@graphql-codegen/typescript": "^3.0.4", - "@graphql-codegen/visitor-plugin-common": "3.1.1", + "@graphql-codegen/plugin-helpers": "^5.1.0", + "@graphql-codegen/typescript": "^4.1.6", + "@graphql-codegen/visitor-plugin-common": "5.8.0", "auto-bind": "~4.0.0", - "tslib": "~2.5.0" + "tslib": "~2.6.0" + }, + "engines": { + "node": ">=16" }, "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0", + "graphql-sock": "^1.0.0" + }, + "peerDependenciesMeta": { + "graphql-sock": { + "optional": true + } } }, - "node_modules/@graphql-codegen/typescript-operations/node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - }, - "node_modules/@graphql-codegen/typescript/node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - }, "node_modules/@graphql-codegen/visitor-plugin-common": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-3.1.1.tgz", - "integrity": "sha512-uAfp+zu/009R3HUAuTK2AamR1bxIltM6rrYYI6EXSmkM3rFtFsLTuJhjUDj98HcUCszJZrADppz8KKLGRUVlNg==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-5.8.0.tgz", + "integrity": "sha512-lC1E1Kmuzi3WZUlYlqB4fP6+CvbKH9J+haU1iWmgsBx5/sO2ROeXJG4Dmt8gP03bI2BwjiwV5WxCEMlyeuzLnA==", "dev": true, + "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^4.2.0", - "@graphql-tools/optimize": "^1.3.0", - "@graphql-tools/relay-operation-optimizer": "^6.5.0", - "@graphql-tools/utils": "^9.0.0", + "@graphql-codegen/plugin-helpers": "^5.1.0", + "@graphql-tools/optimize": "^2.0.0", + "@graphql-tools/relay-operation-optimizer": "^7.0.0", + "@graphql-tools/utils": "^10.0.0", "auto-bind": "~4.0.0", "change-case-all": "1.0.15", "dependency-graph": "^0.11.0", "graphql-tag": "^2.11.0", "parse-filepath": "^1.0.2", - "tslib": "~2.5.0" + "tslib": "~2.6.0" + }, + "engines": { + "node": ">=16" }, "peerDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/@graphql-codegen/visitor-plugin-common/node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - }, "node_modules/@graphql-tools/apollo-engine-loader": { - "version": "7.3.6", - "resolved": "https://registry.npmjs.org/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-7.3.6.tgz", - "integrity": "sha512-r7YU1X9Ce/sr+tPzSuZqVqlK7knGDpiRfB9HB2uVmbm+kPrlISQ0LuamFoT1g1nkfDZUNZn2p18ag512P1aVVw==", + "version": "8.0.0", "dev": true, + "license": "MIT", "dependencies": { - "@ardatan/sync-fetch": "0.0.1", - "@graphql-tools/utils": "8.9.0", - "@whatwg-node/fetch": "^0.2.4", + "@ardatan/sync-fetch": "^0.0.1", + "@graphql-tools/utils": "^10.0.0", + "@whatwg-node/fetch": "^0.9.0", "tslib": "^2.4.0" }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/apollo-engine-loader/node_modules/@graphql-tools/utils": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.9.0.tgz", - "integrity": "sha512-pjJIWH0XOVnYGXCqej8g/u/tsfV4LvLlj0eATKQu5zwnxd/TiTHq7Cg313qUPTFFHZ3PP5wJ15chYVtLDwaymg==", - "dev": true, - "dependencies": { - "tslib": "^2.4.0" + "engines": { + "node": ">=16.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "node_modules/@graphql-tools/batch-execute": { - "version": "8.5.14", - "resolved": "https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-8.5.14.tgz", - "integrity": "sha512-m6yXqqmFAH2V5JuSIC/geiGLBQA1Y6RddOJfUtkc9Z7ttkULRCd1W39TpYS6IlrCwYyTj+klO1/kdWiny38f5g==", + "version": "9.0.0", "dev": true, + "license": "MIT", "dependencies": { - "@graphql-tools/utils": "9.1.3", - "dataloader": "2.1.0", + "@graphql-tools/utils": "^10.0.0", + "dataloader": "^2.2.2", "tslib": "^2.4.0", - "value-or-promise": "1.0.11" + "value-or-promise": "^1.0.12" }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/batch-execute/node_modules/@graphql-tools/utils": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.1.3.tgz", - "integrity": "sha512-bbJyKhs6awp1/OmP+WKA1GOyu9UbgZGkhIj5srmiMGLHohEOKMjW784Sk0BZil1w2x95UPu0WHw6/d/HVCACCg==", - "dev": true, - "dependencies": { - "tslib": "^2.4.0" + "engines": { + "node": ">=16.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "node_modules/@graphql-tools/code-file-loader": { - "version": "7.3.19", - "resolved": "https://registry.npmjs.org/@graphql-tools/code-file-loader/-/code-file-loader-7.3.19.tgz", - "integrity": "sha512-/SsU7LGr66JM6E0QdTwE/8dX9kdXWRQUgeCO9eEMSUtNGD7OSjT1/2ahncaKcUqzsfnqdxBJJiMuhDWK6D+g+Q==", + "version": "8.0.1", "dev": true, + "license": "MIT", "dependencies": { - "@graphql-tools/graphql-tag-pluck": "7.4.5", - "@graphql-tools/utils": "9.2.1", + "@graphql-tools/graphql-tag-pluck": "8.0.1", + "@graphql-tools/utils": "^10.0.0", "globby": "^11.0.3", "tslib": "^2.4.0", "unixify": "^1.0.0" }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/code-file-loader/node_modules/@graphql-tools/graphql-tag-pluck": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-7.4.5.tgz", - "integrity": "sha512-5Hb7HJHF6X5TMGyGFLyNgcsan1Hp2YFSKb55LNxF7b25sld54AgM6ETkIQT1o196VSrj07JuMkFcF7m9AsIjFw==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.16.8", - "@babel/plugin-syntax-import-assertions": "7.20.0", - "@babel/traverse": "^7.16.8", - "@babel/types": "^7.16.8", - "@graphql-tools/utils": "9.2.1", - "tslib": "^2.4.0" + "engines": { + "node": ">=16.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "node_modules/@graphql-tools/delegate": { - "version": "9.0.21", - "resolved": "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-9.0.21.tgz", - "integrity": "sha512-SM8tFeq6ogFGhIxDE82WTS44/3IQ/wz9QksAKT7xWkcICQnyR9U6Qyt+W7VGnHiybqNsVK3kHNNS/i4KGSF85g==", + "version": "10.0.0", "dev": true, + "license": "MIT", "dependencies": { - "@graphql-tools/batch-execute": "8.5.14", - "@graphql-tools/executor": "0.0.11", - "@graphql-tools/schema": "9.0.12", - "@graphql-tools/utils": "9.1.3", - "dataloader": "2.1.0", - "tslib": "~2.4.0", - "value-or-promise": "1.0.11" + "@graphql-tools/batch-execute": "^9.0.0", + "@graphql-tools/executor": "^1.0.0", + "@graphql-tools/schema": "^10.0.0", + "@graphql-tools/utils": "^10.0.0", + "dataloader": "^2.2.2", + "tslib": "^2.5.0", + "value-or-promise": "^1.0.12" + }, + "engines": { + "node": ">=16.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-tools/delegate/node_modules/@graphql-tools/merge": { - "version": "8.3.14", - "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.3.14.tgz", - "integrity": "sha512-zV0MU1DnxJLIB0wpL4N3u21agEiYFsjm6DI130jqHpwF0pR9HkF+Ni65BNfts4zQelP0GjkHltG+opaozAJ1NA==", + "node_modules/@graphql-tools/documents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/documents/-/documents-1.0.1.tgz", + "integrity": "sha512-aweoMH15wNJ8g7b2r4C4WRuJxZ0ca8HtNO54rkye/3duxTkW4fGBEutCx03jCIr5+a1l+4vFJNP859QnAVBVCA==", "dev": true, + "license": "MIT", "dependencies": { - "@graphql-tools/utils": "9.1.3", + "lodash.sortby": "^4.7.0", "tslib": "^2.4.0" }, + "engines": { + "node": ">=16.0.0" + }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-tools/delegate/node_modules/@graphql-tools/schema": { - "version": "9.0.12", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.12.tgz", - "integrity": "sha512-DmezcEltQai0V1y96nwm0Kg11FDS/INEFekD4nnVgzBqawvznWqK6D6bujn+cw6kivoIr3Uq//QmU/hBlBzUlQ==", + "node_modules/@graphql-tools/executor": { + "version": "1.1.0", "dev": true, + "license": "MIT", "dependencies": { - "@graphql-tools/merge": "8.3.14", - "@graphql-tools/utils": "9.1.3", + "@graphql-tools/utils": "^10.0.0", + "@graphql-typed-document-node/core": "3.2.0", + "@repeaterjs/repeater": "^3.0.4", "tslib": "^2.4.0", - "value-or-promise": "1.0.11" + "value-or-promise": "^1.0.12" + }, + "engines": { + "node": ">=16.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-tools/delegate/node_modules/@graphql-tools/utils": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.1.3.tgz", - "integrity": "sha512-bbJyKhs6awp1/OmP+WKA1GOyu9UbgZGkhIj5srmiMGLHohEOKMjW784Sk0BZil1w2x95UPu0WHw6/d/HVCACCg==", + "node_modules/@graphql-tools/executor-graphql-ws": { + "version": "1.1.0", "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.4.0" + "@graphql-tools/utils": "^10.0.2", + "@types/ws": "^8.0.0", + "graphql-ws": "^5.14.0", + "isomorphic-ws": "^5.0.0", + "tslib": "^2.4.0", + "ws": "^8.13.0" + }, + "engines": { + "node": ">=16.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-tools/executor": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor/-/executor-0.0.11.tgz", - "integrity": "sha512-GjtXW0ZMGZGKad6A1HXFPArkfxE0AIpznusZuQdy4laQx+8Ut3Zx8SAFJNnDfZJ2V5kU29B5Xv3Fr0/DiMBHOQ==", + "node_modules/@graphql-tools/executor-http": { + "version": "1.0.2", "dev": true, + "license": "MIT", "dependencies": { - "@graphql-tools/utils": "9.1.3", - "@graphql-typed-document-node/core": "3.1.1", - "@repeaterjs/repeater": "3.0.4", + "@graphql-tools/utils": "^10.0.2", + "@repeaterjs/repeater": "^3.0.4", + "@whatwg-node/fetch": "^0.9.0", + "extract-files": "^11.0.0", + "meros": "^1.2.1", "tslib": "^2.4.0", - "value-or-promise": "1.0.11" + "value-or-promise": "^1.0.12" + }, + "engines": { + "node": ">=16.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-tools/executor-graphql-ws": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor-graphql-ws/-/executor-graphql-ws-0.0.5.tgz", - "integrity": "sha512-1bJfZdSBPCJWz1pJ5g/YHMtGt6YkNRDdmqNQZ8v+VlQTNVfuBpY2vzj15uvf5uDrZLg2MSQThrKlL8av4yFpsA==", + "node_modules/@graphql-tools/executor-legacy-ws": { + "version": "1.0.1", "dev": true, + "license": "MIT", "dependencies": { - "@graphql-tools/utils": "9.1.3", - "@repeaterjs/repeater": "3.0.4", + "@graphql-tools/utils": "^10.0.0", "@types/ws": "^8.0.0", - "graphql-ws": "5.11.2", "isomorphic-ws": "5.0.0", "tslib": "^2.4.0", - "ws": "8.11.0" + "ws": "8.13.0" + }, + "engines": { + "node": ">=16.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-tools/executor-graphql-ws/node_modules/@graphql-tools/utils": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.1.3.tgz", - "integrity": "sha512-bbJyKhs6awp1/OmP+WKA1GOyu9UbgZGkhIj5srmiMGLHohEOKMjW784Sk0BZil1w2x95UPu0WHw6/d/HVCACCg==", + "node_modules/@graphql-tools/git-loader": { + "version": "8.0.1", "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.4.0" + "@graphql-tools/graphql-tag-pluck": "8.0.1", + "@graphql-tools/utils": "^10.0.0", + "is-glob": "4.0.3", + "micromatch": "^4.0.4", + "tslib": "^2.4.0", + "unixify": "^1.0.0" + }, + "engines": { + "node": ">=16.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-tools/executor-http": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor-http/-/executor-http-0.0.8.tgz", - "integrity": "sha512-Y0WzbBW2dDm68EqjRO7eaCC38H6mNFUCcy8ivwnv0hon/N4GjQJhrR0cApJh/xqn/YqCY0Sn2ScmdGVuSdaCcA==", + "node_modules/@graphql-tools/github-loader": { + "version": "8.0.0", "dev": true, + "license": "MIT", "dependencies": { - "@graphql-tools/utils": "9.1.3", - "@repeaterjs/repeater": "3.0.4", - "@whatwg-node/fetch": "0.5.4", - "dset": "3.1.2", - "extract-files": "^11.0.0", - "meros": "1.2.1", + "@ardatan/sync-fetch": "^0.0.1", + "@graphql-tools/executor-http": "^1.0.0", + "@graphql-tools/graphql-tag-pluck": "^8.0.0", + "@graphql-tools/utils": "^10.0.0", + "@whatwg-node/fetch": "^0.9.0", "tslib": "^2.4.0", - "value-or-promise": "1.0.11" + "value-or-promise": "^1.0.12" + }, + "engines": { + "node": ">=16.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-tools/executor-http/node_modules/@graphql-tools/utils": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.1.3.tgz", - "integrity": "sha512-bbJyKhs6awp1/OmP+WKA1GOyu9UbgZGkhIj5srmiMGLHohEOKMjW784Sk0BZil1w2x95UPu0WHw6/d/HVCACCg==", + "node_modules/@graphql-tools/graphql-file-loader": { + "version": "8.0.19", + "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-file-loader/-/graphql-file-loader-8.0.19.tgz", + "integrity": "sha512-kyEZL4rRJ5LelfCXL3GLgbMiu5Zd7memZaL8ZxPXGI7DA8On1e5IVBH3zZJwf7LzhjSVnPaHM7O/bRzGvTbXzQ==", "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.4.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/executor-http/node_modules/@whatwg-node/fetch": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.5.4.tgz", - "integrity": "sha512-dR5PCzvOeS7OaW6dpIlPt+Ou3pak7IEG+ZVAV26ltcaiDB3+IpuvjqRdhsY6FKHcqBo1qD+S99WXY9Z6+9Rwnw==", - "dev": true, - "dependencies": { - "@peculiar/webcrypto": "^1.4.0", - "abort-controller": "^3.0.0", - "busboy": "^1.6.0", - "form-data-encoder": "^1.7.1", - "formdata-node": "^4.3.1", - "node-fetch": "^2.6.7", - "undici": "^5.12.0", - "web-streams-polyfill": "^3.2.0" - } - }, - "node_modules/@graphql-tools/executor-legacy-ws": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor-legacy-ws/-/executor-legacy-ws-0.0.5.tgz", - "integrity": "sha512-j2ZQVTI4rKIT41STzLPK206naYDhHxmGHot0siJKBKX1vMqvxtWBqvL66v7xYEOaX79wJrFc8l6oeURQP2LE6g==", - "dev": true, - "dependencies": { - "@graphql-tools/utils": "9.1.3", - "@types/ws": "^8.0.0", - "isomorphic-ws": "5.0.0", - "tslib": "^2.4.0", - "ws": "8.11.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/executor-legacy-ws/node_modules/@graphql-tools/utils": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.1.3.tgz", - "integrity": "sha512-bbJyKhs6awp1/OmP+WKA1GOyu9UbgZGkhIj5srmiMGLHohEOKMjW784Sk0BZil1w2x95UPu0WHw6/d/HVCACCg==", - "dev": true, - "dependencies": { - "tslib": "^2.4.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/executor/node_modules/@graphql-tools/utils": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.1.3.tgz", - "integrity": "sha512-bbJyKhs6awp1/OmP+WKA1GOyu9UbgZGkhIj5srmiMGLHohEOKMjW784Sk0BZil1w2x95UPu0WHw6/d/HVCACCg==", - "dev": true, - "dependencies": { - "tslib": "^2.4.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/git-loader": { - "version": "7.2.13", - "resolved": "https://registry.npmjs.org/@graphql-tools/git-loader/-/git-loader-7.2.13.tgz", - "integrity": "sha512-PBAzZWXzKUL+VvlUQOjF++246G1O6TTMzvIlxaecgxvTSlnljEXJcDQlxqXhfFPITc5MP7He0N1UcZPBU/DE7Q==", - "dev": true, - "dependencies": { - "@graphql-tools/graphql-tag-pluck": "7.4.0", - "@graphql-tools/utils": "9.1.1", - "is-glob": "4.0.3", - "micromatch": "^4.0.4", - "tslib": "^2.4.0", - "unixify": "^1.0.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/git-loader/node_modules/@graphql-tools/utils": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.1.1.tgz", - "integrity": "sha512-DXKLIEDbihK24fktR2hwp/BNIVwULIHaSTNTNhXS+19vgT50eX9wndx1bPxGwHnVBOONcwjXy0roQac49vdt/w==", - "dev": true, - "dependencies": { - "tslib": "^2.4.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/github-loader": { - "version": "7.3.20", - "resolved": "https://registry.npmjs.org/@graphql-tools/github-loader/-/github-loader-7.3.20.tgz", - "integrity": "sha512-kIgloHb+yJJYR6K47HNBv7vI7IF73eoGsQy77H+2WDA+zwE5PuRXGUTAlJXRQdwiY71/Nvbw44P3l4WWbMRv0Q==", - "dev": true, - "dependencies": { - "@ardatan/sync-fetch": "0.0.1", - "@graphql-tools/graphql-tag-pluck": "7.4.0", - "@graphql-tools/utils": "9.1.1", - "@whatwg-node/fetch": "^0.5.0", - "tslib": "^2.4.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/github-loader/node_modules/@graphql-tools/utils": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.1.1.tgz", - "integrity": "sha512-DXKLIEDbihK24fktR2hwp/BNIVwULIHaSTNTNhXS+19vgT50eX9wndx1bPxGwHnVBOONcwjXy0roQac49vdt/w==", - "dev": true, - "dependencies": { - "tslib": "^2.4.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/github-loader/node_modules/@whatwg-node/fetch": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.5.3.tgz", - "integrity": "sha512-cuAKL3Z7lrJJuUrfF1wxkQTb24Qd1QO/lsjJpM5ZSZZzUMms5TPnbGeGUKWA3hVKNHh30lVfr2MyRCT5Jfkucw==", - "dev": true, - "dependencies": { - "@peculiar/webcrypto": "^1.4.0", - "abort-controller": "^3.0.0", - "busboy": "^1.6.0", - "form-data-encoder": "^1.7.1", - "formdata-node": "^4.3.1", - "node-fetch": "^2.6.7", - "undici": "^5.12.0", - "web-streams-polyfill": "^3.2.0" - } - }, - "node_modules/@graphql-tools/graphql-file-loader": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-file-loader/-/graphql-file-loader-7.5.0.tgz", - "integrity": "sha512-X3wcC+ZljbXTwdTTSp3oUHJd66mFLDKI750uhB0HidBxE6+wyw7fhmJVJiYROXPswaGliuabpo0JEyLj7hhWKA==", - "dev": true, - "dependencies": { - "@graphql-tools/import": "6.7.1", - "@graphql-tools/utils": "8.9.0", - "globby": "^11.0.3", - "tslib": "^2.4.0", - "unixify": "^1.0.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/graphql-file-loader/node_modules/@graphql-tools/utils": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.9.0.tgz", - "integrity": "sha512-pjJIWH0XOVnYGXCqej8g/u/tsfV4LvLlj0eATKQu5zwnxd/TiTHq7Cg313qUPTFFHZ3PP5wJ15chYVtLDwaymg==", - "dev": true, - "dependencies": { - "tslib": "^2.4.0" + "@graphql-tools/import": "7.0.18", + "@graphql-tools/utils": "^10.8.6", + "globby": "^11.0.3", + "tslib": "^2.4.0", + "unixify": "^1.0.0" + }, + "engines": { + "node": ">=16.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "node_modules/@graphql-tools/graphql-tag-pluck": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-7.4.0.tgz", - "integrity": "sha512-f966Z8cMDiPxWuN3ksuHpNgGE8euZtrL/Gcwz9rRarAb13al4CGHKmw2Cb/ZNdt7GbyhdiLT4wbaddrF0xCpdw==", + "version": "8.0.1", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.16.8", - "@babel/plugin-syntax-import-assertions": "7.20.0", + "@babel/plugin-syntax-import-assertions": "^7.20.0", "@babel/traverse": "^7.16.8", "@babel/types": "^7.16.8", - "@graphql-tools/utils": "9.1.1", + "@graphql-tools/utils": "^10.0.0", "tslib": "^2.4.0" }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/graphql-tag-pluck/node_modules/@graphql-tools/utils": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.1.1.tgz", - "integrity": "sha512-DXKLIEDbihK24fktR2hwp/BNIVwULIHaSTNTNhXS+19vgT50eX9wndx1bPxGwHnVBOONcwjXy0roQac49vdt/w==", - "dev": true, - "dependencies": { - "tslib": "^2.4.0" + "engines": { + "node": ">=16.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "node_modules/@graphql-tools/import": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/import/-/import-6.7.1.tgz", - "integrity": "sha512-StLosFVhdw+eZkL+v9dBabszxCAZtEYW4Oy1+750fDkH39GrmzOB8mWiYna7rm9+GMisC9atJtXuAfMF02Aoag==", + "version": "7.0.18", + "resolved": "https://registry.npmjs.org/@graphql-tools/import/-/import-7.0.18.tgz", + "integrity": "sha512-1tw1/1QLB0n5bPWfIrhCRnrHIlbMvbwuifDc98g4FPhJ7OXD+iUQe+IpmD5KHVwYWXWhZOuJuq45DfV/WLNq3A==", "dev": true, + "license": "MIT", "dependencies": { - "@graphql-tools/utils": "8.9.0", + "@graphql-tools/utils": "^10.8.6", "resolve-from": "5.0.0", "tslib": "^2.4.0" }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/import/node_modules/@graphql-tools/utils": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.9.0.tgz", - "integrity": "sha512-pjJIWH0XOVnYGXCqej8g/u/tsfV4LvLlj0eATKQu5zwnxd/TiTHq7Cg313qUPTFFHZ3PP5wJ15chYVtLDwaymg==", - "dev": true, - "dependencies": { - "tslib": "^2.4.0" + "engines": { + "node": ">=16.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "node_modules/@graphql-tools/json-file-loader": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/json-file-loader/-/json-file-loader-7.4.1.tgz", - "integrity": "sha512-+QaeRyJcvUXUNEoIaecYrABunqk8/opFbpdHPAijJyVHvlsYfqXR12/501g+/QZzGHKYnyi+Q3lsZbBboj5LBg==", + "version": "8.0.18", + "resolved": "https://registry.npmjs.org/@graphql-tools/json-file-loader/-/json-file-loader-8.0.18.tgz", + "integrity": "sha512-JjjIxxewgk8HeMR3npR3YbOkB7fxmdgmqB9kZLWdkRKBxrRXVzhryyq+mhmI0Evzt6pNoHIc3vqwmSctG2sddg==", "dev": true, + "license": "MIT", "dependencies": { - "@graphql-tools/utils": "8.9.0", + "@graphql-tools/utils": "^10.8.6", "globby": "^11.0.3", "tslib": "^2.4.0", "unixify": "^1.0.0" }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/json-file-loader/node_modules/@graphql-tools/utils": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.9.0.tgz", - "integrity": "sha512-pjJIWH0XOVnYGXCqej8g/u/tsfV4LvLlj0eATKQu5zwnxd/TiTHq7Cg313qUPTFFHZ3PP5wJ15chYVtLDwaymg==", - "dev": true, - "dependencies": { - "tslib": "^2.4.0" + "engines": { + "node": ">=16.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "node_modules/@graphql-tools/load": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/load/-/load-7.8.0.tgz", - "integrity": "sha512-l4FGgqMW0VOqo+NMYizwV8Zh+KtvVqOf93uaLo9wJ3sS3y/egPCgxPMDJJ/ufQZG3oZ/0oWeKt68qop3jY0yZg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/load/-/load-8.1.0.tgz", + "integrity": "sha512-OGfOm09VyXdNGJS/rLqZ6ztCiG2g6AMxhwtET8GZXTbnjptFc17GtKwJ3Jv5w7mjJ8dn0BHydvIuEKEUK4ciYw==", "dev": true, + "license": "MIT", "dependencies": { - "@graphql-tools/schema": "9.0.4", - "@graphql-tools/utils": "8.12.0", + "@graphql-tools/schema": "^10.0.23", + "@graphql-tools/utils": "^10.8.6", "p-limit": "3.1.0", "tslib": "^2.4.0" }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/load/node_modules/@graphql-tools/schema": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.4.tgz", - "integrity": "sha512-B/b8ukjs18fq+/s7p97P8L1VMrwapYc3N2KvdG/uNThSazRRn8GsBK0Nr+FH+mVKiUfb4Dno79e3SumZVoHuOQ==", - "dev": true, - "dependencies": { - "@graphql-tools/merge": "8.3.6", - "@graphql-tools/utils": "8.12.0", - "tslib": "^2.4.0", - "value-or-promise": "1.0.11" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/load/node_modules/@graphql-tools/utils": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.12.0.tgz", - "integrity": "sha512-TeO+MJWGXjUTS52qfK4R8HiPoF/R7X+qmgtOYd8DTH0l6b+5Y/tlg5aGeUJefqImRq7nvi93Ms40k/Uz4D5CWw==", - "dev": true, - "dependencies": { - "tslib": "^2.4.0" + "engines": { + "node": ">=16.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "node_modules/@graphql-tools/merge": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.3.6.tgz", - "integrity": "sha512-uUBokxXi89bj08P+iCvQk3Vew4vcfL5ZM6NTylWi8PIpoq4r5nJ625bRuN8h2uubEdRiH8ntN9M4xkd/j7AybQ==", - "dev": true, + "version": "9.0.24", + "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-9.0.24.tgz", + "integrity": "sha512-NzWx/Afl/1qHT3Nm1bghGG2l4jub28AdvtG11PoUlmjcIjnFBJMv4vqL0qnxWe8A82peWo4/TkVdjJRLXwgGEw==", + "license": "MIT", "dependencies": { - "@graphql-tools/utils": "8.12.0", + "@graphql-tools/utils": "^10.8.6", "tslib": "^2.4.0" }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.12.0.tgz", - "integrity": "sha512-TeO+MJWGXjUTS52qfK4R8HiPoF/R7X+qmgtOYd8DTH0l6b+5Y/tlg5aGeUJefqImRq7nvi93Ms40k/Uz4D5CWw==", - "dev": true, - "dependencies": { - "tslib": "^2.4.0" + "engines": { + "node": ">=16.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "node_modules/@graphql-tools/mock": { - "version": "8.7.20", - "resolved": "https://registry.npmjs.org/@graphql-tools/mock/-/mock-8.7.20.tgz", - "integrity": "sha512-ljcHSJWjC/ZyzpXd5cfNhPI7YljRVvabKHPzKjEs5ElxWu2cdlLGvyNYepApXDsM/OJG/2xuhGM+9GWu5gEAPQ==", + "version": "9.0.23", + "resolved": "https://registry.npmjs.org/@graphql-tools/mock/-/mock-9.0.23.tgz", + "integrity": "sha512-l6z5OdMAvMybqG/8aIhSJyhyc4/ryEYWY4CmpkH9KbLFe0tLOMCCbBR0+K/ANMzs2ZdGy/9yknDHGvDH46fwZw==", "dev": true, + "license": "MIT", "dependencies": { - "@graphql-tools/schema": "^9.0.18", - "@graphql-tools/utils": "^9.2.1", + "@graphql-tools/schema": "^10.0.23", + "@graphql-tools/utils": "^10.8.6", "fast-json-stable-stringify": "^2.1.0", "tslib": "^2.4.0" }, + "engines": { + "node": ">=16.0.0" + }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "node_modules/@graphql-tools/optimize": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/optimize/-/optimize-1.4.0.tgz", - "integrity": "sha512-dJs/2XvZp+wgHH8T5J2TqptT9/6uVzIYvA6uFACha+ufvdMBedkfR4b4GbT8jAKLRARiqRTxy3dctnwkTM2tdw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/optimize/-/optimize-2.0.0.tgz", + "integrity": "sha512-nhdT+CRGDZ+bk68ic+Jw1OZ99YCDIKYA5AlVAnBHJvMawSx9YQqQAIj4refNc1/LRieGiuWvhbG3jvPVYho0Dg==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.4.0" }, + "engines": { + "node": ">=16.0.0" + }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "node_modules/@graphql-tools/prisma-loader": { - "version": "7.2.50", - "resolved": "https://registry.npmjs.org/@graphql-tools/prisma-loader/-/prisma-loader-7.2.50.tgz", - "integrity": "sha512-tSZFtx5GP5LBHmChwVCkvFw9oCwc0QVP2xR/Pyp61c3Fb2gyqzFq/8lnbcmxR+Oi9/Cwt3JsSc4Jkg8jBi5HLw==", + "version": "8.0.1", "dev": true, + "license": "MIT", "dependencies": { - "@graphql-tools/url-loader": "7.16.29", - "@graphql-tools/utils": "9.1.3", + "@graphql-tools/url-loader": "^8.0.0", + "@graphql-tools/utils": "^10.0.0", "@types/js-yaml": "^4.0.0", "@types/json-stable-stringify": "^1.0.32", - "@types/jsonwebtoken": "^8.5.0", + "@whatwg-node/fetch": "^0.9.0", "chalk": "^4.1.0", "debug": "^4.3.1", "dotenv": "^16.0.0", - "graphql-request": "^5.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "isomorphic-fetch": "^3.0.0", + "graphql-request": "^6.0.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "jose": "^4.11.4", "js-yaml": "^4.0.0", "json-stable-stringify": "^1.0.1", - "jsonwebtoken": "^9.0.0", "lodash": "^4.17.20", "scuid": "^1.1.0", "tslib": "^2.4.0", "yaml-ast-parser": "^0.0.43" }, + "engines": { + "node": ">=16.0.0" + }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-tools/prisma-loader/node_modules/@graphql-tools/utils": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.1.3.tgz", - "integrity": "sha512-bbJyKhs6awp1/OmP+WKA1GOyu9UbgZGkhIj5srmiMGLHohEOKMjW784Sk0BZil1w2x95UPu0WHw6/d/HVCACCg==", + "node_modules/@graphql-tools/prisma-loader/node_modules/agent-base": { + "version": "7.1.0", "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.4.0" + "debug": "^4.3.4" }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + "engines": { + "node": ">= 14" } }, - "node_modules/@graphql-tools/relay-operation-optimizer": { - "version": "6.5.18", - "resolved": "https://registry.npmjs.org/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-6.5.18.tgz", - "integrity": "sha512-mc5VPyTeV+LwiM+DNvoDQfPqwQYhPV/cl5jOBjTgSniyaq8/86aODfMkrE2OduhQ5E00hqrkuL2Fdrgk0w1QJg==", + "node_modules/@graphql-tools/prisma-loader/node_modules/http-proxy-agent": { + "version": "7.0.0", "dev": true, + "license": "MIT", "dependencies": { - "@ardatan/relay-compiler": "12.0.0", - "@graphql-tools/utils": "^9.2.1", - "tslib": "^2.4.0" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + "engines": { + "node": ">= 14" } }, - "node_modules/@graphql-tools/schema": { - "version": "9.0.19", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.19.tgz", - "integrity": "sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==", + "node_modules/@graphql-tools/prisma-loader/node_modules/https-proxy-agent": { + "version": "7.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "@graphql-tools/merge": "^8.4.1", - "@graphql-tools/utils": "^9.2.1", - "tslib": "^2.4.0", - "value-or-promise": "^1.0.12" + "agent-base": "^7.0.2", + "debug": "4" }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + "engines": { + "node": ">= 14" } }, - "node_modules/@graphql-tools/schema/node_modules/@graphql-tools/merge": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.4.1.tgz", - "integrity": "sha512-hssnPpZ818mxgl5+GfyOOSnnflAxiaTn1A1AojZcIbh4J52sS1Q0gSuBR5VrnUDjuxiqoCotpXdAQl+K+U6KLQ==", + "node_modules/@graphql-tools/relay-operation-optimizer": { + "version": "7.0.19", + "resolved": "https://registry.npmjs.org/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-7.0.19.tgz", + "integrity": "sha512-xnjLpfzw63yIX1bo+BVh4j1attSwqEkUbpJ+HAhdiSUa3FOQFfpWgijRju+3i87CwhjBANqdTZbcsqLT1hEXig==", + "dev": true, + "license": "MIT", "dependencies": { - "@graphql-tools/utils": "^9.2.1", + "@ardatan/relay-compiler": "^12.0.3", + "@graphql-tools/utils": "^10.8.6", "tslib": "^2.4.0" }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/schema/node_modules/value-or-promise": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz", - "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==", "engines": { - "node": ">=12" - } - }, - "node_modules/@graphql-tools/url-loader": { - "version": "7.16.29", - "resolved": "https://registry.npmjs.org/@graphql-tools/url-loader/-/url-loader-7.16.29.tgz", - "integrity": "sha512-e7c0rLH4BIaYxOgglHhWbupTn3JZFXYIHXpY+T1CcTF3nQQCaKy8o59+R2AjtEgx3Az1WNahGn4xgkKUxUwCBw==", - "dev": true, - "dependencies": { - "@ardatan/sync-fetch": "0.0.1", - "@graphql-tools/delegate": "9.0.21", - "@graphql-tools/executor-graphql-ws": "0.0.5", - "@graphql-tools/executor-http": "0.0.8", - "@graphql-tools/executor-legacy-ws": "0.0.5", - "@graphql-tools/utils": "9.1.3", - "@graphql-tools/wrap": "9.2.23", - "@types/ws": "^8.0.0", - "@whatwg-node/fetch": "^0.5.0", - "isomorphic-ws": "5.0.0", - "tslib": "^2.4.0", - "value-or-promise": "^1.0.11", - "ws": "8.11.0" + "node": ">=16.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-tools/url-loader/node_modules/@graphql-tools/utils": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.1.3.tgz", - "integrity": "sha512-bbJyKhs6awp1/OmP+WKA1GOyu9UbgZGkhIj5srmiMGLHohEOKMjW784Sk0BZil1w2x95UPu0WHw6/d/HVCACCg==", - "dev": true, + "node_modules/@graphql-tools/schema": { + "version": "10.0.23", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-10.0.23.tgz", + "integrity": "sha512-aEGVpd1PCuGEwqTXCStpEkmheTHNdMayiIKH1xDWqYp9i8yKv9FRDgkGrY4RD8TNxnf7iII+6KOBGaJ3ygH95A==", + "license": "MIT", "dependencies": { + "@graphql-tools/merge": "^9.0.24", + "@graphql-tools/utils": "^10.8.6", "tslib": "^2.4.0" }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/url-loader/node_modules/@whatwg-node/fetch": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.5.4.tgz", - "integrity": "sha512-dR5PCzvOeS7OaW6dpIlPt+Ou3pak7IEG+ZVAV26ltcaiDB3+IpuvjqRdhsY6FKHcqBo1qD+S99WXY9Z6+9Rwnw==", - "dev": true, - "dependencies": { - "@peculiar/webcrypto": "^1.4.0", - "abort-controller": "^3.0.0", - "busboy": "^1.6.0", - "form-data-encoder": "^1.7.1", - "formdata-node": "^4.3.1", - "node-fetch": "^2.6.7", - "undici": "^5.12.0", - "web-streams-polyfill": "^3.2.0" - } - }, - "node_modules/@graphql-tools/utils": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", - "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", - "dependencies": { - "@graphql-typed-document-node/core": "^3.1.1", - "tslib": "^2.4.0" + "engines": { + "node": ">=16.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-tools/wrap": { - "version": "9.2.23", - "resolved": "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-9.2.23.tgz", - "integrity": "sha512-R+ar8lHdSnRQtfvkwQMOkBRlYLcBPdmFzZPiAj+tL9Nii4VNr4Oub37jcHiPBvRZSdKa9FHcKq5kKSQcbg1xuQ==", + "node_modules/@graphql-tools/url-loader": { + "version": "8.0.0", "dev": true, + "license": "MIT", "dependencies": { - "@graphql-tools/delegate": "9.0.21", - "@graphql-tools/schema": "9.0.12", - "@graphql-tools/utils": "9.1.3", + "@ardatan/sync-fetch": "^0.0.1", + "@graphql-tools/delegate": "^10.0.0", + "@graphql-tools/executor-graphql-ws": "^1.0.0", + "@graphql-tools/executor-http": "^1.0.0", + "@graphql-tools/executor-legacy-ws": "^1.0.0", + "@graphql-tools/utils": "^10.0.0", + "@graphql-tools/wrap": "^10.0.0", + "@types/ws": "^8.0.0", + "@whatwg-node/fetch": "^0.9.0", + "isomorphic-ws": "^5.0.0", "tslib": "^2.4.0", - "value-or-promise": "1.0.11" + "value-or-promise": "^1.0.11", + "ws": "^8.12.0" + }, + "engines": { + "node": ">=16.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-tools/wrap/node_modules/@graphql-tools/merge": { - "version": "8.3.14", - "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.3.14.tgz", - "integrity": "sha512-zV0MU1DnxJLIB0wpL4N3u21agEiYFsjm6DI130jqHpwF0pR9HkF+Ni65BNfts4zQelP0GjkHltG+opaozAJ1NA==", - "dev": true, + "node_modules/@graphql-tools/utils": { + "version": "10.8.6", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.8.6.tgz", + "integrity": "sha512-Alc9Vyg0oOsGhRapfL3xvqh1zV8nKoFUdtLhXX7Ki4nClaIJXckrA86j+uxEuG3ic6j4jlM1nvcWXRn/71AVLQ==", + "license": "MIT", "dependencies": { - "@graphql-tools/utils": "9.1.3", + "@graphql-typed-document-node/core": "^3.1.1", + "@whatwg-node/promise-helpers": "^1.0.0", + "cross-inspect": "1.0.1", + "dset": "^3.1.4", "tslib": "^2.4.0" }, + "engines": { + "node": ">=16.0.0" + }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-tools/wrap/node_modules/@graphql-tools/schema": { - "version": "9.0.12", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.12.tgz", - "integrity": "sha512-DmezcEltQai0V1y96nwm0Kg11FDS/INEFekD4nnVgzBqawvznWqK6D6bujn+cw6kivoIr3Uq//QmU/hBlBzUlQ==", + "node_modules/@graphql-tools/wrap": { + "version": "10.0.0", "dev": true, + "license": "MIT", "dependencies": { - "@graphql-tools/merge": "8.3.14", - "@graphql-tools/utils": "9.1.3", + "@graphql-tools/delegate": "^10.0.0", + "@graphql-tools/schema": "^10.0.0", + "@graphql-tools/utils": "^10.0.0", "tslib": "^2.4.0", - "value-or-promise": "1.0.11" + "value-or-promise": "^1.0.12" }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/wrap/node_modules/@graphql-tools/utils": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.1.3.tgz", - "integrity": "sha512-bbJyKhs6awp1/OmP+WKA1GOyu9UbgZGkhIj5srmiMGLHohEOKMjW784Sk0BZil1w2x95UPu0WHw6/d/HVCACCg==", - "dev": true, - "dependencies": { - "tslib": "^2.4.0" + "engines": { + "node": ">=16.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "node_modules/@graphql-typed-document-node/core": { - "version": "3.1.1", + "version": "3.2.0", "license": "MIT", "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", + "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", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, "engines": { - "node": ">=10.10.0" + "node": ">=18.18.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "brace-expansion": "^1.1.7" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" }, "engines": { - "node": "*" + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, "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" }, @@ -3548,20 +2846,19 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@iarna/toml": { - "version": "2.2.5", + "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": "ISC", - "optional": true, - "peer": true + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", @@ -3604,8 +2901,7 @@ }, "node_modules/@jest/console": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -3620,8 +2916,7 @@ }, "node_modules/@jest/core": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/reporters": "^29.7.0", @@ -3666,8 +2961,7 @@ }, "node_modules/@jest/environment": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "license": "MIT", "dependencies": { "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", @@ -3680,8 +2974,7 @@ }, "node_modules/@jest/expect": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "license": "MIT", "dependencies": { "expect": "^29.7.0", "jest-snapshot": "^29.7.0" @@ -3692,8 +2985,7 @@ }, "node_modules/@jest/expect-utils": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3" }, @@ -3703,8 +2995,7 @@ }, "node_modules/@jest/fake-timers": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", @@ -3719,8 +3010,7 @@ }, "node_modules/@jest/globals": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -3733,8 +3023,7 @@ }, "node_modules/@jest/reporters": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^29.7.0", @@ -3774,13 +3063,12 @@ } }, "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz", - "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==", + "version": "6.0.3", + "license": "BSD-3-Clause", "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", "istanbul-lib-coverage": "^3.2.0", "semver": "^7.5.4" }, @@ -3790,8 +3078,7 @@ }, "node_modules/@jest/schemas": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.27.8" }, @@ -3801,8 +3088,7 @@ }, "node_modules/@jest/source-map": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", @@ -3814,8 +3100,7 @@ }, "node_modules/@jest/test-result": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/types": "^29.6.3", @@ -3828,8 +3113,7 @@ }, "node_modules/@jest/test-sequencer": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", @@ -3842,8 +3126,7 @@ }, "node_modules/@jest/transform": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^29.6.3", @@ -3865,15 +3148,9 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/transform/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" - }, "node_modules/@jest/transform/node_modules/write-file-atomic": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -3884,8 +3161,7 @@ }, "node_modules/@jest/types": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -3904,13 +3180,12 @@ "license": "ISC" }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "version": "0.3.8", + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -3918,39 +3193,34 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "version": "0.3.25", + "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@manypkg/find-root": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.5.5", "@types/node": "^12.7.1", @@ -3960,15 +3230,13 @@ }, "node_modules/@manypkg/find-root/node_modules/@types/node": { "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@manypkg/find-root/node_modules/fs-extra": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -3980,9 +3248,8 @@ }, "node_modules/@manypkg/get-packages": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz", - "integrity": "sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.5.5", "@changesets/types": "^4.0.1", @@ -3994,15 +3261,13 @@ }, "node_modules/@manypkg/get-packages/node_modules/@changesets/types": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz", - "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@manypkg/get-packages/node_modules/fs-extra": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -4012,10 +3277,24 @@ "node": ">=6 <7 || >=8" } }, + "node_modules/@mswjs/interceptors": { + "version": "0.38.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/logger": "^0.3.0", + "@open-draft/until": "^2.0.0", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "strict-event-emitter": "^0.5.1" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@noble/hashes": { "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", - "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", "license": "MIT", "engines": { "node": "^14.21.3 || >=16" @@ -4058,9 +3337,8 @@ }, "node_modules/@npmcli/fs": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", - "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", "dev": true, + "license": "ISC", "dependencies": { "semver": "^7.3.5" }, @@ -4068,19 +3346,35 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/@open-draft/deferred-promise": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@open-draft/logger": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-node-process": "^1.2.0", + "outvariant": "^1.4.0" + } + }, + "node_modules/@open-draft/until": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, "node_modules/@opentelemetry/api": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.4.0.tgz", - "integrity": "sha512-IgMK9i3sFGNUqPMbjABm0G26g0QCKCUBfglhQ7rQq6WcxbKfEHRcmwsoER4hZcuYqJgkYn2OeuoJIv7Jsftp7g==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=8.0.0" } }, "node_modules/@paralleldrive/cuid2": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz", - "integrity": "sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==", "license": "MIT", "dependencies": { "@noble/hashes": "^1.1.5" @@ -4088,10 +3382,11 @@ }, "node_modules/@parcel/watcher": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.1.0.tgz", - "integrity": "sha512-8s8yYjd19pDSsBpbkOHnT6Z2+UJSuLQx61pCFM0s5wSRvKCEMDjd/cHY3/GI1szHIWbpXpsJdg3V6ISGGx9xDw==", "dev": true, "hasInstallScript": true, + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "is-glob": "^4.0.3", "micromatch": "^4.0.5", @@ -4106,45 +3401,6 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/@peculiar/asn1-schema": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.2.0.tgz", - "integrity": "sha512-1ENEJNY7Lwlua/1wvzpYP194WtjQBfFxvde2FlzfBFh/ln6wvChrtxlORhbKEnYswzn6fOC4c7HdC5izLPMTJg==", - "dev": true, - "dependencies": { - "asn1js": "^3.0.5", - "pvtsutils": "^1.3.2", - "tslib": "^2.4.0" - } - }, - "node_modules/@peculiar/json-schema": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", - "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", - "dev": true, - "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@peculiar/webcrypto": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.4.0.tgz", - "integrity": "sha512-U58N44b2m3OuTgpmKgf0LPDOmP3bhwNz01vAnj1mBwxBASRhptWYK+M3zG+HBkDqGQM+bFsoIihTW8MdmPXEqg==", - "dev": true, - "dependencies": { - "@peculiar/asn1-schema": "^2.1.6", - "@peculiar/json-schema": "^1.1.12", - "pvtsutils": "^1.3.2", - "tslib": "^2.4.0", - "webcrypto-core": "^1.7.4" - }, - "engines": { - "node": ">=10.12.0" - } - }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", "license": "BSD-3-Clause" @@ -4191,9 +3447,8 @@ }, "node_modules/@repeaterjs/repeater": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.4.tgz", - "integrity": "sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@rollup/plugin-commonjs": { "version": "28.0.6", @@ -4223,9 +3478,7 @@ } }, "node_modules/@rollup/plugin-commonjs/node_modules/fdir": { - "version": "6.4.6", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", - "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "version": "6.4.4", "dev": true, "license": "MIT", "peerDependencies": { @@ -4239,8 +3492,6 @@ }, "node_modules/@rollup/plugin-commonjs/node_modules/picomatch": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, "license": "MIT", "engines": { @@ -4251,20 +3502,21 @@ } }, "node_modules/@rollup/pluginutils": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.1.tgz", - "integrity": "sha512-4HaCVEXXuObvcPUaUlLt4faHYHCeQOOWNj8NKFGaRSrw3ZLD0TWeAFZicV9vXjnE2nkNuaVTfTuwAnjR+6uc9A==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" + "picomatch": "^4.0.2" }, "engines": { "node": ">=14.0.0" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { "rollup": { @@ -4272,166 +3524,407 @@ } } }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 10" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.0.tgz", + "integrity": "sha512-KxN+zCjOYHGwCl4UCtSfZ6jrq/qi88JDUtiEFk8LELEHq2Egfc/FgW+jItZiOLRuQfb/3xJSgFuNPC9jzggX+A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", "optional": true, - "peer": true + "os": [ + "android" + ] }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.0.tgz", + "integrity": "sha512-yDvqx3lWlcugozax3DItKJI5j05B0d4Kvnjx+5mwiUpWramVvmAByYigMplaoAQ3pvdprGCTCE03eduqE/8mPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", "optional": true, - "peer": true + "os": [ + "android" + ] }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.0.tgz", + "integrity": "sha512-2KOU574vD3gzcPSjxO0eyR5iWlnxxtmW1F5CkNOHmMlueKNCQkxR6+ekgWyVnz6zaZihpUNkGxjsYrkTJKhkaw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", "optional": true, - "peer": true + "os": [ + "darwin" + ] }, - "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.0.tgz", + "integrity": "sha512-gE5ACNSxHcEZyP2BA9TuTakfZvULEW4YAOtxl/A/YDbIir/wPKukde0BNPlnBiP88ecaN4BJI2TtAd+HKuZPQQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", "optional": true, - "peer": true + "os": [ + "darwin" + ] }, - "node_modules/@types/async-retry": { - "version": "1.4.9", - "resolved": "https://registry.npmjs.org/@types/async-retry/-/async-retry-1.4.9.tgz", - "integrity": "sha512-s1ciZQJzRh3708X/m3vPExr5KJlzlZJvXsKpbtE2luqNcbROr64qU+3KpJsYHqWMeaxI839OvXf9PrUSw1Xtyg==", + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.0.tgz", + "integrity": "sha512-GSxU6r5HnWij7FoSo7cZg3l5GPg4HFLkzsFFh0N/b16q5buW1NAWuCJ+HMtIdUEi6XF0qH+hN0TEd78laRp7Dg==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@types/retry": "*" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.4", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.4.tgz", - "integrity": "sha512-N7UDG0/xiPQa2D/XrVJXjkWbpqHCd2sBaB32ggRF2l83RhPfamgKGF8gwwqyksS95qUS5ZYF9aF+lLPRlwI2UA==", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } + "optional": true, + "os": [ + "freebsd" + ] }, - "node_modules/@types/compression": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@types/compression/-/compression-1.8.1.tgz", - "integrity": "sha512-kCFuWS0ebDbmxs0AXYn6e2r2nrGAb5KwQhknjSPSPgJcGd8+HVSILlUyFhGqML2gk39HcG7D1ydW9/qpYkN00Q==", + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.0.tgz", + "integrity": "sha512-KGiGKGDg8qLRyOWmk6IeiHJzsN/OYxO6nSbT0Vj4MwjS2XQy/5emsmtoqLAabqrohbgLWJ5GV3s/ljdrIr8Qjg==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@types/express": "*", - "@types/node": "*" - } + "optional": true, + "os": [ + "freebsd" + ] }, - "node_modules/@types/connect": { - "version": "3.4.35", + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.0.tgz", + "integrity": "sha512-46OzWeqEVQyX3N2/QdiU/CMXYDH/lSHpgfBkuhl3igpZiaB3ZIfSjKuOnybFVBQzjsLwkus2mjaESy8H41SzvA==", + "cpu": [ + "arm" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@types/node": "*" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@types/cookiejar": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz", - "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==", - "dev": true + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.0.tgz", + "integrity": "sha512-lfgW3KtQP4YauqdPpcUZHPcqQXmTmH4nYU0cplNeW583CMkAGjtImw4PKli09NFi2iQgChk4e9erkwlfYem6Lg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@types/cors": { - "version": "2.8.19", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", - "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==", + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.0.tgz", + "integrity": "sha512-nn8mEyzMbdEJzT7cwxgObuwviMx6kPRxzYiOl6o/o+ChQq23gfdlZcUNnt89lPhhz3BYsZ72rp0rxNqBSfqlqw==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@types/node": "*" - } + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.0.tgz", + "integrity": "sha512-l+QK99je2zUKGd31Gh+45c4pGDAqZSuWQiuRFCdHYC2CSiO47qUWsCcenrI6p22hvHZrDje9QjwSMAFL3iwXwQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.0.tgz", + "integrity": "sha512-WbnJaxPv1gPIm6S8O/Wg+wfE/OzGSXlBMbOe4ie+zMyykMOeqmgD1BhPxZQuDqwUN+0T/xOFtL2RUWBspnZj3w==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.0.tgz", + "integrity": "sha512-eRDWR5t67/b2g8Q/S8XPi0YdbKcCs4WQ8vklNnUYLaSWF+Cbv2axZsp4jni6/j7eKvMLYCYdcsv8dcU+a6QNFg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.0.tgz", + "integrity": "sha512-TWrZb6GF5jsEKG7T1IHwlLMDRy2f3DPqYldmIhnA2DVqvvhY2Ai184vZGgahRrg8k9UBWoSlHv+suRfTN7Ua4A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.0.tgz", + "integrity": "sha512-ieQljaZKuJpmWvd8gW87ZmSFwid6AxMDk5bhONJ57U8zT77zpZ/TPKkU9HpnnFrM4zsgr4kiGuzbIbZTGi7u9A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.0.tgz", + "integrity": "sha512-/L3pW48SxrWAlVsKCN0dGLB2bi8Nv8pr5S5ocSM+S0XCn5RCVCXqi8GVtHFsOBBCSeR+u9brV2zno5+mg3S4Aw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.0.tgz", + "integrity": "sha512-XMLeKjyH8NsEDCRptf6LO8lJk23o9wvB+dJwcXMaH6ZQbbkHu2dbGIUindbMtRN6ux1xKi16iXWu6q9mu7gDhQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.0.tgz", + "integrity": "sha512-m/P7LycHZTvSQeXhFmgmdqEiTqSV80zn6xHaQ1JSqwCtD1YGtwEK515Qmy9DcB2HK4dOUVypQxvhVSy06cJPEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.0.tgz", + "integrity": "sha512-4yodtcOrFHpbomJGVEqZ8fzD4kfBeCbpsUy5Pqk4RluXOdsWdjLnjhiKy2w3qzcASWd04fp52Xz7JKarVJ5BTg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.0.tgz", + "integrity": "sha512-tmazCrAsKzdkXssEc65zIE1oC6xPHwfy9d5Ta25SRCDOZS+I6RypVVShWALNuU9bxIfGA0aqrmzlzoM5wO5SPQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.0.tgz", + "integrity": "sha512-h1J+Yzjo/X+0EAvR2kIXJDuTuyT7drc+t2ALY0nIcGPbTatNOf0VWdhEA2Z4AAjv6X1NJV7SYo5oCTYRJhSlVA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "license": "MIT" + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/async-retry": { + "version": "1.4.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/retry": "*" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.7", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cookiejar": { + "version": "2.1.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/cors": { + "version": "2.8.19", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } }, "node_modules/@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true, + "license": "MIT" }, "node_modules/@types/express": { "version": "4.17.23", @@ -4447,8 +3940,6 @@ }, "node_modules/@types/express-serve-static-core": { "version": "4.19.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", "license": "MIT", "dependencies": { "@types/node": "*", @@ -4457,10 +3948,19 @@ "@types/send": "*" } }, + "node_modules/@types/finalhandler": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/finalhandler/-/finalhandler-1.2.3.tgz", + "integrity": "sha512-I+Ba0JZEiuSr8LLjVmBhvLBEN8KG9GSITNXWwPCLeAvZj/k5pXEdOBEvnEEIgA038eeaauJ3BPxbuxeFBsqqUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "version": "4.1.9", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4485,57 +3985,35 @@ }, "node_modules/@types/js-yaml": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.5.tgz", - "integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true + "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/json-stable-stringify": { "version": "1.0.34", - "resolved": "https://registry.npmjs.org/@types/json-stable-stringify/-/json-stable-stringify-1.0.34.tgz", - "integrity": "sha512-s2cfwagOQAS8o06TcwKfr9Wx11dNGbH2E9vJz1cqV+a/LOyhWNLUNd6JSRYNzvB4d29UuJX2M0Dj9vE1T8fRXw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/json5": { "version": "0.0.29", "dev": true, "license": "MIT" }, - "node_modules/@types/jsonwebtoken": { - "version": "8.5.8", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.8.tgz", - "integrity": "sha512-zm6xBQpFDIDM6o9r6HSgDeIcLy82TKWctCXEPbJJcXb5AKmi5BNNdLXneixK4lplX3PqIVcwLBCGE/kAGnlD4A==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-NYqRyg/hIQrYPT9lbOeYc3kIRabJDn/k4qQHIXUpx88CBDww2fD15Sg5kbXlW86zm2XEW4g0QxkTI3/Kfkc7xQ==", + "version": "4.17.17", "dev": true, "license": "MIT" }, "node_modules/@types/lodash.sumby": { "version": "4.6.9", - "resolved": "https://registry.npmjs.org/@types/lodash.sumby/-/lodash.sumby-4.6.9.tgz", - "integrity": "sha512-rqtOxrmIWuYpxjq867H+mptnAfN1levAPwpiadV+wJgRBXBLUTJT5rDlDUPxMNkWtIdBTv8mE+U4u86rSVoc/Q==", - "dev": true, - "dependencies": { - "@types/lodash": "*" - } - }, - "node_modules/@types/lodash.xorby": { - "version": "4.7.9", - "resolved": "https://registry.npmjs.org/@types/lodash.xorby/-/lodash.xorby-4.7.9.tgz", - "integrity": "sha512-xSS2aud1+TSbw8WrsoGolNFvJJO32phDD28F6ZA2KLcrVToDxvYmKEOvPUvKkZDVbMG+EdpDzejdO+9vmhoj8A==", "dev": true, + "license": "MIT", "dependencies": { "@types/lodash": "*" } @@ -4546,9 +4024,8 @@ }, "node_modules/@types/methods": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz", - "integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/mime": { "version": "1.3.2", @@ -4556,79 +4033,41 @@ }, "node_modules/@types/negotiator": { "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@types/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-elf6BsTq+AkyNsb2h5cGNst2Mc7dPliVoAPm1fXglC/BM3f2pFA40BaSSv3E5lyHteEawVKLP+8TwiY1DMNb3A==", "dev": true, "license": "MIT" }, "node_modules/@types/node": { - "version": "14.18.63", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", - "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==" + "version": "20.14.8", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } }, "node_modules/@types/node-fetch": { "version": "2.6.12", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*", "form-data": "^4.0.0" } }, - "node_modules/@types/node-fetch/node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, "node_modules/@types/qs": { "version": "6.9.7", "license": "MIT" }, - "node_modules/@types/qs-middleware": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/qs-middleware/-/qs-middleware-1.0.4.tgz", - "integrity": "sha512-vMA6TULU1opdilMWD/2j3Og/mikVEdQ8+ZiPksJz2DPTVYR1DZ/Q8ZKGZWlWlgWfUhamp3OFi1hZ+YJgFuE86g==", - "dev": true, - "dependencies": { - "@types/express": "*", - "@types/qs": "*" - } - }, "node_modules/@types/range-parser": { "version": "1.2.4", "license": "MIT" }, "node_modules/@types/retry": { "version": "0.12.5", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.5.tgz", - "integrity": "sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw==", - "dev": true - }, - "node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/send": { "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "license": "MIT", "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -4644,14 +4083,12 @@ }, "node_modules/@types/stack-utils": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + "license": "MIT" }, "node_modules/@types/superagent": { "version": "8.1.9", - "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz", - "integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/cookiejar": "^2.1.5", "@types/methods": "^1.1.4", @@ -4659,24 +4096,8 @@ "form-data": "^4.0.0" } }, - "node_modules/@types/superagent/node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/@types/supertest": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.3.tgz", - "integrity": "sha512-8WzXq62EXFhJ7QsH3Ocb/iKQ/Ty9ZVWnVzoTKc9tyyFRRF3a74Tk2+TLFgaFFw364Ere+npzHKEJ6ga2LzIL7w==", "dev": true, "license": "MIT", "dependencies": { @@ -4684,40 +4105,20 @@ "@types/superagent": "^8.1.0" } }, - "node_modules/@types/test-listen": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/test-listen/-/test-listen-1.1.2.tgz", - "integrity": "sha512-1z4+FBjfjHOu9d3dXUWE5yD/iwVe3OrHALX6Y2Qsv3CAL1+U2lvsIgbrIyHifi8HH1CUkHTYNDUFuUNXk1gusA==", + "node_modules/@types/uuid": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/type-is": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/@types/type-is/-/type-is-1.6.7.tgz", - "integrity": "sha512-gEsh7n8824nusZ2Sidh6POxNsIdTSvIAl5gXbeFj+TUaD1CO2r4i7MQYNMfEQkChU42s2bVWAda6x6BzIhtFbQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/uuid": { - "version": "9.0.8", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", - "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", - "dev": true, - "license": "MIT" + "license": "MIT" }, "node_modules/@types/whatwg-mimetype": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/whatwg-mimetype/-/whatwg-mimetype-3.0.2.tgz", - "integrity": "sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/ws": { - "version": "8.5.3", + "version": "8.5.5", "dev": true, "license": "MIT", "dependencies": { @@ -4736,77 +4137,82 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.32.1.tgz", + "integrity": "sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg==", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.32.1", + "@typescript-eslint/type-utils": "8.32.1", + "@typescript-eslint/utils": "8.32.1", + "@typescript-eslint/visitor-keys": "8.32.1", "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz", + "integrity": "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" } }, "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.32.1.tgz", + "integrity": "sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/scope-manager": "8.32.1", + "@typescript-eslint/types": "8.32.1", + "@typescript-eslint/typescript-estree": "8.32.1", + "@typescript-eslint/visitor-keys": "8.32.1", "debug": "^4.3.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.32.1.tgz", + "integrity": "sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" + "@typescript-eslint/types": "8.32.1", + "@typescript-eslint/visitor-keys": "8.32.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -4814,39 +4220,37 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.32.1.tgz", + "integrity": "sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", + "@typescript-eslint/typescript-estree": "8.32.1", + "@typescript-eslint/utils": "8.32.1", "debug": "^4.3.4", - "tsutils": "^3.21.0" + "ts-api-utils": "^2.1.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.32.1.tgz", + "integrity": "sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==", "dev": true, + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -4854,133 +4258,172 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.1.tgz", + "integrity": "sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", + "@typescript-eslint/types": "8.32.1", + "@typescript-eslint/visitor-keys": "8.32.1", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.32.1.tgz", + "integrity": "sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.32.1", + "@typescript-eslint/types": "8.32.1", + "@typescript-eslint/typescript-estree": "8.32.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.1.tgz", + "integrity": "sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "8.32.1", + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "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/@vendia/serverless-express": { - "version": "4.12.6", - "resolved": "https://registry.npmjs.org/@vendia/serverless-express/-/serverless-express-4.12.6.tgz", - "integrity": "sha512-ePsIPk3VQwgm5nh/JGBtTKQs5ZOF7REjHxC+PKk/CHvhlKQkJuUU365uPOlxuLJhC+BAefDznDRReWxpnKjmYg==", + "node_modules/@whatwg-node/disposablestack": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@whatwg-node/disposablestack/-/disposablestack-0.0.6.tgz", + "integrity": "sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==", "dev": true, + "license": "MIT", "dependencies": { - "@codegenie/serverless-express": "^4.12.5" + "@whatwg-node/promise-helpers": "^1.0.0", + "tslib": "^2.6.3" }, "engines": { - "node": ">=12" + "node": ">=18.0.0" } }, - "node_modules/@whatwg-node/events": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.0.2.tgz", - "integrity": "sha512-WKj/lI4QjnLuPrim0cfO7i+HsDSXHxNv1y0CrJhdntuO3hxWZmnXCwNDnwOvry11OjRin6cgWNF+j/9Pn8TN4w==", - "dev": true - }, "node_modules/@whatwg-node/fetch": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.2.6.tgz", - "integrity": "sha512-NhHiqeGcKjgqUZvJTZSou9qsFEPBBG1LPm2Npz0cmcPvukhhQfjX+p3quRx6b9AyjNPp1f73VB1z4ApHy9FcNg==", + "version": "0.9.9", "dev": true, + "license": "MIT", "dependencies": { - "@peculiar/webcrypto": "^1.4.0", - "abort-controller": "^3.0.0", - "busboy": "^1.6.0", - "event-target-polyfill": "^0.0.3", - "form-data-encoder": "^1.7.1", - "formdata-node": "^4.3.1", - "node-fetch": "^2.6.7", - "undici": "^5.8.0", - "web-streams-polyfill": "^3.2.0" + "@whatwg-node/node-fetch": "^0.4.8", + "urlpattern-polyfill": "^9.0.0" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@whatwg-node/node-fetch": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.3.4.tgz", - "integrity": "sha512-gP1MN6DiHVbhkLWH1eCELhE2ZtLRxb+HRKu4eYze1Tijxz0uT1T2kk3lseZp94txzxCfbxGFU0jsWkxNdH3EXA==", + "node_modules/@whatwg-node/fetch/node_modules/@whatwg-node/events": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@whatwg-node/fetch/node_modules/@whatwg-node/node-fetch": { + "version": "0.4.11", "dev": true, + "license": "MIT", "dependencies": { - "@whatwg-node/events": "^0.0.2", + "@whatwg-node/events": "^0.1.0", "busboy": "^1.6.0", "fast-querystring": "^1.1.1", "fast-url-parser": "^1.1.3", "tslib": "^2.3.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@whatwg-node/fetch/node_modules/urlpattern-polyfill": { + "version": "9.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@whatwg-node/node-fetch": { + "version": "0.7.21", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.7.21.tgz", + "integrity": "sha512-QC16IdsEyIW7kZd77aodrMO7zAoDyyqRCTLg+qG4wqtP4JV9AA+p7/lgqMdD29XyiYdVvIdFrfI9yh7B1QvRvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^3.1.1", + "@whatwg-node/disposablestack": "^0.0.6", + "@whatwg-node/promise-helpers": "^1.3.2", + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@whatwg-node/promise-helpers": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@whatwg-node/promise-helpers/-/promise-helpers-1.3.2.tgz", + "integrity": "sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=16.0.0" } }, "node_modules/@wry/caches": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@wry/caches/-/caches-1.0.1.tgz", - "integrity": "sha512-bXuaUNLVVkD20wcGBWRyo7j9N3TxePEWFZj2Y+r9OoUzfqmavM84+mFykRicNsBqatba5JLay1t48wxaXaWnlA==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, @@ -4989,9 +4432,8 @@ } }, "node_modules/@wry/context": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@wry/context/-/context-0.7.3.tgz", - "integrity": "sha512-Nl8WTesHp89RF803Se9X3IiHjdmLBrIvPMaJkl+rKVJAYyPsz1TEUbu89943HpvujtSJgDUx9W4vZw3K1Mr3sA==", + "version": "0.7.4", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, @@ -5000,9 +4442,8 @@ } }, "node_modules/@wry/equality": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.5.6.tgz", - "integrity": "sha512-D46sfMTngaYlrH+OspKf8mIJETntFnf6Hsjb0V41jAXJ7Bx2kB8Rv8RCUujuVWYttFtHkUNp7g+FwxNQAr6mXA==", + "version": "0.5.7", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, @@ -5011,9 +4452,8 @@ } }, "node_modules/@wry/trie": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@wry/trie/-/trie-0.4.3.tgz", - "integrity": "sha512-I6bHwH0fSf6RqQcnnXLJKhkSXG45MFral3GxPaY4uAl0LYDZM+YDVDAiU9bYwjTuysy1S0IeecWtmq1SZA3M1w==", + "version": "0.5.0", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, @@ -5021,18 +4461,6 @@ "node": ">=8" } }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, "node_modules/accepts": { "version": "1.3.8", "license": "MIT", @@ -5045,10 +4473,11 @@ } }, "node_modules/acorn": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", - "devOptional": true, + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -5061,20 +4490,11 @@ "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/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/agent-base": { "version": "6.0.2", "dev": true, @@ -5088,9 +4508,8 @@ }, "node_modules/agentkeepalive": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.0", "depd": "^1.1.2", @@ -5102,18 +4521,16 @@ }, "node_modules/agentkeepalive/node_modules/depd": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/aggregate-error": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, + "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -5124,15 +4541,16 @@ }, "node_modules/aggregate-error/node_modules/indent-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "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": { @@ -5193,7 +4611,7 @@ "license": "MIT" }, "node_modules/anymatch": { - "version": "3.1.2", + "version": "3.1.3", "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", @@ -5203,12 +4621,6 @@ "node": ">= 8" } }, - "node_modules/arg": { - "version": "4.1.3", - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/argparse": { "version": "2.0.1", "dev": true, @@ -5223,8 +4635,6 @@ }, "node_modules/array-buffer-byte-length": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "license": "MIT", "dependencies": { @@ -5269,7 +4679,8 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/array-union": { "version": "2.1.0", @@ -5281,8 +4692,6 @@ }, "node_modules/array.prototype.findlastindex": { "version": "1.2.6", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", - "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5303,8 +4712,6 @@ }, "node_modules/array.prototype.flat": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, "license": "MIT", "dependencies": { @@ -5322,8 +4729,6 @@ }, "node_modules/array.prototype.flatmap": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, "license": "MIT", "dependencies": { @@ -5341,8 +4746,6 @@ }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5363,43 +4766,23 @@ }, "node_modules/asap": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "node_modules/asn1js": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.5.tgz", - "integrity": "sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==", - "dev": true, - "dependencies": { - "pvtsutils": "^1.3.2", - "pvutils": "^1.1.3", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=12.0.0" - } + "license": "MIT" }, "node_modules/astral-regex": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "version": "3.2.6", "dev": true, "license": "MIT" }, "node_modules/async-function": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", "dev": true, "license": "MIT", "engines": { @@ -5422,6 +4805,7 @@ "resolved": "https://registry.npmjs.org/auto-bind/-/auto-bind-4.0.0.tgz", "integrity": "sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -5431,8 +4815,6 @@ }, "node_modules/available-typed-arrays": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5455,8 +4837,7 @@ }, "node_modules/babel-jest": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "license": "MIT", "dependencies": { "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", @@ -5489,8 +4870,7 @@ }, "node_modules/babel-plugin-jest-hoist": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "license": "MIT", "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -5501,12 +4881,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/babel-plugin-syntax-trailing-function-commas": { - "version": "7.0.0-beta.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", - "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==", - "dev": true - }, "node_modules/babel-preset-current-node-syntax": { "version": "1.0.1", "license": "MIT", @@ -5528,48 +4902,9 @@ "@babel/core": "^7.0.0" } }, - "node_modules/babel-preset-fbjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz", - "integrity": "sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==", - "dev": true, - "dependencies": { - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-syntax-class-properties": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-block-scoped-functions": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-member-expression-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-object-super": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-property-literals": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, "node_modules/babel-preset-jest": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "license": "MIT", "dependencies": { "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" @@ -5606,8 +4941,6 @@ }, "node_modules/better-path-resolve": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz", - "integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==", "dev": true, "license": "MIT", "dependencies": { @@ -5629,8 +4962,6 @@ }, "node_modules/body-parser": { "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -5653,16 +4984,14 @@ }, "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "license": "MIT" }, "node_modules/brace-expansion": { "version": "1.1.11", @@ -5674,8 +5003,6 @@ }, "node_modules/braces": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -5685,9 +5012,7 @@ } }, "node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "version": "4.24.5", "funding": [ { "type": "opencollective", @@ -5696,13 +5021,18 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001716", + "electron-to-chromium": "^1.5.149", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" @@ -5752,21 +5082,12 @@ "ieee754": "^1.1.13" } }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "dev": true - }, "node_modules/buffer-from": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "license": "MIT" }, "node_modules/busboy": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", "dev": true, "dependencies": { "streamsearch": "^1.1.0" @@ -5784,9 +5105,8 @@ }, "node_modules/cacache": { "version": "17.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.4.tgz", - "integrity": "sha512-Z/nL3gU+zTUjz5pCA5vVjYM8pmaw2kxM7JEiE0fv3w77Wj+sFbi70CrBruUWH0uNcEdvLDixFpgA2JM4F4DBjA==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/fs": "^3.1.0", "fs-minipass": "^3.0.0", @@ -5808,18 +5128,16 @@ }, "node_modules/cacache/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/cacache/node_modules/glob": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -5836,18 +5154,16 @@ }, "node_modules/cacache/node_modules/lru-cache": { "version": "7.14.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz", - "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/cacache/node_modules/minimatch": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -5857,9 +5173,8 @@ }, "node_modules/cacache/node_modules/p-map": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, + "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" }, @@ -5872,8 +5187,6 @@ }, "node_modules/call-bind": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, "license": "MIT", "dependencies": { @@ -5891,8 +5204,6 @@ }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -5904,8 +5215,6 @@ }, "node_modules/call-bound": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -5930,6 +5239,7 @@ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "dev": true, + "license": "MIT", "dependencies": { "pascal-case": "^3.1.2", "tslib": "^2.0.3" @@ -5943,9 +5253,7 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001418", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001418.tgz", - "integrity": "sha512-oIs7+JL3K9JRQ3jPZjlH6qyYDp+nBTCais7hjh0s+fuBwufc7uZ7hPYMXrDOJhV360KGMTcczMRObk0/iMqZRg==", + "version": "1.0.30001718", "funding": [ { "type": "opencollective", @@ -5954,14 +5262,20 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/capital-case": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", "dev": true, + "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3", @@ -5982,11 +5296,41 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/chalk-template": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-1.1.0.tgz", + "integrity": "sha512-T2VJbcDuZQ0Tb2EWwSotMPJjgpy1/tGee1BTpUNsGZ/qgNjV2t7Mvu+d4600U564nbLesN1x2dPL+xii174Ekg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/chalk/chalk-template?sponsor=1" + } + }, + "node_modules/chalk-template/node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "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", "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", "dev": true, + "license": "MIT", "dependencies": { "camel-case": "^4.1.2", "capital-case": "^1.0.4", @@ -6007,6 +5351,7 @@ "resolved": "https://registry.npmjs.org/change-case-all/-/change-case-all-1.0.15.tgz", "integrity": "sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==", "dev": true, + "license": "MIT", "dependencies": { "change-case": "^4.1.2", "is-lower-case": "^2.0.2", @@ -6022,8 +5367,7 @@ }, "node_modules/char-regex": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "license": "MIT", "engines": { "node": ">=10" } @@ -6035,37 +5379,33 @@ }, "node_modules/chownr": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/ci-info": { "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" + "version": "1.4.3", + "license": "MIT" }, "node_modules/clean-stack": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -6075,6 +5415,7 @@ "resolved": "https://registry.npmjs.org/clear-module/-/clear-module-4.1.2.tgz", "integrity": "sha512-LWAxzHqdHsAZlPlEyJ2Poz6AIs384mPeqLVCru2p0BrP9G/kVGuhNyZYClLO6cXlnuJjzC8xtsJIuMjKqLXoAw==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^2.0.0", "resolve-from": "^5.0.0" @@ -6135,8 +5476,7 @@ }, "node_modules/co": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" @@ -6181,9 +5521,8 @@ } }, "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" + "version": "1.0.2", + "license": "MIT" }, "node_modules/color-convert": { "version": "2.0.1", @@ -6201,9 +5540,8 @@ }, "node_modules/colorette": { "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", @@ -6216,19 +5554,21 @@ } }, "node_modules/commander": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", - "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.0.tgz", + "integrity": "sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=14" + "node": ">=20" } }, "node_modules/comment-json": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.3.tgz", - "integrity": "sha512-SsxdiOf064DWoZLH799Ata6u7iV658A11PlWtZATDlXPpKGJnbJZ5Z24ybixAi+LUUqJ/GKowAejtC5GFUG7Tw==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.5.tgz", + "integrity": "sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==", "dev": true, + "license": "MIT", "dependencies": { "array-timsort": "^1.0.3", "core-util-is": "^1.0.3", @@ -6242,6 +5582,8 @@ }, "node_modules/common-tags": { "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", "dev": true, "license": "MIT", "engines": { @@ -6254,108 +5596,30 @@ "license": "MIT" }, "node_modules/component-emitter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "version": "1.3.0", + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT" }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "node_modules/constant-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", + "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case": "^2.0.2" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "license": "MIT", "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz", - "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "compressible": "~2.0.18", - "debug": "2.6.9", - "negotiator": "~0.6.4", - "on-headers": "~1.0.2", - "safe-buffer": "5.2.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/compression/node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, - "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/constant-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", - "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", - "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case": "^2.0.2" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" + "safe-buffer": "5.2.1" }, "engines": { "node": ">= 0.6" @@ -6363,27 +5627,18 @@ }, "node_modules/content-type": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/convert-source-map": { - "version": "1.8.0", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/convert-source-map/node_modules/safe-buffer": { - "version": "5.1.2", + "version": "2.0.0", "license": "MIT" }, "node_modules/cookie": { "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -6394,14 +5649,14 @@ }, "node_modules/cookiejar": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==" + "license": "MIT" }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cors": { "version": "2.8.5", @@ -6415,34 +5670,35 @@ } }, "node_modules/cosmiconfig": { - "version": "7.0.1", + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dev": true, "license": "MIT", "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" }, "engines": { - "node": ">=10" - } - }, - "node_modules/cosmiconfig-toml-loader": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@iarna/toml": "^2.2.5" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/create-jest": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -6459,45 +5715,28 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/create-require": { - "version": "1.1.1", - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "version": "3.1.8", "dev": true, + "license": "MIT", "dependencies": { - "node-fetch": "2.6.7" + "node-fetch": "^2.6.12" } }, - "node_modules/cross-fetch/node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, + "node_modules/cross-inspect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cross-inspect/-/cross-inspect-1.0.1.tgz", + "integrity": "sha512-Pcw1JTvZLSJH83iiGWt6fRcT+BjZlCDRVwYLbUcHzv/CRpB7r0MlSrGbIyQvVSNyGnbt7G4AXuyCiDR3POvZ1A==", + "license": "MIT", "dependencies": { - "whatwg-url": "^5.0.0" + "tslib": "^2.4.0" }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "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==", "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -6508,281 +5747,242 @@ "node": ">= 8" } }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/cspell": { - "version": "6.31.3", - "resolved": "https://registry.npmjs.org/cspell/-/cspell-6.31.3.tgz", - "integrity": "sha512-VeeShDLWVM6YPiU/imeGy0lmg6ki63tbLEa6hz20BExhzzpmINOP5nSTYtpY0H9zX9TrF/dLbI38TuuYnyG3Uw==", - "dev": true, - "dependencies": { - "@cspell/cspell-json-reporter": "6.31.3", - "@cspell/cspell-pipe": "6.31.3", - "@cspell/cspell-types": "6.31.3", - "@cspell/dynamic-import": "6.31.3", - "chalk": "^4.1.2", - "commander": "^10.0.0", - "cspell-gitignore": "6.31.3", - "cspell-glob": "6.31.3", - "cspell-io": "6.31.3", - "cspell-lib": "6.31.3", - "fast-glob": "^3.2.12", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/cspell/-/cspell-9.0.2.tgz", + "integrity": "sha512-VwPNTTivvv/NyovXUMcTYc7BaOgun7k8FhRWaVKxZPEsl/9r9WTLmQ1dNbHRq56LajH2b7wKGQYuRsfov3UWTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/cspell-json-reporter": "9.0.2", + "@cspell/cspell-pipe": "9.0.2", + "@cspell/cspell-types": "9.0.2", + "@cspell/dynamic-import": "9.0.2", + "@cspell/url": "9.0.2", + "chalk": "^5.4.1", + "chalk-template": "^1.1.0", + "commander": "^14.0.0", + "cspell-dictionary": "9.0.2", + "cspell-gitignore": "9.0.2", + "cspell-glob": "9.0.2", + "cspell-io": "9.0.2", + "cspell-lib": "9.0.2", "fast-json-stable-stringify": "^2.1.0", - "file-entry-cache": "^6.0.1", - "get-stdin": "^8.0.0", - "imurmurhash": "^0.1.4", - "semver": "^7.3.8", - "strip-ansi": "^6.0.1", - "vscode-uri": "^3.0.7" + "file-entry-cache": "^9.1.0", + "semver": "^7.7.2", + "tinyglobby": "^0.2.13" }, "bin": { - "cspell": "bin.js", + "cspell": "bin.mjs", "cspell-esm": "bin.mjs" }, "engines": { - "node": ">=14" + "node": ">=20" }, "funding": { "url": "https://github.com/streetsidesoftware/cspell?sponsor=1" } }, - "node_modules/cspell-dictionary": { - "version": "6.31.3", - "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-6.31.3.tgz", - "integrity": "sha512-3w5P3Md/tbHLVGPKVL0ePl1ObmNwhdDiEuZ2TXfm2oAIwg4aqeIrw42A2qmhaKLcuAIywpqGZsrGg8TviNNhig==", + "node_modules/cspell-config-lib": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-9.0.2.tgz", + "integrity": "sha512-8rCmGUEzlytnNeAazvbBdLeUoN18Cct8k6KLePiUS0GglYomSAvcPWsamSk9jeh947m0cu2dhjZPnKQlp11XBA==", "dev": true, + "license": "MIT", "dependencies": { - "@cspell/cspell-pipe": "6.31.3", - "@cspell/cspell-types": "6.31.3", - "cspell-trie-lib": "6.31.3", - "fast-equals": "^4.0.3", - "gensequence": "^5.0.2" + "@cspell/cspell-types": "9.0.2", + "comment-json": "^4.2.5", + "yaml": "^2.8.0" }, "engines": { - "node": ">=14" + "node": ">=20" } }, - "node_modules/cspell-gitignore": { - "version": "6.31.3", - "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-6.31.3.tgz", - "integrity": "sha512-vCfVG4ZrdwJnsZHl/cdp8AY+YNPL3Ga+0KR9XJsaz69EkQpgI6porEqehuwle7hiXw5e3L7xFwNEbpCBlxgLRA==", + "node_modules/cspell-dictionary": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-9.0.2.tgz", + "integrity": "sha512-u1jLnqu+2IJiGKdUP9LF1/vseOrCh6hUACHZQ8JsCbHC2KU/DL68s4IgS5jDyK5lBcwPOWzQOiTuXQSEardpFQ==", "dev": true, + "license": "MIT", "dependencies": { - "cspell-glob": "6.31.3", - "find-up": "^5.0.0" - }, - "bin": { - "cspell-gitignore": "bin.mjs" + "@cspell/cspell-pipe": "9.0.2", + "@cspell/cspell-types": "9.0.2", + "cspell-trie-lib": "9.0.2", + "fast-equals": "^5.2.2" }, "engines": { - "node": ">=14" + "node": ">=20" } }, - "node_modules/cspell-gitignore/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==", + "node_modules/cspell-gitignore": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-9.0.2.tgz", + "integrity": "sha512-2CXpUYa+mf1I0oMH/V0qzT0zP95IqYzaS9BfEB7AcSmjrvuIgmiGLztUNrG5mMMBAlHk7sfI8gAEMMvr/Q7sTQ==", "dev": true, + "license": "MIT", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "@cspell/url": "9.0.2", + "cspell-glob": "9.0.2", + "cspell-io": "9.0.2" }, - "engines": { - "node": ">=10" + "bin": { + "cspell-gitignore": "bin.mjs" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=20" } }, - "node_modules/cspell-gitignore/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==", + "node_modules/cspell-glob": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-9.0.2.tgz", + "integrity": "sha512-trTskAU7tw9RpCb+/uPM4zWByZEavHh3SIrjz7Du/ritjZi85O80HItNw5O3ext4zSPfNNLL3kBT7fLLphFHrw==", "dev": true, + "license": "MIT", "dependencies": { - "p-locate": "^5.0.0" + "@cspell/url": "9.0.2", + "picomatch": "^4.0.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=20" } }, - "node_modules/cspell-gitignore/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==", + "node_modules/cspell-glob/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cspell-glob": { - "version": "6.31.3", - "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-6.31.3.tgz", - "integrity": "sha512-+koUJPSCOittQwhR0T1mj4xXT3N+ZnY2qQ53W6Gz9HY3hVfEEy0NpbwE/Uy7sIvFMbc426fK0tGXjXyIj72uhQ==", - "dev": true, - "dependencies": { - "micromatch": "^4.0.5" - }, - "engines": { - "node": ">=14" + "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/cspell-grammar": { - "version": "6.31.3", - "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-6.31.3.tgz", - "integrity": "sha512-TZYaOLIGAumyHlm4w7HYKKKcR1ZgEMKt7WNjCFqq7yGVW7U+qyjQqR8jqnLiUTZl7c2Tque4mca7n0CFsjVv5A==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-9.0.2.tgz", + "integrity": "sha512-3hrNZJYEgWSaCvH3rpFq43PX9pxdJt60+pFG3CTZAdpcI97DDsrdH3f7a6h8sNAb+pN59JnV2DtWexsAVL6vjA==", "dev": true, + "license": "MIT", "dependencies": { - "@cspell/cspell-pipe": "6.31.3", - "@cspell/cspell-types": "6.31.3" + "@cspell/cspell-pipe": "9.0.2", + "@cspell/cspell-types": "9.0.2" }, "bin": { "cspell-grammar": "bin.mjs" }, "engines": { - "node": ">=14" + "node": ">=20" } }, "node_modules/cspell-io": { - "version": "6.31.3", - "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-6.31.3.tgz", - "integrity": "sha512-yCnnQ5bTbngUuIAaT5yNSdI1P0Kc38uvC8aynNi7tfrCYOQbDu1F9/DcTpbdhrsCv+xUn2TB1YjuCmm0STfJlA==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-9.0.2.tgz", + "integrity": "sha512-TO93FTgQjjp62nAn213885RdyOTsQwdjSHdeYaaNiaTBOBgj2jR8M8bi3+h2imGBlinlYERoVbPF9wghJEK2nw==", "dev": true, + "license": "MIT", "dependencies": { - "@cspell/cspell-service-bus": "6.31.3", - "node-fetch": "^2.6.9" + "@cspell/cspell-service-bus": "9.0.2", + "@cspell/url": "9.0.2" }, "engines": { - "node": ">=14" + "node": ">=20" } }, "node_modules/cspell-lib": { - "version": "6.31.3", - "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-6.31.3.tgz", - "integrity": "sha512-Dv55aecaMvT/5VbNryKo0Zos8dtHon7e1K0z8DR4/kGZdQVT0bOFWeotSLhuaIqoNFdEt8ypfKbrIHIdbgt1Hg==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-9.0.2.tgz", + "integrity": "sha512-uoPQ0f+umOGUQB/q0H+K/gWfd7xJMaPlt5rXMMTeKIPHLDRBE7lBx4mHVCmgevL+oTNSLpIE5FdqRDbr+Q+Awg==", "dev": true, + "license": "MIT", "dependencies": { - "@cspell/cspell-bundled-dicts": "6.31.3", - "@cspell/cspell-pipe": "6.31.3", - "@cspell/cspell-types": "6.31.3", - "@cspell/strong-weak-map": "6.31.3", + "@cspell/cspell-bundled-dicts": "9.0.2", + "@cspell/cspell-pipe": "9.0.2", + "@cspell/cspell-resolver": "9.0.2", + "@cspell/cspell-types": "9.0.2", + "@cspell/dynamic-import": "9.0.2", + "@cspell/filetypes": "9.0.2", + "@cspell/strong-weak-map": "9.0.2", + "@cspell/url": "9.0.2", "clear-module": "^4.1.2", - "comment-json": "^4.2.3", - "configstore": "^5.0.1", - "cosmiconfig": "8.0.0", - "cspell-dictionary": "6.31.3", - "cspell-glob": "6.31.3", - "cspell-grammar": "6.31.3", - "cspell-io": "6.31.3", - "cspell-trie-lib": "6.31.3", - "fast-equals": "^4.0.3", - "find-up": "^5.0.0", - "gensequence": "^5.0.2", - "import-fresh": "^3.3.0", + "comment-json": "^4.2.5", + "cspell-config-lib": "9.0.2", + "cspell-dictionary": "9.0.2", + "cspell-glob": "9.0.2", + "cspell-grammar": "9.0.2", + "cspell-io": "9.0.2", + "cspell-trie-lib": "9.0.2", + "env-paths": "^3.0.0", + "fast-equals": "^5.2.2", + "gensequence": "^7.0.0", + "import-fresh": "^3.3.1", "resolve-from": "^5.0.0", - "resolve-global": "^1.0.0", - "vscode-languageserver-textdocument": "^1.0.8", - "vscode-uri": "^3.0.7" + "vscode-languageserver-textdocument": "^1.0.12", + "vscode-uri": "^3.1.0", + "xdg-basedir": "^5.1.0" }, "engines": { - "node": ">=14.6" + "node": ">=20" } }, - "node_modules/cspell-lib/node_modules/cosmiconfig": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.0.0.tgz", - "integrity": "sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==", + "node_modules/cspell-trie-lib": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-9.0.2.tgz", + "integrity": "sha512-inXu6YEoJFLYnxgcXy3quCoGgSWYRye1kM4dj8kbYtNAQgUVD93hPFdmPWObwhVawsS3rQybckG3DSnmxBe9Fg==", "dev": true, + "license": "MIT", "dependencies": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" + "@cspell/cspell-pipe": "9.0.2", + "@cspell/cspell-types": "9.0.2", + "gensequence": "^7.0.0" }, "engines": { - "node": ">=14" + "node": ">=20" } }, - "node_modules/cspell-lib/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==", + "node_modules/cspell/node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/cspell-lib/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==", + "node_modules/cspell/node_modules/file-entry-cache": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.1.0.tgz", + "integrity": "sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==", "dev": true, + "license": "MIT", "dependencies": { - "p-locate": "^5.0.0" + "flat-cache": "^5.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/cspell-lib/node_modules/p-locate": { + "node_modules/cspell/node_modules/flat-cache": { "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, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cspell-trie-lib": { - "version": "6.31.3", - "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-6.31.3.tgz", - "integrity": "sha512-HNUcLWOZAvtM3E34U+7/mSSpO0F6nLd/kFlRIcvSvPb9taqKe8bnSa0Yyb3dsdMq9rMxUmuDQtF+J6arZK343g==", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz", + "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==", "dev": true, + "license": "MIT", "dependencies": { - "@cspell/cspell-pipe": "6.31.3", - "@cspell/cspell-types": "6.31.3", - "gensequence": "^5.0.2" + "flatted": "^3.3.1", + "keyv": "^4.5.4" }, "engines": { - "node": ">=14" + "node": ">=18" } }, "node_modules/data-view-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6799,8 +5999,6 @@ }, "node_modules/data-view-byte-length": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6817,8 +6015,6 @@ }, "node_modules/data-view-byte-offset": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6834,10 +6030,9 @@ } }, "node_modules/dataloader": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.1.0.tgz", - "integrity": "sha512-qTcEYLen3r7ojZNgVUaRggOI+KM7jrKxXeSHhogh/TWxYMeONEMqY+hmkobiYQozsGIyg9OYVzO4ZIfoB4I0pQ==", - "dev": true + "version": "2.2.2", + "dev": true, + "license": "MIT" }, "node_modules/debounce": { "version": "1.2.1", @@ -6845,10 +6040,12 @@ "license": "MIT" }, "node_modules/debug": { - "version": "4.3.4", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -6859,18 +6056,9 @@ } } }, - "node_modules/decamelize": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/dedent": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.3.0.tgz", - "integrity": "sha512-7glNLfvdsMzZm3FpRY1CHuI2lbYDR+71YmrhmTZjYFD5pfT0ACgnGRdrrC9Mk2uICnzkcdelCx5at787UDGOvg==", + "version": "1.6.0", + "license": "MIT", "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, @@ -6919,9 +6107,8 @@ "license": "MIT" }, "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "version": "4.3.1", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6936,8 +6123,6 @@ }, "node_modules/define-data-property": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "license": "MIT", "dependencies": { @@ -6954,8 +6139,6 @@ }, "node_modules/define-properties": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "license": "MIT", "dependencies": { @@ -6989,6 +6172,7 @@ "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6.0" } @@ -7011,44 +6195,30 @@ }, "node_modules/detect-newline": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/dezalgo": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", "license": "ISC", "dependencies": { "asap": "^2.0.0", "wrappy": "1" } }, - "node_modules/diff": { - "version": "4.0.2", - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/diff-sequences": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/diffable-html": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/diffable-html/-/diffable-html-4.1.0.tgz", - "integrity": "sha512-++kyNek+YBLH8cLXS+iTj/Hiy2s5qkRJEJ8kgu/WHbFrVY2vz9xPFUT+fii2zGF0m1CaojDlQJjkfrCt7YWM1g==", "dev": true, + "license": "MIT", "dependencies": { "htmlparser2": "^3.9.2" } @@ -7064,22 +6234,10 @@ "node": ">=8" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/dom-serializer": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", "dev": true, + "license": "MIT", "dependencies": { "domelementtype": "^2.0.1", "entities": "^2.0.0" @@ -7087,45 +6245,40 @@ }, "node_modules/dom-serializer/node_modules/domelementtype": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/fb55" } - ] + ], + "license": "BSD-2-Clause" }, "node_modules/dom-serializer/node_modules/entities": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, + "license": "BSD-2-Clause", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/domelementtype": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/domhandler": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "domelementtype": "1" } }, "node_modules/domutils": { "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "0", "domelementtype": "1" @@ -7136,45 +6289,34 @@ "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", "dev": true, + "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/dotenv": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", - "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==", + "version": "16.3.1", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" } }, "node_modules/dset": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.2.tgz", - "integrity": "sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==", - "dev": true, + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", + "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/dunder-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", @@ -7185,23 +6327,12 @@ "node": ">= 0.4" } }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, "node_modules/ee-first": { "version": "1.1.1", "license": "MIT" }, "node_modules/ejs": { "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -7215,14 +6346,12 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.278", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.278.tgz", - "integrity": "sha512-i+0+t/UVCqp9khP+hswZQbG31LnsYWGwyI9zhqZkyPok7k57W0UhMaxODMp3TeoNFhyUtB5OI4ppO/OSD9gaYg==" + "version": "1.5.152", + "license": "ISC" }, "node_modules/emittery": { "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -7236,16 +6365,15 @@ }, "node_modules/encodeurl": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/encoding": { "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "license": "MIT", "optional": true, "dependencies": { "iconv-lite": "^0.6.2" @@ -7253,8 +6381,8 @@ }, "node_modules/encoding/node_modules/iconv-lite": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -7265,8 +6393,6 @@ }, "node_modules/enquirer": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7279,15 +6405,26 @@ }, "node_modules/entities": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/env-paths": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", + "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/err-code": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/error-ex": { "version": "1.3.2", @@ -7367,8 +6504,6 @@ }, "node_modules/es-define-property": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -7376,8 +6511,6 @@ }, "node_modules/es-errors": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -7406,8 +6539,6 @@ }, "node_modules/es-object-atoms": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -7418,9 +6549,6 @@ }, "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==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -7434,8 +6562,6 @@ }, "node_modules/es-shim-unscopables": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", "dev": true, "license": "MIT", "dependencies": { @@ -7447,8 +6573,6 @@ }, "node_modules/es-to-primitive": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "license": "MIT", "dependencies": { @@ -7464,7 +6588,7 @@ } }, "node_modules/escalade": { - "version": "3.1.1", + "version": "3.2.0", "license": "MIT", "engines": { "node": ">=6" @@ -7476,73 +6600,77 @@ }, "node_modules/escape-string-regexp": { "version": "1.0.5", + "dev": true, "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.27.0.tgz", + "integrity": "sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.20.0", + "@eslint/config-helpers": "^0.2.1", + "@eslint/core": "^0.14.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.27.0", + "@eslint/plugin-kit": "^0.3.1", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.3.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", @@ -7577,6 +6705,8 @@ }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7619,8 +6749,6 @@ }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7629,8 +6757,6 @@ }, "node_modules/eslint-plugin-import/node_modules/doctrine": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -7642,8 +6768,6 @@ }, "node_modules/eslint-plugin-import/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": { @@ -7655,8 +6779,6 @@ }, "node_modules/eslint-plugin-import/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -7664,23 +6786,26 @@ } }, "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=8.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "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" }, @@ -7690,8 +6815,6 @@ }, "node_modules/eslint/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": { @@ -7701,37 +6824,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, + "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/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/eslint/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": { @@ -7747,8 +6854,6 @@ }, "node_modules/eslint/node_modules/glob-parent": { "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": { @@ -7758,26 +6863,8 @@ "node": ">=10.13.0" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint/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": { @@ -7792,8 +6879,6 @@ }, "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": { @@ -7805,8 +6890,6 @@ }, "node_modules/eslint/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": { @@ -7819,31 +6902,32 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, + "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -7861,10 +6945,11 @@ } }, "node_modules/esquery": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz", - "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==", + "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" }, @@ -7872,19 +6957,12 @@ "node": ">=0.10" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, "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" }, @@ -7892,20 +6970,12 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { + "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, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -7930,25 +7000,9 @@ "node": ">= 0.6" } }, - "node_modules/event-target-polyfill": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/event-target-polyfill/-/event-target-polyfill-0.0.3.tgz", - "integrity": "sha512-ZMc6UuvmbinrCk4RzGyVmRyIsAyxMRlp4CqSrcQRO8Dy0A9ldbiRy5kdtBj4OtP7EClGdqGfIqo9JmOClMsGLQ==", - "dev": true - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/execa": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -7969,16 +7023,13 @@ }, "node_modules/exit": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "engines": { "node": ">= 0.8.0" } }, "node_modules/expect": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "license": "MIT", "dependencies": { "@jest/expect-utils": "^29.7.0", "jest-get-type": "^29.6.3", @@ -7992,8 +7043,6 @@ }, "node_modules/express": { "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "license": "MIT", "dependencies": { "accepts": "~1.3.8", @@ -8038,8 +7087,6 @@ }, "node_modules/express/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -8047,14 +7094,10 @@ }, "node_modules/express/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, "node_modules/express/node_modules/statuses": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -8062,9 +7105,8 @@ }, "node_modules/extendable-error": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/extendable-error/-/extendable-error-0.1.7.tgz", - "integrity": "sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/external-editor": { "version": "3.1.0", @@ -8081,9 +7123,8 @@ }, "node_modules/extract-files": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-11.0.0.tgz", - "integrity": "sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20 || >= 14.13" }, @@ -8093,32 +7134,38 @@ }, "node_modules/fast-decode-uri-component": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", - "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-deep-equal": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true, "license": "MIT" }, "node_modules/fast-equals": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-4.0.3.tgz", - "integrity": "sha512-G3BSX9cfKttjr+2o1O22tYMLq0DPluZnYtq1rXumE1SpL/F/SLIfHx08WYQoWSIpeMYf8sRbJ8++71+v6Pnxfg==", - "dev": true + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.2.2.tgz", + "integrity": "sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } }, "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -8135,17 +7182,15 @@ }, "node_modules/fast-querystring": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.1.tgz", - "integrity": "sha512-qR2r+e3HvhEFmpdHMv//U8FnFlnYjaC6QKDuaXALDkw2kvHO8WDjxH+f/rHGR4Me4pnk8p9JAkRNTjYHAKRn2Q==", "dev": true, + "license": "MIT", "dependencies": { "fast-decode-uri-component": "^1.0.1" } }, "node_modules/fast-safe-stringify": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + "license": "MIT" }, "node_modules/fast-url-parser": { "version": "1.1.3", @@ -8176,10 +7221,11 @@ } }, "node_modules/fbjs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", - "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", + "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", "dev": true, + "license": "MIT", "dependencies": { "cross-fetch": "^3.1.5", "fbjs-css-vars": "^1.0.0", @@ -8187,14 +7233,15 @@ "object-assign": "^4.1.0", "promise": "^7.1.1", "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.30" + "ua-parser-js": "^1.0.35" } }, "node_modules/fbjs-css-vars": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/figures": { "version": "3.2.0", @@ -8211,20 +7258,20 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", + "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": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/filelist": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -8233,8 +7280,6 @@ }, "node_modules/filelist/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "license": "MIT", "dependencies": { @@ -8243,8 +7288,6 @@ }, "node_modules/filelist/node_modules/minimatch": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "license": "ISC", "dependencies": { @@ -8256,8 +7299,6 @@ }, "node_modules/fill-range": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -8268,8 +7309,7 @@ }, "node_modules/finalhandler": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", @@ -8285,21 +7325,18 @@ }, "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "license": "MIT" }, "node_modules/finalhandler/node_modules/statuses": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -8316,41 +7353,28 @@ } }, "node_modules/flat-cache": { - "version": "3.0.4", + "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.1.0", - "rimraf": "^3.0.2" + "flatted": "^3.2.9", + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=16" } }, "node_modules/flatted": { - "version": "3.2.5", + "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/for-each": { "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, "license": "MIT", "dependencies": { @@ -8364,50 +7388,20 @@ } }, "node_modules/form-data": { - "version": "3.0.1", - "dev": true, + "version": "4.0.2", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", "mime-types": "^2.1.12" }, "engines": { "node": ">= 6" } }, - "node_modules/form-data-encoder": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", - "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==", - "dev": true - }, - "node_modules/formdata-node": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.3.3.tgz", - "integrity": "sha512-coTew7WODO2vF+XhpUdmYz4UBvlsiTMSNaFYZlrXIqYbFd4W7bMwnoALNLE6uvNgzTg2j1JDF0ZImEfF06VPAA==", - "dev": true, - "dependencies": { - "node-domexception": "1.0.0", - "web-streams-polyfill": "4.0.0-beta.1" - }, - "engines": { - "node": ">= 12.20" - } - }, - "node_modules/formdata-node/node_modules/web-streams-polyfill": { - "version": "4.0.0-beta.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.1.tgz", - "integrity": "sha512-3ux37gEX670UUphBF9AMCq8XM6iQ8Ac6A+DSRRjDoRBm1ufCkaCDdNVbaqq60PsEkdNlLKrGtv/YBP4EJXqNtQ==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, "node_modules/formidable": { "version": "3.5.4", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz", - "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==", "license": "MIT", "dependencies": { "@paralleldrive/cuid2": "^2.2.2", @@ -8461,9 +7455,8 @@ }, "node_modules/fs-minipass": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.0.tgz", - "integrity": "sha512-EUojgQaSPy6sxcqcZgQv6TVF6jiKvurji3AxhAivs/Ep4O1UpS8TusaxpybfFHZ2skRhLqzk6WR8nqNYIMMDeA==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^4.0.0" }, @@ -8488,16 +7481,13 @@ }, "node_modules/function-bind": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/function.prototype.name": { "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "license": "MIT", "dependencies": { @@ -8517,20 +7507,20 @@ }, "node_modules/functions-have-names": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/gensequence": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/gensequence/-/gensequence-5.0.2.tgz", - "integrity": "sha512-JlKEZnFc6neaeSVlkzBGGgkIoIaSxMgvdamRoPN8r3ozm2r9dusqxeKqYQ7lhzmj2UhFQP8nkyfCaiLQxiLrDA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/gensequence/-/gensequence-7.0.0.tgz", + "integrity": "sha512-47Frx13aZh01afHJTB3zTtKIlFI6vWY+MYCN9Qpew6i52rfKjnhCF/l1YlC8UmEMvvntZZ6z4PiCcmyuedR2aQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=14" + "node": ">=18" } }, "node_modules/gensync": { @@ -8549,8 +7539,6 @@ }, "node_modules/get-intrinsic": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -8580,8 +7568,6 @@ }, "node_modules/get-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", @@ -8591,21 +7577,9 @@ "node": ">= 0.4" } }, - "node_modules/get-stdin": { - "version": "8.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/get-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -8615,8 +7589,6 @@ }, "node_modules/get-symbol-description": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "license": "MIT", "dependencies": { @@ -8633,8 +7605,7 @@ }, "node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -8663,8 +7634,7 @@ }, "node_modules/glob/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -8672,16 +7642,20 @@ "node": "*" } }, - "node_modules/global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", + "node_modules/global-directory": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", + "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", "dev": true, + "license": "MIT", "dependencies": { - "ini": "^1.3.4" + "ini": "4.1.1" }, "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globals": { @@ -8693,8 +7667,6 @@ }, "node_modules/globalthis": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8729,8 +7701,6 @@ }, "node_modules/gopd": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -8745,39 +7715,37 @@ }, "node_modules/graphemer": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/graphql": { "version": "16.11.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.11.0.tgz", - "integrity": "sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==", "license": "MIT", "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } }, "node_modules/graphql-config": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-4.5.0.tgz", - "integrity": "sha512-x6D0/cftpLUJ0Ch1e5sj1TZn6Wcxx4oMfmhaG9shM0DKajA9iR+j1z86GSTQ19fShbGvrSSvbIQsHku6aQ6BBw==", - "dev": true, - "dependencies": { - "@graphql-tools/graphql-file-loader": "^7.3.7", - "@graphql-tools/json-file-loader": "^7.3.7", - "@graphql-tools/load": "^7.5.5", - "@graphql-tools/merge": "^8.2.6", - "@graphql-tools/url-loader": "^7.9.7", - "@graphql-tools/utils": "^9.0.0", - "cosmiconfig": "8.0.0", - "jiti": "1.17.1", - "minimatch": "4.2.3", - "string-env-interpolation": "1.0.1", - "tslib": "^2.4.0" + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-5.1.5.tgz", + "integrity": "sha512-mG2LL1HccpU8qg5ajLROgdsBzx/o2M6kgI3uAmoaXiSH9PCUbtIyLomLqUtCFaAeG2YCFsl0M5cfQ9rKmDoMVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-tools/graphql-file-loader": "^8.0.0", + "@graphql-tools/json-file-loader": "^8.0.0", + "@graphql-tools/load": "^8.1.0", + "@graphql-tools/merge": "^9.0.0", + "@graphql-tools/url-loader": "^8.0.0", + "@graphql-tools/utils": "^10.0.0", + "cosmiconfig": "^8.1.0", + "jiti": "^2.0.0", + "minimatch": "^9.0.5", + "string-env-interpolation": "^1.0.1", + "tslib": "^2.4.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 16.0.0" }, "peerDependencies": { "cosmiconfig-toml-loader": "^1.0.0", @@ -8789,34 +7757,18 @@ } } }, - "node_modules/graphql-config/node_modules/cosmiconfig": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.0.0.tgz", - "integrity": "sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==", - "dev": true, - "dependencies": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - } - }, "node_modules/graphql-config/node_modules/jiti": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.17.1.tgz", - "integrity": "sha512-NZIITw8uZQFuzQimqjUxIrIcEdxYDFIe/0xYfIlVXTkiBjjyBEvgasj5bb0/cHtPRD/NziPbT312sFrkI5ALpw==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", "dev": true, + "license": "MIT", "bin": { - "jiti": "bin/jiti.js" + "jiti": "lib/jiti-cli.mjs" } }, "node_modules/graphql-http": { "version": "1.22.4", - "resolved": "https://registry.npmjs.org/graphql-http/-/graphql-http-1.22.4.tgz", - "integrity": "sha512-OC3ucK988teMf+Ak/O+ZJ0N2ukcgrEurypp8ePyJFWq83VzwRAmHxxr+XxrMpxO/FIwI4a7m/Fzv3tWGJv0wPA==", "license": "MIT", "workspaces": [ "implementations/**/*" @@ -8829,36 +7781,19 @@ } }, "node_modules/graphql-request": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-5.1.0.tgz", - "integrity": "sha512-0OeRVYigVwIiXhNmqnPDt+JhMzsjinxHE7TVy3Lm6jUzav0guVcL0lfSbi6jVTRAxcbwgyr6yrZioSHxf9gHzw==", + "version": "6.1.0", "dev": true, + "license": "MIT", "dependencies": { - "@graphql-typed-document-node/core": "^3.1.1", - "cross-fetch": "^3.1.5", - "extract-files": "^9.0.0", - "form-data": "^3.0.0" + "@graphql-typed-document-node/core": "^3.2.0", + "cross-fetch": "^3.1.5" }, "peerDependencies": { "graphql": "14 - 16" } }, - "node_modules/graphql-request/node_modules/extract-files": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-9.0.0.tgz", - "integrity": "sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==", - "dev": true, - "engines": { - "node": "^10.17.0 || ^12.0.0 || >= 13.7.0" - }, - "funding": { - "url": "https://github.com/sponsors/jaydenseric" - } - }, "node_modules/graphql-subscriptions": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-3.0.0.tgz", - "integrity": "sha512-kZCdevgmzDjGAOqH7GlDmQXYAkuHoKpMlJrqF40HMPhUhM5ZWSFSxCwD/nSi6AkaijmMfsFhoJRGJ27UseCvRA==", "dev": true, "license": "MIT", "peerDependencies": { @@ -8879,10 +7814,12 @@ } }, "node_modules/graphql-ws": { - "version": "5.11.2", - "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.11.2.tgz", - "integrity": "sha512-4EiZ3/UXYcjm+xFGP544/yW1+DVI8ZpKASFbzrV5EDTFWJp0ZvLl4Dy2fSZAzz9imKp5pZMIcjB0x/H69Pv/6w==", + "version": "5.14.0", "devOptional": true, + "license": "MIT", + "workspaces": [ + "website" + ], "engines": { "node": ">=10" }, @@ -8891,10 +7828,12 @@ } }, "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "version": "1.1.0", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -8911,14 +7850,13 @@ "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", "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", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "license": "MIT", "dependencies": { @@ -8930,8 +7868,6 @@ }, "node_modules/has-proto": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8946,8 +7882,6 @@ }, "node_modules/has-symbols": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -8958,9 +7892,6 @@ }, "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==", - "dev": true, "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" @@ -8974,8 +7905,6 @@ }, "node_modules/hasown": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -8989,6 +7918,7 @@ "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", "dev": true, + "license": "MIT", "dependencies": { "capital-case": "^1.0.4", "tslib": "^2.0.3" @@ -9003,14 +7933,12 @@ }, "node_modules/html-escaper": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + "license": "MIT" }, "node_modules/htmlparser2": { "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", "dev": true, + "license": "MIT", "dependencies": { "domelementtype": "^1.3.1", "domhandler": "^2.3.0", @@ -9022,9 +7950,8 @@ }, "node_modules/http-cache-semantics": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/http-errors": { "version": "2.0.0", @@ -9049,9 +7976,8 @@ }, "node_modules/http-proxy-agent": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, + "license": "MIT", "dependencies": { "@tootallnate/once": "2", "agent-base": "6", @@ -9075,8 +8001,6 @@ }, "node_modules/human-id": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/human-id/-/human-id-4.1.1.tgz", - "integrity": "sha512-3gKm/gCSUipeLsRYZbbdA1BD83lBoWUkZ7G9VFrhWPAU76KwYo5KR8V28bpoPm/ygy0x5/GCbpRQdY7VLYCoIg==", "dev": true, "license": "MIT", "bin": { @@ -9085,17 +8009,15 @@ }, "node_modules/human-signals": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } }, "node_modules/humanize-ms": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.0.0" } @@ -9161,12 +8083,15 @@ "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz", "integrity": "sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.8.0" } }, "node_modules/import-fresh": { - "version": "3.3.0", + "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": { @@ -9201,6 +8126,8 @@ }, "node_modules/import-from": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz", + "integrity": "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==", "dev": true, "license": "MIT", "engines": { @@ -9211,9 +8138,8 @@ } }, "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "version": "3.2.0", + "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -9229,10 +8155,11 @@ } }, "node_modules/import-meta-resolve": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.2.tgz", - "integrity": "sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -9258,10 +8185,14 @@ "license": "ISC" }, "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, "node_modules/inquirer": { "version": "8.2.2", @@ -9289,8 +8220,6 @@ }, "node_modules/internal-slot": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "license": "MIT", "dependencies": { @@ -9307,15 +8236,15 @@ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, + "license": "MIT", "dependencies": { "loose-envify": "^1.0.0" } }, "node_modules/ip": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ipaddr.js": { "version": "1.9.1", @@ -9329,6 +8258,7 @@ "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", "dev": true, + "license": "MIT", "dependencies": { "is-relative": "^1.0.0", "is-windows": "^1.0.1" @@ -9356,8 +8286,6 @@ }, "node_modules/is-array-buffer": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "license": "MIT", "dependencies": { @@ -9378,8 +8306,6 @@ }, "node_modules/is-async-function": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9398,8 +8324,6 @@ }, "node_modules/is-bigint": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9414,8 +8338,6 @@ }, "node_modules/is-boolean-object": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, "license": "MIT", "dependencies": { @@ -9431,9 +8353,8 @@ }, "node_modules/is-callable": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -9443,8 +8364,6 @@ }, "node_modules/is-core-module": { "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -9458,8 +8377,6 @@ }, "node_modules/is-data-view": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "license": "MIT", "dependencies": { @@ -9476,8 +8393,6 @@ }, "node_modules/is-date-object": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "license": "MIT", "dependencies": { @@ -9501,8 +8416,6 @@ }, "node_modules/is-finalizationregistry": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, "license": "MIT", "dependencies": { @@ -9524,16 +8437,13 @@ }, "node_modules/is-generator-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/is-generator-function": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9570,23 +8480,21 @@ }, "node_modules/is-lambda": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-2.0.2.tgz", "integrity": "sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.3" } }, "node_modules/is-map": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, "license": "MIT", "engines": { @@ -9609,10 +8517,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-node-process": { + "version": "1.2.0", + "dev": true, + "license": "MIT" + }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "license": "MIT", "engines": { "node": ">=0.12.0" @@ -9620,8 +8531,6 @@ }, "node_modules/is-number-object": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "license": "MIT", "dependencies": { @@ -9635,24 +8544,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/is-reference": { "version": "1.2.1", "dev": true, @@ -9663,8 +8554,6 @@ }, "node_modules/is-regex": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "license": "MIT", "dependencies": { @@ -9685,6 +8574,7 @@ "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", "dev": true, + "license": "MIT", "dependencies": { "is-unc-path": "^1.0.0" }, @@ -9694,8 +8584,6 @@ }, "node_modules/is-set": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, "license": "MIT", "engines": { @@ -9707,8 +8595,6 @@ }, "node_modules/is-shared-array-buffer": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "license": "MIT", "dependencies": { @@ -9723,8 +8609,7 @@ }, "node_modules/is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", "engines": { "node": ">=8" }, @@ -9734,8 +8619,6 @@ }, "node_modules/is-string": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "license": "MIT", "dependencies": { @@ -9751,8 +8634,6 @@ }, "node_modules/is-subdir": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz", - "integrity": "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==", "dev": true, "license": "MIT", "dependencies": { @@ -9764,8 +8645,6 @@ }, "node_modules/is-symbol": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "license": "MIT", "dependencies": { @@ -9782,8 +8661,6 @@ }, "node_modules/is-typed-array": { "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9796,17 +8673,12 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, "node_modules/is-unc-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", "dev": true, + "license": "MIT", "dependencies": { "unc-path-regex": "^0.1.2" }, @@ -9830,14 +8702,13 @@ "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-2.0.2.tgz", "integrity": "sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.3" } }, "node_modules/is-weakmap": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, "license": "MIT", "engines": { @@ -9849,8 +8720,6 @@ }, "node_modules/is-weakref": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "dev": true, "license": "MIT", "dependencies": { @@ -9865,8 +8734,6 @@ }, "node_modules/is-weakset": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9882,38 +8749,25 @@ }, "node_modules/is-windows": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", "license": "ISC" }, - "node_modules/isomorphic-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", - "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", - "dev": true, - "dependencies": { - "node-fetch": "^2.6.1", - "whatwg-fetch": "^3.4.1" - } - }, "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==", "dev": true, + "license": "MIT", "peerDependencies": { "ws": "*" } @@ -9948,8 +8802,7 @@ }, "node_modules/istanbul-lib-report": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -9961,8 +8814,7 @@ }, "node_modules/istanbul-lib-report/node_modules/make-dir": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -9975,8 +8827,7 @@ }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "license": "BSD-3-Clause", "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -9987,9 +8838,8 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "version": "3.1.7", + "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -10000,8 +8850,6 @@ }, "node_modules/jake": { "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -10019,8 +8867,6 @@ }, "node_modules/jake/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": { @@ -10032,8 +8878,7 @@ }, "node_modules/jest": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -10057,8 +8902,7 @@ }, "node_modules/jest-changed-files": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "license": "MIT", "dependencies": { "execa": "^5.0.0", "jest-util": "^29.7.0", @@ -10070,8 +8914,7 @@ }, "node_modules/jest-circus": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -10100,8 +8943,7 @@ }, "node_modules/jest-cli": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", "@jest/test-result": "^29.7.0", @@ -10132,8 +8974,7 @@ }, "node_modules/jest-config": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/test-sequencer": "^29.7.0", @@ -10176,8 +9017,7 @@ }, "node_modules/jest-diff": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", @@ -10190,8 +9030,7 @@ }, "node_modules/jest-docblock": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "license": "MIT", "dependencies": { "detect-newline": "^3.0.0" }, @@ -10201,8 +9040,7 @@ }, "node_modules/jest-each": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -10216,8 +9054,7 @@ }, "node_modules/jest-environment-node": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -10232,16 +9069,14 @@ }, "node_modules/jest-get-type": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-haste-map": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -10264,9 +9099,8 @@ }, "node_modules/jest-junit": { "version": "16.0.0", - "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-16.0.0.tgz", - "integrity": "sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "mkdirp": "^1.0.4", "strip-ansi": "^6.0.1", @@ -10279,8 +9113,7 @@ }, "node_modules/jest-leak-detector": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" @@ -10291,8 +9124,7 @@ }, "node_modules/jest-matcher-utils": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "jest-diff": "^29.7.0", @@ -10305,8 +9137,7 @@ }, "node_modules/jest-message-util": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.6.3", @@ -10324,8 +9155,7 @@ }, "node_modules/jest-mock": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -10341,9 +9171,8 @@ "license": "MIT" }, "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "version": "1.2.3", + "license": "MIT", "engines": { "node": ">=6" }, @@ -10358,16 +9187,14 @@ }, "node_modules/jest-regex-util": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", @@ -10385,8 +9212,7 @@ }, "node_modules/jest-resolve-dependencies": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "license": "MIT", "dependencies": { "jest-regex-util": "^29.6.3", "jest-snapshot": "^29.7.0" @@ -10397,8 +9223,7 @@ }, "node_modules/jest-runner": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/environment": "^29.7.0", @@ -10428,8 +9253,7 @@ }, "node_modules/jest-runtime": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -10460,17 +9284,15 @@ }, "node_modules/jest-serializer-html": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/jest-serializer-html/-/jest-serializer-html-7.1.0.tgz", - "integrity": "sha512-xYL2qC7kmoYHJo8MYqJkzrl/Fdlx+fat4U1AqYg+kafqwcKPiMkOcjWHPKhueuNEgr+uemhGc+jqXYiwCyRyLA==", "dev": true, + "license": "MIT", "dependencies": { "diffable-html": "^4.1.0" } }, "node_modules/jest-snapshot": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", @@ -10499,8 +9321,7 @@ }, "node_modules/jest-util": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -10515,8 +9336,7 @@ }, "node_modules/jest-validate": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", @@ -10531,8 +9351,7 @@ }, "node_modules/jest-validate/node_modules/camelcase": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -10542,8 +9361,7 @@ }, "node_modules/jest-watcher": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", @@ -10560,8 +9378,7 @@ }, "node_modules/jest-worker": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "license": "MIT", "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -10574,8 +9391,7 @@ }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -10587,19 +9403,27 @@ } }, "node_modules/jiti": { - "version": "1.17.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.17.2.tgz", - "integrity": "sha512-Xf0nU8+8wuiQpLcqdb2HRyHqYwGk2Pd+F7kstyp20ZuqTyCmB9dqpX2NxaxFc1kovraa2bG6c1RL3W7XfapiZg==", + "version": "1.19.1", "dev": true, + "license": "MIT", "bin": { "jiti": "bin/jiti.js" } }, + "node_modules/jose": { + "version": "4.14.4", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/js-levenshtein": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -10620,31 +9444,42 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", + "version": "3.1.0", "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, + "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-parse-even-better-errors": { "version": "2.3.1", "license": "MIT" }, "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/json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg==", + "version": "1.0.2", "dev": true, + "license": "MIT", "dependencies": { - "jsonify": "~0.0.0" + "jsonify": "^0.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/json-stable-stringify-without-jsonify": { @@ -10671,8 +9506,7 @@ }, "node_modules/json5": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -10689,63 +9523,33 @@ } }, "node_modules/jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/jsonwebtoken": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", - "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", - "dev": true, - "dependencies": { - "jws": "^3.2.2", - "lodash": "^4.17.21", - "ms": "^2.1.1", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "version": "0.0.1", "dev": true, - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" + "license": "Public Domain", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "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": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" + "json-buffer": "3.0.1" } }, "node_modules/kleur": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/leven": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "license": "MIT", "engines": { "node": ">=6" } @@ -10768,9 +9572,8 @@ }, "node_modules/listr2": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", - "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", "dev": true, + "license": "MIT", "dependencies": { "cli-truncate": "^2.1.0", "colorette": "^2.0.16", @@ -10795,9 +9598,8 @@ }, "node_modules/listr2/node_modules/cli-truncate": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, + "license": "MIT", "dependencies": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" @@ -10811,9 +9613,8 @@ }, "node_modules/listr2/node_modules/log-update": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^4.3.0", "cli-cursor": "^3.1.0", @@ -10829,9 +9630,8 @@ }, "node_modules/listr2/node_modules/log-update/node_modules/slice-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -10846,9 +9646,8 @@ }, "node_modules/listr2/node_modules/log-update/node_modules/wrap-ansi": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -10860,9 +9659,8 @@ }, "node_modules/listr2/node_modules/p-map": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, + "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" }, @@ -10875,9 +9673,8 @@ }, "node_modules/listr2/node_modules/slice-ansi": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -10914,14 +9711,12 @@ }, "node_modules/lodash.sortby": { "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" + "license": "MIT" }, "node_modules/lodash.startcase": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", - "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.sumby": { "version": "4.6.0", @@ -10973,6 +9768,7 @@ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.3" } @@ -10982,62 +9778,42 @@ "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-2.0.2.tgz", "integrity": "sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.3" } }, - "node_modules/magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, + "node_modules/lru-cache": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", + "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", + "license": "ISC", "engines": { - "node": ">=12" + "node": "20 || >=22" } }, - "node_modules/magic-string/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/magic-string": { + "version": "0.30.17", "dev": true, + "license": "MIT", "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/magic-string/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", "dev": true, - "bin": { - "semver": "bin/semver.js" - } + "license": "MIT" }, "node_modules/make-error": { "version": "1.3.6", - "devOptional": true, + "dev": true, "license": "ISC" }, "node_modules/make-fetch-happen": { "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", "dev": true, + "license": "ISC", "dependencies": { "agentkeepalive": "^4.2.1", "cacache": "^17.0.0", @@ -11061,26 +9837,23 @@ }, "node_modules/make-fetch-happen/node_modules/lru-cache": { "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/make-fetch-happen/node_modules/minipass": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=8" } }, "node_modules/makeerror": { "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "license": "BSD-3-Clause", "dependencies": { "tmpl": "1.0.5" } @@ -11090,14 +9863,13 @@ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/math-intrinsics": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -11117,8 +9889,6 @@ }, "node_modules/merge-descriptors": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -11126,8 +9896,7 @@ }, "node_modules/merge-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", @@ -11138,10 +9907,9 @@ } }, "node_modules/meros": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/meros/-/meros-1.2.1.tgz", - "integrity": "sha512-R2f/jxYqCAGI19KhAvaxSOxALBMkaXWH2a7rOyqQw+ZmizX5bKkEYWLzdhC+U82ZVVPVp6MCXe3EkVligh+12g==", + "version": "1.3.0", "dev": true, + "license": "MIT", "engines": { "node": ">=13" }, @@ -11163,8 +9931,6 @@ }, "node_modules/micromatch": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "license": "MIT", "dependencies": { "braces": "^3.0.3", @@ -11209,36 +9975,48 @@ } }, "node_modules/minimatch": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.3.tgz", - "integrity": "sha512-lIUdtK5hdofgCTu3aT0sOaHsYR37viUuIc0rwnnDXImbwFRcumyLMeZaM0t0I/fgxS6s6JMfu0rLD1Wz9pv1ng==", + "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": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/minimist": { - "version": "1.2.6", + "node_modules/minimatch/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "license": "MIT" - }, - "node_modules/minipass": { + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "dev": true, + "license": "MIT" + }, + "node_modules/minipass": { "version": "4.2.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.4.tgz", - "integrity": "sha512-lwycX3cBMTvcejsHITUgYj6Gy6A7Nh4Q6h9NP4sTHY1ccJlC7yKzDmiShEHsJ16Jf1nKGDEaiHxiltsJEvk0nQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=8" } }, "node_modules/minipass-collect": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -11248,9 +10026,8 @@ }, "node_modules/minipass-collect/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -11260,9 +10037,8 @@ }, "node_modules/minipass-fetch": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.1.tgz", - "integrity": "sha512-t9/wowtf7DYkwz8cfMSt0rMwiyNIBXf5CKZ3S5ZMqRqMYT0oLTp0x1WorMI9WTwvaPg21r1JbFxJMum8JrLGfw==", "dev": true, + "license": "MIT", "dependencies": { "minipass": "^4.0.0", "minipass-sized": "^1.0.3", @@ -11277,9 +10053,8 @@ }, "node_modules/minipass-flush": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -11289,9 +10064,8 @@ }, "node_modules/minipass-flush/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -11301,9 +10075,8 @@ }, "node_modules/minipass-pipeline": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -11313,9 +10086,8 @@ }, "node_modules/minipass-pipeline/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -11325,9 +10097,8 @@ }, "node_modules/minipass-sized": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -11337,9 +10108,8 @@ }, "node_modules/minipass-sized/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -11349,9 +10119,8 @@ }, "node_modules/minizlib": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, + "license": "MIT", "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -11362,9 +10131,8 @@ }, "node_modules/minizlib/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -11405,8 +10173,6 @@ }, "node_modules/mri": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true, "license": "MIT", "engines": { @@ -11414,7 +10180,9 @@ } }, "node_modules/ms": { - "version": "2.1.2", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, "node_modules/mute-stream": { @@ -11436,12 +10204,6 @@ "version": "1.4.0", "license": "MIT" }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, "node_modules/negotiator": { "version": "0.6.3", "license": "MIT", @@ -11454,60 +10216,41 @@ "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, + "license": "MIT", "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" } }, "node_modules/nock": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.6.tgz", - "integrity": "sha512-o2zOYiCpzRqSzPj0Zt/dQ/DqZeYoaQ7TUonc/xUPjCGl9WeHpNbxgVvOquXYAaJzI0M9BXV3HTzG0p8IUAbBTQ==", + "version": "14.0.4", "dev": true, "license": "MIT", "dependencies": { - "debug": "^4.1.0", + "@mswjs/interceptors": "^0.38.5", "json-stringify-safe": "^5.0.1", "propagate": "^2.0.0" }, "engines": { - "node": ">= 10.13" + "node": ">=18.20.0 <20 || >=20.12.1" } }, "node_modules/node-abort-controller": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", - "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==" + "dev": true, + "license": "MIT" }, "node_modules/node-addon-api": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "engines": { - "node": ">=10.5.0" - } + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/node-fetch": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -11525,9 +10268,10 @@ }, "node_modules/node-gyp-build": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", "dev": true, + "license": "MIT", + "optional": true, + "peer": true, "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -11539,9 +10283,8 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + "version": "2.0.19", + "license": "MIT" }, "node_modules/normalize-path": { "version": "3.0.0", @@ -11552,8 +10295,7 @@ }, "node_modules/npm-run-path": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -11565,7 +10307,8 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/object-assign": { "version": "4.1.1", @@ -11576,8 +10319,6 @@ }, "node_modules/object-inspect": { "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -11613,8 +10354,6 @@ }, "node_modules/object.assign": { "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, "license": "MIT", "dependencies": { @@ -11634,8 +10373,6 @@ }, "node_modules/object.fromentries": { "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11653,8 +10390,6 @@ }, "node_modules/object.groupby": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11668,8 +10403,6 @@ }, "node_modules/object.values": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", - "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, "license": "MIT", "dependencies": { @@ -11695,15 +10428,6 @@ "node": ">= 0.8" } }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/once": { "version": "1.4.0", "license": "ISC", @@ -11725,21 +10449,19 @@ } }, "node_modules/optimism": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.18.0.tgz", - "integrity": "sha512-tGn8+REwLRNFnb9WmcY5IfpOqeX2kpaYJ1s6Ae3mn12AeydLkR3j+jSCmVQFoXqU8D41PAJ1RG1rCRNWmNZVmQ==", + "version": "0.18.1", + "license": "MIT", "dependencies": { "@wry/caches": "^1.0.0", "@wry/context": "^0.7.0", - "@wry/trie": "^0.4.3", + "@wry/trie": "^0.5.0", "tslib": "^2.3.0" } }, "node_modules/optionator": { "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, + "license": "MIT", "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", @@ -11784,14 +10506,16 @@ }, "node_modules/outdent": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.5.0.tgz", - "integrity": "sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/outvariant": { + "version": "1.4.3", + "dev": true, + "license": "MIT" }, "node_modules/own-keys": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", "dev": true, "license": "MIT", "dependencies": { @@ -11873,17 +10597,19 @@ } }, "node_modules/package-manager-detector": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.2.tgz", - "integrity": "sha512-VgXbyrSNsml4eHWIvxxG/nTL4wgybMTXCV2Un/+yEc3aDKKU6nQBZjbeP3Pl3qm9Qg92X/1ng4ffvCeD/zwHgg==", + "version": "0.2.11", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "quansync": "^0.2.7" + } }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "dev": true, + "license": "MIT", "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" @@ -11894,6 +10620,7 @@ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-2.0.0.tgz", "integrity": "sha512-uo0Z9JJeWzv8BG+tRcapBKNJ0dro9cLyczGzulS6EfeyAdeC9sbojtW6XwvYxJkEne9En+J2XEl4zyglVeIwFg==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.1.0" }, @@ -11906,6 +10633,7 @@ "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", "dev": true, + "license": "MIT", "dependencies": { "is-absolute": "^1.0.0", "map-cache": "^0.2.0", @@ -11941,8 +10669,7 @@ }, "node_modules/parseurl": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -11952,6 +10679,7 @@ "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "dev": true, + "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" @@ -11962,6 +10690,7 @@ "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", "dev": true, + "license": "MIT", "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" @@ -11976,8 +10705,7 @@ }, "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -11998,6 +10726,7 @@ "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", "dev": true, + "license": "MIT", "dependencies": { "path-root-regex": "^0.1.0" }, @@ -12010,14 +10739,13 @@ "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-to-regexp": { "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "license": "MIT" }, "node_modules/path-type": { @@ -12030,8 +10758,6 @@ }, "node_modules/picocolors": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "license": "ISC" }, "node_modules/picomatch": { @@ -12070,9 +10796,7 @@ } }, "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "version": "1.1.0", "dev": true, "license": "MIT", "engines": { @@ -12103,10 +10827,24 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/prettier-2": { + "name": "prettier", + "version": "2.8.8", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/pretty-format": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -12118,8 +10856,7 @@ }, "node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -12129,29 +10866,27 @@ }, "node_modules/pretty-format/node_modules/react-is": { "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + "license": "MIT" }, "node_modules/promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", "dev": true, + "license": "MIT", "dependencies": { "asap": "~2.0.3" } }, "node_modules/promise-inflight": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/promise-retry": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, + "license": "MIT", "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" @@ -12162,17 +10897,15 @@ }, "node_modules/promise-retry/node_modules/retry": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/prompts": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -12210,7 +10943,9 @@ } }, "node_modules/punycode": { - "version": "2.1.1", + "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": { @@ -12218,9 +10953,7 @@ } }, "node_modules/pure-rand": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.0.tgz", - "integrity": "sha512-rLSBxJjP+4DQOgcJAx6RZHT2he2pkhQdSnofG5VWyVl6GRq/K02ISOuOLcsMOrtKDIJb8JN2zm3FFzWNbezdPw==", + "version": "6.1.0", "funding": [ { "type": "individual", @@ -12230,30 +10963,12 @@ "type": "opencollective", "url": "https://opencollective.com/fast-check" } - ] - }, - "node_modules/pvtsutils": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.2.tgz", - "integrity": "sha512-+Ipe2iNUyrZz+8K/2IOo+kKikdtfhRKzNpQbruF2URmqPtoqAs8g3xS7TJvFF2GcPXjh7DkqMnpVveRFq4PgEQ==", - "dev": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/pvutils": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", - "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } + ], + "license": "MIT" }, "node_modules/qs": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.6" }, @@ -12264,24 +10979,20 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/qs-middleware": { - "version": "1.0.3", - "dev": true, - "license": "LGPL-3.0", - "dependencies": { - "qs": "~6.4.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/qs-middleware/node_modules/qs": { - "version": "6.4.1", + "node_modules/quansync": { + "version": "0.2.10", "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.6" - } + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" }, "node_modules/queue-microtask": { "version": "1.2.3", @@ -12311,8 +11022,7 @@ }, "node_modules/raw-body": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -12329,9 +11039,8 @@ }, "node_modules/read-yaml-file": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-1.1.0.tgz", - "integrity": "sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.5", "js-yaml": "^3.6.1", @@ -12344,18 +11053,16 @@ }, "node_modules/read-yaml-file/node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } }, "node_modules/read-yaml-file/node_modules/js-yaml": { "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -12366,9 +11073,8 @@ }, "node_modules/read-yaml-file/node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -12388,8 +11094,6 @@ }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "dev": true, "license": "MIT", "dependencies": { @@ -12409,16 +11113,8 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, "license": "MIT", "dependencies": { @@ -12438,8 +11134,6 @@ }, "node_modules/rehackt": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/rehackt/-/rehackt-0.1.0.tgz", - "integrity": "sha512-7kRDOuLHB87D/JESKxQoRwv4DzbIdwkAGQ7p6QKGdVlY1IZheUnVhlk/4UZlNUVxdAXpyxikE3URsG067ybVzw==", "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -12459,6 +11153,7 @@ "resolved": "https://registry.npmjs.org/relay-runtime/-/relay-runtime-12.0.0.tgz", "integrity": "sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.0.0", "fbjs": "^3.0.0", @@ -12488,6 +11183,7 @@ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10" } @@ -12499,11 +11195,6 @@ "node": ">=0.10.0" } }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/requisition": { "version": "1.7.0", "dev": true, @@ -12558,25 +11249,26 @@ } }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.10", + "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/resolve-cwd": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -12591,22 +11283,9 @@ "node": ">=8" } }, - "node_modules/resolve-global": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", - "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", - "dev": true, - "dependencies": { - "global-dirs": "^0.1.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/resolve.exports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.0.tgz", - "integrity": "sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==", + "version": "2.0.3", + "license": "MIT", "engines": { "node": ">=10" } @@ -12641,24 +11320,46 @@ }, "node_modules/rfdc": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/rollup": { - "version": "3.29.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz", - "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.0.tgz", + "integrity": "sha512-HqMFpUbWlf/tvcxBFNKnJyzc7Lk+XO3FGc3pbNBLqEbOz0gPLRgcrlS3UF4MfUrVlstOaP/q0kM6GVvi+LrLRg==", "dev": true, "license": "MIT", + "dependencies": { + "@types/estree": "1.0.7" + }, "bin": { "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=14.18.0", + "node": ">=18.0.0", "npm": ">=8.0.0" }, "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.41.0", + "@rollup/rollup-android-arm64": "4.41.0", + "@rollup/rollup-darwin-arm64": "4.41.0", + "@rollup/rollup-darwin-x64": "4.41.0", + "@rollup/rollup-freebsd-arm64": "4.41.0", + "@rollup/rollup-freebsd-x64": "4.41.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.41.0", + "@rollup/rollup-linux-arm-musleabihf": "4.41.0", + "@rollup/rollup-linux-arm64-gnu": "4.41.0", + "@rollup/rollup-linux-arm64-musl": "4.41.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.41.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.41.0", + "@rollup/rollup-linux-riscv64-gnu": "4.41.0", + "@rollup/rollup-linux-riscv64-musl": "4.41.0", + "@rollup/rollup-linux-s390x-gnu": "4.41.0", + "@rollup/rollup-linux-x64-gnu": "4.41.0", + "@rollup/rollup-linux-x64-musl": "4.41.0", + "@rollup/rollup-win32-arm64-msvc": "4.41.0", + "@rollup/rollup-win32-ia32-msvc": "4.41.0", + "@rollup/rollup-win32-x64-msvc": "4.41.0", "fsevents": "~2.3.2" } }, @@ -12702,8 +11403,6 @@ }, "node_modules/safe-array-concat": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -12740,8 +11439,6 @@ }, "node_modules/safe-push-apply": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "dev": true, "license": "MIT", "dependencies": { @@ -12757,8 +11454,6 @@ }, "node_modules/safe-regex-test": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, "license": "MIT", "dependencies": { @@ -12779,14 +11474,11 @@ }, "node_modules/scuid": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/scuid/-/scuid-1.1.0.tgz", - "integrity": "sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -12797,8 +11489,7 @@ }, "node_modules/send": { "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -12820,34 +11511,25 @@ }, "node_modules/send/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "license": "MIT" }, "node_modules/send/node_modules/encodeurl": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, "node_modules/send/node_modules/statuses": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -12857,6 +11539,7 @@ "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", "dev": true, + "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3", @@ -12865,8 +11548,7 @@ }, "node_modules/serve-static": { "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", @@ -12877,15 +11559,8 @@ "node": ">= 0.8.0" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/set-function-length": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "license": "MIT", "dependencies": { @@ -12902,8 +11577,6 @@ }, "node_modules/set-function-name": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12918,8 +11591,6 @@ }, "node_modules/set-proto": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", "dev": true, "license": "MIT", "dependencies": { @@ -12935,7 +11606,8 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/setprototypeof": { "version": "1.2.0", @@ -12971,14 +11643,11 @@ }, "node_modules/shell-quote": { "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/side-channel": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -12996,8 +11665,6 @@ }, "node_modules/side-channel-list": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -13012,8 +11679,6 @@ }, "node_modules/side-channel-map": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -13030,8 +11695,6 @@ }, "node_modules/side-channel-weakmap": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -13055,12 +11718,12 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/signedsource/-/signedsource-1.0.0.tgz", "integrity": "sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/sisteransi": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + "license": "MIT" }, "node_modules/slash": { "version": "3.0.0", @@ -13071,9 +11734,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==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" @@ -13084,6 +11746,7 @@ "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", "dev": true, + "license": "MIT", "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" @@ -13091,9 +11754,8 @@ }, "node_modules/socks": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", "dev": true, + "license": "MIT", "dependencies": { "ip": "^2.0.0", "smart-buffer": "^4.2.0" @@ -13105,9 +11767,8 @@ }, "node_modules/socks-proxy-agent": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^6.0.2", "debug": "^4.3.3", @@ -13119,16 +11780,14 @@ }, "node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-support": { "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -13136,8 +11795,6 @@ }, "node_modules/spawndamnit": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spawndamnit/-/spawndamnit-3.0.1.tgz", - "integrity": "sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==", "dev": true, "license": "SEE LICENSE IN LICENSE", "dependencies": { @@ -13147,8 +11804,6 @@ }, "node_modules/spawndamnit/node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "license": "ISC", "engines": { @@ -13163,6 +11818,7 @@ "resolved": "https://registry.npmjs.org/sponge-case/-/sponge-case-1.0.1.tgz", "integrity": "sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.3" } @@ -13173,9 +11829,8 @@ }, "node_modules/ssri": { "version": "10.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.1.tgz", - "integrity": "sha512-WVy6di9DlPOeBWEjMScpNipeSX2jIZBGEn5Uuo8Q7aIuFEuDX0pw8RxcOjlD1TWP4obi24ki7m/13+nFpcbXrw==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^4.0.0" }, @@ -13185,8 +11840,7 @@ }, "node_modules/stack-utils": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -13196,8 +11850,7 @@ }, "node_modules/stack-utils/node_modules/escape-string-regexp": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "license": "MIT", "engines": { "node": ">=8" } @@ -13242,13 +11895,16 @@ }, "node_modules/streamsearch": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", "dev": true, "engines": { "node": ">=10.0.0" } }, + "node_modules/strict-event-emitter": { + "version": "0.5.1", + "dev": true, + "license": "MIT" + }, "node_modules/string_decoder": { "version": "1.3.0", "dev": true, @@ -13259,13 +11915,14 @@ }, "node_modules/string-env-interpolation": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string-env-interpolation/-/string-env-interpolation-1.0.1.tgz", + "integrity": "sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==", "dev": true, "license": "MIT" }, "node_modules/string-length": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "license": "MIT", "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -13288,8 +11945,6 @@ }, "node_modules/string.prototype.trim": { "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, "license": "MIT", "dependencies": { @@ -13310,8 +11965,6 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13329,8 +11982,6 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "license": "MIT", "dependencies": { @@ -13357,16 +12008,14 @@ }, "node_modules/strip-bom": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/strip-final-newline": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "license": "MIT", "engines": { "node": ">=6" } @@ -13406,23 +12055,11 @@ "node": ">=14.18.0" } }, - "node_modules/superagent/node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/superagent/node_modules/mime": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -13468,6 +12105,7 @@ "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-2.0.2.tgz", "integrity": "sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.3" } @@ -13481,9 +12119,8 @@ }, "node_modules/tar": { "version": "6.1.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz", - "integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==", "dev": true, + "license": "ISC", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -13498,9 +12135,8 @@ }, "node_modules/tar/node_modules/fs-minipass": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -13510,9 +12146,8 @@ }, "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -13594,16 +12229,6 @@ "node": "*" } }, - "node_modules/test-listen": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, "node_modules/thenify": { "version": "3.3.1", "dev": true, @@ -13628,11 +12253,57 @@ "dev": true, "license": "MIT" }, - "node_modules/title-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/title-case/-/title-case-3.0.3.tgz", + "node_modules/tinyglobby": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", + "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", + "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/title-case": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-3.0.3.tgz", "integrity": "sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.3" } @@ -13650,20 +12321,10 @@ }, "node_modules/tmpl": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } + "license": "BSD-3-Clause" }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -13681,8 +12342,21 @@ }, "node_modules/tr46": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "dev": true, + "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-graphviz": { "version": "1.8.2", @@ -13709,9 +12383,9 @@ } }, "node_modules/ts-jest": { - "version": "29.2.6", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.6.tgz", - "integrity": "sha512-yTNZVZqc8lSixm+QGVFcPe6+yj7+TWZwIesuOWvfcn4B9bz5x4NDzVCQQjOs7Hfouu36aEqfEbo9Qpo+gq8dDg==", + "version": "29.3.4", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.4.tgz", + "integrity": "sha512-Iqbrm8IXOmV+ggWHOTEbjwyCf2xZlUMv5npExksXohL+tk8va4Fjhb+X2+Rt9NBmgO7bJ8WpnMLOwih/DnMlFA==", "dev": true, "license": "MIT", "dependencies": { @@ -13722,7 +12396,8 @@ "json5": "^2.2.3", "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", - "semver": "^7.7.1", + "semver": "^7.7.2", + "type-fest": "^4.41.0", "yargs-parser": "^21.1.1" }, "bin": { @@ -13757,60 +12432,28 @@ } } }, + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ts-log": { "version": "2.2.4", "dev": true, "license": "MIT" }, - "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "optional": true, - "peer": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, "node_modules/tsconfig-paths": { "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, + "license": "MIT", "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", @@ -13820,9 +12463,8 @@ }, "node_modules/tsconfig-paths/node_modules/json5": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.0" }, @@ -13839,26 +12481,9 @@ } }, "node_modules/tslib": { - "version": "2.4.0", - "license": "0BSD" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "dev": true, + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "license": "0BSD" }, "node_modules/type-check": { @@ -13874,8 +12499,7 @@ }, "node_modules/type-detect": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "license": "MIT", "engines": { "node": ">=4" } @@ -13903,8 +12527,6 @@ }, "node_modules/typed-array-buffer": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "license": "MIT", "dependencies": { @@ -13918,8 +12540,6 @@ }, "node_modules/typed-array-byte-length": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, "license": "MIT", "dependencies": { @@ -13938,8 +12558,6 @@ }, "node_modules/typed-array-byte-offset": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13960,8 +12578,6 @@ }, "node_modules/typed-array-length": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "license": "MIT", "dependencies": { @@ -13979,20 +12595,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, "node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", - "devOptional": true, + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -14002,10 +12609,33 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.32.1.tgz", + "integrity": "sha512-D7el+eaDHAmXvrZBy1zpzSNIRqnCOrkwTgZxTu3MUqRWk8k0q9m9Ho4+vPf7iHtgUfrK/o8IZaEApsxPlHTFCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.32.1", + "@typescript-eslint/parser": "8.32.1", + "@typescript-eslint/utils": "8.32.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 <5.9.0" + } + }, "node_modules/ua-parser-js": { - "version": "0.7.35", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", - "integrity": "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==", + "version": "1.0.40", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.40.tgz", + "integrity": "sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew==", "dev": true, "funding": [ { @@ -14015,16 +12645,22 @@ { "type": "paypal", "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" } ], + "license": "MIT", + "bin": { + "ua-parser-js": "script/cli.js" + }, "engines": { "node": "*" } }, "node_modules/unbox-primitive": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "license": "MIT", "dependencies": { @@ -14045,27 +12681,19 @@ "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/undici": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.12.0.tgz", - "integrity": "sha512-zMLamCG62PGjd9HHMpo05bSLvvwWOZgGeiWlN/vlqu3+lRo3elxktVGEyLMX+IO7c2eflLjcW74AlkhEZm15mg==", - "dev": true, - "dependencies": { - "busboy": "^1.6.0" - }, - "engines": { - "node": ">=12.18" - } + "node_modules/undici-types": { + "version": "5.26.5", + "license": "MIT" }, "node_modules/unique-filename": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "dev": true, + "license": "ISC", "dependencies": { "unique-slug": "^4.0.0" }, @@ -14075,9 +12703,8 @@ }, "node_modules/unique-slug": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4" }, @@ -14085,18 +12712,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/universalify": { "version": "0.1.2", "dev": true, @@ -14135,9 +12750,7 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "version": "1.1.3", "funding": [ { "type": "opencollective", @@ -14146,14 +12759,19 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { - "browserslist-lint": "cli.js" + "update-browserslist-db": "cli.js" }, "peerDependencies": { "browserslist": ">= 4.21.0" @@ -14164,6 +12782,7 @@ "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.3" } @@ -14173,12 +12792,15 @@ "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", "dev": true, + "license": "MIT", "dependencies": { "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": { @@ -14194,13 +12816,11 @@ } }, "node_modules/urlpattern-polyfill": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-7.0.0.tgz", - "integrity": "sha512-fErMjbZwveQIk+EY4vxM5GKDuInBOigxmjM6WT2R/cV2ETVyFtDHeU+VmbnfuJ5sp0qNbyUBelTO/60/d+/SSQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.1.0.tgz", + "integrity": "sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==", "dev": true, - "dependencies": { - "braces": "^3.0.2" - } + "license": "MIT" }, "node_modules/util-deprecate": { "version": "1.0.2", @@ -14216,35 +12836,26 @@ }, "node_modules/uuid": { "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "optional": true, - "peer": true - }, "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "version": "9.3.0", + "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" + "convert-source-map": "^2.0.0" }, "engines": { "node": ">=10.12.0" } }, "node_modules/value-or-promise": { - "version": "1.0.11", + "version": "1.0.12", "dev": true, "license": "MIT", "engines": { @@ -14259,21 +12870,22 @@ } }, "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz", - "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==", - "dev": true + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", + "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", + "dev": true, + "license": "MIT" }, "node_modules/vscode-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz", - "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==", - "dev": true + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "dev": true, + "license": "MIT" }, "node_modules/walker": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" } @@ -14286,50 +12898,24 @@ "defaults": "^1.0.3" } }, - "node_modules/web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/webcrypto-core": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.7.5.tgz", - "integrity": "sha512-gaExY2/3EHQlRNNNVSrbG2Cg94Rutl7fAaKILS1w8ZDhGxdFOaw6EbCfHIxPy9vt/xwp5o0VQAx9aySPF6hU1A==", - "dev": true, - "dependencies": { - "@peculiar/asn1-schema": "^2.1.6", - "@peculiar/json-schema": "^1.1.12", - "asn1js": "^3.0.1", - "pvtsutils": "^1.3.2", - "tslib": "^2.4.0" - } - }, "node_modules/webidl-conversions": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/whatwg-mimetype": { - "version": "3.0.0", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", "license": "MIT", "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/whatwg-url": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -14350,8 +12936,6 @@ }, "node_modules/which-boxed-primitive": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, "license": "MIT", "dependencies": { @@ -14370,8 +12954,6 @@ }, "node_modules/which-builtin-type": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -14398,8 +12980,6 @@ }, "node_modules/which-collection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "license": "MIT", "dependencies": { @@ -14415,15 +12995,8 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/which-module": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/which-typed-array": { "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "dev": true, "license": "MIT", "dependencies": { @@ -14461,29 +13034,16 @@ "version": "1.0.2", "license": "ISC" }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, "node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "version": "8.13.0", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -14495,12 +13055,16 @@ } }, "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", + "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/xml": { @@ -14529,18 +13093,22 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "1.10.2", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", + "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", "dev": true, "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, "engines": { - "node": ">= 6" + "node": ">= 14.6" } }, "node_modules/yaml-ast-parser": { "version": "0.0.43", - "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", - "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/yargs": { "version": "17.4.1", @@ -14560,22 +13128,11 @@ }, "node_modules/yargs-parser": { "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "license": "ISC", "engines": { "node": ">=12" } }, - "node_modules/yn": { - "version": "3.1.1", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "license": "MIT", @@ -14611,14 +13168,41 @@ "license": "MIT", "dependencies": { "@apollo/usage-reporting-protobuf": "^4.1.1", - "@apollo/utils.fetcher": "^2.0.0", - "@apollo/utils.keyvaluecache": "^2.1.0", - "@apollo/utils.logger": "^2.0.0" + "@apollo/utils.fetcher": "^3.0.0", + "@apollo/utils.keyvaluecache": "^4.0.0", + "@apollo/utils.logger": "^3.0.0" }, "peerDependencies": { "graphql": "14.x || 15.x || 16.x" } }, + "packages/gateway-interface/node_modules/@apollo/utils.fetcher": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "packages/gateway-interface/node_modules/@apollo/utils.keyvaluecache": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@apollo/utils.keyvaluecache/-/utils.keyvaluecache-4.0.0.tgz", + "integrity": "sha512-mKw1myRUkQsGPNB+9bglAuhviodJ2L2MRYLTafCMw5BIo7nbvCPNCkLnIHjZ1NOzH7SnMAr5c9LmXiqsgYqLZw==", + "license": "MIT", + "dependencies": { + "@apollo/utils.logger": "^3.0.0", + "lru-cache": "^11.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "packages/gateway-interface/node_modules/@apollo/utils.logger": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, "packages/integration-testsuite": { "name": "@apollo/server-integration-testsuite", "version": "4.12.2", @@ -14628,23 +13212,42 @@ "@apollo/client": "^3.6.9", "@apollo/server": "4.12.2", "@apollo/usage-reporting-protobuf": "^4.1.1", - "@apollo/utils.createhash": "^2.0.2", - "@apollo/utils.keyvaluecache": "^2.1.0", + "@apollo/utils.createhash": "^3.0.0", + "@apollo/utils.keyvaluecache": "^4.0.0", "express": "^4.21.1", "graphql-http": "1.22.4", "graphql-tag": "^2.12.6", "loglevel": "^1.8.0", - "node-fetch": "^2.6.7", "superagent": "^10.0.0", "supertest": "^7.0.0" }, "engines": { - "node": ">=14.16.0" + "node": ">=20" }, "peerDependencies": { - "@jest/globals": "28.x || 29.x", - "graphql": "^16.6.0", - "jest": "28.x || 29.x" + "@jest/globals": "29.x", + "graphql": "^16.11.0", + "jest": "29.x" + } + }, + "packages/integration-testsuite/node_modules/@apollo/utils.keyvaluecache": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@apollo/utils.keyvaluecache/-/utils.keyvaluecache-4.0.0.tgz", + "integrity": "sha512-mKw1myRUkQsGPNB+9bglAuhviodJ2L2MRYLTafCMw5BIo7nbvCPNCkLnIHjZ1NOzH7SnMAr5c9LmXiqsgYqLZw==", + "license": "MIT", + "dependencies": { + "@apollo/utils.logger": "^3.0.0", + "lru-cache": "^11.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "packages/integration-testsuite/node_modules/@apollo/utils.logger": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=16" } }, "packages/plugin-response-cache": { @@ -14652,10707 +13255,268 @@ "version": "4.1.4", "license": "MIT", "dependencies": { - "@apollo/utils.createhash": "^2.0.2", - "@apollo/utils.keyvaluecache": "^2.1.0" + "@apollo/utils.createhash": "^3.0.0", + "@apollo/utils.keyvaluecache": "^4.0.0" }, "engines": { - "node": ">=14.16.0" + "node": ">=20" }, "peerDependencies": { "@apollo/server": "^4.0.1", - "graphql": "^16.6.0" + "graphql": "^16.11.0" } }, - "packages/server": { - "name": "@apollo/server", - "version": "4.12.2", + "packages/plugin-response-cache/node_modules/@apollo/utils.keyvaluecache": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@apollo/utils.keyvaluecache/-/utils.keyvaluecache-4.0.0.tgz", + "integrity": "sha512-mKw1myRUkQsGPNB+9bglAuhviodJ2L2MRYLTafCMw5BIo7nbvCPNCkLnIHjZ1NOzH7SnMAr5c9LmXiqsgYqLZw==", "license": "MIT", "dependencies": { - "@apollo/cache-control-types": "^1.0.3", - "@apollo/server-gateway-interface": "^1.1.1", + "@apollo/utils.logger": "^3.0.0", + "lru-cache": "^11.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "packages/plugin-response-cache/node_modules/@apollo/utils.logger": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "packages/server": { + "name": "@apollo/server", + "version": "4.12.2", + "license": "MIT", + "dependencies": { + "@apollo/cache-control-types": "^1.0.3", + "@apollo/server-gateway-interface": "^1.1.1", "@apollo/usage-reporting-protobuf": "^4.1.1", - "@apollo/utils.createhash": "^2.0.2", - "@apollo/utils.fetcher": "^2.0.0", - "@apollo/utils.isnodelike": "^2.0.0", - "@apollo/utils.keyvaluecache": "^2.1.0", - "@apollo/utils.logger": "^2.0.0", + "@apollo/utils.createhash": "^3.0.0", + "@apollo/utils.fetcher": "^3.0.0", + "@apollo/utils.isnodelike": "^3.0.0", + "@apollo/utils.keyvaluecache": "^4.0.0", + "@apollo/utils.logger": "^3.0.0", "@apollo/utils.usagereporting": "^2.1.0", - "@apollo/utils.withrequired": "^2.0.0", - "@graphql-tools/schema": "^9.0.0", + "@apollo/utils.withrequired": "^3.0.0", + "@graphql-tools/schema": "^10.0.0", "@types/express": "^4.17.13", "@types/express-serve-static-core": "^4.17.30", - "@types/node-fetch": "^2.6.1", "async-retry": "^1.2.1", + "body-parser": "^2.2.0", "cors": "^2.8.5", "express": "^4.21.1", + "finalhandler": "^2.1.0", "loglevel": "^1.6.8", - "lru-cache": "^7.10.1", - "negotiator": "^0.6.3", - "node-abort-controller": "^3.1.1", - "node-fetch": "^2.6.7", - "uuid": "^9.0.0", - "whatwg-mimetype": "^3.0.0" + "lru-cache": "^11.1.0", + "negotiator": "^1.0.0", + "uuid": "^11.1.0", + "whatwg-mimetype": "^4.0.0" }, "engines": { - "node": ">=14.16.0" + "node": ">=20" }, "peerDependencies": { - "graphql": "^16.6.0" + "graphql": "^16.11.0" } }, - "packages/server-gateway-interface": { - "name": "@apollo/server-gateway-interface", - "version": "1.0.4", - "extraneous": true, + "packages/server/node_modules/@apollo/utils.fetcher": { + "version": "3.0.0", "license": "MIT", - "dependencies": { - "@apollo/usage-reporting-protobuf": "^4.0.0", - "@apollo/utils.fetcher": "^1.0.0", - "@apollo/utils.keyvaluecache": "^1.0.1", - "@apollo/utils.logger": "^1.0.0" - }, "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "graphql": "14.x || 15.x || 16.x" + "node": ">=16" } }, - "packages/server/node_modules/lru-cache": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz", - "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==", + "packages/server/node_modules/@apollo/utils.isnodelike": { + "version": "3.0.0", + "license": "MIT", "engines": { - "node": ">=12" - } - }, - "packages/server/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "bin": { - "uuid": "dist/bin/uuid" + "node": ">=16" } }, - "packages/usage-reporting-protobuf": { - "name": "@apollo/usage-reporting-protobuf", - "version": "4.1.1", + "packages/server/node_modules/@apollo/utils.keyvaluecache": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@apollo/utils.keyvaluecache/-/utils.keyvaluecache-4.0.0.tgz", + "integrity": "sha512-mKw1myRUkQsGPNB+9bglAuhviodJ2L2MRYLTafCMw5BIo7nbvCPNCkLnIHjZ1NOzH7SnMAr5c9LmXiqsgYqLZw==", "license": "MIT", "dependencies": { - "@apollo/protobufjs": "1.2.7" + "@apollo/utils.logger": "^3.0.0", + "lru-cache": "^11.0.0" + }, + "engines": { + "node": ">=20" } - } - }, - "dependencies": { - "@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true }, - "@ampproject/remapping": { - "version": "2.1.2", - "requires": { - "@jridgewell/trace-mapping": "^0.3.0" + "packages/server/node_modules/@apollo/utils.logger": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=16" } }, - "@apollo/cache-control-types": { - "version": "file:packages/cache-control-types", - "requires": {} - }, - "@apollo/client": { - "version": "3.13.8", - "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.13.8.tgz", - "integrity": "sha512-YM9lQpm0VfVco4DSyKooHS/fDTiKQcCHfxr7i3iL6a0kP/jNO5+4NFK6vtRDxaYisd5BrwOZHLJpPBnvRVpKPg==", - "requires": { - "@graphql-typed-document-node/core": "^3.1.1", - "@wry/caches": "^1.0.0", - "@wry/equality": "^0.5.6", - "@wry/trie": "^0.5.0", - "graphql-tag": "^2.12.6", - "hoist-non-react-statics": "^3.3.2", - "optimism": "^0.18.0", - "prop-types": "^15.7.2", - "rehackt": "^0.1.0", - "symbol-observable": "^4.0.0", - "ts-invariant": "^0.10.3", - "tslib": "^2.3.0", - "zen-observable-ts": "^1.2.5" - }, + "packages/server/node_modules/body-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "license": "MIT", "dependencies": { - "@wry/trie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@wry/trie/-/trie-0.5.0.tgz", - "integrity": "sha512-FNoYzHawTMk/6KMQoEG5O4PuioX19UbwdQKF44yw0nLfOypfQdjtfZzo/UIJWAJ23sNIFbD1Ug9lbaDGMwbqQA==", - "requires": { - "tslib": "^2.3.0" - } - } + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" + }, + "engines": { + "node": ">=18" } }, - "@apollo/composition": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/@apollo/composition/-/composition-2.11.2.tgz", - "integrity": "sha512-ut/Kj/YMUXtV+VwsHFOoT0hvvZAJwOltkuMVZJUY1O0deecrc4Ceq8VeogPKXF/jeR59kMr6na1ZPHBRBe/rqQ==", - "dev": true, - "requires": { - "@apollo/federation-internals": "2.11.2", - "@apollo/query-graphs": "2.11.2" + "packages/server/node_modules/finalhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 0.8" } }, - "@apollo/federation-internals": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/@apollo/federation-internals/-/federation-internals-2.11.2.tgz", - "integrity": "sha512-GSFGL2fLox3EBszWKJvRkVLFA0hkJF9PHGMQH+WdB/12KVB3QHKwDyW1T9VZtxe2SJhNU3puleSxCsO16Bf3iA==", - "dev": true, - "requires": { - "@types/uuid": "^9.0.0", - "chalk": "^4.1.0", - "js-levenshtein": "^1.1.6", - "uuid": "^9.0.0" - }, + "packages/server/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", "dependencies": { - "uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "dev": true - } + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "@apollo/gateway": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/@apollo/gateway/-/gateway-2.11.2.tgz", - "integrity": "sha512-QeE/aVYUhYJFxXJK0vF6zr0x6yRKpaSr5b9q7vxWVktihrzsAVS+GwALbcliU/hkGgntXwO+jvXwz9mEKrdwnw==", - "dev": true, - "requires": { - "@apollo/composition": "2.11.2", - "@apollo/federation-internals": "2.11.2", - "@apollo/query-planner": "2.11.2", - "@apollo/server-gateway-interface": "^1.1.0", - "@apollo/usage-reporting-protobuf": "^4.1.0", - "@apollo/utils.createhash": "^2.0.0", - "@apollo/utils.fetcher": "^2.0.0", - "@apollo/utils.isnodelike": "^2.0.0", - "@apollo/utils.keyvaluecache": "^2.1.0", - "@apollo/utils.logger": "^2.0.0", - "@josephg/resolvable": "^1.0.1", - "@opentelemetry/api": "^1.0.1", - "@types/node-fetch": "^2.6.2", - "async-retry": "^1.3.3", - "loglevel": "^1.6.1", - "make-fetch-happen": "^11.0.0", - "node-abort-controller": "^3.0.1", - "node-fetch": "^2.6.7" + "packages/server/node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, - "@apollo/protobufjs": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.2.7.tgz", - "integrity": "sha512-Lahx5zntHPZia35myYDBRuF58tlwPskwHc5CWBZC/4bMKB6siTBWwtMrkqXcsNwQiFSzSx5hKdRPUmemrEp3Gg==", - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.0", - "long": "^4.0.0" + "packages/server/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, - "@apollo/query-graphs": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/@apollo/query-graphs/-/query-graphs-2.11.2.tgz", - "integrity": "sha512-LwGumh0XkOMSA4+RhSVYY1Yd4wa3Mi8ylDk8GyhMl4kpFAOb2x+SRIka+kEDNPufu9wNSl457/rVeAxNw1zZ1Q==", - "dev": true, - "requires": { - "@apollo/federation-internals": "2.11.2", - "deep-equal": "^2.0.5", - "ts-graphviz": "^1.5.4", - "uuid": "^9.0.0" - }, + "packages/server/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "license": "MIT", "dependencies": { - "uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "dev": true - } + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" } }, - "@apollo/query-planner": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/@apollo/query-planner/-/query-planner-2.11.2.tgz", - "integrity": "sha512-wrJ10uryy+Ir5V3tOjDbuXOgHZMgI4/O5IcBYIayEFPrZBG2TaDWVNN14b0Ri0j27p+foxbGErs8t1Daphvbjg==", - "dev": true, - "requires": { - "@apollo/federation-internals": "2.11.2", - "@apollo/query-graphs": "2.11.2", - "@apollo/utils.keyvaluecache": "^2.1.0", - "chalk": "^4.1.0", - "deep-equal": "^2.0.5", - "pretty-format": "^29.0.0" + "packages/server/node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, - "@apollo/server": { - "version": "file:packages/server", - "requires": { - "@apollo/cache-control-types": "^1.0.3", - "@apollo/server-gateway-interface": "^1.1.1", - "@apollo/usage-reporting-protobuf": "^4.1.1", - "@apollo/utils.createhash": "^2.0.2", - "@apollo/utils.fetcher": "^2.0.0", - "@apollo/utils.isnodelike": "^2.0.0", - "@apollo/utils.keyvaluecache": "^2.1.0", - "@apollo/utils.logger": "^2.0.0", - "@apollo/utils.usagereporting": "^2.1.0", - "@apollo/utils.withrequired": "^2.0.0", - "@graphql-tools/schema": "^9.0.0", - "@types/express": "^4.17.13", - "@types/express-serve-static-core": "^4.17.30", - "@types/node-fetch": "^2.6.1", - "async-retry": "^1.2.1", - "cors": "^2.8.5", - "express": "^4.21.1", - "loglevel": "^1.6.8", - "lru-cache": "^7.10.1", - "negotiator": "^0.6.3", - "node-abort-controller": "^3.1.1", - "node-fetch": "^2.6.7", - "uuid": "^9.0.0", - "whatwg-mimetype": "^3.0.0" - }, + "packages/server/node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", "dependencies": { - "lru-cache": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz", - "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==" - }, - "uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" - } + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@apollo/server-gateway-interface": { - "version": "file:packages/gateway-interface", - "requires": { - "@apollo/usage-reporting-protobuf": "^4.1.1", - "@apollo/utils.fetcher": "^2.0.0", - "@apollo/utils.keyvaluecache": "^2.1.0", - "@apollo/utils.logger": "^2.0.0" + "packages/server/node_modules/raw-body": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.6.3", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "@apollo/server-integration-testsuite": { - "version": "file:packages/integration-testsuite", - "requires": { - "@apollo/cache-control-types": "^1.0.3", - "@apollo/client": "^3.6.9", - "@apollo/server": "4.12.2", - "@apollo/usage-reporting-protobuf": "^4.1.1", - "@apollo/utils.createhash": "^2.0.2", - "@apollo/utils.keyvaluecache": "^2.1.0", - "express": "^4.21.1", - "graphql-http": "1.22.4", - "graphql-tag": "^2.12.6", - "loglevel": "^1.8.0", - "node-fetch": "^2.6.7", - "superagent": "^10.0.0", - "supertest": "^7.0.0" + "packages/server/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, - "@apollo/server-plugin-response-cache": { - "version": "file:packages/plugin-response-cache", - "requires": { - "@apollo/utils.createhash": "^2.0.2", - "@apollo/utils.keyvaluecache": "^2.1.0" + "packages/server/node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" } }, - "@apollo/subgraph": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/@apollo/subgraph/-/subgraph-2.11.2.tgz", - "integrity": "sha512-S14osF5Zc8pd6lzeNtX1QHboMcQK5PXcN9EumZyRYBF0TRbnEFLF8Me9zMcfR3QP7GCiggjd6PA2IAaPC9uCSQ==", - "dev": true, - "requires": { - "@apollo/cache-control-types": "^1.0.2", - "@apollo/federation-internals": "2.11.2" + "packages/server/node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" } }, - "@apollo/usage-reporting-protobuf": { - "version": "file:packages/usage-reporting-protobuf", - "requires": { + "packages/usage-reporting-protobuf": { + "name": "@apollo/usage-reporting-protobuf", + "version": "4.1.1", + "license": "MIT", + "dependencies": { "@apollo/protobufjs": "1.2.7" } - }, - "@apollo/utils.createhash": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@apollo/utils.createhash/-/utils.createhash-2.0.2.tgz", - "integrity": "sha512-UkS3xqnVFLZ3JFpEmU/2cM2iKJotQXMoSTgxXsfQgXLC5gR1WaepoXagmYnPSA7Q/2cmnyTYK5OgAgoC4RULPg==", - "requires": { - "@apollo/utils.isnodelike": "^2.0.1", - "sha.js": "^2.4.11" - } - }, - "@apollo/utils.dropunuseddefinitions": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@apollo/utils.dropunuseddefinitions/-/utils.dropunuseddefinitions-2.0.1.tgz", - "integrity": "sha512-EsPIBqsSt2BwDsv8Wu76LK5R1KtsVkNoO4b0M5aK0hx+dGg9xJXuqlr7Fo34Dl+y83jmzn+UvEW+t1/GP2melA==", - "requires": {} - }, - "@apollo/utils.fetcher": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.fetcher/-/utils.fetcher-2.0.0.tgz", - "integrity": "sha512-RC0twEwwBKbhk/y4B2X4YEciRG1xoKMgiPy5xQqNMd3pG78sR+ybctG/m7c/8+NaaQOS22UPUCBd6yS6WihBIg==" - }, - "@apollo/utils.isnodelike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@apollo/utils.isnodelike/-/utils.isnodelike-2.0.1.tgz", - "integrity": "sha512-w41XyepR+jBEuVpoRM715N2ZD0xMD413UiJx8w5xnAZD2ZkSJnMJBoIzauK83kJpSgNuR6ywbV29jG9NmxjK0Q==" - }, - "@apollo/utils.keyvaluecache": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.keyvaluecache/-/utils.keyvaluecache-2.1.0.tgz", - "integrity": "sha512-WBNI4H1dGX2fHMk5j4cJo7mlXWn1X6DYCxQ50IvmI7Xv7Y4QKiA5EwbLOCITh9OIZQrVX7L0ASBSgTt6jYx/cg==", - "requires": { - "@apollo/utils.logger": "^2.0.0", - "lru-cache": "^7.14.1" - }, - "dependencies": { - "lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" - } - } - }, - "@apollo/utils.logger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.logger/-/utils.logger-2.0.0.tgz", - "integrity": "sha512-o8qYwgV2sYg+PcGKIfwAZaZsQOTEfV8q3mH7Pw8GB/I/Uh2L9iaHdpiKuR++j7oe1K87lFm0z/JAezMOR9CGhg==" - }, - "@apollo/utils.printwithreducedwhitespace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@apollo/utils.printwithreducedwhitespace/-/utils.printwithreducedwhitespace-2.0.1.tgz", - "integrity": "sha512-9M4LUXV/fQBh8vZWlLvb/HyyhjJ77/I5ZKu+NBWV/BmYGyRmoEP9EVAy7LCVoY3t8BDcyCAGfxJaLFCSuQkPUg==", - "requires": {} - }, - "@apollo/utils.removealiases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@apollo/utils.removealiases/-/utils.removealiases-2.0.1.tgz", - "integrity": "sha512-0joRc2HBO4u594Op1nev+mUF6yRnxoUH64xw8x3bX7n8QBDYdeYgY4tF0vJReTy+zdn2xv6fMsquATSgC722FA==", - "requires": {} - }, - "@apollo/utils.sortast": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@apollo/utils.sortast/-/utils.sortast-2.0.1.tgz", - "integrity": "sha512-eciIavsWpJ09za1pn37wpsCGrQNXUhM0TktnZmHwO+Zy9O4fu/WdB4+5BvVhFiZYOXvfjzJUcc+hsIV8RUOtMw==", - "requires": { - "lodash.sortby": "^4.7.0" - } - }, - "@apollo/utils.stripsensitiveliterals": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@apollo/utils.stripsensitiveliterals/-/utils.stripsensitiveliterals-2.0.1.tgz", - "integrity": "sha512-QJs7HtzXS/JIPMKWimFnUMK7VjkGQTzqD9bKD1h3iuPAqLsxd0mUNVbkYOPTsDhUKgcvUOfOqOJWYohAKMvcSA==", - "requires": {} - }, - "@apollo/utils.usagereporting": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.usagereporting/-/utils.usagereporting-2.1.0.tgz", - "integrity": "sha512-LPSlBrn+S17oBy5eWkrRSGb98sWmnEzo3DPTZgp8IQc8sJe0prDgDuppGq4NeQlpoqEHz0hQeYHAOA0Z3aQsxQ==", - "requires": { - "@apollo/usage-reporting-protobuf": "^4.1.0", - "@apollo/utils.dropunuseddefinitions": "^2.0.1", - "@apollo/utils.printwithreducedwhitespace": "^2.0.1", - "@apollo/utils.removealiases": "2.0.1", - "@apollo/utils.sortast": "^2.0.1", - "@apollo/utils.stripsensitiveliterals": "^2.0.1" - } - }, - "@apollo/utils.withrequired": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.withrequired/-/utils.withrequired-2.0.0.tgz", - "integrity": "sha512-+djpTu6AEE/A1etryZs9tmXRyDY6XXGe3G29MS/LB09uHq3pcl3n4Q5lvDTL5JWKuJixrulg5djePLDAooG8dQ==" - }, - "@ardatan/relay-compiler": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@ardatan/relay-compiler/-/relay-compiler-12.0.0.tgz", - "integrity": "sha512-9anThAaj1dQr6IGmzBMcfzOQKTa5artjuPmw8NYK/fiGEMjADbSguBY2FMDykt+QhilR3wc9VA/3yVju7JHg7Q==", - "dev": true, - "requires": { - "@babel/core": "^7.14.0", - "@babel/generator": "^7.14.0", - "@babel/parser": "^7.14.0", - "@babel/runtime": "^7.0.0", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.0.0", - "babel-preset-fbjs": "^3.4.0", - "chalk": "^4.0.0", - "fb-watchman": "^2.0.0", - "fbjs": "^3.0.0", - "glob": "^7.1.1", - "immutable": "~3.7.6", - "invariant": "^2.2.4", - "nullthrows": "^1.1.1", - "relay-runtime": "12.0.0", - "signedsource": "^1.0.0", - "yargs": "^15.3.1" - }, - "dependencies": { - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "@ardatan/sync-fetch": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@ardatan/sync-fetch/-/sync-fetch-0.0.1.tgz", - "integrity": "sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA==", - "dev": true, - "requires": { - "node-fetch": "^2.6.1" - } - }, - "@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "requires": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/compat-data": { - "version": "7.20.10", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz", - "integrity": "sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==" - }, - "@babel/core": { - "version": "7.17.9", - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.9", - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-module-transforms": "^7.17.7", - "@babel/helpers": "^7.17.9", - "@babel/parser": "^7.17.9", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.9", - "@babel/types": "^7.17.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0" - } - } - }, - "@babel/generator": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", - "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", - "requires": { - "@babel/types": "^7.23.0", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", - "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", - "requires": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "dependencies": { - "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==", - "requires": { - "yallist": "^3.0.2" - } - }, - "semver": { - "version": "6.3.0" - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.4.tgz", - "integrity": "sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-member-expression-to-functions": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/helper-split-export-declaration": "^7.18.6" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==" - }, - "@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "requires": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", - "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", - "dev": true, - "requires": { - "@babel/types": "^7.21.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", - "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.2", - "@babel/types": "^7.21.2" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" - }, - "@babel/helper-replace-supers": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", - "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7" - } - }, - "@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "requires": { - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", - "dev": true, - "requires": { - "@babel/types": "^7.20.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==" - }, - "@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" - }, - "@babel/helpers": { - "version": "7.17.9", - "requires": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.9", - "@babel/types": "^7.17.0" - } - }, - "@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", - "requires": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", - "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==" - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-flow": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.21.4.tgz", - "integrity": "sha512-l9xd3N+XG4fZRxEP3vXdK6RW7vN1Uf5dxzRC/09wV86wqZ/YYQooBIGNsiRdfNR3/q2/5pPzV4B54J/9ctX5jw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", - "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", - "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", - "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", - "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", - "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/template": "^7.20.7" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz", - "integrity": "sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-flow-strip-types": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.21.0.tgz", - "integrity": "sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-flow": "^7.18.6" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz", - "integrity": "sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz", - "integrity": "sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.21.2", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-simple-access": "^7.20.2" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz", - "integrity": "sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz", - "integrity": "sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.21.0" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", - "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/runtime": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.6.tgz", - "integrity": "sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.11" - } - }, - "@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "requires": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - } - }, - "@babel/traverse": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", - "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", - "requires": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.0", - "@babel/types": "^7.23.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", - "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" - }, - "@changesets/apply-release-plan": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.0.12.tgz", - "integrity": "sha512-EaET7As5CeuhTzvXTQCRZeBUcisoYPDDcXvgTE/2jmmypKp0RC7LxKj/yzqeh/1qFTZI7oDGFcL1PHRuQuketQ==", - "dev": true, - "requires": { - "@changesets/config": "^3.1.1", - "@changesets/get-version-range-type": "^0.4.0", - "@changesets/git": "^3.0.4", - "@changesets/should-skip-package": "^0.1.2", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "detect-indent": "^6.0.0", - "fs-extra": "^7.0.1", - "lodash.startcase": "^4.4.0", - "outdent": "^0.5.0", - "prettier": "^2.7.1", - "resolve-from": "^5.0.0", - "semver": "^7.5.3" - }, - "dependencies": { - "prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true - } - } - }, - "@changesets/assemble-release-plan": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.9.tgz", - "integrity": "sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==", - "dev": true, - "requires": { - "@changesets/errors": "^0.2.0", - "@changesets/get-dependents-graph": "^2.1.3", - "@changesets/should-skip-package": "^0.1.2", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "semver": "^7.5.3" - } - }, - "@changesets/changelog-git": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.2.1.tgz", - "integrity": "sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==", - "dev": true, - "requires": { - "@changesets/types": "^6.1.0" - } - }, - "@changesets/changelog-github": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@changesets/changelog-github/-/changelog-github-0.5.1.tgz", - "integrity": "sha512-BVuHtF+hrhUScSoHnJwTELB4/INQxVFc+P/Qdt20BLiBFIHFJDDUaGsZw+8fQeJTRP5hJZrzpt3oZWh0G19rAQ==", - "dev": true, - "requires": { - "@changesets/get-github-info": "^0.6.0", - "@changesets/types": "^6.1.0", - "dotenv": "^8.1.0" - }, - "dependencies": { - "dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", - "dev": true - } - } - }, - "@changesets/cli": { - "version": "2.29.5", - "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.29.5.tgz", - "integrity": "sha512-0j0cPq3fgxt2dPdFsg4XvO+6L66RC0pZybT9F4dG5TBrLA3jA/1pNkdTXH9IBBVHkgsKrNKenI3n1mPyPlIydg==", - "dev": true, - "requires": { - "@changesets/apply-release-plan": "^7.0.12", - "@changesets/assemble-release-plan": "^6.0.9", - "@changesets/changelog-git": "^0.2.1", - "@changesets/config": "^3.1.1", - "@changesets/errors": "^0.2.0", - "@changesets/get-dependents-graph": "^2.1.3", - "@changesets/get-release-plan": "^4.0.13", - "@changesets/git": "^3.0.4", - "@changesets/logger": "^0.1.1", - "@changesets/pre": "^2.0.2", - "@changesets/read": "^0.6.5", - "@changesets/should-skip-package": "^0.1.2", - "@changesets/types": "^6.1.0", - "@changesets/write": "^0.4.0", - "@manypkg/get-packages": "^1.1.3", - "ansi-colors": "^4.1.3", - "ci-info": "^3.7.0", - "enquirer": "^2.4.1", - "external-editor": "^3.1.0", - "fs-extra": "^7.0.1", - "mri": "^1.2.0", - "p-limit": "^2.2.0", - "package-manager-detector": "^0.2.0", - "picocolors": "^1.1.0", - "resolve-from": "^5.0.0", - "semver": "^7.5.3", - "spawndamnit": "^3.0.1", - "term-size": "^2.1.0" - }, - "dependencies": { - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - } - } - }, - "@changesets/config": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@changesets/config/-/config-3.1.1.tgz", - "integrity": "sha512-bd+3Ap2TKXxljCggI0mKPfzCQKeV/TU4yO2h2C6vAihIo8tzseAn2e7klSuiyYYXvgu53zMN1OeYMIQkaQoWnA==", - "dev": true, - "requires": { - "@changesets/errors": "^0.2.0", - "@changesets/get-dependents-graph": "^2.1.3", - "@changesets/logger": "^0.1.1", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "fs-extra": "^7.0.1", - "micromatch": "^4.0.8" - } - }, - "@changesets/errors": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@changesets/errors/-/errors-0.2.0.tgz", - "integrity": "sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==", - "dev": true, - "requires": { - "extendable-error": "^0.1.5" - } - }, - "@changesets/get-dependents-graph": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-2.1.3.tgz", - "integrity": "sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==", - "dev": true, - "requires": { - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "picocolors": "^1.1.0", - "semver": "^7.5.3" - } - }, - "@changesets/get-github-info": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@changesets/get-github-info/-/get-github-info-0.6.0.tgz", - "integrity": "sha512-v/TSnFVXI8vzX9/w3DU2Ol+UlTZcu3m0kXTjTT4KlAdwSvwutcByYwyYn9hwerPWfPkT2JfpoX0KgvCEi8Q/SA==", - "dev": true, - "requires": { - "dataloader": "^1.4.0", - "node-fetch": "^2.5.0" - }, - "dependencies": { - "dataloader": { - "version": "1.4.0", - "dev": true - } - } - }, - "@changesets/get-release-plan": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-4.0.13.tgz", - "integrity": "sha512-DWG1pus72FcNeXkM12tx+xtExyH/c9I1z+2aXlObH3i9YA7+WZEVaiHzHl03thpvAgWTRaH64MpfHxozfF7Dvg==", - "dev": true, - "requires": { - "@changesets/assemble-release-plan": "^6.0.9", - "@changesets/config": "^3.1.1", - "@changesets/pre": "^2.0.2", - "@changesets/read": "^0.6.5", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3" - } - }, - "@changesets/get-version-range-type": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz", - "integrity": "sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==", - "dev": true - }, - "@changesets/git": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@changesets/git/-/git-3.0.4.tgz", - "integrity": "sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==", - "dev": true, - "requires": { - "@changesets/errors": "^0.2.0", - "@manypkg/get-packages": "^1.1.3", - "is-subdir": "^1.1.1", - "micromatch": "^4.0.8", - "spawndamnit": "^3.0.1" - } - }, - "@changesets/logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@changesets/logger/-/logger-0.1.1.tgz", - "integrity": "sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==", - "dev": true, - "requires": { - "picocolors": "^1.1.0" - } - }, - "@changesets/parse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@changesets/parse/-/parse-0.4.1.tgz", - "integrity": "sha512-iwksMs5Bf/wUItfcg+OXrEpravm5rEd9Bf4oyIPL4kVTmJQ7PNDSd6MDYkpSJR1pn7tz/k8Zf2DhTCqX08Ou+Q==", - "dev": true, - "requires": { - "@changesets/types": "^6.1.0", - "js-yaml": "^3.13.1" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } - } - }, - "@changesets/pre": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@changesets/pre/-/pre-2.0.2.tgz", - "integrity": "sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==", - "dev": true, - "requires": { - "@changesets/errors": "^0.2.0", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "fs-extra": "^7.0.1" - } - }, - "@changesets/read": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.6.5.tgz", - "integrity": "sha512-UPzNGhsSjHD3Veb0xO/MwvasGe8eMyNrR/sT9gR8Q3DhOQZirgKhhXv/8hVsI0QpPjR004Z9iFxoJU6in3uGMg==", - "dev": true, - "requires": { - "@changesets/git": "^3.0.4", - "@changesets/logger": "^0.1.1", - "@changesets/parse": "^0.4.1", - "@changesets/types": "^6.1.0", - "fs-extra": "^7.0.1", - "p-filter": "^2.1.0", - "picocolors": "^1.1.0" - } - }, - "@changesets/should-skip-package": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@changesets/should-skip-package/-/should-skip-package-0.1.2.tgz", - "integrity": "sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==", - "dev": true, - "requires": { - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3" - } - }, - "@changesets/types": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@changesets/types/-/types-6.1.0.tgz", - "integrity": "sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==", - "dev": true - }, - "@changesets/write": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@changesets/write/-/write-0.4.0.tgz", - "integrity": "sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==", - "dev": true, - "requires": { - "@changesets/types": "^6.1.0", - "fs-extra": "^7.0.1", - "human-id": "^4.1.1", - "prettier": "^2.7.1" - }, - "dependencies": { - "prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true - } - } - }, - "@codegenie/serverless-express": { - "version": "4.12.5", - "resolved": "https://registry.npmjs.org/@codegenie/serverless-express/-/serverless-express-4.12.5.tgz", - "integrity": "sha512-CRXqPNzI1gJHI+xfoG1FqbpVo9YYAPc7OCdQu0lDMejPF3OrYLPsk6y1lQ3NtEipK5d0DZTpbiP9x861J+UquA==", - "dev": true - }, - "@cspell/cspell-bundled-dicts": { - "version": "6.31.3", - "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-6.31.3.tgz", - "integrity": "sha512-KXy3qKWYzXOGYwqOGMCXHem3fV39iEmoKLiNhoWWry/SFdvAafmeY+LIDcQTXAcOQLkMDCwP2/rY/NadcWnrjg==", - "dev": true, - "requires": { - "@cspell/dict-ada": "^4.0.1", - "@cspell/dict-aws": "^3.0.0", - "@cspell/dict-bash": "^4.1.1", - "@cspell/dict-companies": "^3.0.9", - "@cspell/dict-cpp": "^5.0.2", - "@cspell/dict-cryptocurrencies": "^3.0.1", - "@cspell/dict-csharp": "^4.0.2", - "@cspell/dict-css": "^4.0.5", - "@cspell/dict-dart": "^2.0.2", - "@cspell/dict-django": "^4.0.2", - "@cspell/dict-docker": "^1.1.6", - "@cspell/dict-dotnet": "^5.0.0", - "@cspell/dict-elixir": "^4.0.2", - "@cspell/dict-en_us": "^4.3.2", - "@cspell/dict-en-common-misspellings": "^1.0.2", - "@cspell/dict-en-gb": "1.1.33", - "@cspell/dict-filetypes": "^3.0.0", - "@cspell/dict-fonts": "^3.0.2", - "@cspell/dict-fullstack": "^3.1.5", - "@cspell/dict-gaming-terms": "^1.0.4", - "@cspell/dict-git": "^2.0.0", - "@cspell/dict-golang": "^6.0.1", - "@cspell/dict-haskell": "^4.0.1", - "@cspell/dict-html": "^4.0.3", - "@cspell/dict-html-symbol-entities": "^4.0.0", - "@cspell/dict-java": "^5.0.5", - "@cspell/dict-k8s": "^1.0.1", - "@cspell/dict-latex": "^4.0.0", - "@cspell/dict-lorem-ipsum": "^3.0.0", - "@cspell/dict-lua": "^4.0.1", - "@cspell/dict-node": "^4.0.2", - "@cspell/dict-npm": "^5.0.5", - "@cspell/dict-php": "^4.0.1", - "@cspell/dict-powershell": "^5.0.1", - "@cspell/dict-public-licenses": "^2.0.2", - "@cspell/dict-python": "^4.0.2", - "@cspell/dict-r": "^2.0.1", - "@cspell/dict-ruby": "^5.0.0", - "@cspell/dict-rust": "^4.0.1", - "@cspell/dict-scala": "^5.0.0", - "@cspell/dict-software-terms": "^3.1.6", - "@cspell/dict-sql": "^2.1.0", - "@cspell/dict-svelte": "^1.0.2", - "@cspell/dict-swift": "^2.0.1", - "@cspell/dict-typescript": "^3.1.1", - "@cspell/dict-vue": "^3.0.0" - } - }, - "@cspell/cspell-json-reporter": { - "version": "6.31.3", - "resolved": "https://registry.npmjs.org/@cspell/cspell-json-reporter/-/cspell-json-reporter-6.31.3.tgz", - "integrity": "sha512-ZJwj2vT4lxncYxduXcxy0dCvjjMvXIfphbLSCN5CXvufrtupB4KlcjZUnOofCi4pfpp8qocCSn1lf2DU9xgUXA==", - "dev": true, - "requires": { - "@cspell/cspell-types": "6.31.3" - } - }, - "@cspell/cspell-pipe": { - "version": "6.31.3", - "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-6.31.3.tgz", - "integrity": "sha512-Lv/y4Ya/TJyU1pf66yl1te7LneFZd3lZg1bN5oe1cPrKSmfWdiX48v7plTRecWd/OWyLGd0yN807v79A+/0W7A==", - "dev": true - }, - "@cspell/cspell-service-bus": { - "version": "6.31.3", - "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-6.31.3.tgz", - "integrity": "sha512-x5j8j3n39KN8EXOAlv75CpircdpF5WEMCC5pcO916o6GBmJBy8SrdzdsBGJhVcYGGilqy6pf8R9RCZ3yAmG8gQ==", - "dev": true - }, - "@cspell/cspell-types": { - "version": "6.31.3", - "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-6.31.3.tgz", - "integrity": "sha512-wZ+t+lUsQJB65M31btZM4fH3K1CkRgE8pSeTiCwxYcnCL19pi4TMcEEMKdO8yFZMdocW4B7VRwzxNoQMw2ewBg==", - "dev": true - }, - "@cspell/dict-ada": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-ada/-/dict-ada-4.0.2.tgz", - "integrity": "sha512-0kENOWQeHjUlfyId/aCM/mKXtkEgV0Zu2RhUXCBr4hHo9F9vph+Uu8Ww2b0i5a4ZixoIkudGA+eJvyxrG1jUpA==", - "dev": true - }, - "@cspell/dict-aws": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-aws/-/dict-aws-3.0.0.tgz", - "integrity": "sha512-O1W6nd5y3Z00AMXQMzfiYrIJ1sTd9fB1oLr+xf/UD7b3xeHeMeYE2OtcWbt9uyeHim4tk+vkSTcmYEBKJgS5bQ==", - "dev": true - }, - "@cspell/dict-bash": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-bash/-/dict-bash-4.1.1.tgz", - "integrity": "sha512-8czAa/Mh96wu2xr0RXQEGMTBUGkTvYn/Pb0o+gqOO1YW+poXGQc3gx0YPqILDryP/KCERrNvkWUJz3iGbvwC2A==", - "dev": true - }, - "@cspell/dict-companies": { - "version": "3.0.19", - "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.0.19.tgz", - "integrity": "sha512-hO7rS4DhFA333qyvf89wIVoclCtXe/2sftY6aS0oMIH1bMZLjLx2B2sQJj6dCiu6gG/By1S9YZ0fXabiPk2Tkg==", - "dev": true - }, - "@cspell/dict-cpp": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-5.0.4.tgz", - "integrity": "sha512-Vmz/CCb2d91ES5juaO8+CFWeTa2AFsbpR8bkCPJq+P8cRP16+37tY0zNXEBSK/1ur4MakaRf76jeQBijpZxw0Q==", - "dev": true - }, - "@cspell/dict-cryptocurrencies": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-cryptocurrencies/-/dict-cryptocurrencies-3.0.1.tgz", - "integrity": "sha512-Tdlr0Ahpp5yxtwM0ukC13V6+uYCI0p9fCRGMGZt36rWv8JQZHIuHfehNl7FB/Qc09NCF7p5ep0GXbL+sVTd/+w==", - "dev": true - }, - "@cspell/dict-csharp": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-csharp/-/dict-csharp-4.0.2.tgz", - "integrity": "sha512-1JMofhLK+4p4KairF75D3A924m5ERMgd1GvzhwK2geuYgd2ZKuGW72gvXpIV7aGf52E3Uu1kDXxxGAiZ5uVG7g==", - "dev": true - }, - "@cspell/dict-css": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.6.tgz", - "integrity": "sha512-2Lo8W2ezHmGgY8cWFr4RUwnjbndna5mokpCK/DuxGILQnuajR0J31ANQOXj/8iZM2phFB93ZzMNk/0c04TDfSQ==", - "dev": true - }, - "@cspell/dict-dart": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-dart/-/dict-dart-2.0.3.tgz", - "integrity": "sha512-cLkwo1KT5CJY5N5RJVHks2genFkNCl/WLfj+0fFjqNR+tk3tBI1LY7ldr9piCtSFSm4x9pO1x6IV3kRUY1lLiw==", - "dev": true - }, - "@cspell/dict-data-science": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@cspell/dict-data-science/-/dict-data-science-1.0.10.tgz", - "integrity": "sha512-7ZsRCnW0f4Bdo6Cqq8V4gHr8K58h+MP8majcDeMNhpMFUPiiSnvKsDuG9V5jciI/0t+lptPrZwGGIVEDF4Kqtg==", - "dev": true - }, - "@cspell/dict-django": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-django/-/dict-django-4.1.0.tgz", - "integrity": "sha512-bKJ4gPyrf+1c78Z0Oc4trEB9MuhcB+Yg+uTTWsvhY6O2ncFYbB/LbEZfqhfmmuK/XJJixXfI1laF2zicyf+l0w==", - "dev": true - }, - "@cspell/dict-docker": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@cspell/dict-docker/-/dict-docker-1.1.7.tgz", - "integrity": "sha512-XlXHAr822euV36GGsl2J1CkBIVg3fZ6879ZOg5dxTIssuhUOCiV2BuzKZmt6aIFmcdPmR14+9i9Xq+3zuxeX0A==", - "dev": true - }, - "@cspell/dict-dotnet": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-dotnet/-/dict-dotnet-5.0.0.tgz", - "integrity": "sha512-EOwGd533v47aP5QYV8GlSSKkmM9Eq8P3G/eBzSpH3Nl2+IneDOYOBLEUraHuiCtnOkNsz0xtZHArYhAB2bHWAw==", - "dev": true - }, - "@cspell/dict-elixir": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-elixir/-/dict-elixir-4.0.3.tgz", - "integrity": "sha512-g+uKLWvOp9IEZvrIvBPTr/oaO6619uH/wyqypqvwpmnmpjcfi8+/hqZH8YNKt15oviK8k4CkINIqNhyndG9d9Q==", - "dev": true - }, - "@cspell/dict-en_us": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.3.6.tgz", - "integrity": "sha512-odhgsjNZI9BtEOJdvqfAuv/3yz5aB1ngfBNaph7WSnYVt//9e3fhrElZ6/pIIkoyuGgeQPwz1fXt+tMgcnLSEQ==", - "dev": true - }, - "@cspell/dict-en-common-misspellings": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-1.0.2.tgz", - "integrity": "sha512-jg7ZQZpZH7+aAxNBlcAG4tGhYF6Ksy+QS5Df73Oo+XyckBjC9QS+PrRwLTeYoFIgXy5j3ICParK5r3MSSoL4gw==", - "dev": true - }, - "@cspell/dict-en-gb": { - "version": "1.1.33", - "resolved": "https://registry.npmjs.org/@cspell/dict-en-gb/-/dict-en-gb-1.1.33.tgz", - "integrity": "sha512-tKSSUf9BJEV+GJQAYGw5e+ouhEe2ZXE620S7BLKe3ZmpnjlNG9JqlnaBhkIMxKnNFkLY2BP/EARzw31AZnOv4g==", - "dev": true - }, - "@cspell/dict-filetypes": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-filetypes/-/dict-filetypes-3.0.1.tgz", - "integrity": "sha512-8z8mY1IbrTyTRumx2vvD9yzRhNMk9SajM/GtI5hdMM2pPpNSp25bnuauzjRf300eqlqPY2MNb5MmhBFO014DJw==", - "dev": true - }, - "@cspell/dict-fonts": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-fonts/-/dict-fonts-3.0.2.tgz", - "integrity": "sha512-Z5QdbgEI7DV+KPXrAeDA6dDm/vTzyaW53SGlKqz6PI5VhkOjgkBXv3YtZjnxMZ4dY2ZIqq+RUK6qa9Pi8rQdGQ==", - "dev": true - }, - "@cspell/dict-fullstack": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-fullstack/-/dict-fullstack-3.1.5.tgz", - "integrity": "sha512-6ppvo1dkXUZ3fbYn/wwzERxCa76RtDDl5Afzv2lijLoijGGUw5yYdLBKJnx8PJBGNLh829X352ftE7BElG4leA==", - "dev": true - }, - "@cspell/dict-gaming-terms": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cspell/dict-gaming-terms/-/dict-gaming-terms-1.0.4.tgz", - "integrity": "sha512-hbDduNXlk4AOY0wFxcDMWBPpm34rpqJBeqaySeoUH70eKxpxm+dvjpoRLJgyu0TmymEICCQSl6lAHTHSDiWKZg==", - "dev": true - }, - "@cspell/dict-git": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-git/-/dict-git-2.0.0.tgz", - "integrity": "sha512-n1AxyX5Kgxij/sZFkxFJlzn3K9y/sCcgVPg/vz4WNJ4K9YeTsUmyGLA2OQI7d10GJeiuAo2AP1iZf2A8j9aj2w==", - "dev": true - }, - "@cspell/dict-golang": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-6.0.2.tgz", - "integrity": "sha512-5pyZn4AAiYukAW+gVMIMVmUSkIERFrDX2vtPDjg8PLQUhAHWiVeQSDjuOhq9/C5GCCEZU/zWSONkGiwLBBvV9A==", - "dev": true - }, - "@cspell/dict-haskell": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-haskell/-/dict-haskell-4.0.1.tgz", - "integrity": "sha512-uRrl65mGrOmwT7NxspB4xKXFUenNC7IikmpRZW8Uzqbqcu7ZRCUfstuVH7T1rmjRgRkjcIjE4PC11luDou4wEQ==", - "dev": true - }, - "@cspell/dict-html": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.3.tgz", - "integrity": "sha512-Gae8i8rrArT0UyG1I6DHDK62b7Be6QEcBSIeWOm4VIIW1CASkN9B0qFgSVnkmfvnu1Y3H7SSaaEynKjdj3cs8w==", - "dev": true - }, - "@cspell/dict-html-symbol-entities": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.0.tgz", - "integrity": "sha512-HGRu+48ErJjoweR5IbcixxETRewrBb0uxQBd6xFGcxbEYCX8CnQFTAmKI5xNaIt2PKaZiJH3ijodGSqbKdsxhw==", - "dev": true - }, - "@cspell/dict-java": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-java/-/dict-java-5.0.5.tgz", - "integrity": "sha512-X19AoJgWIBwJBSWGFqSgHaBR/FEykBHTMjL6EqOnhIGEyE9nvuo32tsSHjXNJ230fQxQptEvRZoaldNLtKxsRg==", - "dev": true - }, - "@cspell/dict-k8s": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-k8s/-/dict-k8s-1.0.1.tgz", - "integrity": "sha512-gc5y4Nm3hVdMZNBZfU2M1AsAmObZsRWjCUk01NFPfGhFBXyVne41T7E62rpnzu5330FV/6b/TnFcPgRmak9lLw==", - "dev": true - }, - "@cspell/dict-latex": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-latex/-/dict-latex-4.0.0.tgz", - "integrity": "sha512-LPY4y6D5oI7D3d+5JMJHK/wxYTQa2lJMSNxps2JtuF8hbAnBQb3igoWEjEbIbRRH1XBM0X8dQqemnjQNCiAtxQ==", - "dev": true - }, - "@cspell/dict-lorem-ipsum": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-lorem-ipsum/-/dict-lorem-ipsum-3.0.0.tgz", - "integrity": "sha512-msEV24qEpzWZs2kcEicqYlhyBpR0amfDkJOs+iffC07si9ftqtQ+yP3lf1VFLpgqw3SQh1M1vtU7RD4sPrNlcQ==", - "dev": true - }, - "@cspell/dict-lua": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-lua/-/dict-lua-4.0.1.tgz", - "integrity": "sha512-j0MFmeCouSoC6EdZTbvGe1sJ9V+ruwKSeF+zRkNNNload7R72Co5kX1haW2xLHGdlq0kqSy1ODRZKdVl0e+7hg==", - "dev": true - }, - "@cspell/dict-node": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-node/-/dict-node-4.0.2.tgz", - "integrity": "sha512-FEQJ4TnMcXEFslqBQkXa5HposMoCGsiBv2ux4IZuIXgadXeHKHUHk60iarWpjhzNzQLyN2GD7NoRMd12bK3Llw==", - "dev": true - }, - "@cspell/dict-npm": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.0.8.tgz", - "integrity": "sha512-KuqH8tEsFD6DPKqKwIfWr9E+admE3yghaC0AKXG8jPaf77N0lkctKaS3dm0oxWUXkYKA/eXj6LCtz3VcTyxFPg==", - "dev": true - }, - "@cspell/dict-php": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-php/-/dict-php-4.0.1.tgz", - "integrity": "sha512-XaQ/JkSyq2c07MfRG54DjLi2CV+HHwS99DDCAao9Fq2JfkWroTQsUeek7wYZXJATrJVOULoV3HKih12x905AtQ==", - "dev": true - }, - "@cspell/dict-powershell": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-powershell/-/dict-powershell-5.0.2.tgz", - "integrity": "sha512-IHfWLme3FXE7vnOmMncSBxOsMTdNWd1Vcyhag03WS8oANSgX8IZ+4lMI00mF0ptlgchf16/OU8WsV4pZfikEFw==", - "dev": true - }, - "@cspell/dict-public-licenses": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-public-licenses/-/dict-public-licenses-2.0.3.tgz", - "integrity": "sha512-JSLEdpEYufQ1H+93UHi+axlqQm1fhgK6kpdLHp6uPHu//CsvETcqNVawjB+qOdI/g38JTMw5fBqSd0aGNxa6Dw==", - "dev": true - }, - "@cspell/dict-python": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.1.5.tgz", - "integrity": "sha512-wWUWyHdyJtx5iG6Fz9rBQ17BtdpEsB17vmutao+gixQD28Jzb6XoLgDQ6606M0RnFjBSFhs5iT4CJBzlD2Kq6g==", - "dev": true, - "requires": { - "@cspell/dict-data-science": "^1.0.0" - } - }, - "@cspell/dict-r": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-r/-/dict-r-2.0.1.tgz", - "integrity": "sha512-KCmKaeYMLm2Ip79mlYPc8p+B2uzwBp4KMkzeLd5E6jUlCL93Y5Nvq68wV5fRLDRTf7N1LvofkVFWfDcednFOgA==", - "dev": true - }, - "@cspell/dict-ruby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-5.0.0.tgz", - "integrity": "sha512-ssb96QxLZ76yPqFrikWxItnCbUKhYXJ2owkoIYzUGNFl2CHSoHCb5a6Zetum9mQ/oUA3gNeUhd28ZUlXs0la2A==", - "dev": true - }, - "@cspell/dict-rust": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-4.0.1.tgz", - "integrity": "sha512-xJSSzHDK2z6lSVaOmMxl3PTOtfoffaxMo7fTcbZUF+SCJzfKbO6vnN9TCGX2sx1RHFDz66Js6goz6SAZQdOwaw==", - "dev": true - }, - "@cspell/dict-scala": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-scala/-/dict-scala-5.0.0.tgz", - "integrity": "sha512-ph0twaRoV+ylui022clEO1dZ35QbeEQaKTaV2sPOsdwIokABPIiK09oWwGK9qg7jRGQwVaRPEq0Vp+IG1GpqSQ==", - "dev": true - }, - "@cspell/dict-software-terms": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-3.2.1.tgz", - "integrity": "sha512-+QXmyoONVc/3aNgKW+0F0u3XUCRTfNRkWKLZQA78i+9fOfde8ZT4JmROmZgRveH/MxD4n6pNFceIRcYI6C8WuQ==", - "dev": true - }, - "@cspell/dict-sql": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-sql/-/dict-sql-2.1.1.tgz", - "integrity": "sha512-v1mswi9NF40+UDUMuI148YQPEQvWjac72P6ZsjlRdLjEiQEEMEsTQ+zlkIdnzC9QCNyJaqD5Liq9Mn78/8Zxtw==", - "dev": true - }, - "@cspell/dict-svelte": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-svelte/-/dict-svelte-1.0.2.tgz", - "integrity": "sha512-rPJmnn/GsDs0btNvrRBciOhngKV98yZ9SHmg8qI6HLS8hZKvcXc0LMsf9LLuMK1TmS2+WQFAan6qeqg6bBxL2Q==", - "dev": true - }, - "@cspell/dict-swift": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-swift/-/dict-swift-2.0.1.tgz", - "integrity": "sha512-gxrCMUOndOk7xZFmXNtkCEeroZRnS2VbeaIPiymGRHj5H+qfTAzAKxtv7jJbVA3YYvEzWcVE2oKDP4wcbhIERw==", - "dev": true - }, - "@cspell/dict-typescript": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.1.1.tgz", - "integrity": "sha512-N9vNJZoOXmmrFPR4ir3rGvnqqwmQGgOYoL1+y6D4oIhyr7FhaYiyF/d7QT61RmjZQcATMa6PSL+ZisCeRLx9+A==", - "dev": true - }, - "@cspell/dict-vue": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-vue/-/dict-vue-3.0.0.tgz", - "integrity": "sha512-niiEMPWPV9IeRBRzZ0TBZmNnkK3olkOPYxC1Ny2AX4TGlYRajcW0WUtoSHmvvjZNfWLSg2L6ruiBeuPSbjnG6A==", - "dev": true - }, - "@cspell/dynamic-import": { - "version": "6.31.3", - "resolved": "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-6.31.3.tgz", - "integrity": "sha512-A6sT00+6UNGFksQ5SxW2ohNl6vUutai8F4jwJMHTjZL/9vivQpU7y5V4PpsfoPZtx3WZcbrzuTvJ+tLfdbWc4A==", - "dev": true, - "requires": { - "import-meta-resolve": "^2.2.2" - } - }, - "@cspell/strong-weak-map": { - "version": "6.31.3", - "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-6.31.3.tgz", - "integrity": "sha512-znwc9IlgGUPioHGshP/zyM8HsuYg1OY5S7HSiVXARh5H8RqcyBsnyn8abc0PPhqPrfDy9Fh5xHsAEPZ55dl1vQ==", - "dev": true - }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "optional": true, - "peer": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "optional": true, - "peer": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } - } - }, - "@eslint-community/eslint-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz", - "integrity": "sha512-gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^3.3.0" - } - }, - "@eslint-community/regexpp": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", - "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "13.19.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", - "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "minimatch": { - "version": "3.1.2", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", - "dev": true - }, - "@graphql-codegen/cli": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-3.3.1.tgz", - "integrity": "sha512-4Es8Y9zFeT0Zx2qRL7L3qXDbbqvXK6aID+8v8lP6gaYD+uWx3Jd4Hsq5vxwVBR+6flm0BW/C85Qm0cvmT7O6LA==", - "dev": true, - "requires": { - "@babel/generator": "^7.18.13", - "@babel/template": "^7.18.10", - "@babel/types": "^7.18.13", - "@graphql-codegen/core": "^3.1.0", - "@graphql-codegen/plugin-helpers": "^4.2.0", - "@graphql-tools/apollo-engine-loader": "^7.3.6", - "@graphql-tools/code-file-loader": "^7.3.17", - "@graphql-tools/git-loader": "^7.2.13", - "@graphql-tools/github-loader": "^7.3.20", - "@graphql-tools/graphql-file-loader": "^7.5.0", - "@graphql-tools/json-file-loader": "^7.4.1", - "@graphql-tools/load": "^7.8.0", - "@graphql-tools/prisma-loader": "^7.2.49", - "@graphql-tools/url-loader": "^7.13.2", - "@graphql-tools/utils": "^9.0.0", - "@parcel/watcher": "^2.1.0", - "@whatwg-node/fetch": "^0.8.0", - "chalk": "^4.1.0", - "cosmiconfig": "^7.0.0", - "debounce": "^1.2.0", - "detect-indent": "^6.0.0", - "graphql-config": "^4.5.0", - "inquirer": "^8.0.0", - "is-glob": "^4.0.1", - "jiti": "^1.17.1", - "json-to-pretty-yaml": "^1.2.2", - "listr2": "^4.0.5", - "log-symbols": "^4.0.0", - "micromatch": "^4.0.5", - "shell-quote": "^1.7.3", - "string-env-interpolation": "^1.0.1", - "ts-log": "^2.2.3", - "tslib": "^2.4.0", - "yaml": "^1.10.0", - "yargs": "^17.0.0" - }, - "dependencies": { - "@whatwg-node/fetch": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.8.5.tgz", - "integrity": "sha512-pNvoYGPa0hjbVqs+r0blMjaWlrMeb0snwRCTAEdng5Jm00PY9wO4K8m99BmfLn6WED0FKOXTlF53+en/3xybqw==", - "dev": true, - "requires": { - "@peculiar/webcrypto": "^1.4.0", - "@whatwg-node/node-fetch": "^0.3.3", - "busboy": "^1.6.0", - "urlpattern-polyfill": "^7.0.0", - "web-streams-polyfill": "^3.2.1" - } - } - } - }, - "@graphql-codegen/core": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/core/-/core-3.1.0.tgz", - "integrity": "sha512-DH1/yaR7oJE6/B+c6ZF2Tbdh7LixF1K8L+8BoSubjNyQ8pNwR4a70mvc1sv6H7qgp6y1bPQ9tKE+aazRRshysw==", - "dev": true, - "requires": { - "@graphql-codegen/plugin-helpers": "^4.1.0", - "@graphql-tools/schema": "^9.0.0", - "@graphql-tools/utils": "^9.1.1", - "tslib": "~2.5.0" - }, - "dependencies": { - "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - } - } - }, - "@graphql-codegen/plugin-helpers": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-4.2.0.tgz", - "integrity": "sha512-THFTCfg+46PXlXobYJ/OoCX6pzjI+9woQqCjdyKtgoI0tn3Xq2HUUCiidndxUpEYVrXb5pRiRXb7b/ZbMQqD0A==", - "dev": true, - "requires": { - "@graphql-tools/utils": "^9.0.0", - "change-case-all": "1.0.15", - "common-tags": "1.8.2", - "import-from": "4.0.0", - "lodash": "~4.17.0", - "tslib": "~2.5.0" - }, - "dependencies": { - "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - } - } - }, - "@graphql-codegen/schema-ast": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@graphql-codegen/schema-ast/-/schema-ast-3.0.1.tgz", - "integrity": "sha512-rTKTi4XiW4QFZnrEqetpiYEWVsOFNoiR/v3rY9mFSttXFbIwNXPme32EspTiGWmEEdHY8UuTDtZN3vEcs/31zw==", - "dev": true, - "requires": { - "@graphql-codegen/plugin-helpers": "^4.1.0", - "@graphql-tools/utils": "^9.0.0", - "tslib": "~2.5.0" - }, - "dependencies": { - "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - } - } - }, - "@graphql-codegen/typescript": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-3.0.4.tgz", - "integrity": "sha512-x4O47447DZrWNtE/l5CU9QzzW4m1RbmCEdijlA3s2flG/y1Ckqdemob4CWfilSm5/tZ3w1junVDY616RDTSvZw==", - "dev": true, - "requires": { - "@graphql-codegen/plugin-helpers": "^4.2.0", - "@graphql-codegen/schema-ast": "^3.0.1", - "@graphql-codegen/visitor-plugin-common": "3.1.1", - "auto-bind": "~4.0.0", - "tslib": "~2.5.0" - }, - "dependencies": { - "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - } - } - }, - "@graphql-codegen/typescript-operations": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript-operations/-/typescript-operations-3.0.4.tgz", - "integrity": "sha512-6yE2OL2+WJ1vd5MwFEGXpaxsFGzjAGUytPVHDML3Bi3TwP1F3lnQlIko4untwvHW0JhZEGQ7Ck30H9HjcxpdKA==", - "dev": true, - "requires": { - "@graphql-codegen/plugin-helpers": "^4.2.0", - "@graphql-codegen/typescript": "^3.0.4", - "@graphql-codegen/visitor-plugin-common": "3.1.1", - "auto-bind": "~4.0.0", - "tslib": "~2.5.0" - }, - "dependencies": { - "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - } - } - }, - "@graphql-codegen/visitor-plugin-common": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-3.1.1.tgz", - "integrity": "sha512-uAfp+zu/009R3HUAuTK2AamR1bxIltM6rrYYI6EXSmkM3rFtFsLTuJhjUDj98HcUCszJZrADppz8KKLGRUVlNg==", - "dev": true, - "requires": { - "@graphql-codegen/plugin-helpers": "^4.2.0", - "@graphql-tools/optimize": "^1.3.0", - "@graphql-tools/relay-operation-optimizer": "^6.5.0", - "@graphql-tools/utils": "^9.0.0", - "auto-bind": "~4.0.0", - "change-case-all": "1.0.15", - "dependency-graph": "^0.11.0", - "graphql-tag": "^2.11.0", - "parse-filepath": "^1.0.2", - "tslib": "~2.5.0" - }, - "dependencies": { - "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - } - } - }, - "@graphql-tools/apollo-engine-loader": { - "version": "7.3.6", - "resolved": "https://registry.npmjs.org/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-7.3.6.tgz", - "integrity": "sha512-r7YU1X9Ce/sr+tPzSuZqVqlK7knGDpiRfB9HB2uVmbm+kPrlISQ0LuamFoT1g1nkfDZUNZn2p18ag512P1aVVw==", - "dev": true, - "requires": { - "@ardatan/sync-fetch": "0.0.1", - "@graphql-tools/utils": "8.9.0", - "@whatwg-node/fetch": "^0.2.4", - "tslib": "^2.4.0" - }, - "dependencies": { - "@graphql-tools/utils": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.9.0.tgz", - "integrity": "sha512-pjJIWH0XOVnYGXCqej8g/u/tsfV4LvLlj0eATKQu5zwnxd/TiTHq7Cg313qUPTFFHZ3PP5wJ15chYVtLDwaymg==", - "dev": true, - "requires": { - "tslib": "^2.4.0" - } - } - } - }, - "@graphql-tools/batch-execute": { - "version": "8.5.14", - "resolved": "https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-8.5.14.tgz", - "integrity": "sha512-m6yXqqmFAH2V5JuSIC/geiGLBQA1Y6RddOJfUtkc9Z7ttkULRCd1W39TpYS6IlrCwYyTj+klO1/kdWiny38f5g==", - "dev": true, - "requires": { - "@graphql-tools/utils": "9.1.3", - "dataloader": "2.1.0", - "tslib": "^2.4.0", - "value-or-promise": "1.0.11" - }, - "dependencies": { - "@graphql-tools/utils": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.1.3.tgz", - "integrity": "sha512-bbJyKhs6awp1/OmP+WKA1GOyu9UbgZGkhIj5srmiMGLHohEOKMjW784Sk0BZil1w2x95UPu0WHw6/d/HVCACCg==", - "dev": true, - "requires": { - "tslib": "^2.4.0" - } - } - } - }, - "@graphql-tools/code-file-loader": { - "version": "7.3.19", - "resolved": "https://registry.npmjs.org/@graphql-tools/code-file-loader/-/code-file-loader-7.3.19.tgz", - "integrity": "sha512-/SsU7LGr66JM6E0QdTwE/8dX9kdXWRQUgeCO9eEMSUtNGD7OSjT1/2ahncaKcUqzsfnqdxBJJiMuhDWK6D+g+Q==", - "dev": true, - "requires": { - "@graphql-tools/graphql-tag-pluck": "7.4.5", - "@graphql-tools/utils": "9.2.1", - "globby": "^11.0.3", - "tslib": "^2.4.0", - "unixify": "^1.0.0" - }, - "dependencies": { - "@graphql-tools/graphql-tag-pluck": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-7.4.5.tgz", - "integrity": "sha512-5Hb7HJHF6X5TMGyGFLyNgcsan1Hp2YFSKb55LNxF7b25sld54AgM6ETkIQT1o196VSrj07JuMkFcF7m9AsIjFw==", - "dev": true, - "requires": { - "@babel/parser": "^7.16.8", - "@babel/plugin-syntax-import-assertions": "7.20.0", - "@babel/traverse": "^7.16.8", - "@babel/types": "^7.16.8", - "@graphql-tools/utils": "9.2.1", - "tslib": "^2.4.0" - } - } - } - }, - "@graphql-tools/delegate": { - "version": "9.0.21", - "resolved": "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-9.0.21.tgz", - "integrity": "sha512-SM8tFeq6ogFGhIxDE82WTS44/3IQ/wz9QksAKT7xWkcICQnyR9U6Qyt+W7VGnHiybqNsVK3kHNNS/i4KGSF85g==", - "dev": true, - "requires": { - "@graphql-tools/batch-execute": "8.5.14", - "@graphql-tools/executor": "0.0.11", - "@graphql-tools/schema": "9.0.12", - "@graphql-tools/utils": "9.1.3", - "dataloader": "2.1.0", - "tslib": "~2.4.0", - "value-or-promise": "1.0.11" - }, - "dependencies": { - "@graphql-tools/merge": { - "version": "8.3.14", - "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.3.14.tgz", - "integrity": "sha512-zV0MU1DnxJLIB0wpL4N3u21agEiYFsjm6DI130jqHpwF0pR9HkF+Ni65BNfts4zQelP0GjkHltG+opaozAJ1NA==", - "dev": true, - "requires": { - "@graphql-tools/utils": "9.1.3", - "tslib": "^2.4.0" - } - }, - "@graphql-tools/schema": { - "version": "9.0.12", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.12.tgz", - "integrity": "sha512-DmezcEltQai0V1y96nwm0Kg11FDS/INEFekD4nnVgzBqawvznWqK6D6bujn+cw6kivoIr3Uq//QmU/hBlBzUlQ==", - "dev": true, - "requires": { - "@graphql-tools/merge": "8.3.14", - "@graphql-tools/utils": "9.1.3", - "tslib": "^2.4.0", - "value-or-promise": "1.0.11" - } - }, - "@graphql-tools/utils": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.1.3.tgz", - "integrity": "sha512-bbJyKhs6awp1/OmP+WKA1GOyu9UbgZGkhIj5srmiMGLHohEOKMjW784Sk0BZil1w2x95UPu0WHw6/d/HVCACCg==", - "dev": true, - "requires": { - "tslib": "^2.4.0" - } - } - } - }, - "@graphql-tools/executor": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor/-/executor-0.0.11.tgz", - "integrity": "sha512-GjtXW0ZMGZGKad6A1HXFPArkfxE0AIpznusZuQdy4laQx+8Ut3Zx8SAFJNnDfZJ2V5kU29B5Xv3Fr0/DiMBHOQ==", - "dev": true, - "requires": { - "@graphql-tools/utils": "9.1.3", - "@graphql-typed-document-node/core": "3.1.1", - "@repeaterjs/repeater": "3.0.4", - "tslib": "^2.4.0", - "value-or-promise": "1.0.11" - }, - "dependencies": { - "@graphql-tools/utils": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.1.3.tgz", - "integrity": "sha512-bbJyKhs6awp1/OmP+WKA1GOyu9UbgZGkhIj5srmiMGLHohEOKMjW784Sk0BZil1w2x95UPu0WHw6/d/HVCACCg==", - "dev": true, - "requires": { - "tslib": "^2.4.0" - } - } - } - }, - "@graphql-tools/executor-graphql-ws": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor-graphql-ws/-/executor-graphql-ws-0.0.5.tgz", - "integrity": "sha512-1bJfZdSBPCJWz1pJ5g/YHMtGt6YkNRDdmqNQZ8v+VlQTNVfuBpY2vzj15uvf5uDrZLg2MSQThrKlL8av4yFpsA==", - "dev": true, - "requires": { - "@graphql-tools/utils": "9.1.3", - "@repeaterjs/repeater": "3.0.4", - "@types/ws": "^8.0.0", - "graphql-ws": "5.11.2", - "isomorphic-ws": "5.0.0", - "tslib": "^2.4.0", - "ws": "8.11.0" - }, - "dependencies": { - "@graphql-tools/utils": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.1.3.tgz", - "integrity": "sha512-bbJyKhs6awp1/OmP+WKA1GOyu9UbgZGkhIj5srmiMGLHohEOKMjW784Sk0BZil1w2x95UPu0WHw6/d/HVCACCg==", - "dev": true, - "requires": { - "tslib": "^2.4.0" - } - } - } - }, - "@graphql-tools/executor-http": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor-http/-/executor-http-0.0.8.tgz", - "integrity": "sha512-Y0WzbBW2dDm68EqjRO7eaCC38H6mNFUCcy8ivwnv0hon/N4GjQJhrR0cApJh/xqn/YqCY0Sn2ScmdGVuSdaCcA==", - "dev": true, - "requires": { - "@graphql-tools/utils": "9.1.3", - "@repeaterjs/repeater": "3.0.4", - "@whatwg-node/fetch": "0.5.4", - "dset": "3.1.2", - "extract-files": "^11.0.0", - "meros": "1.2.1", - "tslib": "^2.4.0", - "value-or-promise": "1.0.11" - }, - "dependencies": { - "@graphql-tools/utils": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.1.3.tgz", - "integrity": "sha512-bbJyKhs6awp1/OmP+WKA1GOyu9UbgZGkhIj5srmiMGLHohEOKMjW784Sk0BZil1w2x95UPu0WHw6/d/HVCACCg==", - "dev": true, - "requires": { - "tslib": "^2.4.0" - } - }, - "@whatwg-node/fetch": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.5.4.tgz", - "integrity": "sha512-dR5PCzvOeS7OaW6dpIlPt+Ou3pak7IEG+ZVAV26ltcaiDB3+IpuvjqRdhsY6FKHcqBo1qD+S99WXY9Z6+9Rwnw==", - "dev": true, - "requires": { - "@peculiar/webcrypto": "^1.4.0", - "abort-controller": "^3.0.0", - "busboy": "^1.6.0", - "form-data-encoder": "^1.7.1", - "formdata-node": "^4.3.1", - "node-fetch": "^2.6.7", - "undici": "^5.12.0", - "web-streams-polyfill": "^3.2.0" - } - } - } - }, - "@graphql-tools/executor-legacy-ws": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor-legacy-ws/-/executor-legacy-ws-0.0.5.tgz", - "integrity": "sha512-j2ZQVTI4rKIT41STzLPK206naYDhHxmGHot0siJKBKX1vMqvxtWBqvL66v7xYEOaX79wJrFc8l6oeURQP2LE6g==", - "dev": true, - "requires": { - "@graphql-tools/utils": "9.1.3", - "@types/ws": "^8.0.0", - "isomorphic-ws": "5.0.0", - "tslib": "^2.4.0", - "ws": "8.11.0" - }, - "dependencies": { - "@graphql-tools/utils": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.1.3.tgz", - "integrity": "sha512-bbJyKhs6awp1/OmP+WKA1GOyu9UbgZGkhIj5srmiMGLHohEOKMjW784Sk0BZil1w2x95UPu0WHw6/d/HVCACCg==", - "dev": true, - "requires": { - "tslib": "^2.4.0" - } - } - } - }, - "@graphql-tools/git-loader": { - "version": "7.2.13", - "resolved": "https://registry.npmjs.org/@graphql-tools/git-loader/-/git-loader-7.2.13.tgz", - "integrity": "sha512-PBAzZWXzKUL+VvlUQOjF++246G1O6TTMzvIlxaecgxvTSlnljEXJcDQlxqXhfFPITc5MP7He0N1UcZPBU/DE7Q==", - "dev": true, - "requires": { - "@graphql-tools/graphql-tag-pluck": "7.4.0", - "@graphql-tools/utils": "9.1.1", - "is-glob": "4.0.3", - "micromatch": "^4.0.4", - "tslib": "^2.4.0", - "unixify": "^1.0.0" - }, - "dependencies": { - "@graphql-tools/utils": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.1.1.tgz", - "integrity": "sha512-DXKLIEDbihK24fktR2hwp/BNIVwULIHaSTNTNhXS+19vgT50eX9wndx1bPxGwHnVBOONcwjXy0roQac49vdt/w==", - "dev": true, - "requires": { - "tslib": "^2.4.0" - } - } - } - }, - "@graphql-tools/github-loader": { - "version": "7.3.20", - "resolved": "https://registry.npmjs.org/@graphql-tools/github-loader/-/github-loader-7.3.20.tgz", - "integrity": "sha512-kIgloHb+yJJYR6K47HNBv7vI7IF73eoGsQy77H+2WDA+zwE5PuRXGUTAlJXRQdwiY71/Nvbw44P3l4WWbMRv0Q==", - "dev": true, - "requires": { - "@ardatan/sync-fetch": "0.0.1", - "@graphql-tools/graphql-tag-pluck": "7.4.0", - "@graphql-tools/utils": "9.1.1", - "@whatwg-node/fetch": "^0.5.0", - "tslib": "^2.4.0" - }, - "dependencies": { - "@graphql-tools/utils": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.1.1.tgz", - "integrity": "sha512-DXKLIEDbihK24fktR2hwp/BNIVwULIHaSTNTNhXS+19vgT50eX9wndx1bPxGwHnVBOONcwjXy0roQac49vdt/w==", - "dev": true, - "requires": { - "tslib": "^2.4.0" - } - }, - "@whatwg-node/fetch": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.5.3.tgz", - "integrity": "sha512-cuAKL3Z7lrJJuUrfF1wxkQTb24Qd1QO/lsjJpM5ZSZZzUMms5TPnbGeGUKWA3hVKNHh30lVfr2MyRCT5Jfkucw==", - "dev": true, - "requires": { - "@peculiar/webcrypto": "^1.4.0", - "abort-controller": "^3.0.0", - "busboy": "^1.6.0", - "form-data-encoder": "^1.7.1", - "formdata-node": "^4.3.1", - "node-fetch": "^2.6.7", - "undici": "^5.12.0", - "web-streams-polyfill": "^3.2.0" - } - } - } - }, - "@graphql-tools/graphql-file-loader": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-file-loader/-/graphql-file-loader-7.5.0.tgz", - "integrity": "sha512-X3wcC+ZljbXTwdTTSp3oUHJd66mFLDKI750uhB0HidBxE6+wyw7fhmJVJiYROXPswaGliuabpo0JEyLj7hhWKA==", - "dev": true, - "requires": { - "@graphql-tools/import": "6.7.1", - "@graphql-tools/utils": "8.9.0", - "globby": "^11.0.3", - "tslib": "^2.4.0", - "unixify": "^1.0.0" - }, - "dependencies": { - "@graphql-tools/utils": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.9.0.tgz", - "integrity": "sha512-pjJIWH0XOVnYGXCqej8g/u/tsfV4LvLlj0eATKQu5zwnxd/TiTHq7Cg313qUPTFFHZ3PP5wJ15chYVtLDwaymg==", - "dev": true, - "requires": { - "tslib": "^2.4.0" - } - } - } - }, - "@graphql-tools/graphql-tag-pluck": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-7.4.0.tgz", - "integrity": "sha512-f966Z8cMDiPxWuN3ksuHpNgGE8euZtrL/Gcwz9rRarAb13al4CGHKmw2Cb/ZNdt7GbyhdiLT4wbaddrF0xCpdw==", - "dev": true, - "requires": { - "@babel/parser": "^7.16.8", - "@babel/plugin-syntax-import-assertions": "7.20.0", - "@babel/traverse": "^7.16.8", - "@babel/types": "^7.16.8", - "@graphql-tools/utils": "9.1.1", - "tslib": "^2.4.0" - }, - "dependencies": { - "@graphql-tools/utils": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.1.1.tgz", - "integrity": "sha512-DXKLIEDbihK24fktR2hwp/BNIVwULIHaSTNTNhXS+19vgT50eX9wndx1bPxGwHnVBOONcwjXy0roQac49vdt/w==", - "dev": true, - "requires": { - "tslib": "^2.4.0" - } - } - } - }, - "@graphql-tools/import": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/import/-/import-6.7.1.tgz", - "integrity": "sha512-StLosFVhdw+eZkL+v9dBabszxCAZtEYW4Oy1+750fDkH39GrmzOB8mWiYna7rm9+GMisC9atJtXuAfMF02Aoag==", - "dev": true, - "requires": { - "@graphql-tools/utils": "8.9.0", - "resolve-from": "5.0.0", - "tslib": "^2.4.0" - }, - "dependencies": { - "@graphql-tools/utils": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.9.0.tgz", - "integrity": "sha512-pjJIWH0XOVnYGXCqej8g/u/tsfV4LvLlj0eATKQu5zwnxd/TiTHq7Cg313qUPTFFHZ3PP5wJ15chYVtLDwaymg==", - "dev": true, - "requires": { - "tslib": "^2.4.0" - } - } - } - }, - "@graphql-tools/json-file-loader": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/json-file-loader/-/json-file-loader-7.4.1.tgz", - "integrity": "sha512-+QaeRyJcvUXUNEoIaecYrABunqk8/opFbpdHPAijJyVHvlsYfqXR12/501g+/QZzGHKYnyi+Q3lsZbBboj5LBg==", - "dev": true, - "requires": { - "@graphql-tools/utils": "8.9.0", - "globby": "^11.0.3", - "tslib": "^2.4.0", - "unixify": "^1.0.0" - }, - "dependencies": { - "@graphql-tools/utils": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.9.0.tgz", - "integrity": "sha512-pjJIWH0XOVnYGXCqej8g/u/tsfV4LvLlj0eATKQu5zwnxd/TiTHq7Cg313qUPTFFHZ3PP5wJ15chYVtLDwaymg==", - "dev": true, - "requires": { - "tslib": "^2.4.0" - } - } - } - }, - "@graphql-tools/load": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/load/-/load-7.8.0.tgz", - "integrity": "sha512-l4FGgqMW0VOqo+NMYizwV8Zh+KtvVqOf93uaLo9wJ3sS3y/egPCgxPMDJJ/ufQZG3oZ/0oWeKt68qop3jY0yZg==", - "dev": true, - "requires": { - "@graphql-tools/schema": "9.0.4", - "@graphql-tools/utils": "8.12.0", - "p-limit": "3.1.0", - "tslib": "^2.4.0" - }, - "dependencies": { - "@graphql-tools/schema": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.4.tgz", - "integrity": "sha512-B/b8ukjs18fq+/s7p97P8L1VMrwapYc3N2KvdG/uNThSazRRn8GsBK0Nr+FH+mVKiUfb4Dno79e3SumZVoHuOQ==", - "dev": true, - "requires": { - "@graphql-tools/merge": "8.3.6", - "@graphql-tools/utils": "8.12.0", - "tslib": "^2.4.0", - "value-or-promise": "1.0.11" - } - }, - "@graphql-tools/utils": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.12.0.tgz", - "integrity": "sha512-TeO+MJWGXjUTS52qfK4R8HiPoF/R7X+qmgtOYd8DTH0l6b+5Y/tlg5aGeUJefqImRq7nvi93Ms40k/Uz4D5CWw==", - "dev": true, - "requires": { - "tslib": "^2.4.0" - } - } - } - }, - "@graphql-tools/merge": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.3.6.tgz", - "integrity": "sha512-uUBokxXi89bj08P+iCvQk3Vew4vcfL5ZM6NTylWi8PIpoq4r5nJ625bRuN8h2uubEdRiH8ntN9M4xkd/j7AybQ==", - "dev": true, - "requires": { - "@graphql-tools/utils": "8.12.0", - "tslib": "^2.4.0" - }, - "dependencies": { - "@graphql-tools/utils": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.12.0.tgz", - "integrity": "sha512-TeO+MJWGXjUTS52qfK4R8HiPoF/R7X+qmgtOYd8DTH0l6b+5Y/tlg5aGeUJefqImRq7nvi93Ms40k/Uz4D5CWw==", - "dev": true, - "requires": { - "tslib": "^2.4.0" - } - } - } - }, - "@graphql-tools/mock": { - "version": "8.7.20", - "resolved": "https://registry.npmjs.org/@graphql-tools/mock/-/mock-8.7.20.tgz", - "integrity": "sha512-ljcHSJWjC/ZyzpXd5cfNhPI7YljRVvabKHPzKjEs5ElxWu2cdlLGvyNYepApXDsM/OJG/2xuhGM+9GWu5gEAPQ==", - "dev": true, - "requires": { - "@graphql-tools/schema": "^9.0.18", - "@graphql-tools/utils": "^9.2.1", - "fast-json-stable-stringify": "^2.1.0", - "tslib": "^2.4.0" - } - }, - "@graphql-tools/optimize": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/optimize/-/optimize-1.4.0.tgz", - "integrity": "sha512-dJs/2XvZp+wgHH8T5J2TqptT9/6uVzIYvA6uFACha+ufvdMBedkfR4b4GbT8jAKLRARiqRTxy3dctnwkTM2tdw==", - "dev": true, - "requires": { - "tslib": "^2.4.0" - } - }, - "@graphql-tools/prisma-loader": { - "version": "7.2.50", - "resolved": "https://registry.npmjs.org/@graphql-tools/prisma-loader/-/prisma-loader-7.2.50.tgz", - "integrity": "sha512-tSZFtx5GP5LBHmChwVCkvFw9oCwc0QVP2xR/Pyp61c3Fb2gyqzFq/8lnbcmxR+Oi9/Cwt3JsSc4Jkg8jBi5HLw==", - "dev": true, - "requires": { - "@graphql-tools/url-loader": "7.16.29", - "@graphql-tools/utils": "9.1.3", - "@types/js-yaml": "^4.0.0", - "@types/json-stable-stringify": "^1.0.32", - "@types/jsonwebtoken": "^8.5.0", - "chalk": "^4.1.0", - "debug": "^4.3.1", - "dotenv": "^16.0.0", - "graphql-request": "^5.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "isomorphic-fetch": "^3.0.0", - "js-yaml": "^4.0.0", - "json-stable-stringify": "^1.0.1", - "jsonwebtoken": "^9.0.0", - "lodash": "^4.17.20", - "scuid": "^1.1.0", - "tslib": "^2.4.0", - "yaml-ast-parser": "^0.0.43" - }, - "dependencies": { - "@graphql-tools/utils": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.1.3.tgz", - "integrity": "sha512-bbJyKhs6awp1/OmP+WKA1GOyu9UbgZGkhIj5srmiMGLHohEOKMjW784Sk0BZil1w2x95UPu0WHw6/d/HVCACCg==", - "dev": true, - "requires": { - "tslib": "^2.4.0" - } - } - } - }, - "@graphql-tools/relay-operation-optimizer": { - "version": "6.5.18", - "resolved": "https://registry.npmjs.org/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-6.5.18.tgz", - "integrity": "sha512-mc5VPyTeV+LwiM+DNvoDQfPqwQYhPV/cl5jOBjTgSniyaq8/86aODfMkrE2OduhQ5E00hqrkuL2Fdrgk0w1QJg==", - "dev": true, - "requires": { - "@ardatan/relay-compiler": "12.0.0", - "@graphql-tools/utils": "^9.2.1", - "tslib": "^2.4.0" - } - }, - "@graphql-tools/schema": { - "version": "9.0.19", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.19.tgz", - "integrity": "sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==", - "requires": { - "@graphql-tools/merge": "^8.4.1", - "@graphql-tools/utils": "^9.2.1", - "tslib": "^2.4.0", - "value-or-promise": "^1.0.12" - }, - "dependencies": { - "@graphql-tools/merge": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.4.1.tgz", - "integrity": "sha512-hssnPpZ818mxgl5+GfyOOSnnflAxiaTn1A1AojZcIbh4J52sS1Q0gSuBR5VrnUDjuxiqoCotpXdAQl+K+U6KLQ==", - "requires": { - "@graphql-tools/utils": "^9.2.1", - "tslib": "^2.4.0" - } - }, - "value-or-promise": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz", - "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==" - } - } - }, - "@graphql-tools/url-loader": { - "version": "7.16.29", - "resolved": "https://registry.npmjs.org/@graphql-tools/url-loader/-/url-loader-7.16.29.tgz", - "integrity": "sha512-e7c0rLH4BIaYxOgglHhWbupTn3JZFXYIHXpY+T1CcTF3nQQCaKy8o59+R2AjtEgx3Az1WNahGn4xgkKUxUwCBw==", - "dev": true, - "requires": { - "@ardatan/sync-fetch": "0.0.1", - "@graphql-tools/delegate": "9.0.21", - "@graphql-tools/executor-graphql-ws": "0.0.5", - "@graphql-tools/executor-http": "0.0.8", - "@graphql-tools/executor-legacy-ws": "0.0.5", - "@graphql-tools/utils": "9.1.3", - "@graphql-tools/wrap": "9.2.23", - "@types/ws": "^8.0.0", - "@whatwg-node/fetch": "^0.5.0", - "isomorphic-ws": "5.0.0", - "tslib": "^2.4.0", - "value-or-promise": "^1.0.11", - "ws": "8.11.0" - }, - "dependencies": { - "@graphql-tools/utils": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.1.3.tgz", - "integrity": "sha512-bbJyKhs6awp1/OmP+WKA1GOyu9UbgZGkhIj5srmiMGLHohEOKMjW784Sk0BZil1w2x95UPu0WHw6/d/HVCACCg==", - "dev": true, - "requires": { - "tslib": "^2.4.0" - } - }, - "@whatwg-node/fetch": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.5.4.tgz", - "integrity": "sha512-dR5PCzvOeS7OaW6dpIlPt+Ou3pak7IEG+ZVAV26ltcaiDB3+IpuvjqRdhsY6FKHcqBo1qD+S99WXY9Z6+9Rwnw==", - "dev": true, - "requires": { - "@peculiar/webcrypto": "^1.4.0", - "abort-controller": "^3.0.0", - "busboy": "^1.6.0", - "form-data-encoder": "^1.7.1", - "formdata-node": "^4.3.1", - "node-fetch": "^2.6.7", - "undici": "^5.12.0", - "web-streams-polyfill": "^3.2.0" - } - } - } - }, - "@graphql-tools/utils": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", - "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", - "requires": { - "@graphql-typed-document-node/core": "^3.1.1", - "tslib": "^2.4.0" - } - }, - "@graphql-tools/wrap": { - "version": "9.2.23", - "resolved": "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-9.2.23.tgz", - "integrity": "sha512-R+ar8lHdSnRQtfvkwQMOkBRlYLcBPdmFzZPiAj+tL9Nii4VNr4Oub37jcHiPBvRZSdKa9FHcKq5kKSQcbg1xuQ==", - "dev": true, - "requires": { - "@graphql-tools/delegate": "9.0.21", - "@graphql-tools/schema": "9.0.12", - "@graphql-tools/utils": "9.1.3", - "tslib": "^2.4.0", - "value-or-promise": "1.0.11" - }, - "dependencies": { - "@graphql-tools/merge": { - "version": "8.3.14", - "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.3.14.tgz", - "integrity": "sha512-zV0MU1DnxJLIB0wpL4N3u21agEiYFsjm6DI130jqHpwF0pR9HkF+Ni65BNfts4zQelP0GjkHltG+opaozAJ1NA==", - "dev": true, - "requires": { - "@graphql-tools/utils": "9.1.3", - "tslib": "^2.4.0" - } - }, - "@graphql-tools/schema": { - "version": "9.0.12", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.12.tgz", - "integrity": "sha512-DmezcEltQai0V1y96nwm0Kg11FDS/INEFekD4nnVgzBqawvznWqK6D6bujn+cw6kivoIr3Uq//QmU/hBlBzUlQ==", - "dev": true, - "requires": { - "@graphql-tools/merge": "8.3.14", - "@graphql-tools/utils": "9.1.3", - "tslib": "^2.4.0", - "value-or-promise": "1.0.11" - } - }, - "@graphql-tools/utils": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.1.3.tgz", - "integrity": "sha512-bbJyKhs6awp1/OmP+WKA1GOyu9UbgZGkhIj5srmiMGLHohEOKMjW784Sk0BZil1w2x95UPu0WHw6/d/HVCACCg==", - "dev": true, - "requires": { - "tslib": "^2.4.0" - } - } - } - }, - "@graphql-typed-document-node/core": { - "version": "3.1.1", - "requires": {} - }, - "@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "@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 - }, - "@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "dev": true - }, - "@iarna/toml": { - "version": "2.2.5", - "dev": true, - "optional": true, - "peer": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3" - }, - "@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", - "requires": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" - } - }, - "@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", - "requires": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "requires": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - } - }, - "@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", - "requires": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - } - }, - "@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "requires": { - "jest-get-type": "^29.6.3" - } - }, - "@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "requires": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - } - }, - "@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "requires": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - } - }, - "@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "dependencies": { - "istanbul-lib-instrument": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz", - "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==", - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - } - } - } - }, - "@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "requires": { - "@sinclair/typebox": "^0.27.8" - } - }, - "@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "requires": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - } - }, - "@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", - "requires": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", - "requires": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" - } - }, - "@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "requires": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "dependencies": { - "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" - }, - "write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - } - } - }, - "@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "requires": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@josephg/resolvable": { - "version": "1.0.1", - "dev": true - }, - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "@manypkg/find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.5.5", - "@types/node": "^12.7.1", - "find-up": "^4.1.0", - "fs-extra": "^8.1.0" - }, - "dependencies": { - "@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, - "@manypkg/get-packages": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz", - "integrity": "sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==", - "dev": true, - "requires": { - "@babel/runtime": "^7.5.5", - "@changesets/types": "^4.0.1", - "@manypkg/find-root": "^1.1.0", - "fs-extra": "^8.1.0", - "globby": "^11.0.0", - "read-yaml-file": "^1.1.0" - }, - "dependencies": { - "@changesets/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz", - "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==", - "dev": true - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, - "@noble/hashes": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", - "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==" - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@npmcli/fs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", - "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", - "dev": true, - "requires": { - "semver": "^7.3.5" - } - }, - "@opentelemetry/api": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.4.0.tgz", - "integrity": "sha512-IgMK9i3sFGNUqPMbjABm0G26g0QCKCUBfglhQ7rQq6WcxbKfEHRcmwsoER4hZcuYqJgkYn2OeuoJIv7Jsftp7g==", - "dev": true - }, - "@paralleldrive/cuid2": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz", - "integrity": "sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==", - "requires": { - "@noble/hashes": "^1.1.5" - } - }, - "@parcel/watcher": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.1.0.tgz", - "integrity": "sha512-8s8yYjd19pDSsBpbkOHnT6Z2+UJSuLQx61pCFM0s5wSRvKCEMDjd/cHY3/GI1szHIWbpXpsJdg3V6ISGGx9xDw==", - "dev": true, - "requires": { - "is-glob": "^4.0.3", - "micromatch": "^4.0.5", - "node-addon-api": "^3.2.1", - "node-gyp-build": "^4.3.0" - } - }, - "@peculiar/asn1-schema": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.2.0.tgz", - "integrity": "sha512-1ENEJNY7Lwlua/1wvzpYP194WtjQBfFxvde2FlzfBFh/ln6wvChrtxlORhbKEnYswzn6fOC4c7HdC5izLPMTJg==", - "dev": true, - "requires": { - "asn1js": "^3.0.5", - "pvtsutils": "^1.3.2", - "tslib": "^2.4.0" - } - }, - "@peculiar/json-schema": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", - "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", - "dev": true, - "requires": { - "tslib": "^2.0.0" - } - }, - "@peculiar/webcrypto": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.4.0.tgz", - "integrity": "sha512-U58N44b2m3OuTgpmKgf0LPDOmP3bhwNz01vAnj1mBwxBASRhptWYK+M3zG+HBkDqGQM+bFsoIihTW8MdmPXEqg==", - "dev": true, - "requires": { - "@peculiar/asn1-schema": "^2.1.6", - "@peculiar/json-schema": "^1.1.12", - "pvtsutils": "^1.3.2", - "tslib": "^2.4.0", - "webcrypto-core": "^1.7.4" - } - }, - "@protobufjs/aspromise": { - "version": "1.1.2" - }, - "@protobufjs/base64": { - "version": "1.1.2" - }, - "@protobufjs/codegen": { - "version": "2.0.4" - }, - "@protobufjs/eventemitter": { - "version": "1.1.0" - }, - "@protobufjs/fetch": { - "version": "1.1.0", - "requires": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "@protobufjs/float": { - "version": "1.0.2" - }, - "@protobufjs/inquire": { - "version": "1.1.0" - }, - "@protobufjs/path": { - "version": "1.1.2" - }, - "@protobufjs/pool": { - "version": "1.1.0" - }, - "@protobufjs/utf8": { - "version": "1.1.0" - }, - "@repeaterjs/repeater": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.4.tgz", - "integrity": "sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA==", - "dev": true - }, - "@rollup/plugin-commonjs": { - "version": "28.0.6", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.6.tgz", - "integrity": "sha512-XSQB1K7FUU5QP+3lOQmVCE3I0FcbbNvmNT4VJSj93iUjayaARrTQeoRdiYQoftAJBLrR9t2agwAd3ekaTgHNlw==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^5.0.1", - "commondir": "^1.0.1", - "estree-walker": "^2.0.2", - "fdir": "^6.2.0", - "is-reference": "1.2.1", - "magic-string": "^0.30.3", - "picomatch": "^4.0.2" - }, - "dependencies": { - "fdir": { - "version": "6.4.6", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", - "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", - "dev": true, - "requires": {} - }, - "picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true - } - } - }, - "@rollup/pluginutils": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.1.tgz", - "integrity": "sha512-4HaCVEXXuObvcPUaUlLt4faHYHCeQOOWNj8NKFGaRSrw3ZLD0TWeAFZicV9vXjnE2nkNuaVTfTuwAnjR+6uc9A==", - "dev": true, - "requires": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - } - }, - "@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true - }, - "@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" - }, - "@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "requires": { - "@sinonjs/commons": "^3.0.0" - } - }, - "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true - }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "optional": true, - "peer": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "optional": true, - "peer": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "optional": true, - "peer": true - }, - "@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "optional": true, - "peer": true - }, - "@types/async-retry": { - "version": "1.4.9", - "resolved": "https://registry.npmjs.org/@types/async-retry/-/async-retry-1.4.9.tgz", - "integrity": "sha512-s1ciZQJzRh3708X/m3vPExr5KJlzlZJvXsKpbtE2luqNcbROr64qU+3KpJsYHqWMeaxI839OvXf9PrUSw1Xtyg==", - "dev": true, - "requires": { - "@types/retry": "*" - } - }, - "@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", - "requires": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", - "requires": { - "@babel/types": "^7.20.7" - } - }, - "@types/body-parser": { - "version": "1.19.4", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.4.tgz", - "integrity": "sha512-N7UDG0/xiPQa2D/XrVJXjkWbpqHCd2sBaB32ggRF2l83RhPfamgKGF8gwwqyksS95qUS5ZYF9aF+lLPRlwI2UA==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/compression": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@types/compression/-/compression-1.8.1.tgz", - "integrity": "sha512-kCFuWS0ebDbmxs0AXYn6e2r2nrGAb5KwQhknjSPSPgJcGd8+HVSILlUyFhGqML2gk39HcG7D1ydW9/qpYkN00Q==", - "dev": true, - "requires": { - "@types/express": "*", - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.35", - "requires": { - "@types/node": "*" - } - }, - "@types/cookiejar": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz", - "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==", - "dev": true - }, - "@types/cors": { - "version": "2.8.19", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", - "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true - }, - "@types/express": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", - "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.19.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4" - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/js-yaml": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.5.tgz", - "integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true - }, - "@types/json-stable-stringify": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/@types/json-stable-stringify/-/json-stable-stringify-1.0.34.tgz", - "integrity": "sha512-s2cfwagOQAS8o06TcwKfr9Wx11dNGbH2E9vJz1cqV+a/LOyhWNLUNd6JSRYNzvB4d29UuJX2M0Dj9vE1T8fRXw==", - "dev": true - }, - "@types/json5": { - "version": "0.0.29", - "dev": true - }, - "@types/jsonwebtoken": { - "version": "8.5.8", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.8.tgz", - "integrity": "sha512-zm6xBQpFDIDM6o9r6HSgDeIcLy82TKWctCXEPbJJcXb5AKmi5BNNdLXneixK4lplX3PqIVcwLBCGE/kAGnlD4A==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-NYqRyg/hIQrYPT9lbOeYc3kIRabJDn/k4qQHIXUpx88CBDww2fD15Sg5kbXlW86zm2XEW4g0QxkTI3/Kfkc7xQ==", - "dev": true - }, - "@types/lodash.sumby": { - "version": "4.6.9", - "resolved": "https://registry.npmjs.org/@types/lodash.sumby/-/lodash.sumby-4.6.9.tgz", - "integrity": "sha512-rqtOxrmIWuYpxjq867H+mptnAfN1levAPwpiadV+wJgRBXBLUTJT5rDlDUPxMNkWtIdBTv8mE+U4u86rSVoc/Q==", - "dev": true, - "requires": { - "@types/lodash": "*" - } - }, - "@types/lodash.xorby": { - "version": "4.7.9", - "resolved": "https://registry.npmjs.org/@types/lodash.xorby/-/lodash.xorby-4.7.9.tgz", - "integrity": "sha512-xSS2aud1+TSbw8WrsoGolNFvJJO32phDD28F6ZA2KLcrVToDxvYmKEOvPUvKkZDVbMG+EdpDzejdO+9vmhoj8A==", - "dev": true, - "requires": { - "@types/lodash": "*" - } - }, - "@types/long": { - "version": "4.0.1" - }, - "@types/methods": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz", - "integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==", - "dev": true - }, - "@types/mime": { - "version": "1.3.2" - }, - "@types/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@types/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-elf6BsTq+AkyNsb2h5cGNst2Mc7dPliVoAPm1fXglC/BM3f2pFA40BaSSv3E5lyHteEawVKLP+8TwiY1DMNb3A==", - "dev": true - }, - "@types/node": { - "version": "14.18.63", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", - "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==" - }, - "@types/node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", - "requires": { - "@types/node": "*", - "form-data": "^4.0.0" - }, - "dependencies": { - "form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - } - } - }, - "@types/parse-json": { - "version": "4.0.0", - "dev": true - }, - "@types/qs": { - "version": "6.9.7" - }, - "@types/qs-middleware": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/qs-middleware/-/qs-middleware-1.0.4.tgz", - "integrity": "sha512-vMA6TULU1opdilMWD/2j3Og/mikVEdQ8+ZiPksJz2DPTVYR1DZ/Q8ZKGZWlWlgWfUhamp3OFi1hZ+YJgFuE86g==", - "dev": true, - "requires": { - "@types/express": "*", - "@types/qs": "*" - } - }, - "@types/range-parser": { - "version": "1.2.4" - }, - "@types/retry": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.5.tgz", - "integrity": "sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw==", - "dev": true - }, - "@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", - "dev": true - }, - "@types/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", - "requires": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "@types/serve-static": { - "version": "1.13.10", - "requires": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" - }, - "@types/superagent": { - "version": "8.1.9", - "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz", - "integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==", - "dev": true, - "requires": { - "@types/cookiejar": "^2.1.5", - "@types/methods": "^1.1.4", - "@types/node": "*", - "form-data": "^4.0.0" - }, - "dependencies": { - "form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - } - } - }, - "@types/supertest": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.3.tgz", - "integrity": "sha512-8WzXq62EXFhJ7QsH3Ocb/iKQ/Ty9ZVWnVzoTKc9tyyFRRF3a74Tk2+TLFgaFFw364Ere+npzHKEJ6ga2LzIL7w==", - "dev": true, - "requires": { - "@types/methods": "^1.1.4", - "@types/superagent": "^8.1.0" - } - }, - "@types/test-listen": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/test-listen/-/test-listen-1.1.2.tgz", - "integrity": "sha512-1z4+FBjfjHOu9d3dXUWE5yD/iwVe3OrHALX6Y2Qsv3CAL1+U2lvsIgbrIyHifi8HH1CUkHTYNDUFuUNXk1gusA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/type-is": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/@types/type-is/-/type-is-1.6.7.tgz", - "integrity": "sha512-gEsh7n8824nusZ2Sidh6POxNsIdTSvIAl5gXbeFj+TUaD1CO2r4i7MQYNMfEQkChU42s2bVWAda6x6BzIhtFbQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/uuid": { - "version": "9.0.8", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", - "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", - "dev": true - }, - "@types/whatwg-mimetype": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/whatwg-mimetype/-/whatwg-mimetype-3.0.2.tgz", - "integrity": "sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==", - "dev": true - }, - "@types/ws": { - "version": "8.5.3", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/yargs": { - "version": "17.0.10", - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0" - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", - "dev": true, - "requires": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", - "dev": true, - "requires": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, - "@vendia/serverless-express": { - "version": "4.12.6", - "resolved": "https://registry.npmjs.org/@vendia/serverless-express/-/serverless-express-4.12.6.tgz", - "integrity": "sha512-ePsIPk3VQwgm5nh/JGBtTKQs5ZOF7REjHxC+PKk/CHvhlKQkJuUU365uPOlxuLJhC+BAefDznDRReWxpnKjmYg==", - "dev": true, - "requires": { - "@codegenie/serverless-express": "^4.12.5" - } - }, - "@whatwg-node/events": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.0.2.tgz", - "integrity": "sha512-WKj/lI4QjnLuPrim0cfO7i+HsDSXHxNv1y0CrJhdntuO3hxWZmnXCwNDnwOvry11OjRin6cgWNF+j/9Pn8TN4w==", - "dev": true - }, - "@whatwg-node/fetch": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.2.6.tgz", - "integrity": "sha512-NhHiqeGcKjgqUZvJTZSou9qsFEPBBG1LPm2Npz0cmcPvukhhQfjX+p3quRx6b9AyjNPp1f73VB1z4ApHy9FcNg==", - "dev": true, - "requires": { - "@peculiar/webcrypto": "^1.4.0", - "abort-controller": "^3.0.0", - "busboy": "^1.6.0", - "event-target-polyfill": "^0.0.3", - "form-data-encoder": "^1.7.1", - "formdata-node": "^4.3.1", - "node-fetch": "^2.6.7", - "undici": "^5.8.0", - "web-streams-polyfill": "^3.2.0" - } - }, - "@whatwg-node/node-fetch": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.3.4.tgz", - "integrity": "sha512-gP1MN6DiHVbhkLWH1eCELhE2ZtLRxb+HRKu4eYze1Tijxz0uT1T2kk3lseZp94txzxCfbxGFU0jsWkxNdH3EXA==", - "dev": true, - "requires": { - "@whatwg-node/events": "^0.0.2", - "busboy": "^1.6.0", - "fast-querystring": "^1.1.1", - "fast-url-parser": "^1.1.3", - "tslib": "^2.3.1" - } - }, - "@wry/caches": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@wry/caches/-/caches-1.0.1.tgz", - "integrity": "sha512-bXuaUNLVVkD20wcGBWRyo7j9N3TxePEWFZj2Y+r9OoUzfqmavM84+mFykRicNsBqatba5JLay1t48wxaXaWnlA==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@wry/context": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@wry/context/-/context-0.7.3.tgz", - "integrity": "sha512-Nl8WTesHp89RF803Se9X3IiHjdmLBrIvPMaJkl+rKVJAYyPsz1TEUbu89943HpvujtSJgDUx9W4vZw3K1Mr3sA==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@wry/equality": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.5.6.tgz", - "integrity": "sha512-D46sfMTngaYlrH+OspKf8mIJETntFnf6Hsjb0V41jAXJ7Bx2kB8Rv8RCUujuVWYttFtHkUNp7g+FwxNQAr6mXA==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@wry/trie": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@wry/trie/-/trie-0.4.3.tgz", - "integrity": "sha512-I6bHwH0fSf6RqQcnnXLJKhkSXG45MFral3GxPaY4uAl0LYDZM+YDVDAiU9bYwjTuysy1S0IeecWtmq1SZA3M1w==", - "requires": { - "tslib": "^2.3.0" - } - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "accepts": { - "version": "1.3.8", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", - "devOptional": true - }, - "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, - "requires": {} - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "optional": true, - "peer": true - }, - "agent-base": { - "version": "6.0.2", - "dev": true, - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - }, - "dependencies": { - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true - } - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "dependencies": { - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - } - } - }, - "ajv": { - "version": "6.12.6", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-colors": { - "version": "4.1.3", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-regex": { - "version": "5.0.1" - }, - "ansi-styles": { - "version": "4.3.0", - "requires": { - "color-convert": "^2.0.1" - } - }, - "any-promise": { - "version": "1.3.0", - "dev": true - }, - "anymatch": { - "version": "3.1.2", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "4.1.3", - "optional": true, - "peer": true - }, - "argparse": { - "version": "2.0.1", - "dev": true - }, - "argv": { - "version": "0.0.2", - "dev": true - }, - "array-buffer-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", - "dev": true, - "requires": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" - } - }, - "array-flatten": { - "version": "1.1.1" - }, - "array-includes": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", - "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.24.0", - "es-object-atoms": "^1.1.1", - "get-intrinsic": "^1.3.0", - "is-string": "^1.1.1", - "math-intrinsics": "^1.1.0" - } - }, - "array-timsort": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", - "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "dev": true - }, - "array.prototype.findlastindex": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", - "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-shim-unscopables": "^1.1.0" - } - }, - "array.prototype.flat": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", - "dev": true, - "requires": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - } - }, - "array.prototype.flatmap": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", - "dev": true, - "requires": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - } - }, - "arraybuffer.prototype.slice": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", - "dev": true, - "requires": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "is-array-buffer": "^3.0.4" - } - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "asn1js": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.5.tgz", - "integrity": "sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==", - "dev": true, - "requires": { - "pvtsutils": "^1.3.2", - "pvutils": "^1.1.3", - "tslib": "^2.4.0" - } - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", - "dev": true - }, - "async-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", - "dev": true - }, - "async-retry": { - "version": "1.3.3", - "requires": { - "retry": "0.13.1" - } - }, - "asynckit": { - "version": "0.4.0" - }, - "auto-bind": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/auto-bind/-/auto-bind-4.0.0.tgz", - "integrity": "sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==", - "dev": true - }, - "available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "requires": { - "possible-typed-array-names": "^1.0.0" - } - }, - "awaiting": { - "version": "3.0.0", - "dev": true - }, - "babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", - "requires": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "7.0.0-beta.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", - "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==", - "dev": true - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-fbjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz", - "integrity": "sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==", - "dev": true, - "requires": { - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-syntax-class-properties": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-block-scoped-functions": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-member-expression-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-object-super": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-property-literals": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" - } - }, - "babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", - "requires": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.2" - }, - "base64-js": { - "version": "1.5.1", - "dev": true - }, - "better-path-resolve": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz", - "integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==", - "dev": true, - "requires": { - "is-windows": "^1.0.0" - } - }, - "bl": { - "version": "4.1.0", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "requires": { - "fill-range": "^7.1.1" - } - }, - "browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "requires": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - } - }, - "bs-logger": { - "version": "0.2.6", - "dev": true, - "requires": { - "fast-json-stable-stringify": "2.x" - } - }, - "bser": { - "version": "2.1.1", - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "5.7.1", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "dev": true - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "requires": { - "streamsearch": "^1.1.0" - } - }, - "bytes": { - "version": "3.1.2" - }, - "cacache": { - "version": "17.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.4.tgz", - "integrity": "sha512-Z/nL3gU+zTUjz5pCA5vVjYM8pmaw2kxM7JEiE0fv3w77Wj+sFbi70CrBruUWH0uNcEdvLDixFpgA2JM4F4DBjA==", - "dev": true, - "requires": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^8.0.1", - "lru-cache": "^7.7.1", - "minipass": "^4.0.0", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "lru-cache": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz", - "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==", - "dev": true - }, - "minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - } - } - }, - "call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dev": true, - "requires": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - } - }, - "call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "requires": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - } - }, - "call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "requires": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - } - }, - "callsites": { - "version": "3.1.0" - }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "camelcase": { - "version": "5.3.1" - }, - "caniuse-lite": { - "version": "1.0.30001418", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001418.tgz", - "integrity": "sha512-oIs7+JL3K9JRQ3jPZjlH6qyYDp+nBTCais7hjh0s+fuBwufc7uZ7hPYMXrDOJhV360KGMTcczMRObk0/iMqZRg==" - }, - "capital-case": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", - "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case-first": "^2.0.2" - } - }, - "chalk": { - "version": "4.1.2", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "change-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", - "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", - "dev": true, - "requires": { - "camel-case": "^4.1.2", - "capital-case": "^1.0.4", - "constant-case": "^3.0.4", - "dot-case": "^3.0.4", - "header-case": "^2.0.4", - "no-case": "^3.0.4", - "param-case": "^3.0.4", - "pascal-case": "^3.1.2", - "path-case": "^3.0.4", - "sentence-case": "^3.0.4", - "snake-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "change-case-all": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/change-case-all/-/change-case-all-1.0.15.tgz", - "integrity": "sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==", - "dev": true, - "requires": { - "change-case": "^4.1.2", - "is-lower-case": "^2.0.2", - "is-upper-case": "^2.0.2", - "lower-case": "^2.0.2", - "lower-case-first": "^2.0.2", - "sponge-case": "^1.0.1", - "swap-case": "^2.0.2", - "title-case": "^3.0.3", - "upper-case": "^2.0.2", - "upper-case-first": "^2.0.2" - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" - }, - "chardet": { - "version": "0.7.0", - "dev": true - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==" - }, - "cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "clear-module": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/clear-module/-/clear-module-4.1.2.tgz", - "integrity": "sha512-LWAxzHqdHsAZlPlEyJ2Poz6AIs384mPeqLVCru2p0BrP9G/kVGuhNyZYClLO6cXlnuJjzC8xtsJIuMjKqLXoAw==", - "dev": true, - "requires": { - "parent-module": "^2.0.0", - "resolve-from": "^5.0.0" - } - }, - "cli-cursor": { - "version": "3.1.0", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.6.1", - "dev": true - }, - "cli-width": { - "version": "3.0.0", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "clone": { - "version": "1.0.4", - "dev": true - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" - }, - "codecov": { - "version": "3.8.3", - "dev": true, - "requires": { - "argv": "0.0.2", - "ignore-walk": "3.0.4", - "js-yaml": "3.14.1", - "teeny-request": "7.1.1", - "urlgrey": "1.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } - } - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" - }, - "color-convert": { - "version": "2.0.1", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4" - }, - "colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", - "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", - "dev": true - }, - "comment-json": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.3.tgz", - "integrity": "sha512-SsxdiOf064DWoZLH799Ata6u7iV658A11PlWtZATDlXPpKGJnbJZ5Z24ybixAi+LUUqJ/GKowAejtC5GFUG7Tw==", - "dev": true, - "requires": { - "array-timsort": "^1.0.3", - "core-util-is": "^1.0.3", - "esprima": "^4.0.1", - "has-own-prop": "^2.0.0", - "repeat-string": "^1.6.1" - } - }, - "common-tags": { - "version": "1.8.2", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "dev": true - }, - "component-emitter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==" - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz", - "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "compressible": "~2.0.18", - "debug": "2.6.9", - "negotiator": "~0.6.4", - "on-headers": "~1.0.2", - "safe-buffer": "5.2.1", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", - "dev": true - } - } - }, - "concat-map": { - "version": "0.0.1" - }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - } - }, - "constant-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", - "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case": "^2.0.2" - } - }, - "content-disposition": { - "version": "0.5.4", - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" - }, - "convert-source-map": { - "version": "1.8.0", - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2" - } - } - }, - "cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==" - }, - "cookie-signature": { - "version": "1.0.6" - }, - "cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==" - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cors": { - "version": "2.8.5", - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "cosmiconfig": { - "version": "7.0.1", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "cosmiconfig-toml-loader": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@iarna/toml": "^2.2.5" - } - }, - "create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", - "requires": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - } - }, - "create-require": { - "version": "1.1.1", - "optional": true, - "peer": true - }, - "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dev": true, - "requires": { - "node-fetch": "2.6.7" - }, - "dependencies": { - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "requires": { - "whatwg-url": "^5.0.0" - } - } - } - }, - "cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true - }, - "cspell": { - "version": "6.31.3", - "resolved": "https://registry.npmjs.org/cspell/-/cspell-6.31.3.tgz", - "integrity": "sha512-VeeShDLWVM6YPiU/imeGy0lmg6ki63tbLEa6hz20BExhzzpmINOP5nSTYtpY0H9zX9TrF/dLbI38TuuYnyG3Uw==", - "dev": true, - "requires": { - "@cspell/cspell-json-reporter": "6.31.3", - "@cspell/cspell-pipe": "6.31.3", - "@cspell/cspell-types": "6.31.3", - "@cspell/dynamic-import": "6.31.3", - "chalk": "^4.1.2", - "commander": "^10.0.0", - "cspell-gitignore": "6.31.3", - "cspell-glob": "6.31.3", - "cspell-io": "6.31.3", - "cspell-lib": "6.31.3", - "fast-glob": "^3.2.12", - "fast-json-stable-stringify": "^2.1.0", - "file-entry-cache": "^6.0.1", - "get-stdin": "^8.0.0", - "imurmurhash": "^0.1.4", - "semver": "^7.3.8", - "strip-ansi": "^6.0.1", - "vscode-uri": "^3.0.7" - } - }, - "cspell-dictionary": { - "version": "6.31.3", - "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-6.31.3.tgz", - "integrity": "sha512-3w5P3Md/tbHLVGPKVL0ePl1ObmNwhdDiEuZ2TXfm2oAIwg4aqeIrw42A2qmhaKLcuAIywpqGZsrGg8TviNNhig==", - "dev": true, - "requires": { - "@cspell/cspell-pipe": "6.31.3", - "@cspell/cspell-types": "6.31.3", - "cspell-trie-lib": "6.31.3", - "fast-equals": "^4.0.3", - "gensequence": "^5.0.2" - } - }, - "cspell-gitignore": { - "version": "6.31.3", - "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-6.31.3.tgz", - "integrity": "sha512-vCfVG4ZrdwJnsZHl/cdp8AY+YNPL3Ga+0KR9XJsaz69EkQpgI6porEqehuwle7hiXw5e3L7xFwNEbpCBlxgLRA==", - "dev": true, - "requires": { - "cspell-glob": "6.31.3", - "find-up": "^5.0.0" - }, - "dependencies": { - "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, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "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, - "requires": { - "p-locate": "^5.0.0" - } - }, - "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, - "requires": { - "p-limit": "^3.0.2" - } - } - } - }, - "cspell-glob": { - "version": "6.31.3", - "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-6.31.3.tgz", - "integrity": "sha512-+koUJPSCOittQwhR0T1mj4xXT3N+ZnY2qQ53W6Gz9HY3hVfEEy0NpbwE/Uy7sIvFMbc426fK0tGXjXyIj72uhQ==", - "dev": true, - "requires": { - "micromatch": "^4.0.5" - } - }, - "cspell-grammar": { - "version": "6.31.3", - "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-6.31.3.tgz", - "integrity": "sha512-TZYaOLIGAumyHlm4w7HYKKKcR1ZgEMKt7WNjCFqq7yGVW7U+qyjQqR8jqnLiUTZl7c2Tque4mca7n0CFsjVv5A==", - "dev": true, - "requires": { - "@cspell/cspell-pipe": "6.31.3", - "@cspell/cspell-types": "6.31.3" - } - }, - "cspell-io": { - "version": "6.31.3", - "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-6.31.3.tgz", - "integrity": "sha512-yCnnQ5bTbngUuIAaT5yNSdI1P0Kc38uvC8aynNi7tfrCYOQbDu1F9/DcTpbdhrsCv+xUn2TB1YjuCmm0STfJlA==", - "dev": true, - "requires": { - "@cspell/cspell-service-bus": "6.31.3", - "node-fetch": "^2.6.9" - } - }, - "cspell-lib": { - "version": "6.31.3", - "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-6.31.3.tgz", - "integrity": "sha512-Dv55aecaMvT/5VbNryKo0Zos8dtHon7e1K0z8DR4/kGZdQVT0bOFWeotSLhuaIqoNFdEt8ypfKbrIHIdbgt1Hg==", - "dev": true, - "requires": { - "@cspell/cspell-bundled-dicts": "6.31.3", - "@cspell/cspell-pipe": "6.31.3", - "@cspell/cspell-types": "6.31.3", - "@cspell/strong-weak-map": "6.31.3", - "clear-module": "^4.1.2", - "comment-json": "^4.2.3", - "configstore": "^5.0.1", - "cosmiconfig": "8.0.0", - "cspell-dictionary": "6.31.3", - "cspell-glob": "6.31.3", - "cspell-grammar": "6.31.3", - "cspell-io": "6.31.3", - "cspell-trie-lib": "6.31.3", - "fast-equals": "^4.0.3", - "find-up": "^5.0.0", - "gensequence": "^5.0.2", - "import-fresh": "^3.3.0", - "resolve-from": "^5.0.0", - "resolve-global": "^1.0.0", - "vscode-languageserver-textdocument": "^1.0.8", - "vscode-uri": "^3.0.7" - }, - "dependencies": { - "cosmiconfig": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.0.0.tgz", - "integrity": "sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==", - "dev": true, - "requires": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - } - }, - "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, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "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, - "requires": { - "p-locate": "^5.0.0" - } - }, - "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, - "requires": { - "p-limit": "^3.0.2" - } - } - } - }, - "cspell-trie-lib": { - "version": "6.31.3", - "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-6.31.3.tgz", - "integrity": "sha512-HNUcLWOZAvtM3E34U+7/mSSpO0F6nLd/kFlRIcvSvPb9taqKe8bnSa0Yyb3dsdMq9rMxUmuDQtF+J6arZK343g==", - "dev": true, - "requires": { - "@cspell/cspell-pipe": "6.31.3", - "@cspell/cspell-types": "6.31.3", - "gensequence": "^5.0.2" - } - }, - "data-view-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", - "dev": true, - "requires": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - } - }, - "data-view-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", - "dev": true, - "requires": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - } - }, - "data-view-byte-offset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", - "dev": true, - "requires": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - } - }, - "dataloader": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.1.0.tgz", - "integrity": "sha512-qTcEYLen3r7ojZNgVUaRggOI+KM7jrKxXeSHhogh/TWxYMeONEMqY+hmkobiYQozsGIyg9OYVzO4ZIfoB4I0pQ==", - "dev": true - }, - "debounce": { - "version": "1.2.1", - "dev": true - }, - "debug": { - "version": "4.3.4", - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "dev": true - }, - "dedent": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.3.0.tgz", - "integrity": "sha512-7glNLfvdsMzZm3FpRY1CHuI2lbYDR+71YmrhmTZjYFD5pfT0ACgnGRdrrC9Mk2uICnzkcdelCx5at787UDGOvg==", - "requires": {} - }, - "deep-equal": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", - "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", - "dev": true, - "requires": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.5", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.2", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.13" - } - }, - "deep-is": { - "version": "0.1.4", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" - }, - "defaults": { - "version": "1.0.3", - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "requires": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - } - }, - "define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "requires": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "delayed-stream": { - "version": "1.0.0" - }, - "depd": { - "version": "2.0.0" - }, - "dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", - "dev": true - }, - "destroy": { - "version": "1.2.0" - }, - "detect-indent": { - "version": "6.1.0", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==" - }, - "dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "requires": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "diff": { - "version": "4.0.2", - "optional": true, - "peer": true - }, - "diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==" - }, - "diffable-html": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/diffable-html/-/diffable-html-4.1.0.tgz", - "integrity": "sha512-++kyNek+YBLH8cLXS+iTj/Hiy2s5qkRJEJ8kgu/WHbFrVY2vz9xPFUT+fii2zGF0m1CaojDlQJjkfrCt7YWM1g==", - "dev": true, - "requires": { - "htmlparser2": "^3.9.2" - } - }, - "dir-glob": { - "version": "3.0.1", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - } - } - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "dotenv": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", - "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==", - "dev": true - }, - "dset": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.2.tgz", - "integrity": "sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==", - "dev": true - }, - "dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "requires": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - } - }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "ee-first": { - "version": "1.1.1" - }, - "ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "dev": true, - "requires": { - "jake": "^10.8.5" - } - }, - "electron-to-chromium": { - "version": "1.4.278", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.278.tgz", - "integrity": "sha512-i+0+t/UVCqp9khP+hswZQbG31LnsYWGwyI9zhqZkyPok7k57W0UhMaxODMp3TeoNFhyUtB5OI4ppO/OSD9gaYg==" - }, - "emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==" - }, - "emoji-regex": { - "version": "8.0.0" - }, - "encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==" - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - } - }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - }, - "err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", - "dev": true, - "requires": { - "array-buffer-byte-length": "^1.0.2", - "arraybuffer.prototype.slice": "^1.0.4", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "data-view-buffer": "^1.0.2", - "data-view-byte-length": "^1.0.2", - "data-view-byte-offset": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-set-tostringtag": "^2.1.0", - "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.3.0", - "get-proto": "^1.0.1", - "get-symbol-description": "^1.1.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.5", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.2", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.2.1", - "is-set": "^2.0.3", - "is-shared-array-buffer": "^1.0.4", - "is-string": "^1.1.1", - "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.1", - "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.4", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.4", - "safe-array-concat": "^1.1.3", - "safe-push-apply": "^1.0.0", - "safe-regex-test": "^1.1.0", - "set-proto": "^1.0.0", - "stop-iteration-iterator": "^1.1.0", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-length": "^1.0.3", - "typed-array-byte-offset": "^1.0.4", - "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.19" - } - }, - "es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" - }, - "es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" - }, - "es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - } - }, - "es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "requires": { - "es-errors": "^1.3.0" - } - }, - "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==", - "dev": true, - "requires": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - } - }, - "es-shim-unscopables": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", - "dev": true, - "requires": { - "hasown": "^2.0.2" - } - }, - "es-to-primitive": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", - "dev": true, - "requires": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" - } - }, - "escalade": { - "version": "3.1.1" - }, - "escape-html": { - "version": "1.0.3" - }, - "escape-string-regexp": { - "version": "1.0.5" - }, - "eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "dependencies": { - "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 - }, - "eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "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, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "glob-parent": { - "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, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "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, - "requires": { - "p-locate": "^5.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "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, - "requires": { - "p-limit": "^3.0.2" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-module-utils": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", - "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", - "dev": true, - "requires": { - "debug": "^3.2.7" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-plugin-import": { - "version": "2.32.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", - "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", - "dev": true, - "requires": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.9", - "array.prototype.findlastindex": "^1.2.6", - "array.prototype.flat": "^1.3.3", - "array.prototype.flatmap": "^1.3.3", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.1", - "hasown": "^2.0.2", - "is-core-module": "^2.16.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.1", - "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.9", - "tsconfig-paths": "^3.15.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "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 - }, - "espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "requires": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - } - }, - "esprima": { - "version": "4.0.1" - }, - "esquery": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz", - "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "dev": true - } - } - }, - "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, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "estree-walker": { - "version": "2.0.2", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "dev": true - }, - "etag": { - "version": "1.8.1" - }, - "event-target-polyfill": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/event-target-polyfill/-/event-target-polyfill-0.0.3.tgz", - "integrity": "sha512-ZMc6UuvmbinrCk4RzGyVmRyIsAyxMRlp4CqSrcQRO8Dy0A9ldbiRy5kdtBj4OtP7EClGdqGfIqo9JmOClMsGLQ==", - "dev": true - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==" - }, - "expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "requires": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - } - }, - "express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - } - } - }, - "extendable-error": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/extendable-error/-/extendable-error-0.1.7.tgz", - "integrity": "sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==", - "dev": true - }, - "external-editor": { - "version": "3.1.0", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "extract-files": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-11.0.0.tgz", - "integrity": "sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ==", - "dev": true - }, - "fast-decode-uri-component": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", - "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "dev": true - }, - "fast-equals": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-4.0.3.tgz", - "integrity": "sha512-G3BSX9cfKttjr+2o1O22tYMLq0DPluZnYtq1rXumE1SpL/F/SLIfHx08WYQoWSIpeMYf8sRbJ8++71+v6Pnxfg==", - "dev": true - }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0" - }, - "fast-levenshtein": { - "version": "2.0.6", - "dev": true - }, - "fast-querystring": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.1.tgz", - "integrity": "sha512-qR2r+e3HvhEFmpdHMv//U8FnFlnYjaC6QKDuaXALDkw2kvHO8WDjxH+f/rHGR4Me4pnk8p9JAkRNTjYHAKRn2Q==", - "dev": true, - "requires": { - "fast-decode-uri-component": "^1.0.1" - } - }, - "fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" - }, - "fast-url-parser": { - "version": "1.1.3", - "dev": true, - "requires": { - "punycode": "^1.3.2" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "dev": true - } - } - }, - "fastq": { - "version": "1.13.0", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fb-watchman": { - "version": "2.0.1", - "requires": { - "bser": "2.1.1" - } - }, - "fbjs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", - "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", - "dev": true, - "requires": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.30" - } - }, - "fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", - "dev": true - }, - "figures": { - "version": "3.2.0", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "requires": { - "minimatch": "^5.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - } - } - }, - "find-up": { - "version": "4.1.0", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "flatted": { - "version": "3.2.5", - "dev": true - }, - "for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "dev": true, - "requires": { - "is-callable": "^1.2.7" - } - }, - "form-data": { - "version": "3.0.1", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "form-data-encoder": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", - "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==", - "dev": true - }, - "formdata-node": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.3.3.tgz", - "integrity": "sha512-coTew7WODO2vF+XhpUdmYz4UBvlsiTMSNaFYZlrXIqYbFd4W7bMwnoALNLE6uvNgzTg2j1JDF0ZImEfF06VPAA==", - "dev": true, - "requires": { - "node-domexception": "1.0.0", - "web-streams-polyfill": "4.0.0-beta.1" - }, - "dependencies": { - "web-streams-polyfill": { - "version": "4.0.0-beta.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.1.tgz", - "integrity": "sha512-3ux37gEX670UUphBF9AMCq8XM6iQ8Ac6A+DSRRjDoRBm1ufCkaCDdNVbaqq60PsEkdNlLKrGtv/YBP4EJXqNtQ==", - "dev": true - } - } - }, - "formidable": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz", - "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==", - "requires": { - "@paralleldrive/cuid2": "^2.2.2", - "dezalgo": "^1.0.4", - "once": "^1.4.0" - } - }, - "forwarded": { - "version": "0.2.0" - }, - "fresh": { - "version": "0.5.2" - }, - "fs-cp": { - "version": "1.4.0", - "dev": true, - "requires": { - "any-promise": "^1.1.0", - "destroy": "^1.0.0", - "mkdirp-then": "^1.0.0", - "mz": "^2.0.0" - } - }, - "fs-extra": { - "version": "7.0.1", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.0.tgz", - "integrity": "sha512-EUojgQaSPy6sxcqcZgQv6TVF6jiKvurji3AxhAivs/Ep4O1UpS8TusaxpybfFHZ2skRhLqzk6WR8nqNYIMMDeA==", - "dev": true, - "requires": { - "minipass": "^4.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0" - }, - "fsevents": { - "version": "2.3.2", - "optional": true - }, - "function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" - }, - "function.prototype.name": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", - "dev": true, - "requires": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" - } - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true - }, - "gensequence": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/gensequence/-/gensequence-5.0.2.tgz", - "integrity": "sha512-JlKEZnFc6neaeSVlkzBGGgkIoIaSxMgvdamRoPN8r3ozm2r9dusqxeKqYQ7lhzmj2UhFQP8nkyfCaiLQxiLrDA==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2" - }, - "get-caller-file": { - "version": "2.0.5" - }, - "get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "requires": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - } - }, - "get-package-type": { - "version": "0.1.0" - }, - "get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "requires": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - } - }, - "get-stdin": { - "version": "8.0.0", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" - }, - "get-symbol-description": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", - "dev": true, - "requires": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "glob-parent": { - "version": "5.1.2", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", - "dev": true, - "requires": { - "ini": "^1.3.4" - } - }, - "globals": { - "version": "11.12.0" - }, - "globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, - "requires": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - } - }, - "globby": { - "version": "11.1.0", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" - }, - "graceful-fs": { - "version": "4.2.10" - }, - "graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "graphql": { - "version": "16.11.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.11.0.tgz", - "integrity": "sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==" - }, - "graphql-config": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-4.5.0.tgz", - "integrity": "sha512-x6D0/cftpLUJ0Ch1e5sj1TZn6Wcxx4oMfmhaG9shM0DKajA9iR+j1z86GSTQ19fShbGvrSSvbIQsHku6aQ6BBw==", - "dev": true, - "requires": { - "@graphql-tools/graphql-file-loader": "^7.3.7", - "@graphql-tools/json-file-loader": "^7.3.7", - "@graphql-tools/load": "^7.5.5", - "@graphql-tools/merge": "^8.2.6", - "@graphql-tools/url-loader": "^7.9.7", - "@graphql-tools/utils": "^9.0.0", - "cosmiconfig": "8.0.0", - "jiti": "1.17.1", - "minimatch": "4.2.3", - "string-env-interpolation": "1.0.1", - "tslib": "^2.4.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.0.0.tgz", - "integrity": "sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==", - "dev": true, - "requires": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - } - }, - "jiti": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.17.1.tgz", - "integrity": "sha512-NZIITw8uZQFuzQimqjUxIrIcEdxYDFIe/0xYfIlVXTkiBjjyBEvgasj5bb0/cHtPRD/NziPbT312sFrkI5ALpw==", - "dev": true - } - } - }, - "graphql-http": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/graphql-http/-/graphql-http-1.22.4.tgz", - "integrity": "sha512-OC3ucK988teMf+Ak/O+ZJ0N2ukcgrEurypp8ePyJFWq83VzwRAmHxxr+XxrMpxO/FIwI4a7m/Fzv3tWGJv0wPA==", - "requires": {} - }, - "graphql-request": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-5.1.0.tgz", - "integrity": "sha512-0OeRVYigVwIiXhNmqnPDt+JhMzsjinxHE7TVy3Lm6jUzav0guVcL0lfSbi6jVTRAxcbwgyr6yrZioSHxf9gHzw==", - "dev": true, - "requires": { - "@graphql-typed-document-node/core": "^3.1.1", - "cross-fetch": "^3.1.5", - "extract-files": "^9.0.0", - "form-data": "^3.0.0" - }, - "dependencies": { - "extract-files": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-9.0.0.tgz", - "integrity": "sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==", - "dev": true - } - } - }, - "graphql-subscriptions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-3.0.0.tgz", - "integrity": "sha512-kZCdevgmzDjGAOqH7GlDmQXYAkuHoKpMlJrqF40HMPhUhM5ZWSFSxCwD/nSi6AkaijmMfsFhoJRGJ27UseCvRA==", - "dev": true, - "requires": {} - }, - "graphql-tag": { - "version": "2.12.6", - "requires": { - "tslib": "^2.1.0" - } - }, - "graphql-ws": { - "version": "5.11.2", - "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.11.2.tgz", - "integrity": "sha512-4EiZ3/UXYcjm+xFGP544/yW1+DVI8ZpKASFbzrV5EDTFWJp0ZvLl4Dy2fSZAzz9imKp5pZMIcjB0x/H69Pv/6w==", - "devOptional": true, - "requires": {} - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true - }, - "has-flag": { - "version": "4.0.0" - }, - "has-own-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", - "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "requires": { - "es-define-property": "^1.0.0" - } - }, - "has-proto": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", - "dev": true, - "requires": { - "dunder-proto": "^1.0.0" - } - }, - "has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" - }, - "has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "requires": { - "has-symbols": "^1.0.3" - } - }, - "hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "requires": { - "function-bind": "^1.1.2" - } - }, - "header-case": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", - "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", - "dev": true, - "requires": { - "capital-case": "^1.0.4", - "tslib": "^2.0.3" - } - }, - "hoist-non-react-statics": { - "version": "3.3.2", - "requires": { - "react-is": "^16.7.0" - } - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dev": true, - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, - "http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "http-errors": { - "version": "2.0.0", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "dependencies": { - "statuses": { - "version": "2.0.1" - } - } - }, - "http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-id": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/human-id/-/human-id-4.1.1.tgz", - "integrity": "sha512-3gKm/gCSUipeLsRYZbbdA1BD83lBoWUkZ7G9VFrhWPAU76KwYo5KR8V28bpoPm/ygy0x5/GCbpRQdY7VLYCoIg==", - "dev": true - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" - }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.2.1", - "dev": true - }, - "ignore": { - "version": "5.2.0", - "dev": true - }, - "ignore-walk": { - "version": "3.0.4", - "dev": true, - "requires": { - "minimatch": "^3.0.4" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "immutable": { - "version": "3.7.6", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz", - "integrity": "sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "parent-module": { - "version": "1.0.1", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "resolve-from": { - "version": "4.0.0", - "dev": true - } - } - }, - "import-from": { - "version": "4.0.0", - "dev": true - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "import-meta-resolve": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.2.tgz", - "integrity": "sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4" - }, - "inflight": { - "version": "1.0.6", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4" - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "inquirer": { - "version": "8.2.2", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - } - }, - "internal-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", - "dev": true, - "requires": { - "es-errors": "^1.3.0", - "hasown": "^2.0.2", - "side-channel": "^1.1.0" - } - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true - }, - "ipaddr.js": { - "version": "1.9.1" - }, - "is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - } - }, - "is-arguments": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", - "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", - "dev": true, - "requires": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - } - }, - "is-array-buffer": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", - "dev": true, - "requires": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - } - }, - "is-arrayish": { - "version": "0.2.1" - }, - "is-async-function": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", - "dev": true, - "requires": { - "async-function": "^1.0.0", - "call-bound": "^1.0.3", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - } - }, - "is-bigint": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", - "dev": true, - "requires": { - "has-bigints": "^1.0.2" - } - }, - "is-boolean-object": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", - "dev": true, - "requires": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - } - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true - }, - "is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "requires": { - "hasown": "^2.0.2" - } - }, - "is-data-view": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", - "dev": true, - "requires": { - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "is-typed-array": "^1.1.13" - } - }, - "is-date-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", - "dev": true, - "requires": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - } - }, - "is-extglob": { - "version": "2.1.1", - "dev": true - }, - "is-finalizationregistry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", - "dev": true, - "requires": { - "call-bound": "^1.0.3" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0" - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" - }, - "is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", - "dev": true, - "requires": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - } - }, - "is-glob": { - "version": "4.0.3", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-interactive": { - "version": "1.0.0", - "dev": true - }, - "is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true - }, - "is-lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-2.0.2.tgz", - "integrity": "sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } - }, - "is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-number-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", - "dev": true, - "requires": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - } - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, - "is-reference": { - "version": "1.2.1", - "dev": true, - "requires": { - "@types/estree": "*" - } - }, - "is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "requires": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - } - }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "requires": { - "is-unc-path": "^1.0.0" - } - }, - "is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "dev": true - }, - "is-shared-array-buffer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", - "dev": true, - "requires": { - "call-bound": "^1.0.3" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - }, - "is-string": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", - "dev": true, - "requires": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - } - }, - "is-subdir": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz", - "integrity": "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==", - "dev": true, - "requires": { - "better-path-resolve": "1.0.0" - } - }, - "is-symbol": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", - "dev": true, - "requires": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" - } - }, - "is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "dev": true, - "requires": { - "which-typed-array": "^1.1.16" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "requires": { - "unc-path-regex": "^0.1.2" - } - }, - "is-unicode-supported": { - "version": "0.1.0", - "dev": true - }, - "is-upper-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-2.0.2.tgz", - "integrity": "sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } - }, - "is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "dev": true - }, - "is-weakref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", - "dev": true, - "requires": { - "call-bound": "^1.0.3" - } - }, - "is-weakset": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", - "dev": true, - "requires": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - } - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "isexe": { - "version": "2.0.0" - }, - "isomorphic-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", - "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", - "dev": true, - "requires": { - "node-fetch": "^2.6.1", - "whatwg-fetch": "^3.4.1" - } - }, - "isomorphic-ws": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", - "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", - "dev": true, - "requires": {} - }, - "istanbul-lib-coverage": { - "version": "3.2.0" - }, - "istanbul-lib-instrument": { - "version": "5.2.0", - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0" - } - } - }, - "istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "requires": { - "semver": "^7.5.3" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jake": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", - "dev": true, - "requires": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", - "requires": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - } - }, - "jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", - "requires": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" - } - }, - "jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", - "requires": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-cli": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", - "requires": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - } - }, - "jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", - "requires": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - } - }, - "jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - } - }, - "jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", - "requires": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" - } - }, - "jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", - "requires": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - } - }, - "jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==" - }, - "jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", - "requires": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - } - }, - "jest-junit": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-16.0.0.tgz", - "integrity": "sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ==", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "strip-ansi": "^6.0.1", - "uuid": "^8.3.2", - "xml": "^1.0.1" - } - }, - "jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", - "requires": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - } - }, - "jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - } - }, - "jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "requires": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - } - }, - "jest-mock-random": { - "version": "1.1.1", - "dev": true - }, - "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "requires": {} - }, - "jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==" - }, - "jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", - "requires": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - } - }, - "jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", - "requires": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" - } - }, - "jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", - "requires": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - } - }, - "jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", - "requires": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - } - }, - "jest-serializer-html": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/jest-serializer-html/-/jest-serializer-html-7.1.0.tgz", - "integrity": "sha512-xYL2qC7kmoYHJo8MYqJkzrl/Fdlx+fat4U1AqYg+kafqwcKPiMkOcjWHPKhueuNEgr+uemhGc+jqXYiwCyRyLA==", - "dev": true, - "requires": { - "diffable-html": "^4.1.0" - } - }, - "jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "requires": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - } - }, - "jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "requires": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", - "requires": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, - "dependencies": { - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" - } - } - }, - "jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", - "requires": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" - } - }, - "jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "requires": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jiti": { - "version": "1.17.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.17.2.tgz", - "integrity": "sha512-Xf0nU8+8wuiQpLcqdb2HRyHqYwGk2Pd+F7kstyp20ZuqTyCmB9dqpX2NxaxFc1kovraa2bG6c1RL3W7XfapiZg==", - "dev": true - }, - "js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0" - }, - "js-yaml": { - "version": "4.1.0", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "jsesc": { - "version": "2.5.2" - }, - "json-parse-even-better-errors": { - "version": "2.3.1" - }, - "json-schema-traverse": { - "version": "0.4.1", - "dev": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg==", - "dev": true, - "requires": { - "jsonify": "~0.0.0" - } - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "dev": true - }, - "json-to-pretty-yaml": { - "version": "1.2.2", - "dev": true, - "requires": { - "remedial": "^1.0.7", - "remove-trailing-spaces": "^1.0.6" - } - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" - }, - "jsonfile": { - "version": "4.0.0", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA==", - "dev": true - }, - "jsonwebtoken": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", - "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", - "dev": true, - "requires": { - "jws": "^3.2.2", - "lodash": "^4.17.21", - "ms": "^2.1.1", - "semver": "^7.3.8" - } - }, - "jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dev": true, - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dev": true, - "requires": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" - }, - "levn": { - "version": "0.4.1", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lines-and-columns": { - "version": "1.2.4" - }, - "listr2": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", - "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", - "dev": true, - "requires": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.5", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - } - }, - "log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - } - } - }, - "locate-path": { - "version": "5.0.0", - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" - }, - "lodash.startcase": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", - "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", - "dev": true - }, - "lodash.sumby": { - "version": "4.6.0", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "loglevel": { - "version": "1.8.0" - }, - "long": { - "version": "4.0.0" - }, - "loose-envify": { - "version": "1.4.0", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } - }, - "lower-case-first": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-2.0.2.tgz", - "integrity": "sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } - }, - "magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", - "dev": true, - "requires": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "dependencies": { - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - } - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "make-error": { - "version": "1.3.6", - "devOptional": true - }, - "make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", - "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true - }, - "minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true - } - } - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "requires": { - "tmpl": "1.0.5" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true - }, - "math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" - }, - "media-typer": { - "version": "0.3.0" - }, - "memorizer": { - "version": "1.0.1", - "dev": true - }, - "merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==" - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "merge2": { - "version": "1.4.1", - "dev": true - }, - "meros": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/meros/-/meros-1.2.1.tgz", - "integrity": "sha512-R2f/jxYqCAGI19KhAvaxSOxALBMkaXWH2a7rOyqQw+ZmizX5bKkEYWLzdhC+U82ZVVPVp6MCXe3EkVligh+12g==", - "dev": true, - "requires": {} - }, - "methods": { - "version": "1.1.2" - }, - "micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "requires": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - } - }, - "mime": { - "version": "1.6.0" - }, - "mime-db": { - "version": "1.52.0" - }, - "mime-types": { - "version": "2.1.35", - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0" - }, - "minimatch": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.3.tgz", - "integrity": "sha512-lIUdtK5hdofgCTu3aT0sOaHsYR37viUuIc0rwnnDXImbwFRcumyLMeZaM0t0I/fgxS6s6JMfu0rLD1Wz9pv1ng==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "dev": true - }, - "minipass": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.4.tgz", - "integrity": "sha512-lwycX3cBMTvcejsHITUgYj6Gy6A7Nh4Q6h9NP4sTHY1ccJlC7yKzDmiShEHsJ16Jf1nKGDEaiHxiltsJEvk0nQ==", - "dev": true - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minipass-fetch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.1.tgz", - "integrity": "sha512-t9/wowtf7DYkwz8cfMSt0rMwiyNIBXf5CKZ3S5ZMqRqMYT0oLTp0x1WorMI9WTwvaPg21r1JbFxJMum8JrLGfw==", - "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^4.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "mkdirp": { - "version": "1.0.4", - "dev": true - }, - "mkdirp-then": { - "version": "1.2.0", - "dev": true, - "requires": { - "any-promise": "^1.1.0", - "mkdirp": "^0.5.0" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.6", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - } - } - }, - "mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true - }, - "ms": { - "version": "2.1.2" - }, - "mute-stream": { - "version": "0.0.8", - "dev": true - }, - "mz": { - "version": "2.7.0", - "dev": true, - "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "natural-compare": { - "version": "1.4.0" - }, - "natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "negotiator": { - "version": "0.6.3" - }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "nock": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.6.tgz", - "integrity": "sha512-o2zOYiCpzRqSzPj0Zt/dQ/DqZeYoaQ7TUonc/xUPjCGl9WeHpNbxgVvOquXYAaJzI0M9BXV3HTzG0p8IUAbBTQ==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "json-stringify-safe": "^5.0.1", - "propagate": "^2.0.0" - } - }, - "node-abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", - "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==" - }, - "node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true - }, - "node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "dev": true - }, - "node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", - "dev": true - }, - "node-int64": { - "version": "0.4.0" - }, - "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" - }, - "normalize-path": { - "version": "3.0.0" - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "requires": { - "path-key": "^3.0.0" - } - }, - "nullthrows": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", - "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", - "dev": true - }, - "object-assign": { - "version": "4.1.1" - }, - "object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==" - }, - "object-is": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", - "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1" - } - }, - "object-keys": { - "version": "1.1.1", - "dev": true - }, - "object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", - "dev": true, - "requires": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" - } - }, - "object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - } - }, - "object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - } - }, - "object.values": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", - "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", - "dev": true, - "requires": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - } - }, - "on-finished": { - "version": "2.4.1", - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true - }, - "once": { - "version": "1.4.0", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optimism": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.18.0.tgz", - "integrity": "sha512-tGn8+REwLRNFnb9WmcY5IfpOqeX2kpaYJ1s6Ae3mn12AeydLkR3j+jSCmVQFoXqU8D41PAJ1RG1rCRNWmNZVmQ==", - "requires": { - "@wry/caches": "^1.0.0", - "@wry/context": "^0.7.0", - "@wry/trie": "^0.4.3", - "tslib": "^2.3.0" - } - }, - "optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "requires": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - } - }, - "ora": { - "version": "5.4.1", - "dev": true, - "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "dev": true - }, - "outdent": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.5.0.tgz", - "integrity": "sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==", - "dev": true - }, - "own-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", - "dev": true, - "requires": { - "get-intrinsic": "^1.2.6", - "object-keys": "^1.1.1", - "safe-push-apply": "^1.0.0" - } - }, - "p-filter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", - "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", - "dev": true, - "requires": { - "p-map": "^2.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "requires": { - "p-limit": "^2.2.0" - }, - "dependencies": { - "p-limit": { - "version": "2.3.0", - "requires": { - "p-try": "^2.0.0" - } - } - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - }, - "p-try": { - "version": "2.2.0" - }, - "package-manager-detector": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.2.tgz", - "integrity": "sha512-VgXbyrSNsml4eHWIvxxG/nTL4wgybMTXCV2Un/+yEc3aDKKU6nQBZjbeP3Pl3qm9Qg92X/1ng4ffvCeD/zwHgg==", - "dev": true - }, - "param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "parent-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-2.0.0.tgz", - "integrity": "sha512-uo0Z9JJeWzv8BG+tRcapBKNJ0dro9cLyczGzulS6EfeyAdeC9sbojtW6XwvYxJkEne9En+J2XEl4zyglVeIwFg==", - "dev": true, - "requires": { - "callsites": "^3.1.0" - } - }, - "parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - } - }, - "parse-json": { - "version": "5.2.0", - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse-link-header": { - "version": "0.4.1", - "dev": true, - "requires": { - "xtend": "~4.0.0" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "path-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", - "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", - "dev": true, - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "path-exists": { - "version": "4.0.0" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-key": { - "version": "3.1.1" - }, - "path-parse": { - "version": "1.0.7" - }, - "path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", - "dev": true, - "requires": { - "path-root-regex": "^0.1.0" - } - }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" - }, - "path-type": { - "version": "4.0.0", - "dev": true - }, - "picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" - }, - "picomatch": { - "version": "2.3.1" - }, - "pify": { - "version": "4.0.1", - "dev": true - }, - "pirates": { - "version": "4.0.5" - }, - "pkg-dir": { - "version": "4.2.0", - "requires": { - "find-up": "^4.0.0" - } - }, - "possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "dev": true - }, - "prettier": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", - "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", - "dev": true - }, - "pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "requires": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - } - } - }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "requires": { - "asap": "~2.0.3" - } - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, - "promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "dependencies": { - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true - } - } - }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "prop-types": { - "version": "15.8.1", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "propagate": { - "version": "2.0.1", - "dev": true - }, - "proxy-addr": { - "version": "2.0.7", - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, - "punycode": { - "version": "2.1.1", - "dev": true - }, - "pure-rand": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.0.tgz", - "integrity": "sha512-rLSBxJjP+4DQOgcJAx6RZHT2he2pkhQdSnofG5VWyVl6GRq/K02ISOuOLcsMOrtKDIJb8JN2zm3FFzWNbezdPw==" - }, - "pvtsutils": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.2.tgz", - "integrity": "sha512-+Ipe2iNUyrZz+8K/2IOo+kKikdtfhRKzNpQbruF2URmqPtoqAs8g3xS7TJvFF2GcPXjh7DkqMnpVveRFq4PgEQ==", - "dev": true, - "requires": { - "tslib": "^2.4.0" - } - }, - "pvutils": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", - "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", - "dev": true - }, - "qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "requires": { - "side-channel": "^1.0.6" - } - }, - "qs-middleware": { - "version": "1.0.3", - "dev": true, - "requires": { - "qs": "~6.4.0" - }, - "dependencies": { - "qs": { - "version": "6.4.1", - "dev": true - } - } - }, - "queue-microtask": { - "version": "1.2.3", - "dev": true - }, - "range-parser": { - "version": "1.2.1" - }, - "raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "react-is": { - "version": "16.13.1" - }, - "read-yaml-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-1.1.0.tgz", - "integrity": "sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.5", - "js-yaml": "^3.6.1", - "pify": "^4.0.1", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true - } - } - }, - "readable-stream": { - "version": "3.6.0", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "reflect.getprototypeof": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", - "dev": true, - "requires": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.1", - "which-builtin-type": "^1.2.1" - } - }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "regexp.prototype.flags": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", - "dev": true, - "requires": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "set-function-name": "^2.0.2" - } - }, - "rehackt": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/rehackt/-/rehackt-0.1.0.tgz", - "integrity": "sha512-7kRDOuLHB87D/JESKxQoRwv4DzbIdwkAGQ7p6QKGdVlY1IZheUnVhlk/4UZlNUVxdAXpyxikE3URsG067ybVzw==", - "requires": {} - }, - "relay-runtime": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/relay-runtime/-/relay-runtime-12.0.0.tgz", - "integrity": "sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "fbjs": "^3.0.0", - "invariant": "^2.2.4" - } - }, - "remedial": { - "version": "1.0.8", - "dev": true - }, - "remove-trailing-separator": { - "version": "1.1.0", - "dev": true - }, - "remove-trailing-spaces": { - "version": "1.0.8", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true - }, - "require-directory": { - "version": "2.1.1" - }, - "require-main-filename": { - "version": "2.0.0", - "dev": true - }, - "requisition": { - "version": "1.7.0", - "dev": true, - "requires": { - "any-promise": "^1.1.0", - "cookie": "^0.2.3", - "destroy": "^1.0.3", - "fs-cp": "^1.2.0", - "http-errors": "^1.2.7", - "media-typer": "^0.3.0", - "memorizer": "^1.0.0", - "methods": "^1.1.0", - "mime-types": "^2.0.2", - "mz": "^2.1.0", - "parse-link-header": "^0.4.1", - "statuses": "^1.2.0", - "stream-to-array": "^2.0.2", - "temp-path": "^1.0.0", - "type-is": "^1.5.2" - }, - "dependencies": { - "cookie": { - "version": "0.2.4", - "dev": true - }, - "depd": { - "version": "1.1.2", - "dev": true - }, - "http-errors": { - "version": "1.8.1", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - } - } - } - }, - "resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "requires": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0" - }, - "resolve-global": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", - "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", - "dev": true, - "requires": { - "global-dirs": "^0.1.1" - } - }, - "resolve.exports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.0.tgz", - "integrity": "sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==" - }, - "restore-cursor": { - "version": "3.1.0", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "retry": { - "version": "0.13.1" - }, - "reusify": { - "version": "1.0.4", - "dev": true - }, - "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "rollup": { - "version": "3.29.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz", - "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "run-async": { - "version": "2.4.1", - "dev": true - }, - "run-parallel": { - "version": "1.2.0", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rxjs": { - "version": "7.5.5", - "dev": true, - "requires": { - "tslib": "^2.1.0" - } - }, - "safe-array-concat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", - "dev": true, - "requires": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "has-symbols": "^1.1.0", - "isarray": "^2.0.5" - } - }, - "safe-buffer": { - "version": "5.2.1" - }, - "safe-push-apply": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", - "dev": true, - "requires": { - "es-errors": "^1.3.0", - "isarray": "^2.0.5" - } - }, - "safe-regex-test": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", - "dev": true, - "requires": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" - } - }, - "safer-buffer": { - "version": "2.1.2" - }, - "scuid": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/scuid/-/scuid-1.1.0.tgz", - "integrity": "sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg==", - "dev": true - }, - "semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==" - }, - "send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - } - } - }, - "sentence-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", - "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case-first": "^2.0.2" - } - }, - "serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "requires": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "dev": true - }, - "set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "requires": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - } - }, - "set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "requires": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - } - }, - "set-proto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", - "dev": true, - "requires": { - "dunder-proto": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0" - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "setprototypeof": { - "version": "1.2.0" - }, - "sha.js": { - "version": "2.4.11", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shebang-command": { - "version": "2.0.0", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0" - }, - "shell-quote": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", - "dev": true - }, - "side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "requires": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - } - }, - "side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "requires": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - } - }, - "side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "requires": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - } - }, - "side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "requires": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - } - }, - "signal-exit": { - "version": "3.0.7" - }, - "signedsource": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/signedsource/-/signedsource-1.0.0.tgz", - "integrity": "sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==", - "dev": true - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "slash": { - "version": "3.0.0" - }, - "smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true - }, - "snake-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "dev": true, - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", - "dev": true, - "requires": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - } - }, - "socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "spawndamnit": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spawndamnit/-/spawndamnit-3.0.1.tgz", - "integrity": "sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.5", - "signal-exit": "^4.0.1" - }, - "dependencies": { - "signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true - } - } - }, - "sponge-case": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sponge-case/-/sponge-case-1.0.1.tgz", - "integrity": "sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } - }, - "sprintf-js": { - "version": "1.0.3" - }, - "ssri": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.1.tgz", - "integrity": "sha512-WVy6di9DlPOeBWEjMScpNipeSX2jIZBGEn5Uuo8Q7aIuFEuDX0pw8RxcOjlD1TWP4obi24ki7m/13+nFpcbXrw==", - "dev": true, - "requires": { - "minipass": "^4.0.0" - } - }, - "stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" - } - } - }, - "statuses": { - "version": "1.5.0", - "dev": true - }, - "stop-iteration-iterator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", - "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", - "dev": true, - "requires": { - "es-errors": "^1.3.0", - "internal-slot": "^1.1.0" - } - }, - "stream-events": { - "version": "1.0.5", - "dev": true, - "requires": { - "stubs": "^3.0.0" - } - }, - "stream-to-array": { - "version": "2.3.0", - "dev": true, - "requires": { - "any-promise": "^1.1.0" - } - }, - "streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-env-interpolation": { - "version": "1.0.1", - "dev": true - }, - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string.prototype.trim": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", - "dev": true, - "requires": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-object-atoms": "^1.0.0", - "has-property-descriptors": "^1.0.2" - } - }, - "string.prototype.trimend": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - } - }, - "string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" - }, - "strip-json-comments": { - "version": "3.1.1" - }, - "stubs": { - "version": "3.0.0", - "dev": true - }, - "superagent": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-10.2.1.tgz", - "integrity": "sha512-O+PCv11lgTNJUzy49teNAWLjBZfc+A1enOwTpLlH6/rsvKcTwcdTT8m9azGkVqM7HBl5jpyZ7KTPhHweokBcdg==", - "requires": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.4", - "debug": "^4.3.4", - "fast-safe-stringify": "^2.1.1", - "form-data": "^4.0.0", - "formidable": "^3.5.4", - "methods": "^1.1.2", - "mime": "2.6.0", - "qs": "^6.11.0" - }, - "dependencies": { - "form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" - } - } - }, - "supertest": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-7.1.1.tgz", - "integrity": "sha512-aI59HBTlG9e2wTjxGJV+DygfNLgnWbGdZxiA/sgrnNNikIW8lbDvCtF6RnhZoJ82nU7qv7ZLjrvWqCEm52fAmw==", - "requires": { - "methods": "^1.1.2", - "superagent": "^10.2.1" - } - }, - "supports-color": { - "version": "7.2.0", - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0" - }, - "swap-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-2.0.2.tgz", - "integrity": "sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } - }, - "symbol-observable": { - "version": "4.0.0" - }, - "tar": { - "version": "6.1.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz", - "integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^4.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "dependencies": { - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - } - } - }, - "teeny-request": { - "version": "7.1.1", - "dev": true, - "requires": { - "http-proxy-agent": "^4.0.0", - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.1", - "stream-events": "^1.0.5", - "uuid": "^8.0.0" - }, - "dependencies": { - "@tootallnate/once": { - "version": "1.1.2", - "dev": true - }, - "http-proxy-agent": { - "version": "4.0.1", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - } - } - }, - "temp-path": { - "version": "1.0.0", - "dev": true - }, - "term-size": { - "version": "2.2.1", - "dev": true - }, - "test-exclude": { - "version": "6.0.0", - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "test-listen": { - "version": "1.1.0", - "dev": true - }, - "text-table": { - "version": "0.2.0", - "dev": true - }, - "thenify": { - "version": "3.3.1", - "dev": true, - "requires": { - "any-promise": "^1.0.0" - } - }, - "thenify-all": { - "version": "1.6.0", - "dev": true, - "requires": { - "thenify": ">= 3.1.0 < 4" - } - }, - "through": { - "version": "2.3.8", - "dev": true - }, - "title-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/title-case/-/title-case-3.0.3.tgz", - "integrity": "sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } - }, - "tmp": { - "version": "0.0.33", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" - }, - "to-fast-properties": { - "version": "2.0.0" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1" - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "ts-graphviz": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/ts-graphviz/-/ts-graphviz-1.8.2.tgz", - "integrity": "sha512-5YhbFoHmjxa7pgQLkB07MtGnGJ/yhvjmc9uhsnDBEICME6gkPf83SBwLDQqGDoCa3XzUMWLk1AU2Wn1u1naDtA==", - "dev": true - }, - "ts-invariant": { - "version": "0.10.3", - "requires": { - "tslib": "^2.1.0" - } - }, - "ts-jest": { - "version": "29.2.6", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.6.tgz", - "integrity": "sha512-yTNZVZqc8lSixm+QGVFcPe6+yj7+TWZwIesuOWvfcn4B9bz5x4NDzVCQQjOs7Hfouu36aEqfEbo9Qpo+gq8dDg==", - "dev": true, - "requires": { - "bs-logger": "^0.2.6", - "ejs": "^3.1.10", - "fast-json-stable-stringify": "^2.1.0", - "jest-util": "^29.0.0", - "json5": "^2.2.3", - "lodash.memoize": "^4.1.2", - "make-error": "^1.3.6", - "semver": "^7.7.1", - "yargs-parser": "^21.1.1" - } - }, - "ts-log": { - "version": "2.2.4", - "dev": true - }, - "ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "optional": true, - "peer": true, - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - } - }, - "tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "dev": true - } - } - }, - "tslib": { - "version": "2.4.0" - }, - "tsutils": { - "version": "3.21.0", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "dev": true - } - } - }, - "type-check": { - "version": "0.4.0", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" - }, - "type-fest": { - "version": "0.21.3" - }, - "type-is": { - "version": "1.6.18", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "dev": true, - "requires": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - } - }, - "typed-array-byte-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", - "dev": true, - "requires": { - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.14" - } - }, - "typed-array-byte-offset": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.15", - "reflect.getprototypeof": "^1.0.9" - } - }, - "typed-array-length": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" - } - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", - "devOptional": true - }, - "ua-parser-js": { - "version": "0.7.35", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", - "integrity": "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==", - "dev": true - }, - "unbox-primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", - "dev": true, - "requires": { - "call-bound": "^1.0.3", - "has-bigints": "^1.0.2", - "has-symbols": "^1.1.0", - "which-boxed-primitive": "^1.1.1" - } - }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", - "dev": true - }, - "undici": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.12.0.tgz", - "integrity": "sha512-zMLamCG62PGjd9HHMpo05bSLvvwWOZgGeiWlN/vlqu3+lRo3elxktVGEyLMX+IO7c2eflLjcW74AlkhEZm15mg==", - "dev": true, - "requires": { - "busboy": "^1.6.0" - } - }, - "unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", - "dev": true, - "requires": { - "unique-slug": "^4.0.0" - } - }, - "unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "requires": { - "crypto-random-string": "^2.0.0" - } - }, - "universalify": { - "version": "0.1.2", - "dev": true - }, - "unixify": { - "version": "1.0.0", - "dev": true, - "requires": { - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "unpipe": { - "version": "1.0.0" - }, - "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "upper-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", - "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } - }, - "upper-case-first": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", - "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } - }, - "uri-js": { - "version": "4.4.1", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urlgrey": { - "version": "1.0.0", - "dev": true, - "requires": { - "fast-url-parser": "^1.1.3" - } - }, - "urlpattern-polyfill": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-7.0.0.tgz", - "integrity": "sha512-fErMjbZwveQIk+EY4vxM5GKDuInBOigxmjM6WT2R/cV2ETVyFtDHeU+VmbnfuJ5sp0qNbyUBelTO/60/d+/SSQ==", - "dev": true, - "requires": { - "braces": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "dev": true - }, - "utils-merge": { - "version": "1.0.1" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "optional": true, - "peer": true - }, - "v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", - "requires": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - } - }, - "value-or-promise": { - "version": "1.0.11", - "dev": true - }, - "vary": { - "version": "1.1.2" - }, - "vscode-languageserver-textdocument": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz", - "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==", - "dev": true - }, - "vscode-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz", - "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==", - "dev": true - }, - "walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "requires": { - "makeerror": "1.0.12" - } - }, - "wcwidth": { - "version": "1.0.1", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", - "dev": true - }, - "webcrypto-core": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.7.5.tgz", - "integrity": "sha512-gaExY2/3EHQlRNNNVSrbG2Cg94Rutl7fAaKILS1w8ZDhGxdFOaw6EbCfHIxPy9vt/xwp5o0VQAx9aySPF6hU1A==", - "dev": true, - "requires": { - "@peculiar/asn1-schema": "^2.1.6", - "@peculiar/json-schema": "^1.1.12", - "asn1js": "^3.0.1", - "pvtsutils": "^1.3.2", - "tslib": "^2.4.0" - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", - "dev": true - }, - "whatwg-mimetype": { - "version": "3.0.0" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "2.0.2", - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", - "dev": true, - "requires": { - "is-bigint": "^1.1.0", - "is-boolean-object": "^1.2.1", - "is-number-object": "^1.1.1", - "is-string": "^1.1.1", - "is-symbol": "^1.1.1" - } - }, - "which-builtin-type": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", - "dev": true, - "requires": { - "call-bound": "^1.0.2", - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", - "is-async-function": "^2.0.0", - "is-date-object": "^1.1.0", - "is-finalizationregistry": "^1.1.0", - "is-generator-function": "^1.0.10", - "is-regex": "^1.2.1", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.1.0", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.16" - } - }, - "which-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "dev": true, - "requires": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - } - }, - "which-module": { - "version": "2.0.0", - "dev": true - }, - "which-typed-array": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "for-each": "^0.3.5", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2" - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "dev": true, - "requires": {} - }, - "xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true - }, - "xml": { - "version": "1.0.1", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "dev": true - }, - "y18n": { - "version": "5.0.8" - }, - "yallist": { - "version": "4.0.0", - "dev": true - }, - "yaml": { - "version": "1.10.2", - "dev": true - }, - "yaml-ast-parser": { - "version": "0.0.43", - "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", - "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==", - "dev": true - }, - "yargs": { - "version": "17.4.1", - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" - }, - "yn": { - "version": "3.1.1", - "optional": true, - "peer": true - }, - "yocto-queue": { - "version": "0.1.0" - }, - "zen-observable": { - "version": "0.8.15" - }, - "zen-observable-ts": { - "version": "1.2.5", - "requires": { - "zen-observable": "0.8.15" - } } } } diff --git a/package.json b/package.json index 735d925ea0c..c5652fc5f2d 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,6 @@ "test:smoke:prepare": "smoke-test/prepare.sh", "test:smoke:run": "smoke-test/smoke-test.sh", "test:ci": "npm run coverage -- --ci --maxWorkers=2 --reporters=default --reporters=jest-junit", - "test:one-integration": "npm run test -- packages/server/src/__tests__/express4/integration.test.ts", "coverage": "npm test -- --coverage", "coverage:upload": "codecov", "codegen": "graphql-codegen", @@ -34,51 +33,37 @@ "packages/*" ], "engines": { - "node": ">=14.16.0", - "npm": ">=8.5.0" + "node": ">=20", + "npm": ">=8.19.2" }, "devDependencies": { "@apollo/client": "3.13.8", "@apollo/gateway": "2.11.2", "@apollo/subgraph": "2.11.2", - "@apollo/utils.createhash": "2.0.2", + "@apollo/utils.createhash": "3.0.0", "@changesets/changelog-github": "0.5.1", "@changesets/cli": "2.29.5", - "@graphql-codegen/cli": "3.3.1", - "@graphql-codegen/typescript-operations": "3.0.4", - "@graphql-tools/mock": "8.7.20", - "@graphql-tools/schema": "9.0.19", + "@graphql-codegen/cli": "5.0.6", + "@graphql-codegen/typescript-operations": "4.6.1", + "@graphql-tools/mock": "9.0.23", + "@graphql-tools/schema": "10.0.23", "@rollup/plugin-commonjs": "28.0.6", "@types/async-retry": "1.4.9", - "@types/compression": "1.8.1", + "@types/body-parser": "1.19.5", "@types/cors": "2.8.19", - "@types/express": "4.17.23", - "@types/express-serve-static-core": "4.19.6", - "@types/lodash": "4.17.19", + "@types/finalhandler": "1.2.3", "@types/lodash.sumby": "4.6.9", - "@types/lodash.xorby": "4.7.9", "@types/negotiator": "0.6.4", - "@types/node": "14.18.63", - "@types/node-fetch": "2.6.12", - "@types/qs-middleware": "1.0.4", - "@types/retry": "0.12.5", + "@types/node": "20.14.8", "@types/superagent": "8.1.9", "@types/supertest": "6.0.3", - "@types/test-listen": "1.1.2", - "@types/type-is": "1.6.7", - "@types/uuid": "9.0.8", "@types/whatwg-mimetype": "3.0.2", - "@typescript-eslint/eslint-plugin": "5.62.0", - "@typescript-eslint/parser": "5.62.0", - "@vendia/serverless-express": "4.12.6", "awaiting": "3.0.0", "codecov": "3.8.3", - "compression": "1.8.0", "cors": "2.8.5", - "cspell": "6.31.3", - "eslint": "8.57.1", + "cspell": "9.0.2", + "eslint": "9.27.0", "eslint-plugin-import": "2.32.0", - "express": "4.21.2", "graphql": "16.11.0", "graphql-subscriptions": "3.0.0", "graphql-tag": "2.12.6", @@ -89,16 +74,15 @@ "jest-mock-random": "1.1.1", "jest-serializer-html": "7.1.0", "lodash.sumby": "4.6.0", - "nock": "13.5.6", - "node-fetch": "2.7.0", + "nock": "14.0.4", "prettier": "3.6.2", - "qs-middleware": "1.0.3", + "prettier-2": "npm:prettier@2.8.8", "requisition": "1.7.0", - "rollup": "3.29.5", + "rollup": "4.41.0", "supertest": "7.1.1", - "test-listen": "1.1.0", - "ts-jest": "29.2.6", - "typescript": "5.4.5" + "ts-jest": "29.3.4", + "typescript": "5.8.3", + "typescript-eslint": "8.32.1" }, "jest": { "projects": [ diff --git a/packages/cache-control-types/src/index.ts b/packages/cache-control-types/src/index.ts index 7d5c7f66b73..975cc3eb5ed 100644 --- a/packages/cache-control-types/src/index.ts +++ b/packages/cache-control-types/src/index.ts @@ -1,8 +1,3 @@ -// NOTE: Once Apollo Server 4 is released, move this package into the -// apollo-server repo. We're placing it in the apollo-utils repo for now to -// enable us to make non-alpha releases that can be used on the apollo-server -// version-4 branch. - import type { GraphQLCompositeType, GraphQLResolveInfo } from 'graphql'; /** @@ -68,7 +63,7 @@ export interface GraphQLResolveInfoWithCacheControl // `apollo-server-core` in your TypeScript build, then there's an ambient // `declare module` floating around that monkey-patches GraphQLResolveInfo to // have a cacheControl field. This led to lots of problems, which is why in - // AS4 we're moving towards the approach in this file where don't assume every + // AS4 we moved towards the approach in this file where don't assume every // GraphQLResolveInfo is a GraphQLResolveInfoWithCacheControl. The AS3 type is // very slightly incompatible with the type in the file, since we changed // CacheScope to be a union of strings rather than an enum. They have the same diff --git a/packages/gateway-interface/README.md b/packages/gateway-interface/README.md index a43720b36da..6bbb3da1777 100644 --- a/packages/gateway-interface/README.md +++ b/packages/gateway-interface/README.md @@ -6,6 +6,6 @@ The types in this package describe the API as of Gateway 0.35.0 (ie, with onSche Note that the cache scope field (eg, on `requestContext.overallCachePolicy.scope`) is defined as `any` in this package. That's because in AS3 this type is an enum, and enums in TypeScript are _not_ structurally typed. So we can't actually create an object of this type without depending on AS3 (or updating AS3 to get its definition from somewhere shared). -We have updated `@apollo/gateway` (v0 and v2) to define its types from this package rather than `apollo-server-types`. This allows Gateway to be compatible with both AS3 and AS4 (and even AS2, for Gateway 0.x) without needing to pull either package's code into the TypeScript build. +We have updated `@apollo/gateway` (v0 and v2) to define its types from this package rather than `apollo-server-types`. This allows Gateway to be compatible with AS v3-v5 (and even AS2, for Gateway 0.x) without needing to pull either package's code into the TypeScript build. -Apollo Server 4 directly depends on this package and uses its types to construct its calls to the Gateway. +Apollo Server directly depends on this package and uses its types to construct its calls to the Gateway. diff --git a/packages/gateway-interface/package.json b/packages/gateway-interface/package.json index cff4e55fd1b..5bed077524e 100644 --- a/packages/gateway-interface/package.json +++ b/packages/gateway-interface/package.json @@ -26,9 +26,9 @@ }, "homepage": "https://github.com/apollographql/apollo-server#readme", "dependencies": { - "@apollo/utils.fetcher": "^2.0.0", - "@apollo/utils.logger": "^2.0.0", - "@apollo/utils.keyvaluecache": "^2.1.0", + "@apollo/utils.fetcher": "^3.0.0", + "@apollo/utils.logger": "^3.0.0", + "@apollo/utils.keyvaluecache": "^4.0.0", "@apollo/usage-reporting-protobuf": "^4.1.1" }, "peerDependencies": { diff --git a/packages/gateway-interface/src/index.ts b/packages/gateway-interface/src/index.ts index 33e89b094e6..2a5766129c8 100644 --- a/packages/gateway-interface/src/index.ts +++ b/packages/gateway-interface/src/index.ts @@ -63,7 +63,7 @@ export interface GatewayGraphQLRequestContext> { readonly errors?: ReadonlyArray; readonly metrics: GatewayGraphQLRequestMetrics; debug?: boolean; - // In AS3 and AS4, this field is always set and is a GatewayCachePolicy, but + // In AS v3-5, this field is always set and is a GatewayCachePolicy, but // in AS2 it is not always set and is only a GatewayCacheHint. We can't just // declare this as `readonly overallCachePolicy?: GatewayCachePolicy | // GatewayCacheHint` because then older versions of Gateway built against AS3 diff --git a/packages/integration-testsuite/README.md b/packages/integration-testsuite/README.md index e5318a6fab5..f993d7fde2d 100644 --- a/packages/integration-testsuite/README.md +++ b/packages/integration-testsuite/README.md @@ -2,8 +2,8 @@ This package serves as a set of Jest tests for Apollo Server integration authors. Any Node package which functions as the HTTP (or HTTP framework) -binding and Apollo Server can run these tests to ensure parity with the 1st -party Express integration. +binding and Apollo Server can run these tests to ensure parity with built-in +"standalone" implementation. > Note: this package is only intended for integration _authors_. If your project > _runs_ an Apollo Server instance, you probably shouldn't use this. @@ -17,17 +17,17 @@ follow the pattern: { "name": "my-server-integration", "devDependencies": { - "@apollo/server": "4.1.0", - "@apollo/server-integration-testsuite": "4.1.0" + "@apollo/server": "5.0.0", + "@apollo/server-integration-testsuite": "5.0.0" }, "peerDependencies": { - "@apollo/server": "^4.0.0" + "@apollo/server": "^4.0.0 || ^5.0.0" } } ``` In the example above, the `peerDependencies` allow your configuration to be used -with the full range of Apollo Server v4 packages. The `devDependencies` which +with the full range of Apollo Server v4 - v5 packages. The `devDependencies` which your integration is built and tested against should stay up-to-date with the latest version of Apollo Server, and the server and testsuite packages should be in lockstep with each other. @@ -35,7 +35,7 @@ in lockstep with each other. This package imposes dependency requirements on your project, however it should only require they be installed as `devDependencies`: * `@apollo/server`'s version must match the version of the test suite. -* The test suite expects you to be running `jest@28`. It's possible that other +* The test suite expects you to be running `jest@29`. It's possible that other versions of Jest may be compatible, but this use case is unsupported and might lead to unexpected behavior. It's fine for your project to use a testing framework other than Jest, but you'll still need to configure Jest in your diff --git a/packages/integration-testsuite/package.json b/packages/integration-testsuite/package.json index 980452f98c3..aacd59e397a 100644 --- a/packages/integration-testsuite/package.json +++ b/packages/integration-testsuite/package.json @@ -34,26 +34,25 @@ }, "homepage": "https://github.com/apollographql/apollo-server#readme", "engines": { - "node": ">=14.16.0" + "node": ">=20" }, "dependencies": { "@apollo/cache-control-types": "^1.0.3", "@apollo/client": "^3.6.9", "@apollo/server": "4.12.2", "@apollo/usage-reporting-protobuf": "^4.1.1", - "@apollo/utils.createhash": "^2.0.2", - "@apollo/utils.keyvaluecache": "^2.1.0", + "@apollo/utils.createhash": "^3.0.0", + "@apollo/utils.keyvaluecache": "^4.0.0", "express": "^4.21.1", "graphql-http": "1.22.4", "graphql-tag": "^2.12.6", "loglevel": "^1.8.0", - "node-fetch": "^2.6.7", "superagent": "^10.0.0", "supertest": "^7.0.0" }, "peerDependencies": { - "@jest/globals": "28.x || 29.x", - "graphql": "^16.6.0", - "jest": "28.x || 29.x" + "@jest/globals": "29.x", + "graphql": "^16.11.0", + "jest": "29.x" } } diff --git a/packages/integration-testsuite/src/apolloFetch.ts b/packages/integration-testsuite/src/apolloFetch.ts index c38698d7ed9..32379303b77 100644 --- a/packages/integration-testsuite/src/apolloFetch.ts +++ b/packages/integration-testsuite/src/apolloFetch.ts @@ -1,5 +1,3 @@ -import fetch, { type RequestInit, type Response } from 'node-fetch'; - export interface ApolloFetch { (operation: GraphQLRequest): Promise; use: (middlewares: MiddlewareInterface) => ApolloFetch; diff --git a/packages/integration-testsuite/src/apolloServerTests.ts b/packages/integration-testsuite/src/apolloServerTests.ts index e57c41e1123..27bd28007a0 100644 --- a/packages/integration-testsuite/src/apolloServerTests.ts +++ b/packages/integration-testsuite/src/apolloServerTests.ts @@ -35,7 +35,6 @@ import { type ApolloServerPlugin, HeaderMap, } from '@apollo/server'; -import fetch, { type Headers } from 'node-fetch'; import resolvable, { type Resolvable } from './resolvable.js'; import type { AddressInfo } from 'net'; @@ -361,9 +360,12 @@ export function defineIntegrationTestSuiteApolloServerTests( }); expect(result.data).toBeUndefined(); expect(result.errors).toBeDefined(); - expect(result.errors[0].message).toMatch( - /got invalid value 2; String cannot represent a non string value: 2/, - ); + expect([ + // graphql v16 + `Variable "$x" got invalid value 2; String cannot represent a non string value: 2`, + // graphql v17 + 'Variable "$x" has invalid value: String cannot represent a non string value: 2', + ]).toContain(result.errors[0].message); expect(result.errors[0].extensions.code).toBe('BAD_USER_INPUT'); }); @@ -383,9 +385,12 @@ export function defineIntegrationTestSuiteApolloServerTests( }); expect(result.data).toBeUndefined(); expect(result.errors).toBeDefined(); - expect(result.errors[0].message).toMatch( + expect([ + // graphql v16 `Variable "$x" of required type "String!" was not provided.`, - ); + // graphql v17 + 'Variable "$x" has invalid value: Expected a value of non-null type "String!" to be provided.', + ]).toContain(result.errors[0].message); expect(result.errors[0].extensions.code).toBe('BAD_USER_INPUT'); }); @@ -405,9 +410,12 @@ export function defineIntegrationTestSuiteApolloServerTests( }); expect(result.data).toBeUndefined(); expect(result.errors).toBeDefined(); - expect(result.errors[0].message).toMatch( + expect([ + // graphql v16 `Variable "$x" of required type "[String]!" was not provided.`, - ); + // graphql v17 + 'Variable "$x" has invalid value: Expected a value of non-null type "[String]!" to be provided.', + ]).toContain(result.errors[0].message); expect(result.errors[0].extensions.code).toBe('BAD_USER_INPUT'); }); @@ -428,9 +436,12 @@ export function defineIntegrationTestSuiteApolloServerTests( }); expect(result.data).toBeUndefined(); expect(result.errors).toBeDefined(); - expect(result.errors[0].message).toMatch( + expect([ + // graphql v16 `Variable "$x" of non-null type "String!" must not be null.`, - ); + // graphql v17 + 'Variable "$x" has invalid value: Expected value of non-null type "String!" not to be null.', + ]).toContain(result.errors[0].message); expect(result.errors[0].extensions.code).toBe('BAD_USER_INPUT'); }); @@ -451,9 +462,12 @@ export function defineIntegrationTestSuiteApolloServerTests( }); expect(result.data).toBeUndefined(); expect(result.errors).toBeDefined(); - expect(result.errors[0].message).toMatch( + expect([ + // graphql v16 `Variable "$x" of non-null type "[String]!" must not be null.`, - ); + // graphql v17 + 'Variable "$x" has invalid value: Expected value of non-null type "[String]!" not to be null.', + ]).toContain(result.errors[0].message); expect(result.errors[0].extensions.code).toBe('BAD_USER_INPUT'); }); @@ -474,10 +488,13 @@ export function defineIntegrationTestSuiteApolloServerTests( }); expect(result.data).toBeUndefined(); expect(result.errors).toBeDefined(); - expect(result.errors[0].message).toBe( + expect([ + // graphql v16 `Variable "$x" got invalid value null at "x[0]"; ` + `Expected non-nullable type "String!" not to be null.`, - ); + // graphql v17 + 'Variable "$x" has invalid value at [0]: Expected value of non-null type "String!" not to be null.', + ]).toContain(result.errors[0].message); expect(result.errors[0].extensions.code).toBe('BAD_USER_INPUT'); }); @@ -510,23 +527,17 @@ export function defineIntegrationTestSuiteApolloServerTests( query: `query ($x:CustomScalar) {hello(x:$x)}`, variables: { x: 'foo' }, }); - expect(result).toMatchInlineSnapshot(` + expect(result.errors).toHaveLength(1); + expect([ + // graphql v16 + 'Variable "$x" got invalid value "foo"; Something bad happened', + // graphql v17 + 'Variable "$x" has invalid value: Something bad happened', + ]).toContain(result.errors[0].message); + expect(result.errors[0].extensions).toMatchInlineSnapshot(` { - "errors": [ - { - "extensions": { - "code": "BAD_USER_INPUT", - "custom": "foo", - }, - "locations": [ - { - "column": 8, - "line": 1, - }, - ], - "message": "Variable "$x" got invalid value "foo"; Something bad happened", - }, - ], + "code": "BAD_USER_INPUT", + "custom": "foo", } `); }); @@ -560,23 +571,17 @@ export function defineIntegrationTestSuiteApolloServerTests( query: `query ($x:CustomScalar) {hello(x:$x)}`, variables: { x: 'foo' }, }); - expect(result).toMatchInlineSnapshot(` + expect(result.errors).toHaveLength(1); + expect([ + // graphql v16 + 'Variable "$x" got invalid value "foo"; Something bad happened', + // graphql v17 + 'Variable "$x" has invalid value: Something bad happened', + ]).toContain(result.errors[0].message); + expect(result.errors[0].extensions).toMatchInlineSnapshot(` { - "errors": [ - { - "extensions": { - "code": "CUSTOMIZED", - "custom": "foo", - }, - "locations": [ - { - "column": 8, - "line": 1, - }, - ], - "message": "Variable "$x" got invalid value "foo"; Something bad happened", - }, - ], + "code": "CUSTOMIZED", + "custom": "foo", } `); }); @@ -966,13 +971,18 @@ export function defineIntegrationTestSuiteApolloServerTests( > = {}, constructorOptions: Partial = {}, plugins: ApolloServerPlugin[] = [], + includeDeferDirective: boolean = false, ) => { uri = await createServerAndGetUrl({ typeDefs: gql` - directive @defer( - if: Boolean! = true - label: String - ) on FRAGMENT_SPREAD | INLINE_FRAGMENT + ${includeDeferDirective + ? ` + directive @defer( + if: Boolean! = true + label: String + ) on FRAGMENT_SPREAD | INLINE_FRAGMENT + ` + : ''} enum CacheControlScope { PUBLIC @@ -1173,7 +1183,7 @@ export function defineIntegrationTestSuiteApolloServerTests( (process.env.INCREMENTAL_DELIVERY_TESTS_ENABLED ? it : it.skip)( 'includes all fields with defer', async () => { - await setupApolloServerAndFetchPair(); + await setupApolloServerAndFetchPair({}, {}, [], true); const response = await fetch(uri, { method: 'POST', headers: { @@ -2371,13 +2381,6 @@ export function defineIntegrationTestSuiteApolloServerTests( } let requestCount = 0; - const requestAgent = new http.Agent({ keepAlive: false }); - const realCreateConnection = (requestAgent as any).createConnection; - (requestAgent as any).createConnection = function () { - requestCount++; - return realCreateConnection.apply(this, arguments); - }; - let reportErrorPromiseResolve: (error: Error) => void; const reportErrorPromise = new Promise( (resolve) => (reportErrorPromiseResolve = resolve), @@ -2398,8 +2401,10 @@ export function defineIntegrationTestSuiteApolloServerTests( endpointUrl: fakeUsageReportingUrl, reportIntervalMs: 1, maxAttempts: 3, - fetcher: (url, options) => - fetch(url, { ...options, agent: requestAgent }), + fetcher: (url, options) => { + requestCount++; + return fetch(url, options); + }, logger: quietLogger, reportErrorFunction(error: Error) { reportErrorPromiseResolve(error); @@ -2431,13 +2436,12 @@ export function defineIntegrationTestSuiteApolloServerTests( const sendingError = await reportErrorPromise; expect(sendingError).toBeTruthy(); if (status === 'cannot-connect') { - expect(sendingError.message).toContain( - 'Error sending report to Apollo servers', + expect(sendingError.message).toBe( + 'Error sending report to Apollo servers: fetch failed', ); - expect(sendingError.message).toContain('ECONNREFUSED'); } else if (status === 'timeout') { expect(sendingError.message).toBe( - 'Error sending report to Apollo servers: The user aborted a request.', + 'Error sending report to Apollo servers: The operation was aborted due to timeout', ); } else { expect(sendingError.message).toBe( diff --git a/packages/integration-testsuite/src/httpSpecTests.ts b/packages/integration-testsuite/src/httpSpecTests.ts index a4a3b259214..7463e8ed211 100644 --- a/packages/integration-testsuite/src/httpSpecTests.ts +++ b/packages/integration-testsuite/src/httpSpecTests.ts @@ -4,7 +4,6 @@ import type { } from './index.js'; import { afterAll, beforeAll, describe, test } from '@jest/globals'; import { serverAudits } from 'graphql-http'; -import fetch from 'node-fetch'; export function defineIntegrationTestSuiteHttpSpecTests( createServer: CreateServerForIntegrationTests, diff --git a/packages/integration-testsuite/tsconfig.json b/packages/integration-testsuite/tsconfig.json index b7752f29591..22262cf6486 100644 --- a/packages/integration-testsuite/tsconfig.json +++ b/packages/integration-testsuite/tsconfig.json @@ -3,9 +3,7 @@ "compilerOptions": { "rootDir": "./src", "outDir": "./dist/esm", - // DOM types needed for @apollo/client - // Ref: https://github.com/apollographql/apollo-client/issues/6376 - "lib": ["es2020", "dom"] + "lib": ["es2023"], }, "include": ["src/**/*"], "references": [ diff --git a/packages/plugin-response-cache/package.json b/packages/plugin-response-cache/package.json index 2023f71ebf6..9f2564da573 100644 --- a/packages/plugin-response-cache/package.json +++ b/packages/plugin-response-cache/package.json @@ -29,14 +29,14 @@ }, "homepage": "https://github.com/apollographql/apollo-server#readme", "engines": { - "node": ">=14.16.0" + "node": ">=20" }, "dependencies": { - "@apollo/utils.createhash": "^2.0.2", - "@apollo/utils.keyvaluecache": "^2.1.0" + "@apollo/utils.createhash": "^3.0.0", + "@apollo/utils.keyvaluecache": "^4.0.0" }, "peerDependencies": { "@apollo/server": "^4.0.1", - "graphql": "^16.6.0" + "graphql": "^16.11.0" } } diff --git a/packages/plugin-response-cache/src/__tests__/integration.test.ts b/packages/plugin-response-cache/src/__tests__/integration.test.ts index a125a0be72e..576a07237e9 100644 --- a/packages/plugin-response-cache/src/__tests__/integration.test.ts +++ b/packages/plugin-response-cache/src/__tests__/integration.test.ts @@ -1,7 +1,7 @@ import { ApolloServer, - GraphQLRequest, - GraphQLRequestContext, + type GraphQLRequest, + type GraphQLRequestContext, } from '@apollo/server'; import { startStandaloneServer } from '@apollo/server/standalone'; import ApolloServerPluginResponseCache from '../index.js'; diff --git a/packages/server/CHANGELOG.md b/packages/server/CHANGELOG.md index a1fb9a0c52c..54719d5b37a 100644 --- a/packages/server/CHANGELOG.md +++ b/packages/server/CHANGELOG.md @@ -571,7 +571,7 @@ This version has no changes; `@apollo/server` and `@apollo/server-integration-te ### BREAKING CHANGES -Apollo Server contains quite a few breaking changes: most notably, a brand new package name! Read our [migration guide](https://www.apollographql.com/docs/apollo-server/migration/) for more details on how to update your app. +Apollo Server contains quite a few breaking changes: most notably, a brand new package name! Read our [migration guide](https://www.apollographql.com/docs/apollo-server/migration-from-v3/) for more details on how to update your app. #### Bumped dependencies @@ -601,13 +601,13 @@ Other packages have been renamed: #### Removed web framework integrations -Prior to Apollo Server 4, the only way to integrate a web framework with Apollo Server was for the Apollo Server project to add an official `apollo-server-x` subclass maintained as part of the core project. Apollo Server 4 makes it easy for users to integrate with their favorite web framework, and so we have removed most of the framework integrations from the core project so that framework integrations can be maintained by users who are passionate about that framework. Because of this, the core project no longer directly maintains integrations for Fastify, Hapi, Koa, Micro, AWS Lambda,Google Cloud Functions, Azure Functions, or Cloudflare. We expect that [community integrations](https://www.apollographql.com/docs/apollo-server/v4/integrations/integration-index/) will eventually be created for most of these frameworks and serverless environments. +Prior to Apollo Server 4, the only way to integrate a web framework with Apollo Server was for the Apollo Server project to add an official `apollo-server-x` subclass maintained as part of the core project. Apollo Server 4 makes it easy for users to integrate with their favorite web framework, and so we have removed most of the framework integrations from the core project so that framework integrations can be maintained by users who are passionate about that framework. Because of this, the core project no longer directly maintains integrations for Fastify, Hapi, Koa, Micro, AWS Lambda,Google Cloud Functions, Azure Functions, or Cloudflare. We expect that [community integrations](https://www.apollographql.com/docs/apollo-server/integrations/integration-index/) will eventually be created for most of these frameworks and serverless environments. Apollo Server's support for the Express web framework no longer also supports its older predecessor [Connect](https://github.com/senchalabs/connect). #### Removed constructor options -- The `dataSources` constructor option essentially added a post-processing step to your app's context function, creating `DataSource` subclasses and adding them to a `dataSources` field on your context value. This meant the TypeScript type the `context` function returns was _different_ from the context type your resolvers and plugins receive. Additionally, this design obfuscated that `DataSource` objects are created once per request (i.e., like the rest of the context object). Apollo Server 4 removes the `dataSources` constructor option. You can now treat `DataSources` like any other part of your `context` object. See the [migration guide](https://www.apollographql.com/docs/apollo-server/migration/) for details on how to move your `dataSources` function into your `context` function. +- The `dataSources` constructor option essentially added a post-processing step to your app's context function, creating `DataSource` subclasses and adding them to a `dataSources` field on your context value. This meant the TypeScript type the `context` function returns was _different_ from the context type your resolvers and plugins receive. Additionally, this design obfuscated that `DataSource` objects are created once per request (i.e., like the rest of the context object). Apollo Server 4 removes the `dataSources` constructor option. You can now treat `DataSources` like any other part of your `context` object. See the [migration guide](https://www.apollographql.com/docs/apollo-server/migration-from-v3/) for details on how to move your `dataSources` function into your `context` function. - The `modules` constructor option was just a slightly different way of writing `typeDefs` and `resolvers` (although it surprisingly used entirely different logic under the hood). This option has been removed. - The `mocks` and `mockEntireSchema` constructor options wrapped an outdated version of the [`@graphql-tools/mocks`](https://www.npmjs.com/package/@graphql-tools/mock) library to provide mocking functionality. These constructor options have been removed; you can instead directly incorporate the `@graphql-tools/mock` package into your app, enabling you to get the most up-to-date mocking features. - The `debug` constructor option (which defaulted to `true` unless the `NODE_ENV` environment variable is either `production` or `test`) mostly controlled whether GraphQL errors responses included stack traces, but it also affected the default log level on the default logger. The `debug` constructor option has been removed and is replaced with `includeStacktraceInErrorResponses`, which does exactly what it says it does. @@ -635,7 +635,7 @@ Apollo Server's support for the Express web framework no longer also supports it - The `formatError` hook now receives the original thrown error in addition to the formatted error. - Formatted errors no longer contain the `extensions.exception` field containing all enumerable properties of the originally thrown error. If you want to include more information in an error, specify them as `extensions` when creating a `GraphQLError`. The `stacktrace` field is provided directly on `extensions` rather than nested under `exception`. - All errors responses are consistently rendered as `application/json` JSON responses, and the `formatError` hook is used consistently. -- Other [changes to error handling outside of resolvers](https://www.apollographql.com/docs/apollo-server/migration/#improvements-to-error-handling-outside-of-resolvers) are described in the migration guide. +- Other [changes to error handling outside of resolvers](https://www.apollographql.com/docs/apollo-server/migration-from-v3/#improvements-to-error-handling-outside-of-resolvers) are described in the migration guide. - The `parseOptions` constructor option only affects the parsing of incoming operations, not the parsing of `typeDefs`. #### Plugin API changes @@ -645,10 +645,10 @@ Apollo Server's support for the Express web framework no longer also supports it - The fields `GraphQLRequestContext.schemaHash` and `GraphQLRequestContext.debug` have been removed. - The type `GraphQLServiceContext` has been renamed to `GraphQLServerContext`, and the fields `schemaHash`, `persistedQueries`, and `serverlessFramework` have been removed; the latter has been semi-replaced by `startedInBackground`. - The `http` field on the `GraphQLRequest` object (available to plugins as `requestContext.request` and as an argument to `server.executeOperation`) is no longer based on the Fetch API's `Request` object. It no longer contains an URL path, and its `headers` field is a `Map` rather than a `Headers` object. -- The structure of the `GraphQLResponse` object (available to plugins as `requestContext.response` and as the return value from `server.executeOperation`) has [changed in several ways](https://www.apollographql.com/docs/apollo-server/migration/#graphqlresponse). +- The structure of the `GraphQLResponse` object (available to plugins as `requestContext.response` and as the return value from `server.executeOperation`) has [changed in several ways](https://www.apollographql.com/docs/apollo-server/migration-from-v3/#graphqlresponse). - The `plugins` constructor argument does not take factory functions. - `requestDidStart` hooks are called in parallel rather than in series. -- A few changes have been made which may affect [custom `gateway` and `GraphQLDataSource` implementations](https://www.apollographql.com/docs/apollo-server/migration/#custom-gateway-and-graphqldatasource-implementations). +- A few changes have been made which may affect [custom `gateway` and `GraphQLDataSource` implementations](https://www.apollographql.com/docs/apollo-server/migration-from-v3/#custom-gateway-and-graphqldatasource-implementations). #### Changes to defaults diff --git a/packages/server/README.md b/packages/server/README.md index ecb019a36f7..d6f7840d304 100644 --- a/packages/server/README.md +++ b/packages/server/README.md @@ -1,6 +1,6 @@ # `@apollo/server` -> This `@apollo/server` package is new with Apollo Server 4. Previous major versions of Apollo Server used a set of package names starting with `apollo-server`, such as `apollo-server`, `apollo-server-express`, `apollo-server-core`, etc. +> This `@apollo/server` package is new since Apollo Server 4. Previous major versions of Apollo Server used a set of package names starting with `apollo-server`, such as `apollo-server`, `apollo-server-express`, `apollo-server-core`, etc. [![npm version](https://badge.fury.io/js/%40apollo%2Fserver.svg)](https://badge.fury.io/js/%40apollo%2Fserver) [![Build Status](https://circleci.com/gh/apollographql/apollo-server.svg?style=svg)](https://circleci.com/gh/apollographql/apollo-server) diff --git a/packages/server/express4/package.json b/packages/server/express4/package.json deleted file mode 100644 index 1af895ad602..00000000000 --- a/packages/server/express4/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "@apollo/server/express4", - "type": "module", - "main": "../dist/cjs/express4/index.js", - "module": "../dist/esm/express4/index.js", - "types": "../dist/esm/express4/index.d.ts", - "sideEffects": false -} diff --git a/packages/server/package.json b/packages/server/package.json index 7a9143e0f68..0c2f7ce031e 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -23,14 +23,6 @@ "import": "./dist/esm/errors/index.js", "require": "./dist/cjs/errors/index.js" }, - "./express4": { - "types": { - "require": "./dist/cjs/express4/index.d.ts", - "default": "./dist/esm/express4/index.d.ts" - }, - "import": "./dist/esm/express4/index.js", - "require": "./dist/cjs/express4/index.js" - }, "./standalone": { "types": { "require": "./dist/cjs/standalone/index.d.ts", @@ -130,35 +122,34 @@ }, "homepage": "https://github.com/apollographql/apollo-server#readme", "engines": { - "node": ">=14.16.0" + "node": ">=20" }, "dependencies": { "@apollo/cache-control-types": "^1.0.3", "@apollo/server-gateway-interface": "^1.1.1", "@apollo/usage-reporting-protobuf": "^4.1.1", - "@apollo/utils.createhash": "^2.0.2", - "@apollo/utils.fetcher": "^2.0.0", - "@apollo/utils.isnodelike": "^2.0.0", - "@apollo/utils.keyvaluecache": "^2.1.0", - "@apollo/utils.logger": "^2.0.0", + "@apollo/utils.createhash": "^3.0.0", + "@apollo/utils.fetcher": "^3.0.0", + "@apollo/utils.isnodelike": "^3.0.0", + "@apollo/utils.keyvaluecache": "^4.0.0", + "@apollo/utils.logger": "^3.0.0", "@apollo/utils.usagereporting": "^2.1.0", - "@apollo/utils.withrequired": "^2.0.0", - "@graphql-tools/schema": "^9.0.0", + "@apollo/utils.withrequired": "^3.0.0", + "@graphql-tools/schema": "^10.0.0", "@types/express": "^4.17.13", "@types/express-serve-static-core": "^4.17.30", - "@types/node-fetch": "^2.6.1", "async-retry": "^1.2.1", + "body-parser": "^2.2.0", "cors": "^2.8.5", + "finalhandler": "^2.1.0", "express": "^4.21.1", "loglevel": "^1.6.8", - "lru-cache": "^7.10.1", - "negotiator": "^0.6.3", - "node-abort-controller": "^3.1.1", - "node-fetch": "^2.6.7", - "uuid": "^9.0.0", - "whatwg-mimetype": "^3.0.0" + "lru-cache": "^11.1.0", + "negotiator": "^1.0.0", + "uuid": "^11.1.0", + "whatwg-mimetype": "^4.0.0" }, "peerDependencies": { - "graphql": "^16.6.0" + "graphql": "^16.11.0" } } diff --git a/packages/server/src/ApolloServer.ts b/packages/server/src/ApolloServer.ts index a0ff47ada4f..0f377e97a7b 100644 --- a/packages/server/src/ApolloServer.ts +++ b/packages/server/src/ApolloServer.ts @@ -160,8 +160,7 @@ export interface ApolloServerInternals { laterValidationRules?: Array; hideSchemaDetailsFromClientErrors: boolean; fieldResolver?: GraphQLFieldResolver; - // TODO(AS5): remove OR warn + ignore with this option set, ignore option and - // flip default behavior. + // TODO(AS6): remove this option. status400ForVariableCoercionErrors?: boolean; __testing_incrementalExecutionResults?: GraphQLExperimentalIncrementalExecutionResults; stringifyResult: ( @@ -342,11 +341,30 @@ export class ApolloServer { : (config.csrfPrevention.requestHeaders ?? recommendedCsrfPreventionRequestHeaders), status400ForVariableCoercionErrors: - config.status400ForVariableCoercionErrors ?? false, + config.status400ForVariableCoercionErrors ?? true, __testing_incrementalExecutionResults: config.__testing_incrementalExecutionResults, stringifyResult: config.stringifyResult ?? prettyJSONStringify, }; + + this.warnAgainstDeprecatedConfigOptions(config); + } + + private warnAgainstDeprecatedConfigOptions( + config: ApolloServerOptions, + ) { + // TODO(AS6): this option goes away altogether. We should either update or remove this warning. + if ('status400ForVariableCoercionErrors' in config) { + if (config.status400ForVariableCoercionErrors === true) { + this.logger.warn( + 'The `status400ForVariableCoercionErrors: true` configuration option is now the default behavior and has no effect in Apollo Server v5. You can safely remove this option from your configuration.', + ); + } else { + this.logger.warn( + 'The `status400ForVariableCoercionErrors: false` configuration option is deprecated and will be removed in Apollo Server v6. Apollo recommends removing any dependency on this behavior.', + ); + } + } } // Awaiting a call to `start` ensures that a schema has been loaded and that diff --git a/packages/server/src/__tests__/ApolloServer.test.ts b/packages/server/src/__tests__/ApolloServer.test.ts index 460a7d5cc76..308529877f1 100644 --- a/packages/server/src/__tests__/ApolloServer.test.ts +++ b/packages/server/src/__tests__/ApolloServer.test.ts @@ -3,10 +3,10 @@ import { makeExecutableSchema } from '@graphql-tools/schema'; import { describe, expect, it, jest } from '@jest/globals'; import assert from 'assert'; import { - FormattedExecutionResult, + type FormattedExecutionResult, GraphQLError, - GraphQLSchema, - TypedQueryDocumentNode, + type GraphQLSchema, + type TypedQueryDocumentNode, parse, } from 'graphql'; import gql from 'graphql-tag'; @@ -551,18 +551,38 @@ describe('ApolloServer executeOperation', () => { await server.stop(); }); - // TODO(AS5): expect an update here when default flips + // `status400ForVariableCoercionErrors` has no effect in v5 + // TODO(AS6): remove this it.each([ - { status400ForVariableCoercionErrors: false, expectedStatus: undefined }, - { status400ForVariableCoercionErrors: true, expectedStatus: 400 }, + { + status400ForVariableCoercionErrors: false, + expectedStatus: undefined, + expectedWarning: + 'The `status400ForVariableCoercionErrors: false` configuration option is deprecated and will be removed in Apollo Server v6. Apollo recommends removing any dependency on this behavior.', + }, + { + status400ForVariableCoercionErrors: true, + expectedStatus: 400, + expectedWarning: + 'The `status400ForVariableCoercionErrors: true` configuration option is now the default behavior and has no effect in Apollo Server v5. You can safely remove this option from your configuration.', + }, ])( 'variable coercion errors', - async ({ status400ForVariableCoercionErrors, expectedStatus }) => { + async ({ + status400ForVariableCoercionErrors, + expectedStatus, + expectedWarning, + }) => { + const logger = mockLogger(); const server = new ApolloServer({ typeDefs, resolvers, + logger, status400ForVariableCoercionErrors, }); + + expect(logger.warn).toBeCalledWith(expectedWarning); + await server.start(); const { body, http } = await server.executeOperation({ @@ -589,7 +609,6 @@ describe('ApolloServer executeOperation', () => { const server = new ApolloServer({ typeDefs, resolvers, - status400ForVariableCoercionErrors: true, }); await server.start(); diff --git a/packages/server/src/__tests__/documentStore.test.ts b/packages/server/src/__tests__/documentStore.test.ts index f9c7cc9eedf..09e08d773e3 100644 --- a/packages/server/src/__tests__/documentStore.test.ts +++ b/packages/server/src/__tests__/documentStore.test.ts @@ -56,10 +56,6 @@ describe('ApolloServer documentStore', () => { await server.executeOperation(operations.simple.op); - expect( - (documentStore as InMemoryLRUCache)['cache'].calculatedSize, - ).toBe(403); - expect(await documentStore.get(operations.simple.hash)).toMatchObject( documentNodeMatcher, ); diff --git a/packages/server/src/__tests__/errors.test.ts b/packages/server/src/__tests__/errors.test.ts index 5b136e4b527..9198ed45730 100644 --- a/packages/server/src/__tests__/errors.test.ts +++ b/packages/server/src/__tests__/errors.test.ts @@ -1,4 +1,4 @@ -import { GraphQLError, GraphQLFormattedError } from 'graphql'; +import { GraphQLError, type GraphQLFormattedError } from 'graphql'; import { unwrapResolverError } from '@apollo/server/errors'; import { normalizeAndFormatErrors } from '../errorNormalize.js'; diff --git a/packages/server/src/__tests__/express4/expressSpecific.test.ts b/packages/server/src/__tests__/express4/expressSpecific.test.ts deleted file mode 100644 index c078cc6366b..00000000000 --- a/packages/server/src/__tests__/express4/expressSpecific.test.ts +++ /dev/null @@ -1,199 +0,0 @@ -import express, { json } from 'express'; -import request from 'supertest'; -import compression, { filter as defaultFilter } from 'compression'; -import { ApolloServer, BaseContext } from '../../index.js'; -import { expressMiddleware } from '../../express4/index.js'; -import { it, expect } from '@jest/globals'; -import resolvable from '../../utils/resolvable.js'; -import cors from 'cors'; - -it('gives helpful error if json middleware is not installed', async () => { - const server = new ApolloServer({ typeDefs: 'type Query {f: ID}' }); - await server.start(); - const app = express(); - // Note lack of `json` here. - app.use(expressMiddleware(server)); - - await request(app) - .post('/') - .send({ query: '{hello}' }) - .expect(500, /forgot to set up the `json` middleware/); - await server.stop(); -}); - -it('not calling start causes a clear error', async () => { - const server = new ApolloServer({ typeDefs: 'type Query {f: ID}' }); - expect(() => expressMiddleware(server)).toThrow( - 'You must `await server.start()`', - ); -}); - -it('context optional only if TContext=BaseContext', async () => { - const baseContextServer = new ApolloServer({ - typeDefs: 'type Query{x:ID}', - }); - await baseContextServer.start(); - const differentContextServer = new ApolloServer<{ x: number }>({ - typeDefs: 'type Query{x:ID}', - }); - await differentContextServer.start(); - - // This is a typechecking test, so we don't actually do anything with these - // middlewares. - expressMiddleware(baseContextServer); - expressMiddleware(baseContextServer, { context: async () => ({}) }); - expressMiddleware(differentContextServer, { - context: async () => ({ x: 5 }), - }); - // @ts-expect-error - expressMiddleware(differentContextServer); -}); - -// This test validates that you can use incremental delivery with the -// `compression` package (which requires a hacky `res.flush()` call in the -// middleware). -it('incremental delivery works with compression', async () => { - const gotFirstChunkBarrier = resolvable(); - const sendSecondChunkBarrier = resolvable(); - const app = express(); - const server = new ApolloServer({ - typeDefs: `#graphql - directive @defer(if: Boolean! = true, label: String) on FRAGMENT_SPREAD | INLINE_FRAGMENT - type Query { - testString: String - barrierString: String - } - `, - __testing_incrementalExecutionResults: { - initialResult: { - hasNext: true, - data: { testString: 'it works' }, - }, - subsequentResults: (async function* () { - await sendSecondChunkBarrier; - yield { - hasNext: false, - incremental: [{ path: [], data: { barrierString: 'we waited' } }], - }; - })(), - }, - }); - await server.start(); - app.use( - // Teach `compression` to treat multipart/mixed as compressible. - compression({ - filter: (req, res) => - defaultFilter(req, res) || - !!res - .getHeader('content-type') - ?.toString() - .startsWith('multipart/mixed'), - }), - cors(), - json(), - expressMiddleware(server), - ); - - const resPromise = request(app) - .post('/') - .set('accept', 'multipart/mixed; deferSpec=20220824, application/json') - .parse((res, fn) => { - res.text = ''; - res.setEncoding('utf8'); - res.on('data', (chunk) => { - res.text += chunk; - if (res.text.includes('it works') && res.text.endsWith('---\r\n')) { - gotFirstChunkBarrier.resolve(); - } - }); - res.on('end', fn); - }) - .send({ query: '{ testString ... @defer { barrierString } }' }) - // believe it or not, superagent uses `.then` to decide to actually send the request - .then((r) => r); - - // We ensure that the second chunk can't be sent until after we've - // gotten back a chunk containing the value of testString. - await gotFirstChunkBarrier; - sendSecondChunkBarrier.resolve(); - - const res = await resPromise; - expect(res.status).toEqual(200); - // Confirm that the response has actually been gzipped. - expect(res.header['content-encoding']).toMatchInlineSnapshot(`"gzip"`); - expect(res.header['content-type']).toMatchInlineSnapshot( - `"multipart/mixed; boundary="-"; deferSpec=20220824"`, - ); - expect(res.text).toMatchInlineSnapshot(` - " - --- - content-type: application/json; charset=utf-8 - - {"hasNext":true,"data":{"testString":"it works"}} - --- - content-type: application/json; charset=utf-8 - - {"hasNext":false,"incremental":[{"path":[],"data":{"barrierString":"we waited"}}]} - ----- - " - `); - - await server.stop(); -}); - -it('supporting doubly-encoded variables example from migration guide', async () => { - const server = new ApolloServer({ - typeDefs: 'type Query {hello(s: String!): String!}', - resolvers: { - Query: { - hello: (_root, { s }) => s, - }, - }, - }); - await server.start(); - const app = express(); - - app.use(json()); - - // Test will fail if you remove this middleware. - app.use((req, res, next) => { - if (typeof req.body?.variables === 'string') { - try { - req.body.variables = JSON.parse(req.body.variables); - } catch (e) { - // https://github.com/graphql/graphql-over-http/blob/main/spec/GraphQLOverHTTP.md#json-parsing-failure - res.status(400).send(e instanceof Error ? e.message : e); - return; - } - } - next(); - }); - - app.use(expressMiddleware(server)); - - await request(app) - .post('/') - .send({ - query: 'query Hello($s: String!){hello(s: $s)}', - variables: { s: 'normally encoded' }, - }) - .expect(200, { data: { hello: 'normally encoded' } }); - - await request(app) - .post('/') - .send({ - query: 'query Hello($s: String!){hello(s: $s)}', - variables: JSON.stringify({ s: 'doubly-encoded' }), - }) - .expect(200, { data: { hello: 'doubly-encoded' } }); - - await request(app) - .post('/') - .send({ - query: 'query Hello($s: String!){hello(s: $s)}', - variables: '{malformed JSON}', - }) - .expect(400, /in JSON at position 1/); - - await server.stop(); -}); diff --git a/packages/server/src/__tests__/express4/integration.test.ts b/packages/server/src/__tests__/express4/integration.test.ts deleted file mode 100644 index e4d76117859..00000000000 --- a/packages/server/src/__tests__/express4/integration.test.ts +++ /dev/null @@ -1,42 +0,0 @@ -import cors from 'cors'; -import express, { json } from 'express'; -import http from 'http'; -import { ApolloServer, ApolloServerOptions, BaseContext } from '@apollo/server'; -import { expressMiddleware } from '@apollo/server/express4'; -import { ApolloServerPluginDrainHttpServer } from '@apollo/server/plugin/drainHttpServer'; -import { urlForHttpServer } from '../../utils/urlForHttpServer'; -import { - defineIntegrationTestSuite, - CreateServerForIntegrationTestsOptions, -} from '@apollo/server-integration-testsuite'; - -defineIntegrationTestSuite(async function ( - serverOptions: ApolloServerOptions, - testOptions?: CreateServerForIntegrationTestsOptions, -) { - const app = express(); - const httpServer = http.createServer(app); - const server = new ApolloServer({ - ...serverOptions, - plugins: [ - ...(serverOptions.plugins ?? []), - ApolloServerPluginDrainHttpServer({ - httpServer, - }), - ], - }); - - await server.start(); - - app.use( - cors(), - json(), - expressMiddleware(server, { - context: testOptions?.context, - }), - ); - await new Promise((resolve) => { - httpServer.listen({ port: 0 }, resolve); - }); - return { server, url: urlForHttpServer(httpServer) }; -}); diff --git a/packages/server/src/__tests__/express4/integrationServerless.test.ts b/packages/server/src/__tests__/express4/integrationServerless.test.ts deleted file mode 100644 index 4865d196f92..00000000000 --- a/packages/server/src/__tests__/express4/integrationServerless.test.ts +++ /dev/null @@ -1,52 +0,0 @@ -import cors from 'cors'; -import express, { json } from 'express'; -import http from 'http'; -import { ApolloServer, ApolloServerOptions, BaseContext } from '@apollo/server'; -import { expressMiddleware } from '@apollo/server/express4'; -import { urlForHttpServer } from '../../utils/urlForHttpServer'; -import { - defineIntegrationTestSuite, - CreateServerForIntegrationTestsOptions, -} from '@apollo/server-integration-testsuite'; - -defineIntegrationTestSuite( - async function ( - serverOptions: ApolloServerOptions, - testOptions?: CreateServerForIntegrationTestsOptions, - ) { - const app = express(); - const httpServer = http.createServer(app); - // For started-in-background servers (ie serverless) we typically don't - // drain in practice (serverless environments run one operation at a - // time). Also, in certain tests where server startup fails we won't be - // legally allowed to call stop() (because you can't stop something that - // hasn't started)... but unlike in the started-in-foreground case, we - // will have already started the http server listening. So we can't just - // rely on the drain plugin to do our server-closing; we do it ourselves - // in the extraCleanup block. - const server = new ApolloServer(serverOptions); - - server.startInBackgroundHandlingStartupErrorsByLoggingAndFailingAllRequests(); - - app.use( - cors(), - json(), - expressMiddleware(server, { - context: testOptions?.context, - }), - ); - await new Promise((resolve) => { - httpServer.listen({ port: 0 }, resolve); - }); - return { - server, - url: urlForHttpServer(httpServer), - async extraCleanup() { - await new Promise((resolve) => { - httpServer.close(resolve); - }); - }, - }; - }, - { serverIsStartedInBackground: true }, -); diff --git a/packages/server/src/__tests__/plugin/cacheControl/cacheControlPlugin.test.ts b/packages/server/src/__tests__/plugin/cacheControl/cacheControlPlugin.test.ts index 6731c566b6c..c0d558e6b52 100644 --- a/packages/server/src/__tests__/plugin/cacheControl/cacheControlPlugin.test.ts +++ b/packages/server/src/__tests__/plugin/cacheControl/cacheControlPlugin.test.ts @@ -1,9 +1,9 @@ import { GraphQLError } from 'graphql'; import { ApolloServerPluginCacheControl, - ApolloServerPluginCacheControlOptions, + type ApolloServerPluginCacheControlOptions, } from '../../../plugin/cacheControl'; -import { ApolloServer, HTTPGraphQLResponse, HeaderMap } from '../../..'; +import { ApolloServer, type HTTPGraphQLResponse, HeaderMap } from '../../..'; import type { CacheHint } from '@apollo/cache-control-types'; import { describe, it, expect } from '@jest/globals'; diff --git a/packages/server/src/__tests__/plugin/cacheControl/cacheControlSupport.ts b/packages/server/src/__tests__/plugin/cacheControl/cacheControlSupport.ts index c2877849360..b9c49430ea6 100644 --- a/packages/server/src/__tests__/plugin/cacheControl/cacheControlSupport.ts +++ b/packages/server/src/__tests__/plugin/cacheControl/cacheControlSupport.ts @@ -1,7 +1,7 @@ import { buildSchema } from 'graphql'; import { makeExecutableSchema, - IExecutableSchemaDefinition, + type IExecutableSchemaDefinition, } from '@graphql-tools/schema'; import { addMocksToSchema } from '@graphql-tools/mock'; diff --git a/packages/server/src/__tests__/plugin/cacheControl/collectCacheControlHints.ts b/packages/server/src/__tests__/plugin/cacheControl/collectCacheControlHints.ts index b3f9337905f..180de38707b 100644 --- a/packages/server/src/__tests__/plugin/cacheControl/collectCacheControlHints.ts +++ b/packages/server/src/__tests__/plugin/cacheControl/collectCacheControlHints.ts @@ -3,7 +3,7 @@ import type { GraphQLSchema } from 'graphql'; import { ApolloServer } from '../../..'; import { ApolloServerPluginCacheControl, - ApolloServerPluginCacheControlOptions, + type ApolloServerPluginCacheControlOptions, } from '../../../plugin/cacheControl'; import { expect } from '@jest/globals'; diff --git a/packages/server/src/__tests__/plugin/drainHttpServer/stoppable.test.ts b/packages/server/src/__tests__/plugin/drainHttpServer/stoppable.test.ts index bed9d2dfe68..c3a3f9a1127 100644 --- a/packages/server/src/__tests__/plugin/drainHttpServer/stoppable.test.ts +++ b/packages/server/src/__tests__/plugin/drainHttpServer/stoppable.test.ts @@ -35,9 +35,7 @@ import { Stopper } from '../../../plugin/drainHttpServer/stoppable'; import path from 'path'; import type { AddressInfo } from 'net'; import { describe, it, expect, afterEach, beforeEach } from '@jest/globals'; -import { AbortController } from 'node-abort-controller'; -import resolvable, { Resolvable } from '../../../utils/resolvable.js'; - +import resolvable, { type Resolvable } from '../../../utils/resolvable.js'; function port(s: http.Server) { return (s.address() as AddressInfo).port; } @@ -204,7 +202,6 @@ Object.keys(schemes).forEach((schemeName) => { request(`${schemeName}://localhost:${p}`).agent(scheme.agent()), ); expect(err.code).toMatch(/ECONNREFUSED/); - expect(closed).toBe(1); expect(gracefully).toBe(true); }); diff --git a/packages/server/src/__tests__/plugin/landingPage/plugin.test.ts b/packages/server/src/__tests__/plugin/landingPage/plugin.test.ts index 5ce3e434d57..eafe27a919e 100644 --- a/packages/server/src/__tests__/plugin/landingPage/plugin.test.ts +++ b/packages/server/src/__tests__/plugin/landingPage/plugin.test.ts @@ -1,11 +1,7 @@ import { ApolloServer, HeaderMap } from '@apollo/server'; -import { - ApolloServerPluginLandingPageLocalDefault, - ApolloServerPluginLandingPageProductionDefault, -} from '@apollo/server/plugin/landingPage/default'; +import { ApolloServerPluginLandingPageProductionDefault } from '@apollo/server/plugin/landingPage/default'; import { describe, expect, test } from '@jest/globals'; import assert from 'assert'; -import { mockLogger } from '../../mockLogger'; describe('ApolloServerPluginLandingPageDefault', () => { test(`nonce isn't reused between requests`, async () => { @@ -42,29 +38,6 @@ describe('ApolloServerPluginLandingPageDefault', () => { await server.stop(); }); - test(`warns when using precomputedNonce`, async () => { - const logger = mockLogger(); - const server = new ApolloServer({ - typeDefs: `#graphql - type Query { - hello: String! - } - `, - plugins: [ - ApolloServerPluginLandingPageLocalDefault({ - precomputedNonce: 'abc123', - }), - ], - logger, - }); - await server.start(); - - expect(logger.warn).toHaveBeenCalledWith( - "The `precomputedNonce` landing page configuration option is deprecated. Removing this option is strictly an improvement to Apollo Server's landing page Content Security Policy (CSP) implementation for preventing XSS attacks.", - ); - await server.stop(); - }); - test(`nonce exists in non-embedded landing page`, async () => { const plugin = ApolloServerPluginLandingPageProductionDefault({ embed: false, diff --git a/packages/server/src/__tests__/plugin/schemaReporting/schemaReporter.test.ts b/packages/server/src/__tests__/plugin/schemaReporting/schemaReporter.test.ts index e6c955e5aa9..df0a90f48b8 100644 --- a/packages/server/src/__tests__/plugin/schemaReporting/schemaReporter.test.ts +++ b/packages/server/src/__tests__/plugin/schemaReporting/schemaReporter.test.ts @@ -8,6 +8,7 @@ import type { SchemaReportMutationVariables, } from '../../../plugin/schemaReporting/generated/operations'; import { describe, it, expect, beforeEach, afterEach } from '@jest/globals'; +import { nockAfterEach, nockBeforeEach } from '../../nockAssertions'; function mockReporterRequest( url: any, @@ -27,15 +28,8 @@ function mockReporterRequest( return request.reply(status, { data: { reportSchema } }); } -beforeEach(() => { - if (!nock.isActive()) nock.activate(); -}); - -afterEach(() => { - expect(nock.isDone()).toBeTruthy(); - nock.cleanAll(); - nock.restore(); -}); +beforeEach(nockBeforeEach); +afterEach(nockAfterEach); const schemaReport = { bootId: 'string', diff --git a/packages/server/src/__tests__/plugin/subscriptionCallback/index.test.ts b/packages/server/src/__tests__/plugin/subscriptionCallback/index.test.ts index 5e7f499b05f..7016475c4b4 100644 --- a/packages/server/src/__tests__/plugin/subscriptionCallback/index.test.ts +++ b/packages/server/src/__tests__/plugin/subscriptionCallback/index.test.ts @@ -1,12 +1,12 @@ import { ApolloServer, - ApolloServerOptionsWithTypeDefs, - BaseContext, - HTTPGraphQLRequest, + type ApolloServerOptionsWithTypeDefs, + type BaseContext, + type HTTPGraphQLRequest, HeaderMap, } from '@apollo/server'; import { ApolloServerPluginSubscriptionCallback } from '@apollo/server/plugin/subscriptionCallback'; -import { Logger } from '@apollo/utils.logger'; +import { type Logger } from '@apollo/utils.logger'; import { afterAll, afterEach, @@ -184,8 +184,8 @@ describe('SubscriptionCallbackPlugin', () => { "SubscriptionManager[1234-cats]: \`complete\` request successful", "SubscriptionManager: Terminating subscriptions for ID: 1234-cats", "SubscriptionManager: Terminating heartbeat interval for http://mock-router-url.com", - "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", "SubscriptionManager[1234-cats]: Subscription completed without errors", + "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", ] `); }); @@ -289,8 +289,8 @@ describe('SubscriptionCallbackPlugin', () => { "SubscriptionManager[1234-cats]: Sending \`complete\` request to router", "SubscriptionManager[1234-cats]: \`complete\` request successful", "SubscriptionManager: Terminating subscriptions for ID: 1234-cats", - "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", "SubscriptionManager[1234-cats]: Subscription completed without errors", + "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", ] `); }); @@ -406,8 +406,8 @@ describe('SubscriptionCallbackPlugin', () => { "SubscriptionManager[1234-cats]: \`complete\` request successful", "SubscriptionManager: Terminating subscriptions for ID: 1234-cats", "SubscriptionManager: Terminating heartbeat interval for http://mock-router-url.com", - "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", "SubscriptionManager[1234-cats]: Subscription completed without errors", + "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", ] `); }); @@ -524,8 +524,8 @@ describe('SubscriptionCallbackPlugin', () => { "SubscriptionManager[1234-cats]: \`complete\` request successful", "SubscriptionManager: Terminating subscriptions for ID: 1234-cats", "SubscriptionManager: Terminating heartbeat interval for http://mock-router-url.com", - "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", "SubscriptionManager[1234-cats]: Subscription completed without errors", + "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", ] `); }); @@ -692,8 +692,8 @@ describe('SubscriptionCallbackPlugin', () => { "SubscriptionManager[5678-dogs]: \`complete\` request successful", "SubscriptionManager: Terminating subscriptions for ID: 5678-dogs", "SubscriptionManager: Terminating heartbeat interval for http://mock-router-url-2.com", - "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", "SubscriptionManager[5678-dogs]: Subscription completed without errors", + "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", ] `); }); @@ -999,33 +999,33 @@ describe('SubscriptionCallbackPlugin', () => { await server.stop(); expect(logger.orderOfOperations).toMatchInlineSnapshot(` - [ - "SubscriptionCallback[1234-cats]: Received new subscription request", - "SubscriptionManager[1234-cats]: Sending \`check\` request to router", - "SubscriptionManager[1234-cats]: \`check\` request successful", - "SubscriptionManager[1234-cats]: Starting new heartbeat interval for http://mock-router-url.com", - "SubscriptionCallback[1234-cats]: Starting graphql-js subscription", - "SubscriptionCallback[1234-cats]: graphql-js subscription successful", - "SubscriptionManager[1234-cats]: Listening to graphql-js subscription", - "SubscriptionCallback[1234-cats]: Responding to original subscription request", - "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", - "SubscriptionManager: Heartbeat received response for ID: 1234-cats", - "SubscriptionManager: Heartbeat request successful, ID: 1234-cats", - "TESTING: Triggering first update", - "SubscriptionManager[1234-cats]: Sending \`next\` request to router", - "SubscriptionManager[1234-cats]: \`next\` request successful", - "TESTING: Triggering second update", - "SubscriptionManager[1234-cats]: Sending \`next\` request to router", - "SubscriptionManager[1234-cats]: \`next\` request successful", - "TESTING: Triggering third (terminating) update", - "SubscriptionManager[1234-cats]: Sending \`next\` request to router", - "SubscriptionManager[1234-cats]: \`next\` request received 404, terminating subscription", - "SubscriptionManager: Terminating subscriptions for ID: 1234-cats", - "SubscriptionManager: Terminating heartbeat interval for http://mock-router-url.com", - "SubscriptionCallback: Server is shutting down. Cleaning up outstanding subscriptions and heartbeat intervals", - "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", - ] - `); + [ + "SubscriptionCallback[1234-cats]: Received new subscription request", + "SubscriptionManager[1234-cats]: Sending \`check\` request to router", + "SubscriptionManager[1234-cats]: \`check\` request successful", + "SubscriptionManager[1234-cats]: Starting new heartbeat interval for http://mock-router-url.com", + "SubscriptionCallback[1234-cats]: Starting graphql-js subscription", + "SubscriptionCallback[1234-cats]: graphql-js subscription successful", + "SubscriptionManager[1234-cats]: Listening to graphql-js subscription", + "SubscriptionCallback[1234-cats]: Responding to original subscription request", + "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", + "SubscriptionManager: Heartbeat received response for ID: 1234-cats", + "SubscriptionManager: Heartbeat request successful, ID: 1234-cats", + "TESTING: Triggering first update", + "SubscriptionManager[1234-cats]: Sending \`next\` request to router", + "SubscriptionManager[1234-cats]: \`next\` request successful", + "TESTING: Triggering second update", + "SubscriptionManager[1234-cats]: Sending \`next\` request to router", + "SubscriptionManager[1234-cats]: \`next\` request successful", + "TESTING: Triggering third (terminating) update", + "SubscriptionManager[1234-cats]: Sending \`next\` request to router", + "SubscriptionManager[1234-cats]: \`next\` request received 404, terminating subscription", + "SubscriptionManager: Terminating subscriptions for ID: 1234-cats", + "SubscriptionManager: Terminating heartbeat interval for http://mock-router-url.com", + "SubscriptionCallback: Server is shutting down. Cleaning up outstanding subscriptions and heartbeat intervals", + "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", + ] + `); }, ); @@ -1107,7 +1107,7 @@ describe('SubscriptionCallbackPlugin', () => { mockRouterCheckResponse(); mockRouterCheckResponse(); - mockRouterCompleteResponse({ + const completeRequest = mockRouterCompleteResponse({ errors: [{ message: "The subscription generator didn't catch this!" }], }); @@ -1132,6 +1132,8 @@ describe('SubscriptionCallbackPlugin', () => { expect(result.status).toEqual(200); jest.advanceTimersByTime(5000); + + await completeRequest; await server.stop(); expect(logger.orderOfOperations).toMatchInlineSnapshot(` @@ -1147,12 +1149,12 @@ describe('SubscriptionCallbackPlugin', () => { "ERROR: SubscriptionManager[1234-cats]: Generator threw an error, terminating subscription: The subscription generator didn't catch this!", "SubscriptionManager[1234-cats]: Sending \`complete\` request to router with errors", "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", - "SubscriptionCallback: Server is shutting down. Cleaning up outstanding subscriptions and heartbeat intervals", "SubscriptionManager[1234-cats]: \`complete\` request successful", "SubscriptionManager: Terminating subscriptions for ID: 1234-cats", "SubscriptionManager: Terminating heartbeat interval for http://mock-router-url.com", "SubscriptionManager: Heartbeat received response for ID: 1234-cats", "SubscriptionManager: Heartbeat request successful, ID: 1234-cats", + "SubscriptionCallback: Server is shutting down. Cleaning up outstanding subscriptions and heartbeat intervals", "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", ] `); @@ -1193,15 +1195,15 @@ describe('SubscriptionCallbackPlugin', () => { expect(result.status).toEqual(500); assert(result.body.kind === 'complete'); expect(JSON.parse(result.body.string)).toMatchInlineSnapshot(` - { - "data": null, - "errors": [ - { - "message": "\`check\` request failed with unexpected status code: 400, terminating subscription", - }, - ], - } - `); + { + "data": null, + "errors": [ + { + "message": "\`check\` request failed with unexpected status code: 400, terminating subscription", + }, + ], + } + `); // Trigger the heartbeat interval just to make sure it doesn't actually // happen in this case (we haven't mocked it, so if it fires it will @@ -1211,17 +1213,17 @@ describe('SubscriptionCallbackPlugin', () => { await server.stop(); expect(logger.orderOfOperations).toMatchInlineSnapshot(` - [ - "SubscriptionCallback[1234-cats]: Received new subscription request", - "SubscriptionManager[1234-cats]: Sending \`check\` request to router", - "SubscriptionManager[1234-cats]: \`check\` request failed with unexpected status code: 400, terminating subscription", - "SubscriptionManager: Terminating subscriptions for ID: 1234-cats", - "ERROR: SubscriptionManager: No subscriptions found for http://mock-router-url.com, skipping termination", - "ERROR: SubscriptionCallback[1234-cats]: \`check\` request failed: \`check\` request failed with unexpected status code: 400, terminating subscription", - "SubscriptionCallback: Server is shutting down. Cleaning up outstanding subscriptions and heartbeat intervals", - "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", - ] - `); + [ + "SubscriptionCallback[1234-cats]: Received new subscription request", + "SubscriptionManager[1234-cats]: Sending \`check\` request to router", + "SubscriptionManager[1234-cats]: \`check\` request failed with unexpected status code: 400, terminating subscription", + "SubscriptionManager: Terminating subscriptions for ID: 1234-cats", + "ERROR: SubscriptionManager: No subscriptions found for http://mock-router-url.com, skipping termination", + "ERROR: SubscriptionCallback[1234-cats]: \`check\` request failed: \`check\` request failed with unexpected status code: 400, terminating subscription", + "SubscriptionCallback: Server is shutting down. Cleaning up outstanding subscriptions and heartbeat intervals", + "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", + ] + `); }); it('encounters errors on subscription', async () => { @@ -1284,24 +1286,24 @@ describe('SubscriptionCallbackPlugin', () => { await completeRequest; await server.stop(); expect(logger.orderOfOperations).toMatchInlineSnapshot(` - [ - "SubscriptionManager[1234-cats]: Sending \`check\` request to router", - "SubscriptionManager[1234-cats]: \`check\` request successful", - "SubscriptionManager[1234-cats]: Starting new heartbeat interval for http://mock-router-url.com", - "SubscriptionCallback[1234-cats]: Starting graphql-js subscription", - "ERROR: SubscriptionCallback[1234-cats]: graphql-js subscription unsuccessful: [ - The subscription field "invalidSubscriptionField" is not defined. - ]", - "SubscriptionManager[1234-cats]: Sending \`complete\` request to router with errors", - "SubscriptionCallback[1234-cats]: Responding to original subscription request", - "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", - "SubscriptionManager[1234-cats]: \`complete\` request successful", - "SubscriptionManager: Heartbeat received response for ID: 1234-cats", - "SubscriptionManager: Heartbeat request successful, ID: 1234-cats", - "SubscriptionCallback: Server is shutting down. Cleaning up outstanding subscriptions and heartbeat intervals", - "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", - ] - `); + [ + "SubscriptionManager[1234-cats]: Sending \`check\` request to router", + "SubscriptionManager[1234-cats]: \`check\` request successful", + "SubscriptionManager[1234-cats]: Starting new heartbeat interval for http://mock-router-url.com", + "SubscriptionCallback[1234-cats]: Starting graphql-js subscription", + "ERROR: SubscriptionCallback[1234-cats]: graphql-js subscription unsuccessful: [ + The subscription field "invalidSubscriptionField" is not defined. + ]", + "SubscriptionManager[1234-cats]: Sending \`complete\` request to router with errors", + "SubscriptionCallback[1234-cats]: Responding to original subscription request", + "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", + "SubscriptionManager[1234-cats]: \`complete\` request successful", + "SubscriptionManager: Heartbeat received response for ID: 1234-cats", + "SubscriptionManager: Heartbeat request successful, ID: 1234-cats", + "SubscriptionCallback: Server is shutting down. Cleaning up outstanding subscriptions and heartbeat intervals", + "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", + ] + `); }); it('handles failed heartbeats', async () => { @@ -1355,33 +1357,33 @@ describe('SubscriptionCallbackPlugin', () => { await server.stop(); expect(logger.orderOfOperations).toMatchInlineSnapshot(` - [ - "SubscriptionCallback[1234-cats]: Received new subscription request", - "SubscriptionManager[1234-cats]: Sending \`check\` request to router", - "SubscriptionManager[1234-cats]: \`check\` request successful", - "SubscriptionManager[1234-cats]: Starting new heartbeat interval for http://mock-router-url.com", - "SubscriptionCallback[1234-cats]: Starting graphql-js subscription", - "SubscriptionCallback[1234-cats]: graphql-js subscription successful", - "SubscriptionManager[1234-cats]: Listening to graphql-js subscription", - "SubscriptionCallback[1234-cats]: Responding to original subscription request", - "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", - "SubscriptionCallback: Server is shutting down. Cleaning up outstanding subscriptions and heartbeat intervals", - "ERROR: SubscriptionManager[1234-cats]: Heartbeat request failed (1 consecutive): request to http://mock-router-url.com/ failed, reason: network request error", - "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", - "ERROR: SubscriptionManager[1234-cats]: Heartbeat request failed (2 consecutive): request to http://mock-router-url.com/ failed, reason: network request error", - "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", - "ERROR: SubscriptionManager[1234-cats]: Heartbeat request failed (3 consecutive): request to http://mock-router-url.com/ failed, reason: network request error", - "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", - "ERROR: SubscriptionManager[1234-cats]: Heartbeat request failed (4 consecutive): request to http://mock-router-url.com/ failed, reason: network request error", - "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", - "ERROR: SubscriptionManager[1234-cats]: Heartbeat request failed (5 consecutive): request to http://mock-router-url.com/ failed, reason: network request error", - "ERROR: SubscriptionManager[1234-cats]: Heartbeat request failed 5 times, terminating subscriptions and heartbeat interval: request to http://mock-router-url.com/ failed, reason: network request error", - "SubscriptionManager: Terminating subscriptions for ID: 1234-cats", - "SubscriptionManager: Terminating heartbeat interval for http://mock-router-url.com", - "SubscriptionManager[1234-cats]: Subscription completed without errors", - "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", - ] - `); + [ + "SubscriptionCallback[1234-cats]: Received new subscription request", + "SubscriptionManager[1234-cats]: Sending \`check\` request to router", + "SubscriptionManager[1234-cats]: \`check\` request successful", + "SubscriptionManager[1234-cats]: Starting new heartbeat interval for http://mock-router-url.com", + "SubscriptionCallback[1234-cats]: Starting graphql-js subscription", + "SubscriptionCallback[1234-cats]: graphql-js subscription successful", + "SubscriptionManager[1234-cats]: Listening to graphql-js subscription", + "SubscriptionCallback[1234-cats]: Responding to original subscription request", + "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", + "SubscriptionCallback: Server is shutting down. Cleaning up outstanding subscriptions and heartbeat intervals", + "ERROR: SubscriptionManager[1234-cats]: Heartbeat request failed (1 consecutive): network request error", + "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", + "ERROR: SubscriptionManager[1234-cats]: Heartbeat request failed (2 consecutive): network request error", + "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", + "ERROR: SubscriptionManager[1234-cats]: Heartbeat request failed (3 consecutive): network request error", + "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", + "ERROR: SubscriptionManager[1234-cats]: Heartbeat request failed (4 consecutive): network request error", + "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", + "ERROR: SubscriptionManager[1234-cats]: Heartbeat request failed (5 consecutive): network request error", + "ERROR: SubscriptionManager[1234-cats]: Heartbeat request failed 5 times, terminating subscriptions and heartbeat interval: network request error", + "SubscriptionManager: Terminating subscriptions for ID: 1234-cats", + "SubscriptionManager: Terminating heartbeat interval for http://mock-router-url.com", + "SubscriptionManager[1234-cats]: Subscription completed without errors", + "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", + ] + `); }); it('handles failed heartbeats with unexpected status codes', async () => { @@ -1435,38 +1437,38 @@ describe('SubscriptionCallbackPlugin', () => { await server.stop(); expect(logger.orderOfOperations).toMatchInlineSnapshot(` - [ - "SubscriptionCallback[1234-cats]: Received new subscription request", - "SubscriptionManager[1234-cats]: Sending \`check\` request to router", - "SubscriptionManager[1234-cats]: \`check\` request successful", - "SubscriptionManager[1234-cats]: Starting new heartbeat interval for http://mock-router-url.com", - "SubscriptionCallback[1234-cats]: Starting graphql-js subscription", - "SubscriptionCallback[1234-cats]: graphql-js subscription successful", - "SubscriptionManager[1234-cats]: Listening to graphql-js subscription", - "SubscriptionCallback[1234-cats]: Responding to original subscription request", - "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", - "SubscriptionCallback: Server is shutting down. Cleaning up outstanding subscriptions and heartbeat intervals", - "SubscriptionManager: Heartbeat received response for ID: 1234-cats", - "ERROR: SubscriptionManager[1234-cats]: Heartbeat request failed (1 consecutive): Unexpected status code: 500", - "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", - "SubscriptionManager: Heartbeat received response for ID: 1234-cats", - "ERROR: SubscriptionManager[1234-cats]: Heartbeat request failed (2 consecutive): Unexpected status code: 500", - "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", - "SubscriptionManager: Heartbeat received response for ID: 1234-cats", - "ERROR: SubscriptionManager[1234-cats]: Heartbeat request failed (3 consecutive): Unexpected status code: 500", - "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", - "SubscriptionManager: Heartbeat received response for ID: 1234-cats", - "ERROR: SubscriptionManager[1234-cats]: Heartbeat request failed (4 consecutive): Unexpected status code: 500", - "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", - "SubscriptionManager: Heartbeat received response for ID: 1234-cats", - "ERROR: SubscriptionManager[1234-cats]: Heartbeat request failed (5 consecutive): Unexpected status code: 500", - "ERROR: SubscriptionManager[1234-cats]: Heartbeat request failed 5 times, terminating subscriptions and heartbeat interval: Unexpected status code: 500", - "SubscriptionManager: Terminating subscriptions for ID: 1234-cats", - "SubscriptionManager: Terminating heartbeat interval for http://mock-router-url.com", - "SubscriptionManager[1234-cats]: Subscription completed without errors", - "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", - ] - `); + [ + "SubscriptionCallback[1234-cats]: Received new subscription request", + "SubscriptionManager[1234-cats]: Sending \`check\` request to router", + "SubscriptionManager[1234-cats]: \`check\` request successful", + "SubscriptionManager[1234-cats]: Starting new heartbeat interval for http://mock-router-url.com", + "SubscriptionCallback[1234-cats]: Starting graphql-js subscription", + "SubscriptionCallback[1234-cats]: graphql-js subscription successful", + "SubscriptionManager[1234-cats]: Listening to graphql-js subscription", + "SubscriptionCallback[1234-cats]: Responding to original subscription request", + "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", + "SubscriptionCallback: Server is shutting down. Cleaning up outstanding subscriptions and heartbeat intervals", + "SubscriptionManager: Heartbeat received response for ID: 1234-cats", + "ERROR: SubscriptionManager[1234-cats]: Heartbeat request failed (1 consecutive): Unexpected status code: 500", + "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", + "SubscriptionManager: Heartbeat received response for ID: 1234-cats", + "ERROR: SubscriptionManager[1234-cats]: Heartbeat request failed (2 consecutive): Unexpected status code: 500", + "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", + "SubscriptionManager: Heartbeat received response for ID: 1234-cats", + "ERROR: SubscriptionManager[1234-cats]: Heartbeat request failed (3 consecutive): Unexpected status code: 500", + "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", + "SubscriptionManager: Heartbeat received response for ID: 1234-cats", + "ERROR: SubscriptionManager[1234-cats]: Heartbeat request failed (4 consecutive): Unexpected status code: 500", + "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", + "SubscriptionManager: Heartbeat received response for ID: 1234-cats", + "ERROR: SubscriptionManager[1234-cats]: Heartbeat request failed (5 consecutive): Unexpected status code: 500", + "ERROR: SubscriptionManager[1234-cats]: Heartbeat request failed 5 times, terminating subscriptions and heartbeat interval: Unexpected status code: 500", + "SubscriptionManager: Terminating subscriptions for ID: 1234-cats", + "SubscriptionManager: Terminating heartbeat interval for http://mock-router-url.com", + "SubscriptionManager[1234-cats]: Subscription completed without errors", + "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", + ] + `); }); describe('retries', () => { @@ -1543,32 +1545,32 @@ describe('SubscriptionCallbackPlugin', () => { jest.advanceTimersByTime(5000); expect(logger.orderOfOperations).toMatchInlineSnapshot(` - [ - "SubscriptionCallback[1234-cats]: Received new subscription request", - "SubscriptionManager[1234-cats]: Sending \`check\` request to router", - "WARN: SubscriptionManager[1234-cats]: Retrying \`check\` request (attempt 1) due to error: request to http://mock-router-url.com/ failed, reason: network request error", - "WARN: SubscriptionManager[1234-cats]: Retrying \`check\` request (attempt 2) due to error: request to http://mock-router-url.com/ failed, reason: network request error", - "SubscriptionManager[1234-cats]: \`check\` request successful", - "SubscriptionManager[1234-cats]: Starting new heartbeat interval for http://mock-router-url.com", - "SubscriptionCallback[1234-cats]: Starting graphql-js subscription", - "SubscriptionCallback[1234-cats]: graphql-js subscription successful", - "SubscriptionManager[1234-cats]: Listening to graphql-js subscription", - "SubscriptionCallback[1234-cats]: Responding to original subscription request", - "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", - "SubscriptionManager: Heartbeat received response for ID: 1234-cats", - "SubscriptionManager: Heartbeat request successful, ID: 1234-cats", - "TESTING: Triggering first update", - "SubscriptionManager[1234-cats]: Sending \`next\` request to router", - "SubscriptionManager[1234-cats]: \`next\` request successful", - "SubscriptionCallback: Server is shutting down. Cleaning up outstanding subscriptions and heartbeat intervals", - "SubscriptionManager[1234-cats]: Sending \`complete\` request to router", - "SubscriptionManager[1234-cats]: \`complete\` request successful", - "SubscriptionManager: Terminating subscriptions for ID: 1234-cats", - "SubscriptionManager: Terminating heartbeat interval for http://mock-router-url.com", - "SubscriptionManager[1234-cats]: Subscription completed without errors", - "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", - ] - `); + [ + "SubscriptionCallback[1234-cats]: Received new subscription request", + "SubscriptionManager[1234-cats]: Sending \`check\` request to router", + "WARN: SubscriptionManager[1234-cats]: Retrying \`check\` request (attempt 1) due to error: network request error", + "WARN: SubscriptionManager[1234-cats]: Retrying \`check\` request (attempt 2) due to error: network request error", + "SubscriptionManager[1234-cats]: \`check\` request successful", + "SubscriptionManager[1234-cats]: Starting new heartbeat interval for http://mock-router-url.com", + "SubscriptionCallback[1234-cats]: Starting graphql-js subscription", + "SubscriptionCallback[1234-cats]: graphql-js subscription successful", + "SubscriptionManager[1234-cats]: Listening to graphql-js subscription", + "SubscriptionCallback[1234-cats]: Responding to original subscription request", + "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", + "SubscriptionManager: Heartbeat received response for ID: 1234-cats", + "SubscriptionManager: Heartbeat request successful, ID: 1234-cats", + "TESTING: Triggering first update", + "SubscriptionManager[1234-cats]: Sending \`next\` request to router", + "SubscriptionManager[1234-cats]: \`next\` request successful", + "SubscriptionCallback: Server is shutting down. Cleaning up outstanding subscriptions and heartbeat intervals", + "SubscriptionManager[1234-cats]: Sending \`complete\` request to router", + "SubscriptionManager[1234-cats]: \`complete\` request successful", + "SubscriptionManager: Terminating subscriptions for ID: 1234-cats", + "SubscriptionManager: Terminating heartbeat interval for http://mock-router-url.com", + "SubscriptionManager[1234-cats]: Subscription completed without errors", + "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", + ] + `); }); it('failed `next` requests', async () => { @@ -1666,39 +1668,39 @@ describe('SubscriptionCallbackPlugin', () => { jest.advanceTimersByTime(5000); expect(logger.orderOfOperations).toMatchInlineSnapshot(` - [ - "SubscriptionCallback[1234-cats]: Received new subscription request", - "SubscriptionManager[1234-cats]: Sending \`check\` request to router", - "SubscriptionManager[1234-cats]: \`check\` request successful", - "SubscriptionManager[1234-cats]: Starting new heartbeat interval for http://mock-router-url.com", - "SubscriptionCallback[1234-cats]: Starting graphql-js subscription", - "SubscriptionCallback[1234-cats]: graphql-js subscription successful", - "SubscriptionManager[1234-cats]: Listening to graphql-js subscription", - "SubscriptionCallback[1234-cats]: Responding to original subscription request", - "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", - "SubscriptionManager: Heartbeat received response for ID: 1234-cats", - "SubscriptionManager: Heartbeat request successful, ID: 1234-cats", - "TESTING: Triggering first update", - "SubscriptionManager[1234-cats]: Sending \`next\` request to router", - "TESTING: Triggering second update", - "WARN: SubscriptionManager[1234-cats]: Retrying \`next\` request (attempt 1) due to error: \`next\` request failed with unexpected status code: 500", - "WARN: SubscriptionManager[1234-cats]: Retrying \`next\` request (attempt 2) due to error: \`next\` request failed with unexpected status code: 500", - "WARN: SubscriptionManager[1234-cats]: Retrying \`next\` request (attempt 3) due to error: \`next\` request failed with unexpected status code: 500", - "SubscriptionManager[1234-cats]: \`next\` request successful", - "SubscriptionManager[1234-cats]: Sending \`next\` request to router", - "WARN: SubscriptionManager[1234-cats]: Retrying \`next\` request (attempt 1) due to error: \`next\` request failed with unexpected status code: 500", - "WARN: SubscriptionManager[1234-cats]: Retrying \`next\` request (attempt 2) due to error: \`next\` request failed with unexpected status code: 500", - "WARN: SubscriptionManager[1234-cats]: Retrying \`next\` request (attempt 3) due to error: \`next\` request failed with unexpected status code: 500", - "SubscriptionManager[1234-cats]: \`next\` request successful", - "SubscriptionCallback: Server is shutting down. Cleaning up outstanding subscriptions and heartbeat intervals", - "SubscriptionManager[1234-cats]: Sending \`complete\` request to router", - "SubscriptionManager[1234-cats]: \`complete\` request successful", - "SubscriptionManager: Terminating subscriptions for ID: 1234-cats", - "SubscriptionManager: Terminating heartbeat interval for http://mock-router-url.com", - "SubscriptionManager[1234-cats]: Subscription completed without errors", - "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", - ] - `); + [ + "SubscriptionCallback[1234-cats]: Received new subscription request", + "SubscriptionManager[1234-cats]: Sending \`check\` request to router", + "SubscriptionManager[1234-cats]: \`check\` request successful", + "SubscriptionManager[1234-cats]: Starting new heartbeat interval for http://mock-router-url.com", + "SubscriptionCallback[1234-cats]: Starting graphql-js subscription", + "SubscriptionCallback[1234-cats]: graphql-js subscription successful", + "SubscriptionManager[1234-cats]: Listening to graphql-js subscription", + "SubscriptionCallback[1234-cats]: Responding to original subscription request", + "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", + "SubscriptionManager: Heartbeat received response for ID: 1234-cats", + "SubscriptionManager: Heartbeat request successful, ID: 1234-cats", + "TESTING: Triggering first update", + "SubscriptionManager[1234-cats]: Sending \`next\` request to router", + "TESTING: Triggering second update", + "WARN: SubscriptionManager[1234-cats]: Retrying \`next\` request (attempt 1) due to error: \`next\` request failed with unexpected status code: 500", + "WARN: SubscriptionManager[1234-cats]: Retrying \`next\` request (attempt 2) due to error: \`next\` request failed with unexpected status code: 500", + "WARN: SubscriptionManager[1234-cats]: Retrying \`next\` request (attempt 3) due to error: \`next\` request failed with unexpected status code: 500", + "SubscriptionManager[1234-cats]: \`next\` request successful", + "SubscriptionManager[1234-cats]: Sending \`next\` request to router", + "WARN: SubscriptionManager[1234-cats]: Retrying \`next\` request (attempt 1) due to error: \`next\` request failed with unexpected status code: 500", + "WARN: SubscriptionManager[1234-cats]: Retrying \`next\` request (attempt 2) due to error: \`next\` request failed with unexpected status code: 500", + "WARN: SubscriptionManager[1234-cats]: Retrying \`next\` request (attempt 3) due to error: \`next\` request failed with unexpected status code: 500", + "SubscriptionManager[1234-cats]: \`next\` request successful", + "SubscriptionCallback: Server is shutting down. Cleaning up outstanding subscriptions and heartbeat intervals", + "SubscriptionManager[1234-cats]: Sending \`complete\` request to router", + "SubscriptionManager[1234-cats]: \`complete\` request successful", + "SubscriptionManager: Terminating subscriptions for ID: 1234-cats", + "SubscriptionManager: Terminating heartbeat interval for http://mock-router-url.com", + "SubscriptionManager[1234-cats]: Subscription completed without errors", + "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", + ] + `); }); it('failed `complete` requests', async () => { @@ -1774,32 +1776,32 @@ describe('SubscriptionCallbackPlugin', () => { jest.advanceTimersByTime(5000); expect(logger.orderOfOperations).toMatchInlineSnapshot(` - [ - "SubscriptionCallback[1234-cats]: Received new subscription request", - "SubscriptionManager[1234-cats]: Sending \`check\` request to router", - "SubscriptionManager[1234-cats]: \`check\` request successful", - "SubscriptionManager[1234-cats]: Starting new heartbeat interval for http://mock-router-url.com", - "SubscriptionCallback[1234-cats]: Starting graphql-js subscription", - "SubscriptionCallback[1234-cats]: graphql-js subscription successful", - "SubscriptionManager[1234-cats]: Listening to graphql-js subscription", - "SubscriptionCallback[1234-cats]: Responding to original subscription request", - "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", - "SubscriptionManager: Heartbeat received response for ID: 1234-cats", - "SubscriptionManager: Heartbeat request successful, ID: 1234-cats", - "TESTING: Triggering first update", - "SubscriptionManager[1234-cats]: Sending \`next\` request to router", - "SubscriptionManager[1234-cats]: \`next\` request successful", - "SubscriptionCallback: Server is shutting down. Cleaning up outstanding subscriptions and heartbeat intervals", - "SubscriptionManager[1234-cats]: Sending \`complete\` request to router", - "WARN: SubscriptionManager[1234-cats]: Retrying \`complete\` request (attempt 1) due to error: \`complete\` request failed with unexpected status code: 500", - "WARN: SubscriptionManager[1234-cats]: Retrying \`complete\` request (attempt 2) due to error: \`complete\` request failed with unexpected status code: 500", - "SubscriptionManager[1234-cats]: \`complete\` request successful", - "SubscriptionManager: Terminating subscriptions for ID: 1234-cats", - "SubscriptionManager: Terminating heartbeat interval for http://mock-router-url.com", - "SubscriptionManager[1234-cats]: Subscription completed without errors", - "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", - ] - `); + [ + "SubscriptionCallback[1234-cats]: Received new subscription request", + "SubscriptionManager[1234-cats]: Sending \`check\` request to router", + "SubscriptionManager[1234-cats]: \`check\` request successful", + "SubscriptionManager[1234-cats]: Starting new heartbeat interval for http://mock-router-url.com", + "SubscriptionCallback[1234-cats]: Starting graphql-js subscription", + "SubscriptionCallback[1234-cats]: graphql-js subscription successful", + "SubscriptionManager[1234-cats]: Listening to graphql-js subscription", + "SubscriptionCallback[1234-cats]: Responding to original subscription request", + "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", + "SubscriptionManager: Heartbeat received response for ID: 1234-cats", + "SubscriptionManager: Heartbeat request successful, ID: 1234-cats", + "TESTING: Triggering first update", + "SubscriptionManager[1234-cats]: Sending \`next\` request to router", + "SubscriptionManager[1234-cats]: \`next\` request successful", + "SubscriptionCallback: Server is shutting down. Cleaning up outstanding subscriptions and heartbeat intervals", + "SubscriptionManager[1234-cats]: Sending \`complete\` request to router", + "WARN: SubscriptionManager[1234-cats]: Retrying \`complete\` request (attempt 1) due to error: \`complete\` request failed with unexpected status code: 500", + "WARN: SubscriptionManager[1234-cats]: Retrying \`complete\` request (attempt 2) due to error: \`complete\` request failed with unexpected status code: 500", + "SubscriptionManager[1234-cats]: \`complete\` request successful", + "SubscriptionManager: Terminating subscriptions for ID: 1234-cats", + "SubscriptionManager: Terminating heartbeat interval for http://mock-router-url.com", + "SubscriptionManager[1234-cats]: Subscription completed without errors", + "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", + ] + `); }); it('`complete` requests to failure', async () => { @@ -1877,35 +1879,35 @@ describe('SubscriptionCallbackPlugin', () => { jest.advanceTimersByTime(5000); expect(logger.orderOfOperations).toMatchInlineSnapshot(` - [ - "SubscriptionCallback[1234-cats]: Received new subscription request", - "SubscriptionManager[1234-cats]: Sending \`check\` request to router", - "SubscriptionManager[1234-cats]: \`check\` request successful", - "SubscriptionManager[1234-cats]: Starting new heartbeat interval for http://mock-router-url.com", - "SubscriptionCallback[1234-cats]: Starting graphql-js subscription", - "SubscriptionCallback[1234-cats]: graphql-js subscription successful", - "SubscriptionManager[1234-cats]: Listening to graphql-js subscription", - "SubscriptionCallback[1234-cats]: Responding to original subscription request", - "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", - "SubscriptionManager: Heartbeat received response for ID: 1234-cats", - "SubscriptionManager: Heartbeat request successful, ID: 1234-cats", - "TESTING: Triggering first update", - "SubscriptionManager[1234-cats]: Sending \`next\` request to router", - "SubscriptionManager[1234-cats]: \`next\` request successful", - "SubscriptionCallback: Server is shutting down. Cleaning up outstanding subscriptions and heartbeat intervals", - "SubscriptionManager[1234-cats]: Sending \`complete\` request to router", - "WARN: SubscriptionManager[1234-cats]: Retrying \`complete\` request (attempt 1) due to error: \`complete\` request failed with unexpected status code: 500", - "WARN: SubscriptionManager[1234-cats]: Retrying \`complete\` request (attempt 2) due to error: \`complete\` request failed with unexpected status code: 500", - "WARN: SubscriptionManager[1234-cats]: Retrying \`complete\` request (attempt 3) due to error: \`complete\` request failed with unexpected status code: 500", - "WARN: SubscriptionManager[1234-cats]: Retrying \`complete\` request (attempt 4) due to error: \`complete\` request failed with unexpected status code: 500", - "WARN: SubscriptionManager[1234-cats]: Retrying \`complete\` request (attempt 5) due to error: \`complete\` request failed with unexpected status code: 500", - "ERROR: SubscriptionManager[1234-cats]: \`complete\` request failed: \`complete\` request failed with unexpected status code: 500", - "SubscriptionManager: Terminating subscriptions for ID: 1234-cats", - "SubscriptionManager: Terminating heartbeat interval for http://mock-router-url.com", - "SubscriptionManager[1234-cats]: Subscription completed without errors", - "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", - ] - `); + [ + "SubscriptionCallback[1234-cats]: Received new subscription request", + "SubscriptionManager[1234-cats]: Sending \`check\` request to router", + "SubscriptionManager[1234-cats]: \`check\` request successful", + "SubscriptionManager[1234-cats]: Starting new heartbeat interval for http://mock-router-url.com", + "SubscriptionCallback[1234-cats]: Starting graphql-js subscription", + "SubscriptionCallback[1234-cats]: graphql-js subscription successful", + "SubscriptionManager[1234-cats]: Listening to graphql-js subscription", + "SubscriptionCallback[1234-cats]: Responding to original subscription request", + "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", + "SubscriptionManager: Heartbeat received response for ID: 1234-cats", + "SubscriptionManager: Heartbeat request successful, ID: 1234-cats", + "TESTING: Triggering first update", + "SubscriptionManager[1234-cats]: Sending \`next\` request to router", + "SubscriptionManager[1234-cats]: \`next\` request successful", + "SubscriptionCallback: Server is shutting down. Cleaning up outstanding subscriptions and heartbeat intervals", + "SubscriptionManager[1234-cats]: Sending \`complete\` request to router", + "WARN: SubscriptionManager[1234-cats]: Retrying \`complete\` request (attempt 1) due to error: \`complete\` request failed with unexpected status code: 500", + "WARN: SubscriptionManager[1234-cats]: Retrying \`complete\` request (attempt 2) due to error: \`complete\` request failed with unexpected status code: 500", + "WARN: SubscriptionManager[1234-cats]: Retrying \`complete\` request (attempt 3) due to error: \`complete\` request failed with unexpected status code: 500", + "WARN: SubscriptionManager[1234-cats]: Retrying \`complete\` request (attempt 4) due to error: \`complete\` request failed with unexpected status code: 500", + "WARN: SubscriptionManager[1234-cats]: Retrying \`complete\` request (attempt 5) due to error: \`complete\` request failed with unexpected status code: 500", + "ERROR: SubscriptionManager[1234-cats]: \`complete\` request failed: \`complete\` request failed with unexpected status code: 500", + "SubscriptionManager: Terminating subscriptions for ID: 1234-cats", + "SubscriptionManager: Terminating heartbeat interval for http://mock-router-url.com", + "SubscriptionManager[1234-cats]: Subscription completed without errors", + "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", + ] + `); }); it('terminates subscription after max retries `next` requests', async () => { @@ -1983,32 +1985,32 @@ describe('SubscriptionCallbackPlugin', () => { jest.advanceTimersByTime(5000); expect(logger.orderOfOperations).toMatchInlineSnapshot(` - [ - "SubscriptionCallback[1234-cats]: Received new subscription request", - "SubscriptionManager[1234-cats]: Sending \`check\` request to router", - "SubscriptionManager[1234-cats]: \`check\` request successful", - "SubscriptionManager[1234-cats]: Starting new heartbeat interval for http://mock-router-url.com", - "SubscriptionCallback[1234-cats]: Starting graphql-js subscription", - "SubscriptionCallback[1234-cats]: graphql-js subscription successful", - "SubscriptionManager[1234-cats]: Listening to graphql-js subscription", - "SubscriptionCallback[1234-cats]: Responding to original subscription request", - "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", - "SubscriptionManager: Heartbeat received response for ID: 1234-cats", - "SubscriptionManager: Heartbeat request successful, ID: 1234-cats", - "TESTING: Triggering first update", - "SubscriptionManager[1234-cats]: Sending \`next\` request to router", - "WARN: SubscriptionManager[1234-cats]: Retrying \`next\` request (attempt 1) due to error: \`next\` request failed with unexpected status code: 500", - "WARN: SubscriptionManager[1234-cats]: Retrying \`next\` request (attempt 2) due to error: \`next\` request failed with unexpected status code: 500", - "WARN: SubscriptionManager[1234-cats]: Retrying \`next\` request (attempt 3) due to error: \`next\` request failed with unexpected status code: 500", - "WARN: SubscriptionManager[1234-cats]: Retrying \`next\` request (attempt 4) due to error: \`next\` request failed with unexpected status code: 500", - "WARN: SubscriptionManager[1234-cats]: Retrying \`next\` request (attempt 5) due to error: \`next\` request failed with unexpected status code: 500", - "ERROR: SubscriptionManager[1234-cats]: \`next\` request failed, terminating subscription: \`next\` request failed with unexpected status code: 500", - "SubscriptionManager: Terminating subscriptions for ID: 1234-cats", - "SubscriptionManager: Terminating heartbeat interval for http://mock-router-url.com", - "SubscriptionCallback: Server is shutting down. Cleaning up outstanding subscriptions and heartbeat intervals", - "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", - ] - `); + [ + "SubscriptionCallback[1234-cats]: Received new subscription request", + "SubscriptionManager[1234-cats]: Sending \`check\` request to router", + "SubscriptionManager[1234-cats]: \`check\` request successful", + "SubscriptionManager[1234-cats]: Starting new heartbeat interval for http://mock-router-url.com", + "SubscriptionCallback[1234-cats]: Starting graphql-js subscription", + "SubscriptionCallback[1234-cats]: graphql-js subscription successful", + "SubscriptionManager[1234-cats]: Listening to graphql-js subscription", + "SubscriptionCallback[1234-cats]: Responding to original subscription request", + "SubscriptionManager: Sending \`check\` request to http://mock-router-url.com for ID: 1234-cats", + "SubscriptionManager: Heartbeat received response for ID: 1234-cats", + "SubscriptionManager: Heartbeat request successful, ID: 1234-cats", + "TESTING: Triggering first update", + "SubscriptionManager[1234-cats]: Sending \`next\` request to router", + "WARN: SubscriptionManager[1234-cats]: Retrying \`next\` request (attempt 1) due to error: \`next\` request failed with unexpected status code: 500", + "WARN: SubscriptionManager[1234-cats]: Retrying \`next\` request (attempt 2) due to error: \`next\` request failed with unexpected status code: 500", + "WARN: SubscriptionManager[1234-cats]: Retrying \`next\` request (attempt 3) due to error: \`next\` request failed with unexpected status code: 500", + "WARN: SubscriptionManager[1234-cats]: Retrying \`next\` request (attempt 4) due to error: \`next\` request failed with unexpected status code: 500", + "WARN: SubscriptionManager[1234-cats]: Retrying \`next\` request (attempt 5) due to error: \`next\` request failed with unexpected status code: 500", + "ERROR: SubscriptionManager[1234-cats]: \`next\` request failed, terminating subscription: \`next\` request failed with unexpected status code: 500", + "SubscriptionManager: Terminating subscriptions for ID: 1234-cats", + "SubscriptionManager: Terminating heartbeat interval for http://mock-router-url.com", + "SubscriptionCallback: Server is shutting down. Cleaning up outstanding subscriptions and heartbeat intervals", + "SubscriptionCallback: Successfully cleaned up outstanding subscriptions and heartbeat intervals.", + ] + `); }); }); }, @@ -2100,10 +2102,13 @@ async function startSubscriptionServer( // isn't done yet, so it's insufficient. // * while (!nock.isDone()) { await new Promise(...) } - isDone is true when the // mock is consumed and before the reply is done, so also insufficient. +// * without the setImmediate, the upgrade from Nock v13 to Nock v14 changed +// some subtlety of the timing so that this resolved a bit before our code +// that processes the response runs. function promisifyNock(nock: nock.Scope) { return new Promise((resolve) => { nock.addListener('replied', () => { - resolve(); + setImmediate(resolve); }); }); } diff --git a/packages/server/src/__tests__/plugin/usageReporting/plugin.test.ts b/packages/server/src/__tests__/plugin/usageReporting/plugin.test.ts index 2fc047fe58b..a6caf2c641a 100644 --- a/packages/server/src/__tests__/plugin/usageReporting/plugin.test.ts +++ b/packages/server/src/__tests__/plugin/usageReporting/plugin.test.ts @@ -5,9 +5,9 @@ import { makeHTTPRequestHeaders } from '../../../plugin/usageReporting/plugin'; import { Trace, Report, - ITrace, - ITracesAndStats, - ContextualizedStats, + type ITrace, + type ITracesAndStats, + type ContextualizedStats, } from '@apollo/usage-reporting-protobuf'; import { pluginsEnabledForSchemaResolvers } from '../../../utils/schemaInstrumentation'; import nock from 'nock'; @@ -16,23 +16,27 @@ import { mockRandom, resetMockRandom } from 'jest-mock-random'; import { gunzipSync } from 'zlib'; import { ApolloServer, - GraphQLRequestContextDidResolveOperation, - GraphQLRequestMetrics, + type GraphQLRequestContextDidResolveOperation, + type GraphQLRequestMetrics, HeaderMap, } from '../../..'; import { - ApolloServerPluginUsageReportingOptions, + type ApolloServerPluginUsageReportingOptions, ApolloServerPluginUsageReporting, } from '../../../plugin/usageReporting'; import { ApolloServerPluginCacheControlDisabled, ApolloServerPluginUsageReportingDisabled, } from '../../../plugin/disabled'; -import { describe, it, expect, afterEach } from '@jest/globals'; +import { describe, it, expect, afterEach, beforeEach } from '@jest/globals'; +import { nockAfterEach, nockBeforeEach } from '../../nockAssertions'; const quietLogger = loglevel.getLogger('quiet'); quietLogger.setLevel(loglevel.levels.WARN); +beforeEach(nockBeforeEach); +afterEach(nockAfterEach); + describe('end-to-end', () => { async function runTest({ pluginOptions = {}, diff --git a/packages/server/src/__tests__/plugin/usageReporting/statsErrors.test.ts b/packages/server/src/__tests__/plugin/usageReporting/statsErrors.test.ts index a4fc53b84b3..2cc3d9385c9 100644 --- a/packages/server/src/__tests__/plugin/usageReporting/statsErrors.test.ts +++ b/packages/server/src/__tests__/plugin/usageReporting/statsErrors.test.ts @@ -1,10 +1,14 @@ import { ApolloGateway, IntrospectAndCompose, - ServiceEndpointDefinition, + RemoteGraphQLDataSource, + type ServiceEndpointDefinition, } from '@apollo/gateway'; import { buildSubgraphSchema } from '@apollo/subgraph'; -import { IContextualizedStats, Report } from '@apollo/usage-reporting-protobuf'; +import { + type IContextualizedStats, + Report, +} from '@apollo/usage-reporting-protobuf'; import type { Logger } from '@apollo/utils.logger'; import { afterEach, beforeEach, describe, expect, it } from '@jest/globals'; import gql from 'graphql-tag'; @@ -15,7 +19,7 @@ import type { BaseContext } from '../../../externalTypes'; import { ApolloServerPluginUsageReportingDisabled } from '../../../plugin/disabled'; import { ApolloServerPluginUsageReporting, - ApolloServerPluginUsageReportingOptions, + type ApolloServerPluginUsageReportingOptions, } from '../../../plugin/usageReporting'; import { startStandaloneServer } from '../../../standalone'; import { HeaderMap } from '../../../utils/HeaderMap'; @@ -558,6 +562,12 @@ function getGatewayServer( subgraphs, }), logger, + buildService({ url }) { + return new RemoteGraphQLDataSource({ + url, + fetcher: fetch, + }); + }, }), apollo: { key: 'my-apollo-key', graphRef: 'my-graph@current' }, logger, diff --git a/packages/server/src/__tests__/rollupCommonJs.test.ts b/packages/server/src/__tests__/rollupCommonJs.test.ts index 8ee46433b72..9635153fe31 100644 --- a/packages/server/src/__tests__/rollupCommonJs.test.ts +++ b/packages/server/src/__tests__/rollupCommonJs.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from '@jest/globals'; import commonjs from '@rollup/plugin-commonjs'; import path from 'path'; -import { rollup, OutputOptions } from 'rollup'; +import { rollup, type OutputOptions } from 'rollup'; describe('@rollup/plugin-commonjs', () => { it('bundles into es6 without circular dependencies issues', async () => { diff --git a/packages/server/src/__tests__/runQuery.test.ts b/packages/server/src/__tests__/runQuery.test.ts index 854bddfc4e9..d573ea31fae 100644 --- a/packages/server/src/__tests__/runQuery.test.ts +++ b/packages/server/src/__tests__/runQuery.test.ts @@ -1,6 +1,6 @@ import { - DocumentNode, - FormattedExecutionResult, + type DocumentNode, + type FormattedExecutionResult, GraphQLInt, GraphQLNonNull, GraphQLObjectType, @@ -11,16 +11,16 @@ import { import { InMemoryLRUCache } from '@apollo/utils.keyvaluecache'; import { ApolloServer, - ApolloServerOptions, - ApolloServerPlugin, - BaseContext, - GraphQLRequest, - GraphQLRequestExecutionListener, - GraphQLRequestListener, - GraphQLRequestListenerDidResolveField, - GraphQLRequestListenerExecutionDidEnd, - GraphQLRequestListenerParsingDidEnd, - GraphQLRequestListenerValidationDidEnd, + type ApolloServerOptions, + type ApolloServerPlugin, + type BaseContext, + type GraphQLRequest, + type GraphQLRequestExecutionListener, + type GraphQLRequestListener, + type GraphQLRequestListenerDidResolveField, + type GraphQLRequestListenerExecutionDidEnd, + type GraphQLRequestListenerParsingDidEnd, + type GraphQLRequestListenerValidationDidEnd, HeaderMap, } from '..'; import { mockLogger } from './mockLogger'; @@ -227,9 +227,13 @@ it('correctly passes in variables (and arguments)', async () => { it('throws an error if there are missing variables', async () => { const query = `query TestVar($base: Int!){ testArgumentValue(base: $base) }`; - const expected = 'Variable "$base" of required type "Int!" was not provided.'; const res = await runQuery({ schema }, { query }); - expect(res.errors![0].message).toEqual(expected); + expect([ + // graphql 16 + 'Variable "$base" of required type "Int!" was not provided.', + // graphql 17 + 'Variable "$base" has invalid value: Expected a value of non-null type "Int!" to be provided.', + ]).toContain(res.errors![0].message); }); it('supports yielding resolver functions', async () => { diff --git a/packages/server/src/__tests__/standalone/standaloneSpecific.test.ts b/packages/server/src/__tests__/standalone/standaloneSpecific.test.ts index 1f3231c376a..ebc530fe0c3 100644 --- a/packages/server/src/__tests__/standalone/standaloneSpecific.test.ts +++ b/packages/server/src/__tests__/standalone/standaloneSpecific.test.ts @@ -1,5 +1,4 @@ import { describe, expect, it } from '@jest/globals'; -import fetch from 'node-fetch'; import { ApolloServer } from '../..'; import { startStandaloneServer } from '../../standalone'; @@ -135,9 +134,16 @@ describe('Configuration', () => { }, body: excessivelyLargeBody, }); - const { data } = await result.json(); + const body = await result.json(); + if (typeof body !== 'object' || !body) { + throw Error(`body has wrong type ${typeof body}`); + } + if (!('data' in body)) { + throw Error('body lacks data'); + } - expect(data.hello).toEqual('hello world!'); + const { data } = body; + expect(data).toEqual({ hello: 'hello world!' }); await server.stop(); }); diff --git a/packages/server/src/express4/index.ts b/packages/server/src/express4/index.ts deleted file mode 100644 index edee0084269..00000000000 --- a/packages/server/src/express4/index.ts +++ /dev/null @@ -1,111 +0,0 @@ -import type { WithRequired } from '@apollo/utils.withrequired'; -import type express from 'express'; -import type { ApolloServer } from '../index.js'; -import type { - BaseContext, - ContextFunction, - HTTPGraphQLRequest, -} from '../externalTypes/index.js'; -import { parse as urlParse } from 'url'; -import { HeaderMap } from '../utils/HeaderMap.js'; - -export interface ExpressContextFunctionArgument { - req: express.Request; - res: express.Response; -} - -export interface ExpressMiddlewareOptions { - context?: ContextFunction<[ExpressContextFunctionArgument], TContext>; -} - -export function expressMiddleware( - server: ApolloServer, - options?: ExpressMiddlewareOptions, -): express.RequestHandler; -export function expressMiddleware( - server: ApolloServer, - options: WithRequired, 'context'>, -): express.RequestHandler; -export function expressMiddleware( - server: ApolloServer, - options?: ExpressMiddlewareOptions, -): express.RequestHandler { - server.assertStarted('expressMiddleware()'); - - // This `any` is safe because the overload above shows that context can - // only be left out if you're using BaseContext as your context, and {} is a - // valid BaseContext. - const defaultContext: ContextFunction< - [ExpressContextFunctionArgument], - any - > = async () => ({}); - - const context: ContextFunction<[ExpressContextFunctionArgument], TContext> = - options?.context ?? defaultContext; - - return (req, res, next) => { - if (!req.body) { - // The json body-parser *always* sets req.body to {} if it's unset (even - // if the Content-Type doesn't match), so if it isn't set, you probably - // forgot to set up body-parser. (Note that this may change in the future - // body-parser@2.) - res.status(500); - res.send( - '`req.body` is not set; this probably means you forgot to set up the ' + - '`json` middleware before the Apollo Server middleware.', - ); - return; - } - - const headers = new HeaderMap(); - for (const [key, value] of Object.entries(req.headers)) { - if (value !== undefined) { - // Node/Express headers can be an array or a single value. We join - // multi-valued headers with `, ` just like the Fetch API's `Headers` - // does. We assume that keys are already lower-cased (as per the Node - // docs on IncomingMessage.headers) and so we don't bother to lower-case - // them or combine across multiple keys that would lower-case to the - // same value. - headers.set(key, Array.isArray(value) ? value.join(', ') : value); - } - } - - const httpGraphQLRequest: HTTPGraphQLRequest = { - method: req.method.toUpperCase(), - headers, - search: urlParse(req.url).search ?? '', - body: req.body, - }; - - server - .executeHTTPGraphQLRequest({ - httpGraphQLRequest, - context: () => context({ req, res }), - }) - .then(async (httpGraphQLResponse) => { - for (const [key, value] of httpGraphQLResponse.headers) { - res.setHeader(key, value); - } - res.statusCode = httpGraphQLResponse.status || 200; - - if (httpGraphQLResponse.body.kind === 'complete') { - res.send(httpGraphQLResponse.body.string); - return; - } - - for await (const chunk of httpGraphQLResponse.body.asyncIterator) { - res.write(chunk); - // Express/Node doesn't define a way of saying "it's time to send this - // data over the wire"... but the popular `compression` middleware - // (which implements `accept-encoding: gzip` and friends) does, by - // monkey-patching a `flush` method onto the response. So we call it - // if it's there. - if (typeof (res as any).flush === 'function') { - (res as any).flush(); - } - } - res.end(); - }) - .catch(next); - }; -} diff --git a/packages/server/src/externalTypes/constructor.ts b/packages/server/src/externalTypes/constructor.ts index 48251286ed0..9f2dd7d11bf 100644 --- a/packages/server/src/externalTypes/constructor.ts +++ b/packages/server/src/externalTypes/constructor.ts @@ -108,13 +108,14 @@ interface ApolloServerOptionsBase { // parsing the schema. parseOptions?: ParseOptions; - // TODO(AS5): remove OR warn + ignore with this option set, ignore option and - // flip default behavior. Default false. This opt-in configuration fixes a - // regression introduced in v4. In v3, Apollo Server would correctly respond - // to a request with invalid `variables` with a 400 status code. AS4 responds - // with a 200 status code by default. We recommend setting this to `true` - // unless you've explicitly worked around this regression already (and maybe - // consider undoing the workaround). + // TODO(AS6): remove this option. Configuration to `true` is default behavior + // and configuration to `false` is deprecated. If you depend on `false` + // behavior, we recommend migrating away from that at your earliest + // convenience since it won't be supported in the next major version. + /** + * @deprecated `true` is now the default behavior in AS5. `false` will not be + * supported in AS6 since this option will be removed. + */ status400ForVariableCoercionErrors?: boolean; // For testing only. diff --git a/packages/server/src/externalTypes/context.ts b/packages/server/src/externalTypes/context.ts index 4c84aa367b1..6842c333e3d 100644 --- a/packages/server/src/externalTypes/context.ts +++ b/packages/server/src/externalTypes/context.ts @@ -4,7 +4,7 @@ export type BaseContext = {}; // Integration authors should use this type for typing their own user-provided -// context function. See the express middleware for a usage example. +// context function. See `@as-integrations/express5` for a usage example. export type ContextFunction< TIntegrationSpecificArgs extends any[], TContext extends BaseContext = BaseContext, diff --git a/packages/server/src/externalTypes/incrementalDeliveryPolyfill.ts b/packages/server/src/externalTypes/incrementalDeliveryPolyfill.ts index 7052408c0fc..6ddbc419e1b 100644 --- a/packages/server/src/externalTypes/incrementalDeliveryPolyfill.ts +++ b/packages/server/src/externalTypes/incrementalDeliveryPolyfill.ts @@ -4,7 +4,7 @@ import type { FormattedExecutionResult, GraphQLFormattedError } from 'graphql'; // from `graphql-js` once graphql 17 is released. It is possible that these // types will change slightly before the final v17 is released, in which case // the relevant parts of our API may change incompatibly in a minor version of -// AS4; this should not affect any users who aren't explicitly installing +// AS5; this should not affect any users who aren't explicitly installing // pre-releases of graphql 17. interface ObjMap { diff --git a/packages/server/src/incrementalDeliveryPolyfill.ts b/packages/server/src/incrementalDeliveryPolyfill.ts index 383bfdce2db..1dbc1b7a746 100644 --- a/packages/server/src/incrementalDeliveryPolyfill.ts +++ b/packages/server/src/incrementalDeliveryPolyfill.ts @@ -96,7 +96,10 @@ async function tryToLoadGraphQL17() { return; } const graphql = await import('graphql'); - if ('experimentalExecuteIncrementally' in graphql) { + if ( + graphql.version === '17.0.0-alpha.2' && + 'experimentalExecuteIncrementally' in graphql + ) { graphqlExperimentalExecuteIncrementally = (graphql as any) .experimentalExecuteIncrementally; } else { diff --git a/packages/server/src/plugin/cacheControl/index.ts b/packages/server/src/plugin/cacheControl/index.ts index 1972f42be35..bf611689357 100644 --- a/packages/server/src/plugin/cacheControl/index.ts +++ b/packages/server/src/plugin/cacheControl/index.ts @@ -11,7 +11,7 @@ import { } from 'graphql'; import { newCachePolicy } from '../../cachePolicy.js'; import { internalPlugin } from '../../internalPlugin.js'; -import LRUCache from 'lru-cache'; +import { LRUCache } from 'lru-cache'; import type { CacheHint, CacheScope, diff --git a/packages/server/src/plugin/drainHttpServer/index.ts b/packages/server/src/plugin/drainHttpServer/index.ts index 7223e70408e..3225d9fafc4 100644 --- a/packages/server/src/plugin/drainHttpServer/index.ts +++ b/packages/server/src/plugin/drainHttpServer/index.ts @@ -1,5 +1,4 @@ import type http from 'http'; -import { AbortController } from 'node-abort-controller'; import type { ApolloServerPlugin } from '../../externalTypes/index.js'; import { Stopper } from './stoppable.js'; @@ -19,9 +18,10 @@ export interface ApolloServerPluginDrainHttpServerOptions { } /** - * This plugin is used with apollo-server-express and other framework - * integrations to drain your HTTP server on shutdown. - * See https://www.apollographql.com/docs/apollo-server/api/plugin/drain-http-server/ + * This plugin is used with frameworks built on Node's http.Server + * (`startStandaloneServer`, Express, etc) to drain your HTTP server on + * shutdown. See + * https://www.apollographql.com/docs/apollo-server/api/plugin/drain-http-server/ * for details. */ export function ApolloServerPluginDrainHttpServer( @@ -32,23 +32,9 @@ export function ApolloServerPluginDrainHttpServer( async serverWillStart() { return { async drainServer() { - // Note: we don't use `AbortSignal.timeout()` here because our - // polyfill doesn't support it (and even once we drop Node v14 - // support, if we don't require at least Node v16.14 then the built-in - // version won't support it either). - const hardDestroyAbortController = new AbortController(); const stopGracePeriodMillis = options.stopGracePeriodMillis ?? 10_000; - let timeout: NodeJS.Timeout | undefined; - if (stopGracePeriodMillis < Infinity) { - timeout = setTimeout( - () => hardDestroyAbortController.abort(), - stopGracePeriodMillis, - ); - } - await stopper.stop(hardDestroyAbortController.signal); - if (timeout) { - clearTimeout(timeout); - } + const signal = AbortSignal.timeout(stopGracePeriodMillis); + await stopper.stop(signal); }, }; }, diff --git a/packages/server/src/plugin/drainHttpServer/stoppable.ts b/packages/server/src/plugin/drainHttpServer/stoppable.ts index 852bbc961af..ea554d0038c 100644 --- a/packages/server/src/plugin/drainHttpServer/stoppable.ts +++ b/packages/server/src/plugin/drainHttpServer/stoppable.ts @@ -29,7 +29,6 @@ import type http from 'http'; import https from 'https'; import type { Socket } from 'net'; -import type { AbortSignal } from 'node-abort-controller'; export class Stopper { private requestCountPerSocket = new Map(); diff --git a/packages/server/src/plugin/landingPage/default/index.ts b/packages/server/src/plugin/landingPage/default/index.ts index f36fafdfe31..9502eda11ad 100644 --- a/packages/server/src/plugin/landingPage/default/index.ts +++ b/packages/server/src/plugin/landingPage/default/index.ts @@ -115,21 +115,14 @@ function ApolloServerPluginLandingPageDefault( return { __internal_installed_implicitly__: false, - async serverWillStart(server) { - if (config.precomputedNonce) { - server.logger.warn( - "The `precomputedNonce` landing page configuration option is deprecated. Removing this option is strictly an improvement to Apollo Server's landing page Content Security Policy (CSP) implementation for preventing XSS attacks.", - ); - } + async serverWillStart() { return { async renderLandingPage() { const encodedASLandingPageVersion = encodeURIComponent( apolloServerLandingPageVersion, ); async function html() { - const nonce = - config.precomputedNonce ?? - createHash('sha256').update(uuidv4()).digest('hex'); + const nonce = createHash('sha256').update(uuidv4()).digest('hex'); const scriptCsp = `script-src 'self' 'nonce-${nonce}' ${scriptSafeList}`; const styleCsp = `style-src 'nonce-${nonce}' ${styleSafeList}`; const imageCsp = `img-src https://apollo-server-landing-page.cdn.apollographql.com`; diff --git a/packages/server/src/plugin/landingPage/default/types.ts b/packages/server/src/plugin/landingPage/default/types.ts index 5d15cc9e82c..ddf1ea50044 100644 --- a/packages/server/src/plugin/landingPage/default/types.ts +++ b/packages/server/src/plugin/landingPage/default/types.ts @@ -54,17 +54,6 @@ export type ApolloServerPluginLandingPageDefaultBaseOptions = { includeCookies?: boolean; - /** - * @deprecated This was originally introduced to support Cloudflare Workers - * based on a misunderstanding of CSP nonces. A different, more complete - * solution has since been implemented which removes the need for this option - * altogether. Specifying this option degrades the security of your - * application since it reuses the same nonce for every request, whereas - * Apollo Server generates a new one for every request by default. - * TODO(AS5): Remove this option. - */ - precomputedNonce?: string; - // For Apollo use only. __internal_apolloStudioEnv__?: 'staging' | 'prod'; }; diff --git a/packages/server/src/plugin/schemaReporting/generated/operations.d.ts b/packages/server/src/plugin/schemaReporting/generated/operations.d.ts index 219979e414d..21c764af21f 100644 --- a/packages/server/src/plugin/schemaReporting/generated/operations.d.ts +++ b/packages/server/src/plugin/schemaReporting/generated/operations.d.ts @@ -3,27 +3,29 @@ export type InputMaybe = Maybe; export type Exact = { [K in keyof T]: T[K] }; export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; +export type MakeEmpty = { [_ in K]?: never }; +export type Incremental = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never }; /** All built-in and custom scalars, mapped to their actual values */ export type Scalars = { - ID: string; - String: string; - Boolean: boolean; - Int: number; - Float: number; - BigInt: any; - Blob: any; - Date: any; - DateTime: any; - GraphQLDocument: any; - JSON: any; - JSONObject: any; - Long: any; - NaiveDateTime: any; - Object: any; - SHA256: any; - StringOrInt: any; - Timestamp: any; - Void: any; + ID: { input: string; output: string; } + String: { input: string; output: string; } + Boolean: { input: boolean; output: boolean; } + Int: { input: number; output: number; } + Float: { input: number; output: number; } + Blob: { input: any; output: any; } + Cursor: { input: any; output: any; } + Date: { input: any; output: any; } + DateTime: { input: any; output: any; } + FederationVersion: { input: any; output: any; } + GraphQLDocument: { input: any; output: any; } + JSON: { input: any; output: any; } + Long: { input: any; output: any; } + NaiveDateTime: { input: any; output: any; } + Object: { input: any; output: any; } + SHA256: { input: any; output: any; } + StringOrInt: { input: any; output: any; } + Timestamp: { input: any; output: any; } + Void: { input: any; output: any; } }; /** An organization in Apollo Studio. Can have multiple members and graphs. */ @@ -46,44 +48,48 @@ export type Account = { * application. Apollo's media server will downscale larger images to at least the requested size, * but this will not happen for third-party media servers. */ - avatarUrl?: Maybe; - billingContactEmail?: Maybe; + avatarUrl?: Maybe; + billingContactEmail?: Maybe; billingInfo?: Maybe; billingInsights: BillingInsights; + capabilities?: Maybe; /** Fetch a CloudOnboarding associated with this account */ cloudOnboarding?: Maybe; - companyUrl?: Maybe; + companyUrl?: Maybe; /** The time at which the account was created */ - createdAt?: Maybe; + createdAt?: Maybe; currentBillingMonth?: Maybe; currentPlan: BillingPlan; currentSubscription?: Maybe; - eligibleForUsageBasedPlan: Scalars['Boolean']; - expiredTrialDismissedAt?: Maybe; + eligibleForUsageBasedPlan: Scalars['Boolean']['output']; + expiredTrialDismissedAt?: Maybe; expiredTrialSubscription?: Maybe; - graphIDAvailable: Scalars['Boolean']; + graphIDAvailable: Scalars['Boolean']['output']; /** Graphs belonging to this organization. */ graphs: Array; /** Graphs belonging to this organization. */ graphsConnection?: Maybe; - hasBeenOnTrial: Scalars['Boolean']; - hasBillingInfo?: Maybe; + hasBeenOnTrial: Scalars['Boolean']['output']; + hasBillingInfo?: Maybe; /** Globally unique identifier, which isn't guaranteed stable (can be changed by administrators). */ - id: Scalars['ID']; + id: Scalars['ID']['output']; /** * Internal immutable identifier for the account. Only visible to Apollo admins (because it really * shouldn't be used in normal client apps). */ - internalID: Scalars['ID']; + internalID: Scalars['ID']['output']; invitations?: Maybe>; invoices: Array; - isLocked?: Maybe; - isOnExpiredTrial: Scalars['Boolean']; - isOnTrial: Scalars['Boolean']; + isLocked?: Maybe; + isOnExpiredTrial: Scalars['Boolean']['output']; + isOnTrial: Scalars['Boolean']['output']; + isSelfServiceDeletable?: Maybe; + limits?: Maybe; lockDetails?: Maybe; + /** The user memberships belonging to an Organization */ memberships?: Maybe>; /** Name of the organization, which can change over time and isn't unique. */ - name: Scalars['String']; + name: Scalars['String']['output']; /** * Fetches an offline license for the account. * (If you need this then please contact your Apollo account manager to discuss your requirements.) @@ -98,27 +104,29 @@ export type Account = { /** List the private subgraphs associated with your Apollo account */ privateSubgraphs: Array; /** @deprecated use Account.createdAt instead */ - provisionedAt?: Maybe; + provisionedAt?: Maybe; /** Returns a different registry related stats pertaining to this account. */ registryStatsWindow?: Maybe; - requests?: Maybe; - requestsInCurrentBillingPeriod?: Maybe; + requests?: Maybe; + requestsInCurrentBillingPeriod?: Maybe; roles?: Maybe; routerEntitlement?: Maybe; /** How many seats would be included in your next bill, as best estimated today */ - seatCountForNextBill?: Maybe; + seatCountForNextBill?: Maybe; seats?: Maybe; - secondaryIDs: Array; + secondaryIDs: Array; /** * Graphs belonging to this organization. * @deprecated Use graphs field instead */ services: Array; + /** The session length in seconds for a user in this org */ + sessionDurationInSeconds?: Maybe; /** - * If non-null, this organization tracks its members through an upstream, eg PingOne; + * If non-null, this organization tracks its members through an upstream IdP; * invitations are not possible on SSO-synchronized account. */ - sso?: Maybe; + sso?: Maybe; ssoV2?: Maybe; /** @deprecated no longer relevant; it's only ever populated for enterprise accounts */ state?: Maybe; @@ -128,144 +136,145 @@ export type Account = { stats: AccountStatsWindow; statsWindow?: Maybe; subscriptions: Array; - survey?: Maybe; /** Gets a ticket for this org, by id */ - ticket?: Maybe; - /** List of Zendesk tickets submitted for this org */ - tickets?: Maybe>; + supportTicket?: Maybe; + /** List of support tickets submitted for this org */ + supportTickets?: Maybe>; + survey?: Maybe; /** * All Variants within the Graphs belonging to this organization. Can be limited to those favorited by the current user. * @deprecated use Service.variants instead */ variants?: Maybe; - vitallyTraits?: Maybe; }; /** An organization in Apollo Studio. Can have multiple members and graphs. */ -export type AccountavatarUrlArgs = { - size?: Scalars['Int']; +export type AccountAvatarUrlArgs = { + size?: Scalars['Int']['input']; }; /** An organization in Apollo Studio. Can have multiple members and graphs. */ -export type AccountbillingInsightsArgs = { - from: Scalars['Date']; - limit?: InputMaybe; - to?: InputMaybe; +export type AccountBillingInsightsArgs = { + from: Scalars['Date']['input']; + limit?: InputMaybe; + to?: InputMaybe; windowSize?: InputMaybe; }; /** An organization in Apollo Studio. Can have multiple members and graphs. */ -export type AccountcloudOnboardingArgs = { - graphRef: Scalars['String']; +export type AccountCloudOnboardingArgs = { + graphRef: Scalars['String']['input']; }; /** An organization in Apollo Studio. Can have multiple members and graphs. */ -export type AccountgraphIDAvailableArgs = { - id: Scalars['ID']; +export type AccountGraphIdAvailableArgs = { + id: Scalars['ID']['input']; }; /** An organization in Apollo Studio. Can have multiple members and graphs. */ -export type AccountgraphsArgs = { +export type AccountGraphsArgs = { filterBy?: InputMaybe; - includeDeleted?: InputMaybe; + includeDeleted?: InputMaybe; }; /** An organization in Apollo Studio. Can have multiple members and graphs. */ -export type AccountgraphsConnectionArgs = { - after?: InputMaybe; - before?: InputMaybe; +export type AccountGraphsConnectionArgs = { + after?: InputMaybe; + before?: InputMaybe; filterBy?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; }; /** An organization in Apollo Studio. Can have multiple members and graphs. */ -export type AccountinvitationsArgs = { - includeAccepted?: Scalars['Boolean']; +export type AccountInvitationsArgs = { + includeAccepted?: Scalars['Boolean']['input']; }; /** An organization in Apollo Studio. Can have multiple members and graphs. */ -export type AccountoperationUsageArgs = { +export type AccountOperationUsageArgs = { forWindow?: InputMaybe; }; /** An organization in Apollo Studio. Can have multiple members and graphs. */ -export type AccountprivateSubgraphsArgs = { +export type AccountPrivateSubgraphsArgs = { cloudProvider: CloudProvider; }; /** An organization in Apollo Studio. Can have multiple members and graphs. */ -export type AccountregistryStatsWindowArgs = { - from: Scalars['Timestamp']; +export type AccountRegistryStatsWindowArgs = { + from: Scalars['Timestamp']['input']; resolution?: InputMaybe; - to?: InputMaybe; + to?: InputMaybe; }; /** An organization in Apollo Studio. Can have multiple members and graphs. */ -export type AccountrequestsArgs = { - from: Scalars['Timestamp']; - to: Scalars['Timestamp']; +export type AccountRequestsArgs = { + from: Scalars['Timestamp']['input']; + to: Scalars['Timestamp']['input']; }; /** An organization in Apollo Studio. Can have multiple members and graphs. */ -export type AccountservicesArgs = { - includeDeleted?: InputMaybe; +export type AccountServicesArgs = { + includeDeleted?: InputMaybe; }; /** An organization in Apollo Studio. Can have multiple members and graphs. */ -export type AccountstatsArgs = { - from: Scalars['Timestamp']; +export type AccountStatsArgs = { + from: Scalars['Timestamp']['input']; resolution?: InputMaybe; - to?: InputMaybe; + to?: InputMaybe; }; /** An organization in Apollo Studio. Can have multiple members and graphs. */ -export type AccountstatsWindowArgs = { - from: Scalars['Timestamp']; +export type AccountStatsWindowArgs = { + from: Scalars['Timestamp']['input']; resolution?: InputMaybe; - to?: InputMaybe; + to?: InputMaybe; }; /** An organization in Apollo Studio. Can have multiple members and graphs. */ -export type AccountsurveyArgs = { - id: Scalars['String']; +export type AccountSupportTicketArgs = { + id: Scalars['ID']['input']; }; /** An organization in Apollo Studio. Can have multiple members and graphs. */ -export type AccountticketArgs = { - id: Scalars['ID']; +export type AccountSurveyArgs = { + id: Scalars['String']['input']; }; /** An organization in Apollo Studio. Can have multiple members and graphs. */ -export type AccountvariantsArgs = { +export type AccountVariantsArgs = { filterBy?: InputMaybe; }; /** Columns of AccountBillingUsageStats. */ export enum AccountBillingUsageStatsColumn { + AGENT_ID = 'AGENT_ID', AGENT_VERSION = 'AGENT_VERSION', GRAPH_DEPLOYMENT_TYPE = 'GRAPH_DEPLOYMENT_TYPE', OPERATION_COUNT = 'OPERATION_COUNT', OPERATION_COUNT_PROVIDED_EXPLICITLY = 'OPERATION_COUNT_PROVIDED_EXPLICITLY', OPERATION_SUBTYPE = 'OPERATION_SUBTYPE', OPERATION_TYPE = 'OPERATION_TYPE', + ROUTER_FEATURES_ENABLED = 'ROUTER_FEATURES_ENABLED', SCHEMA_TAG = 'SCHEMA_TAG', SERVICE_ID = 'SERVICE_ID', TIMESTAMP = 'TIMESTAMP' @@ -273,58 +282,68 @@ export enum AccountBillingUsageStatsColumn { export type AccountBillingUsageStatsDimensions = { __typename?: 'AccountBillingUsageStatsDimensions'; - agentVersion?: Maybe; - graphDeploymentType?: Maybe; - operationCountProvidedExplicitly?: Maybe; - operationSubtype?: Maybe; - operationType?: Maybe; - schemaTag?: Maybe; - serviceId?: Maybe; + agentId?: Maybe; + agentVersion?: Maybe; + graphDeploymentType?: Maybe; + operationCountProvidedExplicitly?: Maybe; + operationSubtype?: Maybe; + operationType?: Maybe; + routerFeaturesEnabled?: Maybe; + schemaTag?: Maybe; + serviceId?: Maybe; }; /** Filter for data in AccountBillingUsageStats. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type AccountBillingUsageStatsFilter = { + /** Selects rows whose agentId dimension equals the given value if not null. To query for the null value, use {in: {agentId: [null]}} instead. */ + agentId?: InputMaybe; /** Selects rows whose agentVersion dimension equals the given value if not null. To query for the null value, use {in: {agentVersion: [null]}} instead. */ - agentVersion?: InputMaybe; + agentVersion?: InputMaybe; and?: InputMaybe>; /** Selects rows whose graphDeploymentType dimension equals the given value if not null. To query for the null value, use {in: {graphDeploymentType: [null]}} instead. */ - graphDeploymentType?: InputMaybe; + graphDeploymentType?: InputMaybe; in?: InputMaybe; not?: InputMaybe; /** Selects rows whose operationCountProvidedExplicitly dimension equals the given value if not null. To query for the null value, use {in: {operationCountProvidedExplicitly: [null]}} instead. */ - operationCountProvidedExplicitly?: InputMaybe; + operationCountProvidedExplicitly?: InputMaybe; /** Selects rows whose operationSubtype dimension equals the given value if not null. To query for the null value, use {in: {operationSubtype: [null]}} instead. */ - operationSubtype?: InputMaybe; + operationSubtype?: InputMaybe; /** Selects rows whose operationType dimension equals the given value if not null. To query for the null value, use {in: {operationType: [null]}} instead. */ - operationType?: InputMaybe; + operationType?: InputMaybe; or?: InputMaybe>; + /** Selects rows whose routerFeaturesEnabled dimension equals the given value if not null. To query for the null value, use {in: {routerFeaturesEnabled: [null]}} instead. */ + routerFeaturesEnabled?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */ - serviceId?: InputMaybe; + serviceId?: InputMaybe; }; /** Filter for data in AccountBillingUsageStats. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type AccountBillingUsageStatsFilterIn = { + /** Selects rows whose agentId dimension is in the given list. A null value in the list means a row with null for that dimension. */ + agentId?: InputMaybe>>; /** Selects rows whose agentVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - agentVersion?: InputMaybe>>; + agentVersion?: InputMaybe>>; /** Selects rows whose graphDeploymentType dimension is in the given list. A null value in the list means a row with null for that dimension. */ - graphDeploymentType?: InputMaybe>>; + graphDeploymentType?: InputMaybe>>; /** Selects rows whose operationCountProvidedExplicitly dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationCountProvidedExplicitly?: InputMaybe>>; + operationCountProvidedExplicitly?: InputMaybe>>; /** Selects rows whose operationSubtype dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationSubtype?: InputMaybe>>; + operationSubtype?: InputMaybe>>; /** Selects rows whose operationType dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationType?: InputMaybe>>; + operationType?: InputMaybe>>; + /** Selects rows whose routerFeaturesEnabled dimension is in the given list. A null value in the list means a row with null for that dimension. */ + routerFeaturesEnabled?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - serviceId?: InputMaybe>>; + serviceId?: InputMaybe>>; }; export type AccountBillingUsageStatsMetrics = { __typename?: 'AccountBillingUsageStatsMetrics'; - operationCount: Scalars['Long']; + operationCount: Scalars['Long']['output']; }; export type AccountBillingUsageStatsOrderBySpec = { @@ -339,45 +358,220 @@ export type AccountBillingUsageStatsRecord = { /** Metrics of AccountBillingUsageStats that can be aggregated over. */ metrics: AccountBillingUsageStatsMetrics; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; +}; + +export type AccountCapabilities = { + __typename?: 'AccountCapabilities'; + clientVersions: Scalars['Boolean']['output']; + clients: Scalars['Boolean']['output']; + cloudGraphs: Scalars['Boolean']['output']; + connectorsInRouter: Scalars['Boolean']['output']; + contracts: Scalars['Boolean']['output']; + customSessionLengths: Scalars['Boolean']['output']; + datadog: Scalars['Boolean']['output']; + federation: Scalars['Boolean']['output']; + launches: Scalars['Boolean']['output']; + linting: Scalars['Boolean']['output']; + metrics: Scalars['Boolean']['output']; + notifications: Scalars['Boolean']['output']; + operationRegistry: Scalars['Boolean']['output']; + persistedQueries: Scalars['Boolean']['output']; + proposals: Scalars['Boolean']['output']; + schemaValidation: Scalars['Boolean']['output']; + sso: Scalars['Boolean']['output']; + traces: Scalars['Boolean']['output']; + userRoles: Scalars['Boolean']['output']; + webhooks: Scalars['Boolean']['output']; +}; + +/** Columns of AccountCardinalityStats. */ +export enum AccountCardinalityStatsColumn { + CLIENT_NAME_CARDINALITY = 'CLIENT_NAME_CARDINALITY', + CLIENT_VERSION_CARDINALITY = 'CLIENT_VERSION_CARDINALITY', + OPERATION_SHAPE_CARDINALITY = 'OPERATION_SHAPE_CARDINALITY', + SCHEMA_COORDINATE_CARDINALITY = 'SCHEMA_COORDINATE_CARDINALITY', + SCHEMA_TAG = 'SCHEMA_TAG', + SERVICE_ID = 'SERVICE_ID', + TIMESTAMP = 'TIMESTAMP' +} + +export type AccountCardinalityStatsDimensions = { + __typename?: 'AccountCardinalityStatsDimensions'; + schemaTag?: Maybe; + serviceId?: Maybe; +}; + +/** Filter for data in AccountCardinalityStats. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ +export type AccountCardinalityStatsFilter = { + and?: InputMaybe>; + in?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>; + /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ + schemaTag?: InputMaybe; + /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */ + serviceId?: InputMaybe; +}; + +/** Filter for data in AccountCardinalityStats. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ +export type AccountCardinalityStatsFilterIn = { + /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ + schemaTag?: InputMaybe>>; + /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ + serviceId?: InputMaybe>>; +}; + +export type AccountCardinalityStatsMetrics = { + __typename?: 'AccountCardinalityStatsMetrics'; + clientNameCardinality: Scalars['Float']['output']; + clientVersionCardinality: Scalars['Float']['output']; + operationShapeCardinality: Scalars['Float']['output']; + schemaCoordinateCardinality: Scalars['Float']['output']; +}; + +export type AccountCardinalityStatsOrderBySpec = { + column: AccountCardinalityStatsColumn; + direction: Ordering; +}; + +export type AccountCardinalityStatsRecord = { + __typename?: 'AccountCardinalityStatsRecord'; + /** Dimensions of AccountCardinalityStats that can be grouped by. */ + groupBy: AccountCardinalityStatsDimensions; + /** Metrics of AccountCardinalityStats that can be aggregated over. */ + metrics: AccountCardinalityStatsMetrics; + /** Starting segment timestamp. */ + timestamp: Scalars['Timestamp']['output']; }; export type AccountChecksStatsMetrics = { __typename?: 'AccountChecksStatsMetrics'; - totalFailedChecks: Scalars['Long']; - totalSuccessfulChecks: Scalars['Long']; + totalFailedChecks: Scalars['Long']['output']; + totalSuccessfulChecks: Scalars['Long']['output']; }; export type AccountChecksStatsRecord = { __typename?: 'AccountChecksStatsRecord'; - id: Scalars['ID']; + id: Scalars['ID']['output']; metrics: AccountChecksStatsMetrics; - timestamp: Scalars['Timestamp']; -}; - -export type AccountCustomerTraits = { - __typename?: 'AccountCustomerTraits'; - accountOwner?: Maybe; - adminLink?: Maybe; - federationInProd?: Maybe; - product?: Maybe; - requestsLast30Days?: Maybe; - sfdcId?: Maybe; - sso?: Maybe; - tier?: Maybe; - totalGraphs?: Maybe; - totalRequests?: Maybe; - totalSubgraphs?: Maybe; - totalVariants?: Maybe; - usersCount?: Maybe; - usingClassicGraphs?: Maybe; - usingCloudGraphs?: Maybe; - usingExplorer?: Maybe; - usingFederation?: Maybe; - usingFederation2?: Maybe; - usingRover?: Maybe; - usingSchemaChecks?: Maybe; - usingVariants?: Maybe; + timestamp: Scalars['Timestamp']['output']; +}; + +/** Columns of AccountCoordinateUsage. */ +export enum AccountCoordinateUsageColumn { + CLIENT_NAME = 'CLIENT_NAME', + CLIENT_VERSION = 'CLIENT_VERSION', + ESTIMATED_EXECUTION_COUNT = 'ESTIMATED_EXECUTION_COUNT', + EXECUTION_COUNT = 'EXECUTION_COUNT', + KIND = 'KIND', + NAMED_ATTRIBUTE = 'NAMED_ATTRIBUTE', + NAMED_TYPE = 'NAMED_TYPE', + OPERATION_SUBTYPE = 'OPERATION_SUBTYPE', + OPERATION_TYPE = 'OPERATION_TYPE', + QUERY_ID = 'QUERY_ID', + QUERY_NAME = 'QUERY_NAME', + REFERENCING_OPERATION_COUNT = 'REFERENCING_OPERATION_COUNT', + REQUEST_COUNT_NULL = 'REQUEST_COUNT_NULL', + REQUEST_COUNT_UNDEFINED = 'REQUEST_COUNT_UNDEFINED', + SCHEMA_TAG = 'SCHEMA_TAG', + SERVICE_ID = 'SERVICE_ID', + TIMESTAMP = 'TIMESTAMP' +} + +export type AccountCoordinateUsageDimensions = { + __typename?: 'AccountCoordinateUsageDimensions'; + clientName?: Maybe; + clientVersion?: Maybe; + kind?: Maybe; + namedAttribute?: Maybe; + namedType?: Maybe; + operationSubtype?: Maybe; + operationType?: Maybe; + queryId?: Maybe; + queryName?: Maybe; + schemaTag?: Maybe; + serviceId?: Maybe; +}; + +/** Filter for data in AccountCoordinateUsage. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ +export type AccountCoordinateUsageFilter = { + and?: InputMaybe>; + /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */ + clientName?: InputMaybe; + /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */ + clientVersion?: InputMaybe; + in?: InputMaybe; + /** Selects rows whose kind dimension equals the given value if not null. To query for the null value, use {in: {kind: [null]}} instead. */ + kind?: InputMaybe; + /** Selects rows whose namedAttribute dimension equals the given value if not null. To query for the null value, use {in: {namedAttribute: [null]}} instead. */ + namedAttribute?: InputMaybe; + /** Selects rows whose namedType dimension equals the given value if not null. To query for the null value, use {in: {namedType: [null]}} instead. */ + namedType?: InputMaybe; + not?: InputMaybe; + /** Selects rows whose operationSubtype dimension equals the given value if not null. To query for the null value, use {in: {operationSubtype: [null]}} instead. */ + operationSubtype?: InputMaybe; + /** Selects rows whose operationType dimension equals the given value if not null. To query for the null value, use {in: {operationType: [null]}} instead. */ + operationType?: InputMaybe; + or?: InputMaybe>; + /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */ + queryId?: InputMaybe; + /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */ + queryName?: InputMaybe; + /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ + schemaTag?: InputMaybe; + /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */ + serviceId?: InputMaybe; +}; + +/** Filter for data in AccountCoordinateUsage. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ +export type AccountCoordinateUsageFilterIn = { + /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */ + clientName?: InputMaybe>>; + /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ + clientVersion?: InputMaybe>>; + /** Selects rows whose kind dimension is in the given list. A null value in the list means a row with null for that dimension. */ + kind?: InputMaybe>>; + /** Selects rows whose namedAttribute dimension is in the given list. A null value in the list means a row with null for that dimension. */ + namedAttribute?: InputMaybe>>; + /** Selects rows whose namedType dimension is in the given list. A null value in the list means a row with null for that dimension. */ + namedType?: InputMaybe>>; + /** Selects rows whose operationSubtype dimension is in the given list. A null value in the list means a row with null for that dimension. */ + operationSubtype?: InputMaybe>>; + /** Selects rows whose operationType dimension is in the given list. A null value in the list means a row with null for that dimension. */ + operationType?: InputMaybe>>; + /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */ + queryId?: InputMaybe>>; + /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */ + queryName?: InputMaybe>>; + /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ + schemaTag?: InputMaybe>>; + /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ + serviceId?: InputMaybe>>; +}; + +export type AccountCoordinateUsageMetrics = { + __typename?: 'AccountCoordinateUsageMetrics'; + estimatedExecutionCount: Scalars['Long']['output']; + executionCount: Scalars['Long']['output']; + referencingOperationCount: Scalars['Long']['output']; + requestCountNull: Scalars['Long']['output']; + requestCountUndefined: Scalars['Long']['output']; +}; + +export type AccountCoordinateUsageOrderBySpec = { + column: AccountCoordinateUsageColumn; + direction: Ordering; +}; + +export type AccountCoordinateUsageRecord = { + __typename?: 'AccountCoordinateUsageRecord'; + /** Dimensions of AccountCoordinateUsage that can be grouped by. */ + groupBy: AccountCoordinateUsageDimensions; + /** Metrics of AccountCoordinateUsage that can be aggregated over. */ + metrics: AccountCoordinateUsageMetrics; + /** Starting segment timestamp. */ + timestamp: Scalars['Timestamp']['output']; }; /** Columns of AccountEdgeServerInfos. */ @@ -396,63 +590,63 @@ export enum AccountEdgeServerInfosColumn { export type AccountEdgeServerInfosDimensions = { __typename?: 'AccountEdgeServerInfosDimensions'; - bootId?: Maybe; - executableSchemaId?: Maybe; - libraryVersion?: Maybe; - platform?: Maybe; - runtimeVersion?: Maybe; - schemaTag?: Maybe; - serverId?: Maybe; - serviceId?: Maybe; - userVersion?: Maybe; + bootId?: Maybe; + executableSchemaId?: Maybe; + libraryVersion?: Maybe; + platform?: Maybe; + runtimeVersion?: Maybe; + schemaTag?: Maybe; + serverId?: Maybe; + serviceId?: Maybe; + userVersion?: Maybe; }; /** Filter for data in AccountEdgeServerInfos. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type AccountEdgeServerInfosFilter = { and?: InputMaybe>; /** Selects rows whose bootId dimension equals the given value if not null. To query for the null value, use {in: {bootId: [null]}} instead. */ - bootId?: InputMaybe; + bootId?: InputMaybe; /** Selects rows whose executableSchemaId dimension equals the given value if not null. To query for the null value, use {in: {executableSchemaId: [null]}} instead. */ - executableSchemaId?: InputMaybe; + executableSchemaId?: InputMaybe; in?: InputMaybe; /** Selects rows whose libraryVersion dimension equals the given value if not null. To query for the null value, use {in: {libraryVersion: [null]}} instead. */ - libraryVersion?: InputMaybe; + libraryVersion?: InputMaybe; not?: InputMaybe; or?: InputMaybe>; /** Selects rows whose platform dimension equals the given value if not null. To query for the null value, use {in: {platform: [null]}} instead. */ - platform?: InputMaybe; + platform?: InputMaybe; /** Selects rows whose runtimeVersion dimension equals the given value if not null. To query for the null value, use {in: {runtimeVersion: [null]}} instead. */ - runtimeVersion?: InputMaybe; + runtimeVersion?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; /** Selects rows whose serverId dimension equals the given value if not null. To query for the null value, use {in: {serverId: [null]}} instead. */ - serverId?: InputMaybe; + serverId?: InputMaybe; /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */ - serviceId?: InputMaybe; + serviceId?: InputMaybe; /** Selects rows whose userVersion dimension equals the given value if not null. To query for the null value, use {in: {userVersion: [null]}} instead. */ - userVersion?: InputMaybe; + userVersion?: InputMaybe; }; /** Filter for data in AccountEdgeServerInfos. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type AccountEdgeServerInfosFilterIn = { /** Selects rows whose bootId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - bootId?: InputMaybe>>; + bootId?: InputMaybe>>; /** Selects rows whose executableSchemaId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - executableSchemaId?: InputMaybe>>; + executableSchemaId?: InputMaybe>>; /** Selects rows whose libraryVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - libraryVersion?: InputMaybe>>; + libraryVersion?: InputMaybe>>; /** Selects rows whose platform dimension is in the given list. A null value in the list means a row with null for that dimension. */ - platform?: InputMaybe>>; + platform?: InputMaybe>>; /** Selects rows whose runtimeVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - runtimeVersion?: InputMaybe>>; + runtimeVersion?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; /** Selects rows whose serverId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - serverId?: InputMaybe>>; + serverId?: InputMaybe>>; /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - serviceId?: InputMaybe>>; + serviceId?: InputMaybe>>; /** Selects rows whose userVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - userVersion?: InputMaybe>>; + userVersion?: InputMaybe>>; }; export type AccountEdgeServerInfosOrderBySpec = { @@ -465,7 +659,7 @@ export type AccountEdgeServerInfosRecord = { /** Dimensions of AccountEdgeServerInfos that can be grouped by. */ groupBy: AccountEdgeServerInfosDimensions; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; }; /** Columns of AccountErrorStats. */ @@ -485,64 +679,64 @@ export enum AccountErrorStatsColumn { export type AccountErrorStatsDimensions = { __typename?: 'AccountErrorStatsDimensions'; - clientName?: Maybe; - clientVersion?: Maybe; - path?: Maybe; - queryId?: Maybe; - queryName?: Maybe; - schemaHash?: Maybe; - schemaTag?: Maybe; - serviceId?: Maybe; + clientName?: Maybe; + clientVersion?: Maybe; + path?: Maybe; + queryId?: Maybe; + queryName?: Maybe; + schemaHash?: Maybe; + schemaTag?: Maybe; + serviceId?: Maybe; }; /** Filter for data in AccountErrorStats. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type AccountErrorStatsFilter = { and?: InputMaybe>; /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */ - clientName?: InputMaybe; + clientName?: InputMaybe; /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */ - clientVersion?: InputMaybe; + clientVersion?: InputMaybe; in?: InputMaybe; not?: InputMaybe; or?: InputMaybe>; /** Selects rows whose path dimension equals the given value if not null. To query for the null value, use {in: {path: [null]}} instead. */ - path?: InputMaybe; + path?: InputMaybe; /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */ - queryId?: InputMaybe; + queryId?: InputMaybe; /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */ - queryName?: InputMaybe; + queryName?: InputMaybe; /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */ - schemaHash?: InputMaybe; + schemaHash?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */ - serviceId?: InputMaybe; + serviceId?: InputMaybe; }; /** Filter for data in AccountErrorStats. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type AccountErrorStatsFilterIn = { /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientName?: InputMaybe>>; + clientName?: InputMaybe>>; /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientVersion?: InputMaybe>>; + clientVersion?: InputMaybe>>; /** Selects rows whose path dimension is in the given list. A null value in the list means a row with null for that dimension. */ - path?: InputMaybe>>; + path?: InputMaybe>>; /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryId?: InputMaybe>>; + queryId?: InputMaybe>>; /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryName?: InputMaybe>>; + queryName?: InputMaybe>>; /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaHash?: InputMaybe>>; + schemaHash?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - serviceId?: InputMaybe>>; + serviceId?: InputMaybe>>; }; export type AccountErrorStatsMetrics = { __typename?: 'AccountErrorStatsMetrics'; - errorsCount: Scalars['Long']; - requestsWithErrorsCount: Scalars['Long']; + errorsCount: Scalars['Long']['output']; + requestsWithErrorsCount: Scalars['Long']['output']; }; export type AccountErrorStatsOrderBySpec = { @@ -557,7 +751,121 @@ export type AccountErrorStatsRecord = { /** Metrics of AccountErrorStats that can be aggregated over. */ metrics: AccountErrorStatsMetrics; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; +}; + +/** Columns of AccountFederatedErrorStats. */ +export enum AccountFederatedErrorStatsColumn { + AGENT_VERSION = 'AGENT_VERSION', + CLIENT_NAME = 'CLIENT_NAME', + CLIENT_VERSION = 'CLIENT_VERSION', + ERROR_CODE = 'ERROR_CODE', + ERROR_COUNT = 'ERROR_COUNT', + ERROR_PATH = 'ERROR_PATH', + ERROR_SERVICE = 'ERROR_SERVICE', + OPERATION_ID = 'OPERATION_ID', + OPERATION_NAME = 'OPERATION_NAME', + OPERATION_TYPE = 'OPERATION_TYPE', + SCHEMA_TAG = 'SCHEMA_TAG', + SERVICE_ID = 'SERVICE_ID', + SEVERITY = 'SEVERITY', + TIMESTAMP = 'TIMESTAMP' +} + +export type AccountFederatedErrorStatsDimensions = { + __typename?: 'AccountFederatedErrorStatsDimensions'; + agentVersion?: Maybe; + clientName?: Maybe; + clientVersion?: Maybe; + errorCode?: Maybe; + errorPath?: Maybe; + errorService?: Maybe; + operationId?: Maybe; + operationName?: Maybe; + operationType?: Maybe; + schemaTag?: Maybe; + serviceId?: Maybe; + severity?: Maybe; +}; + +/** Filter for data in AccountFederatedErrorStats. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ +export type AccountFederatedErrorStatsFilter = { + /** Selects rows whose agentVersion dimension equals the given value if not null. To query for the null value, use {in: {agentVersion: [null]}} instead. */ + agentVersion?: InputMaybe; + and?: InputMaybe>; + /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */ + clientName?: InputMaybe; + /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */ + clientVersion?: InputMaybe; + /** Selects rows whose errorCode dimension equals the given value if not null. To query for the null value, use {in: {errorCode: [null]}} instead. */ + errorCode?: InputMaybe; + /** Selects rows whose errorPath dimension equals the given value if not null. To query for the null value, use {in: {errorPath: [null]}} instead. */ + errorPath?: InputMaybe; + /** Selects rows whose errorService dimension equals the given value if not null. To query for the null value, use {in: {errorService: [null]}} instead. */ + errorService?: InputMaybe; + in?: InputMaybe; + not?: InputMaybe; + /** Selects rows whose operationId dimension equals the given value if not null. To query for the null value, use {in: {operationId: [null]}} instead. */ + operationId?: InputMaybe; + /** Selects rows whose operationName dimension equals the given value if not null. To query for the null value, use {in: {operationName: [null]}} instead. */ + operationName?: InputMaybe; + /** Selects rows whose operationType dimension equals the given value if not null. To query for the null value, use {in: {operationType: [null]}} instead. */ + operationType?: InputMaybe; + or?: InputMaybe>; + /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ + schemaTag?: InputMaybe; + /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */ + serviceId?: InputMaybe; + /** Selects rows whose severity dimension equals the given value if not null. To query for the null value, use {in: {severity: [null]}} instead. */ + severity?: InputMaybe; +}; + +/** Filter for data in AccountFederatedErrorStats. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ +export type AccountFederatedErrorStatsFilterIn = { + /** Selects rows whose agentVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ + agentVersion?: InputMaybe>>; + /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */ + clientName?: InputMaybe>>; + /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ + clientVersion?: InputMaybe>>; + /** Selects rows whose errorCode dimension is in the given list. A null value in the list means a row with null for that dimension. */ + errorCode?: InputMaybe>>; + /** Selects rows whose errorPath dimension is in the given list. A null value in the list means a row with null for that dimension. */ + errorPath?: InputMaybe>>; + /** Selects rows whose errorService dimension is in the given list. A null value in the list means a row with null for that dimension. */ + errorService?: InputMaybe>>; + /** Selects rows whose operationId dimension is in the given list. A null value in the list means a row with null for that dimension. */ + operationId?: InputMaybe>>; + /** Selects rows whose operationName dimension is in the given list. A null value in the list means a row with null for that dimension. */ + operationName?: InputMaybe>>; + /** Selects rows whose operationType dimension is in the given list. A null value in the list means a row with null for that dimension. */ + operationType?: InputMaybe>>; + /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ + schemaTag?: InputMaybe>>; + /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ + serviceId?: InputMaybe>>; + /** Selects rows whose severity dimension is in the given list. A null value in the list means a row with null for that dimension. */ + severity?: InputMaybe>>; +}; + +export type AccountFederatedErrorStatsMetrics = { + __typename?: 'AccountFederatedErrorStatsMetrics'; + errorCount: Scalars['Long']['output']; +}; + +export type AccountFederatedErrorStatsOrderBySpec = { + column: AccountFederatedErrorStatsColumn; + direction: Ordering; +}; + +export type AccountFederatedErrorStatsRecord = { + __typename?: 'AccountFederatedErrorStatsRecord'; + /** Dimensions of AccountFederatedErrorStats that can be grouped by. */ + groupBy: AccountFederatedErrorStatsDimensions; + /** Metrics of AccountFederatedErrorStats that can be aggregated over. */ + metrics: AccountFederatedErrorStatsMetrics; + /** Starting segment timestamp. */ + timestamp: Scalars['Timestamp']['output']; }; /** Columns of AccountFieldExecutions. */ @@ -576,47 +884,47 @@ export enum AccountFieldExecutionsColumn { export type AccountFieldExecutionsDimensions = { __typename?: 'AccountFieldExecutionsDimensions'; - fieldName?: Maybe; - parentType?: Maybe; - schemaTag?: Maybe; - serviceId?: Maybe; + fieldName?: Maybe; + parentType?: Maybe; + schemaTag?: Maybe; + serviceId?: Maybe; }; /** Filter for data in AccountFieldExecutions. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type AccountFieldExecutionsFilter = { and?: InputMaybe>; /** Selects rows whose fieldName dimension equals the given value if not null. To query for the null value, use {in: {fieldName: [null]}} instead. */ - fieldName?: InputMaybe; + fieldName?: InputMaybe; in?: InputMaybe; not?: InputMaybe; or?: InputMaybe>; /** Selects rows whose parentType dimension equals the given value if not null. To query for the null value, use {in: {parentType: [null]}} instead. */ - parentType?: InputMaybe; + parentType?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */ - serviceId?: InputMaybe; + serviceId?: InputMaybe; }; /** Filter for data in AccountFieldExecutions. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type AccountFieldExecutionsFilterIn = { /** Selects rows whose fieldName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - fieldName?: InputMaybe>>; + fieldName?: InputMaybe>>; /** Selects rows whose parentType dimension is in the given list. A null value in the list means a row with null for that dimension. */ - parentType?: InputMaybe>>; + parentType?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - serviceId?: InputMaybe>>; + serviceId?: InputMaybe>>; }; export type AccountFieldExecutionsMetrics = { __typename?: 'AccountFieldExecutionsMetrics'; - errorsCount: Scalars['Long']; - estimatedExecutionCount: Scalars['Long']; - observedExecutionCount: Scalars['Long']; - referencingOperationCount: Scalars['Long']; - requestsWithErrorsCount: Scalars['Long']; + errorsCount: Scalars['Long']['output']; + estimatedExecutionCount: Scalars['Long']['output']; + observedExecutionCount: Scalars['Long']['output']; + referencingOperationCount: Scalars['Long']['output']; + requestsWithErrorsCount: Scalars['Long']['output']; }; export type AccountFieldExecutionsOrderBySpec = { @@ -631,7 +939,7 @@ export type AccountFieldExecutionsRecord = { /** Metrics of AccountFieldExecutions that can be aggregated over. */ metrics: AccountFieldExecutionsMetrics; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; }; /** Columns of AccountFieldLatencies. */ @@ -647,44 +955,44 @@ export enum AccountFieldLatenciesColumn { export type AccountFieldLatenciesDimensions = { __typename?: 'AccountFieldLatenciesDimensions'; - field?: Maybe; - fieldName?: Maybe; - parentType?: Maybe; - schemaHash?: Maybe; - schemaTag?: Maybe; - serviceId?: Maybe; + field?: Maybe; + fieldName?: Maybe; + parentType?: Maybe; + schemaHash?: Maybe; + schemaTag?: Maybe; + serviceId?: Maybe; }; /** Filter for data in AccountFieldLatencies. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type AccountFieldLatenciesFilter = { and?: InputMaybe>; /** Selects rows whose fieldName dimension equals the given value if not null. To query for the null value, use {in: {fieldName: [null]}} instead. */ - fieldName?: InputMaybe; + fieldName?: InputMaybe; in?: InputMaybe; not?: InputMaybe; or?: InputMaybe>; /** Selects rows whose parentType dimension equals the given value if not null. To query for the null value, use {in: {parentType: [null]}} instead. */ - parentType?: InputMaybe; + parentType?: InputMaybe; /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */ - schemaHash?: InputMaybe; + schemaHash?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */ - serviceId?: InputMaybe; + serviceId?: InputMaybe; }; /** Filter for data in AccountFieldLatencies. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type AccountFieldLatenciesFilterIn = { /** Selects rows whose fieldName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - fieldName?: InputMaybe>>; + fieldName?: InputMaybe>>; /** Selects rows whose parentType dimension is in the given list. A null value in the list means a row with null for that dimension. */ - parentType?: InputMaybe>>; + parentType?: InputMaybe>>; /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaHash?: InputMaybe>>; + schemaHash?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - serviceId?: InputMaybe>>; + serviceId?: InputMaybe>>; }; export type AccountFieldLatenciesMetrics = { @@ -704,7 +1012,7 @@ export type AccountFieldLatenciesRecord = { /** Metrics of AccountFieldLatencies that can be aggregated over. */ metrics: AccountFieldLatenciesMetrics; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; }; /** Columns of AccountFieldUsage. */ @@ -728,80 +1036,80 @@ export enum AccountFieldUsageColumn { export type AccountFieldUsageDimensions = { __typename?: 'AccountFieldUsageDimensions'; - clientName?: Maybe; - clientVersion?: Maybe; - fieldName?: Maybe; - operationSubtype?: Maybe; - operationType?: Maybe; - parentType?: Maybe; - queryId?: Maybe; - queryName?: Maybe; - schemaHash?: Maybe; - schemaTag?: Maybe; - serviceId?: Maybe; + clientName?: Maybe; + clientVersion?: Maybe; + fieldName?: Maybe; + operationSubtype?: Maybe; + operationType?: Maybe; + parentType?: Maybe; + queryId?: Maybe; + queryName?: Maybe; + schemaHash?: Maybe; + schemaTag?: Maybe; + serviceId?: Maybe; }; /** Filter for data in AccountFieldUsage. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type AccountFieldUsageFilter = { and?: InputMaybe>; /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */ - clientName?: InputMaybe; + clientName?: InputMaybe; /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */ - clientVersion?: InputMaybe; + clientVersion?: InputMaybe; /** Selects rows whose fieldName dimension equals the given value if not null. To query for the null value, use {in: {fieldName: [null]}} instead. */ - fieldName?: InputMaybe; + fieldName?: InputMaybe; in?: InputMaybe; not?: InputMaybe; /** Selects rows whose operationSubtype dimension equals the given value if not null. To query for the null value, use {in: {operationSubtype: [null]}} instead. */ - operationSubtype?: InputMaybe; + operationSubtype?: InputMaybe; /** Selects rows whose operationType dimension equals the given value if not null. To query for the null value, use {in: {operationType: [null]}} instead. */ - operationType?: InputMaybe; + operationType?: InputMaybe; or?: InputMaybe>; /** Selects rows whose parentType dimension equals the given value if not null. To query for the null value, use {in: {parentType: [null]}} instead. */ - parentType?: InputMaybe; + parentType?: InputMaybe; /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */ - queryId?: InputMaybe; + queryId?: InputMaybe; /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */ - queryName?: InputMaybe; + queryName?: InputMaybe; /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */ - schemaHash?: InputMaybe; + schemaHash?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */ - serviceId?: InputMaybe; + serviceId?: InputMaybe; }; /** Filter for data in AccountFieldUsage. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type AccountFieldUsageFilterIn = { /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientName?: InputMaybe>>; + clientName?: InputMaybe>>; /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientVersion?: InputMaybe>>; + clientVersion?: InputMaybe>>; /** Selects rows whose fieldName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - fieldName?: InputMaybe>>; + fieldName?: InputMaybe>>; /** Selects rows whose operationSubtype dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationSubtype?: InputMaybe>>; + operationSubtype?: InputMaybe>>; /** Selects rows whose operationType dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationType?: InputMaybe>>; + operationType?: InputMaybe>>; /** Selects rows whose parentType dimension is in the given list. A null value in the list means a row with null for that dimension. */ - parentType?: InputMaybe>>; + parentType?: InputMaybe>>; /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryId?: InputMaybe>>; + queryId?: InputMaybe>>; /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryName?: InputMaybe>>; + queryName?: InputMaybe>>; /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaHash?: InputMaybe>>; + schemaHash?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - serviceId?: InputMaybe>>; + serviceId?: InputMaybe>>; }; export type AccountFieldUsageMetrics = { __typename?: 'AccountFieldUsageMetrics'; - estimatedExecutionCount: Scalars['Long']; - executionCount: Scalars['Long']; - referencingOperationCount: Scalars['Long']; + estimatedExecutionCount: Scalars['Long']['output']; + executionCount: Scalars['Long']['output']; + referencingOperationCount: Scalars['Long']['output']; }; export type AccountFieldUsageOrderBySpec = { @@ -816,7 +1124,7 @@ export type AccountFieldUsageRecord = { /** Metrics of AccountFieldUsage that can be aggregated over. */ metrics: AccountFieldUsageMetrics; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; }; /** A list of graphs that belong to an account. */ @@ -834,7 +1142,7 @@ export type AccountGraphConnection = { export type AccountGraphEdge = { __typename?: 'AccountGraphEdge'; /** A cursor for use in pagination. */ - cursor: Scalars['String']; + cursor: Scalars['String']['output']; /** A graph attached to the account. */ node?: Maybe; }; @@ -854,7 +1162,7 @@ export type AccountGraphVariantConnection = { export type AccountGraphVariantEdge = { __typename?: 'AccountGraphVariantEdge'; /** A cursor for use in pagination. */ - cursor: Scalars['String']; + cursor: Scalars['String']['output']; /** A variant from a graph attached to the account. */ node?: Maybe; }; @@ -878,58 +1186,58 @@ export enum AccountGraphosCloudMetricsColumn { export type AccountGraphosCloudMetricsDimensions = { __typename?: 'AccountGraphosCloudMetricsDimensions'; - agentVersion?: Maybe; - cloudProvider?: Maybe; - routerId?: Maybe; - schemaTag?: Maybe; - serviceId?: Maybe; - tier?: Maybe; + agentVersion?: Maybe; + cloudProvider?: Maybe; + routerId?: Maybe; + schemaTag?: Maybe; + serviceId?: Maybe; + tier?: Maybe; }; /** Filter for data in AccountGraphosCloudMetrics. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type AccountGraphosCloudMetricsFilter = { /** Selects rows whose agentVersion dimension equals the given value if not null. To query for the null value, use {in: {agentVersion: [null]}} instead. */ - agentVersion?: InputMaybe; + agentVersion?: InputMaybe; and?: InputMaybe>; /** Selects rows whose cloudProvider dimension equals the given value if not null. To query for the null value, use {in: {cloudProvider: [null]}} instead. */ - cloudProvider?: InputMaybe; + cloudProvider?: InputMaybe; in?: InputMaybe; not?: InputMaybe; or?: InputMaybe>; /** Selects rows whose routerId dimension equals the given value if not null. To query for the null value, use {in: {routerId: [null]}} instead. */ - routerId?: InputMaybe; + routerId?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */ - serviceId?: InputMaybe; + serviceId?: InputMaybe; /** Selects rows whose tier dimension equals the given value if not null. To query for the null value, use {in: {tier: [null]}} instead. */ - tier?: InputMaybe; + tier?: InputMaybe; }; /** Filter for data in AccountGraphosCloudMetrics. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type AccountGraphosCloudMetricsFilterIn = { /** Selects rows whose agentVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - agentVersion?: InputMaybe>>; + agentVersion?: InputMaybe>>; /** Selects rows whose cloudProvider dimension is in the given list. A null value in the list means a row with null for that dimension. */ - cloudProvider?: InputMaybe>>; + cloudProvider?: InputMaybe>>; /** Selects rows whose routerId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - routerId?: InputMaybe>>; + routerId?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - serviceId?: InputMaybe>>; + serviceId?: InputMaybe>>; /** Selects rows whose tier dimension is in the given list. A null value in the list means a row with null for that dimension. */ - tier?: InputMaybe>>; + tier?: InputMaybe>>; }; export type AccountGraphosCloudMetricsMetrics = { __typename?: 'AccountGraphosCloudMetricsMetrics'; - responseSize: Scalars['Long']; - responseSizeThrottled: Scalars['Long']; - routerOperations: Scalars['Long']; - routerOperationsThrottled: Scalars['Long']; - subgraphFetches: Scalars['Long']; - subgraphFetchesThrottled: Scalars['Long']; + responseSize: Scalars['Long']['output']; + responseSizeThrottled: Scalars['Long']['output']; + routerOperations: Scalars['Long']['output']; + routerOperationsThrottled: Scalars['Long']['output']; + subgraphFetches: Scalars['Long']['output']; + subgraphFetchesThrottled: Scalars['Long']['output']; }; export type AccountGraphosCloudMetricsOrderBySpec = { @@ -944,32 +1252,42 @@ export type AccountGraphosCloudMetricsRecord = { /** Metrics of AccountGraphosCloudMetrics that can be aggregated over. */ metrics: AccountGraphosCloudMetricsMetrics; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; }; +/** An invitation for a user to join an organization. */ export type AccountInvitation = { __typename?: 'AccountInvitation'; /** An accepted invitation cannot be used anymore */ - acceptedAt?: Maybe; + acceptedAt?: Maybe; /** Who accepted the invitation */ acceptedBy?: Maybe; /** Time the invitation was created */ - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; /** Who created the invitation */ createdBy?: Maybe; - email: Scalars['String']; - id: Scalars['ID']; + email: Scalars['String']['output']; + id: Scalars['ID']['output']; /** Last time we sent an email for the invitation */ - lastSentAt?: Maybe; + lastSentAt?: Maybe; /** Access role for the invitee */ role: UserPermission; }; +export type AccountLimits = { + __typename?: 'AccountLimits'; + maxAuditInDays?: Maybe; + maxGraphOSSeats?: Maybe; + maxRangeInDays?: Maybe; + maxRangeInDaysForChecks?: Maybe; + maxRequestsPerMonth?: Maybe; +}; + export type AccountLockDetails = { __typename?: 'AccountLockDetails'; - actor?: Maybe; - reason?: Maybe; - timestamp?: Maybe; + actor?: Maybe; + reason?: Maybe; + timestamp?: Maybe; type?: Maybe; }; @@ -978,70 +1296,87 @@ export enum AccountLockType { MANUAL = 'MANUAL' } +/** The membership association between a user and an organization. */ export type AccountMembership = { __typename?: 'AccountMembership'; account: Account; - createdAt: Scalars['Timestamp']; + /** The timestamp when the user was added to the organization. */ + createdAt: Scalars['Timestamp']['output']; /** If this membership is a free seat (based on role) */ - free?: Maybe; + free?: Maybe; + /** @deprecated Use role instead. */ permission: UserPermission; + /** The user's role within the organization'. */ + role: UserPermission; + /** The user that belongs to the organization. */ user: User; }; export type AccountMutation = { __typename?: 'AccountMutation'; + addOidcConfigurationToBaseConnection?: Maybe; + addSamlMetadataToBaseConnection?: Maybe; /** @deprecated Use saml { addVerificationCert } instead */ - addSamlVerificationCert?: Maybe; + addSamlVerificationCert?: Maybe; auditExport?: Maybe; /** * Cancel account subscriptions, subscriptions will remain active until the end of the paid period. * Currently only works for Recurly subscriptions on team plans. */ cancelSubscriptions?: Maybe; + createBaseSsoConnection?: Maybe; /** Create a CloudOnboarding for this account */ createCloudOnboarding: CreateOnboardingResult; createGraph: GraphCreationResult; - createOidcConnection?: Maybe; - createSamlConnection?: Maybe; + createOidcConfigurationUrl?: Maybe; createStaticInvitation?: Maybe; currentSubscription?: Maybe; /** Delete the account's avatar. Requires Account.canUpdateAvatar to be true. */ deleteAvatar?: Maybe; - /** If the org is on an enterprise trial, set the end date to a new value. */ + ensureRecurlyAccountExists?: Maybe; + /** If the org is on an enterprise trial, extend the trial by the given number of days, or the default number of days for that plan if numDays is not set. */ extendTrial?: Maybe; + finalizeSsoReconfiguration?: Maybe; + finalizeSsoV2Migration?: Maybe; /** Hard delete an account and all associated services */ - hardDelete?: Maybe; + hardDelete?: Maybe; /** Get reference to the account ID */ - internalID?: Maybe; - /** Send an invitation to join the account by E-mail */ + internalID?: Maybe; + /** Send an invitation to join the organization by E-mail */ invite?: Maybe; /** Lock an account, which limits the functionality available with regard to its graphs. */ lock?: Maybe; /** See Account type. Field is needed by extending subgraph. */ - name?: Maybe; + name?: Maybe; /** Mutations for interacting with an Apollo account's private subgraphs on GraphOS */ privateSubgraph: PrivateSubgraphMutation; + reAddSsoUser?: Maybe; /** * Reactivate a canceled current subscription. * Currently only works for Recurly subscriptions on team plans. */ reactivateCurrentSubscription?: Maybe; /** Delete an invitation */ - removeInvitation?: Maybe; + removeInvitation?: Maybe; /** Remove a member of the account */ removeMember?: Maybe; + replaceSsoConnectionDomains?: Maybe; /** Trigger a request for an audit export */ requestAuditExport?: Maybe; /** Send a new E-mail for an existing invitation */ resendInvitation?: Maybe; revokeStaticInvitation?: Maybe; + /** Revokes a user's sessions within the organization */ + revokeUserSessions?: Maybe; saml?: Maybe; /** See Account type. Field is needed by extending subgraph. */ seats?: Maybe; + /** Create or update a custom session length for an org */ + setCustomSessionLength: Scalars['Int']['output']; /** Apollo admins only: set the billing plan to an arbitrary plan effective immediately terminating any current paid plan. */ - setPlan?: Maybe; + setPlan?: Maybe; /** This is called by the form shown to users after they cancel their team subscription. */ - submitTeamCancellationFeedback?: Maybe; + submitTeamCancellationFeedback?: Maybe; /** Apollo admins only: Terminate the ongoing subscription in the account as soon as possible, without refunds. */ terminateSubscription?: Maybe; /** @@ -1049,173 +1384,254 @@ export type AccountMutation = { * Currently only works for Recurly subscriptions. */ terminateSubscriptions?: Maybe; - trackTermsAccepted?: Maybe; + trackTermsAccepted?: Maybe; /** Unlock a locked account. */ unlock?: Maybe; /** Update the billing address for a Recurly token */ updateBillingAddress?: Maybe; /** Update the billing information from a Recurly token */ - updateBillingInfo?: Maybe; + updateBillingInfo?: Maybe; updateCompanyUrl?: Maybe; /** Set the E-mail address of the account, used notably for billing */ - updateEmail?: Maybe; + updateEmail?: Maybe; /** Update the account ID */ updateID?: Maybe; + updateLegacySsoProvider?: Maybe; /** Update the company name */ - updateName?: Maybe; - /** Apollo admins only: enable or disable an account for PingOne SSO login */ - updatePingOneSSOIDPID?: Maybe; + updateName?: Maybe; + /** Updates the OIDC metadata for an existing SSO connection. Connection must be disabled prior to the update. */ + updateOidcConnectionMetadata?: Maybe; /** Updates the role assigned to new SSO users. */ - updateSSODefaultRole?: Maybe; - /** A (currently) internal to Apollo mutation to update a user's role within an organization */ + updateSSODefaultRole?: Maybe; + /** Updates the SAML metadata for an existing SSO connection. Connection must be disabled prior to the update. */ + updateSamlConnectionMetadata?: Maybe; + /** + * Update a user's role within an organization + * @deprecated Use updateUserRole instead. + */ updateUserPermission?: Maybe; + /** Update a user's role within an organization */ + updateUserRole?: Maybe; +}; + + +export type AccountMutationAddOidcConfigurationToBaseConnectionArgs = { + config: OidcConfigurationInput; + connectionId: Scalars['ID']['input']; + enabled?: InputMaybe; +}; + + +export type AccountMutationAddSamlMetadataToBaseConnectionArgs = { + connectionId: Scalars['ID']['input']; + enabled?: InputMaybe; + metadata: SamlConfigurationInput; +}; + + +export type AccountMutationAddSamlVerificationCertArgs = { + pem: Scalars['String']['input']; }; -export type AccountMutationaddSamlVerificationCertArgs = { - pem: Scalars['String']; +export type AccountMutationAuditExportArgs = { + id: Scalars['String']['input']; }; -export type AccountMutationauditExportArgs = { - id: Scalars['String']; +export type AccountMutationCreateBaseSsoConnectionArgs = { + domains: Array; + idpId?: InputMaybe; + useLegacyIdpId?: InputMaybe; }; -export type AccountMutationcreateCloudOnboardingArgs = { +export type AccountMutationCreateCloudOnboardingArgs = { input: CloudOnboardingInput; }; -export type AccountMutationcreateGraphArgs = { +export type AccountMutationCreateGraphArgs = { graphType: GraphType; - hiddenFromUninvitedNonAdmin: Scalars['Boolean']; - id: Scalars['ID']; - title: Scalars['String']; + hiddenFromUninvitedNonAdmin: Scalars['Boolean']['input']; + id: Scalars['ID']['input']; + title: Scalars['String']['input']; variantCreationConfig?: InputMaybe; }; -export type AccountMutationcreateOidcConnectionArgs = { - connection: OidcConnectionInput; - enabled?: InputMaybe; +export type AccountMutationCreateOidcConfigurationUrlArgs = { + id: Scalars['ID']['input']; }; -export type AccountMutationcreateSamlConnectionArgs = { - connection: SamlConnectionInput; - enabled?: InputMaybe; +export type AccountMutationCreateStaticInvitationArgs = { + role: UserPermission; }; -export type AccountMutationcreateStaticInvitationArgs = { - role: UserPermission; +export type AccountMutationExtendTrialArgs = { + numDays?: InputMaybe; +}; + + +export type AccountMutationFinalizeSsoReconfigurationArgs = { + deleteExistingWebApiKeys?: InputMaybe; + newConnectionId: Scalars['ID']['input']; + verifySsoSessionExists?: InputMaybe; +}; + + +export type AccountMutationFinalizeSsoV2MigrationArgs = { + deleteExistingWebApiKeys?: InputMaybe; + deleteNonSsoMemberships?: InputMaybe; + verifySsoSessionExists?: InputMaybe; }; -export type AccountMutationinviteArgs = { - email: Scalars['String']; +export type AccountMutationInviteArgs = { + email: Scalars['String']['input']; role?: InputMaybe; }; -export type AccountMutationlockArgs = { - reason?: InputMaybe; +export type AccountMutationLockArgs = { + reason?: InputMaybe; type?: InputMaybe; }; -export type AccountMutationremoveInvitationArgs = { - id?: InputMaybe; +export type AccountMutationReAddSsoUserArgs = { + role: UserPermission; + userId: Scalars['ID']['input']; +}; + + +export type AccountMutationRemoveInvitationArgs = { + id?: InputMaybe; }; -export type AccountMutationremoveMemberArgs = { - id: Scalars['ID']; +export type AccountMutationRemoveMemberArgs = { + id: Scalars['ID']['input']; }; -export type AccountMutationrequestAuditExportArgs = { +export type AccountMutationReplaceSsoConnectionDomainsArgs = { + domains: Array; + id: Scalars['ID']['input']; +}; + + +export type AccountMutationRequestAuditExportArgs = { actors?: InputMaybe>; - from: Scalars['Timestamp']; - graphIds?: InputMaybe>; - to: Scalars['Timestamp']; + from: Scalars['Timestamp']['input']; + graphIds?: InputMaybe>; + to: Scalars['Timestamp']['input']; +}; + + +export type AccountMutationResendInvitationArgs = { + id?: InputMaybe; +}; + + +export type AccountMutationRevokeStaticInvitationArgs = { + token: Scalars['String']['input']; }; -export type AccountMutationresendInvitationArgs = { - id?: InputMaybe; +export type AccountMutationRevokeUserSessionsArgs = { + userId: Scalars['ID']['input']; }; -export type AccountMutationrevokeStaticInvitationArgs = { - token: Scalars['String']; +export type AccountMutationSetCustomSessionLengthArgs = { + sessionDurationInSeconds: Scalars['Int']['input']; }; -export type AccountMutationsetPlanArgs = { - id: Scalars['ID']; +export type AccountMutationSetPlanArgs = { + id: Scalars['ID']['input']; }; -export type AccountMutationsubmitTeamCancellationFeedbackArgs = { - feedback: Scalars['String']; +export type AccountMutationSubmitTeamCancellationFeedbackArgs = { + feedback: Scalars['String']['input']; }; -export type AccountMutationterminateSubscriptionArgs = { - providerId: Scalars['ID']; +export type AccountMutationTerminateSubscriptionArgs = { + providerId: Scalars['ID']['input']; }; -export type AccountMutationtrackTermsAcceptedArgs = { - at: Scalars['Timestamp']; +export type AccountMutationTrackTermsAcceptedArgs = { + at: Scalars['Timestamp']['input']; }; -export type AccountMutationupdateBillingAddressArgs = { +export type AccountMutationUpdateBillingAddressArgs = { billingAddress: BillingAddressInput; }; -export type AccountMutationupdateBillingInfoArgs = { - token: Scalars['String']; +export type AccountMutationUpdateBillingInfoArgs = { + token: Scalars['String']['input']; +}; + + +export type AccountMutationUpdateCompanyUrlArgs = { + companyUrl?: InputMaybe; }; -export type AccountMutationupdateCompanyUrlArgs = { - companyUrl?: InputMaybe; +export type AccountMutationUpdateEmailArgs = { + email: Scalars['String']['input']; }; -export type AccountMutationupdateEmailArgs = { - email: Scalars['String']; +export type AccountMutationUpdateIdArgs = { + id: Scalars['ID']['input']; }; -export type AccountMutationupdateIDArgs = { - id: Scalars['ID']; +export type AccountMutationUpdateLegacySsoProviderArgs = { + ssoProvider: OrganizationSsoProvider; }; -export type AccountMutationupdateNameArgs = { - name: Scalars['String']; +export type AccountMutationUpdateNameArgs = { + name: Scalars['String']['input']; }; -export type AccountMutationupdatePingOneSSOIDPIDArgs = { - idpid?: InputMaybe; +export type AccountMutationUpdateOidcConnectionMetadataArgs = { + connectionId: Scalars['ID']['input']; + metadata: OidcConfigurationUpdateInput; }; -export type AccountMutationupdateSSODefaultRoleArgs = { +export type AccountMutationUpdateSsoDefaultRoleArgs = { role: UserPermission; }; -export type AccountMutationupdateUserPermissionArgs = { +export type AccountMutationUpdateSamlConnectionMetadataArgs = { + connectionId: Scalars['ID']['input']; + metadata: SamlConfigurationInput; +}; + + +export type AccountMutationUpdateUserPermissionArgs = { permission: UserPermission; - userID: Scalars['ID']; + userID: Scalars['ID']['input']; +}; + + +export type AccountMutationUpdateUserRoleArgs = { + role: UserPermission; + userID: Scalars['ID']['input']; }; /** Columns of AccountOperationCheckStats. */ @@ -1235,64 +1651,64 @@ export enum AccountOperationCheckStatsColumn { export type AccountOperationCheckStatsDimensions = { __typename?: 'AccountOperationCheckStatsDimensions'; - clientName?: Maybe; - clientVersion?: Maybe; - operationSubtype?: Maybe; - operationType?: Maybe; - queryId?: Maybe; - queryName?: Maybe; - schemaTag?: Maybe; - serviceId?: Maybe; + clientName?: Maybe; + clientVersion?: Maybe; + operationSubtype?: Maybe; + operationType?: Maybe; + queryId?: Maybe; + queryName?: Maybe; + schemaTag?: Maybe; + serviceId?: Maybe; }; /** Filter for data in AccountOperationCheckStats. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type AccountOperationCheckStatsFilter = { and?: InputMaybe>; /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */ - clientName?: InputMaybe; + clientName?: InputMaybe; /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */ - clientVersion?: InputMaybe; + clientVersion?: InputMaybe; in?: InputMaybe; not?: InputMaybe; /** Selects rows whose operationSubtype dimension equals the given value if not null. To query for the null value, use {in: {operationSubtype: [null]}} instead. */ - operationSubtype?: InputMaybe; + operationSubtype?: InputMaybe; /** Selects rows whose operationType dimension equals the given value if not null. To query for the null value, use {in: {operationType: [null]}} instead. */ - operationType?: InputMaybe; + operationType?: InputMaybe; or?: InputMaybe>; /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */ - queryId?: InputMaybe; + queryId?: InputMaybe; /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */ - queryName?: InputMaybe; + queryName?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */ - serviceId?: InputMaybe; + serviceId?: InputMaybe; }; /** Filter for data in AccountOperationCheckStats. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type AccountOperationCheckStatsFilterIn = { /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientName?: InputMaybe>>; + clientName?: InputMaybe>>; /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientVersion?: InputMaybe>>; + clientVersion?: InputMaybe>>; /** Selects rows whose operationSubtype dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationSubtype?: InputMaybe>>; + operationSubtype?: InputMaybe>>; /** Selects rows whose operationType dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationType?: InputMaybe>>; + operationType?: InputMaybe>>; /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryId?: InputMaybe>>; + queryId?: InputMaybe>>; /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryName?: InputMaybe>>; + queryName?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - serviceId?: InputMaybe>>; + serviceId?: InputMaybe>>; }; export type AccountOperationCheckStatsMetrics = { __typename?: 'AccountOperationCheckStatsMetrics'; - cachedRequestsCount: Scalars['Long']; - uncachedRequestsCount: Scalars['Long']; + cachedRequestsCount: Scalars['Long']['output']; + uncachedRequestsCount: Scalars['Long']['output']; }; export type AccountOperationCheckStatsOrderBySpec = { @@ -1307,7 +1723,7 @@ export type AccountOperationCheckStatsRecord = { /** Metrics of AccountOperationCheckStats that can be aggregated over. */ metrics: AccountOperationCheckStatsMetrics; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; }; export type AccountOperationUsage = { @@ -1318,22 +1734,22 @@ export type AccountOperationUsage = { }; export type AccountOperationUsageWindowInput = { - from: Scalars['Date']; - limit?: Scalars['Int']; - to: Scalars['Date']; + from: Scalars['Date']['input']; + limit?: Scalars['Int']['input']; + to: Scalars['Date']['input']; windowSize?: BillingUsageStatsWindowSize; }; export type AccountPublishesStatsMetrics = { __typename?: 'AccountPublishesStatsMetrics'; - totalPublishes: Scalars['Long']; + totalPublishes: Scalars['Long']['output']; }; export type AccountPublishesStatsRecord = { __typename?: 'AccountPublishesStatsRecord'; - id: Scalars['ID']; + id: Scalars['ID']['output']; metrics: AccountPublishesStatsMetrics; - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; }; /** Columns of AccountQueryStats. */ @@ -1347,6 +1763,7 @@ export enum AccountQueryStatsColumn { FROM_ENGINEPROXY = 'FROM_ENGINEPROXY', OPERATION_SUBTYPE = 'OPERATION_SUBTYPE', OPERATION_TYPE = 'OPERATION_TYPE', + PERSISTED_QUERY_ID = 'PERSISTED_QUERY_ID', QUERY_ID = 'QUERY_ID', QUERY_NAME = 'QUERY_NAME', REGISTERED_OPERATION_COUNT = 'REGISTERED_OPERATION_COUNT', @@ -1361,84 +1778,89 @@ export enum AccountQueryStatsColumn { export type AccountQueryStatsDimensions = { __typename?: 'AccountQueryStatsDimensions'; - clientName?: Maybe; - clientVersion?: Maybe; - fromEngineproxy?: Maybe; - operationSubtype?: Maybe; - operationType?: Maybe; - queryId?: Maybe; - queryName?: Maybe; - querySignature?: Maybe; - querySignatureLength?: Maybe; - schemaHash?: Maybe; - schemaTag?: Maybe; - serviceId?: Maybe; + clientName?: Maybe; + clientVersion?: Maybe; + fromEngineproxy?: Maybe; + operationSubtype?: Maybe; + operationType?: Maybe; + persistedQueryId?: Maybe; + queryId?: Maybe; + queryName?: Maybe; + querySignature?: Maybe; + querySignatureLength?: Maybe; + schemaHash?: Maybe; + schemaTag?: Maybe; + serviceId?: Maybe; }; /** Filter for data in AccountQueryStats. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type AccountQueryStatsFilter = { and?: InputMaybe>; /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */ - clientName?: InputMaybe; + clientName?: InputMaybe; /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */ - clientVersion?: InputMaybe; + clientVersion?: InputMaybe; /** Selects rows whose fromEngineproxy dimension equals the given value if not null. To query for the null value, use {in: {fromEngineproxy: [null]}} instead. */ - fromEngineproxy?: InputMaybe; + fromEngineproxy?: InputMaybe; in?: InputMaybe; not?: InputMaybe; /** Selects rows whose operationSubtype dimension equals the given value if not null. To query for the null value, use {in: {operationSubtype: [null]}} instead. */ - operationSubtype?: InputMaybe; + operationSubtype?: InputMaybe; /** Selects rows whose operationType dimension equals the given value if not null. To query for the null value, use {in: {operationType: [null]}} instead. */ - operationType?: InputMaybe; + operationType?: InputMaybe; or?: InputMaybe>; + /** Selects rows whose persistedQueryId dimension equals the given value if not null. To query for the null value, use {in: {persistedQueryId: [null]}} instead. */ + persistedQueryId?: InputMaybe; /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */ - queryId?: InputMaybe; + queryId?: InputMaybe; /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */ - queryName?: InputMaybe; + queryName?: InputMaybe; /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */ - schemaHash?: InputMaybe; + schemaHash?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */ - serviceId?: InputMaybe; + serviceId?: InputMaybe; }; /** Filter for data in AccountQueryStats. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type AccountQueryStatsFilterIn = { /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientName?: InputMaybe>>; + clientName?: InputMaybe>>; /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientVersion?: InputMaybe>>; + clientVersion?: InputMaybe>>; /** Selects rows whose fromEngineproxy dimension is in the given list. A null value in the list means a row with null for that dimension. */ - fromEngineproxy?: InputMaybe>>; + fromEngineproxy?: InputMaybe>>; /** Selects rows whose operationSubtype dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationSubtype?: InputMaybe>>; + operationSubtype?: InputMaybe>>; /** Selects rows whose operationType dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationType?: InputMaybe>>; + operationType?: InputMaybe>>; + /** Selects rows whose persistedQueryId dimension is in the given list. A null value in the list means a row with null for that dimension. */ + persistedQueryId?: InputMaybe>>; /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryId?: InputMaybe>>; + queryId?: InputMaybe>>; /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryName?: InputMaybe>>; + queryName?: InputMaybe>>; /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaHash?: InputMaybe>>; + schemaHash?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - serviceId?: InputMaybe>>; + serviceId?: InputMaybe>>; }; export type AccountQueryStatsMetrics = { __typename?: 'AccountQueryStatsMetrics'; cacheTtlHistogram: DurationHistogram; cachedHistogram: DurationHistogram; - cachedRequestsCount: Scalars['Long']; - forbiddenOperationCount: Scalars['Long']; - registeredOperationCount: Scalars['Long']; - requestsWithErrorsCount: Scalars['Long']; + cachedRequestsCount: Scalars['Long']['output']; + forbiddenOperationCount: Scalars['Long']['output']; + registeredOperationCount: Scalars['Long']['output']; + requestsWithErrorsCount: Scalars['Long']['output']; totalLatencyHistogram: DurationHistogram; - totalRequestCount: Scalars['Long']; + totalRequestCount: Scalars['Long']['output']; uncachedHistogram: DurationHistogram; - uncachedRequestsCount: Scalars['Long']; + uncachedRequestsCount: Scalars['Long']['output']; }; export type AccountQueryStatsOrderBySpec = { @@ -1453,25 +1875,27 @@ export type AccountQueryStatsRecord = { /** Metrics of AccountQueryStats that can be aggregated over. */ metrics: AccountQueryStatsMetrics; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; }; export type AccountRoles = { __typename?: 'AccountRoles'; - canAudit: Scalars['Boolean']; - canCreateService: Scalars['Boolean']; - canDelete: Scalars['Boolean']; - canManageMembers: Scalars['Boolean']; - canQuery: Scalars['Boolean']; - canQueryAudit: Scalars['Boolean']; - canQueryBillingInfo: Scalars['Boolean']; - canQueryMembers: Scalars['Boolean']; - canQueryStats: Scalars['Boolean']; - canReadTickets: Scalars['Boolean']; - canRemoveMembers: Scalars['Boolean']; - canSetConstrainedPlan: Scalars['Boolean']; - canUpdateBillingInfo: Scalars['Boolean']; - canUpdateMetadata: Scalars['Boolean']; + canAudit: Scalars['Boolean']['output']; + canCreateService: Scalars['Boolean']['output']; + canDelete: Scalars['Boolean']['output']; + canManageMembers: Scalars['Boolean']['output']; + canManageSessions: Scalars['Boolean']['output']; + canProvisionSSO: Scalars['Boolean']['output']; + canQuery: Scalars['Boolean']['output']; + canQueryAudit: Scalars['Boolean']['output']; + canQueryBillingInfo: Scalars['Boolean']['output']; + canQueryMembers: Scalars['Boolean']['output']; + canQueryStats: Scalars['Boolean']['output']; + canReadTickets: Scalars['Boolean']['output']; + canRemoveMembers: Scalars['Boolean']['output']; + canSetConstrainedPlan: Scalars['Boolean']['output']; + canUpdateBillingInfo: Scalars['Boolean']['output']; + canUpdateMetadata: Scalars['Boolean']['output']; }; export enum AccountState { @@ -1485,8 +1909,11 @@ export enum AccountState { export type AccountStatsWindow = { __typename?: 'AccountStatsWindow'; billingUsageStats: Array; + cardinalityStats: Array; + coordinateUsage: Array; edgeServerInfos: Array; errorStats: Array; + federatedErrorStats: Array; fieldExecutions: Array; fieldLatencies: Array; fieldUsage: Array; @@ -1494,98 +1921,122 @@ export type AccountStatsWindow = { operationCheckStats: Array; queryStats: Array; /** From field rounded down to the nearest resolution. */ - roundedDownFrom: Scalars['Timestamp']; + roundedDownFrom: Scalars['Timestamp']['output']; /** To field rounded up to the nearest resolution. */ - roundedUpTo: Scalars['Timestamp']; + roundedUpTo: Scalars['Timestamp']['output']; tracePathErrorsRefs: Array; traceRefs: Array; }; /** A time window with a specified granularity over a given account. */ -export type AccountStatsWindowbillingUsageStatsArgs = { +export type AccountStatsWindowBillingUsageStatsArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity over a given account. */ -export type AccountStatsWindowedgeServerInfosArgs = { +export type AccountStatsWindowCardinalityStatsArgs = { + filter?: InputMaybe; + limit?: InputMaybe; + orderBy?: InputMaybe>; +}; + + +/** A time window with a specified granularity over a given account. */ +export type AccountStatsWindowCoordinateUsageArgs = { + filter?: InputMaybe; + limit?: InputMaybe; + orderBy?: InputMaybe>; +}; + + +/** A time window with a specified granularity over a given account. */ +export type AccountStatsWindowEdgeServerInfosArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity over a given account. */ -export type AccountStatsWindowerrorStatsArgs = { +export type AccountStatsWindowErrorStatsArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity over a given account. */ -export type AccountStatsWindowfieldExecutionsArgs = { +export type AccountStatsWindowFederatedErrorStatsArgs = { + filter?: InputMaybe; + limit?: InputMaybe; + orderBy?: InputMaybe>; +}; + + +/** A time window with a specified granularity over a given account. */ +export type AccountStatsWindowFieldExecutionsArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity over a given account. */ -export type AccountStatsWindowfieldLatenciesArgs = { +export type AccountStatsWindowFieldLatenciesArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity over a given account. */ -export type AccountStatsWindowfieldUsageArgs = { +export type AccountStatsWindowFieldUsageArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity over a given account. */ -export type AccountStatsWindowgraphosCloudMetricsArgs = { +export type AccountStatsWindowGraphosCloudMetricsArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity over a given account. */ -export type AccountStatsWindowoperationCheckStatsArgs = { +export type AccountStatsWindowOperationCheckStatsArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity over a given account. */ -export type AccountStatsWindowqueryStatsArgs = { +export type AccountStatsWindowQueryStatsArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity over a given account. */ -export type AccountStatsWindowtracePathErrorsRefsArgs = { +export type AccountStatsWindowTracePathErrorsRefsArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity over a given account. */ -export type AccountStatsWindowtraceRefsArgs = { +export type AccountStatsWindowTraceRefsArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; @@ -1596,7 +2047,9 @@ export enum AccountTracePathErrorsRefsColumn { DURATION_BUCKET = 'DURATION_BUCKET', ERRORS_COUNT_IN_PATH = 'ERRORS_COUNT_IN_PATH', ERRORS_COUNT_IN_TRACE = 'ERRORS_COUNT_IN_TRACE', + ERROR_CODE = 'ERROR_CODE', ERROR_MESSAGE = 'ERROR_MESSAGE', + ERROR_SERVICE = 'ERROR_SERVICE', PATH = 'PATH', QUERY_ID = 'QUERY_ID', QUERY_NAME = 'QUERY_NAME', @@ -1612,86 +2065,96 @@ export enum AccountTracePathErrorsRefsColumn { export type AccountTracePathErrorsRefsDimensions = { __typename?: 'AccountTracePathErrorsRefsDimensions'; - clientName?: Maybe; - clientVersion?: Maybe; - durationBucket?: Maybe; - errorMessage?: Maybe; - path?: Maybe; - queryId?: Maybe; - queryName?: Maybe; - schemaHash?: Maybe; - schemaTag?: Maybe; - serviceId?: Maybe; - traceHttpStatusCode?: Maybe; - traceId?: Maybe; - traceStartsAt?: Maybe; + clientName?: Maybe; + clientVersion?: Maybe; + durationBucket?: Maybe; + errorCode?: Maybe; + errorMessage?: Maybe; + errorService?: Maybe; + path?: Maybe; + queryId?: Maybe; + queryName?: Maybe; + schemaHash?: Maybe; + schemaTag?: Maybe; + serviceId?: Maybe; + traceHttpStatusCode?: Maybe; + traceId?: Maybe; + traceStartsAt?: Maybe; }; /** Filter for data in AccountTracePathErrorsRefs. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type AccountTracePathErrorsRefsFilter = { and?: InputMaybe>; /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */ - clientName?: InputMaybe; + clientName?: InputMaybe; /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */ - clientVersion?: InputMaybe; + clientVersion?: InputMaybe; /** Selects rows whose durationBucket dimension equals the given value if not null. To query for the null value, use {in: {durationBucket: [null]}} instead. */ - durationBucket?: InputMaybe; + durationBucket?: InputMaybe; + /** Selects rows whose errorCode dimension equals the given value if not null. To query for the null value, use {in: {errorCode: [null]}} instead. */ + errorCode?: InputMaybe; /** Selects rows whose errorMessage dimension equals the given value if not null. To query for the null value, use {in: {errorMessage: [null]}} instead. */ - errorMessage?: InputMaybe; + errorMessage?: InputMaybe; + /** Selects rows whose errorService dimension equals the given value if not null. To query for the null value, use {in: {errorService: [null]}} instead. */ + errorService?: InputMaybe; in?: InputMaybe; not?: InputMaybe; or?: InputMaybe>; /** Selects rows whose path dimension equals the given value if not null. To query for the null value, use {in: {path: [null]}} instead. */ - path?: InputMaybe; + path?: InputMaybe; /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */ - queryId?: InputMaybe; + queryId?: InputMaybe; /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */ - queryName?: InputMaybe; + queryName?: InputMaybe; /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */ - schemaHash?: InputMaybe; + schemaHash?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */ - serviceId?: InputMaybe; + serviceId?: InputMaybe; /** Selects rows whose traceHttpStatusCode dimension equals the given value if not null. To query for the null value, use {in: {traceHttpStatusCode: [null]}} instead. */ - traceHttpStatusCode?: InputMaybe; + traceHttpStatusCode?: InputMaybe; /** Selects rows whose traceId dimension equals the given value if not null. To query for the null value, use {in: {traceId: [null]}} instead. */ - traceId?: InputMaybe; + traceId?: InputMaybe; }; /** Filter for data in AccountTracePathErrorsRefs. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type AccountTracePathErrorsRefsFilterIn = { /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientName?: InputMaybe>>; + clientName?: InputMaybe>>; /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientVersion?: InputMaybe>>; + clientVersion?: InputMaybe>>; /** Selects rows whose durationBucket dimension is in the given list. A null value in the list means a row with null for that dimension. */ - durationBucket?: InputMaybe>>; + durationBucket?: InputMaybe>>; + /** Selects rows whose errorCode dimension is in the given list. A null value in the list means a row with null for that dimension. */ + errorCode?: InputMaybe>>; /** Selects rows whose errorMessage dimension is in the given list. A null value in the list means a row with null for that dimension. */ - errorMessage?: InputMaybe>>; + errorMessage?: InputMaybe>>; + /** Selects rows whose errorService dimension is in the given list. A null value in the list means a row with null for that dimension. */ + errorService?: InputMaybe>>; /** Selects rows whose path dimension is in the given list. A null value in the list means a row with null for that dimension. */ - path?: InputMaybe>>; + path?: InputMaybe>>; /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryId?: InputMaybe>>; + queryId?: InputMaybe>>; /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryName?: InputMaybe>>; + queryName?: InputMaybe>>; /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaHash?: InputMaybe>>; + schemaHash?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - serviceId?: InputMaybe>>; + serviceId?: InputMaybe>>; /** Selects rows whose traceHttpStatusCode dimension is in the given list. A null value in the list means a row with null for that dimension. */ - traceHttpStatusCode?: InputMaybe>>; + traceHttpStatusCode?: InputMaybe>>; /** Selects rows whose traceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - traceId?: InputMaybe>>; + traceId?: InputMaybe>>; }; export type AccountTracePathErrorsRefsMetrics = { __typename?: 'AccountTracePathErrorsRefsMetrics'; - errorsCountInPath: Scalars['Long']; - errorsCountInTrace: Scalars['Long']; - traceSizeBytes: Scalars['Long']; + errorsCountInPath: Scalars['Long']['output']; + errorsCountInTrace: Scalars['Long']['output']; + traceSizeBytes: Scalars['Long']['output']; }; export type AccountTracePathErrorsRefsOrderBySpec = { @@ -1706,7 +2169,7 @@ export type AccountTracePathErrorsRefsRecord = { /** Metrics of AccountTracePathErrorsRefs that can be aggregated over. */ metrics: AccountTracePathErrorsRefsMetrics; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; }; /** Columns of AccountTraceRefs. */ @@ -1728,80 +2191,80 @@ export enum AccountTraceRefsColumn { export type AccountTraceRefsDimensions = { __typename?: 'AccountTraceRefsDimensions'; - clientName?: Maybe; - clientVersion?: Maybe; - durationBucket?: Maybe; - generatedTraceId?: Maybe; - operationSubtype?: Maybe; - operationType?: Maybe; - queryId?: Maybe; - queryName?: Maybe; - querySignature?: Maybe; - schemaHash?: Maybe; - schemaTag?: Maybe; - serviceId?: Maybe; - traceId?: Maybe; + clientName?: Maybe; + clientVersion?: Maybe; + durationBucket?: Maybe; + generatedTraceId?: Maybe; + operationSubtype?: Maybe; + operationType?: Maybe; + queryId?: Maybe; + queryName?: Maybe; + querySignature?: Maybe; + schemaHash?: Maybe; + schemaTag?: Maybe; + serviceId?: Maybe; + traceId?: Maybe; }; /** Filter for data in AccountTraceRefs. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type AccountTraceRefsFilter = { and?: InputMaybe>; /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */ - clientName?: InputMaybe; + clientName?: InputMaybe; /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */ - clientVersion?: InputMaybe; + clientVersion?: InputMaybe; /** Selects rows whose durationBucket dimension equals the given value if not null. To query for the null value, use {in: {durationBucket: [null]}} instead. */ - durationBucket?: InputMaybe; + durationBucket?: InputMaybe; in?: InputMaybe; not?: InputMaybe; /** Selects rows whose operationSubtype dimension equals the given value if not null. To query for the null value, use {in: {operationSubtype: [null]}} instead. */ - operationSubtype?: InputMaybe; + operationSubtype?: InputMaybe; /** Selects rows whose operationType dimension equals the given value if not null. To query for the null value, use {in: {operationType: [null]}} instead. */ - operationType?: InputMaybe; + operationType?: InputMaybe; or?: InputMaybe>; /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */ - queryId?: InputMaybe; + queryId?: InputMaybe; /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */ - queryName?: InputMaybe; + queryName?: InputMaybe; /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */ - schemaHash?: InputMaybe; + schemaHash?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */ - serviceId?: InputMaybe; + serviceId?: InputMaybe; /** Selects rows whose traceId dimension equals the given value if not null. To query for the null value, use {in: {traceId: [null]}} instead. */ - traceId?: InputMaybe; + traceId?: InputMaybe; }; /** Filter for data in AccountTraceRefs. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type AccountTraceRefsFilterIn = { /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientName?: InputMaybe>>; + clientName?: InputMaybe>>; /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientVersion?: InputMaybe>>; + clientVersion?: InputMaybe>>; /** Selects rows whose durationBucket dimension is in the given list. A null value in the list means a row with null for that dimension. */ - durationBucket?: InputMaybe>>; + durationBucket?: InputMaybe>>; /** Selects rows whose operationSubtype dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationSubtype?: InputMaybe>>; + operationSubtype?: InputMaybe>>; /** Selects rows whose operationType dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationType?: InputMaybe>>; + operationType?: InputMaybe>>; /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryId?: InputMaybe>>; + queryId?: InputMaybe>>; /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryName?: InputMaybe>>; + queryName?: InputMaybe>>; /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaHash?: InputMaybe>>; + schemaHash?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - serviceId?: InputMaybe>>; + serviceId?: InputMaybe>>; /** Selects rows whose traceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - traceId?: InputMaybe>>; + traceId?: InputMaybe>>; }; export type AccountTraceRefsMetrics = { __typename?: 'AccountTraceRefsMetrics'; - traceCount: Scalars['Long']; + traceCount: Scalars['Long']['output']; }; export type AccountTraceRefsOrderBySpec = { @@ -1816,19 +2279,19 @@ export type AccountTraceRefsRecord = { /** Metrics of AccountTraceRefs that can be aggregated over. */ metrics: AccountTraceRefsMetrics; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; }; /** Represents an actor that performs actions in Apollo Studio. Most actors are either a `USER` or a `GRAPH` (based on a request's provided API key), and they have the corresponding `ActorType`. */ export type Actor = { __typename?: 'Actor'; - actorId: Scalars['ID']; + actorId: Scalars['ID']['output']; type: ActorType; }; /** Input type to provide when specifying an `Actor` in operation arguments. See also the `Actor` object type. */ export type ActorInput = { - actorId: Scalars['ID']; + actorId: Scalars['ID']['input']; type: ActorType; }; @@ -1845,12 +2308,12 @@ export enum ActorType { /** parentCommentId is only present for replies. schemaCoordinate & subgraph are only present for initial change comments. If all are absent, this is a general parent comment on the proposal. */ export type AddCommentInput = { - message: Scalars['String']; - parentCommentId?: InputMaybe; - revisionId: Scalars['String']; - schemaCoordinate?: InputMaybe; - schemaScope?: InputMaybe; - usersToNotify?: InputMaybe>; + message: Scalars['String']['input']; + parentCommentId?: InputMaybe; + revisionId: Scalars['String']['input']; + schemaCoordinate?: InputMaybe; + schemaScope?: InputMaybe; + usersToNotify?: InputMaybe>; }; export type AddCommentResult = NotFoundError | ParentChangeProposalComment | ParentGeneralProposalComment | ReplyChangeProposalComment | ReplyGeneralProposalComment | ValidationError; @@ -1870,15 +2333,7 @@ export type AddOperationInput = { /** The operation's fields. */ document: OperationCollectionEntryStateInput; /** The operation's name. */ - name: Scalars['String']; -}; - -export type AdminUser = { - __typename?: 'AdminUser'; - created_at: Scalars['Timestamp']; - email: Scalars['String']; - id: Scalars['ID']; - team: Scalars['String']; + name: Scalars['String']['input']; }; export type AffectedClient = { @@ -1887,35 +2342,35 @@ export type AffectedClient = { * ID, often the name, of the client set by the user and reported alongside metrics * @deprecated Unsupported. */ - clientReferenceId?: Maybe; + clientReferenceId?: Maybe; /** * version of the client set by the user and reported alongside metrics * @deprecated Unsupported. */ - clientVersion?: Maybe; + clientVersion?: Maybe; }; export type AffectedQuery = { __typename?: 'AffectedQuery'; /** If the operation would be approved if the check ran again. Returns null if queried from SchemaDiff.changes.affectedQueries.alreadyApproved */ - alreadyApproved?: Maybe; + alreadyApproved?: Maybe; /** If the operation would be ignored if the check ran again */ - alreadyIgnored?: Maybe; + alreadyIgnored?: Maybe; /** List of changes affecting this query. Returns null if queried from SchemaDiff.changes.affectedQueries.changes */ changes?: Maybe>; /** Name to display to the user for the operation */ - displayName?: Maybe; - id: Scalars['ID']; + displayName?: Maybe; + id: Scalars['ID']['output']; /** Determines if this query validates against the proposed schema */ - isValid?: Maybe; + isValid?: Maybe; /** Whether this operation was ignored and its severity was downgraded for that reason */ - markedAsIgnored?: Maybe; + markedAsIgnored?: Maybe; /** Whether the changes were marked as safe and its severity was downgraded for that reason */ - markedAsSafe?: Maybe; + markedAsSafe?: Maybe; /** Name provided for the operation, which can be empty string if it is an anonymous operation */ - name?: Maybe; + name?: Maybe; /** First 128 characters of query signature for display */ - signature?: Maybe; + signature?: Maybe; }; /** @@ -1924,82 +2379,61 @@ export type AffectedQuery = { */ export type ApiKey = { /** The API key's ID. */ - id: Scalars['ID']; + id: Scalars['ID']['output']; /** The API key's name, for distinguishing it from other keys. */ - keyName?: Maybe; + keyName?: Maybe; /** The value of the API key. **This is a secret credential!** */ - token: Scalars['String']; + token: Scalars['String']['output']; }; export type ApiKeyProvision = { __typename?: 'ApiKeyProvision'; apiKey: ApiKey; - created: Scalars['Boolean']; + created: Scalars['Boolean']['output']; }; /** A generic event for the `trackApolloKotlinUsage` mutation */ export type ApolloKotlinUsageEventInput = { /** When the event occurred */ - date: Scalars['Timestamp']; + date: Scalars['Timestamp']['input']; /** Optional parameters attached to the event */ - payload?: InputMaybe; + payload?: InputMaybe; /** Type of event */ - type: Scalars['ID']; + type: Scalars['ID']['input']; }; /** A generic property for the `trackApolloKotlinUsage` mutation */ export type ApolloKotlinUsagePropertyInput = { /** Optional parameters attached to the property */ - payload?: InputMaybe; + payload?: InputMaybe; /** Type of property */ - type: Scalars['ID']; -}; - -export enum AuditAction { - BroadcastMessage = 'BroadcastMessage', - CreateMessage = 'CreateMessage', - EditMessage = 'EditMessage', - RecallMessage = 'RecallMessage', - TestMessage = 'TestMessage', - UpdateMessageState = 'UpdateMessageState' -} - -export type AuditLog = { - __typename?: 'AuditLog'; - action: Scalars['String']; - changeLog?: Maybe; - channel?: Maybe; - createdAt: Scalars['Timestamp']; - id: Scalars['ID']; - message?: Maybe; - slackMessageId?: Maybe; - userId: Scalars['String']; + type: Scalars['ID']['input']; }; export type AuditLogExport = { __typename?: 'AuditLogExport'; /** The list of actors to filter the audit export */ actors?: Maybe>; - bigqueryTriggeredAt?: Maybe; + bigqueryTriggeredAt?: Maybe; /** The time when the audit export was completed */ - completedAt?: Maybe; + completedAt?: Maybe; /** The time when the audit export was reqeusted */ - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; /** List of URLs to download the audits for the requested range */ - downloadUrls?: Maybe>; - exportedFiles?: Maybe>; + downloadUrls?: Maybe>; + exportedFiles?: Maybe>; /** The starting point of audits to include in export */ - from: Scalars['Timestamp']; + from: Scalars['Timestamp']['output']; /** The list of graphs to filter the audit export */ graphs?: Maybe>; /** The id for the audit export */ - id: Scalars['ID']; + id: Scalars['ID']['output']; /** The user that initiated the audit export */ requester?: Maybe; /** The status of the audit export */ status: AuditStatus; /** The end point of audits to include in export */ - to: Scalars['Timestamp']; + to: Scalars['Timestamp']['output']; }; export type AuditLogExportMutation = { @@ -2019,9 +2453,9 @@ export enum AuditStatus { export type AvatarDeleteError = { __typename?: 'AvatarDeleteError'; - clientMessage: Scalars['String']; + clientMessage: Scalars['String']['output']; code: AvatarDeleteErrorCode; - serverMessage: Scalars['String']; + serverMessage: Scalars['String']['output']; }; export enum AvatarDeleteErrorCode { @@ -2030,9 +2464,9 @@ export enum AvatarDeleteErrorCode { export type AvatarUploadError = { __typename?: 'AvatarUploadError'; - clientMessage: Scalars['String']; + clientMessage: Scalars['String']['output']; code: AvatarUploadErrorCode; - serverMessage: Scalars['String']; + serverMessage: Scalars['String']['output']; }; export enum AvatarUploadErrorCode { @@ -2045,105 +2479,116 @@ export type AvatarUploadResult = AvatarUploadError | MediaUploadInfo; export type AwsLoadBalancer = { __typename?: 'AwsLoadBalancer'; /** ARN for the load balancer */ - arn: Scalars['String']; + arn: Scalars['String']['output']; /** DNS endpoint for the load balancer */ - endpoint: Scalars['String']; + endpoint: Scalars['String']['output']; /** ARN for the HTTPS listener for the load balancer */ - listenerArn: Scalars['String']; + listenerArn: Scalars['String']['output']; }; /** Input for AWS Load Balancer */ export type AwsLoadBalancerInput = { - arn: Scalars['String']; - endpoint: Scalars['String']; - listenerArn: Scalars['String']; + arn: Scalars['String']['input']; + endpoint: Scalars['String']['input']; + listenerArn: Scalars['String']['input']; }; /** AWS-specific information for a Shard */ export type AwsShard = { __typename?: 'AwsShard'; /** AWS Account ID where the Shard is hosted */ - accountId: Scalars['String']; - /** ARNs of the target groups for paused Cloud Routers */ - coldStartTargetGroupArns?: Maybe>; + accountId: Scalars['String']['output']; + /** ARNs of the target groups for sleeping Cloud Routers */ + coldStartTargetGroupArns?: Maybe>; /** ARN of the ECS Cluster */ - ecsClusterArn: Scalars['String']; + ecsClusterArn: Scalars['String']['output']; /** ARN of the IAM role to perform provisioning operations on this shard */ - iamRoleArn: Scalars['String']; + iamRoleArn: Scalars['String']['output']; /** ID of the security group for the load balancer */ - loadbalancerSecurityGroupId: Scalars['String']; + loadbalancerSecurityGroupId: Scalars['String']['output']; /** Load balancers for this Cloud Router */ loadbalancers: Array; /** ARN of the IAM permissions boundaries for IAM roles provisioned in this shard */ - permissionsBoundaryArn: Scalars['String']; + permissionsBoundaryArn: Scalars['String']['output']; /** IDs of the subnets */ - subnetIds: Array; + subnetIds: Array; /** ID of the VPC */ - vpcId: Scalars['String']; + vpcId: Scalars['String']['output']; +}; + +export type BaseConnection = SsoConnection & { + __typename?: 'BaseConnection'; + domains: Array; + id: Scalars['ID']['output']; + idpId: Scalars['ID']['output']; + scim?: Maybe; + /** @deprecated Use stateV2 instead */ + state: SsoConnectionState; + stateV2: SsoConnectionStateV2; }; export type BillableMetricStats = { __typename?: 'BillableMetricStats'; - planThreshold?: Maybe; + planThreshold?: Maybe; stats: Array; }; export type BillingAddress = { __typename?: 'BillingAddress'; - address1?: Maybe; - address2?: Maybe; - city?: Maybe; - country?: Maybe; - state?: Maybe; - zip?: Maybe; + address1?: Maybe; + address2?: Maybe; + city?: Maybe; + country?: Maybe; + state?: Maybe; + zip?: Maybe; }; /** Billing address input */ export type BillingAddressInput = { - address1: Scalars['String']; - address2?: InputMaybe; - city: Scalars['String']; - country: Scalars['String']; - state: Scalars['String']; - zip: Scalars['String']; + address1: Scalars['String']['input']; + address2?: InputMaybe; + city: Scalars['String']['input']; + country: Scalars['String']['input']; + state: Scalars['String']['input']; + zip: Scalars['String']['input']; }; export type BillingAdminQuery = { __typename?: 'BillingAdminQuery'; /** Look up the current plan of an account by calling the grpc service */ - currentPlanFromGrpc?: Maybe; + currentPlanFromGrpc?: Maybe; }; -export type BillingAdminQuerycurrentPlanFromGrpcArgs = { - internalAccountId: Scalars['ID']; +export type BillingAdminQueryCurrentPlanFromGrpcArgs = { + internalAccountId: Scalars['ID']['input']; }; export type BillingCapability = { __typename?: 'BillingCapability'; - defaultValue: Scalars['Boolean']; - intendedUse: Scalars['String']; - label: Scalars['String']; + defaultValue: Scalars['Boolean']['output']; + intendedUse: Scalars['String']['output']; + label: Scalars['String']['output']; }; /** Billing capability input */ export type BillingCapabilityInput = { - defaultValue: Scalars['Boolean']; - intendedUse: Scalars['String']; - label: Scalars['String']; + defaultValue: Scalars['Boolean']['input']; + intendedUse: Scalars['String']['input']; + label: Scalars['String']['input']; }; export type BillingInfo = { __typename?: 'BillingInfo'; address: BillingAddress; - cardType?: Maybe; - firstName?: Maybe; - lastFour?: Maybe; - lastName?: Maybe; - month?: Maybe; - name?: Maybe; - vatNumber?: Maybe; - year?: Maybe; + cardType?: Maybe; + firstName?: Maybe; + lastFour?: Maybe; + lastName?: Maybe; + month?: Maybe; + name?: Maybe; + vatNumber?: Maybe; + year?: Maybe; }; export type BillingInsights = { @@ -2154,22 +2599,22 @@ export type BillingInsights = { export type BillingInsightsUsage = { __typename?: 'BillingInsightsUsage'; - timestamp: Scalars['Timestamp']; - totalOperationCount: Scalars['Long']; + timestamp: Scalars['Timestamp']['output']; + totalOperationCount: Scalars['Long']['output']; }; export type BillingLimit = { __typename?: 'BillingLimit'; - defaultValue: Scalars['Long']; - intendedUse: Scalars['String']; - label: Scalars['String']; + defaultValue: Scalars['Long']['output']; + intendedUse: Scalars['String']['output']; + label: Scalars['String']['output']; }; /** Billing limit input */ export type BillingLimitInput = { - defaultValue: Scalars['Long']; - intendedUse: Scalars['String']; - label: Scalars['String']; + defaultValue?: InputMaybe; + intendedUse: Scalars['String']['input']; + label: Scalars['String']['input']; }; export enum BillingModel { @@ -2179,60 +2624,78 @@ export enum BillingModel { export type BillingMonth = { __typename?: 'BillingMonth'; - end: Scalars['Timestamp']; - requests: Scalars['Long']; - start: Scalars['Timestamp']; + end: Scalars['Timestamp']['output']; + requests: Scalars['Long']['output']; + start: Scalars['Timestamp']['output']; }; export type BillingMutation = { __typename?: 'BillingMutation'; /** Temporary utility mutation to convert annual team plan orgs to monthly team plans */ - convertAnnualTeamOrgToMonthly?: Maybe; + convertAnnualTeamOrgToMonthly?: Maybe; createSetupIntent?: Maybe; + /** Admin mutation for manually creating usage exports for testing usage-based pricing of Scale plans. */ + createUsageExport?: Maybe; endPaidUsageBasedPlan?: Maybe; reloadPlans: Array; startFreeUsageBasedPlan?: Maybe; startUsageBasedPlan?: Maybe; /** @deprecated No longer supported */ syncAccountWithProviders?: Maybe; + /** Mutation to sync an Apollo Plan with a Stripe product */ + syncStripePlan?: Maybe; updatePaymentMethod?: Maybe; }; -export type BillingMutationconvertAnnualTeamOrgToMonthlyArgs = { - internalAccountId: Scalars['ID']; +export type BillingMutationConvertAnnualTeamOrgToMonthlyArgs = { + internalAccountId: Scalars['ID']['input']; +}; + + +export type BillingMutationCreateSetupIntentArgs = { + internalAccountId: Scalars['ID']['input']; +}; + + +export type BillingMutationCreateUsageExportArgs = { + date: Scalars['Date']['input']; + internalAccountIds: Array; + startAtHour: Scalars['Int']['input']; }; -export type BillingMutationcreateSetupIntentArgs = { - internalAccountId: Scalars['ID']; +export type BillingMutationEndPaidUsageBasedPlanArgs = { + internalAccountId: Scalars['ID']['input']; }; -export type BillingMutationendPaidUsageBasedPlanArgs = { - internalAccountId: Scalars['ID']; +export type BillingMutationStartFreeUsageBasedPlanArgs = { + internalAccountId: Scalars['ID']['input']; }; -export type BillingMutationstartFreeUsageBasedPlanArgs = { - internalAccountId: Scalars['ID']; +export type BillingMutationStartUsageBasedPlanArgs = { + internalAccountId: Scalars['ID']['input']; + paymentMethodId: Scalars['String']['input']; }; -export type BillingMutationstartUsageBasedPlanArgs = { - internalAccountId: Scalars['ID']; - paymentMethodId: Scalars['String']; +export type BillingMutationSyncAccountWithProvidersArgs = { + internalAccountId: Scalars['ID']['input']; }; -export type BillingMutationsyncAccountWithProvidersArgs = { - internalAccountId: Scalars['ID']; +export type BillingMutationSyncStripePlanArgs = { + planKind: BillingPlanKind; + planReadableId?: InputMaybe; + stripeProductId: Scalars['ID']['input']; }; -export type BillingMutationupdatePaymentMethodArgs = { - internalAccountId: Scalars['ID']; - paymentMethodId: Scalars['String']; +export type BillingMutationUpdatePaymentMethodArgs = { + internalAccountId: Scalars['ID']['input']; + paymentMethodId: Scalars['String']['input']; }; export enum BillingPeriod { @@ -2251,98 +2714,96 @@ export type BillingPlan = { allLimits: Array; billingModel: BillingModel; billingPeriod?: Maybe; - /** @deprecated capabilities have been flattened into the BillingPlan type */ - capabilities: BillingPlanCapabilities; - clientVersions: Scalars['Boolean']; - clients: Scalars['Boolean']; - contracts: Scalars['Boolean']; - datadog: Scalars['Boolean']; - description?: Maybe; + /** @deprecated use AccountCapabilities.clientVersions */ + clientVersions: Scalars['Boolean']['output']; + /** @deprecated use AccountCapabilities.clients */ + clients: Scalars['Boolean']['output']; + /** @deprecated use AccountCapabilities.contracts */ + contracts: Scalars['Boolean']['output']; + /** @deprecated use AccountCapabilities.datadog */ + datadog: Scalars['Boolean']['output']; + description?: Maybe; /** Retrieve the limit applied to this plan for a capability */ - effectiveLimit?: Maybe; - errors: Scalars['Boolean']; - federation: Scalars['Boolean']; + effectiveLimit?: Maybe; + errors: Scalars['Boolean']['output']; + /** @deprecated use AccountCapabilities.federation */ + federation: Scalars['Boolean']['output']; /** Check whether a capability is enabled for the plan */ - hasCapability?: Maybe; - id: Scalars['ID']; - isTrial: Scalars['Boolean']; + hasCapability?: Maybe; + id: Scalars['ID']['output']; + isTrial: Scalars['Boolean']['output']; kind: BillingPlanKind; - launches: Scalars['Boolean']; - maxAuditInDays: Scalars['Int']; - maxRangeInDays?: Maybe; - /** The maximum number of days that checks stats will be stored */ - maxRangeInDaysForChecks?: Maybe; - maxRequestsPerMonth?: Maybe; - metrics: Scalars['Boolean']; - name: Scalars['String']; - notifications: Scalars['Boolean']; - operationRegistry: Scalars['Boolean']; - persistedQueries: Scalars['Boolean']; + /** @deprecated use AccountCapabilities.launches */ + launches: Scalars['Boolean']['output']; + /** @deprecated use AccountLimits.maxAuditInDays */ + maxAuditInDays: Scalars['Int']['output']; + /** @deprecated use AccountLimits.maxRangeInDays */ + maxRangeInDays?: Maybe; + /** + * The maximum number of days that checks stats will be stored + * @deprecated use AccountLimits.maxRangeInDaysForChecks + */ + maxRangeInDaysForChecks?: Maybe; + /** @deprecated use AccountLimits.maxRequestsPerMonth */ + maxRequestsPerMonth?: Maybe; + /** @deprecated use AccountCapabilities.metrics */ + metrics: Scalars['Boolean']['output']; + name: Scalars['String']['output']; + /** @deprecated use AccountCapabilities.notifications */ + notifications: Scalars['Boolean']['output']; + /** @deprecated use AccountCapabilities.operationRegistry */ + operationRegistry: Scalars['Boolean']['output']; + /** @deprecated use AccountCapabilities.persistedQueries */ + persistedQueries: Scalars['Boolean']['output']; /** The price of every seat */ - pricePerSeatInUsdCents?: Maybe; + pricePerSeatInUsdCents?: Maybe; /** The price of subscribing to this plan with a quantity of 1 (currently always the case) */ - pricePerUnitInUsdCents: Scalars['Int']; + pricePerUnitInUsdCents: Scalars['Int']['output']; + provider?: Maybe; /** Whether the plan is accessible by all users in QueryRoot.allPlans, QueryRoot.plan, or AccountMutation.setPlan */ - public: Scalars['Boolean']; - ranges: Array; - schemaValidation: Scalars['Boolean']; + public: Scalars['Boolean']['output']; + ranges: Array; + readableId: Scalars['ID']['output']; + /** @deprecated use AccountCapabilities.schemaValidation */ + schemaValidation: Scalars['Boolean']['output']; + /** @deprecated use AccountCapabilities.sso */ + sso?: Maybe; tier: BillingPlanTier; - traces: Scalars['Boolean']; - userRoles: Scalars['Boolean']; - webhooks: Scalars['Boolean']; + /** @deprecated use AccountCapabilities.traces */ + traces: Scalars['Boolean']['output']; + /** @deprecated use AccountCapabilities.userRoles */ + userRoles: Scalars['Boolean']['output']; + /** @deprecated use AccountCapabilities.webhooks */ + webhooks: Scalars['Boolean']['output']; }; -export type BillingPlaneffectiveLimitArgs = { - label: Scalars['String']; +export type BillingPlanEffectiveLimitArgs = { + label: Scalars['String']['input']; }; -export type BillingPlanhasCapabilityArgs = { - label: Scalars['String']; +export type BillingPlanHasCapabilityArgs = { + label: Scalars['String']['input']; }; export type BillingPlanAddon = { __typename?: 'BillingPlanAddon'; - id: Scalars['ID']; - pricePerUnitInUsdCents: Scalars['Int']; + id: Scalars['ID']['output']; + pricePerUnitInUsdCents: Scalars['Int']['output']; }; /** Billing plan addon input */ export type BillingPlanAddonInput = { - code?: InputMaybe; - usdCentsPrice?: InputMaybe; -}; - -export type BillingPlanCapabilities = { - __typename?: 'BillingPlanCapabilities'; - clientVersions: Scalars['Boolean']; - clients: Scalars['Boolean']; - contracts: Scalars['Boolean']; - datadog: Scalars['Boolean']; - errors: Scalars['Boolean']; - federation: Scalars['Boolean']; - launches: Scalars['Boolean']; - maxAuditInDays: Scalars['Int']; - maxRangeInDays?: Maybe; - maxRangeInDaysForChecks?: Maybe; - maxRequestsPerMonth?: Maybe; - metrics: Scalars['Boolean']; - notifications: Scalars['Boolean']; - operationRegistry: Scalars['Boolean']; - persistedQueries: Scalars['Boolean']; - ranges: Array; - schemaValidation: Scalars['Boolean']; - traces: Scalars['Boolean']; - userRoles: Scalars['Boolean']; - webhooks: Scalars['Boolean']; + code?: InputMaybe; + usdCentsPrice?: InputMaybe; }; export type BillingPlanCapability = { __typename?: 'BillingPlanCapability'; - label: Scalars['String']; + label: Scalars['String']['output']; plan: BillingPlan; - value: Scalars['Boolean']; + value: Scalars['Boolean']['output']; }; /** Billing plan input */ @@ -2350,68 +2811,92 @@ export type BillingPlanInput = { addons: Array; billingModel: BillingModel; billingPeriod: BillingPeriod; - clientVersions?: InputMaybe; - clients?: InputMaybe; - contracts?: InputMaybe; - datadog?: InputMaybe; - description: Scalars['String']; - errors?: InputMaybe; - federation?: InputMaybe; - id: Scalars['ID']; + clientVersions?: InputMaybe; + clients?: InputMaybe; + contracts?: InputMaybe; + datadog?: InputMaybe; + description: Scalars['String']['input']; + errors?: InputMaybe; + federation?: InputMaybe; + id: Scalars['ID']['input']; kind: BillingPlanKind; - launches?: InputMaybe; - maxAuditInDays?: InputMaybe; - maxRangeInDays?: InputMaybe; - maxRangeInDaysForChecks?: InputMaybe; - maxRequestsPerMonth?: InputMaybe; - metrics?: InputMaybe; - name: Scalars['String']; - notifications?: InputMaybe; - operationRegistry?: InputMaybe; - persistedQueries?: InputMaybe; - pricePerSeatInUsdCents?: InputMaybe; - pricePerUnitInUsdCents?: InputMaybe; - public: Scalars['Boolean']; - schemaValidation?: InputMaybe; - traces?: InputMaybe; - userRoles?: InputMaybe; - webhooks?: InputMaybe; + launches?: InputMaybe; + maxAuditInDays?: InputMaybe; + maxRangeInDays?: InputMaybe; + maxRangeInDaysForChecks?: InputMaybe; + maxRequestsPerMonth?: InputMaybe; + metrics?: InputMaybe; + name: Scalars['String']['input']; + notifications?: InputMaybe; + operationRegistry?: InputMaybe; + persistedQueries?: InputMaybe; + pricePerSeatInUsdCents?: InputMaybe; + pricePerUnitInUsdCents?: InputMaybe; + public: Scalars['Boolean']['input']; + schemaValidation?: InputMaybe; + traces?: InputMaybe; + userRoles?: InputMaybe; + webhooks?: InputMaybe; }; +/** + * Overall class that a billing plan falls into. This is slightly more granular than BillingPlanTier + * because it differentiates between trials, pilots, internal-only plans, etc. + */ export enum BillingPlanKind { + /** Original version of the default free plan that we still support but is no longer offered */ COMMUNITY = 'COMMUNITY', + /** Custom plan for serverless customers that is configured and billed manually in Stripe */ DEDICATED = 'DEDICATED', ENTERPRISE_INTERNAL = 'ENTERPRISE_INTERNAL', ENTERPRISE_PAID = 'ENTERPRISE_PAID', ENTERPRISE_PILOT = 'ENTERPRISE_PILOT', ENTERPRISE_TRIAL = 'ENTERPRISE_TRIAL', + /** 2025 version of the default free plan */ + FREE = 'FREE', + /** @deprecated Part of initial 2022 serverless implementation; was never used in production */ ONE_FREE = 'ONE_FREE', + /** @deprecated Part of initial 2022 serverless implementation; was never used in production */ ONE_PAID = 'ONE_PAID', + PLACEHOLDER_FREE = 'PLACEHOLDER_FREE', + PLACEHOLDER_PAID = 'PLACEHOLDER_PAID', + /** Sales assisted Scale plan currently configured in Recurly. */ + SCALE = 'SCALE', + SCALE_ADVANCED = 'SCALE_ADVANCED', + /** New Scale plans configured in Stripe. */ + SCALE_BASIC = 'SCALE_BASIC', + SCALE_PLATFORM = 'SCALE_PLATFORM', + /** @deprecated Part of initial 2022 serverless implementation; was never used in production */ SERVERLESS = 'SERVERLESS', + /** 2022 version of the 'serverless' free plan that we still support but is no longer offered */ SERVERLESS_FREE = 'SERVERLESS_FREE', + /** 2022 version of the 'serverless' paid plan that we still support but is no longer offered */ SERVERLESS_PAID = 'SERVERLESS_PAID', + /** @deprecated Part of initial 2022 serverless implementation; was never used in production */ STARTER = 'STARTER', + /** Original version of the non-enterprise paid plan (configured in Recurly) that we still support but is no longer offered */ TEAM_PAID = 'TEAM_PAID', + /** Original version of the non-enterprise trial plan (configured in Recurly) that we still support but is no longer offered */ TEAM_TRIAL = 'TEAM_TRIAL', UNKNOWN = 'UNKNOWN' } export type BillingPlanLimit = { __typename?: 'BillingPlanLimit'; - label: Scalars['String']; + label: Scalars['String']['output']; plan: BillingPlan; - value: Scalars['Long']; + value?: Maybe; }; export type BillingPlanMutation = { __typename?: 'BillingPlanMutation'; /** Archive this billing plan */ - archive?: Maybe; + archive?: Maybe; /** Remove the specified capability from this plan */ - clearCapability?: Maybe; + clearCapability?: Maybe; /** Remove the specified limit from this plan */ - clearLimit?: Maybe; - id: Scalars['ID']; + clearLimit?: Maybe; + id: Scalars['ID']['output']; /** Reset the specified capability on this plan to the global default value for the capability */ resetCapability?: Maybe; /** Reset the specified limit on this plan to the global default value for the limit */ @@ -2420,146 +2905,178 @@ export type BillingPlanMutation = { setCapability?: Maybe; /** Sets the specified limit on this plan to the provided value */ setLimit?: Maybe; + updateDescriptors?: Maybe; /** Update a plan */ updatePlan?: Maybe; + /** Add Stripe pricing rates for this plan */ + upsertStripeRates?: Maybe; +}; + + +export type BillingPlanMutationClearCapabilityArgs = { + label: Scalars['String']['input']; }; -export type BillingPlanMutationclearCapabilityArgs = { - label: Scalars['String']; +export type BillingPlanMutationClearLimitArgs = { + label: Scalars['String']['input']; }; -export type BillingPlanMutationclearLimitArgs = { - label: Scalars['String']; +export type BillingPlanMutationResetCapabilityArgs = { + label: Scalars['String']['input']; }; -export type BillingPlanMutationresetCapabilityArgs = { - label: Scalars['String']; +export type BillingPlanMutationResetLimitArgs = { + label: Scalars['String']['input']; }; -export type BillingPlanMutationresetLimitArgs = { - label: Scalars['String']; +export type BillingPlanMutationSetCapabilityArgs = { + label: Scalars['String']['input']; + value: Scalars['Boolean']['input']; }; -export type BillingPlanMutationsetCapabilityArgs = { - label: Scalars['String']; - value: Scalars['Boolean']; +export type BillingPlanMutationSetLimitArgs = { + label: Scalars['String']['input']; + value?: InputMaybe; }; -export type BillingPlanMutationsetLimitArgs = { - label: Scalars['String']; - value: Scalars['Long']; +export type BillingPlanMutationUpdateDescriptorsArgs = { + input?: InputMaybe; }; -export type BillingPlanMutationupdatePlanArgs = { +export type BillingPlanMutationUpdatePlanArgs = { input?: InputMaybe; }; + +export type BillingPlanMutationUpsertStripeRatesArgs = { + priceIds: Array; +}; + export enum BillingPlanTier { + /** Original version of the default free plan that we still support but is no longer offered */ COMMUNITY = 'COMMUNITY', ENTERPRISE = 'ENTERPRISE', + /** 2025 version of the 'serverless' free plan */ + FREE = 'FREE', + /** @deprecated Part of initial 2022 serverless implementation; was never used in production */ ONE = 'ONE', + /** 2025 version of the 'serverless' paid plan */ + SCALE = 'SCALE', + /** Original version of the non-enterprise paid plan (configured in Recurly) that we still support but is no longer offered */ TEAM = 'TEAM', UNKNOWN = 'UNKNOWN', + /** 2022 version of the 'serverless' free plan that we still support but is no longer offered */ USAGE_BASED = 'USAGE_BASED' } +export enum BillingProvider { + APOLLO_NO_INVOICING = 'APOLLO_NO_INVOICING', + METRONOME = 'METRONOME', + NONE = 'NONE', + RECURLY = 'RECURLY', + STRIPE = 'STRIPE' +} + export type BillingSubscription = { __typename?: 'BillingSubscription'; - activatedAt: Scalars['Timestamp']; + activatedAt: Scalars['Timestamp']['output']; addons: Array; /** Retrieve all capabilities for this subscription */ allCapabilities: Array; /** Retrieve a list of all effective capability limits for this subscription */ allLimits: Array; - autoRenew: Scalars['Boolean']; - canceledAt?: Maybe; - /** Draft invoice for this subscription */ + autoRenew: Scalars['Boolean']['output']; + canceledAt?: Maybe; + /** + * Draft invoice for this subscription + * @deprecated This data came from Metronome and we no longer use Metronome + */ currentDraftInvoice?: Maybe; - currentPeriodEndsAt: Scalars['Timestamp']; - currentPeriodStartedAt: Scalars['Timestamp']; + currentPeriodEndsAt: Scalars['Timestamp']['output']; + currentPeriodStartedAt: Scalars['Timestamp']['output']; /** Retrieve the limit applied to this subscription for a capability */ - effectiveLimit?: Maybe; - expiresAt?: Maybe; + effectiveLimit?: Maybe; + expiresAt?: Maybe; /** Renewal grace time for updating seat count */ - graceTimeForNextRenewal?: Maybe; + graceTimeForNextRenewal?: Maybe; /** Check whether a capability is enabled for the subscription */ - hasCapability?: Maybe; - maxSelfHostedRequestsPerMonth?: Maybe; - maxServerlessRequestsPerMonth?: Maybe; + hasCapability?: Maybe; + maxSelfHostedRequestsPerMonth?: Maybe; + maxServerlessRequestsPerMonth?: Maybe; plan: BillingPlan; /** The price of every seat */ - pricePerSeatInUsdCents?: Maybe; + pricePerSeatInUsdCents?: Maybe; /** The price of every unit in the subscription (hence multiplied by quantity to get to the basePriceInUsdCents) */ - pricePerUnitInUsdCents: Scalars['Int']; - quantity: Scalars['Int']; + pricePerUnitInUsdCents: Scalars['Int']['output']; + quantity: Scalars['Int']['output']; /** Total price of the subscription when it next renews, including add-ons (such as seats) */ - renewalTotalPriceInUsdCents: Scalars['Long']; + renewalTotalPriceInUsdCents: Scalars['Long']['output']; state: SubscriptionState; /** * When this subscription's trial period expires (if it is a trial). Not the same as the * subscription's Recurly expiration). */ - trialExpiresAt?: Maybe; - uuid: Scalars['ID']; + trialExpiresAt?: Maybe; + uuid: Scalars['ID']['output']; }; -export type BillingSubscriptioneffectiveLimitArgs = { - label: Scalars['String']; +export type BillingSubscriptionEffectiveLimitArgs = { + label: Scalars['String']['input']; }; -export type BillingSubscriptionhasCapabilityArgs = { - label: Scalars['String']; +export type BillingSubscriptionHasCapabilityArgs = { + label: Scalars['String']['input']; }; export type BillingSubscriptionAddon = { __typename?: 'BillingSubscriptionAddon'; - id: Scalars['ID']; - pricePerUnitInUsdCents: Scalars['Int']; - quantity: Scalars['Int']; + id: Scalars['ID']['output']; + pricePerUnitInUsdCents: Scalars['Int']['output']; + quantity: Scalars['Int']['output']; }; export type BillingSubscriptionMutation = { __typename?: 'BillingSubscriptionMutation'; /** Remove the specified capability override for this subscription */ - clearCapability?: Maybe; + clearCapability?: Maybe; /** Remove the specified limit override for this subscription */ - clearLimit?: Maybe; + clearLimit?: Maybe; /** Sets the capability override on this subscription to the provided value */ setCapability?: Maybe; /** Sets the limit override on this subscription to the provided value */ setLimit?: Maybe; - uuid: Scalars['ID']; + uuid: Scalars['ID']['output']; }; -export type BillingSubscriptionMutationclearCapabilityArgs = { - label: Scalars['String']; +export type BillingSubscriptionMutationClearCapabilityArgs = { + label: Scalars['String']['input']; }; -export type BillingSubscriptionMutationclearLimitArgs = { - label: Scalars['String']; +export type BillingSubscriptionMutationClearLimitArgs = { + label: Scalars['String']['input']; }; -export type BillingSubscriptionMutationsetCapabilityArgs = { - label: Scalars['String']; - value: Scalars['Boolean']; +export type BillingSubscriptionMutationSetCapabilityArgs = { + label: Scalars['String']['input']; + value: Scalars['Boolean']['input']; }; -export type BillingSubscriptionMutationsetLimitArgs = { - label: Scalars['String']; - value: Scalars['Long']; +export type BillingSubscriptionMutationSetLimitArgs = { + label: Scalars['String']['input']; + value?: InputMaybe; }; export type BillingTier = { @@ -2569,19 +3086,21 @@ export type BillingTier = { }; -export type BillingTiersearchAccountsArgs = { - search?: InputMaybe; +export type BillingTierSearchAccountsArgs = { + search?: InputMaybe; }; /** Columns of BillingUsageStats. */ export enum BillingUsageStatsColumn { ACCOUNT_ID = 'ACCOUNT_ID', + AGENT_ID = 'AGENT_ID', AGENT_VERSION = 'AGENT_VERSION', GRAPH_DEPLOYMENT_TYPE = 'GRAPH_DEPLOYMENT_TYPE', OPERATION_COUNT = 'OPERATION_COUNT', OPERATION_COUNT_PROVIDED_EXPLICITLY = 'OPERATION_COUNT_PROVIDED_EXPLICITLY', OPERATION_SUBTYPE = 'OPERATION_SUBTYPE', OPERATION_TYPE = 'OPERATION_TYPE', + ROUTER_FEATURES_ENABLED = 'ROUTER_FEATURES_ENABLED', SCHEMA_TAG = 'SCHEMA_TAG', SERVICE_ID = 'SERVICE_ID', TIMESTAMP = 'TIMESTAMP' @@ -2589,63 +3108,73 @@ export enum BillingUsageStatsColumn { export type BillingUsageStatsDimensions = { __typename?: 'BillingUsageStatsDimensions'; - accountId?: Maybe; - agentVersion?: Maybe; - graphDeploymentType?: Maybe; - operationCountProvidedExplicitly?: Maybe; - operationSubtype?: Maybe; - operationType?: Maybe; - schemaTag?: Maybe; - serviceId?: Maybe; + accountId?: Maybe; + agentId?: Maybe; + agentVersion?: Maybe; + graphDeploymentType?: Maybe; + operationCountProvidedExplicitly?: Maybe; + operationSubtype?: Maybe; + operationType?: Maybe; + routerFeaturesEnabled?: Maybe; + schemaTag?: Maybe; + serviceId?: Maybe; }; /** Filter for data in BillingUsageStats. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type BillingUsageStatsFilter = { /** Selects rows whose accountId dimension equals the given value if not null. To query for the null value, use {in: {accountId: [null]}} instead. */ - accountId?: InputMaybe; + accountId?: InputMaybe; + /** Selects rows whose agentId dimension equals the given value if not null. To query for the null value, use {in: {agentId: [null]}} instead. */ + agentId?: InputMaybe; /** Selects rows whose agentVersion dimension equals the given value if not null. To query for the null value, use {in: {agentVersion: [null]}} instead. */ - agentVersion?: InputMaybe; + agentVersion?: InputMaybe; and?: InputMaybe>; /** Selects rows whose graphDeploymentType dimension equals the given value if not null. To query for the null value, use {in: {graphDeploymentType: [null]}} instead. */ - graphDeploymentType?: InputMaybe; + graphDeploymentType?: InputMaybe; in?: InputMaybe; not?: InputMaybe; /** Selects rows whose operationCountProvidedExplicitly dimension equals the given value if not null. To query for the null value, use {in: {operationCountProvidedExplicitly: [null]}} instead. */ - operationCountProvidedExplicitly?: InputMaybe; + operationCountProvidedExplicitly?: InputMaybe; /** Selects rows whose operationSubtype dimension equals the given value if not null. To query for the null value, use {in: {operationSubtype: [null]}} instead. */ - operationSubtype?: InputMaybe; + operationSubtype?: InputMaybe; /** Selects rows whose operationType dimension equals the given value if not null. To query for the null value, use {in: {operationType: [null]}} instead. */ - operationType?: InputMaybe; + operationType?: InputMaybe; or?: InputMaybe>; + /** Selects rows whose routerFeaturesEnabled dimension equals the given value if not null. To query for the null value, use {in: {routerFeaturesEnabled: [null]}} instead. */ + routerFeaturesEnabled?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */ - serviceId?: InputMaybe; + serviceId?: InputMaybe; }; /** Filter for data in BillingUsageStats. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type BillingUsageStatsFilterIn = { /** Selects rows whose accountId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - accountId?: InputMaybe>>; + accountId?: InputMaybe>>; + /** Selects rows whose agentId dimension is in the given list. A null value in the list means a row with null for that dimension. */ + agentId?: InputMaybe>>; /** Selects rows whose agentVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - agentVersion?: InputMaybe>>; + agentVersion?: InputMaybe>>; /** Selects rows whose graphDeploymentType dimension is in the given list. A null value in the list means a row with null for that dimension. */ - graphDeploymentType?: InputMaybe>>; + graphDeploymentType?: InputMaybe>>; /** Selects rows whose operationCountProvidedExplicitly dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationCountProvidedExplicitly?: InputMaybe>>; + operationCountProvidedExplicitly?: InputMaybe>>; /** Selects rows whose operationSubtype dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationSubtype?: InputMaybe>>; + operationSubtype?: InputMaybe>>; /** Selects rows whose operationType dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationType?: InputMaybe>>; + operationType?: InputMaybe>>; + /** Selects rows whose routerFeaturesEnabled dimension is in the given list. A null value in the list means a row with null for that dimension. */ + routerFeaturesEnabled?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - serviceId?: InputMaybe>>; + serviceId?: InputMaybe>>; }; export type BillingUsageStatsMetrics = { __typename?: 'BillingUsageStatsMetrics'; - operationCount: Scalars['Long']; + operationCount: Scalars['Long']['output']; }; export type BillingUsageStatsOrderBySpec = { @@ -2660,7 +3189,7 @@ export type BillingUsageStatsRecord = { /** Metrics of BillingUsageStats that can be aggregated over. */ metrics: BillingUsageStatsMetrics; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; }; export enum BillingUsageStatsWindowSize { @@ -2673,6 +3202,8 @@ export enum BillingUsageStatsWindowSize { /** The building of a Studio variant (including supergraph composition and any contract filtering) as part of a launch. */ export type Build = { __typename?: 'Build'; + /** The unique identifier for this build. */ + id: Scalars['ID']['output']; /** The inputs provided to the build, including subgraph and contract details. */ input: BuildInput; /** The result of the build. This value is null until the build completes. */ @@ -2684,18 +3215,18 @@ export type BuildCheckFailed = { buildPipelineTrack: BuildPipelineTrack; /** A list of errors generated by this build. */ errors: Array; - id: Scalars['ID']; - passed: Scalars['Boolean']; + id: Scalars['ID']['output']; + passed: Scalars['Boolean']['output']; workflowTask: BuildCheckTask; }; export type BuildCheckPassed = { buildInputs: BuildInputs; buildPipelineTrack: BuildPipelineTrack; - id: Scalars['ID']; - passed: Scalars['Boolean']; + id: Scalars['ID']['output']; + passed: Scalars['Boolean']['output']; /** The SHA-256 of the supergraph schema document generated by this build. */ - supergraphSchemaHash: Scalars['SHA256']; + supergraphSchemaHash: Scalars['SHA256']['output']; workflowTask: BuildCheckTask; }; @@ -2707,9 +3238,9 @@ export type BuildCheckResult = { * build pipeline is intended to support (and accordingly controls the version of code). */ buildPipelineTrack: BuildPipelineTrack; - id: Scalars['ID']; + id: Scalars['ID']['output']; /** Whether the build task passed or failed. */ - passed: Scalars['Boolean']; + passed: Scalars['Boolean']['output']; /** The workflow build task that generated this result. */ workflowTask: BuildCheckTask; }; @@ -2717,9 +3248,9 @@ export type BuildCheckResult = { export type BuildCheckTask = { /** The result of the build check. This will be null when the task is initializing or running. */ buildResult?: Maybe; - completedAt?: Maybe; - createdAt: Scalars['Timestamp']; - id: Scalars['ID']; + completedAt?: Maybe; + createdAt: Scalars['Timestamp']['output']; + id: Scalars['ID']['output']; /** * The build input change proposed for this check workflow. Note that for triggered downstream * workflows, this is not the upstream variant's proposed change, but the changes for the downstream @@ -2727,7 +3258,7 @@ export type BuildCheckTask = { */ proposedBuildInputChanges: ProposedBuildInputChanges; status: CheckWorkflowTaskStatus; - targetURL?: Maybe; + targetURL?: Maybe; workflow: CheckWorkflow; }; @@ -2736,7 +3267,7 @@ export type BuildConfig = { __typename?: 'BuildConfig'; buildPipelineTrack: BuildPipelineTrack; /** Show all uses of @tag directives to consumers in Schema Reference and Explorer */ - tagInApiSchema: Scalars['Boolean']; + tagInApiSchema: Scalars['Boolean']['output']; }; /** @@ -2747,7 +3278,7 @@ export type BuildConfig = { */ export type BuildConfigInput = { /** This list will contain any directives that should get passed through to the api schema from the core schema. Anything included in this list will appear in the consumer facing schema */ - apiDirectivePassThrough: Array; + apiDirectivePassThrough: Array; /** if buildPipelineTrack is null use the graph default */ buildPipelineTrack?: InputMaybe; composition?: InputMaybe; @@ -2757,15 +3288,16 @@ export type BuildConfigInput = { /** A single error that occurred during the failed execution of a build. */ export type BuildError = { __typename?: 'BuildError'; - code?: Maybe; - failedStep?: Maybe; + code?: Maybe; + failedStep?: Maybe; locations: Array; - message: Scalars['String']; + message: Scalars['String']['output']; }; /** Contains the details of an executed build that failed. */ export type BuildFailure = { __typename?: 'BuildFailure'; + errorCount: Scalars['Int']['output']; /** A list of all errors that occurred during the failed build. */ errorMessages: Array; }; @@ -2774,26 +3306,21 @@ export type BuildInput = CompositionBuildInput | FilterBuildInput; export type BuildInputs = CompositionBuildInputs | FilterBuildInputs; -/** Build Pipeline Tracks */ export enum BuildPipelineTrack { - /** Apollo Federation 1.0 */ FED_1_0 = 'FED_1_0', - /** Apollo Federation 1.1 */ FED_1_1 = 'FED_1_1', - /** Apollo Federation 2.0 */ FED_2_0 = 'FED_2_0', - /** Apollo Federation 2.1 */ FED_2_1 = 'FED_2_1', - /** Apollo Federation 2.3 */ FED_2_3 = 'FED_2_3', - /** Apollo Federation 2.4 */ FED_2_4 = 'FED_2_4', - /** Apollo Federation 2.5 */ FED_2_5 = 'FED_2_5', - /** Apollo Federation 2.6 */ FED_2_6 = 'FED_2_6', - /** Apollo Federation 2.7 */ - FED_2_7 = 'FED_2_7' + FED_2_7 = 'FED_2_7', + FED_2_8 = 'FED_2_8', + FED_2_9 = 'FED_2_9', + FED_2_10 = 'FED_2_10', + FED_2_11 = 'FED_2_11', + FED_NEXT = 'FED_NEXT' } export enum BuildPipelineTrackBadge { @@ -2808,17 +3335,30 @@ export type BuildPipelineTrackDetails = { badge?: Maybe; buildPipelineTrack: BuildPipelineTrack; /** currently running version of composition for this track, includes patch updates */ - compositionVersion: Scalars['String']; - deprecatedAt?: Maybe; - displayName: Scalars['String']; - minimumGatewayVersion?: Maybe; + compositionVersion: Scalars['String']['output']; + deprecatedAt?: Maybe; + displayName: Scalars['String']['output']; + minimumGatewayVersion?: Maybe; /** Minimum supported router and gateway versions. Min router version can be null since fed 1 doesn't have router support. */ - minimumRouterVersion?: Maybe; - notSupportedAt?: Maybe; + minimumRouterVersion?: Maybe; + notSupportedAt?: Maybe; }; export type BuildResult = BuildFailure | BuildSuccess; +export type BuildRouterVersionInput = { + cloudRouterBranch?: InputMaybe; + routerBranch?: InputMaybe; + routerRepository?: InputMaybe; +}; + +export type BuildRouterVersionResult = BuildRouterVersionSuccess | CloudRouterTestingInvalidInputErrors; + +export type BuildRouterVersionSuccess = { + __typename?: 'BuildRouterVersionSuccess'; + jobId: Scalars['ID']['output']; +}; + /** Contains the details of an executed build that succeeded. */ export type BuildSuccess = { __typename?: 'BuildSuccess'; @@ -2826,11 +3366,6 @@ export type BuildSuccess = { coreSchema: CoreSchema; }; -export enum CacheControlScope { - PRIVATE = 'PRIVATE', - PUBLIC = 'PUBLIC' -} - export enum CacheScope { PRIVATE = 'PRIVATE', PUBLIC = 'PUBLIC', @@ -2838,14 +3373,75 @@ export enum CacheScope { UNRECOGNIZED = 'UNRECOGNIZED' } +/** The result of a failed call to PersistedQueryListMutation.delete due to linked variant(s). */ export type CannotDeleteLinkedPersistedQueryListError = Error & { __typename?: 'CannotDeleteLinkedPersistedQueryListError'; - message: Scalars['String']; + message: Scalars['String']['output']; }; export type CannotModifyOperationBodyError = Error & { __typename?: 'CannotModifyOperationBodyError'; - message: Scalars['String']; + message: Scalars['String']['output']; +}; + +/** Columns of CardinalityStats. */ +export enum CardinalityStatsColumn { + CLIENT_NAME_CARDINALITY = 'CLIENT_NAME_CARDINALITY', + CLIENT_VERSION_CARDINALITY = 'CLIENT_VERSION_CARDINALITY', + OPERATION_SHAPE_CARDINALITY = 'OPERATION_SHAPE_CARDINALITY', + SCHEMA_COORDINATE_CARDINALITY = 'SCHEMA_COORDINATE_CARDINALITY', + SCHEMA_TAG = 'SCHEMA_TAG', + SERVICE_ID = 'SERVICE_ID', + TIMESTAMP = 'TIMESTAMP' +} + +export type CardinalityStatsDimensions = { + __typename?: 'CardinalityStatsDimensions'; + schemaTag?: Maybe; + serviceId?: Maybe; +}; + +/** Filter for data in CardinalityStats. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ +export type CardinalityStatsFilter = { + and?: InputMaybe>; + in?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>; + /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ + schemaTag?: InputMaybe; + /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */ + serviceId?: InputMaybe; +}; + +/** Filter for data in CardinalityStats. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ +export type CardinalityStatsFilterIn = { + /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ + schemaTag?: InputMaybe>>; + /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ + serviceId?: InputMaybe>>; +}; + +export type CardinalityStatsMetrics = { + __typename?: 'CardinalityStatsMetrics'; + clientNameCardinality: Scalars['Float']['output']; + clientVersionCardinality: Scalars['Float']['output']; + operationShapeCardinality: Scalars['Float']['output']; + schemaCoordinateCardinality: Scalars['Float']['output']; +}; + +export type CardinalityStatsOrderBySpec = { + column: CardinalityStatsColumn; + direction: Ordering; +}; + +export type CardinalityStatsRecord = { + __typename?: 'CardinalityStatsRecord'; + /** Dimensions of CardinalityStats that can be grouped by. */ + groupBy: CardinalityStatsDimensions; + /** Metrics of CardinalityStats that can be aggregated over. */ + metrics: CardinalityStatsMetrics; + /** Starting segment timestamp. */ + timestamp: Scalars['Timestamp']['output']; }; /** A single change that was made to a definition in a schema. */ @@ -2862,15 +3458,15 @@ export type Change = { */ childNode?: Maybe; /** Indicates the type of change that was made, and to what (e.g., 'TYPE_REMOVED'). */ - code: Scalars['String']; + code: Scalars['String']['output']; /** A human-readable description of the change. */ - description: Scalars['String']; + description: Scalars['String']['output']; /** Top level node affected by the change. */ parentNode?: Maybe; /** The severity of the change (e.g., `FAILURE` or `NOTICE`) */ severity: ChangeSeverity; /** Short description of the change */ - shortDescription?: Maybe; + shortDescription?: Maybe; /** * Indication of the success of the overall change, either failure, warning, or notice. * @deprecated use severity instead @@ -2938,6 +3534,12 @@ export enum ChangeCode { FIELD_REMOVED = 'FIELD_REMOVED', /** Field was removed from the input object. */ FIELD_REMOVED_FROM_INPUT_OBJECT = 'FIELD_REMOVED_FROM_INPUT_OBJECT', + /** A default value was added to an input object field. */ + INPUT_OBJECT_FIELD_DEFAULT_VALUE_ADDED = 'INPUT_OBJECT_FIELD_DEFAULT_VALUE_ADDED', + /** The default value of an input object field was changed. */ + INPUT_OBJECT_FIELD_DEFAULT_VALUE_CHANGE = 'INPUT_OBJECT_FIELD_DEFAULT_VALUE_CHANGE', + /** The default value of an input object field was removed. */ + INPUT_OBJECT_FIELD_DEFAULT_VALUE_REMOVED = 'INPUT_OBJECT_FIELD_DEFAULT_VALUE_REMOVED', /** Non-nullable field was added to the input object. (Deprecated.) */ NON_NULLABLE_FIELD_ADDED_TO_INPUT_OBJECT = 'NON_NULLABLE_FIELD_ADDED_TO_INPUT_OBJECT', /** Nullable field was added to the input type. (Deprecated.) */ @@ -2992,25 +3594,25 @@ export type ChangeDefinition = { export type ChangeOnOperation = { __typename?: 'ChangeOnOperation'; /** Human-readable explanation of the impact of this change on the operation */ - impact?: Maybe; + impact?: Maybe; /** The semantic info about this change, i.e. info about the change that doesn't depend on the operation */ semanticChange: SemanticChange; }; export type ChangeProposalComment = { - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; /** null if the user is deleted */ createdBy?: Maybe; - id: Scalars['ID']; - message: Scalars['String']; + id: Scalars['ID']['output']; + message: Scalars['String']['output']; /** true if the schemaCoordinate this comment is on doesn't exist in the diff between the most recent revision & the base sdl */ - outdated: Scalars['Boolean']; - schemaCoordinate: Scalars['String']; + outdated: Scalars['Boolean']['output']; + schemaCoordinate: Scalars['String']['output']; /** '#@!api!@#' for api schema, '#@!supergraph!@#' for supergraph schema, subgraph otherwise */ - schemaScope: Scalars['String']; + schemaScope: Scalars['String']['output']; status: CommentStatus; /** null if never updated */ - updatedAt?: Maybe; + updatedAt?: Maybe; }; export enum ChangeSeverity { @@ -3050,31 +3652,43 @@ export enum ChangeType { /** An addition made to a Studio variant's changelog after a launch. */ export type ChangelogLaunchResult = { __typename?: 'ChangelogLaunchResult'; - createdAt: Scalars['Timestamp']; - schemaTagID: Scalars['ID']; + createdAt: Scalars['Timestamp']['output']; + schemaTagID: Scalars['ID']['output']; }; /** Destination for notifications */ export type Channel = { - id: Scalars['ID']; - name: Scalars['String']; + id: Scalars['ID']['output']; + name: Scalars['String']['output']; subscriptions: Array; }; export type ChannelSubscription = { channels: Array; - enabled: Scalars['Boolean']; - id: Scalars['ID']; - variant?: Maybe; + enabled: Scalars['Boolean']['output']; + id: Scalars['ID']['output']; + variant?: Maybe; }; /** Graph-level configuration of checks. */ export type CheckConfiguration = { __typename?: 'CheckConfiguration'; /** Time when check configuration was created */ - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; + /** + * During operation checks, if this option is enabled, the check will not fail or + * mark any operations as broken/changed if the default value has changed, only + * if the default value is removed completely. + */ + downgradeDefaultValueChange: Scalars['Boolean']['output']; + /** + * During operation checks, if this option is enabled, it evaluates a check + * run against zero operations as a pass instead of a failure. + */ + downgradeStaticChecks: Scalars['Boolean']['output']; + enableCustomChecks: Scalars['Boolean']['output']; /** Whether to run Linting during schema checks. */ - enableLintChecks: Scalars['Boolean']; + enableLintChecks: Scalars['Boolean']['output']; /** Clients to ignore during validation */ excludedClients: Array; /** Operation names to ignore during validation */ @@ -3082,30 +3696,30 @@ export type CheckConfiguration = { /** Operations to ignore during validation */ excludedOperations: Array; /** Graph that this check configuration belongs to */ - graphID: Scalars['ID']; + graphID: Scalars['ID']['output']; /** ID of the check configuration */ - id: Scalars['ID']; + id: Scalars['ID']['output']; /** Default configuration to include operations on the base variant. */ - includeBaseVariant: Scalars['Boolean']; + includeBaseVariant: Scalars['Boolean']['output']; /** Variant overrides for validation */ - includedVariants: Array; + includedVariants: Array; /** Minimum number of requests within the window for an operation to be considered. */ - operationCountThreshold: Scalars['Int']; + operationCountThreshold: Scalars['Int']['output']; /** * Number of requests within the window for an operation to be considered, relative to * total request count. Expected values are between 0 and 0.05 (minimum 5% of * total request volume) */ - operationCountThresholdPercentage: Scalars['Float']; + operationCountThresholdPercentage: Scalars['Float']['output']; /** How submitted build input diffs are handled when they match (or don't) a Proposal */ proposalChangeMismatchSeverity: ProposalChangeMismatchSeverity; /** * Only check operations from the last seconds. * The default is 7 days (604,800 seconds). */ - timeRangeSeconds: Scalars['Long']; + timeRangeSeconds: Scalars['Long']['output']; /** Time when check configuration was last updated */ - updatedAt: Scalars['Timestamp']; + updatedAt: Scalars['Timestamp']['output']; /** Identity of the last user to update the check configuration */ updatedBy?: Maybe; }; @@ -3113,15 +3727,15 @@ export type CheckConfiguration = { /** Filter options available when listing checks. */ export type CheckFilterInput = { /** A list of git commiters. For cli triggered checks, this is the author. */ - authors?: InputMaybe>; - branches?: InputMaybe>; + authors?: InputMaybe>; + branches?: InputMaybe>; /** A list of actors triggering this check. For non cli triggered checks, this is the Studio User / author. */ createdBy?: InputMaybe>; - ids?: InputMaybe>; - includeProposalChecks?: InputMaybe; + ids?: InputMaybe>; + includeProposalChecks?: InputMaybe; status?: InputMaybe; - subgraphs?: InputMaybe>; - variants?: InputMaybe>; + subgraphs?: InputMaybe>; + variants?: InputMaybe>; }; /** @@ -3142,7 +3756,7 @@ export type CheckPartialSchemaResult = { /** Result of compostion run as part of the overall subgraph check. */ compositionValidationResult: CompositionValidationResult; /** Whether any modifications were detected in the composed core schema. */ - coreSchemaModified: Scalars['Boolean']; + coreSchemaModified: Scalars['Boolean']['output']; /** Check workflow associated with the overall subgraph check. */ workflow?: Maybe; }; @@ -3154,9 +3768,9 @@ export type CheckRequestResult = CheckRequestSuccess | InvalidInputError | Permi export type CheckRequestSuccess = { __typename?: 'CheckRequestSuccess'; /** The URL of the Apollo Studio page for this check. */ - targetURL: Scalars['String']; + targetURL: Scalars['String']['output']; /** The unique ID for this execution of schema checks. */ - workflowID: Scalars['ID']; + workflowID: Scalars['ID']['output']; }; /** Input type to provide when running schema checks asynchronously for a non-federated graph. */ @@ -3166,12 +3780,12 @@ export type CheckSchemaAsyncInput = { /** The GitHub context to associate with the check. */ gitContext: GitContextInput; /** The URL of the GraphQL endpoint that Apollo Sandbox introspected to obtain the proposed schema. Required if `isSandbox` is `true`. */ - introspectionEndpoint?: InputMaybe; + introspectionEndpoint?: InputMaybe; /** If `true`, the check was initiated automatically by a Proposal update. */ - isProposal?: InputMaybe; + isProposal?: InputMaybe; /** If `true`, the check was initiated by Apollo Sandbox. */ - isSandbox: Scalars['Boolean']; - proposedSchemaDocument?: InputMaybe; + isSandbox: Scalars['Boolean']['input']; + proposedSchemaDocument?: InputMaybe; }; /** The result of running schema checks on a graph variant. */ @@ -3180,29 +3794,29 @@ export type CheckSchemaResult = { /** The schema diff and affected operations generated by the schema check. */ diffToPrevious: SchemaDiff; /** The unique ID of this execution of checks. */ - operationsCheckID: Scalars['ID']; + operationsCheckID: Scalars['ID']['output']; /** The URL to view the schema diff in Studio. */ - targetUrl?: Maybe; + targetUrl?: Maybe; /** Workflow associated with this check result */ workflow?: Maybe; }; export type CheckStepCompleted = { __typename?: 'CheckStepCompleted'; - id: Scalars['ID']; + id: Scalars['ID']['output']; status: CheckStepStatus; }; export type CheckStepFailed = { __typename?: 'CheckStepFailed'; - message: Scalars['String']; + message: Scalars['String']['output']; }; export type CheckStepInput = { - graphID: Scalars['String']; - graphVariant: Scalars['String']; - taskID: Scalars['ID']; - workflowID: Scalars['ID']; + graphID: Scalars['String']['input']; + graphVariant: Scalars['String']['input']; + taskID: Scalars['ID']['input']; + workflowID: Scalars['ID']['input']; }; export type CheckStepResult = CheckStepCompleted | CheckStepFailed | PermissionError | ValidationError; @@ -3212,10 +3826,47 @@ export enum CheckStepStatus { SUCCESS = 'SUCCESS' } +/** An individual diagnostic violation of a custom check task. */ +export type CheckViolation = { + __typename?: 'CheckViolation'; + /** + * The schema coordinate of this rule violation as defined by RFC: + * https://github.com/graphql/graphql-wg/blob/main/rfcs/SchemaCoordinates.md + * Optional for violations that aren't specific to a single schema element + */ + coordinate?: Maybe; + /** The violation level for the rule. */ + level: ViolationLevel; + /** A human-readable message describing the rule violation, rendered as markdown in Apollo Studio. Maximum length: 512 characters. */ + message: Scalars['String']['output']; + /** The rule being violated. This is used to group multiple violations together in Studio. Max character length is 128. */ + rule: Scalars['String']['output']; + /** The start and end position in the file of the rule violation. Used to display rule violations in the context of your schema diff. */ + sourceLocations?: Maybe>; +}; + +/** An individual diagnostic violation of a custom check task. */ +export type CheckViolationInput = { + /** + * The schema coordinate of this rule violation as defined by RFC: + * https://github.com/graphql/graphql-wg/blob/main/rfcs/SchemaCoordinates.md + * Optional for violations that aren't specific to a single schema element + */ + coordinate?: InputMaybe; + /** The violation level for the rule. */ + level: ViolationLevel; + /** A human-readable message describing the rule violation, rendered as markdown in Apollo Studio. Maximum length: 512 characters. */ + message: Scalars['String']['input']; + /** The rule being violated. This is used to group multiple violations together in Studio. Max character length is 128. */ + rule: Scalars['String']['input']; + /** The start and end position in the file of the rule violation. Used to display rule violations in the context of your schema diff. */ + sourceLocations?: InputMaybe>; +}; + export type CheckWorkflow = { __typename?: 'CheckWorkflow'; /** The supergraph schema provided as the base to check against. */ - baseSchemaHash?: Maybe; + baseSchemaHash?: Maybe; /** The base subgraphs provided as the base to check against. */ baseSubgraphs?: Maybe>; /** @@ -3226,29 +3877,29 @@ export type CheckWorkflow = { /** The build task associated with this workflow, or null if no such task was scheduled. */ buildTask?: Maybe; /** The timestamp when the check workflow completed. */ - completedAt?: Maybe; - createdAt: Scalars['Timestamp']; + completedAt?: Maybe; + createdAt: Scalars['Timestamp']['output']; /** The downstream task associated with this workflow, or null if no such task kind was scheduled. */ downstreamTask?: Maybe; /** Contextual parameters supplied by the runtime environment where the check was run. */ gitContext?: Maybe; /** The graph this check workflow belongs to. */ graph: Service; - id: Scalars['ID']; + id: Scalars['ID']['output']; /** The name of the implementing service that was responsible for triggering the validation. */ - implementingServiceName?: Maybe; + implementingServiceName?: Maybe; /** If this check is triggered for an sdl fetched using introspection, this is the endpoint where that schema was being served. */ - introspectionEndpoint?: Maybe; + introspectionEndpoint?: Maybe; /** Only true if the check was triggered from a proposal update. */ - isProposalCheck: Scalars['Boolean']; + isProposalCheck: Scalars['Boolean']['output']; /** Only true if the check was triggered from Sandbox Checks page. */ - isSandboxCheck: Scalars['Boolean']; + isSandboxCheck: Scalars['Boolean']['output']; /** The operations task associated with this workflow, or null if no such task was scheduled. */ operationsTask?: Maybe; /** If this check came from a proposal, this is the revision that triggered the check. */ proposalRevision?: Maybe; /** The proposed supergraph schema being checked by this check workflow. */ - proposedSchemaHash?: Maybe; + proposedSchemaHash?: Maybe; /** The proposed subgraphs for this check workflow. */ proposedSubgraphs?: Maybe>; /** If this check was created by rerunning, the original check workflow that was rerun. */ @@ -3256,11 +3907,11 @@ export type CheckWorkflow = { /** Checks created by re-running this check, most recent first. */ reruns?: Maybe>; /** The timestamp when the check workflow started. */ - startedAt?: Maybe; + startedAt?: Maybe; /** Overall status of the workflow, based on the underlying task statuses. */ status: CheckWorkflowStatus; /** The names of the subgraphs with changes that triggered the validation. */ - subgraphNames: Array; + subgraphNames: Array; /** The set of check tasks associated with this workflow, e.g. composition, operations, etc. */ tasks: Array; /** Identity of the user who ran this check */ @@ -3272,15 +3923,15 @@ export type CheckWorkflow = { }; -export type CheckWorkflowrerunsArgs = { - limit?: Scalars['Int']; +export type CheckWorkflowRerunsArgs = { + limit?: Scalars['Int']['input']; }; export type CheckWorkflowMutation = { __typename?: 'CheckWorkflowMutation'; /** The graph this check workflow belongs to. */ graph: Service; - id: Scalars['ID']; + id: Scalars['ID']['output']; /** * Re-run a check workflow using the current check configuration. The result is either a workflow ID that * can be used to check the status or an error message that explains what went wrong. @@ -3288,6 +3939,11 @@ export type CheckWorkflowMutation = { rerunAsync: CheckRequestResult; }; + +export type CheckWorkflowMutationRerunAsyncArgs = { + input?: InputMaybe; +}; + export enum CheckWorkflowStatus { FAILED = 'FAILED', PASSED = 'PASSED', @@ -3295,9 +3951,9 @@ export enum CheckWorkflowStatus { } export type CheckWorkflowTask = { - completedAt?: Maybe; - createdAt: Scalars['Timestamp']; - id: Scalars['ID']; + completedAt?: Maybe; + createdAt: Scalars['Timestamp']['output']; + id: Scalars['ID']['output']; /** * The status of this task. All tasks start with the PENDING status while initializing. If any * prerequisite task fails, then the task status becomes BLOCKED. Otherwise, if all prerequisite @@ -3306,7 +3962,7 @@ export type CheckWorkflowTask = { */ status: CheckWorkflowTaskStatus; /** A studio UI url to view the details of this check workflow task */ - targetURL?: Maybe; + targetURL?: Maybe; /** The workflow that this task belongs to. */ workflow: CheckWorkflow; }; @@ -3322,9 +3978,9 @@ export enum CheckWorkflowTaskStatus { export type ClientFilter = { __typename?: 'ClientFilter'; /** Name of the client is required. */ - name: Scalars['String']; + name: Scalars['String']['output']; /** Version string of the client. */ - version?: Maybe; + version?: Maybe; }; /** @@ -3333,24 +3989,24 @@ export type ClientFilter = { */ export type ClientFilterInput = { /** name of the client set by the user and reported alongside metrics */ - name: Scalars['String']; + name: Scalars['String']['input']; /** version of the client set by the user and reported alongside metrics */ - version?: InputMaybe; + version?: InputMaybe; }; /** Filter options to exclude by client reference ID, client name, and client version. */ export type ClientInfoFilter = { - name: Scalars['String']; + name: Scalars['String']['input']; /** Ignored */ - referenceID?: InputMaybe; - version?: InputMaybe; + referenceID?: InputMaybe; + version?: InputMaybe; }; /** Filter options to exclude clients. Used as an output type for SchemaDiffValidationConfig. */ export type ClientInfoFilterOutput = { __typename?: 'ClientInfoFilterOutput'; - name: Scalars['String']; - version?: Maybe; + name: Scalars['String']['output']; + version?: Maybe; }; /** Cloud queries */ @@ -3360,6 +4016,8 @@ export type Cloud = { configVersion?: Maybe; /** Return all RouterConfigVersions */ configVersions: Array; + /** Cloud Router constants */ + constants: CloudConstants; order?: Maybe; /** The regions where a cloud router can be deployed */ regions: Array; @@ -3381,96 +4039,105 @@ export type Cloud = { /** Cloud queries */ -export type CloudconfigVersionArgs = { - name: Scalars['String']; +export type CloudConfigVersionArgs = { + name: Scalars['String']['input']; }; /** Cloud queries */ -export type CloudconfigVersionsArgs = { - first?: InputMaybe; - offset?: InputMaybe; +export type CloudConfigVersionsArgs = { + first?: InputMaybe; + offset?: InputMaybe; }; /** Cloud queries */ -export type CloudorderArgs = { - orderId: Scalars['String']; +export type CloudOrderArgs = { + orderId: Scalars['String']['input']; }; /** Cloud queries */ -export type CloudregionsArgs = { +export type CloudRegionsArgs = { provider: CloudProvider; tier?: InputMaybe; }; /** Cloud queries */ -export type CloudrouterArgs = { - id: Scalars['ID']; +export type CloudRouterArgs = { + id: Scalars['ID']['input']; }; /** Cloud queries */ -export type CloudrouterByInternalIdArgs = { - internalId: Scalars['ID']; +export type CloudRouterByInternalIdArgs = { + internalId: Scalars['ID']['input']; }; /** Cloud queries */ -export type CloudroutersArgs = { - first?: InputMaybe; - offset?: InputMaybe; +export type CloudRoutersArgs = { + first?: InputMaybe; + offset?: InputMaybe; statuses?: InputMaybe>; }; /** Cloud queries */ -export type CloudshardArgs = { - id: Scalars['ID']; +export type CloudShardArgs = { + id: Scalars['ID']['input']; }; /** Cloud queries */ -export type CloudshardsArgs = { - first?: InputMaybe; - offset?: InputMaybe; +export type CloudShardsArgs = { + first?: InputMaybe; + offset?: InputMaybe; provider?: InputMaybe; tier?: InputMaybe; }; /** Cloud queries */ -export type CloudversionArgs = { - version: Scalars['String']; +export type CloudVersionArgs = { + version: Scalars['String']['input']; }; /** Cloud queries */ -export type CloudversionsArgs = { +export type CloudVersionsArgs = { input: RouterVersionsInput; }; -/** Build Pipeline Tracks */ -export enum CloudBuildPipelineTrackInput { - /** Apollo Federation 2.5 */ - FED_2_5 = 'FED_2_5', - /** Apollo Federation 2.6 */ - FED_2_6 = 'FED_2_6', - /** Apollo Federation 2.7 */ - FED_2_7 = 'FED_2_7' -} +/** Constants for Cloud Routers */ +export type CloudConstants = { + __typename?: 'CloudConstants'; + /** Minimum duration between last request and auto-deleting a Serverless Cloud Router */ + durationBeforeDeleteSecs: Scalars['Int']['output']; + /** + * Minimum duration between last request and the auto-delete warning for a Serverless + * Cloud Router + */ + durationBeforeDeleteWarningSecs: Scalars['Int']['output']; + /** Minimum duration between last request and auto-pausing a Serverless Cloud Router */ + durationBeforeSleepSecs: Scalars['Int']['output']; + /** + * Minimum duration between last request and the auto-pause warning for a Serverless + * Cloud Router + */ + durationBeforeSleepWarningSecs: Scalars['Int']['output']; +}; /** Invalid input error */ export type CloudInvalidInputError = { __typename?: 'CloudInvalidInputError'; /** Argument related to the error */ - argument: Scalars['String']; + argument: Scalars['String']['output']; /** Location of the error */ - location?: Maybe; + location?: Maybe; /** Reason for the error */ - reason: Scalars['String']; + reason: Scalars['String']['output']; }; /** Cloud mutations */ @@ -3501,69 +4168,69 @@ export type CloudMutation = { /** Cloud mutations */ -export type CloudMutationcreateConfigVersionArgs = { +export type CloudMutationCreateConfigVersionArgs = { input: RouterConfigVersionInput; }; /** Cloud mutations */ -export type CloudMutationcreateRouterArgs = { - id: Scalars['ID']; +export type CloudMutationCreateRouterArgs = { + id: Scalars['ID']['input']; input: CreateRouterInput; }; /** Cloud mutations */ -export type CloudMutationcreateShardArgs = { +export type CloudMutationCreateShardArgs = { input: CreateShardInput; }; /** Cloud mutations */ -export type CloudMutationcreateVersionArgs = { +export type CloudMutationCreateVersionArgs = { version: RouterVersionCreateInput; }; /** Cloud mutations */ -export type CloudMutationdestroyRouterArgs = { - id: Scalars['ID']; +export type CloudMutationDestroyRouterArgs = { + id: Scalars['ID']['input']; }; /** Cloud mutations */ -export type CloudMutationorderArgs = { - orderId: Scalars['String']; +export type CloudMutationOrderArgs = { + orderId: Scalars['String']['input']; }; /** Cloud mutations */ -export type CloudMutationrouterArgs = { - id: Scalars['ID']; +export type CloudMutationRouterArgs = { + id: Scalars['ID']['input']; }; /** Cloud mutations */ -export type CloudMutationupdateConfigVersionArgs = { +export type CloudMutationUpdateConfigVersionArgs = { input: RouterConfigVersionInput; }; /** Cloud mutations */ -export type CloudMutationupdateRouterArgs = { - id: Scalars['ID']; +export type CloudMutationUpdateRouterArgs = { + id: Scalars['ID']['input']; input: UpdateRouterInput; }; /** Cloud mutations */ -export type CloudMutationupdateShardArgs = { +export type CloudMutationUpdateShardArgs = { input: UpdateShardInput; }; /** Cloud mutations */ -export type CloudMutationupdateVersionArgs = { +export type CloudMutationUpdateVersionArgs = { version: RouterVersionUpdateInput; }; @@ -3571,7 +4238,7 @@ export type CloudMutationupdateVersionArgs = { export type CloudOnboarding = { __typename?: 'CloudOnboarding'; /** Graph variant reference for Cloud Onboarding */ - graphRef: Scalars['String']; + graphRef: Scalars['String']['output']; /** Cloud provider for Cloud Onboarding */ provider: CloudProvider; /** Region for Cloud Onboarding */ @@ -3583,11 +4250,11 @@ export type CloudOnboarding = { /** Input to create a new Cloud Onboarding */ export type CloudOnboardingInput = { /** graph variant name for the onboarding */ - graphRef: Scalars['String']; + graphRef: Scalars['String']['input']; /** The cloud provider */ provider: CloudProvider; /** Region for the Cloud Onboarding */ - region: Scalars['String']; + region: Scalars['String']['input']; /** Tier for the Cloud Onboarding */ tier: CloudTier; }; @@ -3600,27 +4267,92 @@ export enum CloudProvider { FLY = 'FLY' } -/** Cloud Router tiers */ -export enum CloudTier { - /** Dedicated tier */ - DEDICATED = 'DEDICATED', - /** Enterprise Cloud tier */ - ENTERPRISE = 'ENTERPRISE', - /** Serverless tier */ - SERVERLESS = 'SERVERLESS' -} +/** Generic input error */ +export type CloudRouterTestingInvalidInputErrors = { + __typename?: 'CloudRouterTestingInvalidInputErrors'; + errors: Array; + message: Scalars['String']['output']; +}; -/** Validation result */ -export type CloudValidationResult = CloudValidationSuccess | InternalServerError | InvalidInputErrors; +export type CloudRouterTestingToolPaginationInput = { + cursor?: InputMaybe; + limit?: InputMaybe; +}; -/** Config validation success */ -export type CloudValidationSuccess = { +export type CloudTesting = { + __typename?: 'CloudTesting'; + routerVersionBuild?: Maybe; + routerVersionBuilds: RouterVersionBuildPageResults; + testRouter?: Maybe; +}; + + +export type CloudTestingRouterVersionBuildArgs = { + id: Scalars['ID']['input']; +}; + + +export type CloudTestingRouterVersionBuildsArgs = { + input: RouterVersionBuildsInput; +}; + + +export type CloudTestingTestRouterArgs = { + id: Scalars['ID']['input']; +}; + +export type CloudTestingMutation = { + __typename?: 'CloudTestingMutation'; + buildRouterVersion: BuildRouterVersionResult; + cancelAllRouterVersionBuilds: Scalars['Boolean']['output']; + cancelRouterVersionBuild: Scalars['Boolean']['output']; + deleteAllRouterLaunches: Scalars['Boolean']['output']; + deleteAllRouterVersionBuilds: Scalars['Boolean']['output']; + deleteTestRouter: DeleteTestRouterResult; + launchTestRouter: LaunchTestRouterResult; +}; + + +export type CloudTestingMutationBuildRouterVersionArgs = { + input: BuildRouterVersionInput; +}; + + +export type CloudTestingMutationCancelRouterVersionBuildArgs = { + id: Scalars['ID']['input']; +}; + + +export type CloudTestingMutationDeleteTestRouterArgs = { + id: Scalars['ID']['input']; +}; + + +export type CloudTestingMutationLaunchTestRouterArgs = { + input: LaunchTestRouterInput; +}; + +/** Cloud Router tiers */ +export enum CloudTier { + /** Dedicated tier */ + DEDICATED = 'DEDICATED', + /** Enterprise Cloud tier */ + ENTERPRISE = 'ENTERPRISE', + /** Serverless tier */ + SERVERLESS = 'SERVERLESS' +} + +/** Validation result */ +export type CloudValidationResult = CloudValidationSuccess | InternalServerError | InvalidInputErrors; + +/** Config validation success */ +export type CloudValidationSuccess = { __typename?: 'CloudValidationSuccess'; - message: Scalars['String']; + message: Scalars['String']['output']; }; export type CommentFilter = { - schemaScope?: InputMaybe; + schemaScope?: InputMaybe; status?: InputMaybe>; type: Array; }; @@ -3637,11 +4369,6 @@ export enum CommentType { REVIEW = 'REVIEW' } -export type CommunicationChannel = { - id: Scalars['ID']; - name: Scalars['String']; -}; - export enum ComparisonOperator { EQUALS = 'EQUALS', GREATER_THAN = 'GREATER_THAN', @@ -3655,21 +4382,21 @@ export enum ComparisonOperator { export type ComposeAndFilterPreviewBuildResults = { __typename?: 'ComposeAndFilterPreviewBuildResults'; /** The API schema document/SDL generated from composition/filtering. */ - apiSchemaDocument: Scalars['String']; + apiSchemaDocument: Scalars['String']['output']; /** The supergraph core schema document/SDL generated from composition/filtering. */ - supergraphSchemaDocument: Scalars['String']; + supergraphSchemaDocument: Scalars['String']['output']; }; export type ComposeAndFilterPreviewComposeError = { __typename?: 'ComposeAndFilterPreviewComposeError'; /** A machine-readable error code. See https://www.apollographql.com/docs/federation/errors/for more info. */ - code?: Maybe; + code?: Maybe; /** The step at which composition failed. */ - failedStep?: Maybe; + failedStep?: Maybe; /** Source locations related to the error. */ locations?: Maybe>; /** A human-readable message describing the error. */ - message: Scalars['String']; + message: Scalars['String']['output']; }; export type ComposeAndFilterPreviewComposeFailure = { @@ -3681,9 +4408,9 @@ export type ComposeAndFilterPreviewComposeFailure = { export type ComposeAndFilterPreviewFilterError = { __typename?: 'ComposeAndFilterPreviewFilterError'; /** The step at which filtering failed. See https://www.apollographql.com/docs/studio/contracts/#contract-errors for more info. */ - failedStep?: Maybe; + failedStep?: Maybe; /** A human-readable message describing the error. */ - message: Scalars['String']; + message: Scalars['String']['output']; }; export type ComposeAndFilterPreviewFilterFailure = { @@ -3703,7 +4430,7 @@ export type ComposeAndFilterPreviewSubgraphChange = { */ info?: InputMaybe; /** The name of the subgraph being changed. */ - name: Scalars['String']; + name: Scalars['String']['input']; }; export type ComposeAndFilterPreviewSubgraphChangeInfo = { @@ -3712,13 +4439,13 @@ export type ComposeAndFilterPreviewSubgraphChangeInfo = { * field can be null to indicate the existing subgraph's info should be used; using * null otherwise results in an error. */ - routingUrl?: InputMaybe; + routingUrl?: InputMaybe; /** * The schema document/SDL of the subgraph. If a subgraph with the same name exists, * then this field can be null to indicate the existing subgraph's info should be * used; using null otherwise results in an error. */ - schemaDocument?: InputMaybe; + schemaDocument?: InputMaybe; }; export type ComposeAndFilterPreviewSuccess = { @@ -3734,17 +4461,17 @@ export type CompositionAndRemoveResult = { __typename?: 'CompositionAndRemoveResult'; /** The produced composition config. Will be null if there are any errors */ compositionConfig?: Maybe; - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; /** Whether the removed implementing service existed. */ - didExist: Scalars['Boolean']; + didExist: Scalars['Boolean']['output']; /** A list of errors that occurred during composition. Errors mean that Apollo was unable to compose the graph variant's subgraphs into a supergraph schema. If any errors are present, gateways / routers are not updated. */ errors: Array>; /** ID that points to the results of composition. */ - graphCompositionID: Scalars['String']; + graphCompositionID: Scalars['String']['output']; /** List of subgraphs that are included in this composition. */ subgraphConfigs: Array; /** Whether this composition result resulted in a new supergraph schema passed to Uplink (`true`), or the build failed for any reason (`false`). For dry runs, this value is `true` if Uplink _would have_ been updated with the result. */ - updatedGateway: Scalars['Boolean']; + updatedGateway: Scalars['Boolean']['output']; }; /** The result of supergraph composition that Studio performed in response to an attempted publish of a subgraph. */ @@ -3752,39 +4479,39 @@ export type CompositionAndUpsertResult = { __typename?: 'CompositionAndUpsertResult'; /** The generated composition config, or null if any errors occurred. */ compositionConfig?: Maybe; - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; /** A list of errors that occurred during composition. Errors mean that Apollo was unable to compose the graph variant's subgraphs into a supergraph schema. If any errors are present, gateways / routers are not updated. */ errors: Array>; /** ID that points to the results of composition. */ - graphCompositionID: Scalars['String']; + graphCompositionID: Scalars['String']['output']; /** The Launch result part of this subgraph publish. */ launch?: Maybe; /** Human-readable text describing the launch result of the subgraph publish. */ - launchCliCopy?: Maybe; + launchCliCopy?: Maybe; /** The URL of the Studio page for this update's associated launch, if available. */ - launchUrl?: Maybe; + launchUrl?: Maybe; /** List of subgraphs that are included in this composition. */ subgraphConfigs: Array; /** All subgraphs that were created from this mutation */ - subgraphsCreated: Array; + subgraphsCreated: Array; /** All subgraphs that were updated from this mutation */ - subgraphsUpdated: Array; + subgraphsUpdated: Array; /** Whether this composition result resulted in a new supergraph schema passed to Uplink (`true`), or the build failed for any reason (`false`). For dry runs, this value is `true` if Uplink _would have_ been updated with the result. */ - updatedGateway: Scalars['Boolean']; + updatedGateway: Scalars['Boolean']['output']; /** Whether a new subgraph was created as part of this publish. */ - wasCreated: Scalars['Boolean']; + wasCreated: Scalars['Boolean']['output']; /** Whether an implementingService was updated as part of this mutation */ - wasUpdated: Scalars['Boolean']; + wasUpdated: Scalars['Boolean']['output']; }; export type CompositionBuildCheckFailed = BuildCheckFailed & BuildCheckResult & CompositionBuildCheckResult & { __typename?: 'CompositionBuildCheckFailed'; buildInputs: CompositionBuildInputs; buildPipelineTrack: BuildPipelineTrack; - compositionPackageVersion?: Maybe; + compositionPackageVersion?: Maybe; errors: Array; - id: Scalars['ID']; - passed: Scalars['Boolean']; + id: Scalars['ID']['output']; + passed: Scalars['Boolean']['output']; workflowTask: CompositionCheckTask; }; @@ -3792,10 +4519,10 @@ export type CompositionBuildCheckPassed = BuildCheckPassed & BuildCheckResult & __typename?: 'CompositionBuildCheckPassed'; buildInputs: CompositionBuildInputs; buildPipelineTrack: BuildPipelineTrack; - compositionPackageVersion?: Maybe; - id: Scalars['ID']; - passed: Scalars['Boolean']; - supergraphSchemaHash: Scalars['SHA256']; + compositionPackageVersion?: Maybe; + id: Scalars['ID']['output']; + passed: Scalars['Boolean']['output']; + supergraphSchemaHash: Scalars['SHA256']['output']; workflowTask: CompositionCheckTask; }; @@ -3803,26 +4530,26 @@ export type CompositionBuildCheckResult = { buildInputs: CompositionBuildInputs; buildPipelineTrack: BuildPipelineTrack; /** The version of the OSS apollo composition package used during build */ - compositionPackageVersion?: Maybe; - id: Scalars['ID']; - passed: Scalars['Boolean']; + compositionPackageVersion?: Maybe; + id: Scalars['ID']['output']; + passed: Scalars['Boolean']['output']; workflowTask: CompositionCheckTask; }; export type CompositionBuildInput = { __typename?: 'CompositionBuildInput'; subgraphs: Array; - version?: Maybe; + version?: Maybe; }; export type CompositionBuildInputSubgraph = { __typename?: 'CompositionBuildInputSubgraph'; /** The name of the subgraph. */ - name: Scalars['String']; + name: Scalars['String']['output']; /** The routing URL of the subgraph. */ - routingUrl: Scalars['String']; + routingUrl: Scalars['String']['output']; /** The SHA-256 of the schema document of the subgraph. */ - schemaHash: Scalars['SHA256']; + schemaHash: Scalars['SHA256']['output']; }; export type CompositionBuildInputs = { @@ -3840,16 +4567,16 @@ export type CompositionCheckTask = BuildCheckTask & CheckWorkflowTask & { __typename?: 'CompositionCheckTask'; /** The result of the composition build check. This will be null when the task is initializing or running. */ buildResult?: Maybe; - completedAt?: Maybe; + completedAt?: Maybe; /** * Whether the build's output supergraph core schema differs from that of the active publish for * the workflow's variant at the time this field executed (NOT at the time the check workflow * started). */ - coreSchemaModified: Scalars['Boolean']; - createdAt: Scalars['Timestamp']; - graphID: Scalars['ID']; - id: Scalars['ID']; + coreSchemaModified: Scalars['Boolean']['output']; + createdAt: Scalars['Timestamp']['output']; + graphID: Scalars['ID']['output']; + id: Scalars['ID']['output']; proposedBuildInputChanges: ProposedCompositionBuildInputChanges; /** * An old version of buildResult that returns a very old GraphQL type that generally should be @@ -3857,7 +4584,7 @@ export type CompositionCheckTask = BuildCheckTask & CheckWorkflowTask & { */ result?: Maybe; status: CheckWorkflowTaskStatus; - targetURL?: Maybe; + targetURL?: Maybe; workflow: CheckWorkflow; }; @@ -3870,7 +4597,7 @@ export type CompositionConfig = { */ implementingServiceLocations: Array; /** The resulting API schema's SHA256 hash, represented as a hexadecimal string. */ - schemaHash: Scalars['String']; + schemaHash: Scalars['String']['output']; }; export type CompositionConfigInput = { @@ -3882,78 +4609,78 @@ export type CompositionPublishResult = CompositionResult & { __typename?: 'CompositionPublishResult'; /** The generated composition config, or null if any errors occurred. */ compositionConfig?: Maybe; - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; /** A list of errors that occurred during composition. Errors mean that Apollo was unable to compose the graph variant's subgraphs into a supergraph schema. If any errors are present, gateways / routers are not updated. */ errors: Array; /** The unique ID for this instance of composition. */ - graphCompositionID: Scalars['ID']; - graphID: Scalars['ID']; + graphCompositionID: Scalars['ID']['output']; + graphID: Scalars['ID']['output']; /** Null if CompositionPublishResult was not on a Proposal Variant */ proposalRevision?: Maybe; /** * Cloud router configuration associated with this build event. * It will be non-null for any cloud-router variant, and null for any not cloudy variant/graph */ - routerConfig?: Maybe; + routerConfig?: Maybe; /** List of subgraphs that are included in this composition. */ subgraphConfigs: Array; /** The supergraph SDL generated by composition. */ - supergraphSdl?: Maybe; + supergraphSdl?: Maybe; /** Whether this composition result updated gateway/router instances via Uplink (`true`), or it was a dry run (`false`). */ - updatedGateway: Scalars['Boolean']; + updatedGateway: Scalars['Boolean']['output']; }; /** The result of supergraph composition performed by Apollo Studio, often as the result of a subgraph check or subgraph publish. See individual implementations for more details. */ export type CompositionResult = { - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; /** A list of errors that occurred during composition. Errors mean that Apollo was unable to compose the graph variant's subgraphs into a supergraph schema. If any errors are present, gateways / routers are not updated. */ errors: Array; /** The unique ID for this instance of composition. */ - graphCompositionID: Scalars['ID']; + graphCompositionID: Scalars['ID']['output']; /** * Cloud router configuration associated with this build event. * It will be non-null for any cloud-router variant, and null for any not cloudy variant/graph */ - routerConfig?: Maybe; + routerConfig?: Maybe; /** List of subgraphs included in this composition. */ subgraphConfigs: Array; /** Supergraph SDL generated by composition. */ - supergraphSdl?: Maybe; + supergraphSdl?: Maybe; }; export type CompositionStatusSubscription = ChannelSubscription & { __typename?: 'CompositionStatusSubscription'; channels: Array; - createdAt: Scalars['Timestamp']; - enabled: Scalars['Boolean']; - id: Scalars['ID']; - lastUpdatedAt: Scalars['Timestamp']; - variant?: Maybe; + createdAt: Scalars['Timestamp']['output']; + enabled: Scalars['Boolean']['output']; + id: Scalars['ID']['output']; + lastUpdatedAt: Scalars['Timestamp']['output']; + variant?: Maybe; }; /** The composition config exposed to the gateway */ export type CompositionValidationDetails = { __typename?: 'CompositionValidationDetails'; /** Hash of the composed schema */ - schemaHash?: Maybe; + schemaHash?: Maybe; }; /** The result of composition validation run by Apollo Studio during a subgraph check. */ export type CompositionValidationResult = CompositionResult & { __typename?: 'CompositionValidationResult'; /** Describes whether composition succeeded. */ - compositionSuccess: Scalars['Boolean']; + compositionSuccess: Scalars['Boolean']['output']; /** * Akin to a composition config, represents the subgraph schemas and corresponding subgraphs that were used * in running composition. Will be null if any errors are encountered. Also may contain a schema hash if * one could be computed, which can be used for schema validation. */ compositionValidationDetails?: Maybe; - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; /** A list of errors that occurred during composition. Errors mean that Apollo was unable to compose the graph variant's subgraphs into a supergraph schema. If any errors are present, gateways / routers are not updated. */ errors: Array; /** The unique ID for this instance of composition. */ - graphCompositionID: Scalars['ID']; + graphCompositionID: Scalars['ID']['output']; /** * The implementing service that was responsible for triggering the validation * @deprecated The proposed subgraph is now exposed under proposedSubgraphs, a list. If a single subgraph check was run the list will be one subgraph long. @@ -3965,17 +4692,17 @@ export type CompositionValidationResult = CompositionResult & { * Cloud router configuration associated with this build event. * It will be non-null for any cloud-router variant, and null for any not cloudy variant/graph */ - routerConfig?: Maybe; + routerConfig?: Maybe; /** List of subgraphs that are included in this composition. */ subgraphConfigs: Array; /** The supergraph schema document generated by composition. */ - supergraphSdl?: Maybe; + supergraphSdl?: Maybe; /** If created as part of a check workflow, the associated workflow task. */ workflowTask?: Maybe; }; export type ContractConfigInput = { - baseGraphRef: Scalars['String']; + baseGraphRef: Scalars['String']['input']; filterConfigInput: FilterConfigInput; }; @@ -3987,7 +4714,7 @@ export type ContractPreview = { export type ContractPreviewErrors = { __typename?: 'ContractPreviewErrors'; - errors: Array; + errors: Array; failedAt: ContractVariantFailedStep; }; @@ -3995,10 +4722,10 @@ export type ContractPreviewResult = ContractPreviewErrors | ContractPreviewSucce export type ContractPreviewSuccess = { __typename?: 'ContractPreviewSuccess'; - apiDocument: Scalars['String']; - coreDocument: Scalars['String']; - fieldCount: Scalars['Int']; - typeCount: Scalars['Int']; + apiDocument: Scalars['String']['output']; + coreDocument: Scalars['String']['output']; + fieldCount: Scalars['Int']['output']; + typeCount: Scalars['Int']['output']; }; export enum ContractVariantFailedStep { @@ -4027,7 +4754,7 @@ export enum ContractVariantFailedStep { export type ContractVariantUpsertErrors = { __typename?: 'ContractVariantUpsertErrors'; /** A list of all errors that occurred when attempting to create or update a contract variant. */ - errorMessages: Array; + errorMessages: Array; }; export type ContractVariantUpsertResult = ContractVariantUpsertErrors | ContractVariantUpsertSuccess; @@ -4037,52 +4764,233 @@ export type ContractVariantUpsertSuccess = { /** The updated contract variant */ contractVariant: GraphVariant; /** Human-readable text describing the launch result of the contract update. */ - launchCliCopy?: Maybe; + launchCliCopy?: Maybe; /** The URL of the Studio page for this update's associated launch, if available. */ - launchUrl?: Maybe; + launchUrl?: Maybe; }; export type Coordinate = { __typename?: 'Coordinate'; - byteOffset: Scalars['Int']; - column: Scalars['Int']; - line: Scalars['Int']; + byteOffset: Scalars['Int']['output']; + column: Scalars['Int']['output']; + line: Scalars['Int']['output']; +}; + +export type CoordinateInsights = { + __typename?: 'CoordinateInsights'; + /** If the first or last seen timestamps are earlier than this timestamp, we can't tell the exact date that we saw this coordinate since our data is bound by the retention period. */ + earliestRetentionTime?: Maybe; + /** The earliest time we saw references or executions for this coordinate. Null if the coordinate has never been seen or it is not in the schema. */ + firstSeen?: Maybe; + /** The most recent time we saw references or executions for this coordinate. Null if the coordinate has never been seen or it is not in the schema. */ + lastSeen?: Maybe; +}; + +export type CoordinateInsightsListFilterInInput = { + clientName?: InputMaybe>>; + clientVersion?: InputMaybe>>; +}; + +export type CoordinateInsightsListFilterInput = { + clientName?: InputMaybe; + clientVersion?: InputMaybe; + coordinateKind?: InputMaybe; + in?: InputMaybe; + isDeprecated?: InputMaybe; + isUnused?: InputMaybe; + or?: InputMaybe>; + /** Filters on partial string matches of Named Type and Named Attribute */ + search?: InputMaybe; +}; + +export type CoordinateInsightsListItem = { + __typename?: 'CoordinateInsightsListItem'; + /** The estimated number of field executions for this field, based on the field execution sample rate. This can be null depending on the sort order. */ + estimatedExecutionCount?: Maybe; + /** The number of field executions recorded for this field. This can be null depending on the sort order. */ + executionCount?: Maybe; + isDeprecated: Scalars['Boolean']['output']; + isUnused: Scalars['Boolean']['output']; + namedAttribute: Scalars['String']['output']; + namedType: Scalars['String']['output']; + /** The count of operations that reference the coordinate. This can be null depending on the sort order. */ + referencingOperationCount?: Maybe; + /** The count of operations that reference the coordinate per minute. This can be null depending on the sort order. */ + referencingOperationCountPerMin?: Maybe; +}; + +export enum CoordinateInsightsListOrderByColumn { + ESTIMATED_EXECUTION_COUNT = 'ESTIMATED_EXECUTION_COUNT', + EXECUTION_COUNT = 'EXECUTION_COUNT', + REFERENCING_OPERATION_COUNT = 'REFERENCING_OPERATION_COUNT', + REFERENCING_OPERATION_COUNT_PER_MIN = 'REFERENCING_OPERATION_COUNT_PER_MIN', + SCHEMA_COORDINATE = 'SCHEMA_COORDINATE' +} + +export type CoordinateInsightsListOrderByInput = { + column: CoordinateInsightsListOrderByColumn; + direction: Ordering; +}; + +/** Information about pagination in a connection. */ +export type CoordinateInsightsListPageInfo = { + __typename?: 'CoordinateInsightsListPageInfo'; + /** When paginating forwards, the cursor to continue. */ + endCursor?: Maybe; + /** When paginating backwards, the cursor to continue. */ + startCursor?: Maybe; +}; + +export enum CoordinateKind { + ENUM_VALUE = 'ENUM_VALUE', + INPUT_OBJECT_FIELD = 'INPUT_OBJECT_FIELD', + OBJECT_FIELD = 'OBJECT_FIELD' +} + +/** Columns of CoordinateUsage. */ +export enum CoordinateUsageColumn { + CLIENT_NAME = 'CLIENT_NAME', + CLIENT_VERSION = 'CLIENT_VERSION', + ESTIMATED_EXECUTION_COUNT = 'ESTIMATED_EXECUTION_COUNT', + EXECUTION_COUNT = 'EXECUTION_COUNT', + KIND = 'KIND', + NAMED_ATTRIBUTE = 'NAMED_ATTRIBUTE', + NAMED_TYPE = 'NAMED_TYPE', + OPERATION_SUBTYPE = 'OPERATION_SUBTYPE', + OPERATION_TYPE = 'OPERATION_TYPE', + QUERY_ID = 'QUERY_ID', + QUERY_NAME = 'QUERY_NAME', + REFERENCING_OPERATION_COUNT = 'REFERENCING_OPERATION_COUNT', + REQUEST_COUNT_NULL = 'REQUEST_COUNT_NULL', + REQUEST_COUNT_UNDEFINED = 'REQUEST_COUNT_UNDEFINED', + SCHEMA_TAG = 'SCHEMA_TAG', + SERVICE_ID = 'SERVICE_ID', + TIMESTAMP = 'TIMESTAMP' +} + +export type CoordinateUsageDimensions = { + __typename?: 'CoordinateUsageDimensions'; + clientName?: Maybe; + clientVersion?: Maybe; + kind?: Maybe; + namedAttribute?: Maybe; + namedType?: Maybe; + operationSubtype?: Maybe; + operationType?: Maybe; + queryId?: Maybe; + queryName?: Maybe; + schemaTag?: Maybe; + serviceId?: Maybe; +}; + +/** Filter for data in CoordinateUsage. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ +export type CoordinateUsageFilter = { + and?: InputMaybe>; + /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */ + clientName?: InputMaybe; + /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */ + clientVersion?: InputMaybe; + in?: InputMaybe; + /** Selects rows whose kind dimension equals the given value if not null. To query for the null value, use {in: {kind: [null]}} instead. */ + kind?: InputMaybe; + /** Selects rows whose namedAttribute dimension equals the given value if not null. To query for the null value, use {in: {namedAttribute: [null]}} instead. */ + namedAttribute?: InputMaybe; + /** Selects rows whose namedType dimension equals the given value if not null. To query for the null value, use {in: {namedType: [null]}} instead. */ + namedType?: InputMaybe; + not?: InputMaybe; + /** Selects rows whose operationSubtype dimension equals the given value if not null. To query for the null value, use {in: {operationSubtype: [null]}} instead. */ + operationSubtype?: InputMaybe; + /** Selects rows whose operationType dimension equals the given value if not null. To query for the null value, use {in: {operationType: [null]}} instead. */ + operationType?: InputMaybe; + or?: InputMaybe>; + /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */ + queryId?: InputMaybe; + /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */ + queryName?: InputMaybe; + /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ + schemaTag?: InputMaybe; + /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */ + serviceId?: InputMaybe; +}; + +/** Filter for data in CoordinateUsage. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ +export type CoordinateUsageFilterIn = { + /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */ + clientName?: InputMaybe>>; + /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ + clientVersion?: InputMaybe>>; + /** Selects rows whose kind dimension is in the given list. A null value in the list means a row with null for that dimension. */ + kind?: InputMaybe>>; + /** Selects rows whose namedAttribute dimension is in the given list. A null value in the list means a row with null for that dimension. */ + namedAttribute?: InputMaybe>>; + /** Selects rows whose namedType dimension is in the given list. A null value in the list means a row with null for that dimension. */ + namedType?: InputMaybe>>; + /** Selects rows whose operationSubtype dimension is in the given list. A null value in the list means a row with null for that dimension. */ + operationSubtype?: InputMaybe>>; + /** Selects rows whose operationType dimension is in the given list. A null value in the list means a row with null for that dimension. */ + operationType?: InputMaybe>>; + /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */ + queryId?: InputMaybe>>; + /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */ + queryName?: InputMaybe>>; + /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ + schemaTag?: InputMaybe>>; + /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ + serviceId?: InputMaybe>>; +}; + +export type CoordinateUsageMetrics = { + __typename?: 'CoordinateUsageMetrics'; + estimatedExecutionCount: Scalars['Long']['output']; + executionCount: Scalars['Long']['output']; + referencingOperationCount: Scalars['Long']['output']; + requestCountNull: Scalars['Long']['output']; + requestCountUndefined: Scalars['Long']['output']; +}; + +export type CoordinateUsageOrderBySpec = { + column: CoordinateUsageColumn; + direction: Ordering; +}; + +export type CoordinateUsageRecord = { + __typename?: 'CoordinateUsageRecord'; + /** Dimensions of CoordinateUsage that can be grouped by. */ + groupBy: CoordinateUsageDimensions; + /** Metrics of CoordinateUsage that can be aggregated over. */ + metrics: CoordinateUsageMetrics; + /** Starting segment timestamp. */ + timestamp: Scalars['Timestamp']['output']; }; /** Contains the supergraph and API schemas generated by composition. */ export type CoreSchema = { __typename?: 'CoreSchema'; /** The composed API schema document. */ - apiDocument: Scalars['GraphQLDocument']; + apiDocument: Scalars['GraphQLDocument']['output']; + /** The API schema document's SHA256 hash, represented as a hexadecimal string. */ + apiHash: Scalars['String']['output']; /** The composed supergraph schema document. */ - coreDocument: Scalars['GraphQLDocument']; + coreDocument: Scalars['GraphQLDocument']['output']; /** The supergraph schema document's SHA256 hash, represented as a hexadecimal string. */ - coreHash: Scalars['String']; - fieldCount: Scalars['Int']; - tags: Array; - typeCount: Scalars['Int']; + coreHash: Scalars['String']['output']; + fieldCount: Scalars['Int']['output']; + tags: Array; + typeCount: Scalars['Int']['output']; }; /** Input to create a new AWS shard */ export type CreateAwsShardInput = { - accountId: Scalars['String']; - coldStartTargetGroupArns?: InputMaybe>; - ecsClusterArn: Scalars['String']; - iamRoleArn: Scalars['String']; - loadbalancerSecurityGroupId: Scalars['String']; + accountId: Scalars['String']['input']; + coldStartTargetGroupArns?: InputMaybe>; + ecsClusterArn: Scalars['String']['input']; + iamRoleArn: Scalars['String']['input']; + loadbalancerSecurityGroupId: Scalars['String']['input']; loadbalancers: Array; - permissionsBoundaryArn: Scalars['String']; - region: Scalars['String']; - subnetIds: Array; - vpcId: Scalars['String']; -}; - -/** Input to create a new Fly shard */ -export type CreateFlyShardInput = { - endpoint: Scalars['String']; - etcdEndpoints: Array; - organizationId: Scalars['String']; - region: Scalars['String']; + permissionsBoundaryArn: Scalars['String']['input']; + region: Scalars['String']['input']; + subnetIds: Array; + vpcId: Scalars['String']['input']; }; /** Result from the createCloudOnboarding mutation */ @@ -4094,28 +5002,37 @@ export type CreateOnboardingSuccess = { onboarding: CloudOnboarding; }; -export type CreateOperationCollectionResult = OperationCollection | PermissionError | ValidationError; +export type CreateOperationCollectionResult = NotFoundError | OperationCollection | PermissionError | ValidationError; +/** The result of a successful call to GraphMutation.createPersistedQueryList. */ export type CreatePersistedQueryListResult = { __typename?: 'CreatePersistedQueryListResult'; persistedQueryList: PersistedQueryList; }; +/** The result/error union returned by GraphMutation.createPersistedQueryList. */ export type CreatePersistedQueryListResultOrError = CreatePersistedQueryListResult | PermissionError; /** An error that occurs when creating a proposal fails. */ export type CreateProposalError = Error & { __typename?: 'CreateProposalError'; /** The error's details. */ - message: Scalars['String']; + message: Scalars['String']['output']; }; export type CreateProposalInput = { - description?: InputMaybe; - displayName: Scalars['String']; - sourceVariantName: Scalars['String']; + description?: InputMaybe; + displayName: Scalars['String']['input']; + sourceVariantName: Scalars['String']['input']; +}; + +export type CreateProposalLifecycleSubscriptionInput = { + events: Array; + webhookChannelID: Scalars['ID']['input']; }; +export type CreateProposalLifecycleSubscriptionResult = PermissionError | ProposalLifecycleSubscription | ValidationError; + export type CreateProposalResult = CreateProposalError | GraphVariant | PermissionError | ValidationError; /** Input to create a new Cloud Router */ @@ -4125,15 +5042,15 @@ export type CreateRouterInput = { * * This is ignored for serverless Cloud Routers */ - gcus?: InputMaybe; + gcus?: InputMaybe; /** Graph composition ID, also known as launch ID */ - graphCompositionId?: InputMaybe; + graphCompositionId?: InputMaybe; /** Unique identifier for ordering orders */ - orderingId: Scalars['String']; + orderingId: Scalars['String']['input']; /** Configuration for the Cloud Router */ - routerConfig?: InputMaybe; + routerConfig?: InputMaybe; /** Router version for the Cloud Router */ - routerVersion?: InputMaybe; + routerVersion?: InputMaybe; }; /** Represents the possible outcomes of a createRouter mutation */ @@ -4152,71 +5069,112 @@ export type CreateRouterSuccess = { }; /** Result of a createVersion mutation */ -export type CreateRouterVersionResult = CloudInvalidInputError | InternalServerError | RouterVersion; +export type CreateRouterVersionResult = InternalServerError | InvalidInputErrors | RouterVersion; + +export type CreateRuleEnforcementInput = { + graphVariant?: InputMaybe; + params?: InputMaybe>; + policy: EnforcementPolicy; +}; /** Input to create a new Shard */ export type CreateShardInput = { aws?: InputMaybe; - fly?: InputMaybe; - gcuCapacity?: InputMaybe; - gcuUsage?: InputMaybe; + gcuCapacity?: InputMaybe; + gcuUsage?: InputMaybe; provider: CloudProvider; - reason?: InputMaybe; - routerCapacity?: InputMaybe; - routerUsage?: InputMaybe; - shardId: Scalars['String']; + reason?: InputMaybe; + routerCapacity?: InputMaybe; + routerUsage?: InputMaybe; + shardId: Scalars['String']['input']; status?: InputMaybe; tier: CloudTier; }; export type CronExecution = { __typename?: 'CronExecution'; - completedAt?: Maybe; - failure?: Maybe; - id: Scalars['ID']; + completedAt?: Maybe; + failure?: Maybe; + id: Scalars['ID']['output']; job: CronJob; - resolvedAt?: Maybe; + resolvedAt?: Maybe; resolvedBy?: Maybe; - schedule: Scalars['String']; - startedAt: Scalars['Timestamp']; + schedule: Scalars['String']['output']; + startedAt: Scalars['Timestamp']['output']; }; export type CronJob = { __typename?: 'CronJob'; - group: Scalars['String']; - name: Scalars['String']; + group: Scalars['String']['output']; + name: Scalars['String']['output']; recentExecutions: Array; }; -export type CronJobrecentExecutionsArgs = { - n?: InputMaybe; +export type CronJobRecentExecutionsArgs = { + n?: InputMaybe; }; -export type CustomerAccount = { - __typename?: 'CustomerAccount'; - id: Scalars['ID']; - name: Scalars['String']; - next?: Maybe; - studioOrgId: Scalars['ID']; - traits: AccountCustomerTraits; +export type CustomCheckCallbackInput = { + /** Sets the status of your check task. Setting this status to FAILURE will cause the entire check workflow to fail. */ + status: CheckStepStatus; + /** The ID of the custom check task, provided in the webhook payload. */ + taskId: Scalars['ID']['input']; + /** The violations found by your check task. Max length is 1000 */ + violations?: InputMaybe>; + /** The ID of the workflow that the custom check task is a member of, provided in the webhook payload. */ + workflowId: Scalars['ID']['input']; }; -export type CustomerOrg = { - __typename?: 'CustomerOrg'; - accounts: Array; - externalSlackChannelId?: Maybe; - id: Scalars['ID']; - internalSlackChannelId?: Maybe; - name: Scalars['String']; - next?: Maybe; - sfdcId: Scalars['ID']; - traits: OrgCustomerTraits; +/** Result of a custom check task callback mutation. */ +export type CustomCheckCallbackResult = CustomCheckResult | PermissionError | TaskError | ValidationError; + +/** Custom check configuration detailing webhook integration. */ +export type CustomCheckConfiguration = { + __typename?: 'CustomCheckConfiguration'; + channel: CustomCheckWebhookChannel; + id: Scalars['ID']['output']; }; -export type CustomerSupportSlackError = { - __typename?: 'CustomerSupportSlackError'; - message: Scalars['String']; +/** Result of a custom check configuration update mutation. */ +export type CustomCheckConfigurationResult = CustomCheckConfiguration | PermissionError | ValidationError; + +export type CustomCheckResult = { + __typename?: 'CustomCheckResult'; + violations: Array; +}; + +export type CustomCheckTask = CheckWorkflowTask & { + __typename?: 'CustomCheckTask'; + completedAt?: Maybe; + createdAt: Scalars['Timestamp']['output']; + graphID: Scalars['ID']['output']; + id: Scalars['ID']['output']; + result?: Maybe; + status: CheckWorkflowTaskStatus; + targetURL?: Maybe; + workflow: CheckWorkflow; +}; + +/** Configuration of a webhook integration for a custom check. */ +export type CustomCheckWebhookChannel = { + __typename?: 'CustomCheckWebhookChannel'; + /** The time when this CustomCheckWebhookChannel was created. */ + createdAt: Scalars['Timestamp']['output']; + /** The Identity that created this CustomCheckWebhookChannel. null if the Identity has been deleted. */ + createdBy?: Maybe; + /** The ID for this webhook channel */ + id: Scalars['ID']['output']; + /** The last time this subscription was updated, if never updated will be the createdAt time. */ + lastUpdatedAt: Scalars['Timestamp']['output']; + /** The Identity that last updated this CustomCheckWebhookChannel, or the creator if no one has updated. null if the Identity has been deleted. */ + lastUpdatedBy?: Maybe; + /** Whether or not a secret token has been set on this channel. */ + secretTokenIsSet: Scalars['Boolean']['output']; + /** The URL to send the webhook to. */ + url: Scalars['String']['output']; + /** The variant name if this channel is only configured for a specific variant. If null, this configuration applies to all variants. */ + variant?: Maybe; }; export enum DatadogApiRegion { @@ -4231,14 +5189,14 @@ export enum DatadogApiRegion { export type DatadogMetricsConfig = { __typename?: 'DatadogMetricsConfig'; - apiKey: Scalars['String']; + apiKey: Scalars['String']['output']; apiRegion: DatadogApiRegion; - enabled: Scalars['Boolean']; - legacyMetricNames: Scalars['Boolean']; + enabled: Scalars['Boolean']['output']; + legacyMetricNames: Scalars['Boolean']['output']; }; export type DeleteCommentInput = { - id: Scalars['String']; + id: Scalars['String']['input']; }; export type DeleteCommentResult = DeleteCommentSuccess | NotFoundError | PermissionError | ValidationError; @@ -4258,17 +5216,43 @@ export type DeleteOperationCollectionSuccess = { variants: Array; }; +/** The result of a successful call to PersistedQueryListMutation.deleteOperationsByFilter. */ +export type DeleteOperationsByFilterResult = { + __typename?: 'DeleteOperationsByFilterResult'; + /** The build created by this delete operation. */ + build?: Maybe; + /** Returns `true` if no changes were made by this operation (and no new revision was created). Otherwise, returns `false`. */ + unchanged: Scalars['Boolean']['output']; +}; + +/** The result/error union returned by PersistedQueryListMutation.deleteOperationsByFilter. */ +export type DeleteOperationsByFilterResultOrError = DeleteOperationsByFilterResult | PermissionError; + +/** The result of a successful call to PersistedQueryListMutation.delete. */ export type DeletePersistedQueryListResult = { __typename?: 'DeletePersistedQueryListResult'; graph: Service; }; +/** The result/error union returned by PersistedQueryListMutation.delete. */ export type DeletePersistedQueryListResultOrError = CannotDeleteLinkedPersistedQueryListError | DeletePersistedQueryListResult | PermissionError; +export type DeleteProposalLifecycleSubscriptionInput = { + id: Scalars['String']['input']; +}; + +export type DeleteProposalLifecycleSubscriptionResult = DeleteProposalLifecycleSubscriptionSuccess | NotFoundError | PermissionError; + +export type DeleteProposalLifecycleSubscriptionSuccess = { + __typename?: 'DeleteProposalLifecycleSubscriptionSuccess'; + /** The id of the ProposalLifecycleSubscription that was deleted */ + id: Scalars['ID']['output']; +}; + export type DeleteProposalSubgraphInput = { - previousLaunchId?: InputMaybe; - subgraphName: Scalars['String']; - summary: Scalars['String']; + previousLaunchId?: InputMaybe; + subgraphName: Scalars['String']['input']; + summary: Scalars['String']['input']; }; export type DeleteProposalSubgraphResult = PermissionError | Proposal | ValidationError; @@ -4277,7 +5261,14 @@ export type DeleteProposalSubgraphResult = PermissionError | Proposal | Validati export type DeleteSchemaTagResult = { __typename?: 'DeleteSchemaTagResult'; /** Whether the variant was deleted or not. */ - deleted: Scalars['Boolean']; + deleted: Scalars['Boolean']['output']; +}; + +export type DeleteTestRouterResult = CloudRouterTestingInvalidInputErrors | DeleteTestRouterSuccess; + +export type DeleteTestRouterSuccess = { + __typename?: 'DeleteTestRouterSuccess'; + jobId: Scalars['String']['output']; }; export enum DeletionTargetType { @@ -4304,20 +5295,20 @@ export type DestroyRouterSuccess = { export type DirectiveSupportStatus = { __typename?: 'DirectiveSupportStatus'; /** whether the directive is supported on the current graph variant */ - enabled: Scalars['Boolean']; + enabled: Scalars['Boolean']['output']; /** name of the directive */ - name: Scalars['String']; + name: Scalars['String']['output']; }; /** The result of a schema checks workflow that was run on a downstream variant as part of checks for the corresponding source variant. Most commonly, these downstream checks are [contract checks](https://www.apollographql.com/docs/studio/contracts#contract-checks). */ export type DownstreamCheckResult = { __typename?: 'DownstreamCheckResult'; /** Whether the downstream check workflow blocks the upstream check workflow from completing. */ - blocking: Scalars['Boolean']; + blocking: Scalars['Boolean']['output']; /** The ID of the graph that the downstream variant belongs to. */ - downstreamGraphID: Scalars['String']; + downstreamGraphID: Scalars['String']['output']; /** The name of the downstream variant. */ - downstreamVariantName: Scalars['String']; + downstreamVariantName: Scalars['String']['output']; /** * The downstream checks workflow that this result corresponds to. This value is null * if the workflow hasn't been initialized yet, or if the downstream variant was deleted. @@ -4328,16 +5319,16 @@ export type DownstreamCheckResult = { * when the downstream check workflow is both blocking and failing. This may be null while the * downstream check workflow is pending. */ - failsUpstreamWorkflow?: Maybe; + failsUpstreamWorkflow?: Maybe; /** The downstream checks task that this result corresponds to. */ workflowTask: DownstreamCheckTask; }; export type DownstreamCheckTask = CheckWorkflowTask & { __typename?: 'DownstreamCheckTask'; - completedAt?: Maybe; - createdAt: Scalars['Timestamp']; - id: Scalars['ID']; + completedAt?: Maybe; + createdAt: Scalars['Timestamp']['output']; + id: Scalars['ID']['output']; /** * A list of results for all downstream checks triggered as part of the source variant's checks workflow. * This value is null if the task hasn't been initialized yet, or if the build task fails (the build task is a @@ -4346,7 +5337,7 @@ export type DownstreamCheckTask = CheckWorkflowTask & { */ results?: Maybe>; status: CheckWorkflowTaskStatus; - targetURL?: Maybe; + targetURL?: Maybe; workflow: CheckWorkflow; }; @@ -4367,61 +5358,74 @@ export enum DownstreamLaunchInitiation { export type DraftInvoice = { __typename?: 'DraftInvoice'; - billingPeriodEndsAt: Scalars['Timestamp']; - billingPeriodStartsAt: Scalars['Timestamp']; - /** The approximate date in the future we expect the customer to be billed if they fully complete the billing cycle */ - expectedInvoiceAt: Scalars['Timestamp']; - /** When this invoice was sent to the customer, if it's been sent */ - invoicedAt?: Maybe; - /** Breakdown of this invoice's charges. May be empty if we don't have a breakdown */ + /** @deprecated This data came from Metronome and we no longer use Metronome */ + billingPeriodEndsAt: Scalars['Timestamp']['output']; + /** @deprecated This data came from Metronome and we no longer use Metronome */ + billingPeriodStartsAt: Scalars['Timestamp']['output']; + /** + * The approximate date in the future we expect the customer to be billed if they fully complete the billing cycle + * @deprecated This data came from Metronome and we no longer use Metronome + */ + expectedInvoiceAt: Scalars['Timestamp']['output']; + /** + * When this invoice was sent to the customer, if it's been sent + * @deprecated This data came from Metronome and we no longer use Metronome + */ + invoicedAt?: Maybe; + /** + * Breakdown of this invoice's charges. May be empty if we don't have a breakdown + * @deprecated This data came from Metronome and we no longer use Metronome + */ lineItems?: Maybe>; - subtotalInCents: Scalars['Int']; - totalInCents: Scalars['Int']; + /** @deprecated This data came from Metronome and we no longer use Metronome */ + subtotalInCents: Scalars['Int']['output']; + /** @deprecated This data came from Metronome and we no longer use Metronome */ + totalInCents: Scalars['Int']['output']; }; export type DuplicateOperationCollectionResult = OperationCollection | PermissionError | ValidationError; export type DurationHistogram = { __typename?: 'DurationHistogram'; - averageDurationMs?: Maybe; + averageDurationMs?: Maybe; buckets: Array; - durationMs?: Maybe; + durationMs?: Maybe; /** Counts per durationBucket, where sequences of zeroes are replaced with the negative of their size */ - sparseBuckets: Array; - totalCount: Scalars['Long']; - totalDurationMs: Scalars['Float']; + sparseBuckets: Array; + totalCount: Scalars['Long']['output']; + totalDurationMs: Scalars['Float']['output']; }; -export type DurationHistogramdurationMsArgs = { - percentile: Scalars['Float']; +export type DurationHistogramDurationMsArgs = { + percentile: Scalars['Float']['input']; }; export type DurationHistogramBucket = { __typename?: 'DurationHistogramBucket'; - count: Scalars['Long']; - index: Scalars['Int']; - rangeBeginMs: Scalars['Float']; - rangeEndMs: Scalars['Float']; + count: Scalars['Long']['output']; + index: Scalars['Int']['output']; + rangeBeginMs: Scalars['Float']['output']; + rangeEndMs: Scalars['Float']['output']; }; export type EdgeServerInfo = { /** A randomly generated UUID, immutable for the lifetime of the edge server runtime. */ - bootId: Scalars['String']; + bootId: Scalars['String']['input']; /** A unique identifier for the executable GraphQL served by the edge server. length must be <= 64 characters. */ - executableSchemaId: Scalars['String']; + executableSchemaId: Scalars['String']['input']; /** The graph variant, defaults to 'current' */ - graphVariant?: Scalars['String']; + graphVariant?: Scalars['String']['input']; /** The version of the edge server reporting agent, e.g. apollo-server-2.8, graphql-java-3.1, etc. length must be <= 256 characters. */ - libraryVersion?: InputMaybe; + libraryVersion?: InputMaybe; /** The infra environment in which this edge server is running, e.g. localhost, Kubernetes, AWS Lambda, Google CloudRun, AWS ECS, etc. length must be <= 256 characters. */ - platform?: InputMaybe; + platform?: InputMaybe; /** The runtime in which the edge server is running, e.g. node 12.03, zulu8.46.0.19-ca-jdk8.0.252-macosx_x64, etc. length must be <= 256 characters. */ - runtimeVersion?: InputMaybe; + runtimeVersion?: InputMaybe; /** If available, an identifier for the edge server instance, such that when restarting this instance it will have the same serverId, with a different bootId. For example, in Kubernetes this might be the pod name. Length must be <= 256 characters. */ - serverId?: InputMaybe; + serverId?: InputMaybe; /** An identifier used to distinguish the version (from the user's perspective) of the edge server's code itself. For instance, the git sha of the server's repository or the docker sha of the associated image this server runs with. Length must be <= 256 characters. */ - userVersion?: InputMaybe; + userVersion?: InputMaybe; }; /** Columns of EdgeServerInfos. */ @@ -4440,63 +5444,63 @@ export enum EdgeServerInfosColumn { export type EdgeServerInfosDimensions = { __typename?: 'EdgeServerInfosDimensions'; - bootId?: Maybe; - executableSchemaId?: Maybe; - libraryVersion?: Maybe; - platform?: Maybe; - runtimeVersion?: Maybe; - schemaTag?: Maybe; - serverId?: Maybe; - serviceId?: Maybe; - userVersion?: Maybe; + bootId?: Maybe; + executableSchemaId?: Maybe; + libraryVersion?: Maybe; + platform?: Maybe; + runtimeVersion?: Maybe; + schemaTag?: Maybe; + serverId?: Maybe; + serviceId?: Maybe; + userVersion?: Maybe; }; /** Filter for data in EdgeServerInfos. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type EdgeServerInfosFilter = { and?: InputMaybe>; /** Selects rows whose bootId dimension equals the given value if not null. To query for the null value, use {in: {bootId: [null]}} instead. */ - bootId?: InputMaybe; + bootId?: InputMaybe; /** Selects rows whose executableSchemaId dimension equals the given value if not null. To query for the null value, use {in: {executableSchemaId: [null]}} instead. */ - executableSchemaId?: InputMaybe; + executableSchemaId?: InputMaybe; in?: InputMaybe; /** Selects rows whose libraryVersion dimension equals the given value if not null. To query for the null value, use {in: {libraryVersion: [null]}} instead. */ - libraryVersion?: InputMaybe; + libraryVersion?: InputMaybe; not?: InputMaybe; or?: InputMaybe>; /** Selects rows whose platform dimension equals the given value if not null. To query for the null value, use {in: {platform: [null]}} instead. */ - platform?: InputMaybe; + platform?: InputMaybe; /** Selects rows whose runtimeVersion dimension equals the given value if not null. To query for the null value, use {in: {runtimeVersion: [null]}} instead. */ - runtimeVersion?: InputMaybe; + runtimeVersion?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; /** Selects rows whose serverId dimension equals the given value if not null. To query for the null value, use {in: {serverId: [null]}} instead. */ - serverId?: InputMaybe; + serverId?: InputMaybe; /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */ - serviceId?: InputMaybe; + serviceId?: InputMaybe; /** Selects rows whose userVersion dimension equals the given value if not null. To query for the null value, use {in: {userVersion: [null]}} instead. */ - userVersion?: InputMaybe; + userVersion?: InputMaybe; }; /** Filter for data in EdgeServerInfos. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type EdgeServerInfosFilterIn = { /** Selects rows whose bootId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - bootId?: InputMaybe>>; + bootId?: InputMaybe>>; /** Selects rows whose executableSchemaId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - executableSchemaId?: InputMaybe>>; + executableSchemaId?: InputMaybe>>; /** Selects rows whose libraryVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - libraryVersion?: InputMaybe>>; + libraryVersion?: InputMaybe>>; /** Selects rows whose platform dimension is in the given list. A null value in the list means a row with null for that dimension. */ - platform?: InputMaybe>>; + platform?: InputMaybe>>; /** Selects rows whose runtimeVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - runtimeVersion?: InputMaybe>>; + runtimeVersion?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; /** Selects rows whose serverId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - serverId?: InputMaybe>>; + serverId?: InputMaybe>>; /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - serviceId?: InputMaybe>>; + serviceId?: InputMaybe>>; /** Selects rows whose userVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - userVersion?: InputMaybe>>; + userVersion?: InputMaybe>>; }; export type EdgeServerInfosOrderBySpec = { @@ -4509,33 +5513,49 @@ export type EdgeServerInfosRecord = { /** Dimensions of EdgeServerInfos that can be grouped by. */ groupBy: EdgeServerInfosDimensions; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; }; export type EditCommentInput = { - id: Scalars['String']; - message: Scalars['String']; - usersToNotify?: InputMaybe>; + id: Scalars['String']['input']; + message: Scalars['String']['input']; + usersToNotify?: InputMaybe>; }; export type EditCommentResult = NotFoundError | ParentChangeProposalComment | ParentGeneralProposalComment | PermissionError | ReplyChangeProposalComment | ReplyGeneralProposalComment | ValidationError; +export type Education = { + __typename?: 'Education'; + recentPages: Array; +}; + + +export type EducationRecentPagesArgs = { + limit?: InputMaybe; +}; + export enum EmailCategory { EDUCATIONAL = 'EDUCATIONAL' } export type EmailPreferences = { __typename?: 'EmailPreferences'; - email: Scalars['String']; + email: Scalars['String']['output']; subscriptions: Array; - unsubscribedFromAll: Scalars['Boolean']; + unsubscribedFromAll: Scalars['Boolean']['output']; }; export type EndUsageBasedPlanResult = Account | NotFoundError | PermissionError | ValidationError; +export enum EnforcementPolicy { + CLIENT_NAME_CARDINALITY = 'CLIENT_NAME_CARDINALITY', + CLIENT_VERSION_CARDINALITY = 'CLIENT_VERSION_CARDINALITY', + OPERATION_ID_CARDINALITY = 'OPERATION_ID_CARDINALITY' +} + export type EntitiesError = { __typename?: 'EntitiesError'; - message: Scalars['String']; + message: Scalars['String']['output']; }; export type EntitiesErrorResponse = { @@ -4553,12 +5573,126 @@ export type EntitiesResponseOrError = EntitiesErrorResponse | EntitiesResponse; export type Entity = { __typename?: 'Entity'; subgraphKeys?: Maybe>; - typename: Scalars['String']; + typename: Scalars['String']['output']; }; /** GraphQL Error */ export type Error = { - message: Scalars['String']; + message: Scalars['String']['output']; +}; + +export type ErrorInsightsListFilterInInput = { + agent?: InputMaybe>>; + clientName?: InputMaybe>>; + clientVersion?: InputMaybe>>; + code?: InputMaybe>>; + service?: InputMaybe>>; + serviceOrAgent?: InputMaybe>>; +}; + +export type ErrorInsightsListFilterInput = { + agent?: InputMaybe; + clientName?: InputMaybe; + clientVersion?: InputMaybe; + code?: InputMaybe; + in?: InputMaybe; + operationId?: InputMaybe; + or?: InputMaybe>; + path?: InputMaybe; + service?: InputMaybe; + serviceOrAgent?: InputMaybe; +}; + +export enum ErrorInsightsListGroupByColumn { + AGENT = 'AGENT', + CLIENT_NAME = 'CLIENT_NAME', + CLIENT_VERSION = 'CLIENT_VERSION', + CODE = 'CODE', + OPERATION_ID = 'OPERATION_ID', + OPERATION_NAME = 'OPERATION_NAME', + PATH = 'PATH', + SERVICE = 'SERVICE', + SERVICE_OR_AGENT = 'SERVICE_OR_AGENT', + SEVERITY = 'SEVERITY' +} + +export type ErrorInsightsListItem = { + __typename?: 'ErrorInsightsListItem'; + agent?: Maybe; + clientName?: Maybe; + clientVersion?: Maybe; + code?: Maybe; + /** @deprecated Use errorCount instead */ + count: Scalars['Long']['output']; + errorCount: Scalars['Long']['output']; + operationCount?: Maybe; + operationId?: Maybe; + operationName?: Maybe; + path?: Maybe; + service?: Maybe; + serviceOrAgent?: Maybe; + severity?: Maybe; + traceRefs?: Maybe; +}; + + +export type ErrorInsightsListItemTraceRefsArgs = { + limit?: Scalars['Int']['input']; +}; + +export enum ErrorInsightsListOrderByColumn { + AGENT = 'AGENT', + CLIENT_NAME = 'CLIENT_NAME', + CLIENT_VERSION = 'CLIENT_VERSION', + CODE = 'CODE', + COUNT = 'COUNT', + OPERATION_ID = 'OPERATION_ID', + OPERATION_NAME = 'OPERATION_NAME', + PATH = 'PATH', + SERVICE_OR_AGENT = 'SERVICE_OR_AGENT', + SEVERITY = 'SEVERITY', + TIMESTAMP = 'TIMESTAMP' +} + +export type ErrorInsightsListOrderByInput = { + column: ErrorInsightsListOrderByColumn; + direction: Ordering; +}; + +/** Information about pagination in a connection. */ +export type ErrorInsightsListPageInfo = { + __typename?: 'ErrorInsightsListPageInfo'; + /** When paginating forwards, the cursor to continue. */ + endCursor?: Maybe; + /** When paginating backwards, the cursor to continue. */ + startCursor?: Maybe; +}; + +export enum ErrorInsightsSeverity { + ERROR = 'ERROR', + UNKNOWN = 'UNKNOWN', + WARN = 'WARN' +} + +export enum ErrorInsightsStrategy { + ERROR_STATS = 'ERROR_STATS', + FEDERATED_ERROR_STATS = 'FEDERATED_ERROR_STATS', + MIXED = 'MIXED' +} + +export type ErrorInsightsTimeseriesRecord = { + __typename?: 'ErrorInsightsTimeseriesRecord'; + data: ErrorInsightsListItem; + strategy: ErrorInsightsStrategy; + timestamp: Scalars['Timestamp']['output']; +}; + +export type ErrorInsightsTimeseriesResult = { + __typename?: 'ErrorInsightsTimeseriesResult'; + records: Array; + roundedDownFrom: Scalars['Timestamp']['output']; + roundedUpTo: Scalars['Timestamp']['output']; + totalErrors: Scalars['Int']['output']; }; /** Columns of ErrorStats. */ @@ -4579,69 +5713,69 @@ export enum ErrorStatsColumn { export type ErrorStatsDimensions = { __typename?: 'ErrorStatsDimensions'; - accountId?: Maybe; - clientName?: Maybe; - clientVersion?: Maybe; - path?: Maybe; - queryId?: Maybe; - queryName?: Maybe; - schemaHash?: Maybe; - schemaTag?: Maybe; - serviceId?: Maybe; + accountId?: Maybe; + clientName?: Maybe; + clientVersion?: Maybe; + path?: Maybe; + queryId?: Maybe; + queryName?: Maybe; + schemaHash?: Maybe; + schemaTag?: Maybe; + serviceId?: Maybe; }; /** Filter for data in ErrorStats. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type ErrorStatsFilter = { /** Selects rows whose accountId dimension equals the given value if not null. To query for the null value, use {in: {accountId: [null]}} instead. */ - accountId?: InputMaybe; + accountId?: InputMaybe; and?: InputMaybe>; /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */ - clientName?: InputMaybe; + clientName?: InputMaybe; /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */ - clientVersion?: InputMaybe; + clientVersion?: InputMaybe; in?: InputMaybe; not?: InputMaybe; or?: InputMaybe>; /** Selects rows whose path dimension equals the given value if not null. To query for the null value, use {in: {path: [null]}} instead. */ - path?: InputMaybe; + path?: InputMaybe; /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */ - queryId?: InputMaybe; + queryId?: InputMaybe; /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */ - queryName?: InputMaybe; + queryName?: InputMaybe; /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */ - schemaHash?: InputMaybe; + schemaHash?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */ - serviceId?: InputMaybe; + serviceId?: InputMaybe; }; /** Filter for data in ErrorStats. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type ErrorStatsFilterIn = { /** Selects rows whose accountId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - accountId?: InputMaybe>>; + accountId?: InputMaybe>>; /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientName?: InputMaybe>>; + clientName?: InputMaybe>>; /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientVersion?: InputMaybe>>; + clientVersion?: InputMaybe>>; /** Selects rows whose path dimension is in the given list. A null value in the list means a row with null for that dimension. */ - path?: InputMaybe>>; + path?: InputMaybe>>; /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryId?: InputMaybe>>; + queryId?: InputMaybe>>; /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryName?: InputMaybe>>; + queryName?: InputMaybe>>; /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaHash?: InputMaybe>>; + schemaHash?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - serviceId?: InputMaybe>>; + serviceId?: InputMaybe>>; }; export type ErrorStatsMetrics = { __typename?: 'ErrorStatsMetrics'; - errorsCount: Scalars['Long']; - requestsWithErrorsCount: Scalars['Long']; + errorsCount: Scalars['Long']['output']; + requestsWithErrorsCount: Scalars['Long']['output']; }; export type ErrorStatsOrderBySpec = { @@ -4656,7 +5790,21 @@ export type ErrorStatsRecord = { /** Metrics of ErrorStats that can be aggregated over. */ metrics: ErrorStatsMetrics; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; +}; + +export type ErrorTraceRef = { + __typename?: 'ErrorTraceRef'; + errorMessage?: Maybe; + operationId: Scalars['String']['output']; + timestamp: Scalars['Timestamp']['output']; + traceId: Scalars['String']['output']; +}; + +export type ErrorTraceRefsResult = { + __typename?: 'ErrorTraceRefsResult'; + items: Array; + totalCount: Scalars['Int']['output']; }; /** Input parameters for run explorer operation event. */ @@ -4670,27 +5818,149 @@ export enum EventEnum { export type ExcludedOperation = { __typename?: 'ExcludedOperation'; /** Operation ID to exclude from schema check. */ - ID: Scalars['ID']; + ID: Scalars['ID']['output']; }; /** Option to filter by operation ID. */ export type ExcludedOperationInput = { /** Operation ID to exclude from schema check. */ - ID: Scalars['ID']; + ID: Scalars['ID']['input']; +}; + +export type ExtendedRefsUsage = { + __typename?: 'ExtendedRefsUsage'; + /** The first time usage of this feature was reported for this variant to Apollo by the Router, or null if such usage has never been reported. */ + firstSeenAt?: Maybe; + /** The last time usage of this feature was reported for this variant to Apollo by the Router, or null if such usage has never been reported. */ + lastSeenAt?: Maybe; }; export type FeatureIntros = { __typename?: 'FeatureIntros'; /** @deprecated No longer supported */ - devGraph: Scalars['Boolean']; - federatedGraph: Scalars['Boolean']; - freeConsumerSeats: Scalars['Boolean']; + devGraph: Scalars['Boolean']['output']; + federatedGraph: Scalars['Boolean']['output']; + freeConsumerSeats: Scalars['Boolean']['output']; }; /** Feature Intros Input Type */ export type FeatureIntrosInput = { - federatedGraph?: InputMaybe; - freeConsumerSeats?: InputMaybe; + federatedGraph?: InputMaybe; + freeConsumerSeats?: InputMaybe; +}; + +/** Columns of FederatedErrorStats. */ +export enum FederatedErrorStatsColumn { + AGENT_VERSION = 'AGENT_VERSION', + CLIENT_NAME = 'CLIENT_NAME', + CLIENT_VERSION = 'CLIENT_VERSION', + ERROR_CODE = 'ERROR_CODE', + ERROR_COUNT = 'ERROR_COUNT', + ERROR_PATH = 'ERROR_PATH', + ERROR_SERVICE = 'ERROR_SERVICE', + OPERATION_ID = 'OPERATION_ID', + OPERATION_NAME = 'OPERATION_NAME', + OPERATION_TYPE = 'OPERATION_TYPE', + SCHEMA_TAG = 'SCHEMA_TAG', + SERVICE_ID = 'SERVICE_ID', + SEVERITY = 'SEVERITY', + TIMESTAMP = 'TIMESTAMP' +} + +export type FederatedErrorStatsDimensions = { + __typename?: 'FederatedErrorStatsDimensions'; + agentVersion?: Maybe; + clientName?: Maybe; + clientVersion?: Maybe; + errorCode?: Maybe; + errorPath?: Maybe; + errorService?: Maybe; + operationId?: Maybe; + operationName?: Maybe; + operationType?: Maybe; + schemaTag?: Maybe; + serviceId?: Maybe; + severity?: Maybe; +}; + +/** Filter for data in FederatedErrorStats. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ +export type FederatedErrorStatsFilter = { + /** Selects rows whose agentVersion dimension equals the given value if not null. To query for the null value, use {in: {agentVersion: [null]}} instead. */ + agentVersion?: InputMaybe; + and?: InputMaybe>; + /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */ + clientName?: InputMaybe; + /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */ + clientVersion?: InputMaybe; + /** Selects rows whose errorCode dimension equals the given value if not null. To query for the null value, use {in: {errorCode: [null]}} instead. */ + errorCode?: InputMaybe; + /** Selects rows whose errorPath dimension equals the given value if not null. To query for the null value, use {in: {errorPath: [null]}} instead. */ + errorPath?: InputMaybe; + /** Selects rows whose errorService dimension equals the given value if not null. To query for the null value, use {in: {errorService: [null]}} instead. */ + errorService?: InputMaybe; + in?: InputMaybe; + not?: InputMaybe; + /** Selects rows whose operationId dimension equals the given value if not null. To query for the null value, use {in: {operationId: [null]}} instead. */ + operationId?: InputMaybe; + /** Selects rows whose operationName dimension equals the given value if not null. To query for the null value, use {in: {operationName: [null]}} instead. */ + operationName?: InputMaybe; + /** Selects rows whose operationType dimension equals the given value if not null. To query for the null value, use {in: {operationType: [null]}} instead. */ + operationType?: InputMaybe; + or?: InputMaybe>; + /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ + schemaTag?: InputMaybe; + /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */ + serviceId?: InputMaybe; + /** Selects rows whose severity dimension equals the given value if not null. To query for the null value, use {in: {severity: [null]}} instead. */ + severity?: InputMaybe; +}; + +/** Filter for data in FederatedErrorStats. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ +export type FederatedErrorStatsFilterIn = { + /** Selects rows whose agentVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ + agentVersion?: InputMaybe>>; + /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */ + clientName?: InputMaybe>>; + /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ + clientVersion?: InputMaybe>>; + /** Selects rows whose errorCode dimension is in the given list. A null value in the list means a row with null for that dimension. */ + errorCode?: InputMaybe>>; + /** Selects rows whose errorPath dimension is in the given list. A null value in the list means a row with null for that dimension. */ + errorPath?: InputMaybe>>; + /** Selects rows whose errorService dimension is in the given list. A null value in the list means a row with null for that dimension. */ + errorService?: InputMaybe>>; + /** Selects rows whose operationId dimension is in the given list. A null value in the list means a row with null for that dimension. */ + operationId?: InputMaybe>>; + /** Selects rows whose operationName dimension is in the given list. A null value in the list means a row with null for that dimension. */ + operationName?: InputMaybe>>; + /** Selects rows whose operationType dimension is in the given list. A null value in the list means a row with null for that dimension. */ + operationType?: InputMaybe>>; + /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ + schemaTag?: InputMaybe>>; + /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ + serviceId?: InputMaybe>>; + /** Selects rows whose severity dimension is in the given list. A null value in the list means a row with null for that dimension. */ + severity?: InputMaybe>>; +}; + +export type FederatedErrorStatsMetrics = { + __typename?: 'FederatedErrorStatsMetrics'; + errorCount: Scalars['Long']['output']; +}; + +export type FederatedErrorStatsOrderBySpec = { + column: FederatedErrorStatsColumn; + direction: Ordering; +}; + +export type FederatedErrorStatsRecord = { + __typename?: 'FederatedErrorStatsRecord'; + /** Dimensions of FederatedErrorStats that can be grouped by. */ + groupBy: FederatedErrorStatsDimensions; + /** Metrics of FederatedErrorStats that can be aggregated over. */ + metrics: FederatedErrorStatsMetrics; + /** Starting segment timestamp. */ + timestamp: Scalars['Timestamp']['output']; }; /** A single subgraph in a supergraph. Every supergraph managed by Apollo Studio includes at least one subgraph. See https://www.apollographql.com/docs/federation/managed-federation/overview/ for more information. */ @@ -4699,30 +5969,30 @@ export type FederatedImplementingService = { /** The subgraph's current active schema, used in supergraph composition for the the associated variant. */ activePartialSchema: PartialSchema; /** The timestamp when the subgraph was created. */ - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; /** The timestamp when the subgraph was deleted. Null if it wasn't deleted. */ - deletedAt?: Maybe; + deletedAt?: Maybe; /** The ID of the graph this subgraph belongs to. */ - graphID: Scalars['String']; + graphID: Scalars['String']['output']; /** The name of the graph variant this subgraph belongs to. */ - graphVariant: Scalars['String']; + graphVariant: Scalars['String']['output']; /** The subgraph's name. */ - name: Scalars['String']; + name: Scalars['String']['output']; /** The current user-provided version/edition of the subgraph. Typically a Git SHA or docker image ID. */ - revision: Scalars['String']; + revision: Scalars['String']['output']; /** The timestamp when the subgraph was most recently updated. */ - updatedAt: Scalars['Timestamp']; + updatedAt: Scalars['Timestamp']['output']; /** The URL of the subgraph's GraphQL endpoint. */ - url?: Maybe; + url?: Maybe; }; /** A minimal representation of a federated implementing service, using only a name and partial schema SDL */ export type FederatedImplementingServicePartialSchema = { __typename?: 'FederatedImplementingServicePartialSchema'; /** The name of the implementing service */ - name: Scalars['String']; + name: Scalars['String']['output']; /** The partial schema of the implementing service */ - sdl: Scalars['String']; + sdl: Scalars['String']['output']; }; /** Container for a list of subgraphs composing a supergraph. */ @@ -4736,15 +6006,15 @@ export type FederatedImplementingServices = { export type FieldChangeSummaryCounts = { __typename?: 'FieldChangeSummaryCounts'; /** Number of changes that are additions of fields to object, interface, and input types. */ - additions: Scalars['Int']; + additions: Scalars['Int']['output']; /** * Number of changes that are field edits. This includes fields changing type and any field * deprecation and description changes, but also includes any argument changes and any input object * field changes. */ - edits: Scalars['Int']; + edits: Scalars['Int']['output']; /** Number of changes that are removals of fields from object, interface, and input types. */ - removals: Scalars['Int']; + removals: Scalars['Int']['output']; }; /** Columns of FieldExecutions. */ @@ -4763,47 +6033,47 @@ export enum FieldExecutionsColumn { export type FieldExecutionsDimensions = { __typename?: 'FieldExecutionsDimensions'; - fieldName?: Maybe; - parentType?: Maybe; - schemaTag?: Maybe; - serviceId?: Maybe; + fieldName?: Maybe; + parentType?: Maybe; + schemaTag?: Maybe; + serviceId?: Maybe; }; /** Filter for data in FieldExecutions. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type FieldExecutionsFilter = { and?: InputMaybe>; /** Selects rows whose fieldName dimension equals the given value if not null. To query for the null value, use {in: {fieldName: [null]}} instead. */ - fieldName?: InputMaybe; + fieldName?: InputMaybe; in?: InputMaybe; not?: InputMaybe; or?: InputMaybe>; /** Selects rows whose parentType dimension equals the given value if not null. To query for the null value, use {in: {parentType: [null]}} instead. */ - parentType?: InputMaybe; + parentType?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */ - serviceId?: InputMaybe; + serviceId?: InputMaybe; }; /** Filter for data in FieldExecutions. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type FieldExecutionsFilterIn = { /** Selects rows whose fieldName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - fieldName?: InputMaybe>>; + fieldName?: InputMaybe>>; /** Selects rows whose parentType dimension is in the given list. A null value in the list means a row with null for that dimension. */ - parentType?: InputMaybe>>; + parentType?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - serviceId?: InputMaybe>>; + serviceId?: InputMaybe>>; }; export type FieldExecutionsMetrics = { __typename?: 'FieldExecutionsMetrics'; - errorsCount: Scalars['Long']; - estimatedExecutionCount: Scalars['Long']; - observedExecutionCount: Scalars['Long']; - referencingOperationCount: Scalars['Long']; - requestsWithErrorsCount: Scalars['Long']; + errorsCount: Scalars['Long']['output']; + estimatedExecutionCount: Scalars['Long']['output']; + observedExecutionCount: Scalars['Long']['output']; + referencingOperationCount: Scalars['Long']['output']; + requestsWithErrorsCount: Scalars['Long']['output']; }; export type FieldExecutionsOrderBySpec = { @@ -4818,63 +6088,63 @@ export type FieldExecutionsRecord = { /** Metrics of FieldExecutions that can be aggregated over. */ metrics: FieldExecutionsMetrics; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; }; export type FieldInsights = { __typename?: 'FieldInsights'; /** If the first or last seen timestamps are earlier than this timestamp, we can't tell the exact date that we saw this field since our data is bound by the retention period. */ - earliestRetentionTime?: Maybe; + earliestRetentionTime?: Maybe; /** The earliest time we saw references or executions for this field. Null if the field has never been seen or it is not in the schema. */ - firstSeen?: Maybe; + firstSeen?: Maybe; /** The most recent time we saw references or executions for this field. Null if the field has never been seen or it is not in the schema. */ - lastSeen?: Maybe; + lastSeen?: Maybe; }; export type FieldInsightsListFilterInInput = { - clientName?: InputMaybe>>; - clientVersion?: InputMaybe>>; + clientName?: InputMaybe>>; + clientVersion?: InputMaybe>>; }; export type FieldInsightsListFilterInput = { - clientName?: InputMaybe; - clientVersion?: InputMaybe; + clientName?: InputMaybe; + clientVersion?: InputMaybe; in?: InputMaybe; - isDeprecated?: InputMaybe; - isUnused?: InputMaybe; + isDeprecated?: InputMaybe; + isUnused?: InputMaybe; or?: InputMaybe>; /** Filters on partial string matches of Parent Type and Field Name */ - search?: InputMaybe; + search?: InputMaybe; }; export type FieldInsightsListItem = { __typename?: 'FieldInsightsListItem'; /** The count of errors seen for this field. This can be null depending on the sort order. */ - errorCount?: Maybe; + errorCount?: Maybe; /** The count of errors seen for this field per minute. This can be null depending on the sort order. */ - errorCountPerMin?: Maybe; + errorCountPerMin?: Maybe; /** The percentage of errors vs successful resolutions for this field. This can be null depending on the sort order. */ - errorPercentage?: Maybe; + errorPercentage?: Maybe; /** The estimated number of field executions for this field, based on the field execution sample rate. This can be null depending on the sort order. */ - estimatedExecutionCount?: Maybe; + estimatedExecutionCount?: Maybe; /** The number of field executions recorded for this field. This can be null depending on the sort order. */ - executionCount?: Maybe; - fieldName: Scalars['String']; - isDeprecated: Scalars['Boolean']; - isUnused: Scalars['Boolean']; + executionCount?: Maybe; + fieldName: Scalars['String']['output']; + isDeprecated: Scalars['Boolean']['output']; + isUnused: Scalars['Boolean']['output']; /** The p50 of the latency of the resolution of this field. This can be null depending on the filter and sort order. */ - p50LatencyMs?: Maybe; + p50LatencyMs?: Maybe; /** The p90 of the latency of the resolution of this field. This can be null depending on the filter and sort order. */ - p90LatencyMs?: Maybe; + p90LatencyMs?: Maybe; /** The p95 of the latency of the resolution of this field. This can be null depending on the filter and sort order. */ - p95LatencyMs?: Maybe; + p95LatencyMs?: Maybe; /** The p99 of the latency of the resolution of this field. This can be null depending on the filter and sort order. */ - p99LatencyMs?: Maybe; - parentType: Scalars['String']; + p99LatencyMs?: Maybe; + parentType: Scalars['String']['output']; /** The count of operations that reference the field. This can be null depending on the sort order. */ - referencingOperationCount?: Maybe; + referencingOperationCount?: Maybe; /** The count of operations that reference the field per minute. This can be null depending on the sort order. */ - referencingOperationCountPerMin?: Maybe; + referencingOperationCountPerMin?: Maybe; }; export enum FieldInsightsListOrderByColumn { @@ -4901,9 +6171,9 @@ export type FieldInsightsListOrderByInput = { export type FieldInsightsListPageInfo = { __typename?: 'FieldInsightsListPageInfo'; /** When paginating forwards, the cursor to continue. */ - endCursor?: Maybe; + endCursor?: Maybe; /** When paginating backwards, the cursor to continue. */ - startCursor?: Maybe; + startCursor?: Maybe; }; /** Columns of FieldLatencies. */ @@ -4919,44 +6189,44 @@ export enum FieldLatenciesColumn { export type FieldLatenciesDimensions = { __typename?: 'FieldLatenciesDimensions'; - field?: Maybe; - fieldName?: Maybe; - parentType?: Maybe; - schemaHash?: Maybe; - schemaTag?: Maybe; - serviceId?: Maybe; + field?: Maybe; + fieldName?: Maybe; + parentType?: Maybe; + schemaHash?: Maybe; + schemaTag?: Maybe; + serviceId?: Maybe; }; /** Filter for data in FieldLatencies. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type FieldLatenciesFilter = { and?: InputMaybe>; /** Selects rows whose fieldName dimension equals the given value if not null. To query for the null value, use {in: {fieldName: [null]}} instead. */ - fieldName?: InputMaybe; + fieldName?: InputMaybe; in?: InputMaybe; not?: InputMaybe; or?: InputMaybe>; /** Selects rows whose parentType dimension equals the given value if not null. To query for the null value, use {in: {parentType: [null]}} instead. */ - parentType?: InputMaybe; + parentType?: InputMaybe; /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */ - schemaHash?: InputMaybe; + schemaHash?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */ - serviceId?: InputMaybe; + serviceId?: InputMaybe; }; /** Filter for data in FieldLatencies. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type FieldLatenciesFilterIn = { /** Selects rows whose fieldName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - fieldName?: InputMaybe>>; + fieldName?: InputMaybe>>; /** Selects rows whose parentType dimension is in the given list. A null value in the list means a row with null for that dimension. */ - parentType?: InputMaybe>>; + parentType?: InputMaybe>>; /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaHash?: InputMaybe>>; + schemaHash?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - serviceId?: InputMaybe>>; + serviceId?: InputMaybe>>; }; export type FieldLatenciesMetrics = { @@ -4976,7 +6246,7 @@ export type FieldLatenciesRecord = { /** Metrics of FieldLatencies that can be aggregated over. */ metrics: FieldLatenciesMetrics; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; }; /** Columns of FieldUsage. */ @@ -5000,80 +6270,80 @@ export enum FieldUsageColumn { export type FieldUsageDimensions = { __typename?: 'FieldUsageDimensions'; - clientName?: Maybe; - clientVersion?: Maybe; - fieldName?: Maybe; - operationSubtype?: Maybe; - operationType?: Maybe; - parentType?: Maybe; - queryId?: Maybe; - queryName?: Maybe; - schemaHash?: Maybe; - schemaTag?: Maybe; - serviceId?: Maybe; + clientName?: Maybe; + clientVersion?: Maybe; + fieldName?: Maybe; + operationSubtype?: Maybe; + operationType?: Maybe; + parentType?: Maybe; + queryId?: Maybe; + queryName?: Maybe; + schemaHash?: Maybe; + schemaTag?: Maybe; + serviceId?: Maybe; }; /** Filter for data in FieldUsage. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type FieldUsageFilter = { and?: InputMaybe>; /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */ - clientName?: InputMaybe; + clientName?: InputMaybe; /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */ - clientVersion?: InputMaybe; + clientVersion?: InputMaybe; /** Selects rows whose fieldName dimension equals the given value if not null. To query for the null value, use {in: {fieldName: [null]}} instead. */ - fieldName?: InputMaybe; + fieldName?: InputMaybe; in?: InputMaybe; not?: InputMaybe; /** Selects rows whose operationSubtype dimension equals the given value if not null. To query for the null value, use {in: {operationSubtype: [null]}} instead. */ - operationSubtype?: InputMaybe; + operationSubtype?: InputMaybe; /** Selects rows whose operationType dimension equals the given value if not null. To query for the null value, use {in: {operationType: [null]}} instead. */ - operationType?: InputMaybe; + operationType?: InputMaybe; or?: InputMaybe>; /** Selects rows whose parentType dimension equals the given value if not null. To query for the null value, use {in: {parentType: [null]}} instead. */ - parentType?: InputMaybe; + parentType?: InputMaybe; /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */ - queryId?: InputMaybe; + queryId?: InputMaybe; /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */ - queryName?: InputMaybe; + queryName?: InputMaybe; /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */ - schemaHash?: InputMaybe; + schemaHash?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */ - serviceId?: InputMaybe; + serviceId?: InputMaybe; }; /** Filter for data in FieldUsage. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type FieldUsageFilterIn = { /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientName?: InputMaybe>>; + clientName?: InputMaybe>>; /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientVersion?: InputMaybe>>; + clientVersion?: InputMaybe>>; /** Selects rows whose fieldName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - fieldName?: InputMaybe>>; + fieldName?: InputMaybe>>; /** Selects rows whose operationSubtype dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationSubtype?: InputMaybe>>; + operationSubtype?: InputMaybe>>; /** Selects rows whose operationType dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationType?: InputMaybe>>; + operationType?: InputMaybe>>; /** Selects rows whose parentType dimension is in the given list. A null value in the list means a row with null for that dimension. */ - parentType?: InputMaybe>>; + parentType?: InputMaybe>>; /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryId?: InputMaybe>>; + queryId?: InputMaybe>>; /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryName?: InputMaybe>>; + queryName?: InputMaybe>>; /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaHash?: InputMaybe>>; + schemaHash?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - serviceId?: InputMaybe>>; + serviceId?: InputMaybe>>; }; export type FieldUsageMetrics = { __typename?: 'FieldUsageMetrics'; - estimatedExecutionCount: Scalars['Long']; - executionCount: Scalars['Long']; - referencingOperationCount: Scalars['Long']; + estimatedExecutionCount: Scalars['Long']['output']; + executionCount: Scalars['Long']['output']; + referencingOperationCount: Scalars['Long']['output']; }; export type FieldUsageOrderBySpec = { @@ -5088,7 +6358,33 @@ export type FieldUsageRecord = { /** Metrics of FieldUsage that can be aggregated over. */ metrics: FieldUsageMetrics; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; +}; + +export type FileCoordinate = { + __typename?: 'FileCoordinate'; + byteOffset: Scalars['Int']['output']; + column: Scalars['Int']['output']; + line: Scalars['Int']['output']; +}; + +export type FileCoordinateInput = { + byteOffset: Scalars['Int']['input']; + column: Scalars['Int']['input']; + line: Scalars['Int']['input']; +}; + +export type FileLocation = { + __typename?: 'FileLocation'; + end: FileCoordinate; + start: FileCoordinate; + subgraphName?: Maybe; +}; + +export type FileLocationInput = { + end: FileCoordinateInput; + start: FileCoordinateInput; + subgraphName?: InputMaybe; }; export type FilterBuildCheckFailed = BuildCheckFailed & BuildCheckResult & FilterBuildCheckResult & { @@ -5096,8 +6392,8 @@ export type FilterBuildCheckFailed = BuildCheckFailed & BuildCheckResult & Filte buildInputs: FilterBuildInputs; buildPipelineTrack: BuildPipelineTrack; errors: Array; - id: Scalars['ID']; - passed: Scalars['Boolean']; + id: Scalars['ID']['output']; + passed: Scalars['Boolean']['output']; workflowTask: FilterCheckTask; }; @@ -5105,17 +6401,17 @@ export type FilterBuildCheckPassed = BuildCheckPassed & BuildCheckResult & Filte __typename?: 'FilterBuildCheckPassed'; buildInputs: FilterBuildInputs; buildPipelineTrack: BuildPipelineTrack; - id: Scalars['ID']; - passed: Scalars['Boolean']; - supergraphSchemaHash: Scalars['SHA256']; + id: Scalars['ID']['output']; + passed: Scalars['Boolean']['output']; + supergraphSchemaHash: Scalars['SHA256']['output']; workflowTask: FilterCheckTask; }; export type FilterBuildCheckResult = { buildInputs: FilterBuildInputs; buildPipelineTrack: BuildPipelineTrack; - id: Scalars['ID']; - passed: Scalars['Boolean']; + id: Scalars['ID']['output']; + passed: Scalars['Boolean']['output']; workflowTask: FilterCheckTask; }; @@ -5125,7 +6421,7 @@ export type FilterBuildInput = { /** Schema filtering rules for the build, such as tags to include or exclude from the source variant schema. */ filterConfig: FilterConfig; /** The source variant schema document's SHA256 hash, represented as a hexadecimal string. */ - schemaHash: Scalars['String']; + schemaHash: Scalars['String']['output']; }; export type FilterBuildInputs = { @@ -5136,16 +6432,16 @@ export type FilterBuildInputs = { */ buildPipelineTrack: BuildPipelineTrack; /** The exclude filters used for filtering. */ - exclude: Array; + exclude: Array; /** * Whether to hide unreachable objects, interfaces, unions, inputs, enums and scalars from * the resulting contract schema. */ - hideUnreachableTypes: Scalars['Boolean']; + hideUnreachableTypes: Scalars['Boolean']['output']; /** The include filters used for filtering. */ - include: Array; + include: Array; /** The SHA-256 of the supergraph schema document used for filtering. */ - supergraphSchemaHash: Scalars['SHA256']; + supergraphSchemaHash: Scalars['SHA256']['output']; }; export type FilterCheckAsyncInput = { @@ -5155,23 +6451,23 @@ export type FilterCheckAsyncInput = { }; export type FilterCheckFilterChanges = { - excludeAdditions?: InputMaybe>; - excludeRemovals?: InputMaybe>; - hideUnreachableTypesChange?: InputMaybe; - includeAdditions?: InputMaybe>; - includeRemovals?: InputMaybe>; + excludeAdditions?: InputMaybe>; + excludeRemovals?: InputMaybe>; + hideUnreachableTypesChange?: InputMaybe; + includeAdditions?: InputMaybe>; + includeRemovals?: InputMaybe>; }; export type FilterCheckTask = BuildCheckTask & CheckWorkflowTask & { __typename?: 'FilterCheckTask'; /** The result of the filter build check. This will be null when the task is initializing or running. */ buildResult?: Maybe; - completedAt?: Maybe; - createdAt: Scalars['Timestamp']; - id: Scalars['ID']; + completedAt?: Maybe; + createdAt: Scalars['Timestamp']['output']; + id: Scalars['ID']['output']; proposedBuildInputChanges: ProposedFilterBuildInputChanges; status: CheckWorkflowTaskStatus; - targetURL?: Maybe; + targetURL?: Maybe; workflow: CheckWorkflow; }; @@ -5179,100 +6475,100 @@ export type FilterCheckTask = BuildCheckTask & CheckWorkflowTask & { export type FilterConfig = { __typename?: 'FilterConfig'; /** Tags of schema elements to exclude from the contract schema. */ - exclude: Array; + exclude: Array; /** Whether to hide unreachable objects, interfaces, unions, inputs, enums and scalars from the resulting contract schema. */ - hideUnreachableTypes: Scalars['Boolean']; + hideUnreachableTypes: Scalars['Boolean']['output']; /** Tags of schema elements to include in the contract schema. */ - include: Array; + include: Array; }; export type FilterConfigInput = { /** A list of tags for schema elements to exclude from the resulting contract schema. */ - exclude: Array; + exclude: Array; /** * Whether to hide unreachable objects, interfaces, unions, inputs, enums and scalars from * the resulting contract schema. Defaults to `false`. */ - hideUnreachableTypes?: Scalars['Boolean']; + hideUnreachableTypes?: Scalars['Boolean']['input']; /** A list of tags for schema elements to include in the resulting contract schema. */ - include: Array; + include: Array; }; /** Represents a diff between two versions of a schema as a flat list of changes */ export type FlatDiff = { __typename?: 'FlatDiff'; diff: Array; - id: Scalars['ID']; + id: Scalars['ID']['output']; summary: FlatDiffSummary; }; export type FlatDiffAddArgument = FlatDiffItem & FlatDiffItemCoordinate & FlatDiffItemValue & { __typename?: 'FlatDiffAddArgument'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; - value: Scalars['String']; + value: Scalars['String']['output']; }; export type FlatDiffAddDirective = FlatDiffItem & FlatDiffItemCoordinate & { __typename?: 'FlatDiffAddDirective'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; }; export type FlatDiffAddDirectiveUsage = FlatDiffItem & FlatDiffItemCoordinate & FlatDiffItemValue & { __typename?: 'FlatDiffAddDirectiveUsage'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; - value: Scalars['String']; + value: Scalars['String']['output']; }; export type FlatDiffAddEnum = FlatDiffItem & FlatDiffItemCoordinate & { __typename?: 'FlatDiffAddEnum'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; }; export type FlatDiffAddEnumValue = FlatDiffItem & FlatDiffItemCoordinate & { __typename?: 'FlatDiffAddEnumValue'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; }; export type FlatDiffAddField = FlatDiffItem & FlatDiffItemCoordinate & FlatDiffItemValue & { __typename?: 'FlatDiffAddField'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; - value: Scalars['String']; + value: Scalars['String']['output']; }; export type FlatDiffAddImplementation = FlatDiffItem & FlatDiffItemCoordinate & FlatDiffItemValue & { __typename?: 'FlatDiffAddImplementation'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; - value: Scalars['String']; + value: Scalars['String']['output']; }; export type FlatDiffAddInput = FlatDiffItem & FlatDiffItemCoordinate & { __typename?: 'FlatDiffAddInput'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; }; export type FlatDiffAddInterface = FlatDiffItem & FlatDiffItemCoordinate & { __typename?: 'FlatDiffAddInterface'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; }; export type FlatDiffAddObject = FlatDiffItem & FlatDiffItemCoordinate & { __typename?: 'FlatDiffAddObject'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; }; export type FlatDiffAddScalar = FlatDiffItem & FlatDiffItemCoordinate & { __typename?: 'FlatDiffAddScalar'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; }; @@ -5284,68 +6580,68 @@ export type FlatDiffAddSchemaDefinition = FlatDiffItem & { export type FlatDiffAddSchemaDirectiveUsage = FlatDiffItem & FlatDiffItemValue & { __typename?: 'FlatDiffAddSchemaDirectiveUsage'; type: FlatDiffType; - value: Scalars['String']; + value: Scalars['String']['output']; }; export type FlatDiffAddSchemaRootOperation = FlatDiffItem & FlatDiffItemRootType & FlatDiffItemValue & { __typename?: 'FlatDiffAddSchemaRootOperation'; - rootType: Scalars['String']; + rootType: Scalars['String']['output']; type: FlatDiffType; - value: Scalars['String']; + value: Scalars['String']['output']; }; export type FlatDiffAddUnion = FlatDiffItem & FlatDiffItemCoordinate & { __typename?: 'FlatDiffAddUnion'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; }; export type FlatDiffAddUnionMember = FlatDiffItem & FlatDiffItemCoordinate & FlatDiffItemValue & { __typename?: 'FlatDiffAddUnionMember'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; - value: Scalars['String']; + value: Scalars['String']['output']; }; export type FlatDiffAddValidLocation = FlatDiffItem & FlatDiffItemCoordinate & FlatDiffItemValue & { __typename?: 'FlatDiffAddValidLocation'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; - value: Scalars['String']; + value: Scalars['String']['output']; }; export type FlatDiffChangeArgumentDefault = FlatDiffItem & FlatDiffItemCoordinate & FlatDiffItemNullableValue & { __typename?: 'FlatDiffChangeArgumentDefault'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; - value?: Maybe; + value?: Maybe; }; export type FlatDiffChangeDescription = FlatDiffItem & FlatDiffItemCoordinate & FlatDiffItemNullableValue & { __typename?: 'FlatDiffChangeDescription'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; - value?: Maybe; + value?: Maybe; }; export type FlatDiffChangeDirectiveRepeatable = FlatDiffItem & FlatDiffItemCoordinate & { __typename?: 'FlatDiffChangeDirectiveRepeatable'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; - value: Scalars['Boolean']; + value: Scalars['Boolean']['output']; }; export type FlatDiffChangeInputFieldDefault = FlatDiffItem & FlatDiffItemCoordinate & FlatDiffItemNullableValue & { __typename?: 'FlatDiffChangeInputFieldDefault'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; - value?: Maybe; + value?: Maybe; }; export type FlatDiffChangeSchemaDescription = FlatDiffItem & FlatDiffItemNullableValue & { __typename?: 'FlatDiffChangeSchemaDescription'; type: FlatDiffType; - value?: Maybe; + value?: Maybe; }; export type FlatDiffItem = { @@ -5353,92 +6649,92 @@ export type FlatDiffItem = { }; export type FlatDiffItemCoordinate = { - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; }; export type FlatDiffItemNullableValue = { type: FlatDiffType; - value?: Maybe; + value?: Maybe; }; export type FlatDiffItemRootType = { - rootType: Scalars['String']; + rootType: Scalars['String']['output']; type: FlatDiffType; }; export type FlatDiffItemValue = { type: FlatDiffType; - value: Scalars['String']; + value: Scalars['String']['output']; }; export type FlatDiffRemoveArgument = FlatDiffItem & FlatDiffItemCoordinate & FlatDiffItemValue & { __typename?: 'FlatDiffRemoveArgument'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; - value: Scalars['String']; + value: Scalars['String']['output']; }; export type FlatDiffRemoveDirective = FlatDiffItem & FlatDiffItemCoordinate & { __typename?: 'FlatDiffRemoveDirective'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; }; export type FlatDiffRemoveDirectiveUsage = FlatDiffItem & FlatDiffItemCoordinate & FlatDiffItemValue & { __typename?: 'FlatDiffRemoveDirectiveUsage'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; - value: Scalars['String']; + value: Scalars['String']['output']; }; export type FlatDiffRemoveEnum = FlatDiffItem & FlatDiffItemCoordinate & { __typename?: 'FlatDiffRemoveEnum'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; }; export type FlatDiffRemoveEnumValue = FlatDiffItem & FlatDiffItemCoordinate & { __typename?: 'FlatDiffRemoveEnumValue'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; }; export type FlatDiffRemoveField = FlatDiffItem & FlatDiffItemCoordinate & FlatDiffItemValue & { __typename?: 'FlatDiffRemoveField'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; - value: Scalars['String']; + value: Scalars['String']['output']; }; export type FlatDiffRemoveImplementation = FlatDiffItem & FlatDiffItemCoordinate & FlatDiffItemValue & { __typename?: 'FlatDiffRemoveImplementation'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; - value: Scalars['String']; + value: Scalars['String']['output']; }; export type FlatDiffRemoveInput = FlatDiffItem & FlatDiffItemCoordinate & { __typename?: 'FlatDiffRemoveInput'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; }; export type FlatDiffRemoveInterface = FlatDiffItem & FlatDiffItemCoordinate & { __typename?: 'FlatDiffRemoveInterface'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; }; export type FlatDiffRemoveObject = FlatDiffItem & FlatDiffItemCoordinate & { __typename?: 'FlatDiffRemoveObject'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; }; export type FlatDiffRemoveScalar = FlatDiffItem & FlatDiffItemCoordinate & { __typename?: 'FlatDiffRemoveScalar'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; }; @@ -5450,33 +6746,33 @@ export type FlatDiffRemoveSchemaDefinition = FlatDiffItem & { export type FlatDiffRemoveSchemaDirectiveUsage = FlatDiffItem & FlatDiffItemValue & { __typename?: 'FlatDiffRemoveSchemaDirectiveUsage'; type: FlatDiffType; - value: Scalars['String']; + value: Scalars['String']['output']; }; export type FlatDiffRemoveSchemaRootOperation = FlatDiffItem & FlatDiffItemRootType & { __typename?: 'FlatDiffRemoveSchemaRootOperation'; - rootType: Scalars['String']; + rootType: Scalars['String']['output']; type: FlatDiffType; }; export type FlatDiffRemoveUnion = FlatDiffItem & FlatDiffItemCoordinate & { __typename?: 'FlatDiffRemoveUnion'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; }; export type FlatDiffRemoveUnionMember = FlatDiffItem & FlatDiffItemCoordinate & FlatDiffItemValue & { __typename?: 'FlatDiffRemoveUnionMember'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; - value: Scalars['String']; + value: Scalars['String']['output']; }; export type FlatDiffRemoveValidLocation = FlatDiffItem & FlatDiffItemCoordinate & FlatDiffItemValue & { __typename?: 'FlatDiffRemoveValidLocation'; - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; type: FlatDiffType; - value: Scalars['String']; + value: Scalars['String']['output']; }; export type FlatDiffResult = FlatDiff | NotFoundError | SchemaValidationError; @@ -5538,97 +6834,64 @@ export enum FlatDiffType { export type FlatDiffTypeSummary = { __typename?: 'FlatDiffTypeSummary'; - add: Scalars['Int']; - change: Scalars['Int']; - remove: Scalars['Int']; - typeCount: Scalars['Int']; -}; - -/** Error connecting to Fly */ -export type FlyClientError = { - __typename?: 'FlyClientError'; - /** Error message */ - message: Scalars['String']; -}; - -/** Error triggering a rolling update */ -export type FlyForceRollingUpdateError = { - __typename?: 'FlyForceRollingUpdateError'; - /** Concrete error for the flyForceRollingUpdate mutation */ - error: FlyForceRollingUpdateErrorValue; -}; - -/** Concrete error for the flyForceRollingUpdate mutation */ -export type FlyForceRollingUpdateErrorValue = FlyClientError | InvalidRequest; - -/** Result of a flyForceRollingUpdate mutation */ -export type FlyForceRollingUpdateResult = FlyForceRollingUpdateError | FlyForceRollingUpdateSuccess; - -/** Success triggering a rolling update */ -export type FlyForceRollingUpdateSuccess = { - __typename?: 'FlyForceRollingUpdateSuccess'; - /** Whether the app was updated */ - updated: Scalars['Boolean']; -}; - -export type FlyRouterMutation = { - __typename?: 'FlyRouterMutation'; - /** Force a rolling update */ - forceRollingUpdate: FlyForceRollingUpdateResult; + add: Scalars['Int']['output']; + change: Scalars['Int']['output']; + remove: Scalars['Int']['output']; + typeCount: Scalars['Int']['output']; }; /** Fly-specific information for a Shard */ export type FlyShard = { __typename?: 'FlyShard'; /** DNS endpoint for the orchestrator */ - endpoint: Scalars['String']; + endpoint: Scalars['String']['output']; /** Endpoints of the Etcd cluster */ - etcdEndpoints: Array; + etcdEndpoints: Array; /** Fly organization ID */ - organizationId: Scalars['String']; + organizationId: Scalars['String']['output']; }; -export type GQLBillingPlanFromGrpc = { +export type GqlBillingPlanFromGrpc = { __typename?: 'GQLBillingPlanFromGrpc'; dbPlan?: Maybe; - matchesDbPlan?: Maybe; - rawProtoJson?: Maybe; + matchesDbPlan?: Maybe; + rawProtoJson?: Maybe; }; export type GeneralProposalComment = { - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; /** null if the user is deleted */ createdBy?: Maybe; - id: Scalars['ID']; - message: Scalars['String']; + id: Scalars['ID']['output']; + message: Scalars['String']['output']; status: CommentStatus; /** null if never updated */ - updatedAt?: Maybe; + updatedAt?: Maybe; }; export type GitContext = { __typename?: 'GitContext'; - branch?: Maybe; - commit?: Maybe; - commitUrl?: Maybe; - committer?: Maybe; - message?: Maybe; + branch?: Maybe; + commit?: Maybe; + commitUrl?: Maybe; + committer?: Maybe; + message?: Maybe; remoteHost?: Maybe; - remoteUrl?: Maybe; + remoteUrl?: Maybe; }; /** This is stored with a schema when it is uploaded */ export type GitContextInput = { /** The Git repository branch used in the check. */ - branch?: InputMaybe; + branch?: InputMaybe; /** The ID of the Git commit used in the check. */ - commit?: InputMaybe; + commit?: InputMaybe; /** The username of the user who created the Git commit used in the check. */ - committer?: InputMaybe; + committer?: InputMaybe; /** The commit message of the Git commit used in the check. */ - message?: InputMaybe; + message?: InputMaybe; /** The Git repository's remote URL. */ - remoteUrl?: InputMaybe; + remoteUrl?: InputMaybe; }; export enum GitRemoteHost { @@ -5644,25 +6907,25 @@ export enum GitRemoteHost { export type GraphApiKey = ApiKey & { __typename?: 'GraphApiKey'; /** The timestamp when the API key was created. */ - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; /** Details of the user or graph that created the API key. */ createdBy?: Maybe; /** The API key's ID. */ - id: Scalars['ID']; + id: Scalars['ID']['output']; /** The API key's name, for distinguishing it from other keys. */ - keyName?: Maybe; + keyName?: Maybe; /** The permission level assigned to the API key upon creation. */ role: UserPermission; /** The value of the API key. **This is a secret credential!** */ - token: Scalars['String']; + token: Scalars['String']['output']; }; export type GraphCapabilities = { __typename?: 'GraphCapabilities'; /** False if this graph is a cloud supergraph. */ - canPublishMonograph: Scalars['Boolean']; + canPublishMonograph: Scalars['Boolean']['output']; /** Currently, graph URL is not updatable for cloud supergraphs. */ - canUpdateURL: Scalars['Boolean']; + canUpdateURL: Scalars['Boolean']['output']; /** Minimum Federation Version track required for all variants of this graph. */ minimumBuildPipelineTrack: BuildPipelineTrack; }; @@ -5670,7 +6933,7 @@ export type GraphCapabilities = { /** The timing details for the build step of a launch. */ export type GraphCreationError = { __typename?: 'GraphCreationError'; - message: Scalars['String']; + message: Scalars['String']['output']; }; export type GraphCreationResult = GraphCreationError | Service; @@ -5690,11 +6953,11 @@ export type GraphImplementors = FederatedImplementingServices | NonFederatedImpl export type GraphLinterConfiguration = { __typename?: 'GraphLinterConfiguration'; /** The set of @tag names allowed in the schema. */ - allowedTagNames: Array; + allowedTagNames: Array; /** Whether to ignore @deprecated elements from linting violations. */ - ignoreDeprecated: Scalars['Boolean']; + ignoreDeprecated: Scalars['Boolean']['output']; /** Whether to ignore @inaccessible elements from linting violations. */ - ignoreInaccessible: Scalars['Boolean']; + ignoreInaccessible: Scalars['Boolean']['output']; /** The set of lint rules configured for this graph. */ rules: Array; }; @@ -5702,22 +6965,22 @@ export type GraphLinterConfiguration = { /** The changes to the linter configuration for this graph. */ export type GraphLinterConfigurationChangesInput = { /** A set of allowed @tag names to be added to the linting configuration for this graph or null if no changes should be made. */ - allowedTagNameAdditions?: InputMaybe>; + allowedTagNameAdditions?: InputMaybe>; /** A set of @tag names to be removed from the allowed @tag list for this graphs linting configuration or null if no changes should be made. */ - allowedTagNameRemovals?: InputMaybe>; + allowedTagNameRemovals?: InputMaybe>; /** Change whether @deprecated elements should be linted or null if no changes should be made. */ - ignoreDeprecated?: InputMaybe; + ignoreDeprecated?: InputMaybe; /** Change whether @inaccessible elements should be linted or null if no changes should be made. */ - ignoreInaccessible?: InputMaybe; + ignoreInaccessible?: InputMaybe; /** A set of rule changes or null if no changes should be made. */ rules?: InputMaybe>; }; -export type GraphQLDoc = { +export type GraphQlDoc = { __typename?: 'GraphQLDoc'; graph: Service; - hash: Scalars['ID']; - source: Scalars['GraphQLDocument']; + hash: Scalars['ID']['output']; + source: Scalars['GraphQLDocument']['output']; }; /** Various states a graph can be in. */ @@ -5740,81 +7003,103 @@ export type GraphVariant = { /** As new schema tags keep getting published, activeSchemaPublish refers to the latest. */ activeSchemaPublish?: Maybe; /** The list of BuildPipelineTracks and their associated details that this variant is allowed to set in their build configuration. */ - allowedTracks: Array; + allowedTracks: Array>; /** * If this variant doesn't conduct a build (monograph) then this field will be null * For contract variants the build config is set based on the upstream composition variant. */ buildConfig?: Maybe; /** The time the variant's federation version and/or the supported directives was last updated */ - buildConfigUpdatedAt?: Maybe; + buildConfigUpdatedAt?: Maybe; checkConfiguration: VariantCheckConfiguration; /** Compose and filter preview contract schema built from this source variant. */ composeAndFilterPreview?: Maybe; - /** Federation version this variant uses */ - compositionVersion?: Maybe; + /** + * Federation version this variant uses + * @deprecated Use federationVersion instead. + */ + compositionVersion?: Maybe; /** The filter configuration used to build a contract schema. The configuration consists of lists of tags for schema elements to include or exclude in the resulting schema. */ contractFilterConfig?: Maybe; /** * A human-readable description of the filter configuration of this contract variant, or null if this isn't a contract * variant. */ - contractFilterConfigDescription?: Maybe; + contractFilterConfigDescription?: Maybe; /** Preview a Contract schema built from this source variant. */ contractPreview: ContractPreview; + /** + * Returns details about a coordinate in the schema. Unless an error occurs, we will currently always return a non-null + * response here, with the timestamps set to null if there is no usage of the coordinate or if coordinate doesn't exist in the + * schema. However, we are keeping the return type as nullable in case we want to update this later in a + * backwards-compatible way (e.g. a null response meaning that the coordinate doesn't exist in the schema at all). + */ + coordinateInsights?: Maybe; + /** Returns a paginated list of coordinate insights list items, including all coordinates from the active schema for this variant. */ + coordinateInsightsList: GraphVariantCoordinateInsightsListItemConnection; /** Time the variant was created */ - createdAt: Scalars['Timestamp']; - derivedVariantCount: Scalars['Int']; + createdAt: Scalars['Timestamp']['output']; + /** Custom check configuration for this graph. */ + customCheckConfiguration?: Maybe; + derivedVariantCount: Scalars['Int']['output']; /** Returns the list of variants derived from this variant. This currently includes contracts only. */ derivedVariants?: Maybe>; /** A list of the entities across all subgraphs, exposed to consumers & up. This value is null for non-federated variants. */ entities?: Maybe; + /** Returns a paginated list of error insights list items, including service and code for which the error originated from. */ + errorInsightsList: GraphVariantErrorInsightsListItemConnection; + /** Returns a time series list of error counts over time for this variant within a given time range. */ + errorInsightsTimeseries: ErrorInsightsTimeseriesResult; + /** Details about 'enhanced reference' reporting for traces sent to Apollo by Router for this variant. */ + extendedRefsUsage: ExtendedRefsUsage; + /** Federation version this variant uses */ + federationVersion?: Maybe; /** The last instant that field execution information (resolver execution via field-level instrumentation) was reported for this variant */ - fieldExecutionsLastReportedAt?: Maybe; + fieldExecutionsLastReportedAt?: Maybe; /** * Returns details about a field in the schema. Unless an error occurs, we will currently always return a non-null * response here, with the timestamps set to null if there is no usage of the field or if field doesn't exist in the - * schema. However we are keeping the return type as nullable in case we want to update this later in a - * backwards-compatible way to make null mean that the field doesn't exist in the schema at all. + * schema. However, we are keeping the return type as nullable in case we want to update this later in a + * backwards-compatible way (e.g. a null response meaning that the field doesn't exist in the schema at all). */ fieldInsights?: Maybe; /** Returns a paginated list of field insights list items, including all fields from the active schema for this variant. */ fieldInsightsList: GraphVariantFieldInsightsListItemConnection; /** The last instant that field usage information (usage of fields via referencing operations) was reported for this variant */ - fieldUsageLastReportedAt?: Maybe; + fieldUsageLastReportedAt?: Maybe; /** The graph that this variant belongs to. */ graph: Service; /** Graph ID of the variant. Prefer using graph { id } when feasible. */ - graphId: Scalars['String']; + graphId: Scalars['String']['output']; /** If the variant has managed subgraphs. */ - hasManagedSubgraphs?: Maybe; + hasManagedSubgraphs?: Maybe; /** * Represents whether this variant has a supergraph schema. Note that this can only be true for variants with build steps * (running e.g. federation composition or contracts filtering). This will be false for a variant with a build step if it * has never successfully published. */ - hasSupergraphSchema: Scalars['Boolean']; + hasSupergraphSchema: Scalars['Boolean']['output']; /** The variant's global identifier in the form `graphID@variant`. */ - id: Scalars['ID']; - internalVariantUUID: Scalars['String']; + id: Scalars['ID']['output']; + internalVariantUUID: Scalars['String']['output']; /** Represents whether this variant is a Contract. */ - isContract?: Maybe; + isContract?: Maybe; /** Is this variant one of the current user's favorite variants? */ - isFavoriteOfCurrentUser: Scalars['Boolean']; + isFavoriteOfCurrentUser: Scalars['Boolean']['output']; /** * If the variant has managed subgraphs. * @deprecated Replaced by hasManagedSubgraphs */ - isFederated?: Maybe; + isFederated?: Maybe; /** Represents whether this variant is a Proposal. */ - isProposal?: Maybe; + isProposal?: Maybe; /** If the variant is protected */ - isProtected: Scalars['Boolean']; - isPublic: Scalars['Boolean']; + isProtected: Scalars['Boolean']['output']; + isPublic: Scalars['Boolean']['output']; /** Represents whether this variant should be listed in the public variants directory. This can only be true if the variant is also public. */ - isPubliclyListed: Scalars['Boolean']; + isPubliclyListed: Scalars['Boolean']['output']; /** Represents whether Apollo has verified the authenticity of this public variant. This can only be true if the variant is also public. */ - isVerified: Scalars['Boolean']; + isVerified: Scalars['Boolean']['output']; /** Latest approved launch for the variant, and what is served through Uplink. */ latestApprovedLaunch?: Maybe; /** Latest launch for the variant, whether successful or not. */ @@ -5826,10 +7111,12 @@ export type GraphVariant = { /** A list of launches ordered by date, asc or desc depending on orderBy. The maximum limit is 100. */ launchHistory?: Maybe>; /** Count of total launch history */ - launchHistoryLength?: Maybe; + launchHistoryLength?: Maybe; + /** A list of launches metadata ordered by date, asc or desc depending on orderBy. The maximum limit is 100. */ + launchSummaries?: Maybe>; links?: Maybe>; /** The variant's name (e.g., `staging`). */ - name: Scalars['String']; + name: Scalars['String']['output']; /** A list of the saved [operation collections](https://www.apollographql.com/docs/studio/explorer/operation-collections/) associated with this variant. */ operationCollections: Array; /** A list of the saved [operation collections](https://www.apollographql.com/docs/studio/explorer/operation-collections/) associated with this variant, paged. */ @@ -5845,22 +7132,29 @@ export type GraphVariant = { /** Generate a federated operation plan for a given operation */ plan?: Maybe; /** Explorer setting for postflight script to run before the actual GraphQL operations is run. */ - postflightScript?: Maybe; + postflightScript?: Maybe; /** Explorer setting for preflight script to run before the actual GraphQL operations is run. */ - preflightScript?: Maybe; + preflightScript?: Maybe; + /** Returns the proposal-related fields for this graph variant if the variant is a proposal; otherwise, returns null. */ proposal?: Maybe; readme: Readme; /** Registry stats for this particular graph variant */ registryStatsWindow?: Maybe; /** The total number of requests for this variant in the last 24 hours */ - requestsInLastDay?: Maybe; + requestsInLastDay?: Maybe; /** Router associated with this graph variant */ router?: Maybe; - routerConfig?: Maybe; + routerConfig?: Maybe; + /** The first time the Router reported usage of this variant to Apollo. */ + routerFirstSeenAt?: Maybe; + /** The last time the Router reported usage of this variant to Apollo. */ + routerLastSeenAt?: Maybe; + /** The list of rule enforcements for this variant, if any. */ + ruleEnforcements: Array; /** If the graphql endpoint is set up to accept cookies. */ - sendCookies?: Maybe; + sendCookies?: Maybe; /** Explorer setting for shared headers for a graph */ - sharedHeaders?: Maybe; + sharedHeaders?: Maybe; /** The variant this variant is derived from. This property currently only exists on contract variants. */ sourceVariant?: Maybe; /** Returns the details of the subgraph with the provided `name`, or null if this variant doesn't include a subgraph with that name. */ @@ -5868,130 +7162,254 @@ export type GraphVariant = { /** A list of the subgraphs included in this variant. This value is null for non-federated variants. Set `includeDeleted` to `true` to include deleted subgraphs. */ subgraphs?: Maybe>; /** The URL of the variant's GraphQL endpoint for subscription operations. */ - subscriptionUrl?: Maybe; + subscriptionUrl?: Maybe; /** A list of supported directives */ supportedDirectives?: Maybe>; + /** Returns the top N operations by a few different metrics */ + topNOperations: TopNOperationsResult; + /** + * Returns a list of the top operations reported for this variant within a given time range. This API is rate limited, + * and will return an error if too many requests are made for a graph. + */ + topOperationsReport: Array; /** * A list of the subgraphs that have been published to since the variant was created. * Does not include subgraphs that were created & deleted since the variant was created. + * + * TODO: @deprecated(reason: "use GraphVariant.updatedSubgraphsSinceCreation instead") */ updatedSubgraphs?: Maybe>; + /** A list of the subgraphs that have been published to since the variant was created. Does not include subgraphs that were created & deleted since the variant was created since that is not a change compared to initial; however includes subgraphs that were only deleted because that is a change compared to the initial. */ + updatedSubgraphsSinceCreation?: Maybe>; /** The URL of the variant's GraphQL endpoint for query and mutation operations. For subscription operations, use `subscriptionUrl`. */ - url?: Maybe; + url?: Maybe; /** The last instant that usage information (e.g. operation stat, client stats) was reported for this variant */ - usageLastReportedAt?: Maybe; + usageLastReportedAt?: Maybe; /** Validate router configuration for this graph variant */ validateRouter: CloudValidationResult; }; /** A graph variant */ -export type GraphVariantcomposeAndFilterPreviewArgs = { +export type GraphVariantComposeAndFilterPreviewArgs = { filterConfig?: InputMaybe; subgraphChanges?: InputMaybe>; }; /** A graph variant */ -export type GraphVariantcontractPreviewArgs = { +export type GraphVariantContractPreviewArgs = { filters: FilterConfigInput; }; /** A graph variant */ -export type GraphVariantfieldInsightsArgs = { - fieldName: Scalars['String']; - parentType: Scalars['String']; +export type GraphVariantCoordinateInsightsArgs = { + coordinateKind: CoordinateKind; + namedAttribute: Scalars['String']['input']; + namedType: Scalars['String']['input']; +}; + + +/** A graph variant */ +export type GraphVariantCoordinateInsightsListArgs = { + after?: InputMaybe; + before?: InputMaybe; + filter?: InputMaybe; + first?: InputMaybe; + from: Scalars['Timestamp']['input']; + last?: InputMaybe; + orderBy?: InputMaybe; + to: Scalars['Timestamp']['input']; }; /** A graph variant */ -export type GraphVariantfieldInsightsListArgs = { - after?: InputMaybe; - before?: InputMaybe; +export type GraphVariantErrorInsightsListArgs = { + after?: InputMaybe; + before?: InputMaybe; + filter?: InputMaybe; + first?: InputMaybe; + from: Scalars['Timestamp']['input']; + groupBy?: InputMaybe>; + last?: InputMaybe; + orderBy?: InputMaybe; + to: Scalars['Timestamp']['input']; +}; + + +/** A graph variant */ +export type GraphVariantErrorInsightsTimeseriesArgs = { + filter?: InputMaybe; + from: Scalars['Timestamp']['input']; + groupBy: ErrorInsightsListGroupByColumn; + resolution: Resolution; + to: Scalars['Timestamp']['input']; +}; + + +/** A graph variant */ +export type GraphVariantFieldInsightsArgs = { + fieldName: Scalars['String']['input']; + parentType: Scalars['String']['input']; +}; + + +/** A graph variant */ +export type GraphVariantFieldInsightsListArgs = { + after?: InputMaybe; + before?: InputMaybe; filter?: InputMaybe; - first?: InputMaybe; - from: Scalars['Timestamp']; - last?: InputMaybe; + first?: InputMaybe; + from: Scalars['Timestamp']['input']; + last?: InputMaybe; orderBy?: InputMaybe; - to: Scalars['Timestamp']; + to: Scalars['Timestamp']['input']; }; /** A graph variant */ -export type GraphVariantlaunchArgs = { - id: Scalars['ID']; +export type GraphVariantLaunchArgs = { + id: Scalars['ID']['input']; }; /** A graph variant */ -export type GraphVariantlaunchHistoryArgs = { - limit?: Scalars['Int']; - offset?: Scalars['Int']; +export type GraphVariantLaunchHistoryArgs = { + limit?: Scalars['Int']['input']; + offset?: Scalars['Int']['input']; orderBy?: LaunchHistoryOrder; }; /** A graph variant */ -export type GraphVariantoperationCollectionsConnectionArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; +export type GraphVariantLaunchSummariesArgs = { + limit?: Scalars['Int']['input']; + offset?: Scalars['Int']['input']; + orderBy?: LaunchHistoryOrder; }; /** A graph variant */ -export type GraphVariantoperationInsightsListArgs = { - after?: InputMaybe; - before?: InputMaybe; +export type GraphVariantOperationCollectionsConnectionArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; +}; + + +/** A graph variant */ +export type GraphVariantOperationInsightsListArgs = { + after?: InputMaybe; + before?: InputMaybe; filter?: InputMaybe; - first?: InputMaybe; - from: Scalars['Timestamp']; - last?: InputMaybe; + first?: InputMaybe; + from: Scalars['Timestamp']['input']; + last?: InputMaybe; orderBy?: InputMaybe; - to: Scalars['Timestamp']; + to: Scalars['Timestamp']['input']; }; /** A graph variant */ -export type GraphVariantoperationsCheckConfigurationArgs = { +export type GraphVariantOperationsCheckConfigurationArgs = { overrides?: InputMaybe; }; /** A graph variant */ -export type GraphVariantplanArgs = { - document: Scalars['GraphQLDocument']; - operationName?: InputMaybe; +export type GraphVariantPlanArgs = { + document: Scalars['GraphQLDocument']['input']; + operationName?: InputMaybe; }; /** A graph variant */ -export type GraphVariantregistryStatsWindowArgs = { - from: Scalars['Timestamp']; +export type GraphVariantRegistryStatsWindowArgs = { + from: Scalars['Timestamp']['input']; resolution?: InputMaybe; - to?: InputMaybe; + to?: InputMaybe; +}; + + +/** A graph variant */ +export type GraphVariantSubgraphArgs = { + name: Scalars['ID']['input']; }; /** A graph variant */ -export type GraphVariantsubgraphArgs = { - name: Scalars['ID']; +export type GraphVariantSubgraphsArgs = { + includeDeleted?: Scalars['Boolean']['input']; }; /** A graph variant */ -export type GraphVariantsubgraphsArgs = { - includeDeleted?: Scalars['Boolean']; +export type GraphVariantTopNOperationsArgs = { + filter?: InputMaybe; + from: Scalars['Timestamp']['input']; + to: Scalars['Timestamp']['input']; + topN?: InputMaybe; }; /** A graph variant */ -export type GraphVariantvalidateRouterArgs = { +export type GraphVariantTopOperationsReportArgs = { + filter?: InputMaybe; + from: Scalars['Timestamp']['input']; + limit?: Scalars['Int']['input']; + orderBy?: InputMaybe; + to: Scalars['Timestamp']['input']; +}; + + +/** A graph variant */ +export type GraphVariantValidateRouterArgs = { config: RouterConfigInput; }; +export type GraphVariantCoordinateInsightsListItemConnection = { + __typename?: 'GraphVariantCoordinateInsightsListItemConnection'; + /** A list of edges from the graph variant to its coordinate insights list items. */ + edges?: Maybe>; + /** A list of coordinate insights list items that belong to a graph variant. */ + nodes?: Maybe>; + /** Information to aid in pagination. */ + pageInfo: CoordinateInsightsListPageInfo; + /** The total number of coordinate insights list items connected to the graph variant */ + totalCount: Scalars['Int']['output']; +}; + +/** An edge between a graph variant and a coordinate insights list item. */ +export type GraphVariantCoordinateInsightsListItemEdge = { + __typename?: 'GraphVariantCoordinateInsightsListItemEdge'; + /** A cursor for use in pagination. */ + cursor: Scalars['String']['output']; + /** A coordinate insights list item attached to the graph variant. */ + node?: Maybe; +}; + +export type GraphVariantErrorInsightsListItemConnection = { + __typename?: 'GraphVariantErrorInsightsListItemConnection'; + /** A list of edges from the graph variant to its error insights list items. */ + edges?: Maybe>; + /** A list of error insights list items that belong to a graph variant. */ + nodes?: Maybe>; + /** Information to aid in pagination. */ + pageInfo: ErrorInsightsListPageInfo; + /** The total number of error insights list items connected to the graph variant. */ + totalCount: Scalars['Int']['output']; +}; + +export type GraphVariantErrorInsightsListItemEdge = { + __typename?: 'GraphVariantErrorInsightsListItemEdge'; + /** A cursor for use in pagination. */ + cursor: Scalars['String']['output']; + /** A error insights list items attached to the graph variant. */ + node?: Maybe; +}; + export type GraphVariantFieldInsightsListItemConnection = { __typename?: 'GraphVariantFieldInsightsListItemConnection'; /** A list of edges from the graph variant to its field insights list items. */ @@ -6001,14 +7419,14 @@ export type GraphVariantFieldInsightsListItemConnection = { /** Information to aid in pagination. */ pageInfo: FieldInsightsListPageInfo; /** The total number of field insights list items connected to the graph variant */ - totalCount: Scalars['Int']; + totalCount: Scalars['Int']['output']; }; /** An edge between a graph variant and a field insights list item. */ export type GraphVariantFieldInsightsListItemEdge = { __typename?: 'GraphVariantFieldInsightsListItemEdge'; /** A cursor for use in pagination. */ - cursor: Scalars['String']; + cursor: Scalars['String']['output']; /** A field insights list item attached to the graph variant. */ node?: Maybe; }; @@ -6030,17 +7448,30 @@ export type GraphVariantMutation = { addLinkToVariant: GraphVariant; buildConfig?: Maybe; createRouter: CreateRouterResult; + /** + * Callback mutation for submitting custom check results once your validation has run. + * Results are returned with the SUCCESS or FAILURE of your validations, the task and workflow ids + * to associate results, with and an optional list of violations to provide more details to users. + * The Schema Check will wait for this response for 10 minutes and not complete until the results are returned. + * After 10 minutes have passed without a callback request being received, the task will be marked as timed out. + */ + customCheckCallback: CustomCheckCallbackResult; /** Delete the variant. */ delete: DeleteSchemaTagResult; destroyRouter: DestroyRouterResult; /** Graph ID of the variant */ - graphId: Scalars['String']; + graphId: Scalars['String']['output']; /** Global identifier for the graph variant, in the form `graph@variant`. */ - id: Scalars['ID']; - internalVariantUUID: Scalars['String']; + id: Scalars['ID']['output']; + internalVariantUUID: Scalars['String']['output']; + /** Links a specified PersistedQueryList to the variant of the parent GraphVariantMutation. */ linkPersistedQueryList: LinkPersistedQueryListResultOrError; /** Name of the variant, like `variant`. */ - name: Scalars['String']; + name: Scalars['String']['output']; + /** Provides access to mutation fields for modifying a GraphOS Schema Proposal, if this GraphVariant is a proposal variant; else returns NotFoundError. Learn more at https://www.apollographql.com/docs/graphos/delivery/schema-proposals */ + proposal: ProposalMutationResult; + /** Send a custom check request with a fake task id to your configured endpoint. */ + queueTestCustomChecksRequest: QueueTestCustomChecksRequestResult; relaunch: RelaunchResult; removeLinkFromVariant: GraphVariant; /** Gets the router attached to a graph variant */ @@ -6049,6 +7480,7 @@ export type GraphVariantMutation = { /** Mutation called by CheckCoordinator to find associated proposals to the schema diffs in a check workflow */ runProposalsCheck: CheckStepResult; service: Service; + setCustomCheckConfiguration: CustomCheckConfigurationResult; setIsFavoriteOfCurrentUser: GraphVariant; /** * _Asynchronously_ kicks off operation checks for a proposed non-federated @@ -6056,6 +7488,8 @@ export type GraphVariantMutation = { * * Returns a `CheckRequestSuccess` object with a workflow ID that you can use * to check status, or an error object if the checks workflow failed to start. + * + * Rate limited to 3000 per min. Schema checks cannot be performed on contract variants. */ submitCheckSchemaAsync: CheckRequestResult; /** Submit a request for a Filter Schema Check and receive a result with a workflow ID that can be used to check status, or an error message that explains what went wrong. */ @@ -6066,7 +7500,7 @@ export type GraphVariantMutation = { * Returns a `CheckRequestSuccess` object with a workflow ID that you can use * to check status, or an error object if the checks workflow failed to start. * - * Rate limited to 5k per min. + * Rate limited to 3000 per min. Subgraph checks cannot be performed on contract variants. */ submitMultiSubgraphCheckAsync: CheckRequestResult; /** @@ -6075,15 +7509,21 @@ export type GraphVariantMutation = { * Returns a `CheckRequestSuccess` object with a workflow ID that you can use * to check status, or an error object if the checks workflow failed to start. * - * Rate limited to 5k per min. + * Rate limited to 3000 per min. Subgraph checks cannot be performed on contract variants. */ submitSubgraphCheckAsync: CheckRequestResult; + /** Triggers the Proposals implementation check for active proposals that are sourced from this variant for a given graph composition id */ + triggerProposalsImplementationHandler?: Maybe; + /** Unlinks a specified PersistedQueryList from the variant of the parent GraphVariantMutation. */ unlinkPersistedQueryList: UnlinkPersistedQueryListResultOrError; + updateCheckConfigurationCustomChecks: VariantCheckConfiguration; + updateCheckConfigurationDowngradeChecks: VariantCheckConfiguration; updateCheckConfigurationDownstreamVariants: VariantCheckConfiguration; updateCheckConfigurationEnableOperationsCheck?: Maybe; updateCheckConfigurationExcludedClients: VariantCheckConfiguration; updateCheckConfigurationExcludedOperations: VariantCheckConfiguration; updateCheckConfigurationIncludedVariants: VariantCheckConfiguration; + updateCheckConfigurationProposalChangeMismatchSeverity: VariantCheckConfiguration; updateCheckConfigurationTimeRange: VariantCheckConfiguration; updateIsProtected?: Maybe; updatePostflightScript?: Maybe; @@ -6093,208 +7533,257 @@ export type GraphVariantMutation = { updateSharedHeaders?: Maybe; updateSubscriptionURL?: Maybe; updateURL?: Maybe; + /** Updates the [federation version](https://www.apollographql.com/docs/graphos/reference/router/federation-version-support) of this variant */ + updateVariantFederationVersion?: Maybe; updateVariantIsPublic?: Maybe; updateVariantIsPubliclyListed?: Maybe; updateVariantIsVerified?: Maybe; /** Updates the [README](https://www.apollographql.com/docs/studio/org/graphs/#the-readme-page) of this variant. */ updateVariantReadme?: Maybe; upsertRouterConfig?: Maybe; + variant: GraphVariant; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationaddLinkToVariantArgs = { - title?: InputMaybe; +export type GraphVariantMutationAddLinkToVariantArgs = { + title?: InputMaybe; type: LinkInfoType; - url: Scalars['String']; + url: Scalars['String']['input']; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationbuildConfigArgs = { - tagInApiSchema?: Scalars['Boolean']; +export type GraphVariantMutationBuildConfigArgs = { + skipLaunch?: InputMaybe; + tagInApiSchema?: Scalars['Boolean']['input']; version: BuildPipelineTrack; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationcreateRouterArgs = { +export type GraphVariantMutationCreateRouterArgs = { input: CreateRouterInput; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationlinkPersistedQueryListArgs = { - persistedQueryListId: Scalars['ID']; +export type GraphVariantMutationCustomCheckCallbackArgs = { + input: CustomCheckCallbackInput; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationremoveLinkFromVariantArgs = { - linkInfoId: Scalars['ID']; +export type GraphVariantMutationLinkPersistedQueryListArgs = { + persistedQueryListId: Scalars['ID']['input']; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationrunLintCheckArgs = { +export type GraphVariantMutationRemoveLinkFromVariantArgs = { + linkInfoId: Scalars['ID']['input']; +}; + + +/** Modifies a variant of a graph, also called a schema tag in parts of our product. */ +export type GraphVariantMutationRunLintCheckArgs = { input: RunLintCheckInput; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationrunProposalsCheckArgs = { +export type GraphVariantMutationRunProposalsCheckArgs = { input: RunProposalsCheckInput; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationsetIsFavoriteOfCurrentUserArgs = { - favorite: Scalars['Boolean']; +export type GraphVariantMutationSetCustomCheckConfigurationArgs = { + input: SetCustomCheckConfigurationInput; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationsubmitCheckSchemaAsyncArgs = { +export type GraphVariantMutationSetIsFavoriteOfCurrentUserArgs = { + favorite: Scalars['Boolean']['input']; +}; + + +/** Modifies a variant of a graph, also called a schema tag in parts of our product. */ +export type GraphVariantMutationSubmitCheckSchemaAsyncArgs = { input: CheckSchemaAsyncInput; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationsubmitFilterCheckAsyncArgs = { +export type GraphVariantMutationSubmitFilterCheckAsyncArgs = { input: FilterCheckAsyncInput; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationsubmitMultiSubgraphCheckAsyncArgs = { +export type GraphVariantMutationSubmitMultiSubgraphCheckAsyncArgs = { input: MultiSubgraphCheckAsyncInput; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationsubmitSubgraphCheckAsyncArgs = { +export type GraphVariantMutationSubmitSubgraphCheckAsyncArgs = { input: SubgraphCheckAsyncInput; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationupdateCheckConfigurationDownstreamVariantsArgs = { - blockingDownstreamVariants?: InputMaybe>; +export type GraphVariantMutationTriggerProposalsImplementationHandlerArgs = { + graphCompositionId: Scalars['ID']['input']; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationupdateCheckConfigurationEnableOperationsCheckArgs = { - enabled: Scalars['Boolean']; +export type GraphVariantMutationUpdateCheckConfigurationCustomChecksArgs = { + enableCustomChecks?: InputMaybe; + useGraphSettings: Scalars['Boolean']['input']; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationupdateCheckConfigurationExcludedClientsArgs = { - appendGraphSettings: Scalars['Boolean']; +export type GraphVariantMutationUpdateCheckConfigurationDowngradeChecksArgs = { + downgradeDefaultValueChange?: InputMaybe; + downgradeStaticChecks?: InputMaybe; + useGraphSettings: Scalars['Boolean']['input']; +}; + + +/** Modifies a variant of a graph, also called a schema tag in parts of our product. */ +export type GraphVariantMutationUpdateCheckConfigurationDownstreamVariantsArgs = { + blockingDownstreamVariants?: InputMaybe>; +}; + + +/** Modifies a variant of a graph, also called a schema tag in parts of our product. */ +export type GraphVariantMutationUpdateCheckConfigurationEnableOperationsCheckArgs = { + enabled: Scalars['Boolean']['input']; +}; + + +/** Modifies a variant of a graph, also called a schema tag in parts of our product. */ +export type GraphVariantMutationUpdateCheckConfigurationExcludedClientsArgs = { + appendGraphSettings: Scalars['Boolean']['input']; excludedClients?: InputMaybe>; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationupdateCheckConfigurationExcludedOperationsArgs = { - appendGraphSettings: Scalars['Boolean']; +export type GraphVariantMutationUpdateCheckConfigurationExcludedOperationsArgs = { + appendGraphSettings: Scalars['Boolean']['input']; excludedOperationNames?: InputMaybe>; excludedOperations?: InputMaybe>; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationupdateCheckConfigurationIncludedVariantsArgs = { - includedVariants?: InputMaybe>; - useGraphSettings: Scalars['Boolean']; +export type GraphVariantMutationUpdateCheckConfigurationIncludedVariantsArgs = { + includedVariants?: InputMaybe>; + useGraphSettings: Scalars['Boolean']['input']; +}; + + +/** Modifies a variant of a graph, also called a schema tag in parts of our product. */ +export type GraphVariantMutationUpdateCheckConfigurationProposalChangeMismatchSeverityArgs = { + proposalChangeMismatchSeverity?: InputMaybe; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationupdateCheckConfigurationTimeRangeArgs = { - operationCountThreshold?: InputMaybe; - operationCountThresholdPercentage?: InputMaybe; - timeRangeSeconds?: InputMaybe; - useGraphSettings: Scalars['Boolean']; +export type GraphVariantMutationUpdateCheckConfigurationTimeRangeArgs = { + operationCountThreshold?: InputMaybe; + operationCountThresholdPercentage?: InputMaybe; + timeRangeSeconds?: InputMaybe; + useGraphSettings: Scalars['Boolean']['input']; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationupdateIsProtectedArgs = { - isProtected: Scalars['Boolean']; +export type GraphVariantMutationUpdateIsProtectedArgs = { + isProtected: Scalars['Boolean']['input']; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationupdatePostflightScriptArgs = { - postflightScript?: InputMaybe; +export type GraphVariantMutationUpdatePostflightScriptArgs = { + postflightScript?: InputMaybe; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationupdatePreflightScriptArgs = { - preflightScript?: InputMaybe; +export type GraphVariantMutationUpdatePreflightScriptArgs = { + preflightScript?: InputMaybe; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationupdateRouterArgs = { +export type GraphVariantMutationUpdateRouterArgs = { input: UpdateRouterInput; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationupdateSendCookiesArgs = { - sendCookies: Scalars['Boolean']; +export type GraphVariantMutationUpdateSendCookiesArgs = { + sendCookies: Scalars['Boolean']['input']; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationupdateSharedHeadersArgs = { - sharedHeaders?: InputMaybe; +export type GraphVariantMutationUpdateSharedHeadersArgs = { + sharedHeaders?: InputMaybe; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationupdateSubscriptionURLArgs = { - subscriptionUrl?: InputMaybe; +export type GraphVariantMutationUpdateSubscriptionUrlArgs = { + subscriptionUrl?: InputMaybe; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationupdateURLArgs = { - url?: InputMaybe; +export type GraphVariantMutationUpdateUrlArgs = { + url?: InputMaybe; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationupdateVariantIsPublicArgs = { - isPublic: Scalars['Boolean']; +export type GraphVariantMutationUpdateVariantFederationVersionArgs = { + version: BuildPipelineTrack; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationupdateVariantIsPubliclyListedArgs = { - isPubliclyListed: Scalars['Boolean']; +export type GraphVariantMutationUpdateVariantIsPublicArgs = { + isPublic: Scalars['Boolean']['input']; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationupdateVariantIsVerifiedArgs = { - isVerified: Scalars['Boolean']; +export type GraphVariantMutationUpdateVariantIsPubliclyListedArgs = { + isPubliclyListed: Scalars['Boolean']['input']; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationupdateVariantReadmeArgs = { - readme: Scalars['String']; +export type GraphVariantMutationUpdateVariantIsVerifiedArgs = { + isVerified: Scalars['Boolean']['input']; }; /** Modifies a variant of a graph, also called a schema tag in parts of our product. */ -export type GraphVariantMutationupsertRouterConfigArgs = { - configuration: Scalars['String']; +export type GraphVariantMutationUpdateVariantReadmeArgs = { + readme: Scalars['String']['input']; +}; + + +/** Modifies a variant of a graph, also called a schema tag in parts of our product. */ +export type GraphVariantMutationUpsertRouterConfigArgs = { + configuration: Scalars['String']['input']; }; export type GraphVariantOperationCollectionConnection = { @@ -6305,14 +7794,14 @@ export type GraphVariantOperationCollectionConnection = { nodes?: Maybe>; /** Information to aid in pagination. */ pageInfo: PageInfo; - totalCount: Scalars['Int']; + totalCount: Scalars['Int']['output']; }; /** An edge between a graph variant and an operation collection. */ export type GraphVariantOperationCollectionEdge = { __typename?: 'GraphVariantOperationCollectionEdge'; /** A cursor for use in pagination. */ - cursor: Scalars['String']; + cursor: Scalars['String']['output']; /** An operation collection attached to a graph variant. */ node?: Maybe; }; @@ -6326,13 +7815,13 @@ export type GraphVariantOperationInsightsListItemConnection = { /** Information to aid in pagination. */ pageInfo: OperationInsightsListPageInfo; /** The total number of operation insights list items connected to the graph variant. */ - totalCount: Scalars['Int']; + totalCount: Scalars['Int']['output']; }; export type GraphVariantOperationInsightsListItemEdge = { __typename?: 'GraphVariantOperationInsightsListItemEdge'; /** A cursor for use in pagination. */ - cursor: Scalars['String']; + cursor: Scalars['String']['output']; /** A operation insights list items attached to the graph variant. */ node?: Maybe; }; @@ -6340,34 +7829,34 @@ export type GraphVariantOperationInsightsListItemEdge = { /** Individual permissions for the current user when interacting with a particular Studio graph variant. */ export type GraphVariantPermissions = { __typename?: 'GraphVariantPermissions'; - canCreateCollectionInVariant: Scalars['Boolean']; + canCreateCollectionInVariant: Scalars['Boolean']['output']; /** If this variant is a Proposal, will match the Proposal.canEditProposal field (can the current user can edit this Proposal either by authorship or role level). False if this GraphVariant is not a Proposal. */ - canEditProposal: Scalars['Boolean']; + canEditProposal: Scalars['Boolean']['output']; /** Whether the currently authenticated user is permitted to manage/update this variant's build configuration (e.g., build pipeline version). */ - canManageBuildConfig: Scalars['Boolean']; + canManageBuildConfig: Scalars['Boolean']['output']; /** Whether the currently authenticated user is permitted to manage/update cloud routers */ - canManageCloudRouter: Scalars['Boolean']; + canManageCloudRouter: Scalars['Boolean']['output']; /** Whether the currently authenticated user is permitted to update variant-level settings for the Apollo Studio Explorer. */ - canManageExplorerSettings: Scalars['Boolean']; + canManageExplorerSettings: Scalars['Boolean']['output']; /** Whether the currently authenticated user is permitted to publish schemas to this variant. */ - canPushSchemas: Scalars['Boolean']; + canPushSchemas: Scalars['Boolean']['output']; /** Whether the currently authenticated user can read any information about this variant. */ - canQuery: Scalars['Boolean']; + canQuery: Scalars['Boolean']['output']; /** Whether the currently authenticated user is permitted to view this variant's build configuration details (e.g., build pipeline version). */ - canQueryBuildConfig: Scalars['Boolean']; + canQueryBuildConfig: Scalars['Boolean']['output']; /** Whether the currently authenticated user is permitted to view details regarding cloud routers */ - canQueryCloudRouter: Scalars['Boolean']; + canQueryCloudRouter: Scalars['Boolean']['output']; /** Whether the currently authenticated user is permitted to view cloud router logs */ - canQueryCloudRouterLogs: Scalars['Boolean']; + canQueryCloudRouterLogs: Scalars['Boolean']['output']; /** Whether the currently authenticated user is permitted to view launch history */ - canQueryLaunches: Scalars['Boolean']; + canQueryLaunches: Scalars['Boolean']['output']; /** Whether the currently authenticated user is permitted to download schemas associated to this variant. */ - canQuerySchemas: Scalars['Boolean']; - canShareCollectionInVariant: Scalars['Boolean']; - canUpdateVariantLinkInfo: Scalars['Boolean']; + canQuerySchemas: Scalars['Boolean']['output']; + canShareCollectionInVariant: Scalars['Boolean']['output']; + canUpdateVariantLinkInfo: Scalars['Boolean']['output']; /** Whether the currently authenticated user is permitted to update the README for this variant. */ - canUpdateVariantReadme: Scalars['Boolean']; - variantId: Scalars['ID']; + canUpdateVariantReadme: Scalars['Boolean']['output']; + variantId: Scalars['ID']['output']; }; /** Columns of GraphosCloudMetrics. */ @@ -6390,63 +7879,63 @@ export enum GraphosCloudMetricsColumn { export type GraphosCloudMetricsDimensions = { __typename?: 'GraphosCloudMetricsDimensions'; - accountId?: Maybe; - agentVersion?: Maybe; - cloudProvider?: Maybe; - routerId?: Maybe; - schemaTag?: Maybe; - serviceId?: Maybe; - tier?: Maybe; + accountId?: Maybe; + agentVersion?: Maybe; + cloudProvider?: Maybe; + routerId?: Maybe; + schemaTag?: Maybe; + serviceId?: Maybe; + tier?: Maybe; }; /** Filter for data in GraphosCloudMetrics. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type GraphosCloudMetricsFilter = { /** Selects rows whose accountId dimension equals the given value if not null. To query for the null value, use {in: {accountId: [null]}} instead. */ - accountId?: InputMaybe; + accountId?: InputMaybe; /** Selects rows whose agentVersion dimension equals the given value if not null. To query for the null value, use {in: {agentVersion: [null]}} instead. */ - agentVersion?: InputMaybe; + agentVersion?: InputMaybe; and?: InputMaybe>; /** Selects rows whose cloudProvider dimension equals the given value if not null. To query for the null value, use {in: {cloudProvider: [null]}} instead. */ - cloudProvider?: InputMaybe; + cloudProvider?: InputMaybe; in?: InputMaybe; not?: InputMaybe; or?: InputMaybe>; /** Selects rows whose routerId dimension equals the given value if not null. To query for the null value, use {in: {routerId: [null]}} instead. */ - routerId?: InputMaybe; + routerId?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */ - serviceId?: InputMaybe; + serviceId?: InputMaybe; /** Selects rows whose tier dimension equals the given value if not null. To query for the null value, use {in: {tier: [null]}} instead. */ - tier?: InputMaybe; + tier?: InputMaybe; }; /** Filter for data in GraphosCloudMetrics. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type GraphosCloudMetricsFilterIn = { /** Selects rows whose accountId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - accountId?: InputMaybe>>; + accountId?: InputMaybe>>; /** Selects rows whose agentVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - agentVersion?: InputMaybe>>; + agentVersion?: InputMaybe>>; /** Selects rows whose cloudProvider dimension is in the given list. A null value in the list means a row with null for that dimension. */ - cloudProvider?: InputMaybe>>; + cloudProvider?: InputMaybe>>; /** Selects rows whose routerId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - routerId?: InputMaybe>>; + routerId?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - serviceId?: InputMaybe>>; + serviceId?: InputMaybe>>; /** Selects rows whose tier dimension is in the given list. A null value in the list means a row with null for that dimension. */ - tier?: InputMaybe>>; + tier?: InputMaybe>>; }; export type GraphosCloudMetricsMetrics = { __typename?: 'GraphosCloudMetricsMetrics'; - responseSize: Scalars['Long']; - responseSizeThrottled: Scalars['Long']; - routerOperations: Scalars['Long']; - routerOperationsThrottled: Scalars['Long']; - subgraphFetches: Scalars['Long']; - subgraphFetchesThrottled: Scalars['Long']; + responseSize: Scalars['Long']['output']; + responseSizeThrottled: Scalars['Long']['output']; + routerOperations: Scalars['Long']['output']; + routerOperationsThrottled: Scalars['Long']['output']; + subgraphFetches: Scalars['Long']['output']; + subgraphFetchesThrottled: Scalars['Long']['output']; }; export type GraphosCloudMetricsOrderBySpec = { @@ -6461,10 +7950,10 @@ export type GraphosCloudMetricsRecord = { /** Metrics of GraphosCloudMetrics that can be aggregated over. */ metrics: GraphosCloudMetricsMetrics; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; }; -export enum HTTPMethod { +export enum HttpMethod { CONNECT = 'CONNECT', DELETE = 'DELETE', GET = 'GET', @@ -6483,9 +7972,9 @@ export type HistoricQueryParameters = { excludedClients?: InputMaybe>; /** A list of operation names to filter out during validation. */ excludedOperationNames?: InputMaybe>; - from?: InputMaybe; + from?: InputMaybe; /** A list of operation IDs to filter out during validation. */ - ignoredOperations?: InputMaybe>; + ignoredOperations?: InputMaybe>; /** * A list of variants to include in the validation. If no variants are provided * then this defaults to the "current" variant along with the base variant. The @@ -6494,16 +7983,16 @@ export type HistoricQueryParameters = { * same as null inside of `in`, and 'current') in this metrics fetch. This strategy * supports users who have not tagged their metrics or schema. */ - includedVariants?: InputMaybe>; + includedVariants?: InputMaybe>; /** Minimum number of requests within the window for a query to be considered. */ - queryCountThreshold?: InputMaybe; + queryCountThreshold?: InputMaybe; /** * Number of requests within the window for a query to be considered, relative to * total request count. Expected values are between 0 and 0.05 (minimum 5% of total * request volume) */ - queryCountThresholdPercentage?: InputMaybe; - to?: InputMaybe; + queryCountThresholdPercentage?: InputMaybe; + to?: InputMaybe; }; /** Input type to provide when specifying configuration details for schema checks. */ @@ -6513,17 +8002,17 @@ export type HistoricQueryParametersInput = { /** Operations to be ignored in this schema check, specified by operation name. */ excludedOperationNames?: InputMaybe>; /** Start time for operations to be checked against. Specified as either a) an ISO formatted date/time string or b) a negative number of seconds relative to the time the check request was submitted. */ - from?: InputMaybe; + from?: InputMaybe; /** Operations to be ignored in this schema check, specified by ID. */ - ignoredOperations?: InputMaybe>; + ignoredOperations?: InputMaybe>; /** Graph variants to be included in check. */ - includedVariants?: InputMaybe>; + includedVariants?: InputMaybe>; /** Maximum number of queries to be checked against the change. */ - queryCountThreshold?: InputMaybe; + queryCountThreshold?: InputMaybe; /** Only fail check if this percentage of operations would be negatively impacted. */ - queryCountThresholdPercentage?: InputMaybe; + queryCountThresholdPercentage?: InputMaybe; /** End time for operations to be checked against. Specified as either a) an ISO formatted date/time string or b) a negative number of seconds relative to the time the check request was submitted. */ - to?: InputMaybe; + to?: InputMaybe; }; /** An identity (such as a `User` or `Graph`) in Apollo Studio. See implementing types for details. */ @@ -6531,18 +8020,18 @@ export type Identity = { /** Returns a representation of the identity as an `Actor` type. */ asActor: Actor; /** The identity's identifier, which is unique among objects of its type. */ - id: Scalars['ID']; + id: Scalars['ID']['output']; /** The identity's human-readable name. */ - name: Scalars['String']; + name: Scalars['String']['output']; }; /** An actor's identity and info about the client they used to perform the action */ export type IdentityAndClientInfo = { __typename?: 'IdentityAndClientInfo'; /** Client name provided when the actor performed the action */ - clientName?: Maybe; + clientName?: Maybe; /** Client version provided when the actor performed the action */ - clientVersion?: Maybe; + clientVersion?: Maybe; /** Identity info about the actor */ identity?: Maybe; }; @@ -6557,41 +8046,42 @@ export type IgnoreOperationsInChecksResult = { export type IgnoredRule = { __typename?: 'IgnoredRule'; ignoredRule: LintRule; - schemaCoordinate: Scalars['String']; - subgraphName?: Maybe; + schemaCoordinate: Scalars['String']['output']; + subgraphName?: Maybe; }; export type IgnoredRuleInput = { ignoredRule: LintRule; - schemaCoordinate: Scalars['String']; - subgraphName?: InputMaybe; + schemaCoordinate: Scalars['String']['input']; + subgraphName?: InputMaybe; }; /** The location of the implementing service config file in storage */ export type ImplementingServiceLocation = { __typename?: 'ImplementingServiceLocation'; /** The name of the implementing service */ - name: Scalars['String']; + name: Scalars['String']['output']; /** The path in storage to access the implementing service config file */ - path: Scalars['String']; + path: Scalars['String']['output']; }; export type InternalAdminUser = { __typename?: 'InternalAdminUser'; role: InternalMdgAdminRole; - userID: Scalars['String']; + userID: Scalars['String']['output']; }; export type InternalIdentity = Identity & { __typename?: 'InternalIdentity'; accounts: Array; asActor: Actor; - email?: Maybe; - id: Scalars['ID']; - name: Scalars['String']; + email?: Maybe; + id: Scalars['ID']['output']; + name: Scalars['String']['output']; }; export enum InternalMdgAdminRole { + INTERNAL_MDG_ADMIN = 'INTERNAL_MDG_ADMIN', INTERNAL_MDG_READ_ONLY = 'INTERNAL_MDG_READ_ONLY', INTERNAL_MDG_SALES = 'INTERNAL_MDG_SALES', INTERNAL_MDG_SUPER_ADMIN = 'INTERNAL_MDG_SUPER_ADMIN', @@ -6602,23 +8092,23 @@ export enum InternalMdgAdminRole { export type InternalServerError = Error & { __typename?: 'InternalServerError'; /** Message related to the internal error */ - message: Scalars['String']; + message: Scalars['String']['output']; }; export type IntrospectionDirective = { __typename?: 'IntrospectionDirective'; args: Array; - description?: Maybe; + description?: Maybe; locations: Array; - name: Scalars['String']; + name: Scalars['String']['output']; }; export type IntrospectionDirectiveInput = { args: Array; - description?: InputMaybe; - isRepeatable?: InputMaybe; + description?: InputMaybe; + isRepeatable?: InputMaybe; locations: Array; - name: Scalars['String']; + name: Scalars['String']['input']; }; /** __DirectiveLocation introspection type */ @@ -6667,58 +8157,58 @@ export enum IntrospectionDirectiveLocation { export type IntrospectionEnumValue = { __typename?: 'IntrospectionEnumValue'; /** @deprecated Use deprecationReason instead */ - depreactionReason?: Maybe; - deprecationReason?: Maybe; - description?: Maybe; - isDeprecated: Scalars['Boolean']; - name: Scalars['String']; + depreactionReason?: Maybe; + deprecationReason?: Maybe; + description?: Maybe; + isDeprecated: Scalars['Boolean']['output']; + name: Scalars['String']['output']; }; /** __EnumValue introspection type */ export type IntrospectionEnumValueInput = { - deprecationReason?: InputMaybe; - description?: InputMaybe; - isDeprecated: Scalars['Boolean']; - name: Scalars['String']; + deprecationReason?: InputMaybe; + description?: InputMaybe; + isDeprecated: Scalars['Boolean']['input']; + name: Scalars['String']['input']; }; /** Values associated with introspection result for field */ export type IntrospectionField = { __typename?: 'IntrospectionField'; args: Array; - deprecationReason?: Maybe; - description?: Maybe; - isDeprecated: Scalars['Boolean']; - name: Scalars['String']; + deprecationReason?: Maybe; + description?: Maybe; + isDeprecated: Scalars['Boolean']['output']; + name: Scalars['String']['output']; type: IntrospectionType; }; /** __Field introspection type */ export type IntrospectionFieldInput = { args: Array; - deprecationReason?: InputMaybe; - description?: InputMaybe; - isDeprecated: Scalars['Boolean']; - name: Scalars['String']; + deprecationReason?: InputMaybe; + description?: InputMaybe; + isDeprecated: Scalars['Boolean']['input']; + name: Scalars['String']['input']; type: IntrospectionTypeInput; }; /** Values associated with introspection result for an input field */ export type IntrospectionInputValue = { __typename?: 'IntrospectionInputValue'; - defaultValue?: Maybe; - description?: Maybe; - name: Scalars['String']; + defaultValue?: Maybe; + description?: Maybe; + name: Scalars['String']['output']; type: IntrospectionType; }; /** __Value introspection type */ export type IntrospectionInputValueInput = { - defaultValue?: InputMaybe; - deprecationReason?: InputMaybe; - description?: InputMaybe; - isDeprecated?: InputMaybe; - name: Scalars['String']; + defaultValue?: InputMaybe; + deprecationReason?: InputMaybe; + description?: InputMaybe; + isDeprecated?: InputMaybe; + name: Scalars['String']['input']; type: IntrospectionTypeInput; }; @@ -6732,13 +8222,13 @@ export type IntrospectionSchema = { }; -export type IntrospectionSchematypesArgs = { +export type IntrospectionSchemaTypesArgs = { filter?: InputMaybe; }; /** __Schema introspection type */ export type IntrospectionSchemaInput = { - description?: InputMaybe; + description?: InputMaybe; directives: Array; mutationType?: InputMaybe; queryType: IntrospectionTypeRefInput; @@ -6751,37 +8241,37 @@ export type IntrospectionType = { __typename?: 'IntrospectionType'; /** the base kind of the type this references, ignoring lists and nullability */ baseKind?: Maybe; - description?: Maybe; + description?: Maybe; enumValues?: Maybe>; fields?: Maybe>; inputFields?: Maybe>; interfaces?: Maybe>; kind?: Maybe; - name?: Maybe; + name?: Maybe; ofType?: Maybe; possibleTypes?: Maybe>; /** printed representation of type, including nested nullability and list ofTypes */ - printed: Scalars['String']; + printed: Scalars['String']['output']; }; /** Object containing all possible values for an introspectionType */ -export type IntrospectionTypeenumValuesArgs = { - includeDeprecated?: InputMaybe; +export type IntrospectionTypeEnumValuesArgs = { + includeDeprecated?: InputMaybe; }; /** __Type introspection type */ export type IntrospectionTypeInput = { - description?: InputMaybe; + description?: InputMaybe; enumValues?: InputMaybe>; fields?: InputMaybe>; inputFields?: InputMaybe>; interfaces?: InputMaybe>; kind: IntrospectionTypeKind; - name?: InputMaybe; + name?: InputMaybe; ofType?: InputMaybe; possibleTypes?: InputMaybe>; - specifiedByUrl?: InputMaybe; + specifiedByUrl?: InputMaybe; }; export enum IntrospectionTypeKind { @@ -6808,76 +8298,80 @@ export enum IntrospectionTypeKind { /** Shallow __Type introspection type */ export type IntrospectionTypeRefInput = { - kind?: InputMaybe; - name: Scalars['String']; + kind?: InputMaybe; + name: Scalars['String']['input']; }; /** An error caused by providing invalid input for a task, such as schema checks. */ export type InvalidInputError = { __typename?: 'InvalidInputError'; /** The error message. */ - message: Scalars['String']; + message: Scalars['String']['output']; }; /** Generic input error */ export type InvalidInputErrors = Error & { __typename?: 'InvalidInputErrors'; errors: Array; - message: Scalars['String']; + message: Scalars['String']['output']; }; export type InvalidOperation = { __typename?: 'InvalidOperation'; errors?: Maybe>; - signature: Scalars['ID']; + signature: Scalars['ID']['output']; }; /** This object is returned when a request to fetch a Studio graph variant provides an invalid graph ref. */ export type InvalidRefFormat = Error & { __typename?: 'InvalidRefFormat'; - message: Scalars['String']; -}; - -/** Invalid request */ -export type InvalidRequest = { - __typename?: 'InvalidRequest'; - /** Error message */ - message: Scalars['String']; + message: Scalars['String']['output']; }; export type InvalidTarget = Error & { __typename?: 'InvalidTarget'; - message: Scalars['String']; + message: Scalars['String']['output']; }; export type Invoice = { __typename?: 'Invoice'; - closedAt?: Maybe; - collectionMethod?: Maybe; - createdAt: Scalars['Timestamp']; - id: Scalars['ID']; - invoiceNumber: Scalars['Int']; - invoiceNumberV2: Scalars['String']; + closedAt?: Maybe; + collectionMethod?: Maybe; + createdAt: Scalars['Timestamp']['output']; + id: Scalars['ID']['output']; + invoiceNumber: Scalars['Int']['output']; + invoiceNumberV2: Scalars['String']['output']; state: InvoiceState; - totalInCents: Scalars['Int']; - updatedAt: Scalars['Timestamp']; - uuid: Scalars['ID']; + totalInCents: Scalars['Int']['output']; + updatedAt: Scalars['Timestamp']['output']; + uuid: Scalars['ID']['output']; }; export type InvoiceLineItem = { __typename?: 'InvoiceLineItem'; - /** Line items may be grouped to help the customer better understand their charges */ - groupKey?: Maybe; - /** Line items may be grouped to help the customer better understand their charges */ - groupValue?: Maybe; - name: Scalars['String']; + /** + * Line items may be grouped to help the customer better understand their charges + * @deprecated This data came from Metronome and we no longer use Metronome + */ + groupKey?: Maybe; + /** + * Line items may be grouped to help the customer better understand their charges + * @deprecated This data came from Metronome and we no longer use Metronome + */ + groupValue?: Maybe; + /** @deprecated This data came from Metronome and we no longer use Metronome */ + name: Scalars['String']['output']; /** * The quantity of 'things' in this line item. (e.g. number of operations, seats, etc). * May be null for flat charges. + * @deprecated This data came from Metronome and we no longer use Metronome */ - quantity?: Maybe; - /** The amount this line item costs. */ - totalInCents: Scalars['Int']; + quantity?: Maybe; + /** + * The amount this line item costs. + * @deprecated This data came from Metronome and we no longer use Metronome + */ + totalInCents: Scalars['Int']['output']; }; export enum InvoiceState { @@ -6893,33 +8387,33 @@ export enum InvoiceState { export type Launch = { __typename?: 'Launch'; /** The timestamp when the launch was approved. */ - approvedAt?: Maybe; + approvedAt?: Maybe; /** The associated build for this launch (a build includes schema composition and contract filtering). This value is null until the build is initiated. */ build?: Maybe; /** The inputs provided to this launch's associated build, including subgraph schemas and contract filters. */ buildInput: BuildInput; /** The timestamp when the launch completed. This value is null until the launch completes. */ - completedAt?: Maybe; + completedAt?: Maybe; /** The timestamp when the launch was initiated. */ - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; /** Contract launches that were triggered by this launch. */ downstreamLaunches: Array; /** The ID of the launch's associated graph. */ - graphId: Scalars['String']; + graphId: Scalars['String']['output']; /** The name of the launch's associated variant. */ - graphVariant: Scalars['String']; + graphVariant: Scalars['String']['output']; /** The unique identifier for this launch. */ - id: Scalars['ID']; + id: Scalars['ID']['output']; /** Whether the launch completed. */ - isCompleted?: Maybe; + isCompleted?: Maybe; /** Whether the result of the launch has been published to the associated graph and variant. This is always false for a failed launch. */ - isPublished?: Maybe; + isPublished?: Maybe; /** The most recent launch sequence step that has started but not necessarily completed. */ latestSequenceStep?: Maybe; /** Cloud Router order for this launch ID */ order: OrderOrError; orders: Array; - /** The launch right before this one. Null if this is the first on this variant. */ + /** The launch immediately prior to this one. If successOnly is true, returns the most recent successful launch; if false, returns the most recent launch, regardless of success. If no such previous launch exists, returns null. */ previousLaunch?: Maybe; proposalRevision?: Maybe; /** A specific publication of a graph variant pertaining to this launch. */ @@ -6927,24 +8421,30 @@ export type Launch = { /** A list of results from the completed launch. The items included in this list vary depending on whether the launch succeeded, failed, or was superseded. */ results: Array; /** Cloud router configuration associated with this build event. It will be non-null for any cloud-router variant, and null for any not cloudy variant/graph. */ - routerConfig?: Maybe; + routerConfig?: Maybe; schemaTag?: Maybe; /** A list of all serial steps in the launch sequence. This list can change as the launch progresses. For example, a `LaunchCompletedStep` is appended after a launch completes. */ sequence: Array; /** A shortened version of `Launch.id` that includes only the first 8 characters. */ - shortenedID: Scalars['String']; + shortenedID: Scalars['String']['output']; /** The launch's status. If a launch is superseded, its status remains `LAUNCH_INITIATED`. To check for a superseded launch, use `supersededAt`. */ status: LaunchStatus; /** A list of subgraph changes that are included in this launch. */ subgraphChanges?: Maybe>; /** The timestamp when this launch was superseded by another launch. If an active launch is superseded, it terminates. */ - supersededAt?: Maybe; + supersededAt?: Maybe; /** The launch that superseded this launch, if any. If an active launch is superseded, it terminates. */ supersededBy?: Maybe; /** The source variant launch that caused this launch to be initiated. This value is present only for contract variant launches. Otherwise, it's null. */ upstreamLaunch?: Maybe; }; + +/** Represents the complete process of making a set of updates to a deployed graph variant. */ +export type LaunchPreviousLaunchArgs = { + successOnly?: InputMaybe; +}; + export enum LaunchHistoryOrder { CREATED_ASC = 'CREATED_ASC', CREATED_DESC = 'CREATED_DESC' @@ -6957,32 +8457,32 @@ export type LaunchResult = ChangelogLaunchResult; export type LaunchSequenceBuildStep = { __typename?: 'LaunchSequenceBuildStep'; /** The timestamp when the step completed. */ - completedAt?: Maybe; + completedAt?: Maybe; /** The timestamp when the step started. */ - startedAt?: Maybe; + startedAt?: Maybe; }; /** The timing details for the completion step of a launch. */ export type LaunchSequenceCompletedStep = { __typename?: 'LaunchSequenceCompletedStep'; /** The timestamp when the step (and therefore the launch) completed. */ - completedAt?: Maybe; + completedAt?: Maybe; }; /** The timing details for the initiation step of a launch. */ export type LaunchSequenceInitiatedStep = { __typename?: 'LaunchSequenceInitiatedStep'; /** The timestamp when the step (and therefore the launch) started. */ - startedAt?: Maybe; + startedAt?: Maybe; }; /** The timing details for the publish step of a launch. */ export type LaunchSequencePublishStep = { __typename?: 'LaunchSequencePublishStep'; /** The timestamp when the step completed. */ - completedAt?: Maybe; + completedAt?: Maybe; /** The timestamp when the step started. */ - startedAt?: Maybe; + startedAt?: Maybe; }; /** Represents the various steps that occur in sequence during a single launch. */ @@ -6992,7 +8492,7 @@ export type LaunchSequenceStep = LaunchSequenceBuildStep | LaunchSequenceComplet export type LaunchSequenceSupersededStep = { __typename?: 'LaunchSequenceSupersededStep'; /** The timestamp when the step completed, thereby ending the execution of this launch in favor of the superseding launch. */ - completedAt?: Maybe; + completedAt?: Maybe; }; export enum LaunchStatus { @@ -7001,13 +8501,53 @@ export enum LaunchStatus { LAUNCH_INITIATED = 'LAUNCH_INITIATED' } +/** Key information representing the complete process of making a set of updates to a deployed graph variant. */ +export type LaunchSummary = { + __typename?: 'LaunchSummary'; + /** The timestamp when the launch was approved. */ + approvedAt?: Maybe; + /** Identifier of the associated build for this launch. This value is null until the build is initiated. */ + buildID?: Maybe; + /** The inputs provided to this launch's associated build, including subgraph schemas and contract filters. */ + buildInput: BuildInput; + /** The timestamp when the launch completed. This value is null until the launch completes. */ + completedAt?: Maybe; + /** The timestamp when the launch was initiated. */ + createdAt: Scalars['Timestamp']['output']; + /** The ID of the launch's associated graph. */ + graphId: Scalars['String']['output']; + /** The name of the launch's associated variant. */ + graphVariant: Scalars['String']['output']; + /** The unique identifier for this launch. */ + id: Scalars['ID']['output']; + /** A list of results from the completed launch. The items included in this list vary depending on whether the launch succeeded, failed, or was superseded. */ + results: Array; + /** The launch's status. If a launch is superseded, its status remains `LAUNCH_INITIATED`. To check for a superseded launch, use `supersededAt`. */ + status: LaunchStatus; +}; + +export type LaunchTestRouterInput = { + config?: InputMaybe; + provider?: InputMaybe; + routerVersion: Scalars['String']['input']; + tier?: InputMaybe; +}; + +export type LaunchTestRouterResult = CloudRouterTestingInvalidInputErrors | LaunchTestRouterSuccess; + +export type LaunchTestRouterSuccess = { + __typename?: 'LaunchTestRouterSuccess'; + graphRef: Scalars['String']['output']; + jobId: Scalars['ID']['output']; +}; + export type LinkInfo = { __typename?: 'LinkInfo'; - createdAt: Scalars['Timestamp']; - id: Scalars['ID']; - title?: Maybe; + createdAt: Scalars['Timestamp']['output']; + id: Scalars['ID']['output']; + title?: Maybe; type: LinkInfoType; - url: Scalars['String']; + url: Scalars['String']['output']; }; export enum LinkInfoType { @@ -7022,17 +8562,18 @@ export type LinkPersistedQueryListResult = { persistedQueryList: PersistedQueryList; }; +/** The result/error union returned by GraphVariantMutation.linkPersistedQueryList. */ export type LinkPersistedQueryListResultOrError = LinkPersistedQueryListResult | ListNotFoundError | PermissionError | VariantAlreadyLinkedError; export type LintCheckTask = CheckWorkflowTask & { __typename?: 'LintCheckTask'; - completedAt?: Maybe; - createdAt: Scalars['Timestamp']; - graphID: Scalars['ID']; - id: Scalars['ID']; + completedAt?: Maybe; + createdAt: Scalars['Timestamp']['output']; + graphID: Scalars['ID']['output']; + id: Scalars['ID']['output']; result?: Maybe; status: CheckWorkflowTaskStatus; - targetURL?: Maybe; + targetURL?: Maybe; workflow: CheckWorkflow; }; @@ -7042,11 +8583,11 @@ export type LintDiagnostic = { /** The category used for grouping similar rules. */ category: LinterRuleCategory; /** The schema coordinate of this diagnostic. */ - coordinate: Scalars['String']; + coordinate: Scalars['String']['output']; /** The graph's configured level for the rule. */ level: LintDiagnosticLevel; /** The message describing the rule violation. */ - message: Scalars['String']; + message: Scalars['String']['output']; /** The lint rule being violated. */ rule: LintRule; /** The human readable position in the file of the rule violation. */ @@ -7109,10 +8650,12 @@ export enum LintRule { INTERFACE_SUFFIX = 'INTERFACE_SUFFIX', MERGED_NON_REPEATABLE_DIRECTIVE_ARGUMENTS = 'MERGED_NON_REPEATABLE_DIRECTIVE_ARGUMENTS', NO_EXECUTABLE_DIRECTIVE_INTERSECTION = 'NO_EXECUTABLE_DIRECTIVE_INTERSECTION', + NULLABLE_PATH_VARIABLE = 'NULLABLE_PATH_VARIABLE', OBJECT_PREFIX = 'OBJECT_PREFIX', OBJECT_SUFFIX = 'OBJECT_SUFFIX', OVERRIDDEN_FIELD_CAN_BE_REMOVED = 'OVERRIDDEN_FIELD_CAN_BE_REMOVED', OVERRIDE_DIRECTIVE_CAN_BE_REMOVED = 'OVERRIDE_DIRECTIVE_CAN_BE_REMOVED', + OVERRIDE_MIGRATION_IN_PROGRESS = 'OVERRIDE_MIGRATION_IN_PROGRESS', QUERY_DOCUMENT_DECLARATION = 'QUERY_DOCUMENT_DECLARATION', RESTY_FIELD_NAMES = 'RESTY_FIELD_NAMES', TAG_DIRECTIVE_USES_UNKNOWN_NAME = 'TAG_DIRECTIVE_USES_UNKNOWN_NAME', @@ -7126,13 +8669,13 @@ export enum LintRule { export type LintStats = { __typename?: 'LintStats'; /** Total number of lint errors. */ - errorsCount: Scalars['Int']; + errorsCount: Scalars['Int']['output']; /** Total number of lint rules ignored. */ - ignoredCount: Scalars['Int']; + ignoredCount: Scalars['Int']['output']; /** Total number of lint rules violated. */ - totalCount: Scalars['Int']; + totalCount: Scalars['Int']['output']; /** Total number of lint warnings. */ - warningsCount: Scalars['Int']; + warningsCount: Scalars['Int']['output']; }; export type LinterIgnoredRuleChangesInput = { @@ -7153,13 +8696,13 @@ export enum LinterRuleCategory { export type LinterRuleLevelConfiguration = { __typename?: 'LinterRuleLevelConfiguration'; /** Illustrative code showcasing the potential violation of this rule. */ - badExampleCode?: Maybe; + badExampleCode?: Maybe; /** The category used for grouping similar rules. */ category: LinterRuleCategory; /** A human readable description of the rule. */ - description: Scalars['String']; + description: Scalars['String']['output']; /** Illustrative code showcasing the fix for the potential violation of this rule. */ - goodExampleCode?: Maybe; + goodExampleCode?: Maybe; /** The configured level for the rule. */ level: LintDiagnosticLevel; /** The name for this lint rule. */ @@ -7171,17 +8714,18 @@ export type LinterRuleLevelConfigurationChangesInput = { rule: LintRule; }; +/** The result of a failed call to GraphVariantMutation.linkPersistedQueryList when the specified list can't be found. */ export type ListNotFoundError = Error & { __typename?: 'ListNotFoundError'; - listId: Scalars['ID']; - message: Scalars['String']; + listId: Scalars['ID']['output']; + message: Scalars['String']['output']; }; export type Location = { __typename?: 'Location'; end?: Maybe; start?: Maybe; - subgraphName?: Maybe; + subgraphName?: Maybe; }; /** Level of the log entry */ @@ -7202,14 +8746,13 @@ export type LogMessage = { /** Log level */ level: LogLevel; /** Log message contents */ - message: Scalars['String']; + message: Scalars['String']['output']; /** Timestamp in UTC */ - timestamp: Scalars['DateTime']; + timestamp: Scalars['DateTime']['output']; }; export enum LoginFlowSource { - INTERNAL_SSO = 'INTERNAL_SSO', - InternalSSO = 'InternalSSO' + INTERNAL_SSO = 'INTERNAL_SSO' } export type MarkChangesForOperationAsSafeResult = { @@ -7220,62 +8763,39 @@ export type MarkChangesForOperationAsSafeResult = { * This is a weird situation that should never happen. */ affectedOperation?: Maybe; - message: Scalars['String']; - success: Scalars['Boolean']; + message: Scalars['String']['output']; + success: Scalars['Boolean']['output']; }; export type MediaUploadInfo = { __typename?: 'MediaUploadInfo'; - csrfToken: Scalars['String']; - maxContentLength: Scalars['Int']; - url: Scalars['String']; + csrfToken: Scalars['String']['output']; + maxContentLength: Scalars['Int']['output']; + url: Scalars['String']['output']; }; -export type Message = { - __typename?: 'Message'; - auditLog: Array; - channels: Array; - confirmations: Array>; - content: MessageContent; - createdAt: Scalars['Timestamp']; - id: Scalars['ID']; - modifiedAt: Scalars['Timestamp']; - state: State; - user: RequesterUser; +/** This type represents a conflict between two versions of a schema i.e. the current proposal and the updated source variant schema */ +export type MergeConflict = { + __typename?: 'MergeConflict'; + /** The diffs that caused the conflict */ + diffItems: Array; + /** location of conflicts in the partialMergeSdl */ + locationCoordinate?: Maybe; + /** message explaining the conflict */ + message?: Maybe; }; -export type MessageConfirmation = { - __typename?: 'MessageConfirmation'; - channel?: Maybe; - createdAt: Scalars['Timestamp']; - id: Scalars['ID']; - modifiedAt: Scalars['Timestamp']; - slackMessage: SlackMessageMeta; - state: SlackPublishState; +export type MergedSdlWithConflictsData = { + __typename?: 'MergedSdlWithConflictsData'; + subgraphsWithConflicts: Array; }; -export type MessageContent = { - __typename?: 'MessageContent'; - body: Scalars['String']; - buttonText?: Maybe; - buttonURL?: Maybe; - header: Scalars['String']; -}; - -export type MessageInput = { - body_text: Scalars['String']; - button_text?: InputMaybe; - button_url?: InputMaybe; - channel_id: Array; - header_text: Scalars['String']; -}; - -export type MessageMutationResult = CustomerSupportSlackError | Message; +export type MergedSdlWithConflictsResult = MergedSdlWithConflictsData | NotFoundError; export type MetricStatWindow = { __typename?: 'MetricStatWindow'; - timestamp: Scalars['Timestamp']; - value: Scalars['Long']; + timestamp: Scalars['Timestamp']['output']; + value: Scalars['Long']['output']; windowSize: BillingUsageStatsWindowSize; }; @@ -7295,15 +8815,15 @@ export type MultiSubgraphCheckAsyncInput = { /** The GitHub context to associate with the check. */ gitContext: GitContextInput; /** The graph ref of the Studio graph and variant to run checks against (such as `my-graph@current`). */ - graphRef?: InputMaybe; + graphRef?: InputMaybe; /** The URL of the GraphQL endpoint that Apollo Sandbox introspected to obtain the proposed schema. Required if `isSandbox` is `true`. */ - introspectionEndpoint?: InputMaybe; + introspectionEndpoint?: InputMaybe; /** If `true`, the check was initiated automatically by a Proposal update. */ - isProposal?: InputMaybe; + isProposal?: InputMaybe; /** If `true`, the check was initiated by Apollo Sandbox. */ - isSandbox: Scalars['Boolean']; + isSandbox: Scalars['Boolean']['input']; /** The source variant that this check should use the operations check configuration from */ - sourceVariant?: InputMaybe; + sourceVariant?: InputMaybe; /** The changed subgraph schemas to check. */ subgraphsToCheck: Array>; /** The user that triggered this check. If null, defaults to authContext to determine user. */ @@ -7313,20 +8833,25 @@ export type MultiSubgraphCheckAsyncInput = { /** GraphQL mutations */ export type Mutation = { __typename?: 'Mutation'; + /** @deprecated Use Mutation.organization instead. */ account?: Maybe; - approveMessage: MessageMutationResult; + addOidcConfigurationToBaseConnection?: Maybe; billing?: Maybe; + /** + * Allows the frontend to check if a SSO configuration key is valid. + * This helps restrict access to the public SSO configuration page. + */ + checkSsoConfigurationKey: Scalars['Boolean']['output']; /** Cloud mutations */ cloud: CloudMutation; - createMessage: MessageMutationResult; + cloudTesting: CloudTestingMutation; /** Creates an [operation collection](https://www.apollographql.com/docs/studio/explorer/operation-collections/) for a given variant, or creates a [sandbox collection](https://www.apollographql.com/docs/studio/explorer/operation-collections/#sandbox-collections) without an associated variant. */ createOperationCollection: CreateOperationCollectionResult; - editMessage: MessageMutationResult; /** * Finalize a password reset with a token included in the E-mail link, * returns the corresponding login email when successful */ - finalizePasswordReset?: Maybe; + finalizePasswordReset?: Maybe; /** Provides access to mutation fields for modifying a Studio graph with the provided ID. */ graph?: Maybe; /** Join an account with a token */ @@ -7341,20 +8866,24 @@ export type Mutation = { newLimit?: Maybe; newService?: Maybe; operationCollection?: Maybe; + /** Provides access to mutation fields for modifying a an organization with the provided ID. */ + organization?: Maybe; plan?: Maybe; - /** Provides access to mutation fields for modifying a GraphOS Schema Proposals with the provided ID. Learn more at https://www.apollographql.com/docs/graphos/delivery/schema-proposals */ + /** + * Provides access to mutation fields for modifying a GraphOS Schema Proposals with the provided ID. Learn more at https://www.apollographql.com/docs/graphos/delivery/schema-proposals + * @deprecated Use GraphVariantMutation.proposal instead + */ proposal: ProposalMutationResult; + /** @deprecated Use GraphVariantMutation.proposal instead */ proposalByVariantRef: ProposalMutationResult; - publishSlackMessage: MessageMutationResult; - publishSlackTest: MessageMutationResult; + publishEDUEvent: Scalars['Boolean']['output']; /** Push a lead to Marketo by program ID */ - pushMarketoLead: Scalars['Boolean']; - recallMessage: MessageMutationResult; + pushMarketoLead: Scalars['Boolean']['output']; /** Report a running GraphQL server's schema. */ reportSchema?: Maybe; /** Ask for a user's password to be reset by E-mail */ - resetPassword?: Maybe; - resolveAllInternalCronExecutions?: Maybe; + resetPassword?: Maybe; + resolveAllInternalCronExecutions?: Maybe; resolveInternalCronExecution?: Maybe; service?: Maybe; /** Set the subscriptions for a given email */ @@ -7364,16 +8893,16 @@ export type Mutation = { signUp?: Maybe; ssoV2: SsoMutation; /** This is called by the form shown to users after they delete their user or organization account. */ - submitPostDeletionFeedback?: Maybe; + submitPostDeletionFeedback?: Maybe; /** Mutation for basic engagement tracking in studio */ - track?: Maybe; + track?: Maybe; /** Apollo Kotlin usage tracking. */ - trackApolloKotlinUsage?: Maybe; + trackApolloKotlinUsage?: Maybe; /** Router usage tracking. Reserved to https://router.apollo.dev/telemetry (https://github.com/apollographql/orbiter). */ - trackRouterUsage?: Maybe; + trackRouterUsage?: Maybe; /** Rover session tracking. Reserved to https://rover.apollo.dev/telemetry (https://github.com/apollographql/orbiter). */ - trackRoverSession?: Maybe; - transferOdysseyProgress: Scalars['Boolean']; + trackRoverSession?: Maybe; + transferOdysseyProgress: Scalars['Boolean']['output']; /** Unsubscribe a given email from all emails */ unsubscribeFromAll?: Maybe; updateSurvey: Survey; @@ -7386,298 +8915,287 @@ export type Mutation = { /** GraphQL mutations */ -export type MutationaccountArgs = { - id: Scalars['ID']; +export type MutationAccountArgs = { + id: Scalars['ID']['input']; }; /** GraphQL mutations */ -export type MutationapproveMessageArgs = { - messageId: Scalars['ID']; - state: State; +export type MutationAddOidcConfigurationToBaseConnectionArgs = { + config: OidcConfigurationInput; + configurationKey: Scalars['String']['input']; }; /** GraphQL mutations */ -export type MutationcreateMessageArgs = { - message: MessageInput; +export type MutationCheckSsoConfigurationKeyArgs = { + key: Scalars['String']['input']; }; /** GraphQL mutations */ -export type MutationcreateOperationCollectionArgs = { - description?: InputMaybe; - isSandbox: Scalars['Boolean']; - isShared: Scalars['Boolean']; +export type MutationCreateOperationCollectionArgs = { + description?: InputMaybe; + isSandbox: Scalars['Boolean']['input']; + isShared: Scalars['Boolean']['input']; minEditRole?: InputMaybe; - name: Scalars['String']; - variantRefs?: InputMaybe>; -}; - - -/** GraphQL mutations */ -export type MutationeditMessageArgs = { - messageId: Scalars['ID']; - messageUpdates: MessageInput; + name: Scalars['String']['input']; + variantRefs?: InputMaybe>; }; /** GraphQL mutations */ -export type MutationfinalizePasswordResetArgs = { - newPassword: Scalars['String']; - resetToken: Scalars['String']; +export type MutationFinalizePasswordResetArgs = { + newPassword: Scalars['String']['input']; + resetToken: Scalars['String']['input']; }; /** GraphQL mutations */ -export type MutationgraphArgs = { - id: Scalars['ID']; +export type MutationGraphArgs = { + id: Scalars['ID']['input']; }; /** GraphQL mutations */ -export type MutationjoinAccountArgs = { - accountId: Scalars['ID']; - joinToken: Scalars['String']; +export type MutationJoinAccountArgs = { + accountId: Scalars['ID']['input']; + joinToken: Scalars['String']['input']; }; /** GraphQL mutations */ -export type MutationnewAccountArgs = { - companyUrl?: InputMaybe; - id: Scalars['ID']; - organizationName?: InputMaybe; - planId?: InputMaybe; +export type MutationNewAccountArgs = { + companyUrl?: InputMaybe; + id: Scalars['ID']['input']; + organizationName?: InputMaybe; + planId?: InputMaybe; }; /** GraphQL mutations */ -export type MutationnewBillingPlanArgs = { +export type MutationNewBillingPlanArgs = { plan: BillingPlanInput; }; /** GraphQL mutations */ -export type MutationnewCapabilityArgs = { +export type MutationNewCapabilityArgs = { capability: BillingCapabilityInput; }; /** GraphQL mutations */ -export type MutationnewLimitArgs = { +export type MutationNewLimitArgs = { limit: BillingLimitInput; }; /** GraphQL mutations */ -export type MutationnewServiceArgs = { - accountId: Scalars['ID']; - description?: InputMaybe; - hiddenFromUninvitedNonAdminAccountMembers?: Scalars['Boolean']; - id: Scalars['ID']; - name?: InputMaybe; +export type MutationNewServiceArgs = { + accountId: Scalars['ID']['input']; + description?: InputMaybe; + hiddenFromUninvitedNonAdminAccountMembers?: Scalars['Boolean']['input']; + id: Scalars['ID']['input']; + name?: InputMaybe; onboardingArchitecture?: InputMaybe; - title?: InputMaybe; + title?: InputMaybe; }; /** GraphQL mutations */ -export type MutationoperationCollectionArgs = { - id: Scalars['ID']; +export type MutationOperationCollectionArgs = { + id: Scalars['ID']['input']; }; /** GraphQL mutations */ -export type MutationplanArgs = { - id: Scalars['ID']; +export type MutationOrganizationArgs = { + id: Scalars['ID']['input']; }; /** GraphQL mutations */ -export type MutationproposalArgs = { - id: Scalars['ID']; +export type MutationPlanArgs = { + id: Scalars['ID']['input']; }; /** GraphQL mutations */ -export type MutationproposalByVariantRefArgs = { - variantRef: Scalars['ID']; +export type MutationProposalArgs = { + id: Scalars['ID']['input']; }; /** GraphQL mutations */ -export type MutationpublishSlackMessageArgs = { - messageId: Scalars['ID']; +export type MutationProposalByVariantRefArgs = { + variantRef: Scalars['ID']['input']; }; /** GraphQL mutations */ -export type MutationpublishSlackTestArgs = { - messageId: Scalars['ID']; +export type MutationPublishEduEventArgs = { + data: Scalars['String']['input']; + type: Scalars['String']['input']; }; /** GraphQL mutations */ -export type MutationpushMarketoLeadArgs = { +export type MutationPushMarketoLeadArgs = { input: PushMarketoLeadInput; - programId: Scalars['ID']; - programStatus?: InputMaybe; - source?: InputMaybe; -}; - - -/** GraphQL mutations */ -export type MutationrecallMessageArgs = { - slackChannelId: Scalars['ID']; - slackMessageId: Scalars['ID']; + programId: Scalars['ID']['input']; + programStatus?: InputMaybe; + source?: InputMaybe; }; /** GraphQL mutations */ -export type MutationreportSchemaArgs = { - coreSchema?: InputMaybe; +export type MutationReportSchemaArgs = { + coreSchema?: InputMaybe; report: SchemaReport; }; /** GraphQL mutations */ -export type MutationresetPasswordArgs = { - email: Scalars['String']; +export type MutationResetPasswordArgs = { + email: Scalars['String']['input']; }; /** GraphQL mutations */ -export type MutationresolveAllInternalCronExecutionsArgs = { - group?: InputMaybe; - name?: InputMaybe; +export type MutationResolveAllInternalCronExecutionsArgs = { + group?: InputMaybe; + name?: InputMaybe; }; /** GraphQL mutations */ -export type MutationresolveInternalCronExecutionArgs = { - id: Scalars['ID']; +export type MutationResolveInternalCronExecutionArgs = { + id: Scalars['ID']['input']; }; /** GraphQL mutations */ -export type MutationserviceArgs = { - id: Scalars['ID']; +export type MutationServiceArgs = { + id: Scalars['ID']['input']; }; /** GraphQL mutations */ -export type MutationsetSubscriptionsArgs = { - email: Scalars['String']; +export type MutationSetSubscriptionsArgs = { + email: Scalars['String']['input']; subscriptions: Array; - token: Scalars['String']; + token: Scalars['String']['input']; }; /** GraphQL mutations */ -export type MutationsetUserSettingsArgs = { +export type MutationSetUserSettingsArgs = { newSettings?: InputMaybe; }; /** GraphQL mutations */ -export type MutationsignUpArgs = { - email: Scalars['String']; - fullName: Scalars['String']; - password: Scalars['String']; - referrer?: InputMaybe; - trackingGoogleClientId?: InputMaybe; - trackingMarketoClientId?: InputMaybe; +export type MutationSignUpArgs = { + email: Scalars['String']['input']; + fullName: Scalars['String']['input']; + password: Scalars['String']['input']; + referrer?: InputMaybe; + trackingGoogleClientId?: InputMaybe; + trackingMarketoClientId?: InputMaybe; + trackingValues?: InputMaybe; userSegment?: InputMaybe; - utmCampaign?: InputMaybe; - utmMedium?: InputMaybe; - utmSource?: InputMaybe; + utmCampaign?: InputMaybe; + utmMedium?: InputMaybe; + utmSource?: InputMaybe; }; /** GraphQL mutations */ -export type MutationsubmitPostDeletionFeedbackArgs = { - feedback: Scalars['String']; - targetIdentifier: Scalars['ID']; +export type MutationSubmitPostDeletionFeedbackArgs = { + feedback: Scalars['String']['input']; + targetIdentifier: Scalars['ID']['input']; targetType: DeletionTargetType; }; /** GraphQL mutations */ -export type MutationtrackArgs = { +export type MutationTrackArgs = { event: EventEnum; - graphID: Scalars['String']; - graphVariant?: Scalars['String']; + graphID: Scalars['String']['input']; + graphVariant?: Scalars['String']['input']; }; /** GraphQL mutations */ -export type MutationtrackApolloKotlinUsageArgs = { +export type MutationTrackApolloKotlinUsageArgs = { events: Array; - instanceId: Scalars['ID']; + instanceId: Scalars['ID']['input']; properties: Array; }; /** GraphQL mutations */ -export type MutationtrackRouterUsageArgs = { - ci?: InputMaybe; - os: Scalars['String']; - sessionId: Scalars['ID']; +export type MutationTrackRouterUsageArgs = { + ci?: InputMaybe; + os: Scalars['String']['input']; + sessionId: Scalars['ID']['input']; usage: Array; - version: Scalars['String']; + version: Scalars['String']['input']; }; /** GraphQL mutations */ -export type MutationtrackRoverSessionArgs = { - anonymousId: Scalars['ID']; +export type MutationTrackRoverSessionArgs = { + anonymousId: Scalars['ID']['input']; arguments: Array; - ci?: InputMaybe; - command: Scalars['String']; - cwdHash: Scalars['SHA256']; - os: Scalars['String']; - remoteUrlHash?: InputMaybe; - sessionId: Scalars['ID']; - version: Scalars['String']; + ci?: InputMaybe; + command: Scalars['String']['input']; + cwdHash: Scalars['SHA256']['input']; + os: Scalars['String']['input']; + remoteUrlHash?: InputMaybe; + sessionId: Scalars['ID']['input']; + version: Scalars['String']['input']; }; /** GraphQL mutations */ -export type MutationtransferOdysseyProgressArgs = { - from: Scalars['ID']; - to: Scalars['ID']; +export type MutationTransferOdysseyProgressArgs = { + from: Scalars['ID']['input']; + to: Scalars['ID']['input']; }; /** GraphQL mutations */ -export type MutationunsubscribeFromAllArgs = { - email: Scalars['String']; - token: Scalars['String']; +export type MutationUnsubscribeFromAllArgs = { + email: Scalars['String']['input']; + token: Scalars['String']['input']; }; /** GraphQL mutations */ -export type MutationupdateSurveyArgs = { - internalAccountId: Scalars['String']; - surveyId: Scalars['String']; +export type MutationUpdateSurveyArgs = { + internalAccountId: Scalars['String']['input']; + surveyId: Scalars['String']['input']; + surveyIdVersion: Scalars['Int']['input']; surveyState: Array; }; /** GraphQL mutations */ -export type MutationuserArgs = { - id: Scalars['ID']; +export type MutationUserArgs = { + id: Scalars['ID']['input']; }; export type NamedIntrospectionArg = { __typename?: 'NamedIntrospectionArg'; - description?: Maybe; - name?: Maybe; + description?: Maybe; + name?: Maybe; }; export type NamedIntrospectionArgNoDescription = { __typename?: 'NamedIntrospectionArgNoDescription'; - name?: Maybe; + name?: Maybe; }; /** @@ -7691,14 +9209,14 @@ export type NamedIntrospectionArgNoDescription = { */ export type NamedIntrospectionType = { __typename?: 'NamedIntrospectionType'; - description?: Maybe; + description?: Maybe; kind?: Maybe; - name?: Maybe; + name?: Maybe; }; export type NamedIntrospectionTypeNoDescription = { __typename?: 'NamedIntrospectionTypeNoDescription'; - name?: Maybe; + name?: Maybe; }; /** @@ -7709,39 +9227,39 @@ export type NamedIntrospectionTypeNoDescription = { */ export type NamedIntrospectionValue = { __typename?: 'NamedIntrospectionValue'; - description?: Maybe; - name?: Maybe; - printedType?: Maybe; + description?: Maybe; + name?: Maybe; + printedType?: Maybe; }; export type NamedIntrospectionValueNoDescription = { __typename?: 'NamedIntrospectionValueNoDescription'; - name?: Maybe; - printedType?: Maybe; + name?: Maybe; + printedType?: Maybe; }; /** A non-federated service for a monolithic graph. */ export type NonFederatedImplementingService = { __typename?: 'NonFederatedImplementingService'; /** Timestamp of when this implementing service was created. */ - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; /** * Identifies which graph this non-implementing service belongs to. * Formerly known as "service_id". */ - graphID: Scalars['String']; + graphID: Scalars['String']['output']; /** * Specifies which variant of a graph this implementing service belongs to". * Formerly known as "tag". */ - graphVariant: Scalars['String']; + graphVariant: Scalars['String']['output']; }; /** An error that occurs when a requested object is not found. */ export type NotFoundError = Error & { __typename?: 'NotFoundError'; /** The error message. */ - message: Scalars['String']; + message: Scalars['String']['output']; }; export enum NotificationStatus { @@ -7751,101 +9269,110 @@ export enum NotificationStatus { export type OdysseyAttempt = { __typename?: 'OdysseyAttempt'; - completedAt?: Maybe; - id: Scalars['ID']; - pass?: Maybe; + completedAt?: Maybe; + id: Scalars['ID']['output']; + pass?: Maybe; responses: Array; - startedAt: Scalars['Timestamp']; - testId: Scalars['String']; + startedAt: Scalars['Timestamp']['output']; + testId: Scalars['String']['output']; }; export type OdysseyCertification = { __typename?: 'OdysseyCertification'; - certificationId: Scalars['String']; - earnedAt: Scalars['Timestamp']; - icon?: Maybe; - id: Scalars['ID']; + certificationId: Scalars['String']['output']; + earnedAt: Scalars['Timestamp']['output']; + icon?: Maybe; + id: Scalars['ID']['output']; owner?: Maybe; - source?: Maybe; + source?: Maybe; }; export type OdysseyCertificationOwner = { __typename?: 'OdysseyCertificationOwner'; - fullName: Scalars['String']; - id: Scalars['ID']; + fullName: Scalars['String']['output']; + id: Scalars['ID']['output']; }; export type OdysseyCourse = { __typename?: 'OdysseyCourse'; - completedAt?: Maybe; - enrolledAt?: Maybe; - id: Scalars['ID']; - language?: Maybe; + completedAt?: Maybe; + enrolledAt?: Maybe; + id: Scalars['ID']['output']; + language?: Maybe; }; export type OdysseyCourseInput = { - completedAt?: InputMaybe; - courseId: Scalars['String']; - isBeta?: InputMaybe; - language?: InputMaybe; + completedAt?: InputMaybe; + courseId: Scalars['String']['input']; + isBeta?: InputMaybe; + language?: InputMaybe; }; export type OdysseyResponse = { __typename?: 'OdysseyResponse'; - correct?: Maybe; - id: Scalars['ID']; - questionId: Scalars['String']; + correct?: Maybe; + id: Scalars['ID']['output']; + questionId: Scalars['String']['output']; values: Array; }; export type OdysseyResponseCorrectnessInput = { - correct: Scalars['Boolean']; - id: Scalars['ID']; + correct: Scalars['Boolean']['input']; + id: Scalars['ID']['input']; }; export type OdysseyResponseInput = { - attemptId: Scalars['ID']; - correct?: InputMaybe; - questionId: Scalars['String']; - values: Array; + attemptId: Scalars['ID']['input']; + correct?: InputMaybe; + questionId: Scalars['String']['input']; + values: Array; }; export type OdysseyTask = { __typename?: 'OdysseyTask'; - completedAt?: Maybe; - id: Scalars['ID']; - value?: Maybe; + completedAt?: Maybe; + id: Scalars['ID']['output']; + value?: Maybe; }; export type OdysseyTaskInput = { - completedAt?: InputMaybe; - taskId: Scalars['String']; - value?: InputMaybe; + completedAt?: InputMaybe; + taskId: Scalars['String']['input']; + value?: InputMaybe; }; export type OdysseyValue = { __typename?: 'OdysseyValue'; - id: Scalars['ID']; - value: Scalars['String']; + id: Scalars['ID']['output']; + value: Scalars['String']['output']; }; -export type OidcConnection = SsoConnection & { - __typename?: 'OidcConnection'; - clientId: Scalars['ID']; - discoveryUri?: Maybe; - domains: Array; - id: Scalars['ID']; - idpId: Scalars['ID']; - issuer: Scalars['String']; +export type OidcConfigurationInput = { + clientId: Scalars['String']['input']; + clientSecret: Scalars['String']['input']; + discoveryURI?: InputMaybe; + issuer: Scalars['String']['input']; }; -export type OidcConnectionInput = { - clientId: Scalars['String']; - clientSecret: Scalars['String']; - discoveryURI?: InputMaybe; - domains: Array; - idpId: Scalars['String']; - issuer: Scalars['String']; +export type OidcConfigurationUpdateInput = { + clientId: Scalars['String']['input']; + clientSecret?: InputMaybe; + discoveryURI?: InputMaybe; + issuer: Scalars['String']['input']; +}; + +export type OidcConnection = SsoConnection & { + __typename?: 'OidcConnection'; + clientId: Scalars['ID']['output']; + discoveryUri?: Maybe; + domains: Array; + id: Scalars['ID']['output']; + idpId: Scalars['ID']['output']; + issuer: Scalars['String']['output']; + scim?: Maybe; + /** @deprecated Use stateV2 instead */ + state: SsoConnectionState; + stateV2: SsoConnectionStateV2; }; export enum OnboardingArchitecture { @@ -7855,21 +9382,21 @@ export enum OnboardingArchitecture { export type Operation = { __typename?: 'Operation'; - id: Scalars['ID']; - name?: Maybe; - signature?: Maybe; - truncated: Scalars['Boolean']; + id: Scalars['ID']['output']; + name?: Maybe; + signature?: Maybe; + truncated: Scalars['Boolean']['output']; }; export type OperationAcceptedChange = { __typename?: 'OperationAcceptedChange'; - acceptedAt: Scalars['Timestamp']; + acceptedAt: Scalars['Timestamp']['output']; acceptedBy?: Maybe; change: StoredApprovedChange; - checkID: Scalars['ID']; - graphID: Scalars['ID']; - id: Scalars['ID']; - operationID: Scalars['String']; + checkID: Scalars['ID']['output']; + graphID: Scalars['ID']['output']; + id: Scalars['ID']['output']; + operationID: Scalars['String']['output']; }; /** Columns of OperationCheckStats. */ @@ -7889,64 +9416,64 @@ export enum OperationCheckStatsColumn { export type OperationCheckStatsDimensions = { __typename?: 'OperationCheckStatsDimensions'; - clientName?: Maybe; - clientVersion?: Maybe; - operationSubtype?: Maybe; - operationType?: Maybe; - queryId?: Maybe; - queryName?: Maybe; - schemaTag?: Maybe; - serviceId?: Maybe; + clientName?: Maybe; + clientVersion?: Maybe; + operationSubtype?: Maybe; + operationType?: Maybe; + queryId?: Maybe; + queryName?: Maybe; + schemaTag?: Maybe; + serviceId?: Maybe; }; /** Filter for data in OperationCheckStats. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type OperationCheckStatsFilter = { and?: InputMaybe>; /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */ - clientName?: InputMaybe; + clientName?: InputMaybe; /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */ - clientVersion?: InputMaybe; + clientVersion?: InputMaybe; in?: InputMaybe; not?: InputMaybe; /** Selects rows whose operationSubtype dimension equals the given value if not null. To query for the null value, use {in: {operationSubtype: [null]}} instead. */ - operationSubtype?: InputMaybe; + operationSubtype?: InputMaybe; /** Selects rows whose operationType dimension equals the given value if not null. To query for the null value, use {in: {operationType: [null]}} instead. */ - operationType?: InputMaybe; + operationType?: InputMaybe; or?: InputMaybe>; /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */ - queryId?: InputMaybe; + queryId?: InputMaybe; /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */ - queryName?: InputMaybe; + queryName?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */ - serviceId?: InputMaybe; + serviceId?: InputMaybe; }; /** Filter for data in OperationCheckStats. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type OperationCheckStatsFilterIn = { /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientName?: InputMaybe>>; + clientName?: InputMaybe>>; /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientVersion?: InputMaybe>>; + clientVersion?: InputMaybe>>; /** Selects rows whose operationSubtype dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationSubtype?: InputMaybe>>; + operationSubtype?: InputMaybe>>; /** Selects rows whose operationType dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationType?: InputMaybe>>; + operationType?: InputMaybe>>; /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryId?: InputMaybe>>; + queryId?: InputMaybe>>; /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryName?: InputMaybe>>; + queryName?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - serviceId?: InputMaybe>>; + serviceId?: InputMaybe>>; }; export type OperationCheckStatsMetrics = { __typename?: 'OperationCheckStatsMetrics'; - cachedRequestsCount: Scalars['Long']; - uncachedRequestsCount: Scalars['Long']; + cachedRequestsCount: Scalars['Long']['output']; + uncachedRequestsCount: Scalars['Long']['output']; }; export type OperationCheckStatsOrderBySpec = { @@ -7961,39 +9488,39 @@ export type OperationCheckStatsRecord = { /** Metrics of OperationCheckStats that can be aggregated over. */ metrics: OperationCheckStatsMetrics; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; }; /** A list of saved GraphQL operations. */ export type OperationCollection = { __typename?: 'OperationCollection'; /** The timestamp when the collection was created. */ - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; /** The user or other entity that created the collection. */ createdBy?: Maybe; /** The collection's description. A `null` description was never set, and empty string description was set to be empty string by a user, or other entity. */ - description?: Maybe; + description?: Maybe; /** * If a user has any of these roles, they will be able to edit this * collection. * @deprecated deprecated in favour of minEditRole */ editRoles?: Maybe>; - id: Scalars['ID']; + id: Scalars['ID']['output']; /** Whether the current user has marked the collection as a favorite. */ - isFavorite: Scalars['Boolean']; + isFavorite: Scalars['Boolean']['output']; /** Whether the collection is a [sandbox collection](https://www.apollographql.com/docs/studio/explorer/operation-collections/#sandbox-collections). */ - isSandbox: Scalars['Boolean']; + isSandbox: Scalars['Boolean']['output']; /** Whether the collection is shared across its associated organization. */ - isShared: Scalars['Boolean']; + isShared: Scalars['Boolean']['output']; /** The timestamp when the collection was most recently updated. */ - lastUpdatedAt: Scalars['Timestamp']; + lastUpdatedAt: Scalars['Timestamp']['output']; /** The user or other entity that most recently updated the collection. */ lastUpdatedBy?: Maybe; /** The minimum role a user needs to edit this collection. Valid values: null, CONSUMER, OBSERVER, DOCUMENTER, CONTRIBUTOR, GRAPH_ADMIN. This value is always `null` if `isShared` is `false`. If `null` when `isShared` is `true`, the minimum role is `GRAPH_ADMIN`. */ minEditRole?: Maybe; /** The collection's name. */ - name: Scalars['String']; + name: Scalars['String']['output']; /** Returns the operation in the collection with the specified ID, if any. */ operation?: Maybe; /** A list of the GraphQL operations that belong to the collection. */ @@ -8005,8 +9532,8 @@ export type OperationCollection = { /** A list of saved GraphQL operations. */ -export type OperationCollectionoperationArgs = { - id: Scalars['ID']; +export type OperationCollectionOperationArgs = { + id: Scalars['ID']['input']; }; /** A saved operation entry within an Operation Collection. */ @@ -8014,20 +9541,20 @@ export type OperationCollectionEntry = { __typename?: 'OperationCollectionEntry'; collection: OperationCollection; /** The timestamp when the entry was created. */ - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; /** The user or other entity that created the entry. */ createdBy?: Maybe; /** Details of the entry's associated operation, such as its `body` and `variables`. */ currentOperationRevision: OperationCollectionEntryState; - id: Scalars['ID']; + id: Scalars['ID']['output']; /** The timestamp when the entry was most recently updated. */ - lastUpdatedAt: Scalars['Timestamp']; + lastUpdatedAt: Scalars['Timestamp']['output']; /** The user or other entity that most recently updated the entry. */ lastUpdatedBy?: Maybe; /** The entry's name. */ - name: Scalars['String']; + name: Scalars['String']['output']; /** The entry's lexicographical ordering index within its containing collection. */ - orderingIndex: Scalars['String']; + orderingIndex: Scalars['String']['output']; }; /** Provides fields for modifying an operation in a collection. */ @@ -8043,28 +9570,28 @@ export type OperationCollectionEntryMutation = { /** Provides fields for modifying an operation in a collection. */ -export type OperationCollectionEntryMutationmoveToCollectionArgs = { - collectionId: Scalars['ID']; - lowerOrderingBound?: InputMaybe; - upperOrderingBound?: InputMaybe; +export type OperationCollectionEntryMutationMoveToCollectionArgs = { + collectionId: Scalars['ID']['input']; + lowerOrderingBound?: InputMaybe; + upperOrderingBound?: InputMaybe; }; /** Provides fields for modifying an operation in a collection. */ -export type OperationCollectionEntryMutationreorderEntryArgs = { - lowerOrderingBound?: InputMaybe; - upperOrderingBound?: InputMaybe; +export type OperationCollectionEntryMutationReorderEntryArgs = { + lowerOrderingBound?: InputMaybe; + upperOrderingBound?: InputMaybe; }; /** Provides fields for modifying an operation in a collection. */ -export type OperationCollectionEntryMutationupdateNameArgs = { - name: Scalars['String']; +export type OperationCollectionEntryMutationUpdateNameArgs = { + name: Scalars['String']['input']; }; /** Provides fields for modifying an operation in a collection. */ -export type OperationCollectionEntryMutationupdateValuesArgs = { +export type OperationCollectionEntryMutationUpdateValuesArgs = { operationInput: OperationCollectionEntryStateInput; }; @@ -8077,33 +9604,33 @@ export type OperationCollectionEntryResult = NotFoundError | OperationCollection export type OperationCollectionEntryState = { __typename?: 'OperationCollectionEntryState'; /** The raw body of the entry's GraphQL operation. */ - body: Scalars['String']; + body: Scalars['String']['output']; /** The timestamp when the entry state was created. */ - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; /** The user or other entity that created this entry state. */ createdBy?: Maybe; /** Headers for the entry's GraphQL operation. */ headers?: Maybe>; /** The post operation workflow automation script for this entry's GraphQL operation */ - postflightOperationScript?: Maybe; + postflightOperationScript?: Maybe; /** The pre operation workflow automation script for this entry's GraphQL operation */ - script?: Maybe; + script?: Maybe; /** Variables for the entry's GraphQL operation, as a JSON string. */ - variables?: Maybe; + variables?: Maybe; }; /** Fields for creating or modifying an operation collection entry. */ export type OperationCollectionEntryStateInput = { /** The operation's query body. */ - body: Scalars['String']; + body: Scalars['String']['input']; /** The operation's headers. */ headers?: InputMaybe>; /** The operation's postflight workflow script */ - postflightOperationScript?: InputMaybe; + postflightOperationScript?: InputMaybe; /** The operation's preflight workflow script */ - script?: InputMaybe; + script?: InputMaybe; /** The operation's variables. */ - variables?: InputMaybe; + variables?: InputMaybe; }; /** Provides fields for modifying an [operation collection](https://www.apollographql.com/docs/studio/explorer/operation-collections/). */ @@ -8137,178 +9664,188 @@ export type OperationCollectionMutation = { /** Provides fields for modifying an [operation collection](https://www.apollographql.com/docs/studio/explorer/operation-collections/). */ -export type OperationCollectionMutationaddOperationArgs = { - name: Scalars['String']; +export type OperationCollectionMutationAddOperationArgs = { + name: Scalars['String']['input']; operationInput: OperationCollectionEntryStateInput; }; /** Provides fields for modifying an [operation collection](https://www.apollographql.com/docs/studio/explorer/operation-collections/). */ -export type OperationCollectionMutationaddOperationsArgs = { +export type OperationCollectionMutationAddOperationsArgs = { operations: Array; }; /** Provides fields for modifying an [operation collection](https://www.apollographql.com/docs/studio/explorer/operation-collections/). */ -export type OperationCollectionMutationaddToVariantArgs = { - variantRef: Scalars['ID']; +export type OperationCollectionMutationAddToVariantArgs = { + variantRef: Scalars['ID']['input']; }; /** Provides fields for modifying an [operation collection](https://www.apollographql.com/docs/studio/explorer/operation-collections/). */ -export type OperationCollectionMutationdeleteOperationArgs = { - id: Scalars['ID']; +export type OperationCollectionMutationDeleteOperationArgs = { + id: Scalars['ID']['input']; }; /** Provides fields for modifying an [operation collection](https://www.apollographql.com/docs/studio/explorer/operation-collections/). */ -export type OperationCollectionMutationduplicateCollectionArgs = { - description?: InputMaybe; - isSandbox: Scalars['Boolean']; - isShared: Scalars['Boolean']; - name: Scalars['String']; - variantRef?: InputMaybe; +export type OperationCollectionMutationDuplicateCollectionArgs = { + description?: InputMaybe; + isSandbox: Scalars['Boolean']['input']; + isShared: Scalars['Boolean']['input']; + name: Scalars['String']['input']; + variantRef?: InputMaybe; }; /** Provides fields for modifying an [operation collection](https://www.apollographql.com/docs/studio/explorer/operation-collections/). */ -export type OperationCollectionMutationoperationArgs = { - id: Scalars['ID']; +export type OperationCollectionMutationOperationArgs = { + id: Scalars['ID']['input']; }; /** Provides fields for modifying an [operation collection](https://www.apollographql.com/docs/studio/explorer/operation-collections/). */ -export type OperationCollectionMutationremoveFromVariantArgs = { - variantRef: Scalars['ID']; +export type OperationCollectionMutationRemoveFromVariantArgs = { + variantRef: Scalars['ID']['input']; }; /** Provides fields for modifying an [operation collection](https://www.apollographql.com/docs/studio/explorer/operation-collections/). */ -export type OperationCollectionMutationsetMinEditRoleArgs = { +export type OperationCollectionMutationSetMinEditRoleArgs = { editRole?: InputMaybe; }; /** Provides fields for modifying an [operation collection](https://www.apollographql.com/docs/studio/explorer/operation-collections/). */ -export type OperationCollectionMutationupdateDescriptionArgs = { - description?: InputMaybe; +export type OperationCollectionMutationUpdateDescriptionArgs = { + description?: InputMaybe; }; /** Provides fields for modifying an [operation collection](https://www.apollographql.com/docs/studio/explorer/operation-collections/). */ -export type OperationCollectionMutationupdateIsFavoriteArgs = { - isFavorite: Scalars['Boolean']; +export type OperationCollectionMutationUpdateIsFavoriteArgs = { + isFavorite: Scalars['Boolean']['input']; }; /** Provides fields for modifying an [operation collection](https://www.apollographql.com/docs/studio/explorer/operation-collections/). */ -export type OperationCollectionMutationupdateIsSharedArgs = { - isShared: Scalars['Boolean']; +export type OperationCollectionMutationUpdateIsSharedArgs = { + isShared: Scalars['Boolean']['input']; }; /** Provides fields for modifying an [operation collection](https://www.apollographql.com/docs/studio/explorer/operation-collections/). */ -export type OperationCollectionMutationupdateNameArgs = { - name: Scalars['String']; +export type OperationCollectionMutationUpdateNameArgs = { + name: Scalars['String']['input']; }; /** Whether the current user can perform various actions on the associated collection. */ export type OperationCollectionPermissions = { __typename?: 'OperationCollectionPermissions'; /** Whether the current user can edit operations in the associated collection. */ - canEditOperations: Scalars['Boolean']; + canEditOperations: Scalars['Boolean']['output']; /** Whether the current user can delete or update the associated collection's metadata, such as its name and description. */ - canManage: Scalars['Boolean']; + canManage: Scalars['Boolean']['output']; /** Whether the current user can read operations in the associated collection. */ - canReadOperations: Scalars['Boolean']; + canReadOperations: Scalars['Boolean']['output']; }; export type OperationCollectionResult = NotFoundError | OperationCollection | PermissionError | ValidationError; +export type OperationDetails = { + __typename?: 'OperationDetails'; + /** A hashed representation of the signature, commonly used as the operation ID. */ + id: Scalars['String']['output']; + /** The operation name or null if the operation is unnamed. */ + name?: Maybe; + /** First 128 characters of query signature for display. */ + signature?: Maybe; +}; + export type OperationDocument = { __typename?: 'OperationDocument'; /** Operation document body */ - body: Scalars['String']; + body: Scalars['String']['output']; /** Operation name */ - name?: Maybe; + name?: Maybe; }; export type OperationDocumentInput = { /** Operation document body */ - body: Scalars['String']; + body: Scalars['String']['input']; /** Operation name */ - name?: InputMaybe; + name?: InputMaybe; }; /** Saved headers on a saved operation. */ export type OperationHeader = { __typename?: 'OperationHeader'; /** The header's name. */ - name: Scalars['String']; + name: Scalars['String']['output']; /** The header's value. */ - value: Scalars['String']; + value: Scalars['String']['output']; }; export type OperationHeaderInput = { /** The header's name. */ - name: Scalars['String']; + name: Scalars['String']['input']; /** The header's value. */ - value: Scalars['String']; + value: Scalars['String']['input']; }; export type OperationInfoFilter = { __typename?: 'OperationInfoFilter'; - id: Scalars['String']; + id: Scalars['String']['output']; }; export type OperationInfoFilterInput = { - id: Scalars['String']; + id: Scalars['String']['input']; }; export type OperationInsightsListFilterInInput = { - clientName?: InputMaybe>>; - clientVersion?: InputMaybe>>; + clientName?: InputMaybe>>; + clientVersion?: InputMaybe>>; }; export type OperationInsightsListFilterInput = { - clientName?: InputMaybe; - clientVersion?: InputMaybe; + clientName?: InputMaybe; + clientVersion?: InputMaybe; in?: InputMaybe; - isUnnamed?: InputMaybe; - isUnregistered?: InputMaybe; + isUnnamed?: InputMaybe; + isUnregistered?: InputMaybe; operationTypes?: InputMaybe>; or?: InputMaybe>; - search?: InputMaybe; + search?: InputMaybe; }; export type OperationInsightsListItem = { __typename?: 'OperationInsightsListItem'; - cacheHitRate: Scalars['Float']; + cacheHitRate: Scalars['Float']['output']; /** The p50 of the latency across cached requests. This can be null depending on the filter and sort order. */ - cacheTtlP50Ms?: Maybe; + cacheTtlP50Ms?: Maybe; /** A substring of the query signature for unnamed operations, otherwise the operation name. */ - displayName: Scalars['String']; - errorCount: Scalars['Long']; - errorCountPerMin: Scalars['Float']; - errorPercentage: Scalars['Float']; + displayName: Scalars['String']['output']; + errorCount: Scalars['Long']['output']; + errorCountPerMin: Scalars['Float']['output']; + errorPercentage: Scalars['Float']['output']; /** The unique id for this operation. */ - id: Scalars['ID']; + id: Scalars['ID']['output']; /** The operation name or null if the operation is unnamed. */ - name?: Maybe; - requestCount: Scalars['Long']; - requestCountPerMin: Scalars['Float']; + name?: Maybe; + requestCount: Scalars['Long']['output']; + requestCountPerMin: Scalars['Float']['output']; /** The p50 of the latency across all requests. This can be null depending on the filter and sort order. */ - serviceTimeP50Ms?: Maybe; + serviceTimeP50Ms?: Maybe; /** The p90 of the latency across all requests. This can be null depending on the filter and sort order. */ - serviceTimeP90Ms?: Maybe; + serviceTimeP90Ms?: Maybe; /** The p95 of the latency across all requests. This can be null depending on the filter and sort order. */ - serviceTimeP95Ms?: Maybe; + serviceTimeP95Ms?: Maybe; /** The p99 of the latency across all requests. This can be null depending on the filter and sort order. */ - serviceTimeP99Ms?: Maybe; + serviceTimeP99Ms?: Maybe; /** The query signature size as a number of UTF8 bytes. This can be null if the sort order is not SIGNATURE_BYTES. */ - signatureBytes?: Maybe; + signatureBytes?: Maybe; /** The total duration across all requests. This can be null depending on the filter and sort order. */ - totalDurationMs?: Maybe; + totalDurationMs?: Maybe; type?: Maybe; }; @@ -8340,24 +9877,24 @@ export type OperationInsightsListOrderByInput = { export type OperationInsightsListPageInfo = { __typename?: 'OperationInsightsListPageInfo'; /** When paginating forwards, the cursor to continue. */ - endCursor?: Maybe; + endCursor?: Maybe; /** When paginating backwards, the cursor to continue. */ - startCursor?: Maybe; + startCursor?: Maybe; }; /** Operation name filter configuration for a graph. */ export type OperationNameFilter = { __typename?: 'OperationNameFilter'; /** name of the operation by the user and reported alongside metrics */ - name: Scalars['String']; - version?: Maybe; + name: Scalars['String']['output']; + version?: Maybe; }; /** Options to filter by operation name. */ export type OperationNameFilterInput = { /** name of the operation set by the user and reported alongside metrics */ - name: Scalars['String']; - version?: InputMaybe; + name: Scalars['String']['input']; + version?: InputMaybe; }; export enum OperationType { @@ -8368,11 +9905,22 @@ export enum OperationType { export type OperationValidationError = { __typename?: 'OperationValidationError'; - message: Scalars['String']; + message: Scalars['String']['output']; }; export type OperationsCheckConfiguration = { __typename?: 'OperationsCheckConfiguration'; + /** + * During operation checks, if this option is enabled, the check will not fail or + * mark any operations as broken/changed if the default value has changed, only + * if the default value is removed completely. + */ + downgradeDefaultValueChange: Scalars['Boolean']['output']; + /** + * During operation checks, if this option is enabled, it evaluates a check + * run against zero operations as a pass instead of a failure. + */ + downgradeStaticChecks: Scalars['Boolean']['output']; /** During the operations check, ignore clients matching any of the filters. */ excludedClients: Array; /** During the operations check, ignore operations matching any of the filters. */ @@ -8385,33 +9933,33 @@ export type OperationsCheckConfiguration = { * user or computed from variant- or graph-level settings. * @deprecated Use fromNormalized instead */ - from: Scalars['String']; + from: Scalars['String']['output']; /** The start of the time range for the operations check. */ - fromNormalized: Scalars['Timestamp']; + fromNormalized: Scalars['Timestamp']['output']; /** * During the operations check, fetch operations from the metrics data for * variants. */ - includedVariants: Array; + includedVariants: Array; /** * During the operations check, ignore operations that executed less than * times in the time range. */ - operationCountThreshold: Scalars['Int']; + operationCountThreshold: Scalars['Int']['output']; /** * Duration the operations check, ignore operations that constituted less than * % of the operations in the time range. */ - operationCountThresholdPercentage: Scalars['Float']; + operationCountThresholdPercentage: Scalars['Float']['output']; /** * The end of the time range for the operations check, expressed as an offset from the time the * check request was received (in seconds) or an ISO-8601 timestamp. This was either provided by the * user or computed from variant- or graph-level settings. * @deprecated Use toNormalized instead */ - to: Scalars['String']; + to: Scalars['String']['output']; /** The end of the time range for the operations check. */ - toNormalized: Scalars['Timestamp']; + toNormalized: Scalars['Timestamp']['output']; }; export type OperationsCheckConfigurationOverridesInput = { @@ -8436,42 +9984,44 @@ export type OperationsCheckConfigurationOverridesInput = { * useMaxRetention as false will use variant- or graph-level settings instead. It is an error to * provide a non-null value here and useMaxRetention as true. */ - from?: InputMaybe; + from?: InputMaybe; /** * During the operations check, fetch operations from the metrics data for * variants. Providing null will use variant- or graph-level settings instead. */ - includedVariants?: InputMaybe>; + includedVariants?: InputMaybe>; /** * During the operations check, ignore operations that executed less than * times in the time range. Providing null will use variant- or graph-level settings instead. */ - operationCountThreshold?: InputMaybe; + operationCountThreshold?: InputMaybe; /** * During the operations check, ignore operations that executed less than * times in the time range. Expected values are between 0% and 5%. Providing null will use variant- * or graph-level settings instead. */ - operationCountThresholdPercentage?: InputMaybe; + operationCountThresholdPercentage?: InputMaybe; /** * The end of the time range for the operations check, expressed as an offset from the time the * check request is received (in seconds) or an ISO-8601 timestamp. Providing null here and * useMaxRetention as false will use variant- or graph-level settings instead. It is an error to * provide a non-null value here and useMaxRetention as true. */ - to?: InputMaybe; + to?: InputMaybe; /** * During the operations check, use the maximum time range allowed by the graph's plan's retention. * Providing false here and from/to as null will use variant- or graph-level settings instead. It is * an error to provide true here and from/to as non-null. */ - useMaxRetention?: Scalars['Boolean']; + useMaxRetention?: Scalars['Boolean']['input']; }; export type OperationsCheckResult = { __typename?: 'OperationsCheckResult'; /** Operations affected by all changes in diff */ affectedQueries?: Maybe>; + /** Indicates whether the changes for this operation check were truncated due to their large quantity. */ + areChangesTruncated: Scalars['Boolean']['output']; /** Summary/counts for all changes in diff */ changeSummary: ChangeSummary; /** List of schema changes with associated affected clients and operations */ @@ -8480,30 +10030,36 @@ export type OperationsCheckResult = { checkSeverity: ChangeSeverity; /** The variant that was used as a base to check against */ checkedVariant: GraphVariant; - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; /** The threshold that was crossed; null if the threshold was not exceeded */ - crossedOperationThreshold?: Maybe; - id: Scalars['ID']; + crossedOperationThreshold?: Maybe; + /** Graph ID of the variant */ + graphID: Scalars['String']['output']; + id: Scalars['ID']['output']; /** Number of affected query operations that are neither marked as SAFE or IGNORED */ - numberOfAffectedOperations: Scalars['Int']; + numberOfAffectedOperations: Scalars['Int']['output']; /** Number of operations that were validated during schema diff */ - numberOfCheckedOperations: Scalars['Int']; + numberOfCheckedOperations: Scalars['Int']['output']; + /** Total number of schema changes, excluding any truncation. */ + totalNumberOfChanges: Scalars['Int']['output']; + /** Operations checked against but not affecting the diff. */ + unaffectedOperations?: Maybe>; workflowTask: OperationsCheckTask; }; export type OperationsCheckTask = CheckWorkflowTask & { __typename?: 'OperationsCheckTask'; - completedAt?: Maybe; - createdAt: Scalars['Timestamp']; - graphID: Scalars['ID']; - id: Scalars['ID']; + completedAt?: Maybe; + createdAt: Scalars['Timestamp']['output']; + graphID: Scalars['ID']['output']; + id: Scalars['ID']['output']; /** * The result of the operations check. This will be null when the task is initializing or running, * or when the build task fails (which is a prerequisite task to this one). */ result?: Maybe; status: CheckWorkflowTaskStatus; - targetURL?: Maybe; + targetURL?: Maybe; workflow: CheckWorkflow; }; @@ -8515,59 +10071,53 @@ export type Order = { * * This will only return data for IN_PROGRESS, COMPLETED, or SUPERSEDED states */ - completionPercentage?: Maybe; + completionPercentage?: Maybe; /** When this Order was created */ - createdAt: Scalars['NaiveDateTime']; + createdAt: Scalars['NaiveDateTime']['output']; /** Order identifier */ - id: Scalars['ID']; + id: Scalars['ID']['output']; /** Introspect why call to `ready` failed */ - introspectReady: Scalars['String']; + introspectReady: Scalars['String']['output']; logs: Array; /** Order type */ orderType: OrderType; - /** Checks if machines are ready to serve requests */ - ready: Scalars['Boolean']; /** Checks if we can serve requests through the external endpoint */ - readyExternal: Scalars['Boolean']; + readyExternal: Scalars['Boolean']['output']; /** Reason for ERRORED or ROLLING_BACK orders */ - reason?: Maybe; + reason?: Maybe; /** Router associated with this Order */ router: Router; /** Checks if the service is updated */ - serviceReady: Scalars['Boolean']; + serviceReady: Scalars['Boolean']['output']; /** Shard associated with this Order */ shard: Shard; /** Order status */ status: OrderStatus; /** Last time this Order was updated */ - updatedAt?: Maybe; + updatedAt?: Maybe; }; /** The order does not exist */ export type OrderDoesNotExistError = { __typename?: 'OrderDoesNotExistError'; - tryAgainSeconds: Scalars['Int']; + tryAgainSeconds: Scalars['Int']['output']; }; /** Catch-all failure result of a failed order mutation. */ export type OrderError = { __typename?: 'OrderError'; /** Error message */ - message: Scalars['String']; + message: Scalars['String']['output']; }; export type OrderMutation = { __typename?: 'OrderMutation'; /** Create an ALB rule */ createAlbRule: OrderResult; - /** Create a new app */ - createApp: OrderResult; /** Create CNAME record */ createCname: OrderResult; /** Create an IAM Role */ createIamRole: OrderResult; - /** Create machines */ - createMachines: OrderResult; /** Create a security group */ createSecurityGroup: OrderResult; /** Create an ECS service */ @@ -8580,14 +10130,10 @@ export type OrderMutation = { deleteAlbRule: OrderResult; /** Delete API key */ deleteApiKey: OrderResult; - /** Delete application */ - deleteApp: OrderResult; /** Delete CNAME */ deleteCname: OrderResult; /** Delete an IAM Role */ deleteIamRole: OrderResult; - /** Delete machines */ - deleteMachines: OrderResult; /** Delete a security group */ deleteSecurityGroup: OrderResult; /** Delete an ECS service */ @@ -8600,18 +10146,12 @@ export type OrderMutation = { forceRollback: OrderResult; /** Rollback an ALB rule */ rollbackAlbRule: OrderResult; - /** Rollback application */ - rollbackApp: OrderResult; /** Rollback CNAME record */ rollbackCname: OrderResult; - /** Rollback etcd data */ - rollbackEtcd: OrderResult; /** Rollback an IAM Role */ rollbackIamRole: OrderResult; /** Rollback router information */ rollbackInfo: OrderResult; - /** Rollback machines */ - rollbackMachines: OrderResult; /** Rollback router information */ rollbackSecrets: OrderResult; /** Rollback a security group */ @@ -8624,12 +10164,14 @@ export type OrderMutation = { rollbackTaskDefinition: OrderResult; /** Set default environment variables */ setDefaultVars: OrderResult; - /** Update Etcd cluster */ - updateEtcd: OrderResult; + /** Update an ALB rule */ + updateAlbRule: OrderResult; /** Update an IAM Role */ updateIamRole: OrderResult; /** Update router information */ updateInfo: OrderResult; + /** Update secrets */ + updateSecrets: OrderResult; /** Update a Service */ updateService: OrderResult; /** Update order status */ @@ -8641,15 +10183,17 @@ export type OrderMutation = { }; -export type OrderMutationupdateStatusArgs = { +export type OrderMutationUpdateStatusArgs = { status: OrderStatus; + updateRouter?: InputMaybe; }; -export type OrderMutationupdateStatusWithReasonArgs = { +export type OrderMutationUpdateStatusWithReasonArgs = { cause: ReasonCause; - reason: Scalars['String']; + reason: Scalars['String']['input']; status: OrderStatus; + updateRouter?: InputMaybe; }; /** Return an Order or an error */ @@ -8696,95 +10240,91 @@ export enum Ordering { DESCENDING = 'DESCENDING' } -export type OrgCustomerTraits = { - __typename?: 'OrgCustomerTraits'; - healthScore?: Maybe; - nextRenewalDate?: Maybe; - tier?: Maybe; - usersCount?: Maybe; -}; +export enum OrderingDirection { + ASC = 'ASC', + DESC = 'DESC' +} /** A reusable invite link for an organization. */ export type OrganizationInviteLink = { __typename?: 'OrganizationInviteLink'; - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; /** A joinToken that can be passed to Mutation.joinAccount to join the organization. */ - joinToken: Scalars['String']; + joinToken: Scalars['String']['output']; /** The role that the user will receive if they join the organization with this link. */ role: UserPermission; }; -export type OrganizationSSO = { +export type OrganizationSso = { __typename?: 'OrganizationSSO'; - connection?: Maybe; defaultRole: UserPermission; - idpid: Scalars['ID']; - provider: OrganizationSSOProvider; + idpid: Scalars['ID']['output']; + provider: OrganizationSsoProvider; }; -export enum OrganizationSSOProvider { - PINGONE = 'PINGONE' +export enum OrganizationSsoProvider { + APOLLO = 'APOLLO' } /** Information about pagination in a connection. */ export type PageInfo = { __typename?: 'PageInfo'; /** When paginating forwards, the cursor to continue. */ - endCursor?: Maybe; + endCursor?: Maybe; /** When paginating forwards, are there more items? */ - hasNextPage: Scalars['Boolean']; + hasNextPage: Scalars['Boolean']['output']; /** When paginating backwards, are there more items? */ - hasPreviousPage: Scalars['Boolean']; + hasPreviousPage: Scalars['Boolean']['output']; /** When paginating backwards, the cursor to continue. */ - startCursor?: Maybe; + startCursor?: Maybe; }; /** PagerDuty notification channel */ export type PagerDutyChannel = Channel & { __typename?: 'PagerDutyChannel'; - id: Scalars['ID']; - name: Scalars['String']; - routingKey: Scalars['String']; + id: Scalars['ID']['output']; + name: Scalars['String']['output']; + routingKey: Scalars['String']['output']; subscriptions: Array; }; /** PagerDuty notification channel parameters */ export type PagerDutyChannelInput = { - name?: InputMaybe; - routingKey: Scalars['String']; + name?: InputMaybe; + routingKey: Scalars['String']['input']; }; export type ParentChangeProposalComment = ChangeProposalComment & ProposalComment & { __typename?: 'ParentChangeProposalComment'; - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; /** null if the user is deleted */ createdBy?: Maybe; - id: Scalars['ID']; - message: Scalars['String']; + id: Scalars['ID']['output']; + message: Scalars['String']['output']; /** true if the schemaCoordinate this comment is on doesn't exist in the diff between the most recent revision & the base sdl */ - outdated: Scalars['Boolean']; + outdated: Scalars['Boolean']['output']; replies: Array; - replyCount: Scalars['Int']; - schemaCoordinate: Scalars['String']; + replyCount: Scalars['Int']['output']; + schemaCoordinate: Scalars['String']['output']; /** '#@!api!@#' for api schema, '#@!supergraph!@#' for supergraph schema, subgraph otherwise */ - schemaScope: Scalars['String']; + schemaScope: Scalars['String']['output']; status: CommentStatus; /** null if never updated */ - updatedAt?: Maybe; + updatedAt?: Maybe; }; export type ParentGeneralProposalComment = GeneralProposalComment & ProposalComment & { __typename?: 'ParentGeneralProposalComment'; - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; /** null if the user is deleted */ createdBy?: Maybe; - id: Scalars['ID']; - message: Scalars['String']; + id: Scalars['ID']['output']; + message: Scalars['String']['output']; replies: Array; - replyCount: Scalars['Int']; + replyCount: Scalars['Int']['output']; status: CommentStatus; /** null if never updated */ - updatedAt?: Maybe; + updatedAt?: Maybe; }; export type ParentProposalComment = ParentChangeProposalComment | ParentGeneralProposalComment; @@ -8792,30 +10332,39 @@ export type ParentProposalComment = ParentChangeProposalComment | ParentGeneralP /** SAML certificate information parsed from an IdP's metadata XML */ export type ParsedSamlCertInfo = { __typename?: 'ParsedSamlCertInfo'; - notAfter: Scalars['Timestamp']; - notBefore: Scalars['Timestamp']; - pem: Scalars['String']; - subjectDN: Scalars['String']; + notAfter: Scalars['Timestamp']['output']; + notBefore: Scalars['Timestamp']['output']; + pem: Scalars['String']['output']; + subjectDN: Scalars['String']['output']; }; /** SAML metadata parsed from an IdP's metadata XML */ export type ParsedSamlIdpMetadata = { __typename?: 'ParsedSamlIdpMetadata'; - entityId: Scalars['String']; - ssoUrl: Scalars['String']; + encryptionCerts: Array; + entityId: Scalars['String']['output']; + ssoUrl: Scalars['String']['output']; verificationCerts: Array; - wantsSignedRequests: Scalars['Boolean']; + wantsSignedRequests: Scalars['Boolean']['output']; +}; + +export type ParsedSchemaCoordinate = { + __typename?: 'ParsedSchemaCoordinate'; + argName?: Maybe; + fieldName?: Maybe; + isDirective?: Maybe; + typeName: Scalars['String']['output']; }; /** The schema for a single published subgraph in Studio. */ export type PartialSchema = { __typename?: 'PartialSchema'; /** Timestamp for when the partial schema was created */ - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; /** If this sdl is currently actively composed in the gateway, this is true */ - isLive: Scalars['Boolean']; + isLive: Scalars['Boolean']['output']; /** The subgraph schema document as SDL. */ - sdl: Scalars['String']; + sdl: Scalars['String']['output']; }; /** @@ -8834,55 +10383,53 @@ export type PartialSchemaInput = { * Hash of the partial schema to associate; error is thrown if only the hash is * specified and the hash has not been seen before */ - hash?: InputMaybe; + hash?: InputMaybe; /** * Contents of the partial schema in SDL syntax, but may reference types * that aren't defined in this document */ - sdl?: InputMaybe; -}; - -export type Permission = { - __typename?: 'Permission'; - csAdmin?: Maybe; - sudo: Scalars['Boolean']; + sdl?: InputMaybe; }; /** An error that's returned when the current user doesn't have sufficient permissions to perform an action. */ export type PermissionError = Error & { __typename?: 'PermissionError'; /** The error message. */ - message: Scalars['String']; + message: Scalars['String']['output']; }; /** Information about the act of publishing operations to the list */ export type PersistedQueriesPublish = { __typename?: 'PersistedQueriesPublish'; operationCounts: PersistedQueriesPublishOperationCounts; - publishedAt: Scalars['Timestamp']; + publishedAt: Scalars['Timestamp']['output']; }; export type PersistedQueriesPublishOperationCounts = { __typename?: 'PersistedQueriesPublishOperationCounts'; /** The number of new operations added to the list by this publish. */ - added: Scalars['Int']; + added: Scalars['Int']['output']; /** The number of operations included in this publish whose metadata and body were unchanged from the previous list revision. */ - identical: Scalars['Int']; + identical: Scalars['Int']['output']; /** The number of operations removed from the list by this publish. */ - removed: Scalars['Int']; + removed: Scalars['Int']['output']; /** The number of operations in this list that were not mentioned by this publish. */ - unaffected: Scalars['Int']; + unaffected: Scalars['Int']['output']; /** The number of operations whose metadata or body were changed by this publish. */ - updated: Scalars['Int']; + updated: Scalars['Int']['output']; }; export type PersistedQuery = { __typename?: 'PersistedQuery'; - body: Scalars['GraphQLDocument']; - firstPublishedAt: Scalars['Timestamp']; - id: Scalars['ID']; - lastPublishedAt: Scalars['Timestamp']; - name: Scalars['String']; + body: Scalars['GraphQLDocument']['output']; + /** An optional client name associated with the operation. Two operations with the same ID but different client names are treated as distinct operations. An operation with the same ID and a null client name is treated as a distinct operation as well. */ + clientName?: Maybe; + firstPublishedAt: Scalars['Timestamp']['output']; + /** An opaque identifier for this operation. For a given client name, this should map uniquely to an operation body; editing the body should generally result in a new ID. Apollo's tools generally use the lowercase hex SHA256 of the operation body. Note that for (eg) Apollo Client keyFields, you should use both `id` and `clientName`. */ + id: Scalars['ID']['output']; + lastPublishedAt: Scalars['Timestamp']['output']; + /** The GraphQL operation name for this operation. */ + name: Scalars['String']['output']; type: OperationType; }; @@ -8890,75 +10437,109 @@ export type PersistedQueryConnection = { __typename?: 'PersistedQueryConnection'; edges: Array; pageInfo: PageInfo; + totalCount: Scalars['Int']['output']; }; export type PersistedQueryEdge = { __typename?: 'PersistedQueryEdge'; - cursor: Scalars['String']; + cursor: Scalars['String']['output']; node: PersistedQuery; }; +/** Filter options for persisted query operations */ +export type PersistedQueryFilterInput = { + /** Only include operations whose client name is included in this list */ + clients?: InputMaybe>>; + /** Only include operations whose last published date is before or after the given date */ + lastPublishedAt?: InputMaybe; + /** Only include operations whose names contain this case-insensitive substring */ + name?: InputMaybe; +}; + +/** Full identifier for an operation in a Persisted Query List. */ +export type PersistedQueryIdInput = { + /** An optional client name to associate with the operation. Two operations with the same ID but different client names are treated as distinct operations. An operation with the same ID and a null client name is treated as a distinct operation as well. */ + clientName?: InputMaybe; + /** An opaque identifier for this operation. For a given client name, this should map uniquely to an operation body; editing the body should generally result in a new ID. Apollo's tools generally use the lowercase hex SHA256 of the operation body. */ + id: Scalars['ID']['input']; +}; + /** Operations to be published to the Persisted Query List. */ export type PersistedQueryInput = { /** The GraphQL document for this operation, including all necessary fragment definitions. */ - body: Scalars['GraphQLDocument']; + body: Scalars['GraphQLDocument']['input']; + /** An optional client name to associate with the operation. Two operations with the same ID but different client names are treated as distinct operations. */ + clientName?: InputMaybe; /** An opaque identifier for this operation. This should map uniquely to an operation body; editing the body should generally result in a new ID. Apollo's tools generally use the lowercase hex SHA256 of the operation body. */ - id: Scalars['ID']; + id: Scalars['ID']['input']; /** A name for the operation. Typically this is the name of the actual GraphQL operation in the body. This does not need to be unique within a Persisted Query List; as a client project evolves and its operations change, multiple operations with the same name (but different body and id) can be published. */ - name: Scalars['String']; + name: Scalars['String']['input']; /** The operation's type. */ type: OperationType; }; -/** TODO */ +/** A Persisted Query List for a graph. */ export type PersistedQueryList = { __typename?: 'PersistedQueryList'; builds: PersistedQueryListBuildConnection; - createdAt: Scalars['Timestamp']; + /** Distinct client names associated with all operations in this Persisted Query List, if any. */ + clientNames: StringConnection; + createdAt: Scalars['Timestamp']['output']; createdBy?: Maybe; + /** The current build of this PQL. */ currentBuild: PersistedQueryListBuild; - description: Scalars['String']; + description: Scalars['String']['output']; graph: Service; /** The immutable ID for this Persisted Query List. */ - id: Scalars['ID']; - lastUpdatedAt: Scalars['Timestamp']; + id: Scalars['ID']['output']; + lastUpdatedAt: Scalars['Timestamp']['output']; /** All variants linked to this Persisted Query List, if any. */ linkedVariants: Array; /** The list's name; can be changed and does not need to be unique. */ - name: Scalars['String']; + name: Scalars['String']['output']; operation?: Maybe; + /** All operations in this Persisted Query List, if any. */ operations: PersistedQueryConnection; }; -/** TODO */ -export type PersistedQueryListbuildsArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; +/** A Persisted Query List for a graph. */ +export type PersistedQueryListBuildsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; +}; + + +/** A Persisted Query List for a graph. */ +export type PersistedQueryListClientNamesArgs = { + first?: InputMaybe; }; -/** TODO */ -export type PersistedQueryListoperationArgs = { - id: Scalars['ID']; +/** A Persisted Query List for a graph. */ +export type PersistedQueryListOperationArgs = { + clientName?: InputMaybe; + id: Scalars['ID']['input']; }; -/** TODO */ -export type PersistedQueryListoperationsArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; +/** A Persisted Query List for a graph. */ +export type PersistedQueryListOperationsArgs = { + after?: InputMaybe; + before?: InputMaybe; + filter?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + sort?: InputMaybe; }; /** Information about a particular revision of the list, as produced by a particular publish. */ export type PersistedQueryListBuild = { __typename?: 'PersistedQueryListBuild'; /** A unique ID for this build revision; primarily useful as a client cache ID. */ - id: Scalars['String']; + id: Scalars['String']['output']; /** The persisted query list that this build built. */ list: PersistedQueryList; /** The chunks that made up this build. We do not commit to keeping the full contents of older revisions indefinitely, so this may be null for suitably old revisions. */ @@ -8966,9 +10547,9 @@ export type PersistedQueryListBuild = { /** Information about the publish operation that created this build. */ publish: PersistedQueriesPublish; /** The revision of this Persisted Query List. Revision 0 is the initial empty list; each publish increments the revision by 1. */ - revision: Scalars['Int']; + revision: Scalars['Int']['output']; /** The total number of operations in the list after this build. Compare to PersistedQueriesPublish.operationCounts. */ - totalOperationsInList: Scalars['Int']; + totalOperationsInList: Scalars['Int']['output']; }; export type PersistedQueryListBuildConnection = { @@ -8979,44 +10560,76 @@ export type PersistedQueryListBuildConnection = { export type PersistedQueryListBuildEdge = { __typename?: 'PersistedQueryListBuildEdge'; - cursor: Scalars['String']; + cursor: Scalars['String']['output']; node: PersistedQueryListBuild; }; export type PersistedQueryListManifestChunk = { __typename?: 'PersistedQueryListManifestChunk'; - id: Scalars['ID']; - json: Scalars['String']; + /** An immutable identifier for this particular chunk of a PQL. The contents referenced by this ID will never change. */ + id: Scalars['ID']['output']; + json: Scalars['String']['output']; list: PersistedQueryList; + /** The chunk can be downloaded from any of these URLs, which might be transient. */ + urls: Array; }; export type PersistedQueryListMutation = { __typename?: 'PersistedQueryListMutation'; + /** Deletes this Persisted Query List. */ delete: DeletePersistedQueryListResultOrError; - id: Scalars['ID']; + /** Deletes operations from this Persisted Query List based on filter criteria, with the ability to exclude specific operations. */ + deleteOperationsByFilter: DeleteOperationsByFilterResultOrError; + id: Scalars['ID']['output']; /** Updates this Persisted Query List by publishing a set of operations and removing other operations. Operations not mentioned remain in the list unchanged. */ publishOperations: PublishOperationsResultOrError; + /** Updates the name and/or description of the specified Persisted Query List. */ updateMetadata: UpdatePersistedQueryListMetadataResultOrError; }; -export type PersistedQueryListMutationpublishOperationsArgs = { - allowOverwrittenOperations?: InputMaybe; +export type PersistedQueryListMutationDeleteOperationsByFilterArgs = { + exclude?: InputMaybe>; + filter: PersistedQueryFilterInput; +}; + + +export type PersistedQueryListMutationPublishOperationsArgs = { + allowOverwrittenOperations?: InputMaybe; operations?: InputMaybe>; - removeOperations?: InputMaybe>; + remove?: InputMaybe>; + removeOperations?: InputMaybe>; }; -export type PersistedQueryListMutationupdateMetadataArgs = { - description?: InputMaybe; - name?: InputMaybe; +export type PersistedQueryListMutationUpdateMetadataArgs = { + description?: InputMaybe; + name?: InputMaybe; +}; + +/** Columns available for sorting persisted query operations */ +export enum PersistedQuerySortColumn { + /** Sort by the first published date */ + FIRST_PUBLISHED_AT = 'FIRST_PUBLISHED_AT', + /** Sort by the last published date */ + LAST_PUBLISHED_AT = 'LAST_PUBLISHED_AT', + /** Sort by name */ + NAME = 'NAME' +} + +/** Sort options for persisted query operations */ +export type PersistedQuerySortInput = { + /** The column to sort by */ + column: PersistedQuerySortColumn; + /** The direction of sorting */ + direction: Ordering; }; /** An error related to an organization's Apollo Studio plan. */ export type PlanError = { __typename?: 'PlanError'; /** The error message. */ - message: Scalars['String']; + message: Scalars['String']['output']; }; /** GraphQL representation of an AWS private subgraph */ @@ -9025,9 +10638,9 @@ export type PrivateSubgraph = { /** The cloud provider where the subgraph is hosted */ cloudProvider: CloudProvider; /** The domain URL of the private subgraph */ - domainUrl?: Maybe; + domainUrl?: Maybe; /** The name of the subgraph, if set */ - name?: Maybe; + name?: Maybe; /** The private subgraph's region */ region: RegionDescription; /** The status of the resource share */ @@ -9041,7 +10654,7 @@ export type PrivateSubgraphMutation = { }; -export type PrivateSubgraphMutationsyncArgs = { +export type PrivateSubgraphMutationSyncArgs = { input: SyncPrivateSubgraphsInput; }; @@ -9064,7 +10677,7 @@ export enum PrivateSubgraphShareStatus { export type PromoteSchemaError = { __typename?: 'PromoteSchemaError'; code: PromoteSchemaErrorCode; - message: Scalars['String']; + message: Scalars['String']['output']; }; export enum PromoteSchemaErrorCode { @@ -9086,70 +10699,101 @@ export type PromoteSchemaResponseOrError = PromoteSchemaError | PromoteSchemaRes export type Proposal = { __typename?: 'Proposal'; + /** + * A list of the activities for this proposal. + * If first and last are not specified, defaults to 25. If one is specified there is a max allowed value of 50. + */ activities: ProposalActivityConnection; /** The variant this Proposal is under the hood. */ backingVariant: GraphVariant; /** Can the current user can edit THIS proposal, either by authorship or role level */ - canEditProposal: Scalars['Boolean']; + canEditProposal: Scalars['Boolean']['output']; + changes: Array; comment?: Maybe; - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; /** * null if user is deleted, or if user removed from org * and others in the org no longer have access to this user's info */ createdBy?: Maybe; /** The description of this Proposal. */ - description: Scalars['String']; - descriptionUpdatedAt?: Maybe; + description: Scalars['String']['output']; + descriptionUpdatedAt?: Maybe; descriptionUpdatedBy?: Maybe; - displayName: Scalars['String']; - id: Scalars['ID']; + displayName: Scalars['String']['output']; + /** A flag indicating if changes have been detected on the source variant. Will be false if proposal was created prior to the pull upstream feature release on Nov 15, 2024. */ + hasUpstreamChanges: Scalars['Boolean']['output']; + id: Scalars['ID']['output']; implementedChanges: Array; /** True if only some of the changes in this proposal are currently published to the implementation variant */ - isPartiallyImplemented: Scalars['Boolean']; + isPartiallyImplemented: Scalars['Boolean']['output']; latestRevision: ProposalRevision; + mergeBaseCompositionId?: Maybe; + /** + * Use mergedSdlWithConflicts instead. + * @deprecated Use mergedSdlWithConflicts instead + */ + mergedSdl: Array; + /** Returns a partially merged sdl string and list of conflicts in the sdl by merging the proposals's current sdl and the source variant's current sdl against the source variant's sdl at the time of the last merge or proposal creation. */ + mergedSdlWithConflicts?: Maybe; parentComments: Array; rebaseConflicts?: Maybe; /** null if user deleted or removed from org */ requestedReviewers: Array>; reviews: Array; + revision?: Maybe; + revisionHistory: ProposalRevisionHistoryResult; /** The variant this Proposal was cloned/sourced from. */ sourceVariant: GraphVariant; status: ProposalStatus; - updatedAt: Scalars['Timestamp']; + updatedAt: Scalars['Timestamp']['output']; updatedBy?: Maybe; }; -export type ProposalactivitiesArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; +export type ProposalActivitiesArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; }; -export type ProposalcommentArgs = { - id: Scalars['ID']; +export type ProposalCommentArgs = { + id: Scalars['ID']['input']; }; -export type ProposalparentCommentsArgs = { +export type ProposalParentCommentsArgs = { filter?: InputMaybe; }; + +export type ProposalRevisionArgs = { + id: Scalars['ID']['input']; +}; + + +export type ProposalRevisionHistoryArgs = { + limit?: Scalars['Int']['input']; + offset?: Scalars['Int']['input']; + orderBy?: InputMaybe; +}; + export type ProposalActivity = { __typename?: 'ProposalActivity'; activity?: Maybe; - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; createdBy?: Maybe; - id: Scalars['ID']; + id: Scalars['ID']['output']; target?: Maybe; }; export enum ProposalActivityAction { /** When the system changes a Proposal's status back to OPEN from APPROVED when approvals drop below min approvals. */ APPROVAL_WITHDRAWN = 'APPROVAL_WITHDRAWN', + /** When the system changes a Proposal's status back to OPEN from APPROVED when a change is made after a proposal or review is approved. */ + APPROVAL_WITHDRAWN_ON_PUBLISH = 'APPROVAL_WITHDRAWN_ON_PUBLISH', /** When a user manually sets a Proposal to Close */ CLOSE_PROPOSAL = 'CLOSE_PROPOSAL', /** When a Comment is added to a Proposal. */ @@ -9181,18 +10825,24 @@ export type ProposalActivityConnection = { edges?: Maybe>; nodes: Array; pageInfo: PageInfo; - totalCount: Scalars['Int']; + totalCount: Scalars['Int']['output']; }; export type ProposalActivityEdge = { __typename?: 'ProposalActivityEdge'; /** A cursor for use in pagination. */ - cursor: Scalars['String']; + cursor: Scalars['String']['output']; node?: Maybe; }; export type ProposalActivityTarget = ParentChangeProposalComment | ParentGeneralProposalComment | Proposal | ProposalFullImplementationProposalOrigin | ProposalFullImplementationVariantOrigin | ProposalPartialImplementationProposalOrigin | ProposalPartialImplementationVariantOrigin | ProposalReview | ProposalRevision; +export type ProposalChange = { + __typename?: 'ProposalChange'; + diffItem: FlatDiffItem; + implemented: Scalars['Boolean']['output']; +}; + export enum ProposalChangeMismatchSeverity { ERROR = 'ERROR', OFF = 'OFF', @@ -9200,17 +10850,17 @@ export enum ProposalChangeMismatchSeverity { } export type ProposalComment = { - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; /** null if the user is deleted */ createdBy?: Maybe; - id: Scalars['ID']; - message: Scalars['String']; + id: Scalars['ID']['output']; + message: Scalars['String']['output']; status: CommentStatus; /** null if never updated */ - updatedAt?: Maybe; + updatedAt?: Maybe; }; -export type ProposalCommentResult = NotFoundError | ParentChangeProposalComment | ParentGeneralProposalComment | ReplyChangeProposalComment | ReplyGeneralProposalComment; +export type ProposalCommentResult = NotFoundError | ParentChangeProposalComment | ParentGeneralProposalComment | ReplyChangeProposalComment | ReplyGeneralProposalComment | ReviewProposalComment; export enum ProposalCoverage { FULL = 'FULL', @@ -9223,10 +10873,10 @@ export enum ProposalCoverage { export type ProposalFullImplementationProposalOrigin = ProposalImplementation & { __typename?: 'ProposalFullImplementationProposalOrigin'; /** the time this Proposal became implemented in the implementation target variant. */ - createdAt: Scalars['Timestamp']; - id: Scalars['ID']; + createdAt: Scalars['Timestamp']['output']; + id: Scalars['ID']['output']; /** the diff that was matched between the Proposal and the implementation target variant. TODO to deserialize this back into a DiffItem NEBULA-2726 */ - jsonDiff: Array; + jsonDiff: Array; /** Revision containing a diff that fully implements this Proposal in the implementation target variant. */ revision: ProposalRevision; /** the target variant this Proposal became implemented in. */ @@ -9236,10 +10886,10 @@ export type ProposalFullImplementationProposalOrigin = ProposalImplementation & export type ProposalFullImplementationVariantOrigin = ProposalImplementation & { __typename?: 'ProposalFullImplementationVariantOrigin'; /** the time this Proposal became implemented in the implementation target variant. */ - createdAt: Scalars['Timestamp']; - id: Scalars['ID']; + createdAt: Scalars['Timestamp']['output']; + id: Scalars['ID']['output']; /** the diff that was matched between the Proposal and the implementation target variant. TODO to deserialize this back into a DiffItem NEBULA-2726 */ - jsonDiff: Array; + jsonDiff: Array; /** launch containing a diff that fully implements this Proposal in the implementation target variant. null if user does not have access to launches */ launch?: Maybe; /** the target variant this Proposal became implemented in. */ @@ -9248,10 +10898,10 @@ export type ProposalFullImplementationVariantOrigin = ProposalImplementation & { export type ProposalImplementation = { /** the time this Proposal became implemented in the implementation target variant. */ - createdAt: Scalars['Timestamp']; - id: Scalars['ID']; + createdAt: Scalars['Timestamp']['output']; + id: Scalars['ID']['output']; /** the diff that was matched between the Proposal and the implementation target variant */ - jsonDiff: Array; + jsonDiff: Array; /** the target variant this Proposal became implemented in. */ variant: GraphVariant; }; @@ -9259,8 +10909,35 @@ export type ProposalImplementation = { export type ProposalImplementedChange = { __typename?: 'ProposalImplementedChange'; diffItem: FlatDiffItem; - launchId: Scalars['ID']; - subgraph: Scalars['String']; + launchId: Scalars['ID']['output']; + subgraph: Scalars['String']['output']; +}; + +export enum ProposalLifecycleEvent { + PROPOSAL_CREATED = 'PROPOSAL_CREATED', + REVISION_SAVED = 'REVISION_SAVED', + STATUS_CHANGE = 'STATUS_CHANGE' +} + +export type ProposalLifecycleSubscription = ChannelSubscription & { + __typename?: 'ProposalLifecycleSubscription'; + /** The channels that will be notified on this subscription. */ + channels: Array; + /** The time when this ProposalLifecycleSubscription was created. */ + createdAt: Scalars['Timestamp']['output']; + /** The Identity that created this ProposalLifecycleSubscription. null if the Identity has been deleted. */ + createdBy?: Maybe; + /** True if this ProposalLifecycleSubscription is actively sending notifications. */ + enabled: Scalars['Boolean']['output']; + /** The ProposalLifecycleEvents that will trigger notifications on this subscription. */ + events: Array; + id: Scalars['ID']['output']; + /** The last time this subscription was updated, if never updated will be the createdAt time. */ + lastUpdatedAt: Scalars['Timestamp']['output']; + /** The Identity that last updated this ProposalLifecycleSubscription, or the creator if no one has updated. null if the Identity has been deleted. */ + lastUpdatedBy?: Maybe; + /** Always null for ProposalLifecycleSubscription. */ + variant?: Maybe; }; /** Mutations for editing GraphOS Schema Proposals. See documentation at https://www.apollographql.com/docs/graphos/delivery/schema-proposals */ @@ -9279,6 +10956,8 @@ export type ProposalMutation = { reRunCheckForRevision: ReRunCheckForRevisionResult; /** Removes all requested reviewers and their reviews that are not part of the new set of default reviewers. Adds any new default reviewers to the list of requested reviewers for this proposal. */ replaceReviewersWithDefaultReviewers: ReplaceReviewersWithDefaultReviewersResult; + /** Set the mergeBaseCompositionId of this Proposal, if it is null. Must be internal MDG user with sudo. */ + setMergeBaseCompositionId: SetMergeBaseCompositionIdResult; /** Updates the description of this Proposal variant. Returns ValidationError if description exceeds max length of 10k characters. */ updateDescription: UpdateProposalResult; /** Update the title of this proposal. */ @@ -9292,73 +10971,79 @@ export type ProposalMutation = { /** Mutations for editing GraphOS Schema Proposals. See documentation at https://www.apollographql.com/docs/graphos/delivery/schema-proposals */ -export type ProposalMutationaddCommentArgs = { +export type ProposalMutationAddCommentArgs = { input: AddCommentInput; }; /** Mutations for editing GraphOS Schema Proposals. See documentation at https://www.apollographql.com/docs/graphos/delivery/schema-proposals */ -export type ProposalMutationdeleteCommentArgs = { +export type ProposalMutationDeleteCommentArgs = { input: DeleteCommentInput; }; /** Mutations for editing GraphOS Schema Proposals. See documentation at https://www.apollographql.com/docs/graphos/delivery/schema-proposals */ -export type ProposalMutationdeleteSubgraphArgs = { +export type ProposalMutationDeleteSubgraphArgs = { input: DeleteProposalSubgraphInput; }; /** Mutations for editing GraphOS Schema Proposals. See documentation at https://www.apollographql.com/docs/graphos/delivery/schema-proposals */ -export type ProposalMutationeditCommentArgs = { +export type ProposalMutationEditCommentArgs = { input: EditCommentInput; }; /** Mutations for editing GraphOS Schema Proposals. See documentation at https://www.apollographql.com/docs/graphos/delivery/schema-proposals */ -export type ProposalMutationpublishSubgraphsArgs = { +export type ProposalMutationPublishSubgraphsArgs = { input: PublishProposalSubgraphsInput; }; /** Mutations for editing GraphOS Schema Proposals. See documentation at https://www.apollographql.com/docs/graphos/delivery/schema-proposals */ -export type ProposalMutationreRunCheckForRevisionArgs = { +export type ProposalMutationReRunCheckForRevisionArgs = { input: ReRunCheckForRevisionInput; }; /** Mutations for editing GraphOS Schema Proposals. See documentation at https://www.apollographql.com/docs/graphos/delivery/schema-proposals */ -export type ProposalMutationupdateDescriptionArgs = { +export type ProposalMutationSetMergeBaseCompositionIdArgs = { + input: SetMergeBaseCompositionIdInput; +}; + + +/** Mutations for editing GraphOS Schema Proposals. See documentation at https://www.apollographql.com/docs/graphos/delivery/schema-proposals */ +export type ProposalMutationUpdateDescriptionArgs = { input: UpdateDescriptionInput; }; /** Mutations for editing GraphOS Schema Proposals. See documentation at https://www.apollographql.com/docs/graphos/delivery/schema-proposals */ -export type ProposalMutationupdateDisplayNameArgs = { - displayName: Scalars['String']; +export type ProposalMutationUpdateDisplayNameArgs = { + displayName: Scalars['String']['input']; }; /** Mutations for editing GraphOS Schema Proposals. See documentation at https://www.apollographql.com/docs/graphos/delivery/schema-proposals */ -export type ProposalMutationupdateRequestedReviewersArgs = { +export type ProposalMutationUpdateRequestedReviewersArgs = { input: UpdateRequestedReviewersInput; }; /** Mutations for editing GraphOS Schema Proposals. See documentation at https://www.apollographql.com/docs/graphos/delivery/schema-proposals */ -export type ProposalMutationupdateStatusArgs = { +export type ProposalMutationUpdateStatusArgs = { status: ProposalStatus; }; /** Mutations for editing GraphOS Schema Proposals. See documentation at https://www.apollographql.com/docs/graphos/delivery/schema-proposals */ -export type ProposalMutationupdateUpdatedByInfoArgs = { - timestamp: Scalars['Timestamp']; +export type ProposalMutationUpdateUpdatedByInfoArgs = { + timestamp: Scalars['Timestamp']['input']; }; /** Mutations for editing GraphOS Schema Proposals. See documentation at https://www.apollographql.com/docs/graphos/delivery/schema-proposals */ -export type ProposalMutationupsertReviewArgs = { +export type ProposalMutationUpsertReviewArgs = { input: UpsertReviewInput; }; @@ -9367,10 +11052,10 @@ export type ProposalMutationResult = NotFoundError | PermissionError | ProposalM export type ProposalPartialImplementationProposalOrigin = ProposalImplementation & { __typename?: 'ProposalPartialImplementationProposalOrigin'; /** the time this Proposal became partially implemented in the implementation target variant. */ - createdAt: Scalars['Timestamp']; - id: Scalars['ID']; + createdAt: Scalars['Timestamp']['output']; + id: Scalars['ID']['output']; /** the diff that was matched between the Proposal and the implementation target variant. TODO to deserialize this back into a DiffItem NEBULA-2726 */ - jsonDiff: Array; + jsonDiff: Array; /** Revision containing a diff that partially implements this Proposal in the implementation target variant. */ revision: ProposalRevision; /** the target variant this Proposal became partially implemented in. */ @@ -9380,10 +11065,10 @@ export type ProposalPartialImplementationProposalOrigin = ProposalImplementation export type ProposalPartialImplementationVariantOrigin = ProposalImplementation & { __typename?: 'ProposalPartialImplementationVariantOrigin'; /** the time this Proposal became partially implemented in the implementation target variant. */ - createdAt: Scalars['Timestamp']; - id: Scalars['ID']; + createdAt: Scalars['Timestamp']['output']; + id: Scalars['ID']['output']; /** the diff that was matched between the Proposal and the implementation target variant. TODO to deserialize this back into a DiffItem NEBULA-2726 */ - jsonDiff: Array; + jsonDiff: Array; /** launch containing a diff that partially implements this Proposal in the implementation target variant. null if user does not have access to launches */ launch?: Maybe; /** the target variant this Proposal became partially implemented in. */ @@ -9399,11 +11084,12 @@ export type ProposalRequestedReviewer = { export type ProposalReview = { __typename?: 'ProposalReview'; comment?: Maybe; - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; createdBy?: Maybe; decision: ReviewDecision; - isDismissed: Scalars['Boolean']; - updatedAt?: Maybe; + id: Scalars['ID']['output']; + isDismissed: Scalars['Boolean']['output']; + updatedAt?: Maybe; updatedBy?: Maybe; }; @@ -9411,15 +11097,42 @@ export type ProposalRevision = { __typename?: 'ProposalRevision'; /** On publish, checks are triggered on a proposal automatically. However, if an error occurred triggering a check on publish, we skip attempting the check to avoid blocking the publish from succeeding. This is the only case this field would be null. */ checkWorkflow?: Maybe; - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; createdBy?: Maybe; - id: Scalars['ID']; + id: Scalars['ID']['output']; + isMerge: Scalars['Boolean']['output']; launch?: Maybe; + /** ID of the launch that this revision is associated with. For internal use only, correct schema usage would be to access through the Launch, but CONSUMER role has no access to launch, yet they need access to the schema publish. */ + launchId: Scalars['ID']['output']; + /** Latest composition ID of the proposal's source variant at the time this revision was created. */ + mergeBaseCompositionId?: Maybe; + /** Latest launch of the proposal's source variant at the time this revision was created. */ + mergeBaseLaunch?: Maybe; + /** The schema publish of the proposal's source variant at the time this revision was created. Null if the launch is PENDING. */ + mergeBaseSchemaPublish?: Maybe; /** null if this is the first revision */ previousRevision?: Maybe; - summary: Scalars['String']; + /** The schema publish for this revision. Null while the launch is PENDING. */ + schemaPublish?: Maybe; + summary: Scalars['String']['output']; +}; + +export enum ProposalRevisionHistoryOrder { + /** List revisions from oldest to newest. */ + CREATED_ASC = 'CREATED_ASC', + /** List revisions from newest to oldest, default. */ + CREATED_DESC = 'CREATED_DESC' +} + +export type ProposalRevisionHistoryResult = { + __typename?: 'ProposalRevisionHistoryResult'; + revisions: Array; + /** This is the total number of revisions for the proposal, regardless of the size of the returned list. */ + totalCount: Scalars['Int']['output']; }; +export type ProposalRevisionResult = NotFoundError | ProposalRevision; + export type ProposalRoles = { __typename?: 'ProposalRoles'; create: UserPermission; @@ -9437,7 +11150,7 @@ export enum ProposalStatus { export type ProposalVariantCreationErrors = { __typename?: 'ProposalVariantCreationErrors'; /** A list of all errors that occurred when attempting to create a proposal variant. */ - errorMessages: Array; + errorMessages: Array; }; export type ProposalVariantCreationResult = GraphVariant | ProposalVariantCreationErrors; @@ -9445,31 +11158,33 @@ export type ProposalVariantCreationResult = GraphVariant | ProposalVariantCreati /** Filtering options for graph connections. */ export type ProposalVariantsFilter = { /** Only include proposals that were created with these variants as a base. */ - sourceVariants?: InputMaybe>; + sourceVariants?: InputMaybe>; /** Only include proposals of a certain status. */ status?: InputMaybe>; /** Only include proposals that have updated these subgraph names */ - subgraphs?: InputMaybe>; + subgraphs?: InputMaybe>; }; /** Proposal variants, limited & offset based on Service.proposalVariants & the total count */ export type ProposalVariantsResult = { __typename?: 'ProposalVariantsResult'; /** The total number of proposal variants on this graph */ - totalCount: Scalars['Int']; + totalCount: Scalars['Int']['output']; variants: Array; }; export type ProposalsCheckTask = CheckWorkflowTask & { __typename?: 'ProposalsCheckTask'; - completedAt?: Maybe; - createdAt: Scalars['Timestamp']; + completedAt?: Maybe; + createdAt: Scalars['Timestamp']['output']; /** The results of this proposal check were overridden */ - didOverrideProposalsCheckTask: Scalars['Boolean']; - /** Diff items in this Check task. */ + didOverrideProposalsCheckTask: Scalars['Boolean']['output']; + /** Diff items in this Check task. Will be empty list if hasExceededMaxDiffs is true. */ diffs: Array; - graphID: Scalars['ID']; - id: Scalars['ID']; + graphID: Scalars['ID']['output']; + /** Indicates if the number of diffs in this check has exceeded the maximum allowed. null if this check was run before this field was added. */ + hasExceededMaxDiffs?: Maybe; + id: Scalars['ID']['output']; /** Indicates the level of coverage a check's changeset is in approved Proposals. PENDING while Check is still running. */ proposalCoverage: ProposalCoverage; /** Proposals with their state at the time the check was run associated to this check task. */ @@ -9479,7 +11194,7 @@ export type ProposalsCheckTask = CheckWorkflowTask & { /** The configured severity at the time the check was run. If the check failed, this is the severity that should be shown. While this Check is PENDING defaults to Service's severityLevel. */ severityLevel: ProposalChangeMismatchSeverity; status: CheckWorkflowTaskStatus; - targetURL?: Maybe; + targetURL?: Maybe; workflow: CheckWorkflow; }; @@ -9489,15 +11204,34 @@ export type ProposalsCheckTaskDiff = { /** A diff item in this Check Task. */ diffItem: FlatDiffItem; /** If this diff item is associated with an approved Proposal. */ - hasApprovedProposal: Scalars['Boolean']; + hasApprovedProposal: Scalars['Boolean']['output']; /** Proposals associated with this diff. */ relatedProposalResults: Array; /** The subgraph this diff belongs to. */ - subgraph: Scalars['String']; + subgraph: Scalars['String']['output']; +}; + +/** Filtering options for list of proposals. */ +export type ProposalsFilterInput = { + /** Only include proposals that were created with these variants as a base. */ + sourceVariants?: InputMaybe>; + /** Only include proposals of a certain status. */ + status?: InputMaybe>; + /** Only include proposals that have updated these subgraph names */ + subgraphs?: InputMaybe>; }; export type ProposalsMustBeApprovedByADefaultReviewerResult = PermissionError | Service | ValidationError; +/** Proposals, limited & offset based on Service.proposals & the total count */ +export type ProposalsResult = { + __typename?: 'ProposalsResult'; + /** The proposals on this graph. */ + proposals: Array; + /** The total number of proposals on this graph */ + totalCount: Scalars['Int']['output']; +}; + export type ProposedBuildInputChanges = ProposedCompositionBuildInputChanges | ProposedFilterBuildInputChanges; export type ProposedCompositionBuildInputChanges = { @@ -9511,9 +11245,9 @@ export type ProposedCompositionBuildInputChanges = { export type ProposedCompositionBuildInputSubgraphUpsert = { __typename?: 'ProposedCompositionBuildInputSubgraphUpsert'; /** The name of the subgraph changed in this subgraph upsert. */ - name: Scalars['String']; + name: Scalars['String']['output']; /** The SHA-256 of the schema document in this subgraph upsert. */ - schemaHash?: Maybe; + schemaHash?: Maybe; }; export type ProposedFilterBuildInputChanges = { @@ -9521,25 +11255,25 @@ export type ProposedFilterBuildInputChanges = { /** The proposed new build pipeline track, or null if no such change was proposed. */ buildPipelineTrackChange?: Maybe; /** Any proposed additions to exclude filters, or the empty list if no such changes were proposed. */ - excludeAdditions: Array; + excludeAdditions: Array; /** Any proposed removals to exclude filters, or the empty list if no such changes were proposed. */ - excludeRemovals: Array; + excludeRemovals: Array; /** The proposed value for whether to hide unreachable schema elements, or null if no such change was proposed. */ - hideUnreachableTypesChange?: Maybe; + hideUnreachableTypesChange?: Maybe; /** Any proposed additions to include filters, or the empty list if no such changes were proposed. */ - includeAdditions: Array; + includeAdditions: Array; /** Any proposed removals to include filters, or the empty list if no such changes were proposed. */ - includeRemovals: Array; + includeRemovals: Array; /** The proposed new build pipeline track, or null if no such change was proposed. */ - supergraphSchemaHashChange?: Maybe; + supergraphSchemaHashChange?: Maybe; }; export type Protobuf = { __typename?: 'Protobuf'; - json: Scalars['String']; - object: Scalars['Object']; - raw: Scalars['Blob']; - text: Scalars['String']; + json: Scalars['String']['output']; + object: Scalars['Object']['output']; + raw: Scalars['Blob']['output']; + text: Scalars['String']['output']; }; /** The result of a successful call to PersistedQueryListMutation.publishOperations. */ @@ -9548,20 +11282,22 @@ export type PublishOperationsResult = { /** The build created by this publish operation. */ build: PersistedQueryListBuild; /** Returns `true` if no changes were made by this publish (and no new revision was created). Otherwise, returns `false`. */ - unchanged: Scalars['Boolean']; + unchanged: Scalars['Boolean']['output']; }; -/** The interface returned by PersistedQueryListMutation.publishOperations. */ +/** The result/error union returned by PersistedQueryListMutation.publishOperations. */ export type PublishOperationsResultOrError = CannotModifyOperationBodyError | PermissionError | PublishOperationsResult; export type PublishProposalSubgraphResult = NotFoundError | PermissionError | Proposal | SchemaValidationError | ValidationError; export type PublishProposalSubgraphsInput = { gitContext?: InputMaybe; - previousLaunchId: Scalars['ID']; - revision: Scalars['String']; + /** Non null if this publish is a merge revision. The composition id of the source variant updated to. This is necessary to keep track of the last composition id this proposal is updated with. */ + mergeUpdateCompositionId?: InputMaybe; + previousLaunchId: Scalars['ID']['input']; + revision: Scalars['String']['input']; subgraphInputs: Array; - summary: Scalars['String']; + summary: Scalars['String']['input']; }; /** The result attempting to publish subgraphs with async build. */ @@ -9570,72 +11306,88 @@ export type PublishSubgraphsAsyncBuildResult = { /** The Launch result part of this subgraph publish. */ launch?: Maybe; /** Human-readable text describing the launch result of the subgraph publish. */ - launchCliCopy?: Maybe; + launchCliCopy?: Maybe; /** The URL of the Studio page for this update's associated launch, if available. */ - launchUrl?: Maybe; + launchUrl?: Maybe; }; export type PublishSubgraphsSubgraphInput = { activePartialSchema: PartialSchemaInput; - name: Scalars['String']; - url?: InputMaybe; + name: Scalars['String']['input']; + url?: InputMaybe; }; export type PushMarketoLeadInput = { /** Clearbit enriched LinkedIn URL */ - Clearbit_LinkedIn_URL__c?: InputMaybe; + Clearbit_LinkedIn_URL__c?: InputMaybe; /** Company domain */ - Company_Domain__c?: InputMaybe; + Company_Domain__c?: InputMaybe; /** GDPR Explicit Opt in */ - Explicit_Opt_in__c?: InputMaybe; + Explicit_Opt_in__c?: InputMaybe; /** Google Click ID */ - Google_Click_ID__c?: InputMaybe; + Google_Click_ID__c?: InputMaybe; /** GA Client ID */ - Google_User_ID__c?: InputMaybe; + Google_User_ID__c?: InputMaybe; /** GraphQL Production Stage */ - GraphQL_Production_Stage__c?: InputMaybe; + GraphQL_Production_Stage__c?: InputMaybe; /** Job Function */ - Job_Function__c?: InputMaybe; + Job_Function__c?: InputMaybe; /** Lead Message */ - Lead_Message__c?: InputMaybe; + Lead_Message__c?: InputMaybe; /** Lead Source Detail */ - Lead_Source_Detail__c?: InputMaybe; + Lead_Source_Detail__c?: InputMaybe; /** Lead Source Most Recent Detail */ - Lead_Source_Most_Recent_Detail__c?: InputMaybe; + Lead_Source_Most_Recent_Detail__c?: InputMaybe; /** Lead Source Most Recent */ - Lead_Source_Most_Recent__c?: InputMaybe; + Lead_Source_Most_Recent__c?: InputMaybe; /** Referrer */ - Referrer__c?: InputMaybe; + Referrer__c?: InputMaybe; + /** Studio Organization ID */ + Studio_Organization_ID__c?: InputMaybe; /** Studio User Id */ - Studio_User_Id__c?: InputMaybe; + Studio_User_Id__c?: InputMaybe; /** UTM Campaign First Touch */ - UTM_Campaign_First_Touch__c?: InputMaybe; + UTM_Campaign_First_Touch__c?: InputMaybe; /** UTM Campaign */ - UTM_Campaign__c?: InputMaybe; + UTM_Campaign__c?: InputMaybe; /** UTM ICID */ - UTM_ICID__c?: InputMaybe; + UTM_ICID__c?: InputMaybe; /** UTM Medium First Touch */ - UTM_Medium_First_Touch__c?: InputMaybe; + UTM_Medium_First_Touch__c?: InputMaybe; /** UTM Medium */ - UTM_Medium__c?: InputMaybe; + UTM_Medium__c?: InputMaybe; /** UTM Source First Touch */ - UTM_Source_First_Touch__c?: InputMaybe; + UTM_Source_First_Touch__c?: InputMaybe; /** UTM Source */ - UTM_Source__c?: InputMaybe; + UTM_Source__c?: InputMaybe; /** UTM Term */ - UTM_Term__c?: InputMaybe; + UTM_Term__c?: InputMaybe; /** Company name */ - company?: InputMaybe; + company?: InputMaybe; /** Country */ - country?: InputMaybe; + country?: InputMaybe; /** Email address */ - email?: InputMaybe; + email?: InputMaybe; /** First name */ - firstName?: InputMaybe; + firstName?: InputMaybe; + /** Is Graph Champion */ + isGraphChampion?: InputMaybe; /** Last name */ - lastName?: InputMaybe; + lastName?: InputMaybe; + /** Notes Import */ + notesImport?: InputMaybe; /** Phone number */ - phone?: InputMaybe; + phone?: InputMaybe; + /** UTM Campaign Capture Mkto Only */ + uTMCampaignCaptureMktoOnly?: InputMaybe; + /** UTM ICID Capture Mkto Only */ + uTMICIDCaptureMktoOnly?: InputMaybe; + /** UTM Medium Capture Mkto Only */ + uTMMediumCaptureMktoOnly?: InputMaybe; + /** UTM Source Capture Mkto Only */ + uTMSourceCaptureMktoOnly?: InputMaybe; + /** UTM Term Capture Mkto Only */ + uTMTermCaptureMktoOnly?: InputMaybe; }; /** Queries defined by this subgraph */ @@ -9648,7 +11400,7 @@ export type Query = { /** Retrieve account by internal id */ accountByInternalID?: Maybe; /** Whether an account ID is available for mutation{newAccount(id:)} */ - accountIDAvailable: Scalars['Boolean']; + accountIDAvailable: Scalars['Boolean']['output']; /** All accounts */ allAccounts?: Maybe>; /** All accounts on team billable plans with active subscriptions */ @@ -9669,42 +11421,31 @@ export type Query = { allTimezoneOffsets: Array; /** All users */ allUsers?: Maybe>; - auditLog: Array>; billingAdmin?: Maybe; /** Retrieves all past and current subscriptions for an account, even if the account has been deleted */ billingSubscriptionHistory: Array>; billingTier?: Maybe; /** If this is true, the user is an Apollo administrator who can ignore restrictions based purely on billing plan. */ - canBypassPlanRestrictions: Scalars['Boolean']; + canBypassPlanRestrictions: Scalars['Boolean']['output']; /** Cloud queries */ cloud: Cloud; + cloudTesting: CloudTesting; /** Escaped JSON string of the public key used for verifying entitlement JWTs */ - commercialRuntimePublicKey: Scalars['String']; - csCommunicationChannel?: Maybe; - csCommunicationChannels: Array>; - customerOrg?: Maybe; - customerOrgs: Array>; + commercialRuntimePublicKey: Scalars['String']['output']; diffSchemas: Array; /** Get the unsubscribe settings for a given email. */ emailPreferences?: Maybe; /** Past and current enterprise trial accounts */ enterpriseTrialAccounts?: Maybe>; /** Returns the root URL of the Apollo Studio frontend. */ - frontendUrlRoot: Scalars['String']; - getAdminUsers: Array; - getAllMessages: Array>; - getMessage?: Maybe; - getRecallLog: Array>; + frontendUrlRoot: Scalars['String']['output']; /** Returns details of the graph with the provided ID. */ graph?: Maybe; - /** Get status of identity subgraph */ - identitySubgraphStatus: Scalars['String']; internalActiveCronJobs: Array; internalAdminUsers?: Maybe>; internalUnresolvedCronExecutionFailures: Array; /** Returns details of the authenticated `User` or `Graph` executing this query. If this is an unauthenticated query (i.e., no API key is provided), this field returns null. */ me?: Maybe; - myPermissions: Permission; odysseyCertification?: Maybe; /** Returns the [operation collection](https://www.apollographql.com/docs/studio/explorer/operation-collections/) for the provided ID. */ operationCollection: OperationCollectionResult; @@ -9730,217 +11471,180 @@ export type Query = { /** Get the studio settings for the current user */ studioSettings?: Maybe; /** Schema transformation for the Apollo platform API. Renames types. Internal to Apollo. */ - transformSchemaForPlatformApi?: Maybe; + transformSchemaForPlatformApi?: Maybe; /** Returns details of the Apollo user with the provided ID. */ user?: Maybe; /** Returns details of the Apollo users with the provided IDs. */ users?: Maybe>; /** Returns details of a Studio graph variant with the provided graph ref. A graph ref has the format `graphID@variantName` (or just `graphID` for the default variant `current`). Returns null if the graph or variant doesn't exist, or if the graph isn't accessible by the current actor. */ variant?: Maybe; - zendeskUploadToken: Scalars['String']; }; /** Queries defined by this subgraph */ -export type QueryaccountArgs = { - id: Scalars['ID']; +export type QueryAccountArgs = { + id: Scalars['ID']['input']; }; /** Queries defined by this subgraph */ -export type QueryaccountByBillingCodeArgs = { - id: Scalars['ID']; +export type QueryAccountByBillingCodeArgs = { + id: Scalars['ID']['input']; }; /** Queries defined by this subgraph */ -export type QueryaccountByInternalIDArgs = { - id: Scalars['ID']; +export type QueryAccountByInternalIdArgs = { + id: Scalars['ID']['input']; }; /** Queries defined by this subgraph */ -export type QueryaccountIDAvailableArgs = { - id: Scalars['ID']; +export type QueryAccountIdAvailableArgs = { + id: Scalars['ID']['input']; }; /** Queries defined by this subgraph */ -export type QueryallAccountsArgs = { - search?: InputMaybe; +export type QueryAllAccountsArgs = { + search?: InputMaybe; tier?: InputMaybe; }; /** Queries defined by this subgraph */ -export type QueryallServicesArgs = { - search?: InputMaybe; -}; - - -/** Queries defined by this subgraph */ -export type QueryallUsersArgs = { - search?: InputMaybe; +export type QueryAllServicesArgs = { + search?: InputMaybe; }; /** Queries defined by this subgraph */ -export type QueryauditLogArgs = { - messageId: Scalars['ID']; +export type QueryAllUsersArgs = { + search?: InputMaybe; }; /** Queries defined by this subgraph */ -export type QuerybillingSubscriptionHistoryArgs = { - id?: InputMaybe; +export type QueryBillingSubscriptionHistoryArgs = { + id?: InputMaybe; }; /** Queries defined by this subgraph */ -export type QuerybillingTierArgs = { +export type QueryBillingTierArgs = { tier: BillingPlanTier; }; /** Queries defined by this subgraph */ -export type QuerycsCommunicationChannelArgs = { - id: Scalars['ID']; -}; - - -/** Queries defined by this subgraph */ -export type QuerycustomerOrgArgs = { - id: Scalars['ID']; -}; - - -/** Queries defined by this subgraph */ -export type QuerycustomerOrgsArgs = { - nextHash?: InputMaybe; -}; - - -/** Queries defined by this subgraph */ -export type QuerydiffSchemasArgs = { - baseSchema: Scalars['String']; - nextSchema: Scalars['String']; -}; - - -/** Queries defined by this subgraph */ -export type QueryemailPreferencesArgs = { - email: Scalars['String']; - token: Scalars['String']; -}; - - -/** Queries defined by this subgraph */ -export type QuerygetMessageArgs = { - messageId: Scalars['ID']; +export type QueryDiffSchemasArgs = { + baseSchema: Scalars['String']['input']; + nextSchema: Scalars['String']['input']; }; /** Queries defined by this subgraph */ -export type QuerygetRecallLogArgs = { - messageId: Scalars['ID']; +export type QueryEmailPreferencesArgs = { + email: Scalars['String']['input']; + token: Scalars['String']['input']; }; /** Queries defined by this subgraph */ -export type QuerygraphArgs = { - id: Scalars['ID']; +export type QueryGraphArgs = { + id: Scalars['ID']['input']; }; /** Queries defined by this subgraph */ -export type QueryodysseyCertificationArgs = { - id: Scalars['ID']; +export type QueryOdysseyCertificationArgs = { + id: Scalars['ID']['input']; }; /** Queries defined by this subgraph */ -export type QueryoperationCollectionArgs = { - id: Scalars['ID']; +export type QueryOperationCollectionArgs = { + id: Scalars['ID']['input']; }; /** Queries defined by this subgraph */ -export type QueryoperationCollectionEntriesArgs = { - collectionEntryIds: Array; +export type QueryOperationCollectionEntriesArgs = { + collectionEntryIds: Array; }; /** Queries defined by this subgraph */ -export type QueryorganizationArgs = { - id: Scalars['ID']; +export type QueryOrganizationArgs = { + id: Scalars['ID']['input']; }; /** Queries defined by this subgraph */ -export type QueryplanArgs = { - id?: InputMaybe; +export type QueryPlanArgs = { + id?: InputMaybe; }; /** Queries defined by this subgraph */ -export type QueryproposalArgs = { - id: Scalars['ID']; +export type QueryProposalArgs = { + id: Scalars['ID']['input']; }; /** Queries defined by this subgraph */ -export type QuerysearchAccountsArgs = { - search?: InputMaybe; +export type QuerySearchAccountsArgs = { + search?: InputMaybe; }; /** Queries defined by this subgraph */ -export type QueryserviceArgs = { - id: Scalars['ID']; +export type QueryServiceArgs = { + id: Scalars['ID']['input']; }; /** Queries defined by this subgraph */ -export type QuerystatsArgs = { - from: Scalars['Timestamp']; +export type QueryStatsArgs = { + from: Scalars['Timestamp']['input']; resolution?: InputMaybe; - to?: InputMaybe; + to?: InputMaybe; }; /** Queries defined by this subgraph */ -export type QuerytransformSchemaForPlatformApiArgs = { - baseSchema: Scalars['GraphQLDocument']; +export type QueryTransformSchemaForPlatformApiArgs = { + baseSchema: Scalars['GraphQLDocument']['input']; }; /** Queries defined by this subgraph */ -export type QueryuserArgs = { - id: Scalars['ID']; +export type QueryUserArgs = { + id: Scalars['ID']['input']; }; /** Queries defined by this subgraph */ -export type QueryusersArgs = { - ids: Array; +export type QueryUsersArgs = { + ids: Array; }; /** Queries defined by this subgraph */ -export type QueryvariantArgs = { - ref: Scalars['ID']; +export type QueryVariantArgs = { + ref: Scalars['ID']['input']; }; /** query documents to validate against */ export type QueryDocumentInput = { - document?: InputMaybe; + document?: InputMaybe; }; export type QueryPlan = { __typename?: 'QueryPlan'; - json: Scalars['String']; - object: Scalars['Object']; - text: Scalars['String']; + json: Scalars['String']['output']; + object: Scalars['Object']['output']; + text: Scalars['String']['output']; }; /** Columns of QueryStats. */ @@ -9955,6 +11659,7 @@ export enum QueryStatsColumn { FROM_ENGINEPROXY = 'FROM_ENGINEPROXY', OPERATION_SUBTYPE = 'OPERATION_SUBTYPE', OPERATION_TYPE = 'OPERATION_TYPE', + PERSISTED_QUERY_ID = 'PERSISTED_QUERY_ID', QUERY_ID = 'QUERY_ID', QUERY_NAME = 'QUERY_NAME', REGISTERED_OPERATION_COUNT = 'REGISTERED_OPERATION_COUNT', @@ -9969,89 +11674,94 @@ export enum QueryStatsColumn { export type QueryStatsDimensions = { __typename?: 'QueryStatsDimensions'; - accountId?: Maybe; - clientName?: Maybe; - clientVersion?: Maybe; - fromEngineproxy?: Maybe; - operationSubtype?: Maybe; - operationType?: Maybe; - queryId?: Maybe; - queryName?: Maybe; - querySignature?: Maybe; - querySignatureLength?: Maybe; - schemaHash?: Maybe; - schemaTag?: Maybe; - serviceId?: Maybe; + accountId?: Maybe; + clientName?: Maybe; + clientVersion?: Maybe; + fromEngineproxy?: Maybe; + operationSubtype?: Maybe; + operationType?: Maybe; + persistedQueryId?: Maybe; + queryId?: Maybe; + queryName?: Maybe; + querySignature?: Maybe; + querySignatureLength?: Maybe; + schemaHash?: Maybe; + schemaTag?: Maybe; + serviceId?: Maybe; }; /** Filter for data in QueryStats. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type QueryStatsFilter = { /** Selects rows whose accountId dimension equals the given value if not null. To query for the null value, use {in: {accountId: [null]}} instead. */ - accountId?: InputMaybe; + accountId?: InputMaybe; and?: InputMaybe>; /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */ - clientName?: InputMaybe; + clientName?: InputMaybe; /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */ - clientVersion?: InputMaybe; + clientVersion?: InputMaybe; /** Selects rows whose fromEngineproxy dimension equals the given value if not null. To query for the null value, use {in: {fromEngineproxy: [null]}} instead. */ - fromEngineproxy?: InputMaybe; + fromEngineproxy?: InputMaybe; in?: InputMaybe; not?: InputMaybe; /** Selects rows whose operationSubtype dimension equals the given value if not null. To query for the null value, use {in: {operationSubtype: [null]}} instead. */ - operationSubtype?: InputMaybe; + operationSubtype?: InputMaybe; /** Selects rows whose operationType dimension equals the given value if not null. To query for the null value, use {in: {operationType: [null]}} instead. */ - operationType?: InputMaybe; + operationType?: InputMaybe; or?: InputMaybe>; + /** Selects rows whose persistedQueryId dimension equals the given value if not null. To query for the null value, use {in: {persistedQueryId: [null]}} instead. */ + persistedQueryId?: InputMaybe; /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */ - queryId?: InputMaybe; + queryId?: InputMaybe; /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */ - queryName?: InputMaybe; + queryName?: InputMaybe; /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */ - schemaHash?: InputMaybe; + schemaHash?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */ - serviceId?: InputMaybe; + serviceId?: InputMaybe; }; /** Filter for data in QueryStats. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type QueryStatsFilterIn = { /** Selects rows whose accountId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - accountId?: InputMaybe>>; + accountId?: InputMaybe>>; /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientName?: InputMaybe>>; + clientName?: InputMaybe>>; /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientVersion?: InputMaybe>>; + clientVersion?: InputMaybe>>; /** Selects rows whose fromEngineproxy dimension is in the given list. A null value in the list means a row with null for that dimension. */ - fromEngineproxy?: InputMaybe>>; + fromEngineproxy?: InputMaybe>>; /** Selects rows whose operationSubtype dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationSubtype?: InputMaybe>>; + operationSubtype?: InputMaybe>>; /** Selects rows whose operationType dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationType?: InputMaybe>>; + operationType?: InputMaybe>>; + /** Selects rows whose persistedQueryId dimension is in the given list. A null value in the list means a row with null for that dimension. */ + persistedQueryId?: InputMaybe>>; /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryId?: InputMaybe>>; + queryId?: InputMaybe>>; /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryName?: InputMaybe>>; + queryName?: InputMaybe>>; /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaHash?: InputMaybe>>; + schemaHash?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - serviceId?: InputMaybe>>; + serviceId?: InputMaybe>>; }; export type QueryStatsMetrics = { __typename?: 'QueryStatsMetrics'; cacheTtlHistogram: DurationHistogram; cachedHistogram: DurationHistogram; - cachedRequestsCount: Scalars['Long']; - forbiddenOperationCount: Scalars['Long']; - registeredOperationCount: Scalars['Long']; - requestsWithErrorsCount: Scalars['Long']; + cachedRequestsCount: Scalars['Long']['output']; + forbiddenOperationCount: Scalars['Long']['output']; + registeredOperationCount: Scalars['Long']['output']; + requestsWithErrorsCount: Scalars['Long']['output']; totalLatencyHistogram: DurationHistogram; - totalRequestCount: Scalars['Long']; + totalRequestCount: Scalars['Long']['output']; uncachedHistogram: DurationHistogram; - uncachedRequestsCount: Scalars['Long']; + uncachedRequestsCount: Scalars['Long']['output']; }; export type QueryStatsOrderBySpec = { @@ -10066,7 +11776,7 @@ export type QueryStatsRecord = { /** Metrics of QueryStats that can be aggregated over. */ metrics: QueryStatsMetrics; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; }; /** Query Trigger */ @@ -10074,32 +11784,32 @@ export type QueryTrigger = ChannelSubscription & { __typename?: 'QueryTrigger'; channels: Array; comparisonOperator: ComparisonOperator; - enabled: Scalars['Boolean']; - excludedOperationNames: Array; - id: Scalars['ID']; + enabled: Scalars['Boolean']['output']; + excludedOperationNames: Array; + id: Scalars['ID']['output']; metric: QueryTriggerMetric; - operationNames: Array; - percentile?: Maybe; + operationNames: Array; + percentile?: Maybe; scope: QueryTriggerScope; - serviceId: Scalars['String']; + serviceId: Scalars['String']['output']; state: QueryTriggerState; - threshold: Scalars['Float']; - variant?: Maybe; + threshold: Scalars['Float']['output']; + variant?: Maybe; window: QueryTriggerWindow; }; /** Query trigger */ export type QueryTriggerInput = { - channelIds?: InputMaybe>; + channelIds?: InputMaybe>; comparisonOperator: ComparisonOperator; - enabled?: InputMaybe; - excludedOperationNames?: InputMaybe>; + enabled?: InputMaybe; + excludedOperationNames?: InputMaybe>; metric: QueryTriggerMetric; - operationNames?: InputMaybe>; - percentile?: InputMaybe; + operationNames?: InputMaybe>; + percentile?: InputMaybe; scope?: InputMaybe; - threshold: Scalars['Float']; - variant?: InputMaybe; + threshold: Scalars['Float']['input']; + variant?: InputMaybe; window: QueryTriggerWindow; }; @@ -10123,18 +11833,18 @@ export enum QueryTriggerScope { /** Query trigger state */ export type QueryTriggerState = { __typename?: 'QueryTriggerState'; - evaluatedAt: Scalars['Timestamp']; - lastTriggeredAt?: Maybe; + evaluatedAt: Scalars['Timestamp']['output']; + lastTriggeredAt?: Maybe; operations: Array; - triggered: Scalars['Boolean']; + triggered: Scalars['Boolean']['output']; }; export type QueryTriggerStateOperation = { __typename?: 'QueryTriggerStateOperation'; - count: Scalars['Long']; - operation: Scalars['String']; - triggered: Scalars['Boolean']; - value: Scalars['Float']; + count: Scalars['Long']['output']; + operation: Scalars['String']['output']; + triggered: Scalars['Boolean']['output']; + value: Scalars['Float']['output']; }; export enum QueryTriggerWindow { @@ -10144,15 +11854,41 @@ export enum QueryTriggerWindow { UNRECOGNIZED = 'UNRECOGNIZED' } +/** Result of calling a test request to a custom check endpoint. */ +export type QueueTestCustomChecksRequestResult = GraphVariant | PermissionError | ValidationError; + +export type QueueTestProposalLifecycleNotificationError = { + __typename?: 'QueueTestProposalLifecycleNotificationError'; + message: Scalars['String']['output']; +}; + +export type QueueTestProposalLifecycleNotificationInput = { + channelId: Scalars['ID']['input']; + subscriptionId: Scalars['ID']['input']; +}; + +export type QueueTestProposalLifecycleNotificationResult = NotFoundError | PermissionError | QueueTestProposalLifecycleNotificationError | QueueTestProposalLifecycleNotificationSuccess | ValidationError; + +export type QueueTestProposalLifecycleNotificationSuccess = { + __typename?: 'QueueTestProposalLifecycleNotificationSuccess'; + queued?: Maybe; +}; + +export type RateLimit = { + __typename?: 'RateLimit'; + count: Scalars['Long']['output']; + durationMs: Scalars['Long']['output']; +}; + /** An error that occurs when the rate limit on this operation has been exceeded. */ export type RateLimitExceededError = { __typename?: 'RateLimitExceededError'; /** The error message. */ - message: Scalars['String']; + message: Scalars['String']['output']; }; export type ReRunCheckForRevisionInput = { - revisionId: Scalars['ID']; + revisionId: Scalars['ID']['input']; }; export type ReRunCheckForRevisionResult = NotFoundError | PermissionError | Proposal | ValidationError; @@ -10161,18 +11897,18 @@ export type ReRunCheckForRevisionResult = NotFoundError | PermissionError | Prop export type Readme = { __typename?: 'Readme'; /** The contents of the README in plaintext. */ - content: Scalars['String']; + content: Scalars['String']['output']; /** The README's unique ID. `a15177c0-b003-4837-952a-dbfe76062eb1` for the default README */ - id: Scalars['ID']; + id: Scalars['ID']['output']; /** * The timestamp when the README was most recently updated. `1970-01-01T00:00:00Z` for the default README * @deprecated Deprecated in favour of lastUpdatedTime */ - lastUpdatedAt: Scalars['Timestamp']; + lastUpdatedAt: Scalars['Timestamp']['output']; /** The actor that most recently updated the README (usually a `User`). `null` for the default README, or if the `User` was deleted. */ lastUpdatedBy?: Maybe; /** The timestamp when the README was most recently updated. `null` for the default README */ - lastUpdatedTime?: Maybe; + lastUpdatedTime?: Maybe; }; /** Responsibility for an errored order */ @@ -10191,22 +11927,42 @@ export enum ReasonCause { USER = 'USER' } -export type RebaseConflictError = { - __typename?: 'RebaseConflictError'; - errorMessages: Array; +export type RebaseConflict = { + __typename?: 'RebaseConflict'; + location?: Maybe; + message?: Maybe; }; -export type RebaseConflictResult = RebaseConflictError | SchemaValidationError; +export type RebaseConflictData = { + __typename?: 'RebaseConflictData'; + conflicts: Array; + count: Scalars['Int']['output']; +}; + +export type RebaseConflictResult = NotFoundError | RebaseConflictData | SchemaValidationError; + +export type RecentPage = { + __typename?: 'RecentPage'; + timestamp: Scalars['Timestamp']['output']; + url: Scalars['String']['output']; +}; + +/** Details of account data stored in Recurly */ +export type RecurlyAccountDetails = { + __typename?: 'RecurlyAccountDetails'; + accountCode: Scalars['String']['output']; + createdAt: Scalars['Timestamp']['output']; +}; /** Description for a Cloud Router region */ export type RegionDescription = { __typename?: 'RegionDescription'; /** Region identifier */ - code: Scalars['String']; + code: Scalars['String']['output']; /** Country of the region, in ISO 3166-1 alpha-2 code */ - country: Scalars['String']; + country: Scalars['String']['output']; /** Full name of the region */ - name: Scalars['String']; + name: Scalars['String']['output']; /** Cloud Provider related to this region */ provider: CloudProvider; /** State of the Region */ @@ -10235,29 +11991,29 @@ export type RegisterOperationsMutationResponse = { __typename?: 'RegisterOperationsMutationResponse'; invalidOperations?: Maybe>; newOperations?: Maybe>; - registrationSuccess: Scalars['Boolean']; + registrationSuccess: Scalars['Boolean']['output']; }; export type RegisteredClientIdentityInput = { - identifier: Scalars['String']; - name: Scalars['String']; - version?: InputMaybe; + identifier: Scalars['String']['input']; + name: Scalars['String']['input']; + version?: InputMaybe; }; export type RegisteredOperation = { __typename?: 'RegisteredOperation'; - signature: Scalars['ID']; + signature: Scalars['ID']['output']; }; export type RegisteredOperationInput = { - document?: InputMaybe; + document?: InputMaybe; metadata?: InputMaybe; - signature: Scalars['ID']; + signature: Scalars['ID']['input']; }; export type RegisteredOperationMetadataInput = { /** This will be used to link existing records in Engine to a new ID. */ - engineSignature?: InputMaybe; + engineSignature?: InputMaybe; }; export type RegistryStatsWindow = { @@ -10271,12 +12027,12 @@ export type RegistrySubscription = ChannelSubscription & { channel?: Maybe; /** @deprecated Use channels list instead */ channels: Array; - createdAt: Scalars['Timestamp']; - enabled: Scalars['Boolean']; - id: Scalars['ID']; - lastUpdatedAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; + enabled: Scalars['Boolean']['output']; + id: Scalars['ID']['output']; + lastUpdatedAt: Scalars['Timestamp']['output']; options: SubscriptionOptions; - variant?: Maybe; + variant?: Maybe; }; /** A Proposal related to a Proposal Check Task. */ @@ -10293,12 +12049,12 @@ export type RelatedProposalResult = { export type RelaunchComplete = { __typename?: 'RelaunchComplete'; latestLaunch: Launch; - updated: Scalars['Boolean']; + updated: Scalars['Boolean']['output']; }; export type RelaunchError = { __typename?: 'RelaunchError'; - message: Scalars['String']; + message: Scalars['String']['output']; }; export type RelaunchResult = RelaunchComplete | RelaunchError; @@ -10313,39 +12069,39 @@ export type ReplaceReviewersWithDefaultReviewersResult = PermissionError | Propo export type ReplyChangeProposalComment = ChangeProposalComment & ProposalComment & { __typename?: 'ReplyChangeProposalComment'; - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; /** null if the user is deleted */ createdBy?: Maybe; - id: Scalars['ID']; - message: Scalars['String']; + id: Scalars['ID']['output']; + message: Scalars['String']['output']; /** true if the schemaCoordinate this comment is on doesn't exist in the diff between the most recent revision & the base sdl */ - outdated: Scalars['Boolean']; - schemaCoordinate: Scalars['String']; + outdated: Scalars['Boolean']['output']; + schemaCoordinate: Scalars['String']['output']; /** '#@!api!@#' for api schema, '#@!supergraph!@#' for supergraph schema, subgraph otherwise */ - schemaScope: Scalars['String']; + schemaScope: Scalars['String']['output']; status: CommentStatus; /** null if never updated */ - updatedAt?: Maybe; + updatedAt?: Maybe; }; export type ReplyGeneralProposalComment = GeneralProposalComment & ProposalComment & { __typename?: 'ReplyGeneralProposalComment'; - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; /** null if the user is deleted */ createdBy?: Maybe; - id: Scalars['ID']; - message: Scalars['String']; + id: Scalars['ID']['output']; + message: Scalars['String']['output']; status: CommentStatus; /** null if never updated */ - updatedAt?: Maybe; + updatedAt?: Maybe; }; export type ReportSchemaError = ReportSchemaResult & { __typename?: 'ReportSchemaError'; code: ReportSchemaErrorCode; - inSeconds: Scalars['Int']; - message: Scalars['String']; - withCoreSchema: Scalars['Boolean']; + inSeconds: Scalars['Int']['output']; + message: Scalars['String']['output']; + withCoreSchema: Scalars['Boolean']['output']; }; export enum ReportSchemaErrorCode { @@ -10372,47 +12128,44 @@ export enum ReportSchemaErrorCode { export type ReportSchemaResponse = ReportSchemaResult & { __typename?: 'ReportSchemaResponse'; - inSeconds: Scalars['Int']; - withCoreSchema: Scalars['Boolean']; + inSeconds: Scalars['Int']['output']; + withCoreSchema: Scalars['Boolean']['output']; }; export type ReportSchemaResult = { - inSeconds: Scalars['Int']; - withCoreSchema: Scalars['Boolean']; + inSeconds: Scalars['Int']['output']; + withCoreSchema: Scalars['Boolean']['output']; }; export type ReportServerInfoError = ReportServerInfoResult & { __typename?: 'ReportServerInfoError'; code: ReportSchemaErrorCode; - inSeconds: Scalars['Int']; - message: Scalars['String']; - withExecutableSchema: Scalars['Boolean']; + inSeconds: Scalars['Int']['output']; + message: Scalars['String']['output']; + withExecutableSchema: Scalars['Boolean']['output']; }; export type ReportServerInfoResponse = ReportServerInfoResult & { __typename?: 'ReportServerInfoResponse'; - inSeconds: Scalars['Int']; - withExecutableSchema: Scalars['Boolean']; + inSeconds: Scalars['Int']['output']; + withExecutableSchema: Scalars['Boolean']['output']; }; export type ReportServerInfoResult = { - inSeconds: Scalars['Int']; - withExecutableSchema: Scalars['Boolean']; + inSeconds: Scalars['Int']['output']; + withExecutableSchema: Scalars['Boolean']['output']; }; export type RequestCountsPerGraphVariant = { __typename?: 'RequestCountsPerGraphVariant'; - cachedRequestsCount: Scalars['Long']; - graphID: Scalars['String']; - uncachedRequestsCount: Scalars['Long']; - variant?: Maybe; + cachedRequestsCount: Scalars['Long']['output']; + graphID: Scalars['String']['output']; + uncachedRequestsCount: Scalars['Long']['output']; + variant?: Maybe; }; -export type RequesterUser = { - __typename?: 'RequesterUser'; - email: Scalars['String']; - id: Scalars['ID']; - name: Scalars['String']; +export type RerunAsyncInput = { + sourceVariant?: InputMaybe; }; export enum Resolution { @@ -10439,27 +12192,33 @@ export enum ReviewDecision { export type ReviewProposalComment = ProposalComment & { __typename?: 'ReviewProposalComment'; - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; /** null if the user is deleted */ createdBy?: Maybe; - id: Scalars['ID']; - message: Scalars['String']; + id: Scalars['ID']['output']; + message: Scalars['String']['output']; status: CommentStatus; /** null if never updated */ - updatedAt?: Maybe; + updatedAt?: Maybe; }; export type RoleOverride = { __typename?: 'RoleOverride'; /** @deprecated RoleOverride can only be queried via a Graph, so any fields here should instead be selected via the parent object. */ graph: Service; - lastUpdatedAt: Scalars['Timestamp']; + lastUpdatedAt: Scalars['Timestamp']['output']; role: UserPermission; user: User; }; export type Router = { __typename?: 'Router'; + /** Capabilities for this Cloud Router */ + capabilities?: Maybe; + /** Constants for Cloud Routers */ + constants: CloudConstants; + /** Date when the Cloud Router was created */ + createdAt: Scalars['NaiveDateTime']['output']; /** Order currently modifying this Cloud Router */ currentOrder?: Maybe; /** @@ -10469,7 +12228,7 @@ export type Router = { * domains. * @deprecated use Router.endpoints instead */ - customDomains?: Maybe>; + customDomains?: Maybe>; /** Set of endpoints that can be used to reach a Cloud Router */ endpoints: RouterEndpoints; /** @@ -10477,9 +12236,13 @@ export type Router = { * * This value is not present for Cloud Routers on the `SERVERLESS` tier. */ - gcus?: Maybe; + gcus?: Maybe; + /** Return the GraphVariant associated with this Router */ + graphVariant?: Maybe; /** graphRef representing the Cloud Router */ - id: Scalars['ID']; + id: Scalars['ID']['output']; + /** Internal identifier for a Cloud Router */ + internalId?: Maybe; /** * Cloud Router version applied for the next launch * @@ -10488,6 +12251,12 @@ export type Router = { * automatically update this Cloud Router, for example due to configuration issues. */ nextRouterVersion?: Maybe; + /** + * The next scheduled router status, useful for telling when a router will be transitioning in + * the near future to another staus. If no change in status is scheduled, this field will be + * null + */ + nextStatus?: Maybe; /** Retrieves a specific Order related to this Cloud Router */ order?: Maybe; /** Retrieves all Orders related to this Cloud Router */ @@ -10498,9 +12267,13 @@ export type Router = { * This will be null if the Cloud Router is in a deleted status * @deprecated use Router.endpoints instead */ - routerUrl?: Maybe; - /** Current version of the Cloud Router */ - routerVersion: RouterVersion; + routerUrl?: Maybe; + /** + * Current version of the Cloud Router + * + * This will be null if the Cloud Router is in a deleted status. + */ + routerVersion?: Maybe; /** Return the list of secrets for this Cloud Router with their hash values */ secrets: Array; /** Shard associated with this Cloud Router */ @@ -10512,18 +12285,60 @@ export type Router = { * * If the Cloud Router was never updated, this value will be null */ - updatedAt?: Maybe; + updatedAt?: Maybe; +}; + + +export type RouterOrderArgs = { + orderId: Scalars['ID']['input']; +}; + + +export type RouterOrdersArgs = { + first?: InputMaybe; + offset?: InputMaybe; +}; + +export type RouterAdminMutation = { + __typename?: 'RouterAdminMutation'; + /** Pre-create a custom domain for this Cloud Router, but don't enable routing yet */ + preCreateCustomDomain: RouterPreCreateDomainResult; + /** Override the lastTraffic for Serverless Cloud Routers */ + setLastTraffic: RouterSetLastTrafficResult; + /** Update the Cloud Router state so it will display a `nextStatus` value */ + setNextStatus: RouterSetNextStatusResult; + /** Sleep this Cloud Router */ + sleep: RouterSleepResult; + /** Wake up this Cloud Router */ + wakeUp: RouterWakeUpResult; +}; + + +export type RouterAdminMutationPreCreateCustomDomainArgs = { + customDomain: Scalars['String']['input']; }; -export type RouterorderArgs = { - orderId: Scalars['ID']; +export type RouterAdminMutationSetLastTrafficArgs = { + lastTraffic: Scalars['NaiveDateTime']['input']; }; -export type RouterordersArgs = { - first?: InputMaybe; - offset?: InputMaybe; +export type RouterAdminMutationSetNextStatusArgs = { + nextStatus: RouterStatus; +}; + +/** Capabilities for this Cloud Router */ +export type RouterCapabilities = { + __typename?: 'RouterCapabilities'; + /** This Cloud Router can router traffic from custom domains */ + customDomains: Scalars['Boolean']['output']; + /** This Cloud Router supports using a custom path */ + customPath: Scalars['Boolean']['output']; + /** This Cloud Router supports getting and settings GCUs */ + gcus: Scalars['Boolean']['output']; + /** This Cloud Router can use private subgraphs */ + privateSubgraphs: Scalars['Boolean']['output']; }; /** Router configuration input */ @@ -10533,46 +12348,48 @@ export type RouterConfigInput = { * * This is ignored for serverless Cloud Routers */ - gcus?: InputMaybe; + gcus?: InputMaybe; /** Graph composition ID, also known as launch ID */ - graphCompositionId?: InputMaybe; + graphCompositionId?: InputMaybe; /** Configuration for the Cloud Router */ - routerConfig?: InputMaybe; + routerConfig?: InputMaybe; /** Router version for the Cloud Router */ - routerVersion?: InputMaybe; + routerVersion?: InputMaybe; }; export type RouterConfigVersion = { __typename?: 'RouterConfigVersion'; /** JSON schema for validating the router configuration */ - configSchema?: Maybe; + configSchema?: Maybe; /** Name of the RouterConfigVersion */ - name: Scalars['String']; -}; - - -export type RouterConfigVersionconfigSchemaArgs = { - tier: CloudTier; + name: Scalars['String']['output']; }; /** Input to create a RouterConfigVersion */ export type RouterConfigVersionInput = { /** Configuration schema mapping for the RouterConfigVersion */ - configSchemas: Scalars['JSONObject']; + configSchema: Scalars['String']['input']; /** Name of the RouterConfigVersion */ - configVersion: Scalars['String']; + configVersion: Scalars['String']['input']; }; -/** Represents the possible outcomes of an addCustomDomain or removeCustomDomain mutation */ -export type RouterCustomDomainResult = InternalServerError | InvalidInputErrors | RouterCustomDomainSuccess; - -/** Successe branch of an addCustomDomain or removeCustomDomain mutation */ -export type RouterCustomDomainSuccess = { - __typename?: 'RouterCustomDomainSuccess'; - customDomains: Array; -}; - -/** List of endpoints for Cloud Router */ +/** + * List of endpoints for Cloud Router + * + * ## Endpoint states + * + * If a Router is in the `DELETED` state, all the fields on this object will return `null`. + * + * For all other states, this table list all the possible valid states, and the mutations that can + * be performed on them. + * + * | Default Enabled? | Primary Endpoint | Custom Endpoints | Allowed endpoint mutations | + * | Yes | Default | null | N/A (this Router does not support custom endpoints) | + * | Yes | Default | [] | addCustomDomain, enableDefaultEndpoint, resetPrimaryEndpoint | + * | Yes | Default | ["1", "2", "3"] | addCustomDomain, enableDefaultEndpoint, removeCustomDomain("1", "2", or "3"), resetPrimaryEndpoint, setPrimaryEndpoint ("1", "2", or "3") | + * | Yes | Custom 1 | ["1", "2", "3"] | addCustomDomain, disableDefaultEndpoint, enableDefaultEndpoint, removeCustomDomain("2" or "3"), resetPrimaryEndpoint, setPrimaryEndpoint ("1", "2", or "3") | + * | No | Custom 1 | ["1", "2", "3"] | addCustomDomain, disableDefaultEndpoint, enableDefaultEndpoint, removeCustomDomain("2" or "3"), setPrimaryEndpoint ("1", "2", or "3") | + */ export type RouterEndpoints = { __typename?: 'RouterEndpoints'; /** @@ -10581,30 +12398,54 @@ export type RouterEndpoints = { * This is null if the cloud router is in a deleted state, or if it does not support * custom endpoints. */ - custom?: Maybe>; + custom?: Maybe>; /** * Default Cloud Router endpoint * - * This is null if the cloud router is in a deleted state, or if the default endpoint is - * disabled. + * This is null if the cloud router is in a deleted state. + */ + default?: Maybe; + /** + * Whether the default Cloud Router endpoint is enabled + * + * If the default endpoint is not enabled (`false`), this Cloud Router cannot receive traffic + * on the default endpoint. + * + * This is null if the cloud router is in a deleted state. + */ + defaultEnabled?: Maybe; + /** + * Primary Cloud Router endpoint + * + * This is null if the cloud router is in a deleted state. */ - default?: Maybe; + primary?: Maybe; +}; + +/** Represents the possible outcomes of an endpoint mutation */ +export type RouterEndpointsResult = InternalServerError | InvalidInputErrors | RouterEndpointsSuccess; + +/** Successe branch of an addEndpoint or removeEndpoint mutation */ +export type RouterEndpointsSuccess = { + __typename?: 'RouterEndpointsSuccess'; + endpoints: RouterEndpoints; }; export type RouterEntitlement = { __typename?: 'RouterEntitlement'; /** The id of the account this license was generated for. */ - accountId: Scalars['String']; + accountId: Scalars['String']['output']; /** Which audiences this license applies to. */ audience: Array; /** Router will stop serving requests after this time if commercial features are in use. */ - haltAt?: Maybe; + haltAt?: Maybe; /** RFC 8037 Ed25519 JWT signed representation of sibling fields. Restricted to internal services only. */ - jwt: Scalars['String']; + jwt: Scalars['String']['output']; /** Organization this license applies to. */ - subject: Scalars['String']; + subject: Scalars['String']['output']; + throughputLimit?: Maybe; /** Router will warn users after this time if commercial features are in use. */ - warnAt?: Maybe; + warnAt?: Maybe; }; export enum RouterEntitlementAudience { @@ -10628,50 +12469,86 @@ export type RouterGcusSuccess = { export type RouterMutation = { __typename?: 'RouterMutation'; /** Add a custom domain for this Cloud Router */ - addCustomDomain: RouterCustomDomainResult; - /** Router mutations for Cloud Routers hosted on Fly */ - fly?: Maybe; - /** Pause this Cloud Router */ - pause: RouterPauseResult; + addCustomDomain: RouterEndpointsResult; + /** Admin mutations for this Router */ + admin: RouterAdminMutation; + /** + * Disable the default endpoint + * + * This mutation will only work if the Router is not in a DELETED state and the default + * endpoint is not the primary endpoint. + */ + disableDefaultEndpoint: RouterEndpointsResult; + /** + * Enable the default endpoint + * + * This mutation will only work if the Router is not in a DELETED state + */ + enableDefaultEndpoint: RouterEndpointsResult; /** Remove a custom domain for this Cloud Router */ - removeCustomDomain: RouterCustomDomainResult; + removeCustomDomain: RouterEndpointsResult; + /** + * Reset the primary endpoint to the default endpoint + * + * This mutation will only work if the Router is not in a DELETED state, and the default + * endpoint is enabled. + */ + resetPrimaryEndpoint: RouterEndpointsResult; /** Set a custom path for this Router */ setCustomPath: RouterPathResult; /** Set the number of GCUs associated with this Router */ setGcus: RouterGcusResult; /** Set the version used for the next update for this Cloud Router */ setNextVersion: SetNextVersionResult; + /** + * Set the primary endpoint to a custom endpoint + * + * This mutation will only work if the Router is not in a DELETED state, and the primary + * endpoint correspond to the full endpoint name (e.g. `https://api.mycompany.com/graphql`) of + * an existing custom endpoint. + */ + setPrimaryEndpoint: RouterEndpointsResult; /** Set secrets for this Cloud Router */ setSecrets: RouterSecretsResult; + /** + * Sleep this Cloud Router + * @deprecated use Router.admin.sleep instead + */ + sleep: RouterSleepResult; +}; + + +export type RouterMutationAddCustomDomainArgs = { + customDomain: Scalars['String']['input']; }; -export type RouterMutationaddCustomDomainArgs = { - customDomain: Scalars['String']; +export type RouterMutationRemoveCustomDomainArgs = { + customDomain: Scalars['String']['input']; }; -export type RouterMutationremoveCustomDomainArgs = { - customDomain: Scalars['String']; +export type RouterMutationSetCustomPathArgs = { + path: Scalars['String']['input']; }; -export type RouterMutationsetCustomPathArgs = { - path: Scalars['String']; +export type RouterMutationSetGcusArgs = { + gcus: Scalars['Int']['input']; }; -export type RouterMutationsetGcusArgs = { - gcus: Scalars['Int']; +export type RouterMutationSetNextVersionArgs = { + version: Scalars['String']['input']; }; -export type RouterMutationsetNextVersionArgs = { - version: Scalars['String']; +export type RouterMutationSetPrimaryEndpointArgs = { + endpoint: Scalars['String']['input']; }; -export type RouterMutationsetSecretsArgs = { +export type RouterMutationSetSecretsArgs = { input: RouterSecretsInput; }; @@ -10681,16 +12558,17 @@ export type RouterPathResult = InternalServerError | InvalidInputErrors | Router /** Success branch of a setCustomPath mutation */ export type RouterPathSuccess = { __typename?: 'RouterPathSuccess'; + endpoints: RouterEndpoints; order: Order; }; -/** Represents the possible outcomes of a pause mutation */ -export type RouterPauseResult = InternalServerError | InvalidInputErrors | RouterPauseSuccess; +/** "Represents the possible outcomes of a ", RouterPreCreateDomain, " mutation" */ +export type RouterPreCreateDomainResult = InternalServerError | InvalidInputErrors | RouterPreCreateDomainSuccess; -/** Success branch of a pause mutation */ -export type RouterPauseSuccess = { - __typename?: 'RouterPauseSuccess'; - success: Scalars['Boolean']; +/** Success branch of a preCreateCustomDomain mutation */ +export type RouterPreCreateDomainSuccess = { + __typename?: 'RouterPreCreateDomainSuccess'; + success: Scalars['Boolean']['output']; }; /** User input for a RouterSecrets mutation */ @@ -10698,7 +12576,7 @@ export type RouterSecretsInput = { /** Secrets to create or update */ secrets?: InputMaybe>; /** Secrets to remove */ - unsetSecrets?: InputMaybe>; + unsetSecrets?: InputMaybe>; }; /** Represents the possible outcomes of a RouterSecrets mutation */ @@ -10711,6 +12589,33 @@ export type RouterSecretsSuccess = { secrets: Array; }; +/** "Represents the possible outcomes of a ", RouterSetLastTraffic, " mutation" */ +export type RouterSetLastTrafficResult = InternalServerError | InvalidInputErrors | RouterSetLastTrafficSuccess; + +/** Success branch of a setLastTraffic mutation */ +export type RouterSetLastTrafficSuccess = { + __typename?: 'RouterSetLastTrafficSuccess'; + success: Scalars['Boolean']['output']; +}; + +/** "Represents the possible outcomes of a ", RouterSetNextStatus, " mutation" */ +export type RouterSetNextStatusResult = InternalServerError | InvalidInputErrors | RouterSetNextStatusSuccess; + +/** Success branch of a setNextStatus mutation */ +export type RouterSetNextStatusSuccess = { + __typename?: 'RouterSetNextStatusSuccess'; + success: Scalars['Boolean']['output']; +}; + +/** "Represents the possible outcomes of a ", RouterSleep, " mutation" */ +export type RouterSleepResult = InternalServerError | InvalidInputErrors | RouterSleepSuccess; + +/** Success branch of a sleep mutation */ +export type RouterSleepSuccess = { + __typename?: 'RouterSleepSuccess'; + success: Scalars['Boolean']['output']; +}; + /** Current status of Cloud Routers */ export enum RouterStatus { /** Cloud Router is not yet provisioned */ @@ -10737,44 +12642,83 @@ export enum RouterStatus { ROLLING_BACK = 'ROLLING_BACK', /** Current router is running and able to server requests */ RUNNING = 'RUNNING', + /** Router has been put to sleep. This state should only be possible for Serverless routers */ + SLEEPING = 'SLEEPING', /** Cloud Router is running, but currently being updated */ UPDATING = 'UPDATING' } export type RouterUpsertFailure = { __typename?: 'RouterUpsertFailure'; - message: Scalars['String']; + message: Scalars['String']['output']; }; /** A generic key→count type so that router usage metrics can be added to without modifying the `trackRouterUsage` mutation */ export type RouterUsageInput = { - count: Scalars['Int']; - key: Scalars['String']; + count: Scalars['Int']['input']; + key: Scalars['String']['input']; }; /** Router Version */ export type RouterVersion = { __typename?: 'RouterVersion'; /** Build number */ - build: Scalars['String']; + build: Scalars['String']['output']; /** JSON schema for validating the router configuration for this router version */ - configSchema: Scalars['String']; + configSchema: Scalars['String']['output']; /** Config version for this router version */ - configVersion: Scalars['String']; + configVersion: Scalars['String']['output']; /** Core version identifier */ - core: Scalars['String']; + core: Scalars['String']['output']; /** Latest supported BuildPipelineTrack for this version */ - latestSupportedPipelineTrack?: Maybe; + latestSupportedPipelineTrack?: Maybe; /** Status of a router version */ status: Status; /** Version identifier */ - version: Scalars['String']; + version: Scalars['String']['output']; +}; + +export type RouterVersionBuild = { + __typename?: 'RouterVersionBuild'; + jobId: Scalars['String']['output']; + routerVersion?: Maybe; + status: RouterVersionBuildStatus; }; +export type RouterVersionBuildError = { + __typename?: 'RouterVersionBuildError'; + jobId: Scalars['String']['output']; + routerVersion?: Maybe; +}; -/** Router Version */ -export type RouterVersionconfigSchemaArgs = { - tier?: InputMaybe; +export type RouterVersionBuildPageResults = { + __typename?: 'RouterVersionBuildPageResults'; + count: Scalars['Int']['output']; + cursor?: Maybe; + results: Array; +}; + +export type RouterVersionBuildResult = RouterVersionBuild | RouterVersionBuildError; + +export enum RouterVersionBuildStatus { + BUILDING = 'BUILDING', + CANCELLED = 'CANCELLED', + COMPLETE = 'COMPLETE', + PENDING = 'PENDING' +} + +export enum RouterVersionBuildsField { + CREATED_AT = 'CREATED_AT' +} + +export type RouterVersionBuildsInput = { + orderBy?: InputMaybe; + pagination?: InputMaybe; +}; + +export type RouterVersionBuildsOrderByInput = { + direction: OrderingDirection; + field: RouterVersionBuildsField; }; /** Result of a RouterConfigVersion mutation */ @@ -10783,13 +12727,13 @@ export type RouterVersionConfigResult = CloudInvalidInputError | InternalServerE /** Input to create a new router version */ export type RouterVersionCreateInput = { /** Version of the configuration */ - configVersion: Scalars['String']; + configVersion: Scalars['String']['input']; /** Latest supported BuildPipelineTrack for this version */ - latestSupportedPipelineTrack: CloudBuildPipelineTrackInput; + latestSupportedPipelineTrack: Scalars['String']['input']; /** Version status */ status: Status; /** Version identifier */ - version: Scalars['String']; + version: Scalars['String']['input']; }; /** Result of a router version query */ @@ -10798,13 +12742,13 @@ export type RouterVersionResult = InternalServerError | InvalidInputErrors | Rou /** Input for updating a router version */ export type RouterVersionUpdateInput = { /** Version of the configuration */ - configVersion?: InputMaybe; + configVersion?: InputMaybe; /** Latest supported BuildPipelineTrack for this version */ - latestSupportedPipelineTrack?: InputMaybe; + latestSupportedPipelineTrack?: InputMaybe; /** Version status */ status?: InputMaybe; /** Version identifier */ - version: Scalars['String']; + version: Scalars['String']['input']; }; /** List of router versions */ @@ -10816,9 +12760,9 @@ export type RouterVersions = { /** Input for filtering router versions */ export type RouterVersionsInput = { /** Name of the branch */ - branch?: InputMaybe; + branch?: InputMaybe; /** Maximum number of versions to return */ - limit?: InputMaybe; + limit?: InputMaybe; /** Status of the version */ status?: InputMaybe; }; @@ -10826,11 +12770,49 @@ export type RouterVersionsInput = { /** Result of a router versions query */ export type RouterVersionsResult = InternalServerError | InvalidInputErrors | RouterVersions; -export type RoverArgumentInput = { - key: Scalars['String']; - value?: InputMaybe; +/** "Represents the possible outcomes of a ", RouterWakeUp, " mutation" */ +export type RouterWakeUpResult = InternalServerError | InvalidInputErrors | RouterWakeUpSuccess; + +/** Success branch of a wakeUp mutation */ +export type RouterWakeUpSuccess = { + __typename?: 'RouterWakeUpSuccess'; + success: Scalars['Boolean']['output']; }; +export type RoverArgumentInput = { + key: Scalars['String']['input']; + value?: InputMaybe; +}; + +export type RuleEnforcement = { + __typename?: 'RuleEnforcement'; + /** The instant this enforcement was created. */ + createdAt: Scalars['Timestamp']['output']; + /** Identifying info for the creator of this enforcement. */ + createdBy: Scalars['String']['output']; + /** The instant this enforcement was deleted. */ + deletedAt?: Maybe; + /** The identifier for the graph this this enforcement applies to. */ + graphId: Scalars['String']['output']; + /** The name of the variant that this enforcement applies to. */ + graphVariant?: Maybe; + /** The ID of this enforcement. */ + id: Scalars['ID']['output']; + /** A list of key/value pairs representing any parameters necessary for the policy's enforcement. */ + params?: Maybe>; + /** The policy that this enforcement belongs to. */ + policy: EnforcementPolicy; + /** The instant this enforcement was last updated. */ + updatedAt: Scalars['Timestamp']['output']; +}; + +export type RuleEnforcementError = { + __typename?: 'RuleEnforcementError'; + message: Scalars['String']['output']; +}; + +export type RuleEnforcementResult = RuleEnforcement | RuleEnforcementError; + export type RunLintCheckInput = { baseSchema: SchemaHashInput; checkStep: CheckStepInput; @@ -10842,41 +12824,41 @@ export type RunProposalsCheckInput = { /** List of subgraph names and hashes from the state of this variant when the check was run. */ baseSubgraphs: Array; /** Supergraph hash that was most recently published when the check was run */ - baseSupergraphHash: Scalars['String']; + baseSupergraphHash: Scalars['String']['input']; /** List of subgraph names and hashes that are being proposed in the check task */ proposedSubgraphs: Array; /** Supergraph hash that is the output of the check's composition task */ - proposedSupergraphHash: Scalars['String']; + proposedSupergraphHash: Scalars['String']['input']; /** If this check was created by rerunning, the original check workflow task that was rerun */ - rerunOfTaskId?: InputMaybe; + rerunOfTaskId?: InputMaybe; /** The severity to assign the check results if matching proposals are not found */ severityLevel: ProposalChangeMismatchSeverity; /** The check workflow task id. Used by Task entities to resolve the results */ - workflowTaskId: Scalars['String']; + workflowTaskId: Scalars['String']['input']; }; export type SafAssessment = { __typename?: 'SafAssessment'; /** The date and time the assessment was completed. */ - completedAt?: Maybe; + completedAt?: Maybe; /** The time that the assessment was deleted. */ - deletedAt?: Maybe; + deletedAt?: Maybe; /** The graph that this assessment belongs to. */ graph: Service; - id: Scalars['ID']; + id: Scalars['ID']['output']; /** The plan items for this assessment. */ planItems: Array; /** The responses for this assessment. */ responses: Array; /** The date and time the assessment was started. */ - startedAt: Scalars['Date']; + startedAt: Scalars['Date']['output']; }; export type SafAssessmentMutation = { __typename?: 'SafAssessmentMutation'; /** Delete the assessment. */ delete: SafAssessment; - id: Scalars['String']; + id: Scalars['String']['output']; /** Mutations for a specific plan item. */ planItem?: Maybe; /** Reorder the plan items for a given assessment. */ @@ -10888,39 +12870,39 @@ export type SafAssessmentMutation = { }; -export type SafAssessmentMutationplanItemArgs = { - id: Scalars['ID']; +export type SafAssessmentMutationPlanItemArgs = { + id: Scalars['ID']['input']; }; -export type SafAssessmentMutationreorderPlanItemsArgs = { - ids: Array; +export type SafAssessmentMutationReorderPlanItemsArgs = { + ids: Array; }; -export type SafAssessmentMutationsaveResponseArgs = { +export type SafAssessmentMutationSaveResponseArgs = { input: SafResponseInput; }; -export type SafAssessmentMutationsubmitArgs = { - organizationId?: InputMaybe; - planItemIds: Array; +export type SafAssessmentMutationSubmitArgs = { + organizationId?: InputMaybe; + planItemIds: Array; }; export type SafPlanItem = { __typename?: 'SafPlanItem'; - bestPracticeId: Scalars['String']; - id: Scalars['ID']; - isDeprioritized: Scalars['Boolean']; - notes: Scalars['String']; - order: Scalars['Int']; + bestPracticeId: Scalars['String']['output']; + id: Scalars['ID']['output']; + isDeprioritized: Scalars['Boolean']['output']; + notes: Scalars['String']['output']; + order: Scalars['Int']['output']; }; export type SafPlanItemInput = { - isDeprioritized: Scalars['Boolean']; - notes: Scalars['String']; - order: Scalars['Int']; + isDeprioritized: Scalars['Boolean']['input']; + notes: Scalars['String']['input']; + order: Scalars['Int']['input']; }; export type SafPlanItemMutation = { @@ -10930,7 +12912,7 @@ export type SafPlanItemMutation = { }; -export type SafPlanItemMutationupdateArgs = { +export type SafPlanItemMutationUpdateArgs = { input: SafPlanItemInput; }; @@ -10939,68 +12921,78 @@ export type SafResponse = { /** The assessment that this response belongs to. */ assessment?: Maybe; /** Additional context or feedback about the question. */ - comment: Scalars['String']; - id: Scalars['ID']; + comment: Scalars['String']['output']; + id: Scalars['ID']['output']; /** The ID of the question that this response is for. */ - questionId: Scalars['String']; + questionId: Scalars['String']['output']; /** A list of responses for this question. */ - response: Array; + response: Array; }; export type SafResponseInput = { - comment: Scalars['String']; - questionId: Scalars['String']; - response: Array; + comment: Scalars['String']['input']; + questionId: Scalars['String']['input']; + response: Array; }; export type SamlCertInfo = { __typename?: 'SamlCertInfo'; - id: Scalars['ID']; - notAfter: Scalars['Timestamp']; - notBefore: Scalars['Timestamp']; - pem: Scalars['String']; - subjectDN: Scalars['String']; + id: Scalars['ID']['output']; + notAfter: Scalars['Timestamp']['output']; + notBefore: Scalars['Timestamp']['output']; + pem: Scalars['String']['output']; + subjectDN: Scalars['String']['output']; +}; + +export type SamlConfigurationInput = { + encryptionCerts?: InputMaybe>; + entityId: Scalars['String']['input']; + ssoUrl: Scalars['String']['input']; + verificationCerts: Array; + wantsSignedRequests?: InputMaybe; }; export type SamlConnection = SsoConnection & { __typename?: 'SamlConnection'; - domains: Array; - id: Scalars['ID']; - idpId: Scalars['ID']; + domains: Array; + id: Scalars['ID']['output']; + idpId: Scalars['ID']['output']; metadata: SamlIdpMetadata; -}; - -export type SamlConnectionInput = { - domains: Array; - entityId: Scalars['String']; - idpId: Scalars['String']; - ssoUrl: Scalars['String']; - verificationCerts: Array; - wantsSignedRequests?: InputMaybe; + scim?: Maybe; + /** @deprecated Use stateV2 instead */ + state: SsoConnectionState; + stateV2: SsoConnectionStateV2; }; export type SamlConnectionMutation = { __typename?: 'SamlConnectionMutation'; + addEncryptionCert?: Maybe; addVerificationCert?: Maybe; updateIdpId?: Maybe; }; -export type SamlConnectionMutationaddVerificationCertArgs = { - pem: Scalars['String']; +export type SamlConnectionMutationAddEncryptionCertArgs = { + pem: Scalars['String']['input']; +}; + + +export type SamlConnectionMutationAddVerificationCertArgs = { + pem: Scalars['String']['input']; }; -export type SamlConnectionMutationupdateIdpIdArgs = { - idpId: Scalars['String']; +export type SamlConnectionMutationUpdateIdpIdArgs = { + idpId: Scalars['String']['input']; }; export type SamlIdpMetadata = { __typename?: 'SamlIdpMetadata'; - entityId: Scalars['String']; - ssoUrl: Scalars['String']; + encryptionCerts: Array; + entityId: Scalars['String']['output']; + ssoUrl: Scalars['String']['output']; verificationCerts: Array; - wantsSignedRequests: Scalars['Boolean']; + wantsSignedRequests: Scalars['Boolean']['output']; }; export type ScheduledSummary = ChannelSubscription & { @@ -11008,25 +13000,25 @@ export type ScheduledSummary = ChannelSubscription & { /** @deprecated Use channels list instead */ channel?: Maybe; channels: Array; - enabled: Scalars['Boolean']; - id: Scalars['ID']; - timezone: Scalars['String']; - variant: Scalars['String']; + enabled: Scalars['Boolean']['output']; + id: Scalars['ID']['output']; + timezone: Scalars['String']['output']; + variant: Scalars['String']['output']; }; /** A GraphQL schema document and associated metadata. */ export type Schema = { __typename?: 'Schema'; - createTemporaryURL?: Maybe; + createTemporaryURL?: Maybe; /** The timestamp of initial ingestion of a schema to a graph. */ - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; /** The GraphQL schema document. */ - document: Scalars['GraphQLDocument']; + document: Scalars['GraphQLDocument']['output']; /** The number of fields; this includes user defined fields only, excluding built-in types and fields */ - fieldCount: Scalars['Int']; + fieldCount: Scalars['Int']['output']; gitContext?: Maybe; /** The GraphQL schema document's SHA256 hash, represented as a hexadecimal string. */ - hash: Scalars['ID']; + hash: Scalars['ID']['output']; introspection: IntrospectionSchema; /** * The list of schema coordinates ('TypeName.fieldName') in the schema @@ -11035,33 +13027,33 @@ export type Schema = { */ observableCoordinates?: Maybe>; /** The number of types; this includes user defined types only, excluding built-in types */ - typeCount: Scalars['Int']; + typeCount: Scalars['Int']['output']; }; /** A GraphQL schema document and associated metadata. */ -export type SchemacreateTemporaryURLArgs = { - expiresInSeconds?: Scalars['Int']; +export type SchemaCreateTemporaryUrlArgs = { + expiresInSeconds?: Scalars['Int']['input']; }; /** An error that occurred while running schema composition on a set of subgraph schemas. */ export type SchemaCompositionError = { __typename?: 'SchemaCompositionError'; /** A machine-readable error code. */ - code?: Maybe; + code?: Maybe; /** Source locations related to the error. */ locations: Array>; /** A human-readable message describing the error. */ - message: Scalars['String']; + message: Scalars['String']['output']; }; export type SchemaCoordinate = { __typename?: 'SchemaCoordinate'; /** The printed coordinate value, e.g. 'ParentType.fieldName' */ - coordinate: Scalars['String']; - id: Scalars['ID']; + coordinate: Scalars['String']['output']; + id: Scalars['ID']['output']; /** Whether the coordinate being referred to is marked as deprecated */ - isDeprecated: Scalars['Boolean']; + isDeprecated: Scalars['Boolean']['output']; }; export type SchemaCoordinateFilterInput = { @@ -11069,7 +13061,7 @@ export type SchemaCoordinateFilterInput = { * If true, only include deprecated coordinates. * If false, filter out deprecated coordinates. */ - deprecated?: InputMaybe; + deprecated?: InputMaybe; }; /** The result of computing the difference between two schemas, usually as part of schema checks. */ @@ -11087,13 +13079,13 @@ export type SchemaDiff = { /** A list of all schema changes in the diff, including their severity. */ changes: Array; /** The number of GraphQL operations affected by the diff's changes that are neither marked as safe nor ignored. */ - numberOfAffectedOperations: Scalars['Int']; + numberOfAffectedOperations: Scalars['Int']['output']; /** The number of GraphQL operations that were validated during the check. */ - numberOfCheckedOperations?: Maybe; + numberOfCheckedOperations?: Maybe; /** Indicates the overall safety of the changes included in the diff, based on operation history (e.g., `FAILURE` or `NOTICE`). */ severity: ChangeSeverity; /** The tag against which this diff was created */ - tag?: Maybe; + tag?: Maybe; /** @deprecated use severity instead */ type: ChangeType; /** Configuration of validation */ @@ -11112,19 +13104,19 @@ export type SchemaDiffValidationConfig = { * day would have a `from` value of -86400. In rare cases, this could be an ISO * timestamp if the user passed one in on diff creation */ - from?: Maybe; + from?: Maybe; /** Operation IDs to ignore during validation. */ - ignoredOperations?: Maybe>; + ignoredOperations?: Maybe>; /** Variants to include during validation. */ - includedVariants?: Maybe>; + includedVariants?: Maybe>; /** Minimum number of requests within the window for a query to be considered. */ - queryCountThreshold?: Maybe; + queryCountThreshold?: Maybe; /** * Number of requests within the window for a query to be considered, relative to * total request count. Expected values are between 0 and 0.05 (minimum 5% of * total request volume) */ - queryCountThresholdPercentage?: Maybe; + queryCountThresholdPercentage?: Maybe; /** * delta in seconds from current time that determines the end of the * window for reported metrics included in a schema diff. A day window @@ -11132,44 +13124,44 @@ export type SchemaDiffValidationConfig = { * cases, this could be an ISO timestamp if the user passed one in on diff * creation */ - to?: Maybe; + to?: Maybe; }; export type SchemaHashInput = { /** If provided fetches build messages that are added to linter results. */ - buildID?: InputMaybe; + buildID?: InputMaybe; /** SHA256 of the schema sdl. */ - hash: Scalars['String']; + hash: Scalars['String']['input']; subgraphs?: InputMaybe>; }; export type SchemaPublishSubscription = ChannelSubscription & { __typename?: 'SchemaPublishSubscription'; channels: Array; - createdAt: Scalars['Timestamp']; - enabled: Scalars['Boolean']; - id: Scalars['ID']; - lastUpdatedAt: Scalars['Timestamp']; - variant?: Maybe; + createdAt: Scalars['Timestamp']['output']; + enabled: Scalars['Boolean']['output']; + id: Scalars['ID']['output']; + lastUpdatedAt: Scalars['Timestamp']['output']; + variant?: Maybe; }; export type SchemaReport = { /** A randomly generated UUID, immutable for the lifetime of the edge server runtime. */ - bootId: Scalars['String']; + bootId: Scalars['String']['input']; /** The hex SHA256 hash of the schema being reported. Note that for a GraphQL server with a core schema, this should be the core schema, not the API schema. */ - coreSchemaHash: Scalars['String']; + coreSchemaHash: Scalars['String']['input']; /** The graph ref (eg, 'id@variant') */ - graphRef: Scalars['String']; + graphRef: Scalars['String']['input']; /** The version of the edge server reporting agent, e.g. apollo-server-2.8, graphql-java-3.1, etc. length must be <= 256 characters. */ - libraryVersion?: InputMaybe; + libraryVersion?: InputMaybe; /** The infra environment in which this edge server is running, e.g. localhost, Kubernetes, AWS Lambda, Google CloudRun, AWS ECS, etc. length must be <= 256 characters. */ - platform?: InputMaybe; + platform?: InputMaybe; /** The runtime in which the edge server is running, e.g. node 12.03, zulu8.46.0.19-ca-jdk8.0.252-macosx_x64, etc. length must be <= 256 characters. */ - runtimeVersion?: InputMaybe; + runtimeVersion?: InputMaybe; /** If available, an identifier for the edge server instance, such that when restarting this instance it will have the same serverId, with a different bootId. For example, in Kubernetes this might be the pod name. Length must be <= 256 characters. */ - serverId?: InputMaybe; + serverId?: InputMaybe; /** An identifier used to distinguish the version (from the user's perspective) of the edge server's code itself. For instance, the git sha of the server's repository or the docker sha of the associated image this server runs with. Length must be <= 256 characters. */ - userVersion?: InputMaybe; + userVersion?: InputMaybe; }; /** Contains details for an individual publication of an individual graph variant. */ @@ -11177,7 +13169,7 @@ export type SchemaTag = { __typename?: 'SchemaTag'; /** The result of federated composition executed for this publication. This result includes either a supergraph schema or error details, depending on whether composition succeeded. This value is null when the publication is for a non-federated graph. */ compositionResult?: Maybe; - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; /** A schema diff comparing against the schema from the most recent previous successful publication. */ diffToPrevious?: Maybe; gitContext?: Maybe; @@ -11193,14 +13185,14 @@ export type SchemaTag = { * Number of tagged schemas created under the same tag name. * Also represents the maximum size of the history's limit argument. */ - historyLength: Scalars['Int']; + historyLength: Scalars['Int']['output']; /** * Number of schemas tagged prior to this one under the same tag name, its position * in the tag history. */ - historyOrder: Scalars['Int']; + historyOrder: Scalars['Int']['output']; /** The identifier for this specific publication. */ - id: Scalars['ID']; + id: Scalars['ID']['output']; /** * The launch for this publication. This value is non-null for contract variants, and sometimes null * for composition variants (specifically for older publications). This value is null for other @@ -11208,7 +13200,7 @@ export type SchemaTag = { */ launch?: Maybe; /** The timestamp when the variant was published to. */ - publishedAt: Scalars['Timestamp']; + publishedAt: Scalars['Timestamp']['output']; /** * The Identity that published this schema and their client info, or null if this isn't * a publish. Sub-fields may be null if they weren't recorded. @@ -11216,33 +13208,33 @@ export type SchemaTag = { publishedBy?: Maybe; /** The schema that was published to the variant. */ schema: Schema; - slackNotificationBody?: Maybe; + slackNotificationBody?: Maybe; /** @deprecated Please use variant { name } instead */ - tag: Scalars['String']; + tag: Scalars['String']['output']; /** The variant that was published to." */ variant: GraphVariant; - webhookNotificationBody: Scalars['String']; + webhookNotificationBody: Scalars['String']['output']; }; /** Contains details for an individual publication of an individual graph variant. */ -export type SchemaTaghistoryArgs = { - includeUnchanged?: Scalars['Boolean']; - limit?: Scalars['Int']; - offset?: InputMaybe; +export type SchemaTagHistoryArgs = { + includeUnchanged?: Scalars['Boolean']['input']; + limit?: Scalars['Int']['input']; + offset?: InputMaybe; orderBy?: InputMaybe; }; /** Contains details for an individual publication of an individual graph variant. */ -export type SchemaTaghistoryLengthArgs = { - includeUnchanged?: Scalars['Boolean']; +export type SchemaTagHistoryLengthArgs = { + includeUnchanged?: Scalars['Boolean']['input']; }; /** Contains details for an individual publication of an individual graph variant. */ -export type SchemaTagslackNotificationBodyArgs = { - graphDisplayName: Scalars['String']; +export type SchemaTagSlackNotificationBodyArgs = { + graphDisplayName: Scalars['String']['input']; }; export enum SchemaTagHistoryOrder { @@ -11255,45 +13247,45 @@ export type SchemaValidationError = Error & { __typename?: 'SchemaValidationError'; issues: Array; /** The error's details. */ - message: Scalars['String']; + message: Scalars['String']['output']; }; /** An error that occurs when an invalid schema is passed in as user input */ export type SchemaValidationIssue = { __typename?: 'SchemaValidationIssue'; - message: Scalars['String']; + message: Scalars['String']['output']; }; /** How many seats of the given types does an organization have (regardless of plan type)? */ export type Seats = { __typename?: 'Seats'; /** How many members that are free in this organization. */ - free: Scalars['Int']; + free: Scalars['Int']['output']; /** How many members that are not free in this organization. */ - fullPrice: Scalars['Int']; + fullPrice: Scalars['Int']['output']; }; /** Cloud Router secret */ export type Secret = { __typename?: 'Secret'; /** When the secret was created */ - createdAt: Scalars['DateTime']; + createdAt: Scalars['DateTime']['output']; /** Hash of the secret */ - hash: Scalars['String']; + hash: Scalars['String']['output']; /** Name of the secret */ - name: Scalars['String']; + name: Scalars['String']['output']; }; /** Input for creating or updating secrets */ export type SecretInput = { /** Name of the secret */ - name: Scalars['String']; + name: Scalars['String']['input']; /** * Value for that secret * * This can only be used for input, as it is not possible to retrieve the value of secrets. */ - value: Scalars['String']; + value: Scalars['String']['input']; }; export type SemanticChange = { @@ -11310,7 +13302,7 @@ export type SemanticChange = { /** Top level node affected by the change */ parentNode?: Maybe; /** Short description of the change */ - shortDescription?: Maybe; + shortDescription?: Maybe; }; /** @@ -11322,7 +13314,9 @@ export type Service = Identity & { __typename?: 'Service'; /** The organization that this graph belongs to. */ account?: Maybe; - accountId?: Maybe; + accountId?: Maybe; + /** The `GraphVariant` types of all proposal variants. This is a potentially expensive field to query. */ + allProposalVariants: Array; /** A list of the graph API keys that are active for this graph. */ apiKeys?: Maybe>; /** Provides a view of the graph as an `Actor` type. */ @@ -11341,7 +13335,7 @@ export type Service = Identity & { * application. Apollo's media server will downscale larger images to at least the requested size, * but this will not happen for third-party media servers. */ - avatarUrl?: Maybe; + avatarUrl?: Maybe; /** Get available notification endpoints */ channels?: Maybe>; /** Get check configuration for this graph. */ @@ -11358,18 +13352,18 @@ export type Service = Identity & { * For cli triggered checks, this is the author. * @deprecated Use checksCommitterOptions instead */ - checksAuthorOptions: Array; + checksAuthorOptions: Array; /** * List of options available for filtering checks for this graph by branch. * If a filter is passed, constrains results to match the filter. */ - checksBranchOptions: Array; + checksBranchOptions: Array; /** * List of options available for filtering checks for this graph by git committer. * If a filter is passed, constrains results to match the filter. * For cli triggered checks, this is the author. */ - checksCommitterOptions: Array; + checksCommitterOptions: Array; /** * List of options available for filtering checks for this graph by created by field. * If a filter is passed, constrains results to match the filter. @@ -11380,29 +13374,33 @@ export type Service = Identity & { * List of options available for filtering checks for this graph by subgraph name. * If a filter is passed, constrains results to match the filter. */ - checksSubgraphOptions: Array; + checksSubgraphOptions: Array; /** Get a composition build check result for this graph by its ID */ compositionBuildCheckResult?: Maybe; /** Given a graphCompositionID, return the results of composition. This can represent either a validation or a publish. */ compositionResultById?: Maybe; - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; createdBy?: Maybe; + /** Custom check configuration for this graph. */ + customCheckConfiguration?: Maybe; datadogMetricsConfig?: Maybe; - defaultBuildPipelineTrack?: Maybe; + defaultBuildPipelineTrack?: Maybe; /** The time the default build pipeline track version was updated. */ - defaultBuildPipelineTrackUpdatedAt?: Maybe; + defaultBuildPipelineTrackUpdatedAt?: Maybe; defaultProposalReviewers: Array>; - deletedAt?: Maybe; - description?: Maybe; + deletedAt?: Maybe; + description?: Maybe; /** @deprecated No longer supported */ devGraphOwner?: Maybe; /** Get a GraphQL document by hash */ - doc?: Maybe; + doc?: Maybe; + /** Get GraphQL documents by hash, max up to 100 can be requested per query */ + docs?: Maybe>>; /** * Get a GraphQL document by hash * @deprecated Use doc instead */ - document?: Maybe; + document?: Maybe; flatDiff: FlatDiffResult; /** The capabilities that are supported for this graph */ graphCapabilities: GraphCapabilities; @@ -11411,9 +13409,9 @@ export type Service = Identity & { * When this is true, this graph will be hidden from non-admin members of the org who haven't been explicitly assigned a * role on this graph. */ - hiddenFromUninvitedNonAdminAccountMembers: Scalars['Boolean']; + hiddenFromUninvitedNonAdminAccountMembers: Scalars['Boolean']['output']; /** The graph's globally unique identifier. */ - id: Scalars['ID']; + id: Scalars['ID']['output']; /** List of ignored rule violations for the linter */ ignoredLinterViolations: Array; /** @@ -11421,18 +13419,18 @@ export type Service = Identity & { * Set includeDeleted to see deleted subgraphs. */ implementingServices?: Maybe; - lastReportedAt?: Maybe; + lastReportedAt?: Maybe; /** Linter configuration for this graph. */ linterConfiguration: GraphLinterConfiguration; /** Current identity, null if not authenticated. */ me?: Maybe; - minProposalApprovers: Scalars['Int']; + minProposalApprovers: Scalars['Int']['output']; minProposalRoles: ProposalRoles; /** The composition result that was most recently published to a graph variant. */ mostRecentCompositionPublish?: Maybe; /** Permissions of the current user in this graph. */ myRole?: Maybe; - name: Scalars['String']; + name: Scalars['String']['output']; onboardingArchitecture?: Maybe; operation?: Maybe; /** Get request counts by variant for operation checks */ @@ -11445,18 +13443,20 @@ export type Service = Identity & { persistedQueryList?: Maybe; persistedQueryLists?: Maybe>; /** A template that is the base description for new schema proposals */ - proposalDescriptionTemplate?: Maybe; + proposalDescriptionTemplate?: Maybe; /** The current active user's Proposal notification status on this graph. */ proposalNotificationStatus: NotificationStatus; /** - * A list of the proposal variants for this graph sorted by created at date. - * limit defaults to Int.MAX_VALUE, offset defaults to 0 + * A list of the proposals for this graph sorted by created at date. + * limit defaults to 25 and has an allowed max of 50, offset defaults to 0 */ - proposalVariants: ProposalVariantsResult; + proposals: ProposalsResult; /** If the graph setting for the proposals implementation variant has been set, this will be non null. */ proposalsImplementationVariant?: Maybe; /** Must one of the default reviewers approve proposals */ - proposalsMustBeApprovedByADefaultReviewer: Scalars['Boolean']; + proposalsMustBeApprovedByADefaultReviewer: Scalars['Boolean']['output']; + /** True if each approving reviewer's review will get dismissed & the proposal status will change from approved to open on new revisions. */ + proposalsMustBeReApprovedOnChange: Scalars['Boolean']['output']; /** Get query triggers for a given variant. If variant is null all the triggers for this service will be gotten. */ queryTriggers?: Maybe>; readme?: Maybe; @@ -11466,12 +13466,13 @@ export type Service = Identity & { * Whether registry subscriptions (with any options) are enabled. If variant is not passed, returns true if configuration is present for any variant * @deprecated This field will be removed */ - registrySubscriptionsEnabled: Scalars['Boolean']; - reportingEnabled: Scalars['Boolean']; + registrySubscriptionsEnabled: Scalars['Boolean']['output']; + reportingEnabled: Scalars['Boolean']['output']; /** The list of members that can access this graph, accounting for graph role overrides */ roleOverrides?: Maybe>; /** Describes the permissions that the active user has for this graph. */ roles?: Maybe; + ruleEnforcement?: Maybe; /** Get a specific assessment for this graph by its ID. */ safAssessment?: Maybe; /** All assessments for this graph. */ @@ -11491,13 +13492,13 @@ export type Service = Identity & { stats: ServiceStatsWindow; statsWindow?: Maybe; /** Generate a test schema publish notification body */ - testSchemaPublishBody: Scalars['String']; + testSchemaPublishBody: Scalars['String']['output']; /** The graph's name. */ - title: Scalars['String']; + title: Scalars['String']['output']; /** Count checkWorkflows for the given filter. Used for paginating with checkWorkflows. */ - totalCheckWorkflowCount: Scalars['Int']; + totalCheckWorkflowCount: Scalars['Int']['output']; trace?: Maybe; - traceStorageEnabled: Scalars['Boolean']; + traceStorageEnabled: Scalars['Boolean']['output']; /** * Provides details of the graph variant with the provided `name`, if a variant * with that name exists for this graph. Otherwise, returns null. @@ -11515,8 +13516,8 @@ export type Service = Identity & { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServiceavatarUrlArgs = { - size?: Scalars['Int']; +export type ServiceAvatarUrlArgs = { + size?: Scalars['Int']['input']; }; @@ -11525,8 +13526,8 @@ export type ServiceavatarUrlArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServicechannelsArgs = { - channelIds?: InputMaybe>; +export type ServiceChannelsArgs = { + channelIds?: InputMaybe>; }; @@ -11535,8 +13536,8 @@ export type ServicechannelsArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServicecheckWorkflowArgs = { - id: Scalars['ID']; +export type ServiceCheckWorkflowArgs = { + id: Scalars['ID']['input']; }; @@ -11545,8 +13546,8 @@ export type ServicecheckWorkflowArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServicecheckWorkflowTaskArgs = { - id: Scalars['ID']; +export type ServiceCheckWorkflowTaskArgs = { + id: Scalars['ID']['input']; }; @@ -11555,10 +13556,10 @@ export type ServicecheckWorkflowTaskArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServicecheckWorkflowsArgs = { +export type ServiceCheckWorkflowsArgs = { filter?: InputMaybe; - limit?: Scalars['Int']; - offset?: Scalars['Int']; + limit?: Scalars['Int']['input']; + offset?: Scalars['Int']['input']; }; @@ -11567,7 +13568,7 @@ export type ServicecheckWorkflowsArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServicechecksAuthorOptionsArgs = { +export type ServiceChecksAuthorOptionsArgs = { filter?: InputMaybe; }; @@ -11577,7 +13578,7 @@ export type ServicechecksAuthorOptionsArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServicechecksBranchOptionsArgs = { +export type ServiceChecksBranchOptionsArgs = { filter?: InputMaybe; }; @@ -11587,7 +13588,7 @@ export type ServicechecksBranchOptionsArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServicechecksCommitterOptionsArgs = { +export type ServiceChecksCommitterOptionsArgs = { filter?: InputMaybe; }; @@ -11597,7 +13598,7 @@ export type ServicechecksCommitterOptionsArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServicechecksCreatedByOptionsArgs = { +export type ServiceChecksCreatedByOptionsArgs = { filter?: InputMaybe; }; @@ -11607,7 +13608,7 @@ export type ServicechecksCreatedByOptionsArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServicechecksSubgraphOptionsArgs = { +export type ServiceChecksSubgraphOptionsArgs = { filter?: InputMaybe; }; @@ -11617,8 +13618,18 @@ export type ServicechecksSubgraphOptionsArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServicecompositionBuildCheckResultArgs = { - id: Scalars['ID']; +export type ServiceCompositionBuildCheckResultArgs = { + id: Scalars['ID']['input']; +}; + + +/** + * A graph in Apollo Studio represents a graph in your organization. + * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). + * Each variant has its own GraphQL schema, which means schemas can differ between environments. + */ +export type ServiceCompositionResultByIdArgs = { + id: Scalars['ID']['input']; }; @@ -11627,8 +13638,8 @@ export type ServicecompositionBuildCheckResultArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServicecompositionResultByIdArgs = { - id: Scalars['ID']; +export type ServiceDocArgs = { + hash?: InputMaybe; }; @@ -11637,8 +13648,8 @@ export type ServicecompositionResultByIdArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServicedocArgs = { - hash?: InputMaybe; +export type ServiceDocsArgs = { + hashes: Array; }; @@ -11647,8 +13658,8 @@ export type ServicedocArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServicedocumentArgs = { - hash?: InputMaybe; +export type ServiceDocumentArgs = { + hash?: InputMaybe; }; @@ -11657,9 +13668,9 @@ export type ServicedocumentArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServiceflatDiffArgs = { - newSdlHash?: InputMaybe; - oldSdlHash?: InputMaybe; +export type ServiceFlatDiffArgs = { + newSdlHash?: InputMaybe; + oldSdlHash?: InputMaybe; }; @@ -11668,9 +13679,9 @@ export type ServiceflatDiffArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServiceimplementingServicesArgs = { - graphVariant: Scalars['String']; - includeDeleted?: InputMaybe; +export type ServiceImplementingServicesArgs = { + graphVariant: Scalars['String']['input']; + includeDeleted?: InputMaybe; }; @@ -11679,8 +13690,8 @@ export type ServiceimplementingServicesArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServicelastReportedAtArgs = { - graphVariant?: InputMaybe; +export type ServiceLastReportedAtArgs = { + graphVariant?: InputMaybe; }; @@ -11689,8 +13700,8 @@ export type ServicelastReportedAtArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServicemostRecentCompositionPublishArgs = { - graphVariant: Scalars['String']; +export type ServiceMostRecentCompositionPublishArgs = { + graphVariant: Scalars['String']['input']; }; @@ -11699,8 +13710,8 @@ export type ServicemostRecentCompositionPublishArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServiceoperationArgs = { - id: Scalars['ID']; +export type ServiceOperationArgs = { + id: Scalars['ID']['input']; }; @@ -11709,8 +13720,8 @@ export type ServiceoperationArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServiceoperationCheckRequestsByVariantArgs = { - from: Scalars['Timestamp']; +export type ServiceOperationCheckRequestsByVariantArgs = { + from: Scalars['Timestamp']['input']; }; @@ -11719,9 +13730,9 @@ export type ServiceoperationCheckRequestsByVariantArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServiceoperationsAcceptedChangesArgs = { - checkID: Scalars['ID']; - operationID: Scalars['String']; +export type ServiceOperationsAcceptedChangesArgs = { + checkID: Scalars['ID']['input']; + operationID: Scalars['String']['input']; }; @@ -11730,8 +13741,8 @@ export type ServiceoperationsAcceptedChangesArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServiceoperationsCheckArgs = { - checkID: Scalars['ID']; +export type ServiceOperationsCheckArgs = { + checkID: Scalars['ID']['input']; }; @@ -11740,8 +13751,8 @@ export type ServiceoperationsCheckArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServicepersistedQueryListArgs = { - id: Scalars['ID']; +export type ServicePersistedQueryListArgs = { + id: Scalars['ID']['input']; }; @@ -11750,10 +13761,10 @@ export type ServicepersistedQueryListArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServiceproposalVariantsArgs = { - filterBy?: InputMaybe; - limit?: InputMaybe; - offset?: InputMaybe; +export type ServiceProposalsArgs = { + filterBy?: InputMaybe; + limit?: InputMaybe; + offset?: InputMaybe; }; @@ -11762,9 +13773,9 @@ export type ServiceproposalVariantsArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServicequeryTriggersArgs = { - graphVariant?: InputMaybe; - operationNames?: InputMaybe>; +export type ServiceQueryTriggersArgs = { + graphVariant?: InputMaybe; + operationNames?: InputMaybe>; }; @@ -11773,10 +13784,20 @@ export type ServicequeryTriggersArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServiceregistryStatsWindowArgs = { - from: Scalars['Timestamp']; +export type ServiceRegistryStatsWindowArgs = { + from: Scalars['Timestamp']['input']; resolution?: InputMaybe; - to?: InputMaybe; + to?: InputMaybe; +}; + + +/** + * A graph in Apollo Studio represents a graph in your organization. + * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). + * Each variant has its own GraphQL schema, which means schemas can differ between environments. + */ +export type ServiceRegistrySubscriptionsEnabledArgs = { + graphVariant?: InputMaybe; }; @@ -11785,8 +13806,8 @@ export type ServiceregistryStatsWindowArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServiceregistrySubscriptionsEnabledArgs = { - graphVariant?: InputMaybe; +export type ServiceRuleEnforcementArgs = { + id: Scalars['ID']['input']; }; @@ -11795,9 +13816,9 @@ export type ServiceregistrySubscriptionsEnabledArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServicesafAssessmentArgs = { - id: Scalars['ID']; - includeDeleted?: Scalars['Boolean']; +export type ServiceSafAssessmentArgs = { + id: Scalars['ID']['input']; + includeDeleted?: Scalars['Boolean']['input']; }; @@ -11806,8 +13827,8 @@ export type ServicesafAssessmentArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServicesafAssessmentsArgs = { - includeDeleted?: Scalars['Boolean']; +export type ServiceSafAssessmentsArgs = { + includeDeleted?: Scalars['Boolean']['input']; }; @@ -11816,9 +13837,9 @@ export type ServicesafAssessmentsArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServiceschemaArgs = { - hash?: InputMaybe; - tag?: InputMaybe; +export type ServiceSchemaArgs = { + hash?: InputMaybe; + tag?: InputMaybe; }; @@ -11827,8 +13848,8 @@ export type ServiceschemaArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServiceschemaTagArgs = { - tag: Scalars['String']; +export type ServiceSchemaTagArgs = { + tag: Scalars['String']['input']; }; @@ -11837,8 +13858,8 @@ export type ServiceschemaTagArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServiceschemaTagByIdArgs = { - id: Scalars['ID']; +export type ServiceSchemaTagByIdArgs = { + id: Scalars['ID']['input']; }; @@ -11847,8 +13868,8 @@ export type ServiceschemaTagByIdArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServiceschemaTagsArgs = { - tags?: InputMaybe>; +export type ServiceSchemaTagsArgs = { + tags?: InputMaybe>; }; @@ -11857,10 +13878,10 @@ export type ServiceschemaTagsArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServicestatsArgs = { - from: Scalars['Timestamp']; +export type ServiceStatsArgs = { + from: Scalars['Timestamp']['input']; resolution?: InputMaybe; - to?: InputMaybe; + to?: InputMaybe; }; @@ -11869,10 +13890,10 @@ export type ServicestatsArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServicestatsWindowArgs = { - from: Scalars['Timestamp']; +export type ServiceStatsWindowArgs = { + from: Scalars['Timestamp']['input']; resolution?: InputMaybe; - to?: InputMaybe; + to?: InputMaybe; }; @@ -11881,8 +13902,8 @@ export type ServicestatsWindowArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServicetestSchemaPublishBodyArgs = { - variant: Scalars['String']; +export type ServiceTestSchemaPublishBodyArgs = { + variant: Scalars['String']['input']; }; @@ -11891,7 +13912,7 @@ export type ServicetestSchemaPublishBodyArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServicetotalCheckWorkflowCountArgs = { +export type ServiceTotalCheckWorkflowCountArgs = { filter?: InputMaybe; }; @@ -11901,8 +13922,8 @@ export type ServicetotalCheckWorkflowCountArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServicetraceArgs = { - id: Scalars['ID']; +export type ServiceTraceArgs = { + id: Scalars['ID']['input']; }; @@ -11911,86 +13932,262 @@ export type ServicetraceArgs = { * Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production). * Each variant has its own GraphQL schema, which means schemas can differ between environments. */ -export type ServicevariantArgs = { - name: Scalars['String']; +export type ServiceVariantArgs = { + name: Scalars['String']['input']; }; /** Columns of ServiceBillingUsageStats. */ export enum ServiceBillingUsageStatsColumn { + AGENT_ID = 'AGENT_ID', AGENT_VERSION = 'AGENT_VERSION', GRAPH_DEPLOYMENT_TYPE = 'GRAPH_DEPLOYMENT_TYPE', OPERATION_COUNT = 'OPERATION_COUNT', OPERATION_COUNT_PROVIDED_EXPLICITLY = 'OPERATION_COUNT_PROVIDED_EXPLICITLY', OPERATION_SUBTYPE = 'OPERATION_SUBTYPE', OPERATION_TYPE = 'OPERATION_TYPE', + ROUTER_FEATURES_ENABLED = 'ROUTER_FEATURES_ENABLED', SCHEMA_TAG = 'SCHEMA_TAG', TIMESTAMP = 'TIMESTAMP' } export type ServiceBillingUsageStatsDimensions = { __typename?: 'ServiceBillingUsageStatsDimensions'; - agentVersion?: Maybe; - graphDeploymentType?: Maybe; - operationCountProvidedExplicitly?: Maybe; - operationSubtype?: Maybe; - operationType?: Maybe; - schemaTag?: Maybe; + agentId?: Maybe; + agentVersion?: Maybe; + graphDeploymentType?: Maybe; + operationCountProvidedExplicitly?: Maybe; + operationSubtype?: Maybe; + operationType?: Maybe; + routerFeaturesEnabled?: Maybe; + schemaTag?: Maybe; }; /** Filter for data in ServiceBillingUsageStats. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type ServiceBillingUsageStatsFilter = { + /** Selects rows whose agentId dimension equals the given value if not null. To query for the null value, use {in: {agentId: [null]}} instead. */ + agentId?: InputMaybe; /** Selects rows whose agentVersion dimension equals the given value if not null. To query for the null value, use {in: {agentVersion: [null]}} instead. */ - agentVersion?: InputMaybe; + agentVersion?: InputMaybe; and?: InputMaybe>; /** Selects rows whose graphDeploymentType dimension equals the given value if not null. To query for the null value, use {in: {graphDeploymentType: [null]}} instead. */ - graphDeploymentType?: InputMaybe; + graphDeploymentType?: InputMaybe; in?: InputMaybe; not?: InputMaybe; /** Selects rows whose operationCountProvidedExplicitly dimension equals the given value if not null. To query for the null value, use {in: {operationCountProvidedExplicitly: [null]}} instead. */ - operationCountProvidedExplicitly?: InputMaybe; + operationCountProvidedExplicitly?: InputMaybe; /** Selects rows whose operationSubtype dimension equals the given value if not null. To query for the null value, use {in: {operationSubtype: [null]}} instead. */ - operationSubtype?: InputMaybe; + operationSubtype?: InputMaybe; /** Selects rows whose operationType dimension equals the given value if not null. To query for the null value, use {in: {operationType: [null]}} instead. */ - operationType?: InputMaybe; + operationType?: InputMaybe; or?: InputMaybe>; + /** Selects rows whose routerFeaturesEnabled dimension equals the given value if not null. To query for the null value, use {in: {routerFeaturesEnabled: [null]}} instead. */ + routerFeaturesEnabled?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; }; /** Filter for data in ServiceBillingUsageStats. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type ServiceBillingUsageStatsFilterIn = { + /** Selects rows whose agentId dimension is in the given list. A null value in the list means a row with null for that dimension. */ + agentId?: InputMaybe>>; /** Selects rows whose agentVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - agentVersion?: InputMaybe>>; + agentVersion?: InputMaybe>>; /** Selects rows whose graphDeploymentType dimension is in the given list. A null value in the list means a row with null for that dimension. */ - graphDeploymentType?: InputMaybe>>; + graphDeploymentType?: InputMaybe>>; /** Selects rows whose operationCountProvidedExplicitly dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationCountProvidedExplicitly?: InputMaybe>>; + operationCountProvidedExplicitly?: InputMaybe>>; /** Selects rows whose operationSubtype dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationSubtype?: InputMaybe>>; + operationSubtype?: InputMaybe>>; /** Selects rows whose operationType dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationType?: InputMaybe>>; + operationType?: InputMaybe>>; + /** Selects rows whose routerFeaturesEnabled dimension is in the given list. A null value in the list means a row with null for that dimension. */ + routerFeaturesEnabled?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; }; export type ServiceBillingUsageStatsMetrics = { __typename?: 'ServiceBillingUsageStatsMetrics'; - operationCount: Scalars['Long']; + operationCount: Scalars['Long']['output']; +}; + +export type ServiceBillingUsageStatsOrderBySpec = { + column: ServiceBillingUsageStatsColumn; + direction: Ordering; +}; + +export type ServiceBillingUsageStatsRecord = { + __typename?: 'ServiceBillingUsageStatsRecord'; + /** Dimensions of ServiceBillingUsageStats that can be grouped by. */ + groupBy: ServiceBillingUsageStatsDimensions; + /** Metrics of ServiceBillingUsageStats that can be aggregated over. */ + metrics: ServiceBillingUsageStatsMetrics; + /** Starting segment timestamp. */ + timestamp: Scalars['Timestamp']['output']; +}; + +/** Columns of ServiceCardinalityStats. */ +export enum ServiceCardinalityStatsColumn { + CLIENT_NAME_CARDINALITY = 'CLIENT_NAME_CARDINALITY', + CLIENT_VERSION_CARDINALITY = 'CLIENT_VERSION_CARDINALITY', + OPERATION_SHAPE_CARDINALITY = 'OPERATION_SHAPE_CARDINALITY', + SCHEMA_COORDINATE_CARDINALITY = 'SCHEMA_COORDINATE_CARDINALITY', + SCHEMA_TAG = 'SCHEMA_TAG', + TIMESTAMP = 'TIMESTAMP' +} + +export type ServiceCardinalityStatsDimensions = { + __typename?: 'ServiceCardinalityStatsDimensions'; + schemaTag?: Maybe; +}; + +/** Filter for data in ServiceCardinalityStats. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ +export type ServiceCardinalityStatsFilter = { + and?: InputMaybe>; + in?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>; + /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ + schemaTag?: InputMaybe; +}; + +/** Filter for data in ServiceCardinalityStats. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ +export type ServiceCardinalityStatsFilterIn = { + /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ + schemaTag?: InputMaybe>>; +}; + +export type ServiceCardinalityStatsMetrics = { + __typename?: 'ServiceCardinalityStatsMetrics'; + clientNameCardinality: Scalars['Float']['output']; + clientVersionCardinality: Scalars['Float']['output']; + operationShapeCardinality: Scalars['Float']['output']; + schemaCoordinateCardinality: Scalars['Float']['output']; +}; + +export type ServiceCardinalityStatsOrderBySpec = { + column: ServiceCardinalityStatsColumn; + direction: Ordering; +}; + +export type ServiceCardinalityStatsRecord = { + __typename?: 'ServiceCardinalityStatsRecord'; + /** Dimensions of ServiceCardinalityStats that can be grouped by. */ + groupBy: ServiceCardinalityStatsDimensions; + /** Metrics of ServiceCardinalityStats that can be aggregated over. */ + metrics: ServiceCardinalityStatsMetrics; + /** Starting segment timestamp. */ + timestamp: Scalars['Timestamp']['output']; +}; + +/** Columns of ServiceCoordinateUsage. */ +export enum ServiceCoordinateUsageColumn { + CLIENT_NAME = 'CLIENT_NAME', + CLIENT_VERSION = 'CLIENT_VERSION', + ESTIMATED_EXECUTION_COUNT = 'ESTIMATED_EXECUTION_COUNT', + EXECUTION_COUNT = 'EXECUTION_COUNT', + KIND = 'KIND', + NAMED_ATTRIBUTE = 'NAMED_ATTRIBUTE', + NAMED_TYPE = 'NAMED_TYPE', + OPERATION_SUBTYPE = 'OPERATION_SUBTYPE', + OPERATION_TYPE = 'OPERATION_TYPE', + QUERY_ID = 'QUERY_ID', + QUERY_NAME = 'QUERY_NAME', + REFERENCING_OPERATION_COUNT = 'REFERENCING_OPERATION_COUNT', + REQUEST_COUNT_NULL = 'REQUEST_COUNT_NULL', + REQUEST_COUNT_UNDEFINED = 'REQUEST_COUNT_UNDEFINED', + SCHEMA_TAG = 'SCHEMA_TAG', + TIMESTAMP = 'TIMESTAMP' +} + +export type ServiceCoordinateUsageDimensions = { + __typename?: 'ServiceCoordinateUsageDimensions'; + clientName?: Maybe; + clientVersion?: Maybe; + kind?: Maybe; + namedAttribute?: Maybe; + namedType?: Maybe; + operationSubtype?: Maybe; + operationType?: Maybe; + queryId?: Maybe; + queryName?: Maybe; + schemaTag?: Maybe; +}; + +/** Filter for data in ServiceCoordinateUsage. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ +export type ServiceCoordinateUsageFilter = { + and?: InputMaybe>; + /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */ + clientName?: InputMaybe; + /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */ + clientVersion?: InputMaybe; + in?: InputMaybe; + /** Selects rows whose kind dimension equals the given value if not null. To query for the null value, use {in: {kind: [null]}} instead. */ + kind?: InputMaybe; + /** Selects rows whose namedAttribute dimension equals the given value if not null. To query for the null value, use {in: {namedAttribute: [null]}} instead. */ + namedAttribute?: InputMaybe; + /** Selects rows whose namedType dimension equals the given value if not null. To query for the null value, use {in: {namedType: [null]}} instead. */ + namedType?: InputMaybe; + not?: InputMaybe; + /** Selects rows whose operationSubtype dimension equals the given value if not null. To query for the null value, use {in: {operationSubtype: [null]}} instead. */ + operationSubtype?: InputMaybe; + /** Selects rows whose operationType dimension equals the given value if not null. To query for the null value, use {in: {operationType: [null]}} instead. */ + operationType?: InputMaybe; + or?: InputMaybe>; + /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */ + queryId?: InputMaybe; + /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */ + queryName?: InputMaybe; + /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ + schemaTag?: InputMaybe; +}; + +/** Filter for data in ServiceCoordinateUsage. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ +export type ServiceCoordinateUsageFilterIn = { + /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */ + clientName?: InputMaybe>>; + /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ + clientVersion?: InputMaybe>>; + /** Selects rows whose kind dimension is in the given list. A null value in the list means a row with null for that dimension. */ + kind?: InputMaybe>>; + /** Selects rows whose namedAttribute dimension is in the given list. A null value in the list means a row with null for that dimension. */ + namedAttribute?: InputMaybe>>; + /** Selects rows whose namedType dimension is in the given list. A null value in the list means a row with null for that dimension. */ + namedType?: InputMaybe>>; + /** Selects rows whose operationSubtype dimension is in the given list. A null value in the list means a row with null for that dimension. */ + operationSubtype?: InputMaybe>>; + /** Selects rows whose operationType dimension is in the given list. A null value in the list means a row with null for that dimension. */ + operationType?: InputMaybe>>; + /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */ + queryId?: InputMaybe>>; + /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */ + queryName?: InputMaybe>>; + /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ + schemaTag?: InputMaybe>>; +}; + +export type ServiceCoordinateUsageMetrics = { + __typename?: 'ServiceCoordinateUsageMetrics'; + estimatedExecutionCount: Scalars['Long']['output']; + executionCount: Scalars['Long']['output']; + referencingOperationCount: Scalars['Long']['output']; + requestCountNull: Scalars['Long']['output']; + requestCountUndefined: Scalars['Long']['output']; }; -export type ServiceBillingUsageStatsOrderBySpec = { - column: ServiceBillingUsageStatsColumn; +export type ServiceCoordinateUsageOrderBySpec = { + column: ServiceCoordinateUsageColumn; direction: Ordering; }; -export type ServiceBillingUsageStatsRecord = { - __typename?: 'ServiceBillingUsageStatsRecord'; - /** Dimensions of ServiceBillingUsageStats that can be grouped by. */ - groupBy: ServiceBillingUsageStatsDimensions; - /** Metrics of ServiceBillingUsageStats that can be aggregated over. */ - metrics: ServiceBillingUsageStatsMetrics; +export type ServiceCoordinateUsageRecord = { + __typename?: 'ServiceCoordinateUsageRecord'; + /** Dimensions of ServiceCoordinateUsage that can be grouped by. */ + groupBy: ServiceCoordinateUsageDimensions; + /** Metrics of ServiceCoordinateUsage that can be aggregated over. */ + metrics: ServiceCoordinateUsageMetrics; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; }; /** Columns of ServiceEdgeServerInfos. */ @@ -12008,58 +14205,58 @@ export enum ServiceEdgeServerInfosColumn { export type ServiceEdgeServerInfosDimensions = { __typename?: 'ServiceEdgeServerInfosDimensions'; - bootId?: Maybe; - executableSchemaId?: Maybe; - libraryVersion?: Maybe; - platform?: Maybe; - runtimeVersion?: Maybe; - schemaTag?: Maybe; - serverId?: Maybe; - userVersion?: Maybe; + bootId?: Maybe; + executableSchemaId?: Maybe; + libraryVersion?: Maybe; + platform?: Maybe; + runtimeVersion?: Maybe; + schemaTag?: Maybe; + serverId?: Maybe; + userVersion?: Maybe; }; /** Filter for data in ServiceEdgeServerInfos. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type ServiceEdgeServerInfosFilter = { and?: InputMaybe>; /** Selects rows whose bootId dimension equals the given value if not null. To query for the null value, use {in: {bootId: [null]}} instead. */ - bootId?: InputMaybe; + bootId?: InputMaybe; /** Selects rows whose executableSchemaId dimension equals the given value if not null. To query for the null value, use {in: {executableSchemaId: [null]}} instead. */ - executableSchemaId?: InputMaybe; + executableSchemaId?: InputMaybe; in?: InputMaybe; /** Selects rows whose libraryVersion dimension equals the given value if not null. To query for the null value, use {in: {libraryVersion: [null]}} instead. */ - libraryVersion?: InputMaybe; + libraryVersion?: InputMaybe; not?: InputMaybe; or?: InputMaybe>; /** Selects rows whose platform dimension equals the given value if not null. To query for the null value, use {in: {platform: [null]}} instead. */ - platform?: InputMaybe; + platform?: InputMaybe; /** Selects rows whose runtimeVersion dimension equals the given value if not null. To query for the null value, use {in: {runtimeVersion: [null]}} instead. */ - runtimeVersion?: InputMaybe; + runtimeVersion?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; /** Selects rows whose serverId dimension equals the given value if not null. To query for the null value, use {in: {serverId: [null]}} instead. */ - serverId?: InputMaybe; + serverId?: InputMaybe; /** Selects rows whose userVersion dimension equals the given value if not null. To query for the null value, use {in: {userVersion: [null]}} instead. */ - userVersion?: InputMaybe; + userVersion?: InputMaybe; }; /** Filter for data in ServiceEdgeServerInfos. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type ServiceEdgeServerInfosFilterIn = { /** Selects rows whose bootId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - bootId?: InputMaybe>>; + bootId?: InputMaybe>>; /** Selects rows whose executableSchemaId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - executableSchemaId?: InputMaybe>>; + executableSchemaId?: InputMaybe>>; /** Selects rows whose libraryVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - libraryVersion?: InputMaybe>>; + libraryVersion?: InputMaybe>>; /** Selects rows whose platform dimension is in the given list. A null value in the list means a row with null for that dimension. */ - platform?: InputMaybe>>; + platform?: InputMaybe>>; /** Selects rows whose runtimeVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - runtimeVersion?: InputMaybe>>; + runtimeVersion?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; /** Selects rows whose serverId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - serverId?: InputMaybe>>; + serverId?: InputMaybe>>; /** Selects rows whose userVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - userVersion?: InputMaybe>>; + userVersion?: InputMaybe>>; }; export type ServiceEdgeServerInfosOrderBySpec = { @@ -12072,7 +14269,7 @@ export type ServiceEdgeServerInfosRecord = { /** Dimensions of ServiceEdgeServerInfos that can be grouped by. */ groupBy: ServiceEdgeServerInfosDimensions; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; }; /** Columns of ServiceErrorStats. */ @@ -12091,59 +14288,59 @@ export enum ServiceErrorStatsColumn { export type ServiceErrorStatsDimensions = { __typename?: 'ServiceErrorStatsDimensions'; - clientName?: Maybe; - clientVersion?: Maybe; - path?: Maybe; - queryId?: Maybe; - queryName?: Maybe; - schemaHash?: Maybe; - schemaTag?: Maybe; + clientName?: Maybe; + clientVersion?: Maybe; + path?: Maybe; + queryId?: Maybe; + queryName?: Maybe; + schemaHash?: Maybe; + schemaTag?: Maybe; }; /** Filter for data in ServiceErrorStats. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type ServiceErrorStatsFilter = { and?: InputMaybe>; /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */ - clientName?: InputMaybe; + clientName?: InputMaybe; /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */ - clientVersion?: InputMaybe; + clientVersion?: InputMaybe; in?: InputMaybe; not?: InputMaybe; or?: InputMaybe>; /** Selects rows whose path dimension equals the given value if not null. To query for the null value, use {in: {path: [null]}} instead. */ - path?: InputMaybe; + path?: InputMaybe; /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */ - queryId?: InputMaybe; + queryId?: InputMaybe; /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */ - queryName?: InputMaybe; + queryName?: InputMaybe; /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */ - schemaHash?: InputMaybe; + schemaHash?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; }; /** Filter for data in ServiceErrorStats. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type ServiceErrorStatsFilterIn = { /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientName?: InputMaybe>>; + clientName?: InputMaybe>>; /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientVersion?: InputMaybe>>; + clientVersion?: InputMaybe>>; /** Selects rows whose path dimension is in the given list. A null value in the list means a row with null for that dimension. */ - path?: InputMaybe>>; + path?: InputMaybe>>; /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryId?: InputMaybe>>; + queryId?: InputMaybe>>; /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryName?: InputMaybe>>; + queryName?: InputMaybe>>; /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaHash?: InputMaybe>>; + schemaHash?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; }; export type ServiceErrorStatsMetrics = { __typename?: 'ServiceErrorStatsMetrics'; - errorsCount: Scalars['Long']; - requestsWithErrorsCount: Scalars['Long']; + errorsCount: Scalars['Long']['output']; + requestsWithErrorsCount: Scalars['Long']['output']; }; export type ServiceErrorStatsOrderBySpec = { @@ -12158,7 +14355,115 @@ export type ServiceErrorStatsRecord = { /** Metrics of ServiceErrorStats that can be aggregated over. */ metrics: ServiceErrorStatsMetrics; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; +}; + +/** Columns of ServiceFederatedErrorStats. */ +export enum ServiceFederatedErrorStatsColumn { + AGENT_VERSION = 'AGENT_VERSION', + CLIENT_NAME = 'CLIENT_NAME', + CLIENT_VERSION = 'CLIENT_VERSION', + ERROR_CODE = 'ERROR_CODE', + ERROR_COUNT = 'ERROR_COUNT', + ERROR_PATH = 'ERROR_PATH', + ERROR_SERVICE = 'ERROR_SERVICE', + OPERATION_ID = 'OPERATION_ID', + OPERATION_NAME = 'OPERATION_NAME', + OPERATION_TYPE = 'OPERATION_TYPE', + SCHEMA_TAG = 'SCHEMA_TAG', + SEVERITY = 'SEVERITY', + TIMESTAMP = 'TIMESTAMP' +} + +export type ServiceFederatedErrorStatsDimensions = { + __typename?: 'ServiceFederatedErrorStatsDimensions'; + agentVersion?: Maybe; + clientName?: Maybe; + clientVersion?: Maybe; + errorCode?: Maybe; + errorPath?: Maybe; + errorService?: Maybe; + operationId?: Maybe; + operationName?: Maybe; + operationType?: Maybe; + schemaTag?: Maybe; + severity?: Maybe; +}; + +/** Filter for data in ServiceFederatedErrorStats. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ +export type ServiceFederatedErrorStatsFilter = { + /** Selects rows whose agentVersion dimension equals the given value if not null. To query for the null value, use {in: {agentVersion: [null]}} instead. */ + agentVersion?: InputMaybe; + and?: InputMaybe>; + /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */ + clientName?: InputMaybe; + /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */ + clientVersion?: InputMaybe; + /** Selects rows whose errorCode dimension equals the given value if not null. To query for the null value, use {in: {errorCode: [null]}} instead. */ + errorCode?: InputMaybe; + /** Selects rows whose errorPath dimension equals the given value if not null. To query for the null value, use {in: {errorPath: [null]}} instead. */ + errorPath?: InputMaybe; + /** Selects rows whose errorService dimension equals the given value if not null. To query for the null value, use {in: {errorService: [null]}} instead. */ + errorService?: InputMaybe; + in?: InputMaybe; + not?: InputMaybe; + /** Selects rows whose operationId dimension equals the given value if not null. To query for the null value, use {in: {operationId: [null]}} instead. */ + operationId?: InputMaybe; + /** Selects rows whose operationName dimension equals the given value if not null. To query for the null value, use {in: {operationName: [null]}} instead. */ + operationName?: InputMaybe; + /** Selects rows whose operationType dimension equals the given value if not null. To query for the null value, use {in: {operationType: [null]}} instead. */ + operationType?: InputMaybe; + or?: InputMaybe>; + /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ + schemaTag?: InputMaybe; + /** Selects rows whose severity dimension equals the given value if not null. To query for the null value, use {in: {severity: [null]}} instead. */ + severity?: InputMaybe; +}; + +/** Filter for data in ServiceFederatedErrorStats. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ +export type ServiceFederatedErrorStatsFilterIn = { + /** Selects rows whose agentVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ + agentVersion?: InputMaybe>>; + /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */ + clientName?: InputMaybe>>; + /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ + clientVersion?: InputMaybe>>; + /** Selects rows whose errorCode dimension is in the given list. A null value in the list means a row with null for that dimension. */ + errorCode?: InputMaybe>>; + /** Selects rows whose errorPath dimension is in the given list. A null value in the list means a row with null for that dimension. */ + errorPath?: InputMaybe>>; + /** Selects rows whose errorService dimension is in the given list. A null value in the list means a row with null for that dimension. */ + errorService?: InputMaybe>>; + /** Selects rows whose operationId dimension is in the given list. A null value in the list means a row with null for that dimension. */ + operationId?: InputMaybe>>; + /** Selects rows whose operationName dimension is in the given list. A null value in the list means a row with null for that dimension. */ + operationName?: InputMaybe>>; + /** Selects rows whose operationType dimension is in the given list. A null value in the list means a row with null for that dimension. */ + operationType?: InputMaybe>>; + /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ + schemaTag?: InputMaybe>>; + /** Selects rows whose severity dimension is in the given list. A null value in the list means a row with null for that dimension. */ + severity?: InputMaybe>>; +}; + +export type ServiceFederatedErrorStatsMetrics = { + __typename?: 'ServiceFederatedErrorStatsMetrics'; + errorCount: Scalars['Long']['output']; +}; + +export type ServiceFederatedErrorStatsOrderBySpec = { + column: ServiceFederatedErrorStatsColumn; + direction: Ordering; +}; + +export type ServiceFederatedErrorStatsRecord = { + __typename?: 'ServiceFederatedErrorStatsRecord'; + /** Dimensions of ServiceFederatedErrorStats that can be grouped by. */ + groupBy: ServiceFederatedErrorStatsDimensions; + /** Metrics of ServiceFederatedErrorStats that can be aggregated over. */ + metrics: ServiceFederatedErrorStatsMetrics; + /** Starting segment timestamp. */ + timestamp: Scalars['Timestamp']['output']; }; /** Columns of ServiceFieldExecutions. */ @@ -12176,42 +14481,42 @@ export enum ServiceFieldExecutionsColumn { export type ServiceFieldExecutionsDimensions = { __typename?: 'ServiceFieldExecutionsDimensions'; - fieldName?: Maybe; - parentType?: Maybe; - schemaTag?: Maybe; + fieldName?: Maybe; + parentType?: Maybe; + schemaTag?: Maybe; }; /** Filter for data in ServiceFieldExecutions. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type ServiceFieldExecutionsFilter = { and?: InputMaybe>; /** Selects rows whose fieldName dimension equals the given value if not null. To query for the null value, use {in: {fieldName: [null]}} instead. */ - fieldName?: InputMaybe; + fieldName?: InputMaybe; in?: InputMaybe; not?: InputMaybe; or?: InputMaybe>; /** Selects rows whose parentType dimension equals the given value if not null. To query for the null value, use {in: {parentType: [null]}} instead. */ - parentType?: InputMaybe; + parentType?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; }; /** Filter for data in ServiceFieldExecutions. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type ServiceFieldExecutionsFilterIn = { /** Selects rows whose fieldName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - fieldName?: InputMaybe>>; + fieldName?: InputMaybe>>; /** Selects rows whose parentType dimension is in the given list. A null value in the list means a row with null for that dimension. */ - parentType?: InputMaybe>>; + parentType?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; }; export type ServiceFieldExecutionsMetrics = { __typename?: 'ServiceFieldExecutionsMetrics'; - errorsCount: Scalars['Long']; - estimatedExecutionCount: Scalars['Long']; - observedExecutionCount: Scalars['Long']; - referencingOperationCount: Scalars['Long']; - requestsWithErrorsCount: Scalars['Long']; + errorsCount: Scalars['Long']['output']; + estimatedExecutionCount: Scalars['Long']['output']; + observedExecutionCount: Scalars['Long']['output']; + referencingOperationCount: Scalars['Long']['output']; + requestsWithErrorsCount: Scalars['Long']['output']; }; export type ServiceFieldExecutionsOrderBySpec = { @@ -12226,7 +14531,7 @@ export type ServiceFieldExecutionsRecord = { /** Metrics of ServiceFieldExecutions that can be aggregated over. */ metrics: ServiceFieldExecutionsMetrics; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; }; /** Columns of ServiceFieldLatencies. */ @@ -12241,39 +14546,39 @@ export enum ServiceFieldLatenciesColumn { export type ServiceFieldLatenciesDimensions = { __typename?: 'ServiceFieldLatenciesDimensions'; - field?: Maybe; - fieldName?: Maybe; - parentType?: Maybe; - schemaHash?: Maybe; - schemaTag?: Maybe; + field?: Maybe; + fieldName?: Maybe; + parentType?: Maybe; + schemaHash?: Maybe; + schemaTag?: Maybe; }; /** Filter for data in ServiceFieldLatencies. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type ServiceFieldLatenciesFilter = { and?: InputMaybe>; /** Selects rows whose fieldName dimension equals the given value if not null. To query for the null value, use {in: {fieldName: [null]}} instead. */ - fieldName?: InputMaybe; + fieldName?: InputMaybe; in?: InputMaybe; not?: InputMaybe; or?: InputMaybe>; /** Selects rows whose parentType dimension equals the given value if not null. To query for the null value, use {in: {parentType: [null]}} instead. */ - parentType?: InputMaybe; + parentType?: InputMaybe; /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */ - schemaHash?: InputMaybe; + schemaHash?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; }; /** Filter for data in ServiceFieldLatencies. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type ServiceFieldLatenciesFilterIn = { /** Selects rows whose fieldName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - fieldName?: InputMaybe>>; + fieldName?: InputMaybe>>; /** Selects rows whose parentType dimension is in the given list. A null value in the list means a row with null for that dimension. */ - parentType?: InputMaybe>>; + parentType?: InputMaybe>>; /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaHash?: InputMaybe>>; + schemaHash?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; }; export type ServiceFieldLatenciesMetrics = { @@ -12293,7 +14598,7 @@ export type ServiceFieldLatenciesRecord = { /** Metrics of ServiceFieldLatencies that can be aggregated over. */ metrics: ServiceFieldLatenciesMetrics; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; }; /** Columns of ServiceFieldUsage. */ @@ -12316,75 +14621,75 @@ export enum ServiceFieldUsageColumn { export type ServiceFieldUsageDimensions = { __typename?: 'ServiceFieldUsageDimensions'; - clientName?: Maybe; - clientVersion?: Maybe; - fieldName?: Maybe; - operationSubtype?: Maybe; - operationType?: Maybe; - parentType?: Maybe; - queryId?: Maybe; - queryName?: Maybe; - schemaHash?: Maybe; - schemaTag?: Maybe; + clientName?: Maybe; + clientVersion?: Maybe; + fieldName?: Maybe; + operationSubtype?: Maybe; + operationType?: Maybe; + parentType?: Maybe; + queryId?: Maybe; + queryName?: Maybe; + schemaHash?: Maybe; + schemaTag?: Maybe; }; /** Filter for data in ServiceFieldUsage. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type ServiceFieldUsageFilter = { and?: InputMaybe>; /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */ - clientName?: InputMaybe; + clientName?: InputMaybe; /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */ - clientVersion?: InputMaybe; + clientVersion?: InputMaybe; /** Selects rows whose fieldName dimension equals the given value if not null. To query for the null value, use {in: {fieldName: [null]}} instead. */ - fieldName?: InputMaybe; + fieldName?: InputMaybe; in?: InputMaybe; not?: InputMaybe; /** Selects rows whose operationSubtype dimension equals the given value if not null. To query for the null value, use {in: {operationSubtype: [null]}} instead. */ - operationSubtype?: InputMaybe; + operationSubtype?: InputMaybe; /** Selects rows whose operationType dimension equals the given value if not null. To query for the null value, use {in: {operationType: [null]}} instead. */ - operationType?: InputMaybe; + operationType?: InputMaybe; or?: InputMaybe>; /** Selects rows whose parentType dimension equals the given value if not null. To query for the null value, use {in: {parentType: [null]}} instead. */ - parentType?: InputMaybe; + parentType?: InputMaybe; /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */ - queryId?: InputMaybe; + queryId?: InputMaybe; /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */ - queryName?: InputMaybe; + queryName?: InputMaybe; /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */ - schemaHash?: InputMaybe; + schemaHash?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; }; /** Filter for data in ServiceFieldUsage. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type ServiceFieldUsageFilterIn = { /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientName?: InputMaybe>>; + clientName?: InputMaybe>>; /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientVersion?: InputMaybe>>; + clientVersion?: InputMaybe>>; /** Selects rows whose fieldName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - fieldName?: InputMaybe>>; + fieldName?: InputMaybe>>; /** Selects rows whose operationSubtype dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationSubtype?: InputMaybe>>; + operationSubtype?: InputMaybe>>; /** Selects rows whose operationType dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationType?: InputMaybe>>; + operationType?: InputMaybe>>; /** Selects rows whose parentType dimension is in the given list. A null value in the list means a row with null for that dimension. */ - parentType?: InputMaybe>>; + parentType?: InputMaybe>>; /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryId?: InputMaybe>>; + queryId?: InputMaybe>>; /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryName?: InputMaybe>>; + queryName?: InputMaybe>>; /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaHash?: InputMaybe>>; + schemaHash?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; }; export type ServiceFieldUsageMetrics = { __typename?: 'ServiceFieldUsageMetrics'; - estimatedExecutionCount: Scalars['Long']; - executionCount: Scalars['Long']; - referencingOperationCount: Scalars['Long']; + estimatedExecutionCount: Scalars['Long']['output']; + executionCount: Scalars['Long']['output']; + referencingOperationCount: Scalars['Long']['output']; }; export type ServiceFieldUsageOrderBySpec = { @@ -12399,7 +14704,7 @@ export type ServiceFieldUsageRecord = { /** Metrics of ServiceFieldUsage that can be aggregated over. */ metrics: ServiceFieldUsageMetrics; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; }; /** Columns of ServiceGraphosCloudMetrics. */ @@ -12420,53 +14725,53 @@ export enum ServiceGraphosCloudMetricsColumn { export type ServiceGraphosCloudMetricsDimensions = { __typename?: 'ServiceGraphosCloudMetricsDimensions'; - agentVersion?: Maybe; - cloudProvider?: Maybe; - routerId?: Maybe; - schemaTag?: Maybe; - tier?: Maybe; + agentVersion?: Maybe; + cloudProvider?: Maybe; + routerId?: Maybe; + schemaTag?: Maybe; + tier?: Maybe; }; /** Filter for data in ServiceGraphosCloudMetrics. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type ServiceGraphosCloudMetricsFilter = { /** Selects rows whose agentVersion dimension equals the given value if not null. To query for the null value, use {in: {agentVersion: [null]}} instead. */ - agentVersion?: InputMaybe; + agentVersion?: InputMaybe; and?: InputMaybe>; /** Selects rows whose cloudProvider dimension equals the given value if not null. To query for the null value, use {in: {cloudProvider: [null]}} instead. */ - cloudProvider?: InputMaybe; + cloudProvider?: InputMaybe; in?: InputMaybe; not?: InputMaybe; or?: InputMaybe>; /** Selects rows whose routerId dimension equals the given value if not null. To query for the null value, use {in: {routerId: [null]}} instead. */ - routerId?: InputMaybe; + routerId?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; /** Selects rows whose tier dimension equals the given value if not null. To query for the null value, use {in: {tier: [null]}} instead. */ - tier?: InputMaybe; + tier?: InputMaybe; }; /** Filter for data in ServiceGraphosCloudMetrics. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type ServiceGraphosCloudMetricsFilterIn = { /** Selects rows whose agentVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - agentVersion?: InputMaybe>>; + agentVersion?: InputMaybe>>; /** Selects rows whose cloudProvider dimension is in the given list. A null value in the list means a row with null for that dimension. */ - cloudProvider?: InputMaybe>>; + cloudProvider?: InputMaybe>>; /** Selects rows whose routerId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - routerId?: InputMaybe>>; + routerId?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; /** Selects rows whose tier dimension is in the given list. A null value in the list means a row with null for that dimension. */ - tier?: InputMaybe>>; + tier?: InputMaybe>>; }; export type ServiceGraphosCloudMetricsMetrics = { __typename?: 'ServiceGraphosCloudMetricsMetrics'; - responseSize: Scalars['Long']; - responseSizeThrottled: Scalars['Long']; - routerOperations: Scalars['Long']; - routerOperationsThrottled: Scalars['Long']; - subgraphFetches: Scalars['Long']; - subgraphFetchesThrottled: Scalars['Long']; + responseSize: Scalars['Long']['output']; + responseSizeThrottled: Scalars['Long']['output']; + routerOperations: Scalars['Long']['output']; + routerOperationsThrottled: Scalars['Long']['output']; + subgraphFetches: Scalars['Long']['output']; + subgraphFetchesThrottled: Scalars['Long']['output']; }; export type ServiceGraphosCloudMetricsOrderBySpec = { @@ -12481,7 +14786,7 @@ export type ServiceGraphosCloudMetricsRecord = { /** Metrics of ServiceGraphosCloudMetrics that can be aggregated over. */ metrics: ServiceGraphosCloudMetricsMetrics; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ @@ -12508,41 +14813,48 @@ export type ServiceMutation = { /** Make changes to a check workflow. */ checkWorkflow?: Maybe; createCompositionStatusSubscription: SchemaPublishSubscription; + /** Create a new Persisted Query List. */ createPersistedQueryList: CreatePersistedQueryListResultOrError; /** Creates a proposal variant from a source variant and a name, description. See the documentation for proposal creation at https://www.apollographql.com/docs/graphos/delivery/schema-proposals/creation */ createProposal: CreateProposalResult; + /** Subscribes a webhook channel to Proposal lifecycle events on this graph. */ + createProposalLifecycleSubscription: CreateProposalLifecycleSubscriptionResult; /** Creates a proposal variant from a source variant and a name, description. Do not call this from any clients, this resolver is exclusively for inter-service proposal -> kotlin registry communication. */ createProposalVariant: ProposalVariantCreationResult; + createRuleEnforcement: RuleEnforcementResult; /** Create a new assessment for this graph. */ createSafAssessment: SafAssessment; createSchemaPublishSubscription: SchemaPublishSubscription; /** Update the default build pipeline track for this graph. */ defaultBuildPipelineTrack?: Maybe; /** Soft delete a graph. Data associated with the graph is not permanently deleted; Apollo support can undo. */ - delete?: Maybe; + delete?: Maybe; /** Delete the service's avatar. Requires Service.roles.canUpdateAvatar to be true. */ deleteAvatar?: Maybe; /** Delete an existing channel */ - deleteChannel: Scalars['Boolean']; + deleteChannel: Scalars['Boolean']['output']; + /** Deletes this service's current subscriptions specific by ID. */ + deleteProposalLifecycleSubscription: DeleteProposalLifecycleSubscriptionResult; /** Delete an existing query trigger */ - deleteQueryTrigger: Scalars['Boolean']; + deleteQueryTrigger: Scalars['Boolean']['output']; /** Deletes this service's current subscriptions specific to the ID, returns true if it existed */ - deleteRegistrySubscription: Scalars['Boolean']; + deleteRegistrySubscription: Scalars['Boolean']['output']; /** * Deletes this service's current registry subscription(s) specific to its graph variant, * returns a list of subscription IDs that were deleted. */ - deleteRegistrySubscriptions: Array; - deleteScheduledSummary: Scalars['Boolean']; + deleteRegistrySubscriptions: Array; + deleteRuleEnforcement: Scalars['Boolean']['output']; + deleteScheduledSummary: Scalars['Boolean']['output']; /** Delete a variant by name. */ deleteSchemaTag: DeleteSchemaTagResult; /** Given a UTC timestamp, delete all traces associated with this Service, on that corresponding day. If a timestamp to is provided, deletes all days inclusive. */ - deleteTraces?: Maybe; + deleteTraces?: Maybe; disableDatadogForwardingLegacyMetricNames?: Maybe; /** Hard delete a graph and all data associated with it. Its ID cannot be reused. */ - hardDelete?: Maybe; + hardDelete?: Maybe; /** @deprecated Use service.id */ - id: Scalars['ID']; + id: Scalars['ID']['output']; /** * Ignore an operation in future checks; * changes affecting it will be tracked, @@ -12561,7 +14873,7 @@ export type ServiceMutation = { /** Generates a new graph API key for this graph with the specified permission level. */ newKey: GraphApiKey; /** Mutation to set whether a proposals check task's results should be overridden or not */ - overrideProposalsCheckTask?: Maybe; + overrideProposalsCheckTask?: Maybe; /** Adds an override to the given users permission for this graph */ overrideUserPermission?: Maybe; /** Provides access to mutation fields for modifying a Persisted Query List with the provided ID. */ @@ -12575,11 +14887,13 @@ export type ServiceMutation = { publishSubgraphs?: Maybe; /** Publishes multiple subgraphs, running the build async. */ publishSubgraphsAsyncBuild?: Maybe; + /** Test a subscription by queueing a test notification for the one subscribed event. */ + queueTestProposalLifecycleNotification: QueueTestProposalLifecycleNotificationResult; registerOperationsWithResponse?: Maybe; /** Removes a subgraph. If composition is successful, this will update running routers. */ removeImplementingServiceAndTriggerComposition: CompositionAndRemoveResult; /** Deletes the existing graph API key with the provided ID, if any. */ - removeKey?: Maybe; + removeKey?: Maybe; /** Sets a new name for the graph API key with the provided ID, if any. This does not invalidate the key or change its value. */ renameKey?: Maybe; /** @deprecated use Mutation.reportSchema instead */ @@ -12587,7 +14901,8 @@ export type ServiceMutation = { /** Mutations for a specific assessment. */ safAssessment?: Maybe; service: Service; - setDefaultBuildPipelineTrack?: Maybe; + setCustomCheckConfiguration: CustomCheckConfigurationResult; + setDefaultBuildPipelineTrack?: Maybe; setMinProposalApprovers: SetMinApproversResult; /** The minimum role for create & edit is graph admin */ setMinProposalRoles: SetProposalRolesResult; @@ -12598,15 +14913,17 @@ export type ServiceMutation = { setProposalImplementationVariant: SetProposalImplementationVariantResult; /** Sets the current active user's Proposals notification status on this graph. */ setProposalNotificationStatus: SetProposalNotificationStatusResult; + setProposalsMustBeReApprovedOnChange?: Maybe; /** * Store a given schema document. This schema will be attached to the graph but * not be associated with any variant. On success, returns the schema hash. */ storeSchemaDocument: StoreSchemaResponseOrError; /** Test Slack notification channel */ - testSlackChannel?: Maybe; - testSubscriptionForChannel: Scalars['String']; + testSlackChannel?: Maybe; + testSubscriptionForChannel: Scalars['String']['output']; transfer?: Maybe; + /** Undelete a soft deleted graph. */ undelete?: Maybe; /** * Revert the effects of ignoreOperation. @@ -12626,7 +14943,10 @@ export type ServiceMutation = { updateIgnoredRuleViolations: Array; /** Update the linter configuration for this graph. */ updateLinterConfiguration: GraphLinterConfiguration; + /** Updates the specified proposal lifecycle subscription's subscribed events. */ + updateProposalLifecycleSubscription: UpdateProposalLifecycleSubscriptionResult; updateReadme?: Maybe; + updateRuleEnforcement: RuleEnforcementResult; updateTitle?: Maybe; /** Publish a schema to this variant, either via a document or an introspection query result. */ uploadSchema?: Maybe; @@ -12660,420 +14980,476 @@ export type ServiceMutation = { /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationcheckPartialSchemaArgs = { - frontend?: InputMaybe; +export type ServiceMutationCheckPartialSchemaArgs = { + frontend?: InputMaybe; gitContext?: InputMaybe; - graphVariant: Scalars['String']; + graphVariant: Scalars['String']['input']; historicParameters?: InputMaybe; - implementingServiceName: Scalars['String']; - introspectionEndpoint?: InputMaybe; - isProposalCheck?: Scalars['Boolean']; - isSandboxCheck?: Scalars['Boolean']; + implementingServiceName: Scalars['String']['input']; + introspectionEndpoint?: InputMaybe; + isProposalCheck?: Scalars['Boolean']['input']; + isSandboxCheck?: Scalars['Boolean']['input']; partialSchema: PartialSchemaInput; triggeredBy?: InputMaybe; - useMaximumRetention?: InputMaybe; + useMaximumRetention?: InputMaybe; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationcheckSchemaArgs = { - baseSchemaTag?: InputMaybe; - frontend?: InputMaybe; +export type ServiceMutationCheckSchemaArgs = { + baseSchemaTag?: InputMaybe; + frontend?: InputMaybe; gitContext?: InputMaybe; historicParameters?: InputMaybe; - introspectionEndpoint?: InputMaybe; - isProposalCheck?: Scalars['Boolean']; - isSandboxCheck?: Scalars['Boolean']; + introspectionEndpoint?: InputMaybe; + isProposalCheck?: Scalars['Boolean']['input']; + isSandboxCheck?: Scalars['Boolean']['input']; proposedSchema?: InputMaybe; - proposedSchemaDocument?: InputMaybe; - proposedSchemaHash?: InputMaybe; - useMaximumRetention?: InputMaybe; + proposedSchemaDocument?: InputMaybe; + proposedSchemaHash?: InputMaybe; + useMaximumRetention?: InputMaybe; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationcheckWorkflowArgs = { - id: Scalars['ID']; +export type ServiceMutationCheckWorkflowArgs = { + id: Scalars['ID']['input']; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationcreateCompositionStatusSubscriptionArgs = { - channelID: Scalars['ID']; - variant: Scalars['String']; +export type ServiceMutationCreateCompositionStatusSubscriptionArgs = { + channelID: Scalars['ID']['input']; + variant: Scalars['String']['input']; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationcreatePersistedQueryListArgs = { - description?: InputMaybe; - linkedVariants?: InputMaybe>; - name: Scalars['String']; +export type ServiceMutationCreatePersistedQueryListArgs = { + description?: InputMaybe; + name: Scalars['String']['input']; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationcreateProposalArgs = { +export type ServiceMutationCreateProposalArgs = { input: CreateProposalInput; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationcreateProposalVariantArgs = { - sourceVariantName: Scalars['ID']; +export type ServiceMutationCreateProposalLifecycleSubscriptionArgs = { + input: CreateProposalLifecycleSubscriptionInput; +}; + + +/** Provides access to mutation fields for managing Studio graphs and subgraphs. */ +export type ServiceMutationCreateProposalVariantArgs = { + sourceVariantName: Scalars['ID']['input']; triggeredBy?: InputMaybe; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationcreateSchemaPublishSubscriptionArgs = { - channelID: Scalars['ID']; - variant: Scalars['String']; +export type ServiceMutationCreateRuleEnforcementArgs = { + input: CreateRuleEnforcementInput; +}; + + +/** Provides access to mutation fields for managing Studio graphs and subgraphs. */ +export type ServiceMutationCreateSchemaPublishSubscriptionArgs = { + channelID: Scalars['ID']['input']; + variant: Scalars['String']['input']; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationdefaultBuildPipelineTrackArgs = { +export type ServiceMutationDefaultBuildPipelineTrackArgs = { buildPipelineTrack: BuildPipelineTrack; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationdeleteChannelArgs = { - id: Scalars['ID']; +export type ServiceMutationDeleteChannelArgs = { + id: Scalars['ID']['input']; +}; + + +/** Provides access to mutation fields for managing Studio graphs and subgraphs. */ +export type ServiceMutationDeleteProposalLifecycleSubscriptionArgs = { + input: DeleteProposalLifecycleSubscriptionInput; +}; + + +/** Provides access to mutation fields for managing Studio graphs and subgraphs. */ +export type ServiceMutationDeleteQueryTriggerArgs = { + id: Scalars['ID']['input']; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationdeleteQueryTriggerArgs = { - id: Scalars['ID']; +export type ServiceMutationDeleteRegistrySubscriptionArgs = { + id: Scalars['ID']['input']; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationdeleteRegistrySubscriptionArgs = { - id: Scalars['ID']; +export type ServiceMutationDeleteRegistrySubscriptionsArgs = { + variant: Scalars['String']['input']; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationdeleteRegistrySubscriptionsArgs = { - variant: Scalars['String']; +export type ServiceMutationDeleteRuleEnforcementArgs = { + id: Scalars['ID']['input']; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationdeleteScheduledSummaryArgs = { - id: Scalars['ID']; +export type ServiceMutationDeleteScheduledSummaryArgs = { + id: Scalars['ID']['input']; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationdeleteSchemaTagArgs = { - tag: Scalars['String']; +export type ServiceMutationDeleteSchemaTagArgs = { + tag: Scalars['String']['input']; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationdeleteTracesArgs = { - from: Scalars['Timestamp']; - to?: InputMaybe; +export type ServiceMutationDeleteTracesArgs = { + from: Scalars['Timestamp']['input']; + to?: InputMaybe; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationignoreOperationsInChecksArgs = { - ids: Array; +export type ServiceMutationIgnoreOperationsInChecksArgs = { + ids: Array; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationlintSchemaArgs = { - baseSdl?: InputMaybe; - sdl: Scalars['String']; +export type ServiceMutationLintSchemaArgs = { + baseSdl?: InputMaybe; + sdl: Scalars['String']['input']; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationmarkChangesForOperationAsSafeArgs = { - checkID: Scalars['ID']; - operationID: Scalars['ID']; +export type ServiceMutationMarkChangesForOperationAsSafeArgs = { + checkID: Scalars['ID']['input']; + operationID: Scalars['ID']['input']; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationnewKeyArgs = { - keyName?: InputMaybe; +export type ServiceMutationNewKeyArgs = { + keyName?: InputMaybe; role?: UserPermission; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationoverrideProposalsCheckTaskArgs = { - shouldOverride: Scalars['Boolean']; - taskId: Scalars['ID']; +export type ServiceMutationOverrideProposalsCheckTaskArgs = { + shouldOverride: Scalars['Boolean']['input']; + taskId: Scalars['ID']['input']; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationoverrideUserPermissionArgs = { +export type ServiceMutationOverrideUserPermissionArgs = { permission?: InputMaybe; - userID: Scalars['ID']; + userID: Scalars['ID']['input']; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationpersistedQueryListArgs = { - id: Scalars['ID']; +export type ServiceMutationPersistedQueryListArgs = { + id: Scalars['ID']['input']; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationpromoteSchemaArgs = { - graphVariant: Scalars['String']; +export type ServiceMutationPromoteSchemaArgs = { + graphVariant: Scalars['String']['input']; historicParameters?: InputMaybe; - overrideComposedSchema?: Scalars['Boolean']; - sha256: Scalars['SHA256']; + overrideComposedSchema?: Scalars['Boolean']['input']; + sha256: Scalars['SHA256']['input']; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationproposalsMustBeApprovedByADefaultReviewerArgs = { - mustBeApproved: Scalars['Boolean']; +export type ServiceMutationProposalsMustBeApprovedByADefaultReviewerArgs = { + mustBeApproved: Scalars['Boolean']['input']; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationpublishSubgraphArgs = { +export type ServiceMutationPublishSubgraphArgs = { activePartialSchema: PartialSchemaInput; downstreamLaunchInitiation?: InputMaybe; gitContext?: InputMaybe; - graphVariant: Scalars['String']; - name: Scalars['String']; - revision: Scalars['String']; - url?: InputMaybe; + graphVariant: Scalars['String']['input']; + name: Scalars['String']['input']; + revision: Scalars['String']['input']; + url?: InputMaybe; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationpublishSubgraphsArgs = { +export type ServiceMutationPublishSubgraphsArgs = { downstreamLaunchInitiation?: InputMaybe; gitContext?: InputMaybe; - graphVariant: Scalars['String']; - revision: Scalars['String']; + graphVariant: Scalars['String']['input']; + revision: Scalars['String']['input']; subgraphInputs: Array; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationpublishSubgraphsAsyncBuildArgs = { +export type ServiceMutationPublishSubgraphsAsyncBuildArgs = { gitContext?: InputMaybe; - graphVariant: Scalars['String']; - revision: Scalars['String']; + graphVariant: Scalars['String']['input']; + revision: Scalars['String']['input']; subgraphInputs: Array; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationregisterOperationsWithResponseArgs = { +export type ServiceMutationQueueTestProposalLifecycleNotificationArgs = { + input: QueueTestProposalLifecycleNotificationInput; +}; + + +/** Provides access to mutation fields for managing Studio graphs and subgraphs. */ +export type ServiceMutationRegisterOperationsWithResponseArgs = { clientIdentity?: InputMaybe; gitContext?: InputMaybe; - graphVariant?: Scalars['String']; - manifestVersion?: InputMaybe; + graphVariant?: Scalars['String']['input']; + manifestVersion?: InputMaybe; operations: Array; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationremoveImplementingServiceAndTriggerCompositionArgs = { - dryRun?: Scalars['Boolean']; - graphVariant: Scalars['String']; - name: Scalars['String']; +export type ServiceMutationRemoveImplementingServiceAndTriggerCompositionArgs = { + dryRun?: Scalars['Boolean']['input']; + graphVariant: Scalars['String']['input']; + name: Scalars['String']['input']; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationremoveKeyArgs = { - id: Scalars['ID']; +export type ServiceMutationRemoveKeyArgs = { + id: Scalars['ID']['input']; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationrenameKeyArgs = { - id: Scalars['ID']; - newKeyName?: InputMaybe; +export type ServiceMutationRenameKeyArgs = { + id: Scalars['ID']['input']; + newKeyName?: InputMaybe; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationreportServerInfoArgs = { - executableSchema?: InputMaybe; +export type ServiceMutationReportServerInfoArgs = { + executableSchema?: InputMaybe; info: EdgeServerInfo; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationsafAssessmentArgs = { - id: Scalars['ID']; - includeDeleted?: Scalars['Boolean']; +export type ServiceMutationSafAssessmentArgs = { + id: Scalars['ID']['input']; + includeDeleted?: Scalars['Boolean']['input']; +}; + + +/** Provides access to mutation fields for managing Studio graphs and subgraphs. */ +export type ServiceMutationSetCustomCheckConfigurationArgs = { + input: SetCustomCheckConfigurationInput; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationsetDefaultBuildPipelineTrackArgs = { - version: Scalars['String']; +export type ServiceMutationSetDefaultBuildPipelineTrackArgs = { + version: Scalars['String']['input']; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationsetMinProposalApproversArgs = { +export type ServiceMutationSetMinProposalApproversArgs = { input: SetMinProposalApproversInput; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationsetMinProposalRolesArgs = { +export type ServiceMutationSetMinProposalRolesArgs = { input: SetProposalRolesInput; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationsetProposalDefaultReviewersArgs = { +export type ServiceMutationSetProposalDefaultReviewersArgs = { input: SetProposalDefaultReviewersInput; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationsetProposalDescriptionTemplateArgs = { +export type ServiceMutationSetProposalDescriptionTemplateArgs = { input: SetProposalDescriptionTemplateInput; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationsetProposalImplementationVariantArgs = { - variantName?: InputMaybe; +export type ServiceMutationSetProposalImplementationVariantArgs = { + variantName?: InputMaybe; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationsetProposalNotificationStatusArgs = { +export type ServiceMutationSetProposalNotificationStatusArgs = { input: SetProposalNotificationStatusInput; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationstoreSchemaDocumentArgs = { - schemaDocument: Scalars['String']; +export type ServiceMutationSetProposalsMustBeReApprovedOnChangeArgs = { + approvalRequiredOnChange: Scalars['Boolean']['input']; +}; + + +/** Provides access to mutation fields for managing Studio graphs and subgraphs. */ +export type ServiceMutationStoreSchemaDocumentArgs = { + schemaDocument: Scalars['String']['input']; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationtestSlackChannelArgs = { - id: Scalars['ID']; +export type ServiceMutationTestSlackChannelArgs = { + id: Scalars['ID']['input']; notification: SlackNotificationInput; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationtestSubscriptionForChannelArgs = { - channelID: Scalars['ID']; - subscriptionID: Scalars['ID']; +export type ServiceMutationTestSubscriptionForChannelArgs = { + channelID: Scalars['ID']['input']; + subscriptionID: Scalars['ID']['input']; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationtransferArgs = { - to: Scalars['String']; +export type ServiceMutationTransferArgs = { + to: Scalars['String']['input']; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationunignoreOperationsInChecksArgs = { - ids: Array; +export type ServiceMutationUnignoreOperationsInChecksArgs = { + ids: Array; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationunmarkChangesForOperationAsSafeArgs = { - checkID: Scalars['ID']; - operationID: Scalars['ID']; +export type ServiceMutationUnmarkChangesForOperationAsSafeArgs = { + checkID: Scalars['ID']['input']; + operationID: Scalars['ID']['input']; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationupdateCheckConfigurationArgs = { - enableLintChecks?: InputMaybe; +export type ServiceMutationUpdateCheckConfigurationArgs = { + downgradeDefaultValueChange?: InputMaybe; + downgradeStaticChecks?: InputMaybe; + enableCustomChecks?: InputMaybe; + enableLintChecks?: InputMaybe; excludedClients?: InputMaybe>; excludedOperationNames?: InputMaybe>; excludedOperations?: InputMaybe>; - includeBaseVariant?: InputMaybe; - includedVariants?: InputMaybe>; - operationCountThreshold?: InputMaybe; - operationCountThresholdPercentage?: InputMaybe; - proposalChangeMismatchSeverity?: InputMaybe; - timeRangeSeconds?: InputMaybe; + includeBaseVariant?: InputMaybe; + includedVariants?: InputMaybe>; + operationCountThreshold?: InputMaybe; + operationCountThresholdPercentage?: InputMaybe; + timeRangeSeconds?: InputMaybe; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationupdateDatadogMetricsConfigArgs = { - apiKey?: InputMaybe; +export type ServiceMutationUpdateDatadogMetricsConfigArgs = { + apiKey?: InputMaybe; apiRegion?: InputMaybe; - enabled?: InputMaybe; + enabled?: InputMaybe; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationupdateDescriptionArgs = { - description: Scalars['String']; +export type ServiceMutationUpdateDescriptionArgs = { + description: Scalars['String']['input']; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationupdateHiddenFromUninvitedNonAdminAccountMembersArgs = { - hiddenFromUninvitedNonAdminAccountMembers: Scalars['Boolean']; +export type ServiceMutationUpdateHiddenFromUninvitedNonAdminAccountMembersArgs = { + hiddenFromUninvitedNonAdminAccountMembers: Scalars['Boolean']['input']; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationupdateIgnoredRuleViolationsArgs = { +export type ServiceMutationUpdateIgnoredRuleViolationsArgs = { changes: LinterIgnoredRuleChangesInput; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationupdateLinterConfigurationArgs = { +export type ServiceMutationUpdateLinterConfigurationArgs = { changes: GraphLinterConfigurationChangesInput; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationupdateReadmeArgs = { - readme: Scalars['String']; +export type ServiceMutationUpdateProposalLifecycleSubscriptionArgs = { + input: UpdateProposalLifecycleSubscriptionInput; +}; + + +/** Provides access to mutation fields for managing Studio graphs and subgraphs. */ +export type ServiceMutationUpdateReadmeArgs = { + readme: Scalars['String']['input']; +}; + + +/** Provides access to mutation fields for managing Studio graphs and subgraphs. */ +export type ServiceMutationUpdateRuleEnforcementArgs = { + id: Scalars['ID']['input']; + input: UpdateRuleEnforcementInput; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationupdateTitleArgs = { - title: Scalars['String']; +export type ServiceMutationUpdateTitleArgs = { + title: Scalars['String']['input']; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationuploadSchemaArgs = { - errorOnBadRequest?: Scalars['Boolean']; +export type ServiceMutationUploadSchemaArgs = { + errorOnBadRequest?: Scalars['Boolean']['input']; gitContext?: InputMaybe; historicParameters?: InputMaybe; - overrideComposedSchema?: Scalars['Boolean']; + overrideComposedSchema?: Scalars['Boolean']['input']; schema?: InputMaybe; - schemaDocument?: InputMaybe; - tag: Scalars['String']; + schemaDocument?: InputMaybe; + tag: Scalars['String']['input']; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationupsertChannelArgs = { - id?: InputMaybe; +export type ServiceMutationUpsertChannelArgs = { + id?: InputMaybe; pagerDutyChannel?: InputMaybe; slackChannel?: InputMaybe; webhookChannel?: InputMaybe; @@ -13081,94 +15457,94 @@ export type ServiceMutationupsertChannelArgs = { /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationupsertContractVariantArgs = { - contractVariantName: Scalars['String']; +export type ServiceMutationUpsertContractVariantArgs = { + contractVariantName: Scalars['String']['input']; filterConfig: FilterConfigInput; - initiateLaunch?: Scalars['Boolean']; - sourceVariant?: InputMaybe; + initiateLaunch?: Scalars['Boolean']['input']; + sourceVariant?: InputMaybe; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationupsertImplementingServiceAndTriggerCompositionArgs = { +export type ServiceMutationUpsertImplementingServiceAndTriggerCompositionArgs = { activePartialSchema: PartialSchemaInput; gitContext?: InputMaybe; - graphVariant: Scalars['String']; - name: Scalars['String']; - revision: Scalars['String']; - url?: InputMaybe; + graphVariant: Scalars['String']['input']; + name: Scalars['String']['input']; + revision: Scalars['String']['input']; + url?: InputMaybe; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationupsertPagerDutyChannelArgs = { +export type ServiceMutationUpsertPagerDutyChannelArgs = { channel: PagerDutyChannelInput; - id?: InputMaybe; + id?: InputMaybe; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationupsertQueryTriggerArgs = { - id?: InputMaybe; +export type ServiceMutationUpsertQueryTriggerArgs = { + id?: InputMaybe; trigger: QueryTriggerInput; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationupsertRegistrySubscriptionArgs = { - channelID?: InputMaybe; - id?: InputMaybe; +export type ServiceMutationUpsertRegistrySubscriptionArgs = { + channelID?: InputMaybe; + id?: InputMaybe; options?: InputMaybe; - variant?: InputMaybe; + variant?: InputMaybe; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationupsertScheduledSummaryArgs = { - channelID?: InputMaybe; - enabled?: InputMaybe; - id?: InputMaybe; - tag?: InputMaybe; - timezone?: InputMaybe; - variant?: InputMaybe; +export type ServiceMutationUpsertScheduledSummaryArgs = { + channelID?: InputMaybe; + enabled?: InputMaybe; + id?: InputMaybe; + tag?: InputMaybe; + timezone?: InputMaybe; + variant?: InputMaybe; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationupsertSlackChannelArgs = { +export type ServiceMutationUpsertSlackChannelArgs = { channel: SlackChannelInput; - id?: InputMaybe; + id?: InputMaybe; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationupsertWebhookChannelArgs = { - id?: InputMaybe; - name?: InputMaybe; - secretToken?: InputMaybe; - url: Scalars['String']; +export type ServiceMutationUpsertWebhookChannelArgs = { + id?: InputMaybe; + name?: InputMaybe; + secretToken?: InputMaybe; + url: Scalars['String']['input']; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationvalidateOperationsArgs = { +export type ServiceMutationValidateOperationsArgs = { gitContext?: InputMaybe; operations: Array; - tag?: InputMaybe; + tag?: InputMaybe; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationvalidatePartialSchemaOfImplementingServiceAgainstGraphArgs = { - graphVariant: Scalars['String']; - implementingServiceName: Scalars['String']; +export type ServiceMutationValidatePartialSchemaOfImplementingServiceAgainstGraphArgs = { + graphVariant: Scalars['String']['input']; + implementingServiceName: Scalars['String']['input']; partialSchema: PartialSchemaInput; }; /** Provides access to mutation fields for managing Studio graphs and subgraphs. */ -export type ServiceMutationvariantArgs = { - name: Scalars['String']; +export type ServiceMutationVariantArgs = { + name: Scalars['String']['input']; }; /** Columns of ServiceOperationCheckStats. */ @@ -13187,59 +15563,59 @@ export enum ServiceOperationCheckStatsColumn { export type ServiceOperationCheckStatsDimensions = { __typename?: 'ServiceOperationCheckStatsDimensions'; - clientName?: Maybe; - clientVersion?: Maybe; - operationSubtype?: Maybe; - operationType?: Maybe; - queryId?: Maybe; - queryName?: Maybe; - schemaTag?: Maybe; + clientName?: Maybe; + clientVersion?: Maybe; + operationSubtype?: Maybe; + operationType?: Maybe; + queryId?: Maybe; + queryName?: Maybe; + schemaTag?: Maybe; }; /** Filter for data in ServiceOperationCheckStats. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type ServiceOperationCheckStatsFilter = { and?: InputMaybe>; /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */ - clientName?: InputMaybe; + clientName?: InputMaybe; /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */ - clientVersion?: InputMaybe; + clientVersion?: InputMaybe; in?: InputMaybe; not?: InputMaybe; /** Selects rows whose operationSubtype dimension equals the given value if not null. To query for the null value, use {in: {operationSubtype: [null]}} instead. */ - operationSubtype?: InputMaybe; + operationSubtype?: InputMaybe; /** Selects rows whose operationType dimension equals the given value if not null. To query for the null value, use {in: {operationType: [null]}} instead. */ - operationType?: InputMaybe; + operationType?: InputMaybe; or?: InputMaybe>; /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */ - queryId?: InputMaybe; + queryId?: InputMaybe; /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */ - queryName?: InputMaybe; + queryName?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; }; /** Filter for data in ServiceOperationCheckStats. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type ServiceOperationCheckStatsFilterIn = { /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientName?: InputMaybe>>; + clientName?: InputMaybe>>; /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientVersion?: InputMaybe>>; + clientVersion?: InputMaybe>>; /** Selects rows whose operationSubtype dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationSubtype?: InputMaybe>>; + operationSubtype?: InputMaybe>>; /** Selects rows whose operationType dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationType?: InputMaybe>>; + operationType?: InputMaybe>>; /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryId?: InputMaybe>>; + queryId?: InputMaybe>>; /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryName?: InputMaybe>>; + queryName?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; }; export type ServiceOperationCheckStatsMetrics = { __typename?: 'ServiceOperationCheckStatsMetrics'; - cachedRequestsCount: Scalars['Long']; - uncachedRequestsCount: Scalars['Long']; + cachedRequestsCount: Scalars['Long']['output']; + uncachedRequestsCount: Scalars['Long']['output']; }; export type ServiceOperationCheckStatsOrderBySpec = { @@ -13254,7 +15630,7 @@ export type ServiceOperationCheckStatsRecord = { /** Metrics of ServiceOperationCheckStats that can be aggregated over. */ metrics: ServiceOperationCheckStatsMetrics; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; }; /** Columns of ServiceQueryStats. */ @@ -13268,6 +15644,7 @@ export enum ServiceQueryStatsColumn { FROM_ENGINEPROXY = 'FROM_ENGINEPROXY', OPERATION_SUBTYPE = 'OPERATION_SUBTYPE', OPERATION_TYPE = 'OPERATION_TYPE', + PERSISTED_QUERY_ID = 'PERSISTED_QUERY_ID', QUERY_ID = 'QUERY_ID', QUERY_NAME = 'QUERY_NAME', REGISTERED_OPERATION_COUNT = 'REGISTERED_OPERATION_COUNT', @@ -13281,79 +15658,84 @@ export enum ServiceQueryStatsColumn { export type ServiceQueryStatsDimensions = { __typename?: 'ServiceQueryStatsDimensions'; - clientName?: Maybe; - clientVersion?: Maybe; - fromEngineproxy?: Maybe; - operationSubtype?: Maybe; - operationType?: Maybe; - queryId?: Maybe; - queryName?: Maybe; - querySignature?: Maybe; - querySignatureLength?: Maybe; - schemaHash?: Maybe; - schemaTag?: Maybe; + clientName?: Maybe; + clientVersion?: Maybe; + fromEngineproxy?: Maybe; + operationSubtype?: Maybe; + operationType?: Maybe; + persistedQueryId?: Maybe; + queryId?: Maybe; + queryName?: Maybe; + querySignature?: Maybe; + querySignatureLength?: Maybe; + schemaHash?: Maybe; + schemaTag?: Maybe; }; /** Filter for data in ServiceQueryStats. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type ServiceQueryStatsFilter = { and?: InputMaybe>; /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */ - clientName?: InputMaybe; + clientName?: InputMaybe; /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */ - clientVersion?: InputMaybe; + clientVersion?: InputMaybe; /** Selects rows whose fromEngineproxy dimension equals the given value if not null. To query for the null value, use {in: {fromEngineproxy: [null]}} instead. */ - fromEngineproxy?: InputMaybe; + fromEngineproxy?: InputMaybe; in?: InputMaybe; not?: InputMaybe; /** Selects rows whose operationSubtype dimension equals the given value if not null. To query for the null value, use {in: {operationSubtype: [null]}} instead. */ - operationSubtype?: InputMaybe; + operationSubtype?: InputMaybe; /** Selects rows whose operationType dimension equals the given value if not null. To query for the null value, use {in: {operationType: [null]}} instead. */ - operationType?: InputMaybe; + operationType?: InputMaybe; or?: InputMaybe>; + /** Selects rows whose persistedQueryId dimension equals the given value if not null. To query for the null value, use {in: {persistedQueryId: [null]}} instead. */ + persistedQueryId?: InputMaybe; /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */ - queryId?: InputMaybe; + queryId?: InputMaybe; /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */ - queryName?: InputMaybe; + queryName?: InputMaybe; /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */ - schemaHash?: InputMaybe; + schemaHash?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; }; /** Filter for data in ServiceQueryStats. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type ServiceQueryStatsFilterIn = { /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientName?: InputMaybe>>; + clientName?: InputMaybe>>; /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientVersion?: InputMaybe>>; + clientVersion?: InputMaybe>>; /** Selects rows whose fromEngineproxy dimension is in the given list. A null value in the list means a row with null for that dimension. */ - fromEngineproxy?: InputMaybe>>; + fromEngineproxy?: InputMaybe>>; /** Selects rows whose operationSubtype dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationSubtype?: InputMaybe>>; + operationSubtype?: InputMaybe>>; /** Selects rows whose operationType dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationType?: InputMaybe>>; + operationType?: InputMaybe>>; + /** Selects rows whose persistedQueryId dimension is in the given list. A null value in the list means a row with null for that dimension. */ + persistedQueryId?: InputMaybe>>; /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryId?: InputMaybe>>; + queryId?: InputMaybe>>; /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryName?: InputMaybe>>; + queryName?: InputMaybe>>; /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaHash?: InputMaybe>>; + schemaHash?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; }; export type ServiceQueryStatsMetrics = { __typename?: 'ServiceQueryStatsMetrics'; cacheTtlHistogram: DurationHistogram; cachedHistogram: DurationHistogram; - cachedRequestsCount: Scalars['Long']; - forbiddenOperationCount: Scalars['Long']; - registeredOperationCount: Scalars['Long']; - requestsWithErrorsCount: Scalars['Long']; + cachedRequestsCount: Scalars['Long']['output']; + forbiddenOperationCount: Scalars['Long']['output']; + registeredOperationCount: Scalars['Long']['output']; + requestsWithErrorsCount: Scalars['Long']['output']; totalLatencyHistogram: DurationHistogram; - totalRequestCount: Scalars['Long']; + totalRequestCount: Scalars['Long']['output']; uncachedHistogram: DurationHistogram; - uncachedRequestsCount: Scalars['Long']; + uncachedRequestsCount: Scalars['Long']['output']; }; export type ServiceQueryStatsOrderBySpec = { @@ -13368,66 +15750,66 @@ export type ServiceQueryStatsRecord = { /** Metrics of ServiceQueryStats that can be aggregated over. */ metrics: ServiceQueryStatsMetrics; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; }; /** Individual permissions for the current user when interacting with a particular Studio graph. */ export type ServiceRoles = { __typename?: 'ServiceRoles'; /** Whether the currently authenticated user is permitted to perform schema checks (i.e., run `rover (sub)graph check`). */ - canCheckSchemas: Scalars['Boolean']; - canCreateProposal: Scalars['Boolean']; + canCheckSchemas: Scalars['Boolean']['output']; + canCreateProposal: Scalars['Boolean']['output']; /** Whether the currently authenticated user is permitted to create new graph variants. */ - canCreateVariants: Scalars['Boolean']; + canCreateVariants: Scalars['Boolean']['output']; /** Whether the currently authenticated user is permitted to delete the graph in question */ - canDelete: Scalars['Boolean']; + canDelete: Scalars['Boolean']['output']; /** Whether the currently authenticated user is permitted to delete proposal variants. */ - canDeleteProposalVariants: Scalars['Boolean']; + canDeleteProposalVariants: Scalars['Boolean']['output']; /** Given the graph's setting regarding proposal permission levels, can the current user edit Proposals authored by other users */ - canEditProposal: Scalars['Boolean']; + canEditProposal: Scalars['Boolean']['output']; /** Whether the currently authenticated user is permitted to manage user access to the graph in question. */ - canManageAccess: Scalars['Boolean']; + canManageAccess: Scalars['Boolean']['output']; /** Whether the currently authenticated user is permitted to manage the build configuration (e.g., build pipeline version). */ - canManageBuildConfig: Scalars['Boolean']; + canManageBuildConfig: Scalars['Boolean']['output']; /** Whether the currently authenticated user is permitted to manage third-party integrations (e.g., Datadog forwarding). */ - canManageIntegrations: Scalars['Boolean']; + canManageIntegrations: Scalars['Boolean']['output']; /** Whether the currently authenticated user is permitted to manage graph-level API keys. */ - canManageKeys: Scalars['Boolean']; - canManagePersistedQueryLists: Scalars['Boolean']; + canManageKeys: Scalars['Boolean']['output']; + canManagePersistedQueryLists: Scalars['Boolean']['output']; /** Whether the currently authenticated user is permitted to manage proposal permission settings for this graph. */ - canManageProposalPermissions: Scalars['Boolean']; + canManageProposalPermissions: Scalars['Boolean']['output']; /** Whether the currently authenticated user is permitted to manage proposal settings, like setting the implementation variant, on this graph. */ - canManageProposalSettings: Scalars['Boolean']; + canManageProposalSettings: Scalars['Boolean']['output']; /** Whether the currently authenticated user is permitted to perform basic administration of variants (e.g., make a variant public). */ - canManageVariants: Scalars['Boolean']; + canManageVariants: Scalars['Boolean']['output']; /** Whether the currently authenticated user is permitted to view details about the build configuration (e.g. build pipeline version). */ - canQueryBuildConfig: Scalars['Boolean']; + canQueryBuildConfig: Scalars['Boolean']['output']; /** Whether the currently authenticated user is permitted to view details of the check configuration for this graph. */ - canQueryCheckConfiguration: Scalars['Boolean']; - canQueryDeletedImplementingServices: Scalars['Boolean']; + canQueryCheckConfiguration: Scalars['Boolean']['output']; + canQueryDeletedImplementingServices: Scalars['Boolean']['output']; /** Whether the currently authenticated user is permitted to view which subgraphs the graph is composed of. */ - canQueryImplementingServices: Scalars['Boolean']; - canQueryIntegrations: Scalars['Boolean']; - canQueryPersistedQueryLists: Scalars['Boolean']; - canQueryPrivateInfo: Scalars['Boolean']; - canQueryProposals: Scalars['Boolean']; - canQueryPublicInfo: Scalars['Boolean']; - canQueryReadmeAuthor: Scalars['Boolean']; - canQueryRoleOverrides: Scalars['Boolean']; + canQueryImplementingServices: Scalars['Boolean']['output']; + canQueryIntegrations: Scalars['Boolean']['output']; + canQueryPersistedQueryLists: Scalars['Boolean']['output']; + canQueryPrivateInfo: Scalars['Boolean']['output']; + canQueryProposals: Scalars['Boolean']['output']; + canQueryPublicInfo: Scalars['Boolean']['output']; + canQueryReadmeAuthor: Scalars['Boolean']['output']; + canQueryRoleOverrides: Scalars['Boolean']['output']; /** Whether the currently authenticated user is permitted to download schemas owned by this graph. */ - canQuerySchemas: Scalars['Boolean']; - canQueryStats: Scalars['Boolean']; - canQueryTokens: Scalars['Boolean']; - canQueryTraces: Scalars['Boolean']; + canQuerySchemas: Scalars['Boolean']['output']; + canQueryStats: Scalars['Boolean']['output']; + canQueryTokens: Scalars['Boolean']['output']; + canQueryTraces: Scalars['Boolean']['output']; /** Whether the currently authenticated user is permitted to register operations (i.e. `apollo client:push`) for this graph. */ - canRegisterOperations: Scalars['Boolean']; - canStoreSchemasWithoutVariant: Scalars['Boolean']; - canUndelete: Scalars['Boolean']; - canUpdateAvatar: Scalars['Boolean']; - canUpdateDescription: Scalars['Boolean']; - canUpdateTitle: Scalars['Boolean']; + canRegisterOperations: Scalars['Boolean']['output']; + canStoreSchemasWithoutVariant: Scalars['Boolean']['output']; + canUndelete: Scalars['Boolean']['output']; + canUpdateAvatar: Scalars['Boolean']['output']; + canUpdateDescription: Scalars['Boolean']['output']; + canUpdateTitle: Scalars['Boolean']['output']; /** Whether the currently authenticated user is permitted to make updates to the check configuration for this graph. */ - canWriteCheckConfiguration: Scalars['Boolean']; + canWriteCheckConfiguration: Scalars['Boolean']['output']; service: Service; }; @@ -13435,8 +15817,11 @@ export type ServiceRoles = { export type ServiceStatsWindow = { __typename?: 'ServiceStatsWindow'; billingUsageStats: Array; + cardinalityStats: Array; + coordinateUsage: Array; edgeServerInfos: Array; errorStats: Array; + federatedErrorStats: Array; fieldExecutions: Array; fieldLatencies: Array; fieldStats: Array; @@ -13445,106 +15830,130 @@ export type ServiceStatsWindow = { operationCheckStats: Array; queryStats: Array; /** From field rounded down to the nearest resolution. */ - roundedDownFrom: Scalars['Timestamp']; + roundedDownFrom: Scalars['Timestamp']['output']; /** To field rounded up to the nearest resolution. */ - roundedUpTo: Scalars['Timestamp']; + roundedUpTo: Scalars['Timestamp']['output']; tracePathErrorsRefs: Array; traceRefs: Array; }; /** A time window with a specified granularity over a given service. */ -export type ServiceStatsWindowbillingUsageStatsArgs = { +export type ServiceStatsWindowBillingUsageStatsArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity over a given service. */ -export type ServiceStatsWindowedgeServerInfosArgs = { +export type ServiceStatsWindowCardinalityStatsArgs = { + filter?: InputMaybe; + limit?: InputMaybe; + orderBy?: InputMaybe>; +}; + + +/** A time window with a specified granularity over a given service. */ +export type ServiceStatsWindowCoordinateUsageArgs = { + filter?: InputMaybe; + limit?: InputMaybe; + orderBy?: InputMaybe>; +}; + + +/** A time window with a specified granularity over a given service. */ +export type ServiceStatsWindowEdgeServerInfosArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity over a given service. */ -export type ServiceStatsWindowerrorStatsArgs = { +export type ServiceStatsWindowErrorStatsArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity over a given service. */ -export type ServiceStatsWindowfieldExecutionsArgs = { +export type ServiceStatsWindowFederatedErrorStatsArgs = { + filter?: InputMaybe; + limit?: InputMaybe; + orderBy?: InputMaybe>; +}; + + +/** A time window with a specified granularity over a given service. */ +export type ServiceStatsWindowFieldExecutionsArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity over a given service. */ -export type ServiceStatsWindowfieldLatenciesArgs = { +export type ServiceStatsWindowFieldLatenciesArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity over a given service. */ -export type ServiceStatsWindowfieldStatsArgs = { +export type ServiceStatsWindowFieldStatsArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity over a given service. */ -export type ServiceStatsWindowfieldUsageArgs = { +export type ServiceStatsWindowFieldUsageArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity over a given service. */ -export type ServiceStatsWindowgraphosCloudMetricsArgs = { +export type ServiceStatsWindowGraphosCloudMetricsArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity over a given service. */ -export type ServiceStatsWindowoperationCheckStatsArgs = { +export type ServiceStatsWindowOperationCheckStatsArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity over a given service. */ -export type ServiceStatsWindowqueryStatsArgs = { +export type ServiceStatsWindowQueryStatsArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity over a given service. */ -export type ServiceStatsWindowtracePathErrorsRefsArgs = { +export type ServiceStatsWindowTracePathErrorsRefsArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity over a given service. */ -export type ServiceStatsWindowtraceRefsArgs = { +export type ServiceStatsWindowTraceRefsArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; @@ -13555,7 +15964,9 @@ export enum ServiceTracePathErrorsRefsColumn { DURATION_BUCKET = 'DURATION_BUCKET', ERRORS_COUNT_IN_PATH = 'ERRORS_COUNT_IN_PATH', ERRORS_COUNT_IN_TRACE = 'ERRORS_COUNT_IN_TRACE', + ERROR_CODE = 'ERROR_CODE', ERROR_MESSAGE = 'ERROR_MESSAGE', + ERROR_SERVICE = 'ERROR_SERVICE', PATH = 'PATH', QUERY_ID = 'QUERY_ID', QUERY_NAME = 'QUERY_NAME', @@ -13570,81 +15981,91 @@ export enum ServiceTracePathErrorsRefsColumn { export type ServiceTracePathErrorsRefsDimensions = { __typename?: 'ServiceTracePathErrorsRefsDimensions'; - clientName?: Maybe; - clientVersion?: Maybe; - durationBucket?: Maybe; - errorMessage?: Maybe; - path?: Maybe; - queryId?: Maybe; - queryName?: Maybe; - schemaHash?: Maybe; - schemaTag?: Maybe; - traceHttpStatusCode?: Maybe; - traceId?: Maybe; - traceStartsAt?: Maybe; + clientName?: Maybe; + clientVersion?: Maybe; + durationBucket?: Maybe; + errorCode?: Maybe; + errorMessage?: Maybe; + errorService?: Maybe; + path?: Maybe; + queryId?: Maybe; + queryName?: Maybe; + schemaHash?: Maybe; + schemaTag?: Maybe; + traceHttpStatusCode?: Maybe; + traceId?: Maybe; + traceStartsAt?: Maybe; }; /** Filter for data in ServiceTracePathErrorsRefs. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type ServiceTracePathErrorsRefsFilter = { and?: InputMaybe>; /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */ - clientName?: InputMaybe; + clientName?: InputMaybe; /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */ - clientVersion?: InputMaybe; + clientVersion?: InputMaybe; /** Selects rows whose durationBucket dimension equals the given value if not null. To query for the null value, use {in: {durationBucket: [null]}} instead. */ - durationBucket?: InputMaybe; + durationBucket?: InputMaybe; + /** Selects rows whose errorCode dimension equals the given value if not null. To query for the null value, use {in: {errorCode: [null]}} instead. */ + errorCode?: InputMaybe; /** Selects rows whose errorMessage dimension equals the given value if not null. To query for the null value, use {in: {errorMessage: [null]}} instead. */ - errorMessage?: InputMaybe; + errorMessage?: InputMaybe; + /** Selects rows whose errorService dimension equals the given value if not null. To query for the null value, use {in: {errorService: [null]}} instead. */ + errorService?: InputMaybe; in?: InputMaybe; not?: InputMaybe; or?: InputMaybe>; /** Selects rows whose path dimension equals the given value if not null. To query for the null value, use {in: {path: [null]}} instead. */ - path?: InputMaybe; + path?: InputMaybe; /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */ - queryId?: InputMaybe; + queryId?: InputMaybe; /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */ - queryName?: InputMaybe; + queryName?: InputMaybe; /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */ - schemaHash?: InputMaybe; + schemaHash?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; /** Selects rows whose traceHttpStatusCode dimension equals the given value if not null. To query for the null value, use {in: {traceHttpStatusCode: [null]}} instead. */ - traceHttpStatusCode?: InputMaybe; + traceHttpStatusCode?: InputMaybe; /** Selects rows whose traceId dimension equals the given value if not null. To query for the null value, use {in: {traceId: [null]}} instead. */ - traceId?: InputMaybe; + traceId?: InputMaybe; }; /** Filter for data in ServiceTracePathErrorsRefs. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type ServiceTracePathErrorsRefsFilterIn = { /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientName?: InputMaybe>>; + clientName?: InputMaybe>>; /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientVersion?: InputMaybe>>; + clientVersion?: InputMaybe>>; /** Selects rows whose durationBucket dimension is in the given list. A null value in the list means a row with null for that dimension. */ - durationBucket?: InputMaybe>>; + durationBucket?: InputMaybe>>; + /** Selects rows whose errorCode dimension is in the given list. A null value in the list means a row with null for that dimension. */ + errorCode?: InputMaybe>>; /** Selects rows whose errorMessage dimension is in the given list. A null value in the list means a row with null for that dimension. */ - errorMessage?: InputMaybe>>; + errorMessage?: InputMaybe>>; + /** Selects rows whose errorService dimension is in the given list. A null value in the list means a row with null for that dimension. */ + errorService?: InputMaybe>>; /** Selects rows whose path dimension is in the given list. A null value in the list means a row with null for that dimension. */ - path?: InputMaybe>>; + path?: InputMaybe>>; /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryId?: InputMaybe>>; + queryId?: InputMaybe>>; /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryName?: InputMaybe>>; + queryName?: InputMaybe>>; /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaHash?: InputMaybe>>; + schemaHash?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; /** Selects rows whose traceHttpStatusCode dimension is in the given list. A null value in the list means a row with null for that dimension. */ - traceHttpStatusCode?: InputMaybe>>; + traceHttpStatusCode?: InputMaybe>>; /** Selects rows whose traceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - traceId?: InputMaybe>>; + traceId?: InputMaybe>>; }; export type ServiceTracePathErrorsRefsMetrics = { __typename?: 'ServiceTracePathErrorsRefsMetrics'; - errorsCountInPath: Scalars['Long']; - errorsCountInTrace: Scalars['Long']; - traceSizeBytes: Scalars['Long']; + errorsCountInPath: Scalars['Long']['output']; + errorsCountInTrace: Scalars['Long']['output']; + traceSizeBytes: Scalars['Long']['output']; }; export type ServiceTracePathErrorsRefsOrderBySpec = { @@ -13659,7 +16080,7 @@ export type ServiceTracePathErrorsRefsRecord = { /** Metrics of ServiceTracePathErrorsRefs that can be aggregated over. */ metrics: ServiceTracePathErrorsRefsMetrics; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; }; /** Columns of ServiceTraceRefs. */ @@ -13680,75 +16101,75 @@ export enum ServiceTraceRefsColumn { export type ServiceTraceRefsDimensions = { __typename?: 'ServiceTraceRefsDimensions'; - clientName?: Maybe; - clientVersion?: Maybe; - durationBucket?: Maybe; - generatedTraceId?: Maybe; - operationSubtype?: Maybe; - operationType?: Maybe; - queryId?: Maybe; - queryName?: Maybe; - querySignature?: Maybe; - schemaHash?: Maybe; - schemaTag?: Maybe; - traceId?: Maybe; + clientName?: Maybe; + clientVersion?: Maybe; + durationBucket?: Maybe; + generatedTraceId?: Maybe; + operationSubtype?: Maybe; + operationType?: Maybe; + queryId?: Maybe; + queryName?: Maybe; + querySignature?: Maybe; + schemaHash?: Maybe; + schemaTag?: Maybe; + traceId?: Maybe; }; /** Filter for data in ServiceTraceRefs. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type ServiceTraceRefsFilter = { and?: InputMaybe>; /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */ - clientName?: InputMaybe; + clientName?: InputMaybe; /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */ - clientVersion?: InputMaybe; + clientVersion?: InputMaybe; /** Selects rows whose durationBucket dimension equals the given value if not null. To query for the null value, use {in: {durationBucket: [null]}} instead. */ - durationBucket?: InputMaybe; + durationBucket?: InputMaybe; in?: InputMaybe; not?: InputMaybe; /** Selects rows whose operationSubtype dimension equals the given value if not null. To query for the null value, use {in: {operationSubtype: [null]}} instead. */ - operationSubtype?: InputMaybe; + operationSubtype?: InputMaybe; /** Selects rows whose operationType dimension equals the given value if not null. To query for the null value, use {in: {operationType: [null]}} instead. */ - operationType?: InputMaybe; + operationType?: InputMaybe; or?: InputMaybe>; /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */ - queryId?: InputMaybe; + queryId?: InputMaybe; /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */ - queryName?: InputMaybe; + queryName?: InputMaybe; /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */ - schemaHash?: InputMaybe; + schemaHash?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; /** Selects rows whose traceId dimension equals the given value if not null. To query for the null value, use {in: {traceId: [null]}} instead. */ - traceId?: InputMaybe; + traceId?: InputMaybe; }; /** Filter for data in ServiceTraceRefs. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type ServiceTraceRefsFilterIn = { /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientName?: InputMaybe>>; + clientName?: InputMaybe>>; /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientVersion?: InputMaybe>>; + clientVersion?: InputMaybe>>; /** Selects rows whose durationBucket dimension is in the given list. A null value in the list means a row with null for that dimension. */ - durationBucket?: InputMaybe>>; + durationBucket?: InputMaybe>>; /** Selects rows whose operationSubtype dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationSubtype?: InputMaybe>>; + operationSubtype?: InputMaybe>>; /** Selects rows whose operationType dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationType?: InputMaybe>>; + operationType?: InputMaybe>>; /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryId?: InputMaybe>>; + queryId?: InputMaybe>>; /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryName?: InputMaybe>>; + queryName?: InputMaybe>>; /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaHash?: InputMaybe>>; + schemaHash?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; /** Selects rows whose traceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - traceId?: InputMaybe>>; + traceId?: InputMaybe>>; }; export type ServiceTraceRefsMetrics = { __typename?: 'ServiceTraceRefsMetrics'; - traceCount: Scalars['Long']; + traceCount: Scalars['Long']['output']; }; export type ServiceTraceRefsOrderBySpec = { @@ -13763,26 +16184,39 @@ export type ServiceTraceRefsRecord = { /** Metrics of ServiceTraceRefs that can be aggregated over. */ metrics: ServiceTraceRefsMetrics; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; +}; + +export type SetCustomCheckConfigurationInput = { + secretToken?: InputMaybe; + url: Scalars['String']['input']; }; +/** Input to update a proposal description */ +export type SetMergeBaseCompositionIdInput = { + /** The composition id of the source variant this proposal is based on. */ + mergeBaseCompositionId: Scalars['ID']['input']; +}; + +export type SetMergeBaseCompositionIdResult = PermissionError | Proposal | ValidationError; + export type SetMinApproversResult = PermissionError | Service | ValidationError; export type SetMinProposalApproversInput = { - minApprovers?: InputMaybe; + minApprovers?: InputMaybe; }; /** Represents the possible outcomes of a setNextVersion mutation */ export type SetNextVersionResult = InternalServerError | InvalidInputErrors | RouterVersion; export type SetProposalDefaultReviewersInput = { - reviewerUserIds: Array; + reviewerUserIds: Array; }; export type SetProposalDefaultReviewersResult = PermissionError | Service | ValidationError; export type SetProposalDescriptionTemplateInput = { - descriptionTemplate?: InputMaybe; + descriptionTemplate?: InputMaybe; }; export type SetProposalDescriptionTemplateResult = PermissionError | Service | ValidationError; @@ -13803,11 +16237,13 @@ export type SetProposalRolesInput = { export type SetProposalRolesResult = PermissionError | Service | ValidationError; +export type SetProposalsMustBeReApprovedOnChangeResult = PermissionError | Service | ValidationError; + export type SetupIntentResult = NotFoundError | PermissionError | SetupIntentSuccess; export type SetupIntentSuccess = { __typename?: 'SetupIntentSuccess'; - clientSecret: Scalars['String']; + clientSecret: Scalars['String']['output']; }; /** @@ -13817,16 +16253,16 @@ export type SetupIntentSuccess = { */ export type Shard = { __typename?: 'Shard'; - gcuCapacity?: Maybe; - gcuUsage: Scalars['Int']; - id: Scalars['ID']; + gcuCapacity?: Maybe; + gcuUsage: Scalars['Int']['output']; + id: Scalars['ID']['output']; provider: CloudProvider; /** Details of this shard for a specific provider */ providerDetails: ShardProvider; - reason?: Maybe; + reason?: Maybe; region: RegionDescription; - routerCapacity?: Maybe; - routerUsage: Scalars['Int']; + routerCapacity?: Maybe; + routerUsage: Scalars['Int']['output']; routers: Array; status: ShardStatus; tier: CloudTier; @@ -13838,9 +16274,9 @@ export type Shard = { * * This represents a specific shard where a Cloud Router can run */ -export type ShardroutersArgs = { - first?: InputMaybe; - offset?: InputMaybe; +export type ShardRoutersArgs = { + first?: InputMaybe; + offset?: InputMaybe; }; /** Provider-specific information for a Shard */ @@ -13878,96 +16314,110 @@ export type ShardSuccess = { /** Slack notification channel */ export type SlackChannel = Channel & { __typename?: 'SlackChannel'; - id: Scalars['ID']; - name: Scalars['String']; + id: Scalars['ID']['output']; + name: Scalars['String']['output']; subscriptions: Array; - url: Scalars['String']; + url: Scalars['String']['output']; }; /** Slack notification channel parameters */ export type SlackChannelInput = { - name?: InputMaybe; - url: Scalars['String']; -}; - -export type SlackCommunicationChannel = CommunicationChannel & { - __typename?: 'SlackCommunicationChannel'; - id: Scalars['ID']; - name: Scalars['String']; - purpose?: Maybe; - topic?: Maybe; -}; - -export type SlackMessageMeta = { - __typename?: 'SlackMessageMeta'; - id: Scalars['ID']; + name?: InputMaybe; + url: Scalars['String']['input']; }; export type SlackNotificationField = { - key: Scalars['String']; - value: Scalars['String']; + key: Scalars['String']['input']; + value: Scalars['String']['input']; }; /** Slack notification message */ export type SlackNotificationInput = { - color?: InputMaybe; - fallback: Scalars['String']; + color?: InputMaybe; + fallback: Scalars['String']['input']; fields?: InputMaybe>; - iconUrl?: InputMaybe; - text?: InputMaybe; - timestamp?: InputMaybe; - title?: InputMaybe; - titleLink?: InputMaybe; - username?: InputMaybe; + iconUrl?: InputMaybe; + text?: InputMaybe; + timestamp?: InputMaybe; + title?: InputMaybe; + titleLink?: InputMaybe; + username?: InputMaybe; }; -export enum SlackPublishState { - errored = 'errored', - published = 'published', - recalled = 'recalled' -} - /** A location in a source code file. */ export type SourceLocation = { __typename?: 'SourceLocation'; /** Column number. */ - column: Scalars['Int']; + column: Scalars['Int']['output']; /** Line number. */ - line: Scalars['Int']; + line: Scalars['Int']['output']; }; export type SsoConfig = { __typename?: 'SsoConfig'; - connection?: Maybe; + /** Returns all SSO connections for the account, including those disabled or incomplete */ + allConnections: Array; + /** Returns the current enabled SSO connection for the account */ + currentConnection?: Maybe; defaultRole: UserPermission; }; export type SsoConnection = { - domains: Array; - id: Scalars['ID']; - idpId: Scalars['ID']; -}; + domains: Array; + id: Scalars['ID']['output']; + idpId: Scalars['ID']['output']; + scim?: Maybe; + /** @deprecated Use stateV2 instead */ + state: SsoConnectionState; + stateV2: SsoConnectionStateV2; +}; + +export enum SsoConnectionState { + DISABLED = 'DISABLED', + ENABLED = 'ENABLED' +} + +export enum SsoConnectionStateV2 { + /** The connection has been archived and is no longer in use */ + ARCHIVED = 'ARCHIVED', + /** The connection has been disabled by an admin */ + DISABLED = 'DISABLED', + /** The connection has been finalized. a connection can only go from VALIDATED->ENABLED */ + ENABLED = 'ENABLED', + /** The initial state for base connections - setup still in progress */ + INITIALIZED = 'INITIALIZED', + /** The connection has been configured as either SAML/OIDC and can be used to login */ + STAGED = 'STAGED', + /** The connection has had at least one successful login - connections automatically transition from STAGED->VALIDATED on first login */ + VALIDATED = 'VALIDATED' +} export type SsoMutation = { __typename?: 'SsoMutation'; - deleteSsoConnection?: Maybe; - disableSsoConnection?: Maybe; - enableSsoConnection?: Maybe; + deleteSsoConnection?: Maybe; + disableSsoConnection?: Maybe; + enableScimProvisioning?: Maybe; + enableSsoConnection?: Maybe; +}; + + +export type SsoMutationDeleteSsoConnectionArgs = { + id: Scalars['ID']['input']; }; -export type SsoMutationdeleteSsoConnectionArgs = { - id: Scalars['ID']; +export type SsoMutationDisableSsoConnectionArgs = { + id: Scalars['ID']['input']; }; -export type SsoMutationdisableSsoConnectionArgs = { - id: Scalars['ID']; +export type SsoMutationEnableScimProvisioningArgs = { + connectionId: Scalars['ID']['input']; }; -export type SsoMutationenableSsoConnectionArgs = { - id: Scalars['ID']; +export type SsoMutationEnableSsoConnectionArgs = { + id: Scalars['ID']['input']; }; export type SsoQuery = { @@ -13977,31 +16427,32 @@ export type SsoQuery = { }; -export type SsoQueryparseSamlIdpMetadataArgs = { - metadata: Scalars['String']; +export type SsoQueryParseSamlIdpMetadataArgs = { + metadata: Scalars['String']['input']; +}; + +export type SsoScimProvisioningDetails = { + __typename?: 'SsoScimProvisioningDetails'; + scimEnabled: Scalars['Boolean']['output']; + scimEndpoint?: Maybe; }; export type StartUsageBasedPlanResult = Account | NotFoundError | PermissionError | StartUsageBasedPlanSuccess | ValidationError; export type StartUsageBasedPlanSuccess = { __typename?: 'StartUsageBasedPlanSuccess'; - customerPlanId: Scalars['String']; + customerPlanId: Scalars['String']['output']; }; -export enum State { - approved = 'approved', - denied = 'denied', - errored = 'errored', - pending = 'pending', - published = 'published' -} - /** A time window with a specified granularity. */ export type StatsWindow = { __typename?: 'StatsWindow'; billingUsageStats: Array; + cardinalityStats: Array; + coordinateUsage: Array; edgeServerInfos: Array; errorStats: Array; + federatedErrorStats: Array; fieldExecutions: Array; fieldLatencies: Array; fieldUsage: Array; @@ -14009,98 +16460,122 @@ export type StatsWindow = { operationCheckStats: Array; queryStats: Array; /** From field rounded down to the nearest resolution. */ - roundedDownFrom: Scalars['Timestamp']; + roundedDownFrom: Scalars['Timestamp']['output']; /** To field rounded up to the nearest resolution. */ - roundedUpTo: Scalars['Timestamp']; + roundedUpTo: Scalars['Timestamp']['output']; tracePathErrorsRefs: Array; traceRefs: Array; }; /** A time window with a specified granularity. */ -export type StatsWindowbillingUsageStatsArgs = { +export type StatsWindowBillingUsageStatsArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity. */ -export type StatsWindowedgeServerInfosArgs = { +export type StatsWindowCardinalityStatsArgs = { + filter?: InputMaybe; + limit?: InputMaybe; + orderBy?: InputMaybe>; +}; + + +/** A time window with a specified granularity. */ +export type StatsWindowCoordinateUsageArgs = { + filter?: InputMaybe; + limit?: InputMaybe; + orderBy?: InputMaybe>; +}; + + +/** A time window with a specified granularity. */ +export type StatsWindowEdgeServerInfosArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity. */ -export type StatsWindowerrorStatsArgs = { +export type StatsWindowErrorStatsArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity. */ -export type StatsWindowfieldExecutionsArgs = { +export type StatsWindowFederatedErrorStatsArgs = { + filter?: InputMaybe; + limit?: InputMaybe; + orderBy?: InputMaybe>; +}; + + +/** A time window with a specified granularity. */ +export type StatsWindowFieldExecutionsArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity. */ -export type StatsWindowfieldLatenciesArgs = { +export type StatsWindowFieldLatenciesArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity. */ -export type StatsWindowfieldUsageArgs = { +export type StatsWindowFieldUsageArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity. */ -export type StatsWindowgraphosCloudMetricsArgs = { +export type StatsWindowGraphosCloudMetricsArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity. */ -export type StatsWindowoperationCheckStatsArgs = { +export type StatsWindowOperationCheckStatsArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity. */ -export type StatsWindowqueryStatsArgs = { +export type StatsWindowQueryStatsArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity. */ -export type StatsWindowtracePathErrorsRefsArgs = { +export type StatsWindowTracePathErrorsRefsArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; /** A time window with a specified granularity. */ -export type StatsWindowtraceRefsArgs = { +export type StatsWindowTraceRefsArgs = { filter?: InputMaybe; - limit?: InputMaybe; + limit?: InputMaybe; orderBy?: InputMaybe>; }; @@ -14127,7 +16602,7 @@ export enum Status { export type StoreSchemaError = { __typename?: 'StoreSchemaError'; code: StoreSchemaErrorCode; - message: Scalars['String']; + message: Scalars['String']['output']; }; export enum StoreSchemaErrorCode { @@ -14137,7 +16612,7 @@ export enum StoreSchemaErrorCode { export type StoreSchemaResponse = { __typename?: 'StoreSchemaResponse'; - sha256: Scalars['SHA256']; + sha256: Scalars['SHA256']['output']; }; export type StoreSchemaResponseOrError = StoreSchemaError | StoreSchemaResponse; @@ -14150,49 +16625,67 @@ export type StoredApprovedChange = { parentNode?: Maybe; }; +/** A paginated connection of strings. */ +export type StringConnection = { + __typename?: 'StringConnection'; + /** A list of edges containing a cursor and a string node for pagination. */ + edges: Array; + /** Information to aid in pagination. */ + pageInfo: PageInfo; +}; + +/** An edge in a connection, containing a string node and its cursor. */ +export type StringEdge = { + __typename?: 'StringEdge'; + /** A cursor for use in pagination, unique identifier for this edge's position. */ + cursor: Scalars['String']['output']; + /** The string value at this position in the connection. */ + node: Scalars['String']['output']; +}; + export type StringToString = { __typename?: 'StringToString'; - key: Scalars['String']; - value: Scalars['String']; + key: Scalars['String']['output']; + value: Scalars['String']['output']; }; export type StringToStringInput = { - key: Scalars['String']; - value: Scalars['String']; + key: Scalars['String']['input']; + value: Scalars['String']['input']; }; /** A subgraph in a federated Studio supergraph. */ export type Subgraph = { __typename?: 'Subgraph'; /** The subgraph schema document's SHA256 hash, represented as a hexadecimal string. */ - hash: Scalars['String']; + hash: Scalars['String']['output']; /** The subgraph's registered name. */ - name: Scalars['String']; + name: Scalars['String']['output']; /** The number of fields in this subgraph */ - numberOfFields?: Maybe; + numberOfFields?: Maybe; /** The number of types in this subgraph */ - numberOfTypes?: Maybe; + numberOfTypes?: Maybe; /** The revision string of this publish if provided */ - revision?: Maybe; + revision?: Maybe; /** The subgraph's routing URL, provided to gateways that use managed federation. */ - routingURL: Scalars['String']; + routingURL: Scalars['String']['output']; /** The subgraph schema document. */ - sdl: Scalars['String']; + sdl: Scalars['String']['output']; /** Timestamp of when the subgraph was published. */ - updatedAt?: Maybe; + updatedAt?: Maybe; }; /** A subgraph in a federated Studio supergraph. */ -export type SubgraphsdlArgs = { - graphId: Scalars['ID']; +export type SubgraphSdlArgs = { + graphId: Scalars['ID']['input']; }; /** A change made to a subgraph as part of a launch. */ export type SubgraphChange = { __typename?: 'SubgraphChange'; /** The subgraph's name. */ - name: Scalars['ID']; + name: Scalars['ID']['output']; /** The type of change that was made. */ type: SubgraphChangeType; }; @@ -14210,19 +16703,19 @@ export type SubgraphCheckAsyncInput = { /** The GitHub context to associate with the check. */ gitContext: GitContextInput; /** The graph ref of the Studio graph and variant to run checks against (such as `my-graph@current`). */ - graphRef?: InputMaybe; + graphRef?: InputMaybe; /** The URL of the GraphQL endpoint that Apollo Sandbox introspected to obtain the proposed schema. Required if `isSandbox` is `true`. */ - introspectionEndpoint?: InputMaybe; + introspectionEndpoint?: InputMaybe; /** If `true`, the check was initiated automatically by a Proposal update. */ - isProposal?: InputMaybe; + isProposal?: InputMaybe; /** If `true`, the check was initiated by Apollo Sandbox. */ - isSandbox: Scalars['Boolean']; + isSandbox: Scalars['Boolean']['input']; /** The proposed subgraph schema to perform checks with. */ - proposedSchema: Scalars['GraphQLDocument']; + proposedSchema: Scalars['GraphQLDocument']['input']; /** The source variant that this check should use the operations check configuration from */ - sourceVariant?: InputMaybe; + sourceVariant?: InputMaybe; /** The name of the subgraph to check schema changes for. */ - subgraphName: Scalars['String']; + subgraphName: Scalars['String']['input']; /** The user that triggered this check. If null, defaults to authContext to determine user. */ triggeredBy?: InputMaybe; }; @@ -14230,73 +16723,80 @@ export type SubgraphCheckAsyncInput = { /** A subgraph in a federated Studio supergraph. */ export type SubgraphCheckInput = { /** The subgraph schema document's SHA256 hash, represented as a hexadecimal string. */ - hash: Scalars['String']; + hash: Scalars['String']['input']; /** The subgraph's registered name. */ - name: Scalars['String']; + name: Scalars['String']['input']; }; export type SubgraphConfig = { __typename?: 'SubgraphConfig'; - id: Scalars['ID']; - name: Scalars['String']; - schemaHash: Scalars['String']; - sdl: Scalars['String']; - url: Scalars['String']; + id: Scalars['ID']['output']; + name: Scalars['String']['output']; + schemaHash: Scalars['String']['output']; + sdl: Scalars['String']['output']; + url: Scalars['String']['output']; }; export type SubgraphHashInput = { /** SHA256 of the subgraph schema sdl. */ - hash: Scalars['String']; - name: Scalars['String']; + hash: Scalars['String']['input']; + name: Scalars['String']['input']; }; export type SubgraphInput = { /** We are either going to pass in a document or a schema reference */ - document?: InputMaybe; - name: Scalars['String']; - routingURL: Scalars['String']; + document?: InputMaybe; + name: Scalars['String']['input']; + routingURL: Scalars['String']['input']; /** * Reference to a schema in studio. * If this is a mutable ref i.e. graphRef then it will link (tbd) * If it is a stable ref i.e. hash then it */ - schemaRef?: InputMaybe; + schemaRef?: InputMaybe; }; export type SubgraphKeyMap = { __typename?: 'SubgraphKeyMap'; - keys: Array; - subgraphName: Scalars['String']; + keys: Array; + subgraphName: Scalars['String']['output']; }; export type SubgraphSdlCheckInput = { - name: Scalars['String']; - sdl: Scalars['GraphQLDocument']; + name: Scalars['String']['input']; + sdl: Scalars['GraphQLDocument']['input']; +}; + +export type SubgraphWithConflicts = { + __typename?: 'SubgraphWithConflicts'; + conflicts: Array; + partialMergeSdl: Scalars['String']['output']; + subgraphName: Scalars['String']['output']; }; export type SubscriptionCapability = { __typename?: 'SubscriptionCapability'; - label: Scalars['String']; + label: Scalars['String']['output']; subscription: BillingSubscription; - value: Scalars['Boolean']; + value: Scalars['Boolean']['output']; }; export type SubscriptionLimit = { __typename?: 'SubscriptionLimit'; - label: Scalars['String']; + label: Scalars['String']['output']; subscription: BillingSubscription; - value: Scalars['Long']; + value?: Maybe; }; export type SubscriptionOptions = { __typename?: 'SubscriptionOptions'; /** Enables notifications for schema updates */ - schemaUpdates: Scalars['Boolean']; + schemaUpdates: Scalars['Boolean']['output']; }; export type SubscriptionOptionsInput = { /** Enables notifications for schema updates */ - schemaUpdates: Scalars['Boolean']; + schemaUpdates: Scalars['Boolean']['input']; }; export enum SubscriptionState { @@ -14307,48 +16807,117 @@ export enum SubscriptionState { PAST_DUE = 'PAST_DUE', PAUSED = 'PAUSED', PENDING = 'PENDING', + SOFT_CANCELED = 'SOFT_CANCELED', UNKNOWN = 'UNKNOWN' } +export type SupportTicket = { + __typename?: 'SupportTicket'; + /** The org id this issue belongs to */ + apolloOrgId?: Maybe; + /** The date the issue was created */ + created: Scalars['Timestamp']['output']; + /** The description of the issue */ + description: Scalars['String']['output']; + /** The graph this issue is related to */ + graph?: Maybe; + /** The id of the issue */ + id: Scalars['Int']['output']; + /** The key of the issue, ie TH-### */ + key: Scalars['String']['output']; + /** The priority of the issue. Returns P3 if null in Jira */ + priority: TicketPriority; + /** The status of the issue */ + status: TicketStatus; + /** The summary of the issue */ + summary: Scalars['String']['output']; + /** The apollo user who created this issue */ + user?: Maybe; +}; + +export type SupportTicketInput = { + apolloOrgId?: InputMaybe; + description: Scalars['String']['input']; + displayName: Scalars['String']['input']; + email: Scalars['String']['input']; + emailUsers?: InputMaybe>; + graphId?: InputMaybe; + graphType?: InputMaybe; + priority: TicketPriority; + summary: Scalars['String']['input']; +}; + export type Survey = { __typename?: 'Survey'; - id: Scalars['String']; - isComplete: Scalars['Boolean']; + id: Scalars['String']['output']; + isComplete: Scalars['Boolean']['output']; questionAnswers: Array; - shouldShow: Scalars['Boolean']; + shouldShow: Scalars['Boolean']['output']; }; export type SurveyQuestionAnswer = { __typename?: 'SurveyQuestionAnswer'; - answerValue?: Maybe; - questionKey: Scalars['String']; + answerDetails?: Maybe; + answerValue?: Maybe; + questionKey: Scalars['String']['output']; }; export type SurveyQuestionInput = { - answerValue?: InputMaybe; - questionKey: Scalars['String']; + answerDetails?: InputMaybe; + answerKey: Scalars['String']['input']; + answerKeyVersion?: InputMaybe; + answerValue?: InputMaybe; + questionKey: Scalars['String']['input']; + questionKeyVersion?: InputMaybe; + wasSkipped: Scalars['Boolean']['input']; }; export type SyncBillingAccountResult = PermissionError | SyncBillingAccountSuccess; export type SyncBillingAccountSuccess = { __typename?: 'SyncBillingAccountSuccess'; - message: Scalars['String']; + message: Scalars['String']['output']; }; /** User input for a resource share mutation */ export type SyncPrivateSubgraphsInput = { /** A unique identifier for the private subgraph */ - identifier: Scalars['String']; + identifier: Scalars['String']['input']; /** The cloud provider where the private subgraph is hosted */ provider: CloudProvider; }; -export type TemporaryURL = { +export type TaskError = { + __typename?: 'TaskError'; + message: Scalars['String']['output']; +}; + +export type TemporaryUrl = { __typename?: 'TemporaryURL'; - url: Scalars['String']; + url: Scalars['String']['output']; +}; + +export type TestRouter = { + __typename?: 'TestRouter'; + id: Scalars['ID']['output']; + router?: Maybe; + status: TestRouterStatus; }; +/** The current state of a [`TestRouter`] */ +export enum TestRouterStatus { + /** The router has been destroyed */ + DELETED = 'DELETED', + /** The router is spinning down */ + DELETING = 'DELETING', + /** The router has entered an errored state as a result of the above */ + ERRORED = 'ERRORED', + /** The router is spinning up */ + LAUNCHING = 'LAUNCHING', + /** The router is running */ + RUNNING = 'RUNNING' +} + export enum ThemeName { DARK = 'DARK', LIGHT = 'LIGHT' @@ -14357,30 +16926,162 @@ export enum ThemeName { /** Throttle error */ export type ThrottleError = Error & { __typename?: 'ThrottleError'; - message: Scalars['String']; - retryAfter?: Maybe; + message: Scalars['String']['output']; + retryAfter?: Maybe; }; export enum TicketPriority { + /** Note that JSM does not have P0 */ P0 = 'P0', P1 = 'P1', P2 = 'P2', - P3 = 'P3' + P3 = 'P3', + /** Note that Zendesk does not have P4 */ + P4 = 'P4' } export enum TicketStatus { + /** Canceled */ + CANCELLED = 'CANCELLED', + /** Closed */ CLOSED = 'CLOSED', + /** Escalated */ + ESCALATED = 'ESCALATED', + /** Zendesk status hold */ HOLD = 'HOLD', + /** In Progress */ + IN_PROGRESS = 'IN_PROGRESS', + /** Zendesk status new */ NEW = 'NEW', + /** Zendesk status open */ OPEN = 'OPEN', + /** Zendesk status pending */ PENDING = 'PENDING', - SOLVED = 'SOLVED' + /** Reopened */ + REOPENED = 'REOPENED', + /** Resolved */ + RESOLVED = 'RESOLVED', + /** Zendesk status solved */ + SOLVED = 'SOLVED', + /** Waiting for customer */ + WAITING_FOR_CUSTOMER = 'WAITING_FOR_CUSTOMER', + /** Waiting for support */ + WAITING_FOR_SUPPORT = 'WAITING_FOR_SUPPORT' } +/** Filter options to represent a timestamp range */ +export type TimestampFilterInput = { + /** The start of the range */ + from?: InputMaybe; + /** The end of the range */ + to?: InputMaybe; +}; + export type TimezoneOffset = { __typename?: 'TimezoneOffset'; - minutesOffsetFromUTC: Scalars['Int']; - zoneID: Scalars['String']; + minutesOffsetFromUTC: Scalars['Int']['output']; + zoneID: Scalars['String']['output']; +}; + +export type TopNOperationsByErrorPercentageRecord = TopNOperationsRecord & { + __typename?: 'TopNOperationsByErrorPercentageRecord'; + /** A substring of the query signature for unnamed operations, otherwise the operation name. */ + displayName: Scalars['String']['output']; + errorPercentage: Scalars['Float']['output']; + /** The operation name or null if the operation is unnamed. */ + name?: Maybe; + /** The unique id for this operation. */ + queryID: Scalars['String']['output']; + type?: Maybe; +}; + +export type TopNOperationsByP95Record = TopNOperationsRecord & { + __typename?: 'TopNOperationsByP95Record'; + /** A substring of the query signature for unnamed operations, otherwise the operation name. */ + displayName: Scalars['String']['output']; + /** The operation name or null if the operation is unnamed. */ + name?: Maybe; + /** The unique id for this operation. */ + queryID: Scalars['String']['output']; + serviceTimeP95Ms: Scalars['Float']['output']; + type?: Maybe; +}; + +export type TopNOperationsByRequestRateRecord = TopNOperationsRecord & { + __typename?: 'TopNOperationsByRequestRateRecord'; + /** A substring of the query signature for unnamed operations, otherwise the operation name. */ + displayName: Scalars['String']['output']; + /** The operation name or null if the operation is unnamed. */ + name?: Maybe; + /** The unique id for this operation. */ + queryID: Scalars['String']['output']; + requestCountPerMin: Scalars['Float']['output']; + type?: Maybe; +}; + +export type TopNOperationsFilterInput = { + clientName?: InputMaybe; + clientVersion?: InputMaybe; + in?: InputMaybe; + or?: InputMaybe>; +}; + +export type TopNOperationsRecord = { + /** A substring of the query signature for unnamed operations, otherwise the operation name. */ + displayName: Scalars['String']['output']; + /** The operation name or null if the operation is unnamed. */ + name?: Maybe; + /** The unique id for this operation. */ + queryID: Scalars['String']['output']; + type?: Maybe; +}; + +export type TopNOperationsResult = { + __typename?: 'TopNOperationsResult'; + /** Top N operations by error percentage (descending). */ + byErrorPercentage: Array; + /** Top N operations by p95 latency (descending). */ + byP95: Array; + /** Top N operations by request rate (descending). */ + byRequestRate: Array; +}; + +export type TopOperationRecord = { + __typename?: 'TopOperationRecord'; + /** The graph this operation was reported from. */ + graphId: Scalars['String']['output']; + /** The graph variant this operation was reported from. */ + graphVariant: Scalars['String']['output']; + /** The operation name or null if the operation is unnamed. */ + name?: Maybe; + /** The unique id for this operation. */ + operationId: Scalars['String']['output']; + /** The total number of requests for this operation for the specified time range. */ + requestCount: Scalars['Long']['output']; + /** The operation's signature body or null if the signature is unavailable due to parse errors. */ + signature?: Maybe; + /** The operation type or null if the operation type could not be determined from the signature. */ + type?: Maybe; +}; + +export enum TopOperationsReportOrderByColumn { + REQUEST_COUNT = 'REQUEST_COUNT' +} + +export type TopOperationsReportOrderByInput = { + /** The order column used for the operation results. Defaults to ordering by total request count. */ + column: TopOperationsReportOrderByColumn; + /** The direction used to order operation results. Defaults to descending order. */ + direction: Ordering; +}; + +export type TopOperationsReportVariantFilterInInput = { + clientName?: InputMaybe>>; + clientVersion?: InputMaybe>>; +}; + +export type TopOperationsReportVariantFilterInput = { + in: TopOperationsReportVariantFilterInInput; }; /** Counts of changes. */ @@ -14391,123 +17092,117 @@ export type TotalChangeSummaryCounts = { * object, and interface types, adding values to enums, adding members to interfaces and unions, and * adding arguments. */ - additions: Scalars['Int']; + additions: Scalars['Int']['output']; /** Number of changes that are new usages of the @deprecated directive. */ - deprecations: Scalars['Int']; + deprecations: Scalars['Int']['output']; /** * Number of changes that are edits. This includes types changing kind, fields and arguments * changing type, arguments changing default value, and any description changes. This also includes * edits to @deprecated reason strings. */ - edits: Scalars['Int']; + edits: Scalars['Int']['output']; /** * Number of changes that are removals. This includes removing types, removing fields from object, * input object, and interface types, removing values from enums, removing members from interfaces * and unions, and removing arguments. This also includes removing @deprecated usages. */ - removals: Scalars['Int']; + removals: Scalars['Int']['output']; }; export type Trace = { __typename?: 'Trace'; - agentVersion?: Maybe; - cacheMaxAgeMs?: Maybe; + agentVersion?: Maybe; + cacheMaxAgeMs?: Maybe; cacheScope?: Maybe; - clientName?: Maybe; - clientVersion?: Maybe; - durationMs: Scalars['Float']; - endTime: Scalars['Timestamp']; - http?: Maybe; - id: Scalars['ID']; + clientName?: Maybe; + clientVersion?: Maybe; + durationMs: Scalars['Float']['output']; + endTime: Scalars['Timestamp']['output']; + http?: Maybe; + id: Scalars['ID']['output']; /** * True if the report containing the trace was submitted as potentially incomplete, which can happen if the Router's * trace buffer fills up while constructing the trace. If this is true, the trace might be missing some nodes. */ - isIncomplete: Scalars['Boolean']; - operationName?: Maybe; + isIncomplete: Scalars['Boolean']['output']; + operationName?: Maybe; protobuf: Protobuf; root: TraceNode; - signature: Scalars['String']; - startTime: Scalars['Timestamp']; - unexecutedOperationBody?: Maybe; - unexecutedOperationName?: Maybe; + signature: Scalars['String']['output']; + startTime: Scalars['Timestamp']['output']; + unexecutedOperationBody?: Maybe; + unexecutedOperationName?: Maybe; variablesJSON: Array; }; export type TraceError = { __typename?: 'TraceError'; - json: Scalars['String']; + errorCode?: Maybe; + errorService?: Maybe; + json: Scalars['String']['output']; locations: Array; - message: Scalars['String']; - timestamp?: Maybe; + message: Scalars['String']['output']; + timestamp?: Maybe; }; -export type TraceHTTP = { +export type TraceHttp = { __typename?: 'TraceHTTP'; - method: HTTPMethod; + method: HttpMethod; requestHeaders: Array; responseHeaders: Array; - statusCode: Scalars['Int']; + statusCode: Scalars['Int']['output']; }; export type TraceNode = { __typename?: 'TraceNode'; - cacheMaxAgeMs?: Maybe; + /** Additional metadata for the node, presented in key-value pairs. */ + attributes: Array; + cacheMaxAgeMs?: Maybe; cacheScope?: Maybe; /** The total number of children, including the ones that were truncated. */ - childCount: Scalars['Int']; - /** - * The immediate children of the node. There is a maximum number of children we will return so - * this might be truncated, but childCount will always have the total count. - */ - children: Array; + childCount: Scalars['Int']['output']; /** Whether the children of this node have been truncated because the number of children is over the max. */ - childrenAreTruncated: Scalars['Boolean']; - /** - * The IDs of the immediate children of the node. There is a maximum number of children we will - * return so this might be truncated, but childCount will always have the total count. - */ - childrenIds: Array; + childrenAreTruncated: Scalars['Boolean']['output']; /** * All children, and the children of those children, and so on. Children that have been truncated * are not included. */ descendants: Array; - /** - * All IDs of children, and the IDs of the children of those children, and so on. Children that - * have been truncated are not included. - */ - descendantsIds: Array; /** * The end time of the node. If this is a fetch node (meaning isFetch is true), this will be the * time that the gateway/router received the response from the subgraph server in the * gateway/routers clock time. */ - endTime: Scalars['Timestamp']; + endTime: Scalars['Timestamp']['output']; errors: Array; - id: Scalars['ID']; + id: Scalars['ID']['output']; /** * Whether the fetch node in question is a descendent of a Deferred node in the trace's query plan. The nodes * in query plans can be complicated and nested, so this is a fairly simple representation of the structure. */ - isDeferredFetch: Scalars['Boolean']; + isDeferredFetch: Scalars['Boolean']['output']; /** * Whether the node in question represents a fetch node within a query plan. If so, this will contain * children with timestamps that are calculated by the router/gateway rather than subgraph and the * fields subgraphStartTime and subgraphEndTime will be non-null. */ - isFetch: Scalars['Boolean']; - key?: Maybe; - originalFieldName?: Maybe; - parent: Scalars['ID']; - parentId?: Maybe; - path: Array; + isFetch: Scalars['Boolean']['output']; + key?: Maybe; + /** A classification which helps to differentiate between types of nodes (intended for display / filtering purposes). */ + kind: TraceNodeKind; + originalFieldName?: Maybe; + parentId?: Maybe; + /** + * If the node is a field resolver, the field's parent type; e.g. "User" for User.email + * otherwise null. + */ + parentType?: Maybe; /** * The start time of the node. If this is a fetch node (meaning isFetch is true), this will be the * time that the gateway/router sent the request to the subgraph server in the gateway/router's clock * time. */ - startTime: Scalars['Timestamp']; + startTime: Scalars['Timestamp']['output']; /** * Only present when the node in question is a fetch node, this will indicate the timestamp at which * the subgraph server returned a response to the gateway/router. This timestamp is based on the @@ -14515,7 +17210,9 @@ export type TraceNode = { * this and endTime will not be in sync. If this is a fetch node but we don't receive subgraph traces * (e.g. if the subgraph doesn't support federated traces), this value will be null. */ - subgraphEndTime?: Maybe; + subgraphEndTime?: Maybe; + /** If present, indicates the subgraph context a node is associated with. */ + subgraphName?: Maybe; /** * Only present when the node in question is a fetch node, this will indicate the timestamp at which * the fetch was received by the subgraph server. This timestamp is based on the subgraph server's @@ -14523,10 +17220,23 @@ export type TraceNode = { * will not be in sync. If this is a fetch node but we don't receive subgraph traces (e.g. if the * subgraph doesn't support federated traces), this value will be null. */ - subgraphStartTime?: Maybe; - type?: Maybe; + subgraphStartTime?: Maybe; + /** + * If the node is a field resolver, the field's return type; e.g. "String!" for User.email:String! + * otherwise an empty string. + */ + type?: Maybe; }; +export enum TraceNodeKind { + ARRAY_INDEX_RESOLVER = 'ARRAY_INDEX_RESOLVER', + FIELD_RESOLVER = 'FIELD_RESOLVER', + REQUEST = 'REQUEST', + ROUTER_INTERNAL = 'ROUTER_INTERNAL', + SUBGRAPH_REQUEST = 'SUBGRAPH_REQUEST', + USER_PLUGIN = 'USER_PLUGIN' +} + /** Columns of TracePathErrorsRefs. */ export enum TracePathErrorsRefsColumn { CLIENT_NAME = 'CLIENT_NAME', @@ -14534,7 +17244,9 @@ export enum TracePathErrorsRefsColumn { DURATION_BUCKET = 'DURATION_BUCKET', ERRORS_COUNT_IN_PATH = 'ERRORS_COUNT_IN_PATH', ERRORS_COUNT_IN_TRACE = 'ERRORS_COUNT_IN_TRACE', + ERROR_CODE = 'ERROR_CODE', ERROR_MESSAGE = 'ERROR_MESSAGE', + ERROR_SERVICE = 'ERROR_SERVICE', PATH = 'PATH', QUERY_ID = 'QUERY_ID', QUERY_NAME = 'QUERY_NAME', @@ -14550,87 +17262,97 @@ export enum TracePathErrorsRefsColumn { export type TracePathErrorsRefsDimensions = { __typename?: 'TracePathErrorsRefsDimensions'; - clientName?: Maybe; - clientVersion?: Maybe; - durationBucket?: Maybe; - errorMessage?: Maybe; + clientName?: Maybe; + clientVersion?: Maybe; + durationBucket?: Maybe; + errorCode?: Maybe; + errorMessage?: Maybe; + errorService?: Maybe; /** If metrics were collected from a federated service, this field will be prefixed with `service:.` */ - path?: Maybe; - queryId?: Maybe; - queryName?: Maybe; - schemaHash?: Maybe; - schemaTag?: Maybe; - serviceId?: Maybe; - traceHttpStatusCode?: Maybe; - traceId?: Maybe; - traceStartsAt?: Maybe; + path?: Maybe; + queryId?: Maybe; + queryName?: Maybe; + schemaHash?: Maybe; + schemaTag?: Maybe; + serviceId?: Maybe; + traceHttpStatusCode?: Maybe; + traceId?: Maybe; + traceStartsAt?: Maybe; }; /** Filter for data in TracePathErrorsRefs. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type TracePathErrorsRefsFilter = { and?: InputMaybe>; /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */ - clientName?: InputMaybe; + clientName?: InputMaybe; /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */ - clientVersion?: InputMaybe; + clientVersion?: InputMaybe; /** Selects rows whose durationBucket dimension equals the given value if not null. To query for the null value, use {in: {durationBucket: [null]}} instead. */ - durationBucket?: InputMaybe; + durationBucket?: InputMaybe; + /** Selects rows whose errorCode dimension equals the given value if not null. To query for the null value, use {in: {errorCode: [null]}} instead. */ + errorCode?: InputMaybe; /** Selects rows whose errorMessage dimension equals the given value if not null. To query for the null value, use {in: {errorMessage: [null]}} instead. */ - errorMessage?: InputMaybe; + errorMessage?: InputMaybe; + /** Selects rows whose errorService dimension equals the given value if not null. To query for the null value, use {in: {errorService: [null]}} instead. */ + errorService?: InputMaybe; in?: InputMaybe; not?: InputMaybe; or?: InputMaybe>; /** Selects rows whose path dimension equals the given value if not null. To query for the null value, use {in: {path: [null]}} instead. */ - path?: InputMaybe; + path?: InputMaybe; /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */ - queryId?: InputMaybe; + queryId?: InputMaybe; /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */ - queryName?: InputMaybe; + queryName?: InputMaybe; /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */ - schemaHash?: InputMaybe; + schemaHash?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */ - serviceId?: InputMaybe; + serviceId?: InputMaybe; /** Selects rows whose traceHttpStatusCode dimension equals the given value if not null. To query for the null value, use {in: {traceHttpStatusCode: [null]}} instead. */ - traceHttpStatusCode?: InputMaybe; + traceHttpStatusCode?: InputMaybe; /** Selects rows whose traceId dimension equals the given value if not null. To query for the null value, use {in: {traceId: [null]}} instead. */ - traceId?: InputMaybe; + traceId?: InputMaybe; }; /** Filter for data in TracePathErrorsRefs. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type TracePathErrorsRefsFilterIn = { /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientName?: InputMaybe>>; + clientName?: InputMaybe>>; /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientVersion?: InputMaybe>>; + clientVersion?: InputMaybe>>; /** Selects rows whose durationBucket dimension is in the given list. A null value in the list means a row with null for that dimension. */ - durationBucket?: InputMaybe>>; + durationBucket?: InputMaybe>>; + /** Selects rows whose errorCode dimension is in the given list. A null value in the list means a row with null for that dimension. */ + errorCode?: InputMaybe>>; /** Selects rows whose errorMessage dimension is in the given list. A null value in the list means a row with null for that dimension. */ - errorMessage?: InputMaybe>>; + errorMessage?: InputMaybe>>; + /** Selects rows whose errorService dimension is in the given list. A null value in the list means a row with null for that dimension. */ + errorService?: InputMaybe>>; /** Selects rows whose path dimension is in the given list. A null value in the list means a row with null for that dimension. */ - path?: InputMaybe>>; + path?: InputMaybe>>; /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryId?: InputMaybe>>; + queryId?: InputMaybe>>; /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryName?: InputMaybe>>; + queryName?: InputMaybe>>; /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaHash?: InputMaybe>>; + schemaHash?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - serviceId?: InputMaybe>>; + serviceId?: InputMaybe>>; /** Selects rows whose traceHttpStatusCode dimension is in the given list. A null value in the list means a row with null for that dimension. */ - traceHttpStatusCode?: InputMaybe>>; + traceHttpStatusCode?: InputMaybe>>; /** Selects rows whose traceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - traceId?: InputMaybe>>; + traceId?: InputMaybe>>; }; export type TracePathErrorsRefsMetrics = { __typename?: 'TracePathErrorsRefsMetrics'; - errorsCountInPath: Scalars['Long']; - errorsCountInTrace: Scalars['Long']; - traceSizeBytes: Scalars['Long']; + errorsCountInPath: Scalars['Long']['output']; + errorsCountInTrace: Scalars['Long']['output']; + traceSizeBytes: Scalars['Long']['output']; }; export type TracePathErrorsRefsOrderBySpec = { @@ -14645,7 +17367,7 @@ export type TracePathErrorsRefsRecord = { /** Metrics of TracePathErrorsRefs that can be aggregated over. */ metrics: TracePathErrorsRefsMetrics; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; }; /** Columns of TraceRefs. */ @@ -14667,80 +17389,80 @@ export enum TraceRefsColumn { export type TraceRefsDimensions = { __typename?: 'TraceRefsDimensions'; - clientName?: Maybe; - clientVersion?: Maybe; - durationBucket?: Maybe; - generatedTraceId?: Maybe; - operationSubtype?: Maybe; - operationType?: Maybe; - queryId?: Maybe; - queryName?: Maybe; - querySignature?: Maybe; - schemaHash?: Maybe; - schemaTag?: Maybe; - serviceId?: Maybe; - traceId?: Maybe; + clientName?: Maybe; + clientVersion?: Maybe; + durationBucket?: Maybe; + generatedTraceId?: Maybe; + operationSubtype?: Maybe; + operationType?: Maybe; + queryId?: Maybe; + queryName?: Maybe; + querySignature?: Maybe; + schemaHash?: Maybe; + schemaTag?: Maybe; + serviceId?: Maybe; + traceId?: Maybe; }; /** Filter for data in TraceRefs. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */ export type TraceRefsFilter = { and?: InputMaybe>; /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */ - clientName?: InputMaybe; + clientName?: InputMaybe; /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */ - clientVersion?: InputMaybe; + clientVersion?: InputMaybe; /** Selects rows whose durationBucket dimension equals the given value if not null. To query for the null value, use {in: {durationBucket: [null]}} instead. */ - durationBucket?: InputMaybe; + durationBucket?: InputMaybe; in?: InputMaybe; not?: InputMaybe; /** Selects rows whose operationSubtype dimension equals the given value if not null. To query for the null value, use {in: {operationSubtype: [null]}} instead. */ - operationSubtype?: InputMaybe; + operationSubtype?: InputMaybe; /** Selects rows whose operationType dimension equals the given value if not null. To query for the null value, use {in: {operationType: [null]}} instead. */ - operationType?: InputMaybe; + operationType?: InputMaybe; or?: InputMaybe>; /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */ - queryId?: InputMaybe; + queryId?: InputMaybe; /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */ - queryName?: InputMaybe; + queryName?: InputMaybe; /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */ - schemaHash?: InputMaybe; + schemaHash?: InputMaybe; /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */ - schemaTag?: InputMaybe; + schemaTag?: InputMaybe; /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */ - serviceId?: InputMaybe; + serviceId?: InputMaybe; /** Selects rows whose traceId dimension equals the given value if not null. To query for the null value, use {in: {traceId: [null]}} instead. */ - traceId?: InputMaybe; + traceId?: InputMaybe; }; /** Filter for data in TraceRefs. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */ export type TraceRefsFilterIn = { /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientName?: InputMaybe>>; + clientName?: InputMaybe>>; /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */ - clientVersion?: InputMaybe>>; + clientVersion?: InputMaybe>>; /** Selects rows whose durationBucket dimension is in the given list. A null value in the list means a row with null for that dimension. */ - durationBucket?: InputMaybe>>; + durationBucket?: InputMaybe>>; /** Selects rows whose operationSubtype dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationSubtype?: InputMaybe>>; + operationSubtype?: InputMaybe>>; /** Selects rows whose operationType dimension is in the given list. A null value in the list means a row with null for that dimension. */ - operationType?: InputMaybe>>; + operationType?: InputMaybe>>; /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryId?: InputMaybe>>; + queryId?: InputMaybe>>; /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */ - queryName?: InputMaybe>>; + queryName?: InputMaybe>>; /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaHash?: InputMaybe>>; + schemaHash?: InputMaybe>>; /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */ - schemaTag?: InputMaybe>>; + schemaTag?: InputMaybe>>; /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - serviceId?: InputMaybe>>; + serviceId?: InputMaybe>>; /** Selects rows whose traceId dimension is in the given list. A null value in the list means a row with null for that dimension. */ - traceId?: InputMaybe>>; + traceId?: InputMaybe>>; }; export type TraceRefsMetrics = { __typename?: 'TraceRefsMetrics'; - traceCount: Scalars['Long']; + traceCount: Scalars['Long']['output']; }; export type TraceRefsOrderBySpec = { @@ -14755,28 +17477,28 @@ export type TraceRefsRecord = { /** Metrics of TraceRefs that can be aggregated over. */ metrics: TraceRefsMetrics; /** Starting segment timestamp. */ - timestamp: Scalars['Timestamp']; + timestamp: Scalars['Timestamp']['output']; }; export type TraceSourceLocation = { __typename?: 'TraceSourceLocation'; - column: Scalars['Int']; - line: Scalars['Int']; + column: Scalars['Int']['output']; + line: Scalars['Int']['output']; }; /** Counts of changes at the type level, including interfaces, unions, enums, scalars, input objects, etc. */ export type TypeChangeSummaryCounts = { __typename?: 'TypeChangeSummaryCounts'; /** Number of changes that are additions of types. */ - additions: Scalars['Int']; + additions: Scalars['Int']['output']; /** * Number of changes that are edits. This includes types changing kind and any type description * changes, but also includes adding/removing values from enums, adding/removing members from * interfaces and unions, and any enum value deprecation and description changes. */ - edits: Scalars['Int']; + edits: Scalars['Int']['output']; /** Number of changes that are removals of types. */ - removals: Scalars['Int']; + removals: Scalars['Int']['output']; }; /** @@ -14789,17 +17511,17 @@ export type TypeChangeSummaryCounts = { */ export type TypeFilterConfig = { /** include abstract types (interfaces and unions) */ - includeAbstractTypes?: InputMaybe; + includeAbstractTypes?: InputMaybe; /** include built in scalars (i.e. Boolean, Int, etc) */ - includeBuiltInTypes?: InputMaybe; + includeBuiltInTypes?: InputMaybe; /** include reserved introspection types (i.e. __Type) */ - includeIntrospectionTypes?: InputMaybe; + includeIntrospectionTypes?: InputMaybe; }; -export type URI = { +export type Uri = { __typename?: 'URI'; /** A GCS URI */ - gcs: Scalars['String']; + gcs: Scalars['String']['output']; }; export type UnignoreOperationsInChecksResult = { @@ -14813,61 +17535,61 @@ export type UnlinkPersistedQueryListResult = { unlinkedPersistedQueryList: PersistedQueryList; }; +/** The result/error union returned by GraphVariantMutation.unlinkPersistedQueryList. */ export type UnlinkPersistedQueryListResultOrError = PermissionError | UnlinkPersistedQueryListResult | VariantAlreadyUnlinkedError; /** Input to update an AWS shard */ export type UpdateAwsShardInput = { - accountId?: InputMaybe; - coldStartTargetGroupArns?: InputMaybe>; - ecsClusterArn?: InputMaybe; - iamRoleArn?: InputMaybe; - loadbalancerSecurityGroupId?: InputMaybe; + accountId?: InputMaybe; + coldStartTargetGroupArns?: InputMaybe>; + ecsClusterArn?: InputMaybe; + iamRoleArn?: InputMaybe; + loadbalancerSecurityGroupId?: InputMaybe; loadbalancers?: InputMaybe>; - permissionsBoundaryArn?: InputMaybe; - region?: InputMaybe; - subnetIds?: InputMaybe>; - vpcId?: InputMaybe; + permissionsBoundaryArn?: InputMaybe; + region?: InputMaybe; + subnetIds?: InputMaybe>; + vpcId?: InputMaybe; +}; + +export type UpdateBillingPlanDescriptorsInput = { + description?: InputMaybe; + name?: InputMaybe; + readableId?: InputMaybe; }; export type UpdateBillingPlanInput = { billingModel: BillingModel; - clientVersions: Scalars['Boolean']; - clients: Scalars['Boolean']; - contracts: Scalars['Boolean']; - datadog: Scalars['Boolean']; - errors: Scalars['Boolean']; - federation: Scalars['Boolean']; - intervalLength: Scalars['Int']; - intervalUnit: Scalars['String']; + clientVersions?: InputMaybe; + clients?: InputMaybe; + contracts?: InputMaybe; + datadog?: InputMaybe; + errors: Scalars['Boolean']['input']; + federation?: InputMaybe; + intervalLength: Scalars['Int']['input']; + intervalUnit: Scalars['String']['input']; kind: BillingPlanKind; - launches: Scalars['Boolean']; - maxAuditInDays: Scalars['Int']; - maxRangeInDays: Scalars['Int']; - maxSelfHostedRequestsPerMonth: Scalars['Long']; - metrics: Scalars['Boolean']; - notifications: Scalars['Boolean']; - operationRegistry: Scalars['Boolean']; - persistedQueries: Scalars['Boolean']; - proposals: Scalars['Boolean']; - public: Scalars['Boolean']; - schemaValidation: Scalars['Boolean']; - traces: Scalars['Boolean']; - userRoles: Scalars['Boolean']; - webhooks: Scalars['Boolean']; + launches?: InputMaybe; + maxAuditInDays?: InputMaybe; + maxRangeInDays?: InputMaybe; + maxSelfHostedRequestsPerMonth?: InputMaybe; + metrics?: InputMaybe; + notifications?: InputMaybe; + operationRegistry?: InputMaybe; + persistedQueries?: InputMaybe; + proposals?: InputMaybe; + public: Scalars['Boolean']['input']; + schemaValidation?: InputMaybe; + sso?: InputMaybe; + traces?: InputMaybe; + userRoles?: InputMaybe; + webhooks?: InputMaybe; }; /** Input to update a proposal description */ export type UpdateDescriptionInput = { /** A proposal description */ - description: Scalars['String']; -}; - -/** Input to update a Fly shard */ -export type UpdateFlyShardInput = { - endpoint?: InputMaybe; - etcdEndpoints?: InputMaybe>; - organizationId?: InputMaybe; - region?: InputMaybe; + description: Scalars['String']['input']; }; export type UpdateOperationCollectionEntryResult = OperationCollectionEntry | PermissionError | ValidationError; @@ -14878,21 +17600,30 @@ export type UpdatePaymentMethodResult = Account | NotFoundError | PermissionErro export type UpdatePaymentMethodSuccess = { __typename?: 'UpdatePaymentMethodSuccess'; - paymentMethodId: Scalars['String']; + paymentMethodId: Scalars['String']['output']; }; +/** The result of a successful call to PersistedQueryListMutation.updateMetadata. */ export type UpdatePersistedQueryListMetadataResult = { __typename?: 'UpdatePersistedQueryListMetadataResult'; persistedQueryList: PersistedQueryList; }; +/** The result/error union returned by PersistedQueryListMutation.updateMetadata. */ export type UpdatePersistedQueryListMetadataResultOrError = PermissionError | UpdatePersistedQueryListMetadataResult; +export type UpdateProposalLifecycleSubscriptionInput = { + events: Array; + id: Scalars['ID']['input']; +}; + +export type UpdateProposalLifecycleSubscriptionResult = NotFoundError | PermissionError | ProposalLifecycleSubscription | ValidationError; + export type UpdateProposalResult = PermissionError | Proposal | ValidationError; export type UpdateRequestedReviewersInput = { - reviewerUserIdsToAdd?: InputMaybe>; - reviewerUserIdsToRemove?: InputMaybe>; + reviewerUserIdsToAdd?: InputMaybe>; + reviewerUserIdsToRemove?: InputMaybe>; }; export type UpdateRequestedReviewersResult = PermissionError | Proposal | ValidationError; @@ -14904,15 +17635,15 @@ export type UpdateRouterInput = { * * This is ignored for serverless Cloud Routers */ - gcus?: InputMaybe; + gcus?: InputMaybe; /** Graph composition ID, also known as launch ID */ - graphCompositionId?: InputMaybe; + graphCompositionId?: InputMaybe; /** Unique identifier for ordering orders */ - orderingId: Scalars['String']; + orderingId: Scalars['String']['input']; /** Configuration for the Cloud Router */ - routerConfig?: InputMaybe; + routerConfig?: InputMaybe; /** Router version for the Cloud Router */ - routerVersion?: InputMaybe; + routerVersion?: InputMaybe; }; /** Represents the possible outcomes of an updateRouter mutation */ @@ -14929,18 +17660,22 @@ export type UpdateRouterSuccess = { }; /** Result of an updateVersion mutation */ -export type UpdateRouterVersionResult = CloudInvalidInputError | InternalServerError | RouterVersion; +export type UpdateRouterVersionResult = InternalServerError | InvalidInputErrors | RouterVersion; + +export type UpdateRuleEnforcementInput = { + /** A json string representing any parameters necessary for the policy's enforcement. Explicit null setting is allowed. */ + params?: InputMaybe>; +}; /** Input to update an existing Shard */ export type UpdateShardInput = { aws?: InputMaybe; - fly?: InputMaybe; - gcuCapacity?: InputMaybe; - gcuUsage?: InputMaybe; - reason?: InputMaybe; - routerCapacity?: InputMaybe; - routerUsage?: InputMaybe; - shardId: Scalars['String']; + gcuCapacity?: InputMaybe; + gcuUsage?: InputMaybe; + reason?: InputMaybe; + routerCapacity?: InputMaybe; + routerUsage?: InputMaybe; + shardId: Scalars['String']['input']; status?: InputMaybe; }; @@ -14948,21 +17683,21 @@ export type UpdateShardInput = { export type UploadSchemaMutationResponse = { __typename?: 'UploadSchemaMutationResponse'; /** A machine-readable response code that indicates the type of result (e.g., `UPLOAD_SUCCESS` or `NO_CHANGES`) */ - code: Scalars['String']; + code: Scalars['String']['output']; /** A Human-readable message describing the type of result. */ - message: Scalars['String']; + message: Scalars['String']['output']; /** If the publish operation succeeded, this contains its details. Otherwise, this is null. */ publication?: Maybe; /** Whether the schema publish operation succeeded (`true`) or encountered errors (`false`). */ - success: Scalars['Boolean']; + success: Scalars['Boolean']['output']; /** If successful, the corresponding publication. */ tag?: Maybe; }; export type UpsertReviewInput = { - comment?: InputMaybe; + comment?: InputMaybe; decision: ReviewDecision; - revisionId: Scalars['ID']; + revisionId: Scalars['ID']['input']; }; export type UpsertReviewResult = PermissionError | Proposal | ValidationError; @@ -14972,7 +17707,7 @@ export type UpsertRouterResult = GraphVariant | RouterUpsertFailure; /** A registered Apollo Studio user. */ export type User = Identity & { __typename?: 'User'; - acceptedPrivacyPolicyAt?: Maybe; + acceptedPrivacyPolicyAt?: Maybe; /** Returns a list of all active user API keys for the user. */ apiKeys: Array; /** Returns a representation of this user as an `Actor` type. Useful when determining which actor (usually a `User` or `Graph`) performed a particular action in Studio. */ @@ -14991,37 +17726,38 @@ export type User = Identity & { * application. Apollo's media server will downscale larger images to at least the requested size, * but this will not happen for third-party media servers. */ - avatarUrl?: Maybe; - betaFeaturesOn: Scalars['Boolean']; - canUpdateAvatar: Scalars['Boolean']; - canUpdateEmail: Scalars['Boolean']; - canUpdateFullName: Scalars['Boolean']; - createdAt: Scalars['Timestamp']; - email?: Maybe; - emailModifiedAt?: Maybe; - emailVerified: Scalars['Boolean']; + avatarUrl?: Maybe; + betaFeaturesOn: Scalars['Boolean']['output']; + canUpdateAvatar: Scalars['Boolean']['output']; + canUpdateEmail: Scalars['Boolean']['output']; + canUpdateFullName: Scalars['Boolean']['output']; + createdAt: Scalars['Timestamp']['output']; + education?: Maybe; + email?: Maybe; + emailModifiedAt?: Maybe; + emailVerified: Scalars['Boolean']['output']; featureIntros?: Maybe; - fullName: Scalars['String']; + fullName: Scalars['String']['output']; /** The user's GitHub username, if they log in via GitHub. May be null even for GitHub users in some edge cases. */ - githubUsername?: Maybe; + githubUsername?: Maybe; /** The user's unique ID. */ - id: Scalars['ID']; + id: Scalars['ID']['output']; /** * This role is reserved exclusively for internal Apollo employees, and it controls what access they may have to other * organizations. Only admins are allowed to see this field. */ internalAdminRole?: Maybe; /** Whether or not this user is and internal Apollo employee */ - isInternalUser: Scalars['Boolean']; - isSsoV2: Scalars['Boolean']; + isInternalUser: Scalars['Boolean']['output']; + isSsoV2: Scalars['Boolean']['output']; /** Last time any API token from this user was used against AGM services */ - lastAuthenticatedAt?: Maybe; + lastAuthenticatedAt?: Maybe; loginFlowSource?: Maybe; - logoutAfterIdleMs?: Maybe; + logoutAfterIdleMs?: Maybe; /** A list of the user's memberships in Apollo Studio organizations. */ memberships: Array; /** The user's first and last name. */ - name: Scalars['String']; + name: Scalars['String']['output']; odysseyAttempt?: Maybe; odysseyAttempts?: Maybe>; odysseyCertification?: Maybe; @@ -15029,51 +17765,51 @@ export type User = Identity & { odysseyCourse?: Maybe; odysseyCourses?: Maybe>; /** @deprecated Unused. Remove from application usage */ - odysseyHasEarlyAccess: Scalars['Boolean']; + odysseyHasEarlyAccess: Scalars['Boolean']['output']; /** @deprecated Unused. Remove from application usage */ - odysseyHasRequestedEarlyAccess: Scalars['Boolean']; + odysseyHasRequestedEarlyAccess: Scalars['Boolean']['output']; odysseyTasks?: Maybe>; sandboxOperationCollections: Array; - synchronized: Scalars['Boolean']; - /** List of Zendesk tickets this user has submitted */ - tickets?: Maybe>; + /** List of support tickets this user has submitted */ + supportTickets?: Maybe>; + synchronized: Scalars['Boolean']['output']; type: UserType; }; /** A registered Apollo Studio user. */ -export type UserapiKeysArgs = { - includeCookies?: InputMaybe; +export type UserApiKeysArgs = { + includeCookies?: InputMaybe; }; /** A registered Apollo Studio user. */ -export type UseravatarUrlArgs = { - size?: Scalars['Int']; +export type UserAvatarUrlArgs = { + size?: Scalars['Int']['input']; }; /** A registered Apollo Studio user. */ -export type UserodysseyAttemptArgs = { - id: Scalars['ID']; +export type UserOdysseyAttemptArgs = { + id: Scalars['ID']['input']; }; /** A registered Apollo Studio user. */ -export type UserodysseyCertificationArgs = { - certificationId: Scalars['ID']; +export type UserOdysseyCertificationArgs = { + certificationId: Scalars['ID']['input']; }; /** A registered Apollo Studio user. */ -export type UserodysseyCourseArgs = { - courseId: Scalars['ID']; +export type UserOdysseyCourseArgs = { + courseId: Scalars['ID']['input']; }; /** A registered Apollo Studio user. */ -export type UserodysseyTasksArgs = { - in?: InputMaybe>; +export type UserOdysseyTasksArgs = { + in?: InputMaybe>; }; /** @@ -15083,11 +17819,11 @@ export type UserodysseyTasksArgs = { export type UserApiKey = ApiKey & { __typename?: 'UserApiKey'; /** The API key's ID. */ - id: Scalars['ID']; + id: Scalars['ID']['output']; /** The API key's name, for distinguishing it from other keys. */ - keyName?: Maybe; + keyName?: Maybe; /** The value of the API key. **This is a secret credential!** */ - token: Scalars['String']; + token: Scalars['String']['output']; }; /** A single user's membership in a single Apollo Studio organization. */ @@ -15096,18 +17832,23 @@ export type UserMembership = { /** The organization that the user belongs to. */ account: Account; /** The timestamp when the user was added to the organization. */ - createdAt: Scalars['Timestamp']; - /** The user's permission level within the organization. */ + createdAt: Scalars['Timestamp']['output']; + /** + * The user's permission level within the organization. + * @deprecated Use role instead. + */ permission: UserPermission; + /** The user's role within the organization'. */ + role: UserPermission; /** The user that belongs to the organization. */ user: User; }; export type UserMutation = { __typename?: 'UserMutation'; - acceptPrivacyPolicy?: Maybe; + acceptPrivacyPolicy?: Maybe; /** Change the user's password */ - changePassword?: Maybe; + changePassword?: Maybe; completeOdysseyAttempt?: Maybe; createOdysseyAttempt?: Maybe; createOdysseyCertification?: Maybe; @@ -15120,7 +17861,7 @@ export type UserMutation = { deleteOdysseyCourse?: Maybe; deleteOdysseyTasks: Array>; /** Hard deletes the associated user. Throws an error otherwise with reason included. */ - hardDelete?: Maybe; + hardDelete?: Maybe; /** Creates a new user API key for this user. */ newKey: UserApiKey; /** @@ -15131,16 +17872,16 @@ export type UserMutation = { /** Refresh information about the user from its upstream service (e.g. list of organizations from GitHub) */ refresh?: Maybe; /** Deletes the user API key with the provided ID, if any. */ - removeKey?: Maybe; + removeKey?: Maybe; /** Sets a new name for the user API key with the provided ID, if any. This does not invalidate the key or change its value. */ renameKey?: Maybe; - resendVerificationEmail?: Maybe; + resendVerificationEmail?: Maybe; setOdysseyCourse?: Maybe; setOdysseyCourseLanguage: OdysseyCourse; setOdysseyResponse?: Maybe; setOdysseyTask?: Maybe; - /** Submit a zendesk ticket for this user */ - submitZendeskTicket?: Maybe; + /** Submit a support ticket for this user */ + submitSupportTicket?: Maybe; /** Update information about a user; all arguments are optional */ update?: Maybe; /** Updates this users' preference concerning opting into beta features. */ @@ -15160,148 +17901,146 @@ export type UserMutation = { }; -export type UserMutationchangePasswordArgs = { - newPassword: Scalars['String']; - previousPassword: Scalars['String']; +export type UserMutationChangePasswordArgs = { + newPassword: Scalars['String']['input']; + previousPassword: Scalars['String']['input']; }; -export type UserMutationcompleteOdysseyAttemptArgs = { - id: Scalars['ID']; - pass: Scalars['Boolean']; +export type UserMutationCompleteOdysseyAttemptArgs = { + id: Scalars['ID']['input']; + pass: Scalars['Boolean']['input']; responses: Array; }; -export type UserMutationcreateOdysseyAttemptArgs = { - testId: Scalars['String']; +export type UserMutationCreateOdysseyAttemptArgs = { + testId: Scalars['String']['input']; }; -export type UserMutationcreateOdysseyCertificationArgs = { - certificationId: Scalars['String']; - source?: InputMaybe; +export type UserMutationCreateOdysseyCertificationArgs = { + certificationId: Scalars['String']['input']; + source?: InputMaybe; }; -export type UserMutationcreateOdysseyCoursesArgs = { +export type UserMutationCreateOdysseyCoursesArgs = { courses: Array; }; -export type UserMutationcreateOdysseyTasksArgs = { +export type UserMutationCreateOdysseyTasksArgs = { tasks: Array; }; -export type UserMutationdeleteOdysseyAttemptArgs = { - id: Scalars['ID']; +export type UserMutationDeleteOdysseyAttemptArgs = { + id: Scalars['ID']['input']; }; -export type UserMutationdeleteOdysseyCertificationArgs = { - id: Scalars['ID']; +export type UserMutationDeleteOdysseyCertificationArgs = { + id: Scalars['ID']['input']; }; -export type UserMutationdeleteOdysseyCourseArgs = { - courseId: Scalars['String']; +export type UserMutationDeleteOdysseyCourseArgs = { + courseId: Scalars['String']['input']; }; -export type UserMutationdeleteOdysseyTasksArgs = { - taskIds: Array; +export type UserMutationDeleteOdysseyTasksArgs = { + taskIds: Array; }; -export type UserMutationnewKeyArgs = { - keyName: Scalars['String']; +export type UserMutationNewKeyArgs = { + keyName: Scalars['String']['input']; }; -export type UserMutationprovisionKeyArgs = { - keyName?: Scalars['String']; +export type UserMutationProvisionKeyArgs = { + keyName?: Scalars['String']['input']; }; -export type UserMutationremoveKeyArgs = { - id: Scalars['ID']; +export type UserMutationRemoveKeyArgs = { + id: Scalars['ID']['input']; }; -export type UserMutationrenameKeyArgs = { - id: Scalars['ID']; - newKeyName?: InputMaybe; +export type UserMutationRenameKeyArgs = { + id: Scalars['ID']['input']; + newKeyName?: InputMaybe; }; -export type UserMutationsetOdysseyCourseArgs = { +export type UserMutationSetOdysseyCourseArgs = { course: OdysseyCourseInput; }; -export type UserMutationsetOdysseyCourseLanguageArgs = { - courseId: Scalars['ID']; - language: Scalars['String']; +export type UserMutationSetOdysseyCourseLanguageArgs = { + courseId: Scalars['ID']['input']; + language: Scalars['String']['input']; }; -export type UserMutationsetOdysseyResponseArgs = { +export type UserMutationSetOdysseyResponseArgs = { response: OdysseyResponseInput; }; -export type UserMutationsetOdysseyTaskArgs = { - courseId?: InputMaybe; - courseLanguage?: InputMaybe; +export type UserMutationSetOdysseyTaskArgs = { + courseId?: InputMaybe; + courseLanguage?: InputMaybe; task: OdysseyTaskInput; }; -export type UserMutationsubmitZendeskTicketArgs = { - collaborators?: InputMaybe>; - email: Scalars['String']; - ticket: ZendeskTicketInput; +export type UserMutationSubmitSupportTicketArgs = { + ticket: SupportTicketInput; }; -export type UserMutationupdateArgs = { - email?: InputMaybe; - fullName?: InputMaybe; - referrer?: InputMaybe; - trackingGoogleClientId?: InputMaybe; - trackingMarketoClientId?: InputMaybe; +export type UserMutationUpdateArgs = { + email?: InputMaybe; + fullName?: InputMaybe; + referrer?: InputMaybe; + trackingGoogleClientId?: InputMaybe; + trackingMarketoClientId?: InputMaybe; userSegment?: InputMaybe; - utmCampaign?: InputMaybe; - utmMedium?: InputMaybe; - utmSource?: InputMaybe; + utmCampaign?: InputMaybe; + utmMedium?: InputMaybe; + utmSource?: InputMaybe; }; -export type UserMutationupdateBetaFeaturesOnArgs = { - betaFeaturesOn: Scalars['Boolean']; +export type UserMutationUpdateBetaFeaturesOnArgs = { + betaFeaturesOn: Scalars['Boolean']['input']; }; -export type UserMutationupdateFeatureIntrosArgs = { +export type UserMutationUpdateFeatureIntrosArgs = { newFeatureIntros?: InputMaybe; }; -export type UserMutationupdateOdysseyAttemptArgs = { - completedAt?: InputMaybe; - id: Scalars['ID']; - pass?: InputMaybe; +export type UserMutationUpdateOdysseyAttemptArgs = { + completedAt?: InputMaybe; + id: Scalars['ID']['input']; + pass?: InputMaybe; }; -export type UserMutationupdateRoleArgs = { +export type UserMutationUpdateRoleArgs = { newRole?: InputMaybe; }; -export type UserMutationverifyEmailArgs = { - token: Scalars['String']; +export type UserMutationVerifyEmailArgs = { + token: Scalars['String']['input']; }; export enum UserPermission { @@ -15330,27 +18069,41 @@ export enum UserSegment { export type UserSettings = { __typename?: 'UserSettings'; - appNavCollapsed: Scalars['Boolean']; - autoManageVariables: Scalars['Boolean']; - id: Scalars['String']; - mockingResponses: Scalars['Boolean']; - preflightScriptEnabled: Scalars['Boolean']; + appNavCollapsed: Scalars['Boolean']['output']; + autoManageVariables: Scalars['Boolean']['output']; + id: Scalars['String']['output']; + mockingResponses: Scalars['Boolean']['output']; + preflightScriptEnabled: Scalars['Boolean']['output']; responseHints: ResponseHints; - tableMode: Scalars['Boolean']; + tableMode: Scalars['Boolean']['output']; themeName: ThemeName; }; /** Explorer user settings input */ export type UserSettingsInput = { - appNavCollapsed?: InputMaybe; - autoManageVariables?: InputMaybe; - mockingResponses?: InputMaybe; - preflightScriptEnabled?: InputMaybe; + appNavCollapsed?: InputMaybe; + autoManageVariables?: InputMaybe; + mockingResponses?: InputMaybe; + preflightScriptEnabled?: InputMaybe; responseHints?: InputMaybe; - tableMode?: InputMaybe; + tableMode?: InputMaybe; themeName?: InputMaybe; }; +export type UserTrackingInput = { + referrer?: InputMaybe; + referrerDetails?: InputMaybe; + sessionReferrer?: InputMaybe; + sessionReferrerCreatedAt?: InputMaybe; + sessionReferrerDetail?: InputMaybe; + trackingGoogleClientId?: InputMaybe; + trackingMarketoClientId?: InputMaybe; + userSegment?: InputMaybe; + utmCampaign?: InputMaybe; + utmMedium?: InputMaybe; + utmSource?: InputMaybe; +}; + export enum UserType { APOLLO = 'APOLLO', GITHUB = 'GITHUB', @@ -15366,7 +18119,7 @@ export type ValidateOperationsResult = { export type ValidationError = Error & { __typename?: 'ValidationError'; /** The error's details. */ - message: Scalars['String']; + message: Scalars['String']['output']; }; export enum ValidationErrorCode { @@ -15390,28 +18143,33 @@ export type ValidationResult = { /** The validation result's error code */ code: ValidationErrorCode; /** Description of the validation error */ - description: Scalars['String']; + description: Scalars['String']['output']; /** The operation related to this validation result */ operation: OperationDocument; /** The type of validation error thrown - warning, failure, or invalid. */ type: ValidationErrorType; }; +/** The result of a failed call to GraphVariantMutation.linkPersistedQueryList when the specified list is already linked. */ export type VariantAlreadyLinkedError = Error & { __typename?: 'VariantAlreadyLinkedError'; - message: Scalars['String']; + message: Scalars['String']['output']; }; +/** The result of a failed call to GraphVariantMutation.unlinkPersistedQueryList when the specified list isn't linked. */ export type VariantAlreadyUnlinkedError = Error & { __typename?: 'VariantAlreadyUnlinkedError'; - message: Scalars['String']; + message: Scalars['String']['output']; }; /** Variant-level configuration of checks. */ export type VariantCheckConfiguration = { __typename?: 'VariantCheckConfiguration'; /** Time when the check configuration was created. */ - createdAt: Scalars['Timestamp']; + createdAt: Scalars['Timestamp']['output']; + customChecksConfig: VariantCheckConfigurationCustomChecks; + /** Operation checks configuration that allows associated checks to be downgraded from failure to passing. */ + downgradeChecksConfig: VariantCheckConfigurationDowngradeChecks; /** * Downstream checks configuration for which downstream variants should affect this variant's check * status. @@ -15422,23 +18180,54 @@ export type VariantCheckConfiguration = { /** Operation checks configuration for which operation to ignore. */ excludedOperationsConfig: VariantCheckConfigurationExcludedOperations; /** Graph that this check configuration belongs to */ - graphID: Scalars['String']; + graphID: Scalars['String']['output']; /** Graph variant that this check configuration belongs to */ - graphVariant: Scalars['String']; + graphVariant: Scalars['String']['output']; /** ID of the check configuration */ - id: Scalars['ID']; + id: Scalars['ID']['output']; /** Operation checks configuration for which variants' metrics data to include. */ includedVariantsConfig: VariantCheckConfigurationIncludedVariants; /** Whether operations checks are enabled. */ - operationsChecksEnabled: Scalars['Boolean']; + operationsChecksEnabled: Scalars['Boolean']['output']; + /** How submitted build input diffs are handled when they match (or don't) a Proposal at the variant level */ + proposalChangeMismatchSeverityConfig: VariantCheckConfigurationProposalChangeMismatchSeverity; /** Operation checks configuration for time range and associated thresholds. */ timeRangeConfig: VariantCheckConfigurationTimeRange; /** Time when the check configuration was updated. */ - updatedAt: Scalars['Timestamp']; + updatedAt: Scalars['Timestamp']['output']; /** Identity of the last actor to update the check configuration, if available. */ updatedBy?: Maybe; }; +export type VariantCheckConfigurationCustomChecks = { + __typename?: 'VariantCheckConfigurationCustomChecks'; + /** ID of the check configuration */ + checkConfigurationId: Scalars['ID']['output']; + /** Whether custom checks is enabled for this variant. Non-null if useGraphSettings is false, otherwise null. */ + enableCustomChecks?: Maybe; + /** When true, indicates that graph-level configuration is used for this variant setting. The default at variant creation is true. */ + useGraphSettings: Scalars['Boolean']['output']; +}; + +export type VariantCheckConfigurationDowngradeChecks = { + __typename?: 'VariantCheckConfigurationDowngradeChecks'; + /** + * During operation checks, if this option is enabled, the check will not fail or mark any operations as + * broken/changed if the default value has changed, only if the default value is removed completely. + */ + downgradeDefaultValueChange?: Maybe; + /** + * During operation checks, if this option is enabled, it evaluates a check run against zero operations + * as a pass instead of a failure. + */ + downgradeStaticChecks?: Maybe; + /** + * When true, indicates that graph-level configuration is used for this variant setting. The default + * at variant creation is true. + */ + useGraphSettings: Scalars['Boolean']['output']; +}; + export type VariantCheckConfigurationDownstreamVariants = { __typename?: 'VariantCheckConfigurationDownstreamVariants'; /** @@ -15446,7 +18235,7 @@ export type VariantCheckConfigurationDownstreamVariants = { * workflows for variants to complete, and if any of them fail, then * this variant's check workflow will fail. */ - blockingDownstreamVariants: Array; + blockingDownstreamVariants: Array; }; export type VariantCheckConfigurationExcludedClients = { @@ -15455,7 +18244,7 @@ export type VariantCheckConfigurationExcludedClients = { * When true, indicates that graph-level configuration is appended to the variant-level * configuration. The default at variant creation is true. */ - appendGraphSettings: Scalars['Boolean']; + appendGraphSettings: Scalars['Boolean']['output']; /** * During operation checks, ignore clients matching any of the filters. The * default at variant creation is the empty list. @@ -15469,7 +18258,7 @@ export type VariantCheckConfigurationExcludedOperations = { * When true, indicates that graph-level configuration is appended to the variant-level * configuration. The default at variant creation is true. */ - appendGraphSettings: Scalars['Boolean']; + appendGraphSettings: Scalars['Boolean']['output']; /** * During operation checks, ignore operations matching any of the filters. * The default at variant creation is the empty list. @@ -15488,12 +18277,20 @@ export type VariantCheckConfigurationIncludedVariants = { * During operation checks, fetch operations from the metrics data for variants. * Non-null if useGraphSettings is false and is otherwise null. */ - includedVariants?: Maybe>; + includedVariants?: Maybe>; /** * When true, indicates that graph-level configuration is used for this variant setting. The default * at variant creation is true. */ - useGraphSettings: Scalars['Boolean']; + useGraphSettings: Scalars['Boolean']['output']; +}; + +export type VariantCheckConfigurationProposalChangeMismatchSeverity = { + __typename?: 'VariantCheckConfigurationProposalChangeMismatchSeverity'; + /** How submitted build input diffs are handled when they match (or don't) a Proposal. Non-null if useGraphSettings is false and is otherwise null. */ + proposalChangeMismatchSeverity?: Maybe; + /** When true, indicates that graph-level configuration is used for this variant setting. The default at variant creation is true. */ + useGraphSettings: Scalars['Boolean']['output']; }; export type VariantCheckConfigurationTimeRange = { @@ -15502,75 +18299,60 @@ export type VariantCheckConfigurationTimeRange = { * During operation checks, ignore operations that executed less than * times in the time range. Non-null if useGraphSettings is false and is otherwise null. */ - operationCountThreshold?: Maybe; + operationCountThreshold?: Maybe; /** * Duration operation checks, ignore operations that constituted less than * % of the operations in the time range. Expected values are * between 0% and 5%. Non-null if useGraphSettings is false and is otherwise null. */ - operationCountThresholdPercentage?: Maybe; + operationCountThresholdPercentage?: Maybe; /** * During operation checks, fetch operations from the last seconds. Non-null if * useGraphSettings is false and is otherwise null. */ - timeRangeSeconds?: Maybe; + timeRangeSeconds?: Maybe; /** * When true, indicates that graph-level configuration is used for this variant setting. The default * at variant creation is true. */ - useGraphSettings: Scalars['Boolean']; + useGraphSettings: Scalars['Boolean']['output']; }; export type VariantCreationConfig = { buildConfigInput: BuildConfigInput; - endpointSlug?: InputMaybe; - variantName: Scalars['String']; + endpointSlug?: InputMaybe; + variantName: Scalars['String']['input']; }; +export enum ViolationLevel { + ERROR = 'ERROR', + INFO = 'INFO', + WARNING = 'WARNING' +} + /** Webhook notification channel */ export type WebhookChannel = Channel & { __typename?: 'WebhookChannel'; - id: Scalars['ID']; - name: Scalars['String']; - secretToken?: Maybe; + id: Scalars['ID']['output']; + name: Scalars['String']['output']; + /** List of the Schema Proposal Lifecycle Subscriptions this Channel is subscribed to. */ + proposalLifecycleSubscriptions: Array; + secretToken?: Maybe; + /** List of the subscriptions this channel is subscribed to, except for ProposalLifecycleSubscriptions. */ subscriptions: Array; - url: Scalars['String']; + url: Scalars['String']['output']; }; /** PagerDuty notification channel parameters */ export type WebhookChannelInput = { - name?: InputMaybe; - secretToken?: InputMaybe; - url: Scalars['String']; -}; - -export type ZendeskTicket = { - __typename?: 'ZendeskTicket'; - createdAt: Scalars['Timestamp']; - description: Scalars['String']; - graph?: Maybe; - id: Scalars['Int']; - organization?: Maybe; - priority: TicketPriority; - status?: Maybe; - subject: Scalars['String']; - user?: Maybe; -}; - -/** Zendesk ticket input */ -export type ZendeskTicketInput = { - description: Scalars['String']; - graphId?: InputMaybe; - graphType?: InputMaybe; - organizationId?: InputMaybe; - priority: TicketPriority; - subject: Scalars['String']; - uploadToken?: InputMaybe; + name?: InputMaybe; + secretToken?: InputMaybe; + url: Scalars['String']['input']; }; export type SchemaReportMutationVariables = Exact<{ report: SchemaReport; - coreSchema?: InputMaybe; + coreSchema?: InputMaybe; }>; diff --git a/packages/server/src/plugin/schemaReporting/schemaReporter.ts b/packages/server/src/plugin/schemaReporting/schemaReporter.ts index d9554b7514f..56ab52b7dd7 100644 --- a/packages/server/src/plugin/schemaReporting/schemaReporter.ts +++ b/packages/server/src/plugin/schemaReporting/schemaReporter.ts @@ -1,4 +1,3 @@ -import fetch from 'node-fetch'; import type { GraphQLRequest } from '../../externalTypes/index.js'; import type { Logger } from '@apollo/utils.logger'; import type { diff --git a/packages/server/src/plugin/subscriptionCallback/index.ts b/packages/server/src/plugin/subscriptionCallback/index.ts index a501ab07cef..a2cadf00d7b 100644 --- a/packages/server/src/plugin/subscriptionCallback/index.ts +++ b/packages/server/src/plugin/subscriptionCallback/index.ts @@ -1,7 +1,8 @@ +import { type FetcherResponse, type Fetcher } from '@apollo/utils.fetcher'; import type { Logger } from '@apollo/utils.logger'; import retry from 'async-retry'; import { subscribe, type ExecutionResult, type GraphQLError } from 'graphql'; -import fetch, { type Response } from 'node-fetch'; +import { setImmediate } from 'node:timers/promises'; import { ensureError, ensureGraphQLError } from '../../errorNormalize.js'; import type { ApolloServerPlugin } from '../../externalTypes/index.js'; import { HeaderMap } from '../../utils/HeaderMap.js'; @@ -10,6 +11,10 @@ export interface ApolloServerPluginSubscriptionCallbackOptions { maxConsecutiveHeartbeatFailures?: number; logger?: Logger; retry?: retry.Options; + /** + * Specifies which Fetch API implementation to use for the callback URL. + */ + fetcher?: Fetcher; } export function ApolloServerPluginSubscriptionCallback( @@ -186,6 +191,10 @@ export function ApolloServerPluginSubscriptionCallback( 'Server is shutting down. Cleaning up outstanding subscriptions and heartbeat intervals', ); await subscriptionManager.cleanup(); + // This setImmediate makes the precise timing of the log line below + // consistent between when we run our test suite with GraphQL.js v16 + // and v17.0.0-alpha.9. + await setImmediate(); logger?.debug( 'Successfully cleaned up outstanding subscriptions and heartbeat intervals.', ); @@ -226,6 +235,7 @@ class SubscriptionManager { subscription?: SubscriptionObject; } > = new Map(); + private fetcher: Fetcher; constructor(options: ApolloServerPluginSubscriptionCallbackOptions) { this.maxConsecutiveHeartbeatFailures = @@ -239,6 +249,7 @@ class SubscriptionManager { this.logger = options.logger ? prefixedLogger(options.logger, 'SubscriptionManager') : undefined; + this.fetcher = options.fetcher ?? fetch; } async retryFetch({ @@ -258,16 +269,16 @@ class SubscriptionManager { errors?: readonly GraphQLError[]; headers?: Record; }) { - let response: Promise | undefined; + let response: Promise | undefined; try { const maybeWithErrors = errors?.length ? ` with errors` : ''; this.logger?.debug( `Sending \`${action}\` request to router` + maybeWithErrors, id, ); - return retry( + return retry( async (bail) => { - response = fetch(url, { + response = this.fetcher(url, { method: 'POST', headers: { 'content-type': 'application/json', @@ -386,7 +397,7 @@ class SubscriptionManager { let consecutiveHeartbeatFailureCount = 0; const heartbeatInterval = setInterval(async () => { - let heartbeatRequest: Promise | undefined; + let heartbeatRequest: Promise | undefined; // XXX since we're on an interval, it's possible a heartbeat goes out // before the previous heartbeat has finished. It seems reasonable to @@ -426,7 +437,7 @@ class SubscriptionManager { `Sending \`check\` request to ${callbackUrl} for ID: ${id}`, ); - heartbeatRequest = fetch(callbackUrl, { + heartbeatRequest = this.fetcher(callbackUrl, { method: 'POST', body: JSON.stringify({ kind: 'subscription', diff --git a/packages/server/src/plugin/usageReporting/defaultSendOperationsAsTrace.ts b/packages/server/src/plugin/usageReporting/defaultSendOperationsAsTrace.ts index e49af9064ac..e68b80a2c8d 100644 --- a/packages/server/src/plugin/usageReporting/defaultSendOperationsAsTrace.ts +++ b/packages/server/src/plugin/usageReporting/defaultSendOperationsAsTrace.ts @@ -1,4 +1,4 @@ -import LRUCache from 'lru-cache'; +import { LRUCache } from 'lru-cache'; import type { Trace } from '@apollo/usage-reporting-protobuf'; import { iterateOverTrace } from './iterateOverTrace.js'; import { DurationHistogram } from './durationHistogram.js'; diff --git a/packages/server/src/plugin/usageReporting/operationDerivedDataCache.ts b/packages/server/src/plugin/usageReporting/operationDerivedDataCache.ts index 1eb167fc0c9..ee737c15e2e 100644 --- a/packages/server/src/plugin/usageReporting/operationDerivedDataCache.ts +++ b/packages/server/src/plugin/usageReporting/operationDerivedDataCache.ts @@ -1,6 +1,6 @@ import type { Logger } from '@apollo/utils.logger'; import type { ReferencedFieldsByType } from '@apollo/utils.usagereporting'; -import LRUCache from 'lru-cache'; +import { LRUCache } from 'lru-cache'; export interface OperationDerivedData { signature: string; diff --git a/packages/server/src/plugin/usageReporting/plugin.ts b/packages/server/src/plugin/usageReporting/plugin.ts index e241a5c9650..8b4740b2ec7 100644 --- a/packages/server/src/plugin/usageReporting/plugin.ts +++ b/packages/server/src/plugin/usageReporting/plugin.ts @@ -7,9 +7,7 @@ import { } from '@apollo/utils.usagereporting'; import retry from 'async-retry'; import { type GraphQLSchema, printSchema } from 'graphql'; -import type LRUCache from 'lru-cache'; -import { AbortController } from 'node-abort-controller'; -import fetch from 'node-fetch'; +import { type LRUCache } from 'lru-cache'; import os from 'os'; import { gzip } from 'zlib'; import type { @@ -53,10 +51,6 @@ export function ApolloServerPluginUsageReporting( null, ), ): ApolloServerPlugin { - // Note: We'd like to change the default to false in Apollo Server 4, so that - // the default usage reporting experience doesn't include *anything* that - // could potentially be PII (like error messages) --- just operations and - // numbers. const fieldLevelInstrumentationOption = options.fieldLevelInstrumentation; const fieldLevelInstrumentation = typeof fieldLevelInstrumentationOption === 'number' @@ -317,33 +311,22 @@ export function ApolloServerPluginUsageReporting( // Retry on network errors and 5xx HTTP // responses. async () => { - // Note that once we require Node v16 we can use its global - // AbortController instead of the one from `node-abort-controller`. - const controller = new AbortController(); - const abortTimeout = setTimeout(() => { - controller.abort(); - }, options.requestTimeoutMs ?? 30_000); - let curResponse; - try { - curResponse = await fetcher( - (options.endpointUrl || - 'https://usage-reporting.api.apollographql.com') + - '/api/ingress/traces', - { - method: 'POST', - headers: { - 'user-agent': 'ApolloServerPluginUsageReporting', - 'x-api-key': key, - 'content-encoding': 'gzip', - accept: 'application/json', - }, - body: compressed, - signal: controller.signal, + const curResponse = await fetcher( + (options.endpointUrl || + 'https://usage-reporting.api.apollographql.com') + + '/api/ingress/traces', + { + method: 'POST', + headers: { + 'user-agent': 'ApolloServerPluginUsageReporting', + 'x-api-key': key, + 'content-encoding': 'gzip', + accept: 'application/json', }, - ); - } finally { - clearTimeout(abortTimeout); - } + body: compressed, + signal: AbortSignal.timeout(options.requestTimeoutMs ?? 30_000), + }, + ); if (curResponse.status >= 500 && curResponse.status < 600) { throw new Error( diff --git a/packages/server/src/requestPipeline.ts b/packages/server/src/requestPipeline.ts index adfe0683b77..61e92d7a067 100644 --- a/packages/server/src/requestPipeline.ts +++ b/packages/server/src/requestPipeline.ts @@ -77,13 +77,21 @@ function computeQueryHash(query: string) { type Mutable = { -readonly [P in keyof T]: T[P] }; +// Once GraphQL-JS v17 is released and we make a version of Apollo Server that +// requires it, we can drop this hack, because it lets us break the `execute` +// API into two steps and validate user input explicitly first. function isBadUserInputGraphQLError(error: GraphQLError): boolean { return ( error.nodes?.length === 1 && error.nodes[0].kind === Kind.VARIABLE_DEFINITION && + // GraphQL-JS v17 alpha wording (error.message.startsWith( - `Variable "$${error.nodes[0].variable.name.value}" got invalid value `, + `Variable "$${error.nodes[0].variable.name.value}" has invalid value`, ) || + // GraphQL-JS v16 wording + error.message.startsWith( + `Variable "$${error.nodes[0].variable.name.value}" got invalid value `, + ) || error.message.startsWith( `Variable "$${error.nodes[0].variable.name.value}" of required type `, ) || @@ -484,9 +492,7 @@ export async function processGraphQLRequest( ? formatErrors(resultErrors) : { formattedErrors: undefined, httpFromErrors: newHTTPGraphQLHead() }; - // TODO(AS5) This becomes the default behavior and the - // `status400ForVariableCoercionErrors` configuration option is removed / - // ignored. + // TODO(AS6): remove `status400ForVariableCoercionErrors` if ( internals.status400ForVariableCoercionErrors && resultErrors?.length && diff --git a/packages/server/src/standalone/index.ts b/packages/server/src/standalone/index.ts index e33e3b00304..07d68a27279 100644 --- a/packages/server/src/standalone/index.ts +++ b/packages/server/src/standalone/index.ts @@ -1,22 +1,20 @@ import type { WithRequired } from '@apollo/utils.withrequired'; import cors from 'cors'; -import express from 'express'; +import bodyParser from 'body-parser'; import http, { type IncomingMessage, type ServerResponse } from 'http'; import type { ListenOptions } from 'net'; +import { parse as urlParse } from 'url'; import type { ApolloServer } from '../ApolloServer.js'; -import { expressMiddleware } from '../express4/index.js'; -import type { BaseContext, ContextFunction } from '../externalTypes/index.js'; +import type { + BaseContext, + ContextFunction, + HTTPGraphQLRequest, +} from '../externalTypes/index.js'; import { ApolloServerPluginDrainHttpServer } from '../plugin/drainHttpServer/index.js'; import { urlForHttpServer } from '../utils/urlForHttpServer.js'; +import { HeaderMap } from '../utils/HeaderMap.js'; +import finalhandler from 'finalhandler'; -// Note that while we do use express and expressMiddleware to implement the -// standalone server, this is an internal implementation detail. We could -// rewrite this to have no dependencies other than the core http package. -// Because of this, our TypeScript types encourage users to only use -// functionality of `req` and `res` that are part of the core http -// implementations rather than the Express-specific subclasses; if you need -// typesafe access to Express-specific properties, just use expressMiddleware -// directly. export interface StandaloneServerContextFunctionArgument { req: IncomingMessage; res: ServerResponse; @@ -45,8 +43,78 @@ export async function startStandaloneServer( server: ApolloServer, options?: StartStandaloneServerOptions & { listen?: ListenOptions }, ): Promise<{ url: string }> { - const app: express.Express = express(); - const httpServer: http.Server = http.createServer(app); + const context = options?.context ?? (async () => ({}) as TContext); + const corsHandler = cors(); + const jsonHandler = bodyParser.json({ limit: '50mb' }); + const httpServer = http.createServer((req, res) => { + const errorHandler = finalhandler(req, res, { + // Use the same onerror as Express. + onerror(err) { + if (process.env.NODE_ENV !== 'test') { + console.error(err.stack || err.toString()); + } + }, + }); + + corsHandler(req, res, (err) => { + if (err) { + errorHandler(err); + return; + } + jsonHandler(req, res, (err) => { + if (err) { + errorHandler(err); + return; + } + + const headers = new HeaderMap(); + for (const [key, value] of Object.entries(req.headers)) { + if (value !== undefined) { + // Node headers can be an array or a single value. We join + // multi-valued headers with `, ` just like the Fetch API's `Headers` + // does. We assume that keys are already lower-cased (as per the Node + // docs on IncomingMessage.headers) and so we don't bother to lower-case + // them or combine across multiple keys that would lower-case to the + // same value. + headers.set(key, Array.isArray(value) ? value.join(', ') : value); + } + } + + const httpGraphQLRequest: HTTPGraphQLRequest = { + // Note that method and url are guaranteed to exist for IncomingMessages coming from Servers. + method: req.method!.toUpperCase(), + headers, + search: urlParse(req.url!).search ?? '', + body: 'body' in req ? req.body : undefined, + }; + + server + .executeHTTPGraphQLRequest({ + httpGraphQLRequest, + context: () => context({ req, res }), + }) + .then(async (httpGraphQLResponse) => { + for (const [key, value] of httpGraphQLResponse.headers) { + res.setHeader(key, value); + } + res.statusCode = httpGraphQLResponse.status || 200; + + if (httpGraphQLResponse.body.kind === 'complete') { + res.end(httpGraphQLResponse.body.string); + return; + } + + for await (const chunk of httpGraphQLResponse.body.asyncIterator) { + res.write(chunk); + } + res.end(); + }) + .catch((err) => { + errorHandler(err); + }); + }); + }); + }); server.addPlugin( ApolloServerPluginDrainHttpServer({ httpServer: httpServer }), @@ -54,13 +122,6 @@ export async function startStandaloneServer( await server.start(); - const context = options?.context ?? (async () => ({}) as TContext); - app.use( - cors(), - express.json({ limit: '50mb' }), - expressMiddleware(server, { context }), - ); - const listenOptions = options?.listen ?? { port: 4000 }; // Wait for server to start listening await new Promise((resolve) => { diff --git a/packages/server/src/utils/makeGatewayGraphQLRequestContext.ts b/packages/server/src/utils/makeGatewayGraphQLRequestContext.ts index 87467af2b04..e9b41a237f3 100644 --- a/packages/server/src/utils/makeGatewayGraphQLRequestContext.ts +++ b/packages/server/src/utils/makeGatewayGraphQLRequestContext.ts @@ -15,20 +15,20 @@ import type { HeaderMap } from './HeaderMap'; // Apollo Gateway's API included `GraphQLRequestContext` from AS2/AS3. // Specifically, a request context is passed to the main executor method, which // it then exposes to user-configurable `GraphQLDataSource`s. -// `GraphQLRequestContext` has changed in incompatible ways in AS4; for example, +// `GraphQLRequestContext` has changed in incompatible ways since AS4; for example, // we represent HTTP messages using our own data structures rather than Fetches, // and some fields have been removed because they relate to features that don't // exist any more. // // In general, the future of Apollo's development is in Apollo Router, not // Gateway. So rather than have a big transition where a new version of Gateway -// supports AS4's GraphQLRequestContext instead of AS3's, we simply teach AS4 +// supports AS5's GraphQLRequestContext instead of AS3's, we simply teach AS5 // how to produce AS3-style GraphQLRequestContext objects specifically for use // by Gateway. We have changed Gateway to get its TS type definitions from a new // package rather than from AS3 itself, so that Gateway no longer needs to // depend on Apollo Server. // -// This function turn an AS4 GraphQLRequestContext into a +// This function turns an AS5 GraphQLRequestContext into a // GatewayGraphQLRequestContext (which is basically an AS3 // GraphQLRequestContext). // @@ -49,10 +49,10 @@ import type { HeaderMap } from './HeaderMap'; // The only two fields not declared as readonly are `logger` and `debug`. // // Technically, a gateway implementation could set `requestContext.logger` to a -// different Logger without breaking the TypeScript declarations. In AS4 we +// different Logger without breaking the TypeScript declarations. In AS5 we // don't actually have a requestContext.logger; we have `readonly // requestContext.server` and `readonly server.logger`. So there's not an easy -// way for us to carry out this change: AS4 just doesn't let gateway or plugins +// way for us to carry out this change: AS5 just doesn't let gateway or plugins // override the server's logger (and generally doesn't allow the logger to // change after the server is created), which seems like a simpler model. If it // turns out there is a real use case for the gateway to be able to change the @@ -63,14 +63,14 @@ import type { HeaderMap } from './HeaderMap'; // `includeStacktraceInErrorResponses`. So perhaps this could be used to let you // decide whether or not to include the stacktrace on a per-operation basis... // but you can also use `formatError` or `didEncounterErrors` for this perhaps? -// In any case, AS4 doesn't track `includeStacktraceInErrorResponses` on a +// In any case, AS5 doesn't track `includeStacktraceInErrorResponses` on a // per-operation basis; if we find a use case for this we can add it later. // // So we'll just ignore changes to `logger` and `debug`. // // Next, there's `request`. We don't know of a use case for mutating the // *request* at execution time. If there was a real use case, we could add a -// function that copies pieces back from the gateway `request` to the AS4 +// function that copies pieces back from the gateway `request` to the AS5 // request, but we're not bothering to yet. // // Finally, there's `response`. Sure, the executor *could* mutate `response`. @@ -83,48 +83,48 @@ import type { HeaderMap } from './HeaderMap'; // // So all in all, it looks like it's OK for this to be a "one-way" conversion. export function makeGatewayGraphQLRequestContext( - as4RequestContext: GraphQLRequestContextExecutionDidStart, + newRequestContext: GraphQLRequestContextExecutionDidStart, server: ApolloServer, internals: ApolloServerInternals, ): GatewayGraphQLRequestContext { const request: GatewayGraphQLRequest = {}; - if ('query' in as4RequestContext.request) { - request.query = as4RequestContext.request.query; + if ('query' in newRequestContext.request) { + request.query = newRequestContext.request.query; } - if ('operationName' in as4RequestContext.request) { - request.operationName = as4RequestContext.request.operationName; + if ('operationName' in newRequestContext.request) { + request.operationName = newRequestContext.request.operationName; } - if ('variables' in as4RequestContext.request) { - request.variables = as4RequestContext.request.variables; + if ('variables' in newRequestContext.request) { + request.variables = newRequestContext.request.variables; } - if ('extensions' in as4RequestContext.request) { - request.extensions = as4RequestContext.request.extensions; + if ('extensions' in newRequestContext.request) { + request.extensions = newRequestContext.request.extensions; } - if (as4RequestContext.request.http) { - const as4http = as4RequestContext.request.http; + if (newRequestContext.request.http) { + const newHttp = newRequestContext.request.http; const needQuestion = - as4http.search !== '' && !as4http.search.startsWith('?'); + newHttp.search !== '' && !newHttp.search.startsWith('?'); request.http = { - method: as4http.method, + method: newHttp.method, // As of AS4, we no longer attempt to track complete URLs (just the search // parameters used in GET requests). So we have to fake them for Gateway. url: `https://unknown-url.invalid/${needQuestion ? '?' : ''}${ - as4http.search + newHttp.search }`, - headers: new FetcherHeadersForHeaderMap(as4http.headers), + headers: new FetcherHeadersForHeaderMap(newHttp.headers), }; } const response: GatewayGraphQLResponse = { http: { headers: new FetcherHeadersForHeaderMap( - as4RequestContext.response.http.headers, + newRequestContext.response.http.headers, ), get status() { - return as4RequestContext.response.http.status; + return newRequestContext.response.http.status; }, set status(newStatus) { - as4RequestContext.response.http.status = newStatus; + newRequestContext.response.http.status = newStatus; }, }, // We leave off `body` because it hasn't been set yet. @@ -134,31 +134,31 @@ export function makeGatewayGraphQLRequestContext( request, response, logger: server.logger, - schema: as4RequestContext.schema, + schema: newRequestContext.schema, // For the sake of typechecking, we still provide this field, but we don't // calculate it. If somebody really needs it in their gateway // implementation, they're welcome to copy // https://github.com/apollographql/apollo-server/blob/3f218e78/packages/apollo-server-core/src/utils/schemaHash.ts // into their code. schemaHash: - 'schemaHash no longer exists in Apollo Server 4' as GatewaySchemaHash, - context: as4RequestContext.contextValue, + 'schemaHash no longer exists since Apollo Server 4' as GatewaySchemaHash, + context: newRequestContext.contextValue, cache: server.cache, - queryHash: as4RequestContext.queryHash, - document: as4RequestContext.document, - source: as4RequestContext.source, - operationName: as4RequestContext.operationName, - operation: as4RequestContext.operation, - errors: as4RequestContext.errors, - metrics: as4RequestContext.metrics, + queryHash: newRequestContext.queryHash, + document: newRequestContext.document, + source: newRequestContext.source, + operationName: newRequestContext.operationName, + operation: newRequestContext.operation, + errors: newRequestContext.errors, + metrics: newRequestContext.metrics, debug: internals.includeStacktraceInErrorResponses, - overallCachePolicy: as4RequestContext.overallCachePolicy, - requestIsBatched: as4RequestContext.requestIsBatched, + overallCachePolicy: newRequestContext.overallCachePolicy, + requestIsBatched: newRequestContext.requestIsBatched, }; } // An implementation of the W3C-style headers class used by Gateway (and AS3), -// backed by AS4's HeaderMap. Changes are written directly to the HeaderMap, so +// backed by AS5's HeaderMap. Changes are written directly to the HeaderMap, so // any concurrent writes to the underlying HeaderMap (eg from a plugin) can be // seen immediately by the gateway and vice versa. class FetcherHeadersForHeaderMap implements FetcherHeaders { diff --git a/renovate.json5 b/renovate.json5 index b23493f5e09..932be8906fd 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -38,14 +38,6 @@ matchPackageNames: ["typescript"], matchUpdateTypes: ["minor"], }, - // Also, we're currently stuck at v5.4.x because v5.5 ships a lib.dom.d.ts - // that's incompatible with `@types/node@14` which we are pinning until we - // drop Node v14 support. See - // https://github.com/DefinitelyTyped/DefinitelyTyped/issues/66617 - { - matchPackageNames: ["typescript"], - allowedVersions: "5.4.x", - }, // The testsuite depends directly on the tests in `graphql-http`. // Because of this, updates to `graphql-http` affect the contents of // published packages, require a changeset, and cannot be auto-merged. @@ -64,60 +56,11 @@ matchFileNames: ["packages/integration-testsuite/package.json"], rangeStrategy: "pin", }, - // We need to support Node v14, so we don't allow ourselves to use type definitions - // that would let us write v16-specific code. + // We need to support Node v20, so we don't allow ourselves to use type definitions + // that would let us write >v20-specific code. { matchPackageNames: ["@types/node"], - allowedVersions: "14.x" - }, - // lru-cache@8 drops support for node v14. We can take this when we drop node v14 support. - { - matchPackageNames: ["lru-cache"], - allowedVersions: "7.x" - }, - // @apollo/utils@3 drop support for node v14. We can take this when we drop node v14 support. - { - matchPackageNames: ["/^@apollo/utils/"], - allowedVersions: "2.x" - }, - // @graphql-codegen@4 drops support for node v14. We can take this when we drop node v14 support. - { - matchPackageNames: ["/^@graphql-codegen/"], - allowedVersions: "3.x" - }, - // @graphql-tools/mock@8 drops support for node v14. We can take this when we drop node v14 support. - { - matchPackageNames: ["@graphql-tools/mock"], - allowedVersions: "8.x" - }, - // @graphql-tools/schema@9 drops support for node v14. We can take this when we drop node v14 support. - { - matchPackageNames: ["@graphql-tools/schema"], - allowedVersions: "9.x" - }, - // @typescript-eslint@6 drops support for node v14. We can take this when we drop node v14 support. - { - matchPackageNames: ["/^@typescript-eslint/"], - allowedVersions: "5.x" - }, - // cspell@7 drops support for node v14. We can take this when we drop node v14 support. - { - matchPackageNames: ["cspell"], - allowedVersions: "6.x", - }, - // whatwg-mimetype@4 drops support for node v14. We can take this when we drop node v14 support. - { - matchPackageNames: ["whatwg-mimetype"], - allowedVersions: "3.x", - }, - // node-fetch v3 only ships as ESM. We currently build as both CommonJS and - // ESM, so let's stay on v2. - // (Once we drop support for node older than v18, we can switch our default - // fetch implementation to be Node's built-in implementation and drop this - // very old node-fetch implementation.) - { - matchPackageNames: ["node-fetch", "@types/node-fetch"], - allowedVersions: "2.x" + allowedVersions: "20.x" }, { // Major upgrade rollup plugins along with rollup itself. @@ -125,61 +68,10 @@ matchUpdateTypes: ["major"], groupName: "rollup", }, - // rollup@4 drops support for node v14. We can take this when we drop node v14 support. - { - matchPackageNames: ["rollup"], - allowedVersions: "3.x", - }, - // eslint@9 drops support for node v14. We can take this when we drop node v14 support. - { - matchPackageNames: ["eslint"], - allowedVersions: "8.x", - }, - // uuid@10 drops support for node v14. We can take this when we drop node - // v14 support. (This isn't in the engines property, but they made this - // change in https://github.com/uuidjs/uuid/pull/750 and then later started - // using the new-in-v16 `??=` operator.) - { - matchPackageNames: ["uuid", "@types/uuid"], - allowedVersions: "9.x", - }, - // negotiator@1 drops support for node v14. We can take this when we drop node v14 support. - { - matchPackageNames: ["negotiator"], - allowedVersions: "0.x", - }, - // npm@10 drops support for node v14. We can take this when we drop node v14 support. - { - matchPackageNames: ["npm"], - allowedVersions: "9.x", - }, - // ts-jest@29.3.0 adds a dependency on `type-fest` which drops support for node v14. - // We can take this when we drop node v14 support. - { - matchPackageNames: ["ts-jest"], - allowedVersions: "29.2.x", - }, - // nock@14 drops support for node v14 and v16. We can take this when we drop - // node v16 support. - { - matchPackageNames: ["nock"], - allowedVersions: "13.x", - }, - // We specifically provide a first-party integration (`expressMiddleware` - // imported from `@apollo/server/express4`) for Express v4 because it is the - // most common web framework. (Additionally, as an internal implementation - // detail, it is what powers `startStandaloneServer`, though users of that - // function should not rely on anything other than that it uses standard - // Node `http` request and response objects.) It is easy to build - // integrations for other web servers, including Express v5, which is not - // yet as popular as Express v4. So we don't plan to provide a built-in - // Express v5 implementation any time soon (most likely as part of a new - // major version); we appreciate the simplicity of a build system that only - // installs one version of any given practice. See - // https://github.com/apollographql/apollo-server/issues/7928. + // Only needed until Jest supports prettier@3 for snapshots { - matchPackageNames: ["express", "@types/express", "@types/express-serve-static-core"], - allowedVersions: "4.x", + "matchPackageNames": ["prettier-2"], + "allowedVersions": "2.x" }, ] } diff --git a/smoke-test/gateway-compatibility/tsconfig.json b/smoke-test/gateway-compatibility/tsconfig.json index e02e032c0b1..caf90efecf8 100644 --- a/smoke-test/gateway-compatibility/tsconfig.json +++ b/smoke-test/gateway-compatibility/tsconfig.json @@ -7,6 +7,7 @@ "outDir": "generated/tsc", "module": "esnext", "moduleResolution": "node", + "target": "ES2015", "esModuleInterop": true, "strict": true, }, diff --git a/smoke-test/nodenext/tsconfig.json b/smoke-test/nodenext/tsconfig.json index 5ad087a66cb..666191c5a9e 100644 --- a/smoke-test/nodenext/tsconfig.json +++ b/smoke-test/nodenext/tsconfig.json @@ -4,8 +4,8 @@ "outDir": "./dist", "module": "NodeNext", "moduleResolution": "nodenext", - "target": "es2020", - "lib": ["es2020"], + "target": "es2021", + "lib": ["es2021"], "types": ["node"] } } diff --git a/smoke-test/package-lock.json b/smoke-test/package-lock.json deleted file mode 100644 index f0c64bc2642..00000000000 --- a/smoke-test/package-lock.json +++ /dev/null @@ -1,1431 +0,0 @@ -{ - "name": "smoke-test", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "dependencies": { - "graphql": "16.11.0", - "make-fetch-happen": "14.0.3" - }, - "devDependencies": { - "@rollup/plugin-commonjs": "28.0.6", - "@rollup/plugin-json": "6.1.0", - "@rollup/plugin-node-resolve": "16.0.1", - "@types/make-fetch-happen": "10.0.4", - "rollup": "3.29.5" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/fs-minipass": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", - "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", - "license": "ISC", - "dependencies": { - "minipass": "^7.0.4" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@npmcli/agent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", - "integrity": "sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==", - "license": "ISC", - "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.3" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/fs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", - "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", - "license": "ISC", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@rollup/plugin-commonjs": { - "version": "28.0.6", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.6.tgz", - "integrity": "sha512-XSQB1K7FUU5QP+3lOQmVCE3I0FcbbNvmNT4VJSj93iUjayaARrTQeoRdiYQoftAJBLrR9t2agwAd3ekaTgHNlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "commondir": "^1.0.1", - "estree-walker": "^2.0.2", - "fdir": "^6.2.0", - "is-reference": "1.2.1", - "magic-string": "^0.30.3", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=16.0.0 || 14 >= 14.17" - }, - "peerDependencies": { - "rollup": "^2.68.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-commonjs/node_modules/fdir": { - "version": "6.4.6", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", - "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-commonjs/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/@rollup/plugin-json": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", - "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.1.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.1.tgz", - "integrity": "sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.78.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", - "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@types/estree": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.2.tgz", - "integrity": "sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==", - "dev": true - }, - "node_modules/@types/make-fetch-happen": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/@types/make-fetch-happen/-/make-fetch-happen-10.0.4.tgz", - "integrity": "sha512-jKzweQaEMMAi55ehvR1z0JF6aSVQm/h1BXBhPLOJriaeQBctjw5YbpIGs7zAx9dN0Sa2OO5bcXwCkrlgenoPEA==", - "dev": true, - "dependencies": { - "@types/node-fetch": "*", - "@types/retry": "*", - "@types/ssri": "*" - } - }, - "node_modules/@types/node": { - "version": "20.7.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.7.0.tgz", - "integrity": "sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg==", - "dev": true - }, - "node_modules/@types/node-fetch": { - "version": "2.6.6", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.6.tgz", - "integrity": "sha512-95X8guJYhfqiuVVhRFxVQcf4hW/2bCuoPwDasMf/531STFoNoWTT7YDnWdXHEZKqAGUigmpG31r2FE70LwnzJw==", - "dev": true, - "dependencies": { - "@types/node": "*", - "form-data": "^4.0.0" - } - }, - "node_modules/@types/resolve": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true - }, - "node_modules/@types/retry": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.3.tgz", - "integrity": "sha512-rkxEZUFIyDEZhC6EfHz6Hwos2zXewCOLBzhdgv7D55qu4OAySNwDZzxbaMpFI6XthdBa5oHhR5s6/9MSuTfw4g==", - "dev": true - }, - "node_modules/@types/ssri": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@types/ssri/-/ssri-7.1.2.tgz", - "integrity": "sha512-Mbo/NaBiZlXNlOFTLK+PXeVEzKFxi+ZVELuzmk4VxdRz6aqKpmP9bhcNqsIB2c/s78355WBHwUCGYhQDydcfEg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "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==", - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/cacache": { - "version": "19.0.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", - "integrity": "sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==", - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^4.0.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^10.0.1", - "minipass": "^7.0.3", - "minipass-collect": "^2.0.1", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^7.0.2", - "ssri": "^12.0.0", - "tar": "^7.4.3", - "unique-filename": "^4.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "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==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fs-minipass": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "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, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/graphql": { - "version": "16.11.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.11.0.tgz", - "integrity": "sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==", - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" - }, - "node_modules/http-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", - "license": "MIT", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true - }, - "node_modules/is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "license": "MIT" - }, - "node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, - "node_modules/magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/make-fetch-happen": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz", - "integrity": "sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==", - "license": "ISC", - "dependencies": { - "@npmcli/agent": "^3.0.0", - "cacache": "^19.0.1", - "http-cache-semantics": "^4.1.1", - "minipass": "^7.0.2", - "minipass-fetch": "^4.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^1.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "ssri": "^12.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minipass-collect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", - "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minipass-fetch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-4.0.0.tgz", - "integrity": "sha512-2v6aXUXwLP1Epd/gc32HAMIWoczx+fZwEPRHm/VwtrJzRGwR1qGZXEYV3Zp8ZjjbwaZhMrM6uHV4KVkk+XCc2w==", - "license": "MIT", - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^3.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.1.tgz", - "integrity": "sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==", - "license": "MIT", - "dependencies": { - "minipass": "^7.0.4", - "rimraf": "^5.0.5" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/p-map": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.2.tgz", - "integrity": "sha512-z4cYYMMdKHzw4O5UkWJImbZynVIo0lSGTXc7bzB1e/rrDqkgGUNysK/o4bTr+0+xKvvLoTyGqYC4Fgljy9qe1Q==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "license": "BlueOak-1.0.0" - }, - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/proc-log": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", - "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/resolve": { - "version": "1.22.6", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", - "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/rimraf": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", - "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", - "license": "ISC", - "dependencies": { - "glob": "^10.3.7" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "3.29.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz", - "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==", - "dev": true, - "license": "MIT", - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "optional": true - }, - "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "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==", - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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/socks": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", - "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", - "license": "MIT", - "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", - "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.1", - "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", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "license": "BSD-3-Clause" - }, - "node_modules/ssri": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-12.0.0.tgz", - "integrity": "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==", - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tar": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", - "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", - "license": "ISC", - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/unique-filename": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-4.0.0.tgz", - "integrity": "sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==", - "license": "ISC", - "dependencies": { - "unique-slug": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/unique-slug": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-5.0.0.tgz", - "integrity": "sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==", - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } -} diff --git a/smoke-test/package.json b/smoke-test/package.json index 9d57306b50d..3b62ce4238a 100644 --- a/smoke-test/package.json +++ b/smoke-test/package.json @@ -8,6 +8,6 @@ "@rollup/plugin-json": "6.1.0", "@rollup/plugin-node-resolve": "16.0.1", "@types/make-fetch-happen": "10.0.4", - "rollup": "3.29.5" + "rollup": "4.41.0" } } diff --git a/smoke-test/prepare.sh b/smoke-test/prepare.sh index a5f6b0de850..5490c315f81 100755 --- a/smoke-test/prepare.sh +++ b/smoke-test/prepare.sh @@ -18,10 +18,10 @@ npm i # Now install the tarballs we made (but don't write their paths to package.json). # And also install a graphql prerelease if we need to. -if [[ -n "${INCREMENTAL_DELIVERY_TESTS_ENABLED:-}" ]]; then +if [[ -n "${GRAPHQL_JS_VERSION:-}" ]]; then npm i --no-save --legacy-peer-deps \ "$TARBALL_DIR"/*.tgz \ - graphql@17.0.0-alpha.2 + "graphql@${GRAPHQL_JS_VERSION}" else npm i --no-save "$TARBALL_DIR"/*.tgz fi diff --git a/smoke-test/smoke-test-no-express.mjs b/smoke-test/smoke-test-no-standalone.mjs similarity index 89% rename from smoke-test/smoke-test-no-express.mjs rename to smoke-test/smoke-test-no-standalone.mjs index 0e0bff989e5..e7016dff644 100644 --- a/smoke-test/smoke-test-no-express.mjs +++ b/smoke-test/smoke-test-no-standalone.mjs @@ -18,4 +18,4 @@ assert.strictEqual(body.singleResult.data.hello, 'world'); await s.stop(); -console.log('Non-Express smoke test passed!'); +console.log('Non-Standalone smoke test passed!'); diff --git a/smoke-test/smoke-test.cjs b/smoke-test/smoke-test.cjs index b6defe08bb4..4cd4af07182 100644 --- a/smoke-test/smoke-test.cjs +++ b/smoke-test/smoke-test.cjs @@ -20,7 +20,11 @@ async function smokeTest() { const s = new ApolloServer({ typeDefs: ` - directive @defer(if: Boolean! = true, label: String) on FRAGMENT_SPREAD | INLINE_FRAGMENT + ${ + process.env.INCREMENTAL_DELIVERY_TESTS_ENABLED + ? 'directive @defer(if: Boolean! = true, label: String) on FRAGMENT_SPREAD | INLINE_FRAGMENT' + : '' + } type Query {hello:String} `, resolvers: { diff --git a/smoke-test/smoke-test.mjs b/smoke-test/smoke-test.mjs index eb592235441..5cb20d9bc48 100644 --- a/smoke-test/smoke-test.mjs +++ b/smoke-test/smoke-test.mjs @@ -16,7 +16,11 @@ await import('@apollo/server/standalone'); const s = new ApolloServer({ typeDefs: ` - directive @defer(if: Boolean! = true, label: String) on FRAGMENT_SPREAD | INLINE_FRAGMENT + ${ + process.env.INCREMENTAL_DELIVERY_TESTS_ENABLED + ? 'directive @defer(if: Boolean! = true, label: String) on FRAGMENT_SPREAD | INLINE_FRAGMENT' + : '' + } type Query {hello:String} `, resolvers: { diff --git a/smoke-test/smoke-test.sh b/smoke-test/smoke-test.sh index 32cb9e2ede5..0c81cbafcc6 100755 --- a/smoke-test/smoke-test.sh +++ b/smoke-test/smoke-test.sh @@ -10,18 +10,19 @@ node smoke-test.cjs node smoke-test.mjs -node smoke-test-no-express.mjs +node smoke-test-no-standalone.mjs # Use rollup to bundle some ESM code. We want to see that the one that doesn't -# use `@apollo/server/standalone` doesn't need to include `express`. +# use `@apollo/server/standalone` doesn't need to include npm modules only used +# by `startStandaloneServer` such as `body-parser`. ROLLUP_OUT_DIR=$(mktemp -d) npx rollup smoke-test.mjs --config rollup.config.mjs --silent --file "$ROLLUP_OUT_DIR"/bundle.mjs -npx rollup smoke-test-no-express.mjs --config rollup.config.mjs --silent --file "$ROLLUP_OUT_DIR"/bundle-no-express.mjs +npx rollup smoke-test-no-standalone.mjs --config rollup.config.mjs --silent --file "$ROLLUP_OUT_DIR"/bundle-no-standalone.mjs -# Check that the bundle that uses startStandaloneServer has this string from express: -grep 'function createApplication' "$ROLLUP_OUT_DIR"/bundle.mjs +# Check that the bundle that uses startStandaloneServer has this string from body-parser: +grep 'Create a middleware to parse JSON bodies' "$ROLLUP_OUT_DIR"/bundle.mjs # ... and that the one that doesn't, doesn't. -! grep 'function createApplication' "$ROLLUP_OUT_DIR"/bundle-no-express.mjs +! grep 'Create a middleware to parse JSON bodies' "$ROLLUP_OUT_DIR"/bundle-no-standalone.mjs # Nodenext needs its own special folder - for this test to exercise the case # we're after, we need a package.json using type: module and a bleeding edge @@ -41,14 +42,6 @@ node generated/tsc/smoke-test.mjs # Ensure that we at least type-check against a variety of versions of Apollo # Gateway. Specifically: -# - 0.50.1 is the oldest version that we try to support according to the -# migration guide -# - 0.51.0 was the last version of 0.x before we converted it to use -# `@apollo/server-gateway-interface` instead of directly depending on Apollo -# Server packages -# - 0.x lets us test against the latest released 0.x version. (Theoretically it -# would be better to pin a specific version and let Renovate update it so that -# the Renovate PRs fail instead of `main` but this is simpler for now.) # - 2.0.0 is the oldest supported version of v2. # - 2.0.5 was the last version of 2.x before we converted it to use # `@apollo/server-gateway-interface` instead of directly depending on Apollo @@ -57,18 +50,22 @@ node generated/tsc/smoke-test.mjs # would be better to pin a specific version and let Renovate update it so that # the Renovate PRs fail instead of `main` but this is simpler for now.) # -# `--no-engine-strict` is required for some of the older ones on Node 18, +# `--no-engine-strict` is required for some of the older ones on Node 18+, # because we used to really like putting `<` engine constraints on all our # packages. # +# Prior to Apollo Server 5, we also tested against various versions of Gateway +# 0.x. However, Gateway 0.x has been EOL since September 2023, so we no longer +# test against it. +# # This runs into some weird issues when we install the graphql@17 canary that # seems to just be about ending up with two copies of `graphql` installed at # different levels. For simplicity, we skip this part of the test in the canary -# job. Once graphql@17.0.0 is out we should be able to de-conditional this. -if [[ -z "${INCREMENTAL_DELIVERY_TESTS_ENABLED:-}" ]]; then +# jobs. Once graphql@17.0.0 is out we should be able to de-conditional this. +if [[ -z "${GRAPHQL_JS_VERSION:-}" ]]; then pushd gateway-compatibility - for version in 0.50.1 0.51.0 0.x 2.0.0 2.0.5 2.x; do - npm i --no-save --legacy-peer-deps --no-engine-strict "@apollo/gateway@$version" + for version in 2.0.0 2.0.5 2.x; do + npm i --no-save --no-engine-strict "@apollo/gateway@$version" npx tsc --build tsconfig.json done popd diff --git a/smoke-test/tsconfig.cjs-node16.json b/smoke-test/tsconfig.cjs-node16.json index 5aee3f59bc0..df4848ab5f8 100644 --- a/smoke-test/tsconfig.cjs-node16.json +++ b/smoke-test/tsconfig.cjs-node16.json @@ -6,6 +6,7 @@ "outDir": "generated/tsc/variants/node16", "module": "Node16", "moduleResolution": "Node16", + "target": "ES2015", "esModuleInterop": true, "strict": true, }, diff --git a/smoke-test/tsconfig.cjs-nodenext.json b/smoke-test/tsconfig.cjs-nodenext.json index bba71f3c5fb..61715771750 100644 --- a/smoke-test/tsconfig.cjs-nodenext.json +++ b/smoke-test/tsconfig.cjs-nodenext.json @@ -6,6 +6,7 @@ "outDir": "generated/tsc/variants/nodenext", "module": "NodeNext", "moduleResolution": "NodeNext", + "target": "ES2015", "esModuleInterop": true, "strict": true, }, diff --git a/smoke-test/tsconfig.cjs.json b/smoke-test/tsconfig.cjs.json index 79d3af45df7..35c7d8d54d3 100644 --- a/smoke-test/tsconfig.cjs.json +++ b/smoke-test/tsconfig.cjs.json @@ -6,6 +6,7 @@ "outDir": "generated/tsc", "module": "commonjs", "moduleResolution": "node", + "target": "ES2015", "esModuleInterop": true, "strict": true, }, diff --git a/smoke-test/tsconfig.esm.json b/smoke-test/tsconfig.esm.json index ae06a93c6b0..a3525cc540e 100644 --- a/smoke-test/tsconfig.esm.json +++ b/smoke-test/tsconfig.esm.json @@ -6,6 +6,7 @@ "outDir": "generated/tsc", "module": "esnext", "moduleResolution": "node", + "target": "ES2015", "esModuleInterop": true, "strict": true, }, diff --git a/tsconfig.base.json b/tsconfig.base.json index a0edb3c0af9..91beea1b650 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1,7 +1,7 @@ { "compilerOptions": { "composite": true, - "target": "es2020", + "target": "es2023", "module": "esnext", "moduleResolution": "node", "esModuleInterop": true, @@ -17,7 +17,7 @@ "noUnusedParameters": true, "noUnusedLocals": true, "forceConsistentCasingInFileNames": true, - "lib": ["es2020"], + "lib": ["es2023"], "types": ["node"], "baseUrl": ".", }