diff --git a/.eslintrc.cjs b/.eslintrc.cjs index cc52dea774..54cf86359f 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -224,11 +224,37 @@ module.exports = { }, tailwindcss: { callees: tailwindCallees, - whitelist: ['light', 'hive-focus', 'hive-focus-within'], + whitelist: ['light', 'hive-focus', 'hive-focus-within', '_text-primary-600'], config: path.join(__dirname, './packages/web/docs/tailwind.config.ts'), }, }, }, + { + files: ['packages/web/docs/src/**/*.mdx'], + parser: 'eslint-mdx', + parserOptions: { + ecmaVersion: 2024, + sourceType: 'module', + }, + rules: { + 'import/no-duplicates': 'error', + 'react/jsx-uses-vars': 'error', // should be enabled, otherwise @typescript-eslint/no-unused-vars gives false positive + '@typescript-eslint/no-unused-vars': [ + 'error', + { + argsIgnorePattern: '^_', + varsIgnorePattern: '^_', // allow underscores in destructuring + }, + ], + 'no-restricted-imports': [ + 'error', + { + name: 'next/image', + message: 'Use markdown syntax - ![Your image alt attribute](/path/to/your/image)', + }, + ], + }, + }, { files: 'cypress/**', extends: 'plugin:cypress/recommended', diff --git a/package.json b/package.json index 0d543ac04b..91764fb5a9 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "generate": "pnpm --filter @hive/storage db:generate && pnpm graphql:generate", "graphql:generate": "graphql-codegen --config codegen.mts", "integration:prepare": "cd integration-tests && ./local.sh", - "lint": "eslint --cache --ignore-path .gitignore \"{packages,cypress}/**/*.{ts,tsx,graphql}\"", + "lint": "eslint --cache --ignore-path .gitignore \"{packages,cypress}/**/*.{ts,tsx,graphql,mdx}\"", "lint:env-template": "tsx scripts/check-env-template.ts", "lint:fix": "pnpm lint --fix", "lint:prettier": "prettier --cache --check .", diff --git a/packages/web/docs/package.json b/packages/web/docs/package.json index 0555af9d91..f776884293 100644 --- a/packages/web/docs/package.json +++ b/packages/web/docs/package.json @@ -12,7 +12,7 @@ "@radix-ui/react-tabs": "1.1.1", "@radix-ui/react-tooltip": "1.1.3", "@tailwindcss/typography": "0.5.15", - "@theguild/components": "7.3.0", + "@theguild/components": "7.3.3", "clsx": "2.1.1", "date-fns": "4.1.0", "next": "14.2.18", diff --git a/packages/web/docs/src/components/screenshot.ts b/packages/web/docs/src/components/screenshot.ts deleted file mode 100644 index edf6f976b0..0000000000 --- a/packages/web/docs/src/components/screenshot.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { cloneElement, ReactElement } from 'react'; - -export function Screenshot({ children }: { children: ReactElement }) { - return cloneElement(children, { className: 'mt-6 rounded-lg drop-shadow-md' }); -} diff --git a/packages/web/docs/src/pages/docs/dashboard/explorer.mdx b/packages/web/docs/src/pages/docs/dashboard/explorer.mdx index 117a5acc4d..c9caee847d 100644 --- a/packages/web/docs/src/pages/docs/dashboard/explorer.mdx +++ b/packages/web/docs/src/pages/docs/dashboard/explorer.mdx @@ -1,6 +1,4 @@ -import NextImage from 'next/image' import { Callout } from '@theguild/components' -import schemaExplorerImage from '../../../../public/docs/pages/features/schema-explorer.png' # Schema Explorer @@ -9,11 +7,7 @@ your GraphQL schema. Not only does it allow you to explore the different types a schema, but it also enables you to gain a deeper understanding of the arguments and their respective input types. - +![Schema Explorer](/docs/pages/features/schema-explorer.png) ## Schema Usage and Coverage diff --git a/packages/web/docs/src/pages/docs/dashboard/insights.mdx b/packages/web/docs/src/pages/docs/dashboard/insights.mdx index ffaea4c7bd..c1ec9198e0 100644 --- a/packages/web/docs/src/pages/docs/dashboard/insights.mdx +++ b/packages/web/docs/src/pages/docs/dashboard/insights.mdx @@ -1,14 +1,7 @@ -import NextImage from 'next/image' -import usageOperationsImage from '../../../../public/docs/pages/features/usage-operations.png' - # Insights A list of all the GraphQL operations executed by your consumers, their performance metrics and total count. By clicking on a specific query, you'll be able to see the full list of fields and arguments used in the operation. - +![Insights](/docs/pages/features/usage-operations.png) diff --git a/packages/web/docs/src/pages/docs/dashboard/laboratory.mdx b/packages/web/docs/src/pages/docs/dashboard/laboratory.mdx index ee00cdbd6e..e9646c3ff6 100644 --- a/packages/web/docs/src/pages/docs/dashboard/laboratory.mdx +++ b/packages/web/docs/src/pages/docs/dashboard/laboratory.mdx @@ -1,7 +1,4 @@ -import NextImage from 'next/image' import { Callout } from '@theguild/components' -import labFormImage from '../../../../public/docs/pages/features/lab-form.png' -import labImage from '../../../../public/docs/pages/features/lab.png' # Laboratory @@ -14,7 +11,7 @@ You can use the full power of [GraphiQL](https://github.com/graphql/graphiql) di compose your GraphQL operations, explore with different field and variations, and access your GraphQL schema full documentation. - +![Laboratory](/docs/pages/features/lab.png) ## Link a Laboratory Endpoint @@ -49,7 +46,7 @@ To get started with using the Laboratory mock schema externally, create a Now, click on the **Use Schema Externally** button on the Laboratory page, and follow the instructions on the form: - +![Laboratory Form](/docs/pages/features/lab-form.png) To test access to your setup, try running a `curl` command to run a simple GraphQL query against your mocked schema: diff --git a/packages/web/docs/src/pages/docs/gateway/deployment/node-frameworks/express.mdx b/packages/web/docs/src/pages/docs/gateway/deployment/node-frameworks/express.mdx index 70e7b9ec10..6530a6a14f 100644 --- a/packages/web/docs/src/pages/docs/gateway/deployment/node-frameworks/express.mdx +++ b/packages/web/docs/src/pages/docs/gateway/deployment/node-frameworks/express.mdx @@ -4,8 +4,6 @@ description: a robust set of features to handle HTTP on Node.js applications. --- -import { Callout } from '@theguild/components' - # Integration with Express [Express is the most popular web framework for Node.js.](https://expressjs.com/) It is a minimalist @@ -65,7 +63,7 @@ const app = express() const serveRuntime = createGatewayRuntime(/* Your configuration */) const hiveGWRouter = express.Router() -// GraphiQL specefic CSP configuration +// GraphiQL specific CSP configuration hiveGWRouter.use( helmet({ contentSecurityPolicy: { diff --git a/packages/web/docs/src/pages/docs/gateway/deployment/node-frameworks/fastify.mdx b/packages/web/docs/src/pages/docs/gateway/deployment/node-frameworks/fastify.mdx index e12ca91c68..6b4b0e12f9 100644 --- a/packages/web/docs/src/pages/docs/gateway/deployment/node-frameworks/fastify.mdx +++ b/packages/web/docs/src/pages/docs/gateway/deployment/node-frameworks/fastify.mdx @@ -4,8 +4,6 @@ description: powerful framework that is easy to learn and use. --- -import { Callout } from '@theguild/components' - # Integration with Fastify [Fastify is one of the popular HTTP server frameworks for Node.js.](https://www.fastify.io/) It is a diff --git a/packages/web/docs/src/pages/docs/gateway/deployment/node-frameworks/hapi.mdx b/packages/web/docs/src/pages/docs/gateway/deployment/node-frameworks/hapi.mdx index 116886c683..0d5392213c 100644 --- a/packages/web/docs/src/pages/docs/gateway/deployment/node-frameworks/hapi.mdx +++ b/packages/web/docs/src/pages/docs/gateway/deployment/node-frameworks/hapi.mdx @@ -1,5 +1,3 @@ -import { Callout } from '@theguild/components' - # Integration with Hapi [Hapi](https://hapi.dev) allows you to build powerful, scalable applications, with minimal overhead diff --git a/packages/web/docs/src/pages/docs/gateway/deployment/node-frameworks/koa.mdx b/packages/web/docs/src/pages/docs/gateway/deployment/node-frameworks/koa.mdx index 4224322fb9..8b71406111 100644 --- a/packages/web/docs/src/pages/docs/gateway/deployment/node-frameworks/koa.mdx +++ b/packages/web/docs/src/pages/docs/gateway/deployment/node-frameworks/koa.mdx @@ -4,8 +4,6 @@ description: expressive, and more robust foundation for web applications and APIs. --- -import { Callout } from '@theguild/components' - # Integration with Koa [Koa is a new web framework designed by the team behind Express, which aims to be a smaller, more expressive, and more robust foundation for web applications and APIs.](https://koajs.com) diff --git a/packages/web/docs/src/pages/docs/gateway/deployment/node-frameworks/nextjs.mdx b/packages/web/docs/src/pages/docs/gateway/deployment/node-frameworks/nextjs.mdx index bfe0ffa35b..a9615c3fca 100644 --- a/packages/web/docs/src/pages/docs/gateway/deployment/node-frameworks/nextjs.mdx +++ b/packages/web/docs/src/pages/docs/gateway/deployment/node-frameworks/nextjs.mdx @@ -4,8 +4,6 @@ description: integrated with Next.js easily as an API Route. --- -import { Callout } from '@theguild/components' - # Integration with Next.js [Next.js](https://nextjs.org) is a web framework that allows you to build websites very quickly and diff --git a/packages/web/docs/src/pages/docs/gateway/deployment/node-frameworks/uwebsockets.mdx b/packages/web/docs/src/pages/docs/gateway/deployment/node-frameworks/uwebsockets.mdx index 9f09cca474..25360b5b26 100644 --- a/packages/web/docs/src/pages/docs/gateway/deployment/node-frameworks/uwebsockets.mdx +++ b/packages/web/docs/src/pages/docs/gateway/deployment/node-frameworks/uwebsockets.mdx @@ -2,8 +2,6 @@ description: µWebSockets.js is an HTTP/WebSocket server for Node.js. --- -import { Callout } from '@theguild/components' - # Integration with µWebSockets.js [µWebSockets.js](https://github.com/uNetworking/uWebSockets.js) is an alternative to Node.js's diff --git a/packages/web/docs/src/pages/docs/gateway/deployment/runtimes/bun.mdx b/packages/web/docs/src/pages/docs/gateway/deployment/runtimes/bun.mdx index be344daf49..29afe9c55c 100644 --- a/packages/web/docs/src/pages/docs/gateway/deployment/runtimes/bun.mdx +++ b/packages/web/docs/src/pages/docs/gateway/deployment/runtimes/bun.mdx @@ -4,8 +4,6 @@ description: platform besides Node.js. --- -import { Callout } from '@theguild/components' - # Integration with Bun Hive Gateway provides you a cross-platform GraphQL Server. So you can easily integrate it into any diff --git a/packages/web/docs/src/pages/docs/gateway/deployment/runtimes/deno.mdx b/packages/web/docs/src/pages/docs/gateway/deployment/runtimes/deno.mdx index 4b9c4b4155..d583821e1f 100644 --- a/packages/web/docs/src/pages/docs/gateway/deployment/runtimes/deno.mdx +++ b/packages/web/docs/src/pages/docs/gateway/deployment/runtimes/deno.mdx @@ -4,8 +4,6 @@ description: platform besides Node.js. --- -import { Callout } from '@theguild/components' - # Integration with Deno Hive Gateway provides you a cross-platform GraphQL Server. So you can easily integrate it into any diff --git a/packages/web/docs/src/pages/docs/gateway/deployment/runtimes/nodejs.mdx b/packages/web/docs/src/pages/docs/gateway/deployment/runtimes/nodejs.mdx index 9856f0bfb6..472b113c7b 100644 --- a/packages/web/docs/src/pages/docs/gateway/deployment/runtimes/nodejs.mdx +++ b/packages/web/docs/src/pages/docs/gateway/deployment/runtimes/nodejs.mdx @@ -1,5 +1,3 @@ -import { Callout } from '@theguild/components' - # Node.js Node.js is the most common runtime for JavaScript. diff --git a/packages/web/docs/src/pages/docs/gateway/index.mdx b/packages/web/docs/src/pages/docs/gateway/index.mdx index b23f1007c5..c79e8f736a 100644 --- a/packages/web/docs/src/pages/docs/gateway/index.mdx +++ b/packages/web/docs/src/pages/docs/gateway/index.mdx @@ -4,7 +4,7 @@ description: Hive Gateway is the GraphQL federation Gateway and/or Proxy Gateway for your GraphQL services. --- -import { Callout, Cards, Tabs } from '@theguild/components' +import { Cards, Tabs } from '@theguild/components' # Hive Gateway diff --git a/packages/web/docs/src/pages/docs/gateway/monitoring-tracing.mdx b/packages/web/docs/src/pages/docs/gateway/monitoring-tracing.mdx index b067b4538a..acc7ec3a7c 100644 --- a/packages/web/docs/src/pages/docs/gateway/monitoring-tracing.mdx +++ b/packages/web/docs/src/pages/docs/gateway/monitoring-tracing.mdx @@ -4,9 +4,7 @@ description: behavior of your Hive Gateway. --- -import Image from 'next/image' -import { Table, Td, Th, Tr } from 'nextra/components' -import { Callout, Cards, Tabs } from '@theguild/components' +import { Callout, Tabs } from '@theguild/components' # Monitoring and Tracing @@ -130,7 +128,7 @@ The following are available to use with this plugin: - + ```ts filename="gateway.config.ts" import { createStdoutExporter, defineConfig } from '@graphql-hive/gateway' @@ -159,7 +157,7 @@ export const gatewayConfig = defineConfig({ }) ``` - + diff --git a/packages/web/docs/src/pages/docs/gateway/other-features/performance/deduplicate-request.mdx b/packages/web/docs/src/pages/docs/gateway/other-features/performance/deduplicate-request.mdx index a0adf5cf7a..3e2776a733 100644 --- a/packages/web/docs/src/pages/docs/gateway/other-features/performance/deduplicate-request.mdx +++ b/packages/web/docs/src/pages/docs/gateway/other-features/performance/deduplicate-request.mdx @@ -2,8 +2,6 @@ searchable: false --- -import { Callout } from '@theguild/components' - # Deduplicate HTTP Requests Most of the time, your Hive Gateway will receive multiple requests for the same data. This can diff --git a/packages/web/docs/src/pages/docs/gateway/other-features/performance/request-batching.mdx b/packages/web/docs/src/pages/docs/gateway/other-features/performance/request-batching.mdx index 766b55cf23..2b0fc638c8 100644 --- a/packages/web/docs/src/pages/docs/gateway/other-features/performance/request-batching.mdx +++ b/packages/web/docs/src/pages/docs/gateway/other-features/performance/request-batching.mdx @@ -5,8 +5,6 @@ description: searchable: false --- -import { Callout } from '@theguild/components' - # Request Batching Batching is the process of taking a group of requests, combining them into one, and making a single diff --git a/packages/web/docs/src/pages/docs/gateway/other-features/performance/upstream-cancellation.mdx b/packages/web/docs/src/pages/docs/gateway/other-features/performance/upstream-cancellation.mdx index 9d73dbc3ae..292f5c0df2 100644 --- a/packages/web/docs/src/pages/docs/gateway/other-features/performance/upstream-cancellation.mdx +++ b/packages/web/docs/src/pages/docs/gateway/other-features/performance/upstream-cancellation.mdx @@ -2,8 +2,6 @@ searchable: false --- -import { Callout } from '@theguild/components' - # Upstream Cancellation This feature enables you to cancel the upstream HTTP requests when the client cancels the downstream @@ -11,7 +9,7 @@ GraphQL request. This can be useful when you want to save resources on your serv There is also [Execution Cancellation](/docs/gateway/other-features/performance/execution-cancellation) that stops -the execution, but it doesn't stop ongoing HTTP requests. This seperately allows you to stop the +the execution, but it doesn't stop ongoing HTTP requests. This separately allows you to stop the HTTP requests by hooking into [`fetch`](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API). ## Enable Upstream Cancellation diff --git a/packages/web/docs/src/pages/docs/gateway/other-features/security/block-field-suggestions.mdx b/packages/web/docs/src/pages/docs/gateway/other-features/security/block-field-suggestions.mdx index 6868c059d2..2be90af94a 100644 --- a/packages/web/docs/src/pages/docs/gateway/other-features/security/block-field-suggestions.mdx +++ b/packages/web/docs/src/pages/docs/gateway/other-features/security/block-field-suggestions.mdx @@ -2,8 +2,6 @@ searchable: false --- -import { Callout } from '@theguild/components' - # Block Field Suggestions This is a feature that allows you to prevent **returning field suggestions** and **leaking your diff --git a/packages/web/docs/src/pages/docs/gateway/other-features/security/cost-limit.mdx b/packages/web/docs/src/pages/docs/gateway/other-features/security/cost-limit.mdx index 436a7691b5..0bcdb339c6 100644 --- a/packages/web/docs/src/pages/docs/gateway/other-features/security/cost-limit.mdx +++ b/packages/web/docs/src/pages/docs/gateway/other-features/security/cost-limit.mdx @@ -2,8 +2,6 @@ searchable: false --- -import { Callout } from '@theguild/components' - # Cost Limit **Limit** the **complexity** of a GraphQL document by using @@ -18,35 +16,35 @@ npm install @escape.tech/graphql-armor-cost-limit Then, add it to your plugins: ```ts filename="gateway.config.ts" -import {defineConfig} from '@graphql-hive/gateway'; -import { costLimitPlugin } from '@escape.tech/graphql-armor-cost-limit'; +import { costLimitPlugin } from '@escape.tech/graphql-armor-cost-limit' +import { defineConfig } from '@graphql-hive/gateway' export const gatewayConfig = defineConfig({ plugins: () => [ costLimitPlugin({ - // Toogle the plugin | default: true - enabled: true, - // Cost allowed for the query | default: 5000 - maxCost: 5000, - // Static cost of an object | default: 2 - objectCost: 2, - // Static cost of a field | default: 1 - scalarCost: 1, - // Factorial applied to nested operator | default: 1.5 - depthCostFactor: 1.5, - // Ignore the cost of introspection queries | default: true - ignoreIntrospection: true, - // Do you want to propagate the rejection to the client? | default: true - propagateOnRejection: true, - - /* Advanced options (use here on your own risk) */ - - // Callbacks that are ran whenever a Query is accepted - onAccept: [] - - // Callbacks that are ran whenever a Query is rejected - onReject: [] - }), + // Toogle the plugin | default: true + enabled: true, + // Cost allowed for the query | default: 5000 + maxCost: 5000, + // Static cost of an object | default: 2 + objectCost: 2, + // Static cost of a field | default: 1 + scalarCost: 1, + // Factorial applied to nested operator | default: 1.5 + depthCostFactor: 1.5, + // Ignore the cost of introspection queries | default: true + ignoreIntrospection: true, + // Do you want to propagate the rejection to the client? | default: true + propagateOnRejection: true, + + /* Advanced options (use here on your own risk) */ + + // Callbacks that are ran whenever a Query is accepted + onAccept: [], + + // Callbacks that are ran whenever a Query is rejected + onReject: [] + }) ] -}); +}) ``` diff --git a/packages/web/docs/src/pages/docs/gateway/other-features/security/csrf-prevention.mdx b/packages/web/docs/src/pages/docs/gateway/other-features/security/csrf-prevention.mdx index 8258cb4bcd..3ced58032c 100644 --- a/packages/web/docs/src/pages/docs/gateway/other-features/security/csrf-prevention.mdx +++ b/packages/web/docs/src/pages/docs/gateway/other-features/security/csrf-prevention.mdx @@ -5,8 +5,6 @@ description: searchable: false --- -import { Callout } from '@theguild/components' - # CSRF Prevention If you have CORS enabled, almost all requests coming from the browser will have a preflight diff --git a/packages/web/docs/src/pages/docs/gateway/other-features/security/error-masking.mdx b/packages/web/docs/src/pages/docs/gateway/other-features/security/error-masking.mdx index 8d045dc89e..df9f3a2522 100644 --- a/packages/web/docs/src/pages/docs/gateway/other-features/security/error-masking.mdx +++ b/packages/web/docs/src/pages/docs/gateway/other-features/security/error-masking.mdx @@ -2,8 +2,6 @@ searchable: false --- -import { Callout } from '@theguild/components' - # Error Masking Hive Gateway automatically masks unexpected errors and prevents leaking sensitive information to diff --git a/packages/web/docs/src/pages/docs/gateway/other-features/security/index.mdx b/packages/web/docs/src/pages/docs/gateway/other-features/security/index.mdx index 1dceca3667..43de864ada 100644 --- a/packages/web/docs/src/pages/docs/gateway/other-features/security/index.mdx +++ b/packages/web/docs/src/pages/docs/gateway/other-features/security/index.mdx @@ -2,8 +2,6 @@ searchable: false --- -import { Callout } from '@theguild/components' - # Secure your Gateway Building a secure GraphQL API is hard by design because of the “Graph” nature of GraphQL. Libraries @@ -102,7 +100,7 @@ sequence of characters into a sequence of lexical tokens. E.g. given the following GraphQL operation. ```graphql -graphql { +query { me { id user diff --git a/packages/web/docs/src/pages/docs/gateway/other-features/security/max-aliases.mdx b/packages/web/docs/src/pages/docs/gateway/other-features/security/max-aliases.mdx index e22b568034..fac5701b88 100644 --- a/packages/web/docs/src/pages/docs/gateway/other-features/security/max-aliases.mdx +++ b/packages/web/docs/src/pages/docs/gateway/other-features/security/max-aliases.mdx @@ -2,8 +2,6 @@ searchable: false --- -import { Callout } from '@theguild/components' - # Max Aliases **Limit** the number of **aliases** in a GraphQL document. diff --git a/packages/web/docs/src/pages/docs/gateway/other-features/security/max-depth.mdx b/packages/web/docs/src/pages/docs/gateway/other-features/security/max-depth.mdx index be98850f31..88a1c68e09 100644 --- a/packages/web/docs/src/pages/docs/gateway/other-features/security/max-depth.mdx +++ b/packages/web/docs/src/pages/docs/gateway/other-features/security/max-depth.mdx @@ -2,8 +2,6 @@ searchable: false --- -import { Callout } from '@theguild/components' - # Max Depth **Limit** the **depth** of a GraphQL document. diff --git a/packages/web/docs/src/pages/docs/gateway/other-features/security/max-directives.mdx b/packages/web/docs/src/pages/docs/gateway/other-features/security/max-directives.mdx index b54cd76a85..db7a70cc6a 100644 --- a/packages/web/docs/src/pages/docs/gateway/other-features/security/max-directives.mdx +++ b/packages/web/docs/src/pages/docs/gateway/other-features/security/max-directives.mdx @@ -2,8 +2,6 @@ searchable: false --- -import { Callout } from '@theguild/components' - # Max Directives **Limit** the number of **directives** in a GraphQL document. diff --git a/packages/web/docs/src/pages/docs/gateway/other-features/security/max-tokens.mdx b/packages/web/docs/src/pages/docs/gateway/other-features/security/max-tokens.mdx index b1ef483848..e65b120e76 100644 --- a/packages/web/docs/src/pages/docs/gateway/other-features/security/max-tokens.mdx +++ b/packages/web/docs/src/pages/docs/gateway/other-features/security/max-tokens.mdx @@ -2,8 +2,6 @@ searchable: false --- -import { Callout } from '@theguild/components' - # Max Tokens **Limit** the number of **tokens** in a GraphQL document. diff --git a/packages/web/docs/src/pages/docs/gateway/other-features/security/rate-limiting.mdx b/packages/web/docs/src/pages/docs/gateway/other-features/security/rate-limiting.mdx index ebc9d8f705..2089d97bfd 100644 --- a/packages/web/docs/src/pages/docs/gateway/other-features/security/rate-limiting.mdx +++ b/packages/web/docs/src/pages/docs/gateway/other-features/security/rate-limiting.mdx @@ -2,8 +2,6 @@ searchable: false --- -import { Callout } from '@theguild/components' - # Rate Limiting Rate limiting is a technique for reducing server load by limiting the number of requests that can be @@ -82,7 +80,7 @@ type Query { - `max`: Define the max number of calls to the given field per window. - `identityArgs`: If you wanted to limit the requests to a field per id, per user, use identityArgs - to define how the request should be identified. For example you'd provide just ["id"] if you + to define how the request should be identified. For example, you'd provide just ["id"] if you wanted to rate limit the access to a field by id. We use Lodash's get to access nested identity args, docs here. diff --git a/packages/web/docs/src/pages/docs/gateway/other-features/testing/index.mdx b/packages/web/docs/src/pages/docs/gateway/other-features/testing/index.mdx index b5d6787fda..f2539d6352 100644 --- a/packages/web/docs/src/pages/docs/gateway/other-features/testing/index.mdx +++ b/packages/web/docs/src/pages/docs/gateway/other-features/testing/index.mdx @@ -2,8 +2,6 @@ searchable: false --- -import { Callout } from '@theguild/components' - # Testing & Debugging Testing and debugging are essential parts of the development process. This section will help you diff --git a/packages/web/docs/src/pages/docs/gateway/other-features/testing/snapshot.mdx b/packages/web/docs/src/pages/docs/gateway/other-features/testing/snapshot.mdx index 2ce28d2d66..98a79fef57 100644 --- a/packages/web/docs/src/pages/docs/gateway/other-features/testing/snapshot.mdx +++ b/packages/web/docs/src/pages/docs/gateway/other-features/testing/snapshot.mdx @@ -2,8 +2,6 @@ searchable: false --- -import { Callout } from '@theguild/components' - # Snapshot Plugin The `snapshot` plugin allows applying snapshot for development usage. diff --git a/packages/web/docs/src/pages/docs/gateway/persisted-documents.mdx b/packages/web/docs/src/pages/docs/gateway/persisted-documents.mdx index c08a363e8b..af76ba47c5 100644 --- a/packages/web/docs/src/pages/docs/gateway/persisted-documents.mdx +++ b/packages/web/docs/src/pages/docs/gateway/persisted-documents.mdx @@ -2,7 +2,7 @@ title: 'Gateway: Persisted Documents / Operations' --- -import { Callout, Cards, Tabs } from '@theguild/components' +import { Callout, Tabs } from '@theguild/components' # Persisted Documents @@ -243,7 +243,7 @@ const client = new createClient({ }) ``` -[More information on `@urql/exchange-persisted` on the the urql documentation](https://formidable.com/open-source/urql/docs/advanced/persistence-and-uploads/)) +[More information on `@urql/exchange-persisted` on the urql documentation](https://formidable.com/open-source/urql/docs/advanced/persistence-and-uploads/)) ### Apollo Client and GraphQL Code Generator @@ -379,7 +379,7 @@ You can also use the request headers to extract the persisted operation id. ### Path Recipe -You can also the the request path to extract the persisted operation id. This requires you to also +You can also the request path to extract the persisted operation id. This requires you to also customize the GraphQL endpoint. The underlying implementation for the URL matching is powered by the [URL Pattern API](https://developer.mozilla.org/en-US/docs/Web/API/URL_Pattern_API). diff --git a/packages/web/docs/src/pages/docs/gateway/usage-reporting.mdx b/packages/web/docs/src/pages/docs/gateway/usage-reporting.mdx index 694c401fa0..3ef4513ba3 100644 --- a/packages/web/docs/src/pages/docs/gateway/usage-reporting.mdx +++ b/packages/web/docs/src/pages/docs/gateway/usage-reporting.mdx @@ -1,4 +1,4 @@ -import { Callout, Cards, Tabs } from '@theguild/components' +import { Tabs } from '@theguild/components' # Usage Reporting diff --git a/packages/web/docs/src/pages/docs/get-started/apollo-federation.mdx b/packages/web/docs/src/pages/docs/get-started/apollo-federation.mdx index cc54856967..cee6729427 100644 --- a/packages/web/docs/src/pages/docs/get-started/apollo-federation.mdx +++ b/packages/web/docs/src/pages/docs/get-started/apollo-federation.mdx @@ -1,19 +1,4 @@ -import NextImage from 'next/image' import { Callout, Cards, FileTree, Steps, Tabs } from '@theguild/components' -import cdnAccessTokenSettings from '../../../../public/docs/pages/get-started/apollo-federation/cdn-access-token-settings.png' -import createAccessToken from '../../../../public/docs/pages/get-started/apollo-federation/create-access-token.png' -import cdnAccessTokenCreate from '../../../../public/docs/pages/get-started/apollo-federation/create-cdn-access-token.png' -import createdAccessToken from '../../../../public/docs/pages/get-started/apollo-federation/created-access-token.png' -import cdnAccessTokenCreated from '../../../../public/docs/pages/get-started/apollo-federation/created-cdn-access-token.png' -import publishFirstSchemaVersionUi from '../../../../public/docs/pages/get-started/apollo-federation/publish-first-schema-version-ui.png' -import publishSecondSchemaVersionUi from '../../../../public/docs/pages/get-started/apollo-federation/publish-second-schema-version-ui.png' -import publishThirdSchemaVersionUi from '../../../../public/docs/pages/get-started/apollo-federation/publish-third-schema-version-ui.png' -import registryTokenSettings from '../../../../public/docs/pages/get-started/apollo-federation/registry-token-settings.png' -import targetOverview from '../../../../public/docs/pages/get-started/apollo-federation/target-overview.png' -import cdnTokenImage from '../../../../public/docs/pages/guides/federation-cdn-token.png' - -import historyImage from '../../../../public/docs/pages/guides/history.png' -import tokenImage from '../../../../public/docs/pages/guides/token.png' # Get started with Apollo Federation @@ -119,11 +104,7 @@ As you may have noticed, Hive has created three targets under your project: `dev `staging`, and `production`. Each of these targets represent a different environment. You can remove or create new targets as needed, for modelling the different environments of your project. - +![Project overview showing the available targets](/docs/pages/get-started/apollo-federation/target-overview.png) For this guide we will use the `development` target. @@ -133,29 +114,17 @@ access token with the necessary permissions for the Hive CLI. Select the `development` target under your Hive project and then choose the **Settings** tab. On the Settings screen, you can manage your target's settings and access tokens. - +![Target settings for registry token management](/docs/pages/get-started/apollo-federation/registry-token-settings.png) Under the **Registry Access Tokens** section, click the **Create new registry token** button. Give your access token a name and select **Read & Write** for the permissions: - +![Create Registry Token Form](/docs/pages/get-started/apollo-federation/create-access-token.png) Click on **Generate Token** button and you should get your CLI token created, with permissions to publish GraphQL schemas. - +![Created Registry Token Form](/docs/pages/get-started/apollo-federation/created-access-token.png) Make sure to copy your token and keep it safe. **You won't be able to see it again.** @@ -239,11 +208,7 @@ schema version on the Hive dashboard. If you'll get to your target's page on Hive dashboard, you should see that it was updated with the new schema you just published 🎉 - +![First published schema version on the Hive dashboard](/docs/pages/get-started/apollo-federation/publish-first-schema-version-ui.png) You should also check out the **Explorer** tab: you can see the schema you just published, and @@ -319,11 +284,7 @@ If everything goes well, you should see the following output: After the publish process, if we had over to the Hive dashboard, we can see our new schema version published. - +![Second published schema version on the Hive dashboard](/docs/pages/get-started/apollo-federation/publish-second-schema-version-ui.png) Last, we will publish the **Reviews** subgraph schema to Hive. Again, let's start by copying the schema to a local file. @@ -395,11 +356,7 @@ Again, if everything goes well, you should see the following output: On your target's **Explorer** page now, you'll be able to see the schema of all three subgraphs 🎉 - +![Third published schema version on the Hive dashboard](/docs/pages/get-started/apollo-federation/publish-third-schema-version-ui.png) Congratulations on publishing and composing your first subgraphs with the Hive schema registry! @@ -444,33 +401,21 @@ For accessing the supergraph, we need to create the CDN access token from the Hi Navigate to your target's settings page and select the **CDN Tokens** tab. - +![CDN Token Form](/docs/pages/get-started/apollo-federation/cdn-access-token-settings.png) Click the **Create new CDN token** button, give your token a name and click **Create**. - +![CDN Token Form](/docs/pages/get-started/apollo-federation/create-cdn-access-token.png) There will be a confirmation screen showing the CDN token you just created. Make sure to copy it and keep it safe. - +![CDN Token Form](/docs/pages/get-started/apollo-federation/created-cdn-access-token.png) #### Run the Gateway Hive Gateway is the Federation Gateway that seamlessly integrates with the Hive registry. You can -run Hive Gateay either as a Docker image, binary or NPM package. +run Hive Gateway either as a Docker image, binary or NPM package. @@ -552,24 +497,12 @@ npx hive-gateway supergraph \ If you now navigate to `http://localhost:4000`, you should see the Hive Gateway page with information about the supergraph and subgraphs. -import HiveGatewayLandingPageImage from '../../../../public/docs/pages/get-started/apollo-federation/hive-gateway-landing-page.png' - - +![Hive Gateway Landing Page](/docs/pages/get-started/apollo-federation/hive-gateway-landing-page.png) Now, if you navigate to `http://localhost:4000/graphql`, you should see the GraphiQL interface where you can write and execute queries against the supergraph. -import HiveGatewayGraphiqlImage from '../../../../public/docs/pages/get-started/apollo-federation/hive-gateway-graphiql.png' - - +![Hive Gateway GraphiQL](/docs/pages/get-started/apollo-federation/hive-gateway-graphiql.png) Here you can execute GraphQL operations against the supergraph, which will be delegate to the single subgraph services. @@ -693,13 +626,7 @@ query TopProductsWithReview { After executing the query, a few times, let's switch back to the Hive dashboard and navigate to the insights page. -import HiveDashboardInsightsImage from '../../../../public/docs/pages/get-started/apollo-federation/hive-dashboard-insights.png' - - +![Hive Gateway GraphiQL](/docs/pages/get-started/apollo-federation/hive-dashboard-insights.png) Here we can now see the GraphQL operations from our Gateway being reported to the registry. diff --git a/packages/web/docs/src/pages/docs/get-started/first-steps.mdx b/packages/web/docs/src/pages/docs/get-started/first-steps.mdx index 93ffd0c642..8614d8eec8 100644 --- a/packages/web/docs/src/pages/docs/get-started/first-steps.mdx +++ b/packages/web/docs/src/pages/docs/get-started/first-steps.mdx @@ -1,5 +1,4 @@ import { Callout, Cards, Steps, Tabs } from '@theguild/components' -import { Screenshot } from '../../../components/screenshot' # First Steps with Hive Cloud @@ -10,7 +9,7 @@ import { Screenshot } from '../../../components/screenshot' To get started with Hive, first sign up and create your Hive account if you haven't already. [You can use this page to login or sign up](https://app.graphql-hive.com/auth). -![Login/Signup view](/docs/pages/first-steps/signup.png) +![Login/Signup view](/docs/pages/first-steps/signup.png) At the moment, Hive Cloud supports GitHub and Google authentication, or you can use a plain @@ -26,7 +25,7 @@ GraphQL APIs. Hive organizations are used to manage access, integrations, and bi To create a new organization, [you use this page](https://app.graphql-hive.com/org/new). -![Create Organization Form](/docs/pages/first-steps/org.png) +![Create Organization Form](/docs/pages/first-steps/org.png) Once you've successfully created your organization, you'll be able to expand your organization by inviting other members to join and collaborate on projects. @@ -132,7 +131,7 @@ Hive supports the following project types: To get started with your Hive **project**, click on **Create Project +** button from the organization's main page: -![Create Project Form](/docs/pages/first-steps/project.png) +![Create Project Form](/docs/pages/first-steps/project.png) Continue with one of the following guide based on the type of project you selected. diff --git a/packages/web/docs/src/pages/docs/get-started/schema-stitching.mdx b/packages/web/docs/src/pages/docs/get-started/schema-stitching.mdx index 15d5633230..0b94a8958c 100644 --- a/packages/web/docs/src/pages/docs/get-started/schema-stitching.mdx +++ b/packages/web/docs/src/pages/docs/get-started/schema-stitching.mdx @@ -1,11 +1,4 @@ -import NextImage from 'next/image' import { Callout, FileTree, Steps, Tabs } from '@theguild/components' -import cdnTokenImage from '../../../../public/docs/pages/guides/cdn_token.png' -import historyImage from '../../../../public/docs/pages/guides/history.png' -import stitchingExplorerImage from '../../../../public/docs/pages/guides/stitching-explorer.png' -import stitchingHistoryImage from '../../../../public/docs/pages/guides/stitching-history.png' -import stitchingUserSchemaImage from '../../../../public/docs/pages/guides/stitching-users-schema.png' -import tokenImage from '../../../../public/docs/pages/guides/token.png' # Schema-Stitching Project @@ -123,11 +116,7 @@ tab. On the Settings screen, you can manage your target's settings and access to Under the **Registry Access Tokens** section, click the **Generate new token** button. Give your access token a name and select **Schema Check & Push** from the list of token presets: - +![Create Registry Token Form](/docs/pages/guides/token.png) Click on **Generate Token** button and you should get your CLI token created, with permissions to publish GraphQL schemas. @@ -171,11 +160,7 @@ If everything goes well, you should see the following output: If you'll get to your target's page on Hive dashboard, you should see that it was updated with the new schema you just published 🎉 - +![Stitching SDL](/docs/pages/guides/stitching-users-schema.png) You should also check out the **Explorer** tab: you can see the schema you just published, and @@ -202,11 +187,7 @@ If everything goes well, you should see the following output: On your target's **Explorer** page now, you'll be able to see the schema of both services 🎉 - +![Schema Explorer](/docs/pages/guides/stitching-explorer.png) ### Schema Checks @@ -408,11 +389,7 @@ You should see now that Hive accepted your published schema and updated the regi It's a good timing to check the **History** tab of your Hive target. You should see that a new schema is published now, and you can see the changes you made: - +![Schema History](/docs/pages/guides/stitching-history.png) ### Fetch your schema @@ -447,11 +424,7 @@ To use your access token, go to your target's page on Hive's dashboard and click CDN** button. You will see a screen with instructions on how to obtain different types of artifacts from the CDN. For this guide, you can pick the **GraphQL SDL** artifact. - +![CDN Token Form](/docs/pages/guides/cdn_token.png) Copy the URL and let's try to fetch your schema using `curl` (replace `YOUR_HIVE_CDN_TOKEN` with your CDN token, and `CDN_ENDPOINT_HERE` with the endpoint you copied from Hive's dashboard): @@ -522,7 +495,7 @@ main().catch(err => { Make sure to add environment variables: -`HIVE_CDN_ENDPOINT` is your Hive CDN endpoint (without the artficat type, just drop the `/sdl` or +`HIVE_CDN_ENDPOINT` is your Hive CDN endpoint (without the artifact type, just drop the `/sdl` or `/services` from the URL). `HIVE_CDN_KEY` is the Hive CDN Access Token you created earlier. diff --git a/packages/web/docs/src/pages/docs/get-started/single-project.mdx b/packages/web/docs/src/pages/docs/get-started/single-project.mdx index 5e1a7d5bee..f44b2b9581 100644 --- a/packages/web/docs/src/pages/docs/get-started/single-project.mdx +++ b/packages/web/docs/src/pages/docs/get-started/single-project.mdx @@ -1,8 +1,4 @@ -import NextImage from 'next/image' import { Callout, Steps } from '@theguild/components' -import cdnTokenImage from '../../../../public/docs/pages/guides/cdn_token.png' -import historyImage from '../../../../public/docs/pages/guides/history.png' -import tokenImage from '../../../../public/docs/pages/guides/token.png' # Single Schema Project @@ -19,9 +15,9 @@ read GraphQL schemas from `.graphql` files in your local filesystem. **Using code-first approach to write your GraphQL schema?** - - Please refer to the [Code-First Guide](/docs/other-integrations/code-first) to learn how to use the Hive with -code-first approach. + +Please refer to the [Code-First Guide](/docs/other-integrations/code-first) to learn how to use the +Hive with code-first approach. @@ -63,11 +59,7 @@ tab. On the Settings screen, you can manage your target's settings and access to Under the **Registry Access Tokens** section, click the **Generate new token** button. Give your access token a name and select **Schema Check & Push** from the list of token presets: - +![Create Registry Token Form](/docs/pages/guides/token.png) Click on **Generate Token** button and you should get your CLI token created, with permissions to publish GraphQL schemas. @@ -249,11 +241,7 @@ You should see now that Hive accepted your published schema and updated the regi It's a good timing to check the **History** tab of your Hive target. You should see that a new schema is published now, and you can see the changes you made: - +![Schema History](/docs/pages/guides/history.png) ### Fetch your schema @@ -288,11 +276,7 @@ To use your access token, go to your target's page on Hive's dashboard and click CDN** button. You will see a screen with instructions on how to obtain different types of artifacts from the CDN. For this guide, you can pick the **GraphQL SDL** artifact. - +![CDN Token Form](/docs/pages/guides/cdn_token.png) Copy the URL and let's try to fetch your schema using `curl` (replace `YOUR_HIVE_CDN_TOKEN` with your CDN token, and `CDN_ENDPOINT_HERE` with the endpoint you copied from Hive's dashboard): diff --git a/packages/web/docs/src/pages/docs/high-availability-cdn.mdx b/packages/web/docs/src/pages/docs/high-availability-cdn.mdx index 8ffeb84391..5315cb00e0 100644 --- a/packages/web/docs/src/pages/docs/high-availability-cdn.mdx +++ b/packages/web/docs/src/pages/docs/high-availability-cdn.mdx @@ -1,6 +1,4 @@ -import NextImage from 'next/image' import { Callout } from '@theguild/components' -import cdnTokenImage from '../../../public/docs/pages/guides/cdn_token.png' # High-Availability CDN @@ -12,13 +10,11 @@ Hive's status. This ensures that everything required for your GraphQL API and to always available, and reduces the risk of depending on Hive as a single point of failure. ```mermaid - flowchart LR A["GraphQL gateway"] -.-> C["Highly available GraphQL schema on Cloudflare"] B["Frontend tooling (e.g. GraphQL code generator)"] -.-> C - ``` @@ -27,7 +23,7 @@ flowchart LR [Learn more](/docs/self-hosting/cdn-artifacts). -Currently you can access the single services, merged schema, supergraph and metadata (e.g. GraphQL +Currently, you can access the single services, merged schema, supergraph and metadata (e.g. GraphQL Mesh artifacts) via the CDN. ## CDN Access Tokens @@ -44,16 +40,12 @@ To get started with Hive's CDN access, you'll need to create a CDN token for you To use your CDN access token, go to your target's page on Hive's dashboard and click on the **Connect to CDN** button. - +![CDN Token Form](/docs/pages/guides/cdn_token.png) ## Artifacts stored in the CDN You can access the GraphQL schema (SDL), services information (for both Schema-Stitching and Apollo -Federeation), Supergraph (for Apollo Federation) and Hive schema metadata via the CDN. +Federation), Supergraph (for Apollo Federation) and Hive schema metadata via the CDN. ### GraphQL schema (SDL) diff --git a/packages/web/docs/src/pages/docs/management/organizations.mdx b/packages/web/docs/src/pages/docs/management/organizations.mdx index 30867809a2..becf114e50 100644 --- a/packages/web/docs/src/pages/docs/management/organizations.mdx +++ b/packages/web/docs/src/pages/docs/management/organizations.mdx @@ -1,13 +1,4 @@ -import NextImage from 'next/image' import { Callout, Tabs } from '@theguild/components' -import orgImage from '../../../../public/docs/pages/first-steps/org.png' -import newOrgImage from '../../../../public/docs/pages/management/create-an-organization-button.png' -import orgCustomRoleImage from '../../../../public/docs/pages/management/org-custom-role.png' -import orgInviteLinkImage from '../../../../public/docs/pages/management/org-invite-link.png' -import orgInviteMemberImage from '../../../../public/docs/pages/management/org-invite-member.png' -import orgMembersImage from '../../../../public/docs/pages/management/org-members.png' -import orgRolesImage from '../../../../public/docs/pages/management/org-roles.png' -import slackIntegrationImage from '../../../../public/docs/pages/management/org-slack-integration.png' # Organization Management @@ -22,19 +13,11 @@ To create a new organization, [you use this page directly](https://app.graphql-h Alternatively, you can create a new Hive organization by clicking on your user profile and selecting **Switch organization**. From there, click on the **Create an organization** button. - +![Creating an organization](/docs/pages/management/create-an-organization-button.png) Follow the instructions and choose a unique slug for your organization: - +![Create Organization Form](/docs/pages/first-steps/org.png) ## Manage existing organization @@ -43,20 +26,12 @@ Follow the instructions and choose a unique slug for your organization: Under your organization's **Settings** page, you can manage, add, and remove members from your Hive organization. - +![Members of an Organization](/docs/pages/management/org-members.png) -To invite others to your organization, go to **Members** tab under your oganization. To invite a new -member to your organization, write their email address and click on **Send an invite** button. +To invite others to your organization, go to **Members** tab under your organization. To invite a +new member to your organization, write their email address and click on **Send an invite** button. - +![Invite Member to Organization](/docs/pages/management/org-invite-member.png) The new member will receive an email inviting them to join Hive as a user, and this will add them as a member to your Hive organization. @@ -64,30 +39,18 @@ a member to your Hive organization. Once an invite has been created, you can also copy the personal invite link and share it directly using your preferred method: - +![Copy Invite Link](/docs/pages/management/org-invite-link.png) #### Roles There are two types of system roles in organizations: **Admin** and **Viewer**, but you can also define **custom roles**. - +![List of Roles](/docs/pages/management/org-roles.png) Custom roles can be created to provide more granular access to your organization's resources. - +![Custom role creator](/docs/pages/management/org-custom-role.png) ### Integrations @@ -104,11 +67,7 @@ your GraphQL schemas. Additionally, this integration can help you to collaborate more effectively with your team members, as you can share information and updates in real-time, ensuring that everyone is on the same page. - +![Hive and Slack Integration](/docs/pages/management/org-slack-integration.png) To activate this feature in your organization, go to the **Integrations** section of your **Settings** page, and click **Connect Slack** button. You'll get redirected to **Slack** to @@ -168,11 +127,11 @@ subscription at any time. If you wish to upgrade your plan, you can choose between the **Pro** and **Enterprise** plans. -For the **Pro** plan, you can use a credit-card and pay monthly for the resevered quota that works -for your needs. You can modify your plan and resevered quota any time during the month. +For the **Pro** plan, you can use a credit-card and pay monthly for the reserved quota that works +for your needs. You can modify your plan and reserved quota any time during the month. window.$crisp?.push(['do', 'chat:open'])} > For the **Enterprise** plan, please reach our to us, and we'll be happy to help you with your diff --git a/packages/web/docs/src/pages/docs/management/projects.mdx b/packages/web/docs/src/pages/docs/management/projects.mdx index 647a45c55a..9b2124071e 100644 --- a/packages/web/docs/src/pages/docs/management/projects.mdx +++ b/packages/web/docs/src/pages/docs/management/projects.mdx @@ -1,12 +1,4 @@ -import NextImage from 'next/image' import { Callout } from '@theguild/components' -import projectImage from '../../../../public/docs/pages/first-steps/project.png' -import githubIntegrationImage from '../../../../public/docs/pages/management/org-github-integration.png' -import slackIntegrationImage from '../../../../public/docs/pages/management/org-slack-integration.png' -import projectGitLinkImage from '../../../../public/docs/pages/management/project-git-link.png' -import projectHttpAlertImage from '../../../../public/docs/pages/management/project-http-alert.png' -import msteamsFormImage from '../../../../public/docs/pages/management/project-msteams-alert.png' -import slackAlertFormImage from '../../../../public/docs/pages/management/project-slack-alert.png' # Project Management @@ -32,11 +24,7 @@ Hive supports the following project types: To create a new project, click on **Create Project +** button from your organization's main page: - +![Create Project Form](/docs/pages/first-steps/project.png) Choose a project type based on your project's stack, and then enter the project slug. @@ -68,11 +56,7 @@ Having a Project connected with your GitHub repositories gives you the following - Have direct connection between a schema version and a Git commit in your repository in Hive dashboard. - +![Associated Git](/docs/pages/management/project-git-link.png) ### Change slug of a project @@ -91,7 +75,7 @@ Settings tab of your project: As the owner of an organization, you have the option to delete a project, including all targets, settings and all data collected during your use of Hive. -To delete an project, go to the **Settings** tab of your project, and use the **Delete Project** +To delete a project, go to the **Settings** tab of your project, and use the **Delete Project** section. This action is not reversible! @@ -118,11 +102,7 @@ At the moment, Hive supports the following transports to ship your alerts and no Integrating your project with a Slack channel will allow you to receive alerts and notifications shipped directly to a Slack channel. - +![Hive Slack Message](/docs/pages/management/org-slack-integration.png) To integrate your **project** with a Slack channel, you first need to [activate the Slack integration at the organization level](/docs/management/organizations#slack). @@ -130,11 +110,7 @@ To integrate your **project** with a Slack channel, you first need to Once you have activated the Slack integration, you can configure a Slack channel to connect to your Hive project: - +![Hive and Slack Configuration](/docs/pages/management/project-slack-alert.png) To send messages to private channels, invite the @GraphQLHive account first. Without this @@ -148,7 +124,7 @@ notification is triggered. All you need to do is to provide a valid HTTP URL, an a `POST` request to that URL, with a JSON payload acceptable by MS Teams. [MS Teams Webhook JSON example](https://docs.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/connectors-using#example-of-connector-message) -Typically the webhook URL looks like: +Typically, the webhook URL looks like: ```txt https://USERNAME.webhook.office.com/webhookb2/XXXXX/IncomingWebhook/YYYY/ZZZZZ @@ -157,11 +133,7 @@ https://USERNAME.webhook.office.com/webhookb2/XXXXX/IncomingWebhook/YYYY/ZZZZZ You can find more information on how to set up a webhook in MS Teams in the [official documentation - Create Incoming Webhooks](https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook?tabs=newteams%2Cdotnet). - +![MS Teams Alert Configuration](/docs/pages/management/project-msteams-alert.png) #### HTTP Webhook @@ -183,11 +155,7 @@ a notification is triggered. address must contain a valid hostname (not an IP address), and the port must be standard. - +![HTTP Alert Configuration](/docs/pages/management/project-http-alert.png) Every type of event/notification has a different JSON payload, please refer to the information diff --git a/packages/web/docs/src/pages/docs/management/sso-oidc-provider.mdx b/packages/web/docs/src/pages/docs/management/sso-oidc-provider.mdx index 7c8c9e5dd4..e3b36a4fd0 100644 --- a/packages/web/docs/src/pages/docs/management/sso-oidc-provider.mdx +++ b/packages/web/docs/src/pages/docs/management/sso-oidc-provider.mdx @@ -1,33 +1,4 @@ -import NextImage from 'next/image' import { Callout, Steps } from '@theguild/components' -import azureAdAppAfterRegisterSidebar from '../../../../public/docs/pages/management/sso/azure-ad-after-going-back-choose-tab-in-sidebar.webp' -import azureAddAppCreds from '../../../../public/docs/pages/management/sso/azure-ad-app-creds.webp' -import azureAdAppSecret from '../../../../public/docs/pages/management/sso/azure-ad-app-new-client-secret.webp' -import azureAdAppSecretValue from '../../../../public/docs/pages/management/sso/azure-ad-client-secret-value.webp' -import azureAdPermissions2 from '../../../../public/docs/pages/management/sso/azure-ad-configure-api-permissions-graph.webp' -import azureAdPermissions1 from '../../../../public/docs/pages/management/sso/azure-ad-configure-api-permissions.webp' -import azureAdLogoutUrl from '../../../../public/docs/pages/management/sso/azure-ad-configure-logout-url.webp' -import azureAdCreateApp from '../../../../public/docs/pages/management/sso/azure-ad-create-application-panel.webp' -import azureAdPermissions3 from '../../../../public/docs/pages/management/sso/azure-ad-delegated-permissions.webp' -import azureAdEmail4 from '../../../../public/docs/pages/management/sso/azure-ad-edit-user-email-field.webp' -import azureAdEmail3 from '../../../../public/docs/pages/management/sso/azure-ad-edit-user-properties.webp' -import azureAdEnterpriseApplication from '../../../../public/docs/pages/management/sso/azure-ad-enterprise-applications.webp' -import azureAdAppAfterRegister from '../../../../public/docs/pages/management/sso/azure-ad-go-back-after-app-registeration.webp' -import azureAdNewApp from '../../../../public/docs/pages/management/sso/azure-ad-new-application-button.webp' -import azureAdAppRegister from '../../../../public/docs/pages/management/sso/azure-ad-register-application.webp' -import azureAdEmail1 from '../../../../public/docs/pages/management/sso/azure-ad-users-tab.webp' -import azureAdEmail2 from '../../../../public/docs/pages/management/sso/azure-ad-users-table.webp' -import oktaControlledImage from '../../../../public/docs/pages/management/sso/controlled-access-of-okta-app.webp' -import oktaAppIntegrationImage from '../../../../public/docs/pages/management/sso/create-new-app-integration-options.webp' -import hiveOidcModalImage from '../../../../public/docs/pages/management/sso/hive-connect-openid-provider-modal.png' -import hiveOidcImage from '../../../../public/docs/pages/management/sso/hive-connect-openid-provider.png' -import hiveManageOidcImage from '../../../../public/docs/pages/management/sso/hive-manage-openid-connect-modal.png' -import hiveLoginUrlImage from '../../../../public/docs/pages/management/sso/hive-manage-openid-okta-login-url.png' -import oktaAdminButtonImage from '../../../../public/docs/pages/management/sso/okta-admin-button.webp' -import oktaAppConfigClientIdImage from '../../../../public/docs/pages/management/sso/okta-app-config-client-id.webp' -import oktaAppConfigClientSecretImage from '../../../../public/docs/pages/management/sso/okta-app-config-client-secret.webp' -import oktaAppGeneralSettingsImage from '../../../../public/docs/pages/management/sso/okta-app-general-settings-section.webp' -import oktaCreateAppImage from '../../../../public/docs/pages/management/sso/okta-create-app-integration.webp' # Single Sign On via OIDC (Open ID Connect Provider) @@ -120,71 +91,39 @@ organization's slug, and you will then be redirected to your OIDC provider. Once you're logged in to your account, click the **Admin** button in the header to navigate to the admin view. - +![Okta Admin Button](/docs/pages/management/sso/okta-admin-button.webp) After you're redirected click on the **Applications** tab in the sidebar then click on the **Create App Integration** button: - +![Okta Create App](/docs/pages/management/sso/okta-create-app-integration.webp) Choose **OIDC - OpenID Connect** as for the Sign-in method and **Web Application** for the **Application type**, then click **Next**. - +![Okta App Integration](/docs/pages/management/sso/create-new-app-integration-options.webp) Next you're gonna be able to customize your app's name and logo if you want to, then choose the option that suits you for the "Controlled access", I'm gonna go with "Allow everyone" as this's just a guide, after you're done click "Save". - +![Okta Controlled Access](/docs/pages/management/sso/controlled-access-of-okta-app.webp) From the Okta dashboard, grab and store the **Client ID** and **Client Secret**: - +![Okta Client ID](/docs/pages/management/sso/okta-app-config-client-id.webp) - +![Okta Client Secret](/docs/pages/management/sso/okta-app-config-client-secret.webp) And now you're almost good to go with Okta's configuration, now head to your Hive organization settings tab and hit the **Connect Open ID Connect Provider** button - +![OIDC Provider in Hive](/docs/pages/management/sso/hive-connect-openid-provider.png) And now you'd have to fill in a couple of inputs to connect your OpenID Okta's provider as the following: - +![OIDC Modal in Hive](/docs/pages/management/sso/hive-connect-openid-provider-modal.png) - **Token Endpoint**: `https://YOUR_OKTA_DOMAIN_HERE/oauth2/v1/token` - **User Info Endpoint**: `https://YOUR_OKTA_DOMAIN_HERE/oauth2/v1/userinfo` @@ -202,117 +141,73 @@ In your Okta's app SSO configuration and scroll down to the **General Settings** URI and the Sign-out redirect URI from Hive into their responding inputs and click **Save** when you're done. - +![Manage OIDC in Hive](/docs/pages/management/sso/hive-manage-openid-connect-modal.png) - +![Okta General Settings](/docs/pages/management/sso/okta-app-general-settings-section.webp) And congrats, you now have Okta connected! 🥳🎉 You can use the link provided in the modal left section to let your users login via Okta. - +![Hive Login URL](/docs/pages/management/sso/hive-manage-openid-okta-login-url.png) ### Azure After you're logged in to [Azure Portal](https://portal.azure.com/), find the **Azure Entra ID**. On the left sidebar, click on the **Enterprise applications** under the **Manage** section: - +![Azure AD](/docs/pages/management/sso/azure-ad-enterprise-applications.webp) Then click on the **New Application** button and then click on the **Create your own application** button afterwards, you're gonna see the panel on the right where you should provide a name and select "**Register an application to integrate with Azure AD (App you're developing)**" as for the application purpose, then hit the **Create** button. - +![Azure AD](/docs/pages/management/sso/azure-ad-new-application-button.webp) - +![Azure AD](/docs/pages/management/sso/azure-ad-create-application-panel.webp) And now the last step to register your app is to define "**Who can use this application or access this API?**" according to your needs, then choose **Web** as for the selecting the platform and input `https://app.graphql-hive.com/auth/callback/oidc` in the input next to it, and finally click **Register**. - +![Azure AD](/docs/pages/management/sso/azure-ad-register-application.webp) Once you see the successfully created application popup, go back to your enterprise applications by navigating through the history structure from the top, then navigate to the **App registrations** tab from the right sidebar, and now you're gonna see your app in the applications list, so click on your app. - +![Azure AD](/docs/pages/management/sso/azure-ad-go-back-after-app-registeration.webp) - +![Azure AD](/docs/pages/management/sso/azure-ad-after-going-back-choose-tab-in-sidebar.webp) And from here, we now have most of the configuration details needed by Hive for SSO connection, so now head to your Hive's organization settings tab and hit the **Connect Open ID Connect Provider** button: - +![OIDC Provider in Hive](/docs/pages/management/sso/hive-connect-openid-provider.png) And now you'd have to fill in a couple of inputs to connect your OpenID Azure AD's provider. - +![OIDC Modal in Hive](/docs/pages/management/sso/hive-connect-openid-provider-modal.png) -Now, reate a new client secret for your app by navigating as the screenshot illustrates then on the +Now, create a new client secret for your app by navigating as the screenshot illustrates then on the right panel add a description for your secret and configure your expiration configuration or leave it as the default recommended value which is `6 months`, then click **Add**: - +![](/docs/pages/management/sso/azure-ad-app-new-client-secret.webp) Copy and store your client secret value. Make sure to copy the value immediately, as you're not gonna be able to see it again after navigating. - +![](/docs/pages/management/sso/azure-ad-client-secret-value.webp) Use the pointers in the screenshot to help you find your credentials to be able to fill Hive's connection inputs: - +![Azure AD](/docs/pages/management/sso/azure-ad-app-creds.webp) - **Token Endpoint**: From the screenshot above - **User Info Endpoint**: `https://graph.microsoft.com/oidc/userinfo` @@ -326,11 +221,7 @@ And we're almost done, go to the "**Authentication**" tab and scroll done to the logout URL**" section, and fill in the input with the following URL: `https://app.graphql-hive.com/logout`, then click **Save**. - +![Azure AD](/docs/pages/management/sso/azure-ad-configure-logout-url.webp) And for the last step, we need to add the permissions for Azure AD to be able to access the user info after authentication, so use the "**API permissions** section on AD portal, then click the @@ -345,35 +236,24 @@ bar and checking the checkboxes: After you're done, click the **Add permissions** button. - - - - - +![Azure AD](/docs/pages/management/sso/azure-ad-configure-api-permissions.webp) +![Azure AD](/docs/pages/management/sso/azure-ad-configure-api-permissions-graph.webp) +![Azure AD](/docs/pages/management/sso/azure-ad-delegated-permissions.webp) **Azure AD and `email` field access** - - Granting the permission for `email` unfortunately doesn't guarantee a successful login, because in Azure AD, the `email` field is marked as optional, while it's required for a successful integration with Hive. - - If your Azure AD members does not have the `email` field set, the login will fail. You can follow the steps in the screenshots below to be able to add an `email` for an existing user record. - - - - +Granting the permission for `email` unfortunately doesn't guarantee a successful login, because in +Azure AD, the `email` field is marked as optional, while it's required for a successful integration +with Hive. + +If your Azure AD members does not have the `email` field set, the login will fail. You can follow +the steps in the screenshots below to be able to add an `email` for an existing user record. + +![Azure AD](/docs/pages/management/sso/azure-ad-users-tab.webp) +![Azure AD](/docs/pages/management/sso/azure-ad-users-table.webp) +![Azure AD](/docs/pages/management/sso/azure-ad-edit-user-properties.webp) +![Azure AD](/docs/pages/management/sso/azure-ad-edit-user-email-field.webp) @@ -381,8 +261,4 @@ And congrats, you now have Azure AD connected! 🎉 You can use the link provided in the modal right section to let your users login via Azure AD. - +![Hive Login URL](/docs/pages/management/sso/hive-manage-openid-okta-login-url.png) diff --git a/packages/web/docs/src/pages/docs/management/targets.mdx b/packages/web/docs/src/pages/docs/management/targets.mdx index 9323158a72..fb52962fe4 100644 --- a/packages/web/docs/src/pages/docs/management/targets.mdx +++ b/packages/web/docs/src/pages/docs/management/targets.mdx @@ -1,9 +1,4 @@ -import NextImage from 'next/image' import { Callout } from '@theguild/components' -import tokenImage from '../../../../public/docs/pages/guides/token.png' -import newTargetFormImage from '../../../../public/docs/pages/management/new-target-form.png' -import tagetConditionalBreakingChangesImage from '../../../../public/docs/pages/management/target-conditional-breaking-changes.png' -import tokenCreateSuccess from '../../../../public/docs/pages/management/target-created-token.png' # Target Management @@ -23,11 +18,7 @@ use. From your Hive **project** page, you can see the list of targets created under the project. You can also use the **New Target** button to create a new target. - +![Create Target Form](/docs/pages/management/new-target-form.png) ## Manage existing target @@ -40,11 +31,7 @@ schemas as safe, based on real-life data and traffic reported to Hive. This is d When a new schema of your GraphQL schema is published to the registry, Hive uses the data collected from your API gateway to identify whether the change in your schema actually affects consumers. - +![Conditional Breaking Changes](/docs/pages/management/target-conditional-breaking-changes.png) Under your target's **Settings** page, you can enable the **Conditional Breaking Changes** feature and configure the following settings: @@ -57,7 +44,7 @@ a specific time range. Here are a few examples and their meaning: - **Traffic Threshold:** `0%`: A breaking change is considered as breaking and dangerous if the - field was was used at least once. + field was used at least once. - **Traffic Threshold:** `10%`: A breaking change is considered as breaking and dangerous if the field was requested by more than 10% of all GraphQL operation. @@ -152,20 +139,12 @@ Under the **Registry Access Tokens** section, click the **Generate new token** b access token a either select a predefined preset for your token (under **Simple** view), or create a token with custom permissions (under **Advanced** view). - +![Create Registry Token Form](/docs/pages/guides/token.png) -Click on **Generate Token** button and you should get your CLI token created, with permissions to +Click on **Generate Token** button, and you should get your CLI token created, with permissions to publish GraphQL schemas. - +![Created Token](/docs/pages/management/target-created-token.png) Make sure to copy your token and keep it safe. **You won't be able to see it again.** diff --git a/packages/web/docs/src/pages/docs/schema-registry/app-deployments.mdx b/packages/web/docs/src/pages/docs/schema-registry/app-deployments.mdx index 19d44a6bee..f7504b687d 100644 --- a/packages/web/docs/src/pages/docs/schema-registry/app-deployments.mdx +++ b/packages/web/docs/src/pages/docs/schema-registry/app-deployments.mdx @@ -2,7 +2,6 @@ title: 'App Deployment (Persisted Operations)' --- -import NextImage from 'next/image' import { Callout, Tabs } from '@theguild/components' # App Deployments @@ -14,7 +13,7 @@ import { Callout, Tabs } from '@theguild/components' href="#" className="inline-block underline" onClick={() => { - window?.$crisp?.push(['do', 'chat:open']) + window.$crisp?.push(['do', 'chat:open']) }} > reach out to us @@ -32,7 +31,7 @@ Making better decisions about: - Which operations are being used by what app client version (mobile app, web app, etc.) - Which team or developer is responsible for a specific operation and needs to be contacted for - Schema change decissions + Schema change decisions ```mermaid flowchart LR @@ -174,24 +173,12 @@ App UI. Navigate to the Target page on the Hive Dashboard and click on the **Apps** tab to see it. -import pendingAppImage from '../../../../public/docs/pages/features/app-deployments/pending-app.png' - - +![Pending App Deployment](/docs/pages/features/app-deployments/pending-app.png) By clicking on the app deployments name, you can navigate to the app deployment details page, where you can see all the GraphQL operations that are uploaded as part of this app deployment. -import detailAppImage from '../../../../public/docs/pages/features/app-deployments/detail-app.png' - - +![App Deployment Detail View](/docs/pages/features/app-deployments/detail-app.png) ## Publish an App Deployment @@ -214,13 +201,7 @@ hive app:publish --name "my-app" --version "1.0.0" After publishing the app deployment, the persisted documents, the status of the app deployment on the Hive dashboard will change to **active**. -import activeAppImage from '../../../../public/docs/pages/features/app-deployments/active-app.png' - - +![Active App Deployment](/docs/pages/features/app-deployments/active-app.png) ## Persisted Documents on GraphQL Server and Gateway @@ -549,15 +530,14 @@ function fetchQuery(operation, variables) { -## Continous Deployment (CD) Integration +## Continuous Deployment (CD) Integration We recommend integrating the app deployment creation and publishing into your CD pipeline for -automating the creationg and publishing of app deployments. +automating the creating and publishing of app deployments. Usually the following steps are performed. ```mermaid - graph TD A[Extract Persisted Documents from App] --> B[Create App Deployment via Hive CLI] B --> C[Publish App Deployment via Hive CLI] diff --git a/packages/web/docs/src/pages/docs/schema-registry/contracts.mdx b/packages/web/docs/src/pages/docs/schema-registry/contracts.mdx index a3e52b22ee..261d3e670e 100644 --- a/packages/web/docs/src/pages/docs/schema-registry/contracts.mdx +++ b/packages/web/docs/src/pages/docs/schema-registry/contracts.mdx @@ -2,7 +2,6 @@ title: Schema Contracts --- -import NextImage from 'next/image' import { Callout } from '@theguild/components' # Contract Management @@ -116,33 +115,15 @@ type Query { Contracts are defined within the Hive application. You can define a contract by navigating to the Target settings. -import settingsPageImage from '../../../../public/docs/pages/management/contracts/settings-page.png' - - +![Target Settings](/docs/pages/management/contracts/settings-page.png) On the settings page, there is a schema contracts section. -import schemaContractsSettingsEmptyImage from '../../../../public/docs/pages/management/contracts/schema-contracts-settings-empty.png' - - +![Schema contract section in target settings](/docs/pages/management/contracts/schema-contracts-settings-empty.png) Click the "Create new contract" button to create a new contract. -import createSchemaContractModalImage from '../../../../public/docs/pages/management/contracts/create-schema-contract-modal.png' - - +![Create Schema Contract Modal](/docs/pages/management/contracts/create-schema-contract-modal.png) Within the dialogue, you need to define the name of the contract and the filter. @@ -162,24 +143,12 @@ from the public API schema. After that, press the "Create Contract" button to create the contract. -import createSchemaContractModalConfirmImage from '../../../../public/docs/pages/management/contracts/create-schema-contract-modal-confirm.png' +![Create schema contract confirmation modal](/docs/pages/management/contracts/create-schema-contract-modal-confirm.png) - - -If the contract creation succeeds you will see the success modal. Close the modal and you will now +If the contract creation succeeds you will see the success modal. Close the modal, and you will now see the contract in the schema contracts section. -import schemaContractsSettingsContractImage from '../../../../public/docs/pages/management/contracts/schema-contracts-settings-contract.png' - - +![Schema contract section in target settings with created contract](/docs/pages/management/contracts/schema-contracts-settings-contract.png) The contract is now active and used for subsequent schema checks and schema publishing runs within the target. Note that the first contract version will only be published after the next schema is @@ -191,49 +160,25 @@ When you run a schema check, Hive will run the schema check for each contract de if the composition of the contract schema is not valid, or the contract schema contains breaking changes, the schema check will fail. -import schemaChecksContractExample from '../../../../public/docs/pages/management/contracts/schema-checks-contract-example.png' - - +![Contract in Schema Checks](/docs/pages/management/contracts/schema-checks-contract-example.png) ## Contracts in Schema Publishing Hive will publish the contract schema to the schema registry when you run a schema publishing run. Within the History view of a target, you can see how the contract schema has evolved. -import schemaHistoryContractDiffTextImage from '../../../../public/docs/pages/management/contracts/schema-history-contract-diff-text.png' - - +![Changes listed in the schema version history for a contract](/docs/pages/management/contracts/schema-history-contract-diff-text.png) You can also see the direct changes on the SDL or Supergraph to the previous schema version. -import schemaHistoryContractDiffGitStyle from '../../../../public/docs/pages/management/contracts/schema-history-contract-diff-git-style.png' - - +![Supergraph Diff from one contract version to the next using a diff view](/docs/pages/management/contracts/schema-history-contract-diff-git-style.png) ## Access Contract CDN Artifacts Artifacts such as the SDL and Supergraph of a contract are available on the High-Availability CDN. Within the "Connect to CDN" modal, you can find the URLs for accessing the contract artifacts. -import hiveCdnAccessContractImage from '../../../../public/docs/pages/management/contracts/hive-cdn-access-contract.png' - - +![Selecting the contract in the connect to CDN modal](/docs/pages/management/contracts/hive-cdn-access-contract.png) ## Serving a Contract Schema diff --git a/packages/web/docs/src/pages/docs/schema-registry/external-schema-composition.mdx b/packages/web/docs/src/pages/docs/schema-registry/external-schema-composition.mdx index 67caaf177e..183e6087b1 100644 --- a/packages/web/docs/src/pages/docs/schema-registry/external-schema-composition.mdx +++ b/packages/web/docs/src/pages/docs/schema-registry/external-schema-composition.mdx @@ -1,9 +1,4 @@ -import NextImage from 'next/image' import { Callout, Steps, Tabs } from '@theguild/components' -import externalCompositionInvalid from '../../../../public/docs/pages/management/external-composition-invalid.png' -import externalCompositionValid from '../../../../public/docs/pages/management/external-composition-valid.png' -import externalCompositionOff from '../../../../public/docs/pages/management/external-schema-composition-disabled.png' -import externalCompositionOn from '../../../../public/docs/pages/management/external-schema-composition-enabled.png' # External Schema Composition @@ -163,7 +158,7 @@ await server.listen({ ``` - You can also find here [an example using NodeJS's HTTP + You can also find here [an example using NodeJS' HTTP library](https://github.com/graphql-hive/platform/blob/4af001a7102b255bd8ceb8e3f01722faceb8f2f3/packages/services/external-composition/federation-2). @@ -218,37 +213,21 @@ function verifyRequest(input) { Start by enabling the **External Composition** for your project. To do that, go to your Hive project page, and click the **Settings** tab. You'll notice a **"External Composition"** section. - +![External Composition section in the project settings](/docs/pages/management/external-schema-composition-disabled.png) Next, provide the URL of your deployed endpoint, and also set the secret you set for your service. Click **Save**. - +![External Composition section in the project settings](/docs/pages/management/external-schema-composition-enabled.png) If your service is available publicly and the secret matches, you should see a green checkmark next to the URL: - +![Valid External Composition](/docs/pages/management/external-composition-valid.png) In case of a failure, you'll see a red cross with the reason of the failure: - +![Invalid External Composition](/docs/pages/management/external-composition-invalid.png) Now you should be able to use the **External Composition** feature in your project. [Publish a GraphQL schema](/docs/schema-registry#publish-a-schema) or perform a diff --git a/packages/web/docs/src/pages/docs/schema-registry/index.mdx b/packages/web/docs/src/pages/docs/schema-registry/index.mdx index 4f20b38f6d..eebff34ac2 100644 --- a/packages/web/docs/src/pages/docs/schema-registry/index.mdx +++ b/packages/web/docs/src/pages/docs/schema-registry/index.mdx @@ -1,7 +1,4 @@ -import NextImage from 'next/image' import { Callout, Cards } from '@theguild/components' -import schemaHistoryDiffImage from '../../../../public/docs/pages/features/history-diff.png' -import schemaHistoryImage from '../../../../public/docs/pages/guides/history.png' # Schema Registry @@ -233,18 +230,10 @@ In the list of schema versions of changes, you'll be able to see the following i You can inspect a change in your GraphQL schema using the Changelog view. This view provides you an overview of the changes, and their respective impact on your GraphQL schema: - +![Schema History Changelog](/docs/pages/guides/history.png) ### Diff View If you wish to have a more technical view of the changes, you can use the `diff` view: - +![Schema History Diff](/docs/pages/features/history-diff.png) diff --git a/packages/web/docs/src/pages/docs/schema-registry/schema-policy.mdx b/packages/web/docs/src/pages/docs/schema-registry/schema-policy.mdx index ecb23098c8..6587bf404e 100644 --- a/packages/web/docs/src/pages/docs/schema-registry/schema-policy.mdx +++ b/packages/web/docs/src/pages/docs/schema-registry/schema-policy.mdx @@ -2,15 +2,7 @@ title: Schema Policies (linting) --- -import NextImage from 'next/image' import { Callout } from '@theguild/components' -import cliPolicyErrorImage from '../../../../public/docs/pages/features/policy/policy-cli-error.png' -import cliPolicyWarningImage from '../../../../public/docs/pages/features/policy/policy-cli-warning.png' -import policyOverrideConfigImage from '../../../../public/docs/pages/features/policy/policy-override-config.png' -import policyOverrideSeverityImage from '../../../../public/docs/pages/features/policy/policy-override-severity.png' -import policyOverviewImage from '../../../../public/docs/pages/features/policy/policy-overview.png' -import policyRulesConfigImage from '../../../../public/docs/pages/features/policy/policy-rules-config.png' -import policySeverityImage from '../../../../public/docs/pages/features/policy/policy-severity.png' # Schema Policies @@ -37,11 +29,7 @@ To find the list of all available rules, go to your **organization** or **projec **Policy** tab. You will see the list of all available rules, with the ability to enable/disable rule by using the corresponding checkbox. - +![Schema Policy Overview](/docs/pages/features/policy/policy-overview.png) Once a rule is activated, you may configure the following options: @@ -49,11 +37,7 @@ Once a rule is activated, you may configure the following options: You can set the severity of the rule to `warning` or `error`. The default severity is `warning`. - +![Schema Policy Severity](/docs/pages/features/policy/policy-severity.png) A rule defined with `warning` severity will emit a **warning**, but will not fail the schema check. @@ -65,11 +49,7 @@ Every rule activated in the policy can be configured with the corresponding opti might only have the severity option, but some rule can be configured with additional options to ensure flexibility. - +![Policy Per-rule Configuration](/docs/pages/features/policy/policy-rules-config.png) ## Policies Hierarchy and Overrides @@ -85,22 +65,14 @@ being merged**. When a policy is defined for the organization, you'll see an indicator on the project page, near every rule that you override: - +![Override Policy Configuration](/docs/pages/features/policy/policy-override-config.png) In addition to the ability to override rules configuration or severity, you can disable rules that were defined at the organization level by setting the rule severity to `off`. - +![Override Policy Severity](/docs/pages/features/policy/policy-override-severity.png) -### Prevening overrides +### Preventing overrides If you wish to prevent overrides of your organization-level policies, you can do so by unchecking the `Allow projects to override or disable rules` checkbox under your organization's **Policy** @@ -117,14 +89,6 @@ page. Schema Policies is fully integrated into the Hive CLI, and you'll see both warnings and error coming from the schema policies: - - - +![Hive CLI and Policy Warnings](/docs/pages/features/policy/policy-cli-warning.png) + +![Hive CLI and Policy Errors](/docs/pages/features/policy/policy-cli-error.png) diff --git a/packages/web/docs/src/pages/docs/schema-registry/usage-reporting.mdx b/packages/web/docs/src/pages/docs/schema-registry/usage-reporting.mdx index 39902d7ee5..1f1ee45811 100644 --- a/packages/web/docs/src/pages/docs/schema-registry/usage-reporting.mdx +++ b/packages/web/docs/src/pages/docs/schema-registry/usage-reporting.mdx @@ -2,14 +2,7 @@ title: GraphQL Schema Usage --- -import NextImage from 'next/image' import { Callout } from '@theguild/components' -import monitoringViewImage from '../../../../public/docs/pages/features/monitoring-view.png' -import usageClientsImage from '../../../../public/docs/pages/features/usage-clients.png' -import usageLatencyImage from '../../../../public/docs/pages/features/usage-latency-over-time.png' -import usageOperationsOverTimeImage from '../../../../public/docs/pages/features/usage-operations-over-time.png' -import usageRpmImage from '../../../../public/docs/pages/features/usage-rpm-over-time.png' -import usageStatsImage from '../../../../public/docs/pages/features/usage-stats.png' # Usage Reporting and Monitoring @@ -57,11 +50,7 @@ For additional reading, please refer to the following resources: Once you have usage reporting enabled, and shipped your usage reports to Hive, you can view the usage data in the **Monitoring** view of the target. - +![Monitoring View](/docs/pages/features/monitoring-view.png) This view includes the following information: @@ -72,26 +61,18 @@ From the usage statistics view, you'll be able to see the following metrics of y 1. Total amount of GraphQL executed. 2. Average RPM (Requests Per Minute) 3. Total count of unique GraphQL operations -4. Sucess-rate of the executed operations +4. Success-rate of the executed operations 5. Error-rate of the executed operations 6. Latency (`p99`, `p95` and `p90`) - +![Usage Statistics View](/docs/pages/features/usage-stats.png) ### Clients Overview A breakdown of the clients who are using your GraphQL gateway, and the amount of operations executed by each client. - +![Clients Overview](/docs/pages/features/usage-clients.png) ### Monitoring Statistics @@ -100,24 +81,12 @@ performance: 1. **Operations time**: the amount of GraphQL operations executed over time. - +![Operations Over Time](/docs/pages/features/usage-operations-over-time.png) 2. **RPM over time**: the amount of GraphQL operations executed per minute over time. - +![RPM Over Time](/docs/pages/features/usage-rpm-over-time.png) 3. **Latency over time**: the latency of GraphQL operations over time. - +![Latency Over Time](/docs/pages/features/usage-latency-over-time.png) diff --git a/packages/web/docs/src/pages/docs/self-hosting/get-started.mdx b/packages/web/docs/src/pages/docs/self-hosting/get-started.mdx index f851753f04..57349fd7a8 100644 --- a/packages/web/docs/src/pages/docs/self-hosting/get-started.mdx +++ b/packages/web/docs/src/pages/docs/self-hosting/get-started.mdx @@ -1,6 +1,4 @@ -import NextImage from 'next/image' import { Callout } from '@theguild/components' -import diagram from '../../../../public/docs/pages/self-hosting/diagram.png' # Self-Hosting Hive @@ -46,7 +44,7 @@ components: - Hive microservices -The defualt configuration of the self-hosted environment comes with a single instance of each database. +The default configuration of the self-hosted environment comes with a single instance of each database. For production environments, we recommend replacing the in-cluster databases (PostgreSQL, Kafka and ClickHouse) and storage (S3) with managed database/storage (Cloud-based or in-house). @@ -59,11 +57,7 @@ ClickHouse) and storage (S3) with managed database/storage (Cloud-based or in-ho The following diagram shows the architecture of a self-hosted GraphQL Hive instance: - +![Self-hosting diagram](/docs/pages/self-hosting/diagram.png) ### Services Overview @@ -132,7 +126,7 @@ First download the `docker-compose.community.yml` file from the using `wget`. This's going to download the latest version available. - Note: make sure you've Docker installed to be able to continue with the setup process. + **Note**: make sure you've Docker installed to be able to continue with the setup process. > You can also download the file directly from GitHub, if you don't have wget installed using the @@ -275,7 +269,7 @@ git init Make sure you exclude the following in your `.gitignore` file, because you don't wanna push those in your commits: -``` +```gitignore node_modules .hive hive.json diff --git a/packages/web/docs/src/pages/oss-friends.mdx b/packages/web/docs/src/pages/oss-friends.mdx index ce2546344f..bc4237208d 100644 --- a/packages/web/docs/src/pages/oss-friends.mdx +++ b/packages/web/docs/src/pages/oss-friends.mdx @@ -3,7 +3,6 @@ title: Our Open Source Friends description: We love open source. Meet our friends who share the same passion. --- -import NextLink from 'next/link' import { useData } from '@theguild/components' import { OSSFriendsPage } from '../components/oss-friends' diff --git a/packages/web/docs/src/pages/product-updates/2024-07-30-persisted-documents-app-deployments-preview.mdx b/packages/web/docs/src/pages/product-updates/2024-07-30-persisted-documents-app-deployments-preview.mdx index 213e9aed92..57599af074 100644 --- a/packages/web/docs/src/pages/product-updates/2024-07-30-persisted-documents-app-deployments-preview.mdx +++ b/packages/web/docs/src/pages/product-updates/2024-07-30-persisted-documents-app-deployments-preview.mdx @@ -7,8 +7,6 @@ date: 2024-07-30 authors: [laurin] --- -import NextImage from 'next/image' - **TL;DR** Persisted documents through app deployments are now available in preview on Hive and allow you to secure your GraphQL API. To get started, please refer to the [app deployments documentation](/docs/schema-registry/app-deployments). @@ -87,13 +85,7 @@ Furthermore, you get analytics specific to your deployed app version, so you can decisions on deprecating and removing fields from your GraphQL API schema and avoid breaking ancient versions of your app. -import pendingAppImage from '../../../public/changelog/2024-07-30-persisted-documents-app-deployments-preview/app-deployments-overview.png' - - +![App Deployments on Hive Dashboard](/changelog/2024-07-30-persisted-documents-app-deployments-preview/app-deployments-overview.png) App deployments are now available in preview on Hive. To get started, please refer to the [app deployments documentation](/docs/schema-registry/app-deployments). diff --git a/packages/web/docs/src/theme.config.tsx b/packages/web/docs/src/theme.config.tsx index 50e2580b9f..8cdb65a65a 100644 --- a/packages/web/docs/src/theme.config.tsx +++ b/packages/web/docs/src/theme.config.tsx @@ -1,3 +1,4 @@ +import NextImage, { ImageProps } from 'next/image'; import { useRouter } from 'next/router'; import { defineConfig, @@ -124,23 +125,24 @@ export default defineConfig({ return ( :first-child]:mx-0 [&>:first-child]:max-w-[90rem]', 'pt-[72px]', )} - resources={[ - { - children: 'Privacy Policy', - href: 'https://the-guild.dev/graphql/hive/privacy-policy.pdf', - title: 'Privacy Policy', - }, - { - children: 'Terms of Use', - href: 'https://the-guild.dev/graphql/hive/terms-of-use.pdf', - title: 'Terms of Use', - }, - ]} + items={{ + resources: [ + { + children: 'Privacy Policy', + href: 'https://the-guild.dev/graphql/hive/privacy-policy.pdf', + title: 'Privacy Policy', + }, + { + children: 'Terms of Use', + href: 'https://the-guild.dev/graphql/hive/terms-of-use.pdf', + title: 'Terms of Use', + }, + ], + }} /> ); }, @@ -183,4 +185,14 @@ export default defineConfig({ description: 'Schema registry for your GraphQL workflows', websiteName: 'Hive', logo: , + components: { + // @ts-expect-error -- fixme + img(props: ImageProps) { + const ComponentToUse = typeof props.src === 'object' ? NextImage : 'img'; + return ( + // @ts-expect-error -- fixme + + ); + }, + }, }); diff --git a/packages/web/docs/tailwind.config.ts b/packages/web/docs/tailwind.config.ts index 1aa60fa461..a834098563 100644 --- a/packages/web/docs/tailwind.config.ts +++ b/packages/web/docs/tailwind.config.ts @@ -3,6 +3,7 @@ import type { Config } from 'tailwindcss'; import tailwindcssAnimate from 'tailwindcss-animate'; import tailwindcssRadix from 'tailwindcss-radix'; import { fontFamily } from 'tailwindcss/defaultTheme'; +// @ts-expect-error -- no types import { default as flattenColorPalette } from 'tailwindcss/lib/util/flattenColorPalette'; import plugin from 'tailwindcss/plugin'; import tailwindTypography from '@tailwindcss/typography'; diff --git a/packages/web/docs/tsconfig.json b/packages/web/docs/tsconfig.json index 8433f8a200..22844e3932 100644 --- a/packages/web/docs/tsconfig.json +++ b/packages/web/docs/tsconfig.json @@ -9,7 +9,7 @@ "noEmit": true, "esModuleInterop": true, "module": "esnext", - "moduleResolution": "node", + "moduleResolution": "bundler", "resolveJsonModule": true, "isolatedModules": true, "jsx": "preserve", @@ -21,6 +21,6 @@ ], "strictNullChecks": true }, - "include": ["next-env.d.ts", "src", ".next/types/**/*.ts"], + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], "exclude": ["node_modules"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1f3acdf46c..0810aaa5ed 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2021,8 +2021,8 @@ importers: specifier: 0.5.15 version: 0.5.15(tailwindcss@3.4.15(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(@types/node@22.9.3)(typescript@5.6.3))) '@theguild/components': - specifier: 7.3.0 - version: 7.3.0(@theguild/tailwind-config@0.6.0(postcss-import@16.1.0(postcss@8.4.49))(postcss-lightningcss@1.0.1(postcss@8.4.49))(tailwindcss@3.4.15(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(@types/node@22.9.3)(typescript@5.6.3))))(@types/react-dom@18.3.1)(@types/react@18.3.12)(next@14.2.18(@babel/core@7.22.9)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(webpack@5.94.0(@swc/core@1.9.2(@swc/helpers@0.5.11))(esbuild@0.23.1)) + specifier: 7.3.3 + version: 7.3.3(@theguild/tailwind-config@0.6.0(postcss-import@16.1.0(postcss@8.4.49))(postcss-lightningcss@1.0.1(postcss@8.4.49))(tailwindcss@3.4.15(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(@types/node@22.9.3)(typescript@5.6.3))))(@types/react-dom@18.3.1)(@types/react@18.3.12)(next@14.2.18(@babel/core@7.22.9)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(webpack@5.94.0(@swc/core@1.9.2(@swc/helpers@0.5.11))(esbuild@0.23.1)) clsx: specifier: 2.1.1 version: 2.1.1 @@ -4884,8 +4884,8 @@ packages: resolution: {integrity: sha512-lH8bYk2kqfbKsht/Gejd8K+y069ZXPHBfrlcj1ptS6xlJbHhncHxpFyy57W+PTuCcN+MPGVjs+3CiufG8EUrCQ==} engines: {node: '>= 10'} - '@next/bundle-analyzer@15.0.3': - resolution: {integrity: sha512-x7ZNvpoQPO0C5ZG//qVp21Qs3v6+C8LBJmdu9DKj4/NmjlnwoQ7dqRZ/nKZcwVhkFT7BHf+Qd5FaeHq9IDJvDQ==} + '@next/bundle-analyzer@15.0.4': + resolution: {integrity: sha512-0If3/mxqUWYC0lAdV5cChGA1Xs1BENjaLyJkdqpI2df86HqprcDZagiB2IU1xc5ph7xZHRdi5mT2cY7VkyibTQ==} '@next/env@13.5.6': resolution: {integrity: sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw==} @@ -7477,10 +7477,10 @@ packages: resolution: {integrity: sha512-kUiFyUQDiVdpeeL/qwOZAdDZrYFTwqppwNZDxOXcPSKeqGCZe8ajbbN64OAS7VlGMnXWxEEHcjhyFzB9gtHn5w==} hasBin: true - '@theguild/components@7.3.0': - resolution: {integrity: sha512-g1A2ux536gbbUcZePMtg711iC4oXgoTWEAwQW2mMIAM2I0EtPgXZeX9CYsIzHmQKLGKDEQGyEmLGGzlc9pu2yg==} + '@theguild/components@7.3.3': + resolution: {integrity: sha512-/DafpemXMV8wGLGhvdX1Is+uSoK8oK2Nl0sg70N3uA5XaRhtJKUF63i37zHRfdWVBsSYMNceLKd+w3tneD3FlA==} peerDependencies: - '@theguild/tailwind-config': 0.6.0 + '@theguild/tailwind-config': 0.6.1 next: ^13 || ^14 || ^15.0.0 react: ^18.2.0 react-dom: ^18.2.0 @@ -12615,16 +12615,16 @@ packages: sass: optional: true - nextra-theme-docs@3.2.4: - resolution: {integrity: sha512-3fg7zMHInuvSDURRJjh6UrbdqkK8uLs8RNriY38kVukWLvaVP2f6mmVJKIYqxVv6qAKWEzDLTr4dlJCY81eXuQ==} + nextra-theme-docs@3.2.5: + resolution: {integrity: sha512-eF0j1VNNS1rFjZOfYqlrXISaCU3+MhZ9hhXY+TUydRlfELrFWpGzrpW6MiL7hq4JvUR7OBtHHs8+A+8AYcETBQ==} peerDependencies: next: '>=13' - nextra: 3.2.4 + nextra: 3.2.5 react: '>=18' react-dom: '>=18' - nextra@3.2.4: - resolution: {integrity: sha512-xvQuPVtRoJTz4ynIbEkxYkEtviIX699lt4coij2IMmafYrBNaD0Ofj93jIz7VngYxyT9f4gWSiwqNgoIlnbsjQ==} + nextra@3.2.5: + resolution: {integrity: sha512-n665DRpI/brjHXM83G5LdlbYA2nOtjaLcWJs7mZS3gkuRDmEXpJj4XJ860xrhkYZW2iYoUMu32zzhPuFByU7VA==} engines: {node: '>=18'} peerDependencies: next: '>=13' @@ -19954,7 +19954,7 @@ snapshots: '@napi-rs/simple-git-win32-arm64-msvc': 0.1.17 '@napi-rs/simple-git-win32-x64-msvc': 0.1.17 - '@next/bundle-analyzer@15.0.3': + '@next/bundle-analyzer@15.0.4': dependencies: webpack-bundle-analyzer: 4.10.1 transitivePeerDependencies: @@ -23338,18 +23338,18 @@ snapshots: typescript: 4.9.5 yargs: 16.2.0 - '@theguild/components@7.3.0(@theguild/tailwind-config@0.6.0(postcss-import@16.1.0(postcss@8.4.49))(postcss-lightningcss@1.0.1(postcss@8.4.49))(tailwindcss@3.4.15(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(@types/node@22.9.3)(typescript@5.6.3))))(@types/react-dom@18.3.1)(@types/react@18.3.12)(next@14.2.18(@babel/core@7.22.9)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(webpack@5.94.0(@swc/core@1.9.2(@swc/helpers@0.5.11))(esbuild@0.23.1))': + '@theguild/components@7.3.3(@theguild/tailwind-config@0.6.0(postcss-import@16.1.0(postcss@8.4.49))(postcss-lightningcss@1.0.1(postcss@8.4.49))(tailwindcss@3.4.15(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(@types/node@22.9.3)(typescript@5.6.3))))(@types/react-dom@18.3.1)(@types/react@18.3.12)(next@14.2.18(@babel/core@7.22.9)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(webpack@5.94.0(@swc/core@1.9.2(@swc/helpers@0.5.11))(esbuild@0.23.1))': dependencies: '@giscus/react': 3.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@next/bundle-analyzer': 15.0.3 + '@next/bundle-analyzer': 15.0.4 '@radix-ui/react-navigation-menu': 1.2.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@theguild/tailwind-config': 0.6.0(postcss-import@16.1.0(postcss@8.4.49))(postcss-lightningcss@1.0.1(postcss@8.4.49))(tailwindcss@3.4.15(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(@types/node@22.9.3)(typescript@5.6.3))) clsx: 2.1.1 fuzzy: 0.1.3 next: 14.2.18(@babel/core@7.22.9)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-videos: 1.5.0(webpack@5.94.0(@swc/core@1.9.2(@swc/helpers@0.5.11))(esbuild@0.23.1)) - nextra: 3.2.4(@types/react@18.3.12)(next@14.2.18(@babel/core@7.22.9)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - nextra-theme-docs: 3.2.4(next@14.2.18(@babel/core@7.22.9)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nextra@3.2.4(@types/react@18.3.12)(next@14.2.18(@babel/core@7.22.9)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + nextra: 3.2.5(@types/react@18.3.12)(next@14.2.18(@babel/core@7.22.9)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + nextra-theme-docs: 3.2.5(next@14.2.18(@babel/core@7.22.9)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nextra@3.2.5(@types/react@18.3.12)(next@14.2.18(@babel/core@7.22.9)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-paginate: 8.2.0(react@18.3.1) @@ -23388,8 +23388,8 @@ snapshots: '@typescript-eslint/parser': 7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3) eslint: 8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva) eslint-config-prettier: 9.1.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-plugin-import@2.29.1)(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) eslint-plugin-jsonc: 2.11.1(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) eslint-plugin-mdx: 3.0.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) @@ -26097,13 +26097,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-plugin-import@2.29.1)(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)): + eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)): dependencies: debug: 4.3.7(supports-color@8.1.1) enhanced-resolve: 5.17.1 eslint: 8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva) - eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) fast-glob: 3.3.2 get-tsconfig: 4.7.5 is-core-module: 2.13.1 @@ -26134,14 +26134,14 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)): + eslint-module-utils@2.8.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)): dependencies: debug: 3.2.7(supports-color@8.1.1) optionalDependencies: '@typescript-eslint/parser': 7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3) eslint: 8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-plugin-import@2.29.1)(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) transitivePeerDependencies: - supports-color @@ -26157,7 +26157,7 @@ snapshots: eslint: 8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva) eslint-compat-utils: 0.1.2(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) - eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)): dependencies: array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 @@ -26167,7 +26167,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -29860,7 +29860,7 @@ snapshots: - '@babel/core' - babel-plugin-macros - nextra-theme-docs@3.2.4(next@14.2.18(@babel/core@7.22.9)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nextra@3.2.4(@types/react@18.3.12)(next@14.2.18(@babel/core@7.22.9)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + nextra-theme-docs@3.2.5(next@14.2.18(@babel/core@7.22.9)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nextra@3.2.5(@types/react@18.3.12)(next@14.2.18(@babel/core@7.22.9)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@headlessui/react': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) clsx: 2.1.1 @@ -29868,13 +29868,13 @@ snapshots: flexsearch: 0.7.43 next: 14.2.18(@babel/core@7.22.9)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-themes: 0.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - nextra: 3.2.4(@types/react@18.3.12)(next@14.2.18(@babel/core@7.22.9)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + nextra: 3.2.5(@types/react@18.3.12)(next@14.2.18(@babel/core@7.22.9)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) scroll-into-view-if-needed: 3.1.0 zod: 3.23.8 - nextra@3.2.4(@types/react@18.3.12)(next@14.2.18(@babel/core@7.22.9)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3): + nextra@3.2.5(@types/react@18.3.12)(next@14.2.18(@babel/core@7.22.9)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3): dependencies: '@formatjs/intl-localematcher': 0.5.5 '@headlessui/react': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)