From 7d5be83e4c1c719756e7bca482586382592f81eb Mon Sep 17 00:00:00 2001 From: vchikalkin Date: Mon, 20 May 2024 20:44:48 +0300 Subject: [PATCH] apps/web: pass DEV_AUTH_TOKEN to GQL request --- apps/web/apollo/link.js | 26 +++++++++++++++++++++++- apps/web/config/schema/env.js | 1 + apps/web/config/schema/runtime-config.js | 2 ++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/apps/web/apollo/link.js b/apps/web/apollo/link.js index 7f17dec..2363d5c 100644 --- a/apps/web/apollo/link.js +++ b/apps/web/apollo/link.js @@ -1,9 +1,12 @@ /* eslint-disable sonarjs/cognitive-complexity */ import { message } from '@/Components/Common/Notification'; +import { publicRuntimeConfigSchema } from '@/config/schema/runtime-config'; import getUrls from '@/config/urls'; import { ApolloLink, from, HttpLink } from '@apollo/client'; +import { setContext } from '@apollo/client/link/context'; import { onError } from '@apollo/client/link/error'; import { getCurrentScope } from '@sentry/nextjs'; +import getConfig from 'next/config'; import { isServer } from 'tools'; const { URL_CRM_GRAPHQL } = getUrls(); @@ -61,6 +64,27 @@ const httpLink = new HttpLink({ uri: URL_CRM_GRAPHQL, }); +const authLink = setContext((_, { headers: existingHeaders }) => { + if (process.env.NODE_ENV === 'development') { + const { publicRuntimeConfig } = getConfig(); + const { DEV_AUTH_TOKEN } = publicRuntimeConfigSchema.parse(publicRuntimeConfig); + + if (DEV_AUTH_TOKEN) + return { + headers: { + ...existingHeaders, + authorization: `Bearer ${DEV_AUTH_TOKEN}`, + }, + }; + } + + return { + headers: { + ...existingHeaders, + }, + }; +}); + const key = 'APOLLO_GRAPHQL'; const errorLink = onError(({ graphQLErrors, networkError, operation, response }) => { @@ -83,4 +107,4 @@ const errorLink = onError(({ graphQLErrors, networkError, operation, response }) }); }); -export const link = from([errorLink, modifyDataLink, httpLink]); +export const link = from([authLink, errorLink, modifyDataLink, httpLink]); diff --git a/apps/web/config/schema/env.js b/apps/web/config/schema/env.js index 59ccf2a..c5c9dc3 100644 --- a/apps/web/config/schema/env.js +++ b/apps/web/config/schema/env.js @@ -11,6 +11,7 @@ const envSchema = z.object({ URL_CACHE_GET_QUERIES_DIRECT: z.string().default('http://api:3001/proxy/get-queries'), URL_CACHE_GET_QUERY_DIRECT: z.string().default('http://api:3001/proxy/get-query'), URL_CACHE_RESET_QUERIES_DIRECT: z.string().default('http://api:3001/proxy/reset'), + DEV_AUTH_TOKEN: z.string().optional(), URL_CORE_CALCULATE_DIRECT: z.string(), URL_CORE_FINGAP_DIRECT: z.string(), URL_CRM_CREATEKP_DIRECT: z.string(), diff --git a/apps/web/config/schema/runtime-config.js b/apps/web/config/schema/runtime-config.js index ed5c1eb..6db9b2c 100644 --- a/apps/web/config/schema/runtime-config.js +++ b/apps/web/config/schema/runtime-config.js @@ -2,6 +2,7 @@ const envSchema = require('./env'); const publicRuntimeConfigSchema = envSchema.pick({ BASE_PATH: true, + DEV_AUTH_TOKEN: true, SENTRY_DSN: true, SENTRY_ENVIRONMENT: true, USE_DEV_COLORS: true, @@ -9,6 +10,7 @@ const publicRuntimeConfigSchema = envSchema.pick({ const serverRuntimeConfigSchema = envSchema.pick({ BASE_PATH: true, + DEV_AUTH_TOKEN: true, PORT: true, SENTRY_DSN: true, SENTRY_ENVIRONMENT: true,