From ba7e3bb842ec95b55ac1affb06144b9c8dce6357 Mon Sep 17 00:00:00 2001 From: Marco Loyo Date: Wed, 12 Jul 2023 12:27:00 -0600 Subject: [PATCH] feat: add function to consume graphql bc through an proxy endpoint --- .../src/components/HeadlessController.tsx | 2 ++ apps/storefront/src/index.d.ts | 1 + .../service/b2b/graphql/accountSetting.ts | 4 +-- .../src/shared/service/b2b/graphql/address.ts | 8 ++--- .../src/shared/service/b2b/graphql/global.ts | 2 +- .../src/shared/service/b2b/graphql/orders.ts | 6 ++-- .../src/shared/service/b2b/graphql/product.ts | 6 ++-- .../shared/service/b2b/graphql/quickorder.ts | 2 +- .../src/shared/service/b2b/graphql/quote.ts | 18 +++++----- .../service/b2b/graphql/shoppingList.ts | 18 +++++----- .../src/shared/service/request/b3Fetch.ts | 34 +++++++++++++++---- .../src/shared/service/request/base.ts | 1 + 12 files changed, 64 insertions(+), 38 deletions(-) diff --git a/apps/storefront/src/components/HeadlessController.tsx b/apps/storefront/src/components/HeadlessController.tsx index 7490a23b..2fc7a1d7 100644 --- a/apps/storefront/src/components/HeadlessController.tsx +++ b/apps/storefront/src/components/HeadlessController.tsx @@ -14,6 +14,7 @@ import { createShoppingList } from '@/pages/orderDetail/components/CreateShoppin import { addProductsToShoppingList } from '@/pages/pdp/PDP' import { GlobaledContext } from '@/shared/global' import { superAdminCompanies } from '@/shared/service/b2b' +import B3Request from '@/shared/service/request/b3Fetch' import { B3SStorage, endMasquerade, @@ -151,6 +152,7 @@ export default function HeadlessController({ }), logInWithStorefrontToken: (customerJWTToken: string) => getCurrentCustomerInfo(dispatch, customerJWTToken), + graphqlBCProxy: B3Request.graphqlBCProxy, }, shoppingList: { addProductFromPage: () => { diff --git a/apps/storefront/src/index.d.ts b/apps/storefront/src/index.d.ts index 8cf46dff..6394af66 100644 --- a/apps/storefront/src/index.d.ts +++ b/apps/storefront/src/index.d.ts @@ -32,6 +32,7 @@ declare interface Window { logInWithStorefrontToken: ( customerJWTToken: string ) => Promise<{ role: number; userType: string } | undefined> + graphqlBCProxy: typeof import('@/shared/service/request/b3Fetch').default.graphqlBCProxy } shoppingList: { addProductFromPage: () => void diff --git a/apps/storefront/src/shared/service/b2b/graphql/accountSetting.ts b/apps/storefront/src/shared/service/b2b/graphql/accountSetting.ts index ba756cf5..9c178b03 100644 --- a/apps/storefront/src/shared/service/b2b/graphql/accountSetting.ts +++ b/apps/storefront/src/shared/service/b2b/graphql/accountSetting.ts @@ -62,7 +62,7 @@ export const updateB2BAccountSettings = ( export const updateBCAccountSettings = ( data: CustomFieldItems ): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: updateCustomerAccountSettings(data), }) @@ -74,6 +74,6 @@ export const getB2BAccountSettings = ( }) export const getBCAccountSettings = (): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: customerAccountSettings(), }) diff --git a/apps/storefront/src/shared/service/b2b/graphql/address.ts b/apps/storefront/src/shared/service/b2b/graphql/address.ts index fb596631..3037496a 100644 --- a/apps/storefront/src/shared/service/b2b/graphql/address.ts +++ b/apps/storefront/src/shared/service/b2b/graphql/address.ts @@ -269,7 +269,7 @@ export const getB2BAddressConfig = (): CustomFieldItems => export const getBCCustomerAddress = ( data: CustomFieldItems = {} ): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: getCustomerAddress(data), }) @@ -283,7 +283,7 @@ export const deleteB2BAddress = ( export const deleteBCCustomerAddress = ( data: CustomFieldItems = {} ): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: deleteCustomerAddress(data), }) @@ -304,12 +304,12 @@ export const createB2BAddress = ( export const createBcAddress = ( data: CustomFieldItems = {} ): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: createCustomerAddress(data), }) export const updateBcAddress = ( data: CustomFieldItems = {} ): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: updateCustomerAddress(data), }) diff --git a/apps/storefront/src/shared/service/b2b/graphql/global.ts b/apps/storefront/src/shared/service/b2b/graphql/global.ts index cc9e86ec..10577afe 100644 --- a/apps/storefront/src/shared/service/b2b/graphql/global.ts +++ b/apps/storefront/src/shared/service/b2b/graphql/global.ts @@ -232,7 +232,7 @@ export const getCurrencies = (channelId: string | number): CustomFieldItems => query: currencies(channelId), }) export const getBcCurrencies = (channelId: string): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: currencies(channelId), }) diff --git a/apps/storefront/src/shared/service/b2b/graphql/orders.ts b/apps/storefront/src/shared/service/b2b/graphql/orders.ts index 870d8ffa..0a2eca21 100644 --- a/apps/storefront/src/shared/service/b2b/graphql/orders.ts +++ b/apps/storefront/src/shared/service/b2b/graphql/orders.ts @@ -198,7 +198,7 @@ export const getB2BAllOrders = (data: CustomFieldItems): CustomFieldItems => }) export const getBCAllOrders = (data: CustomFieldItems): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: allOrders(data, 'customerOrders'), }) @@ -208,7 +208,7 @@ export const getB2BOrderDetails = (id: number): CustomFieldItems => }) export const getBCOrderDetails = (id: number): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: orderDetail(id, 'customerOrder'), }) @@ -218,7 +218,7 @@ export const getOrderStatusType = (): CustomFieldItems => }) export const getBcOrderStatusType = (): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: getOrderStatusTypeQl('bcOrderStatuses'), }) diff --git a/apps/storefront/src/shared/service/b2b/graphql/product.ts b/apps/storefront/src/shared/service/b2b/graphql/product.ts index f24d6afb..ce70d2d5 100644 --- a/apps/storefront/src/shared/service/b2b/graphql/product.ts +++ b/apps/storefront/src/shared/service/b2b/graphql/product.ts @@ -134,14 +134,14 @@ export const searchB2BProducts = ( export const searchBcProducts = ( data: CustomFieldItems = {} ): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: searchProducts(data), }) export const getBcVariantInfoBySkus = ( data: CustomFieldItems = {} ): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: getVariantInfoBySkus(data), }) @@ -155,7 +155,7 @@ export const B2BProductsBulkUploadCSV = ( export const BcProductsBulkUploadCSV = ( data: CustomFieldItems = {} ): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: productsBulkUploadCSV(data), }) diff --git a/apps/storefront/src/shared/service/b2b/graphql/quickorder.ts b/apps/storefront/src/shared/service/b2b/graphql/quickorder.ts index 556842de..8dd074d7 100644 --- a/apps/storefront/src/shared/service/b2b/graphql/quickorder.ts +++ b/apps/storefront/src/shared/service/b2b/graphql/quickorder.ts @@ -56,6 +56,6 @@ export const getOrderedProducts = (data: CustomFieldItems): CustomFieldItems => export const getBcOrderedProducts = ( data: CustomFieldItems ): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: orderedProducts(data), }) diff --git a/apps/storefront/src/shared/service/b2b/graphql/quote.ts b/apps/storefront/src/shared/service/b2b/graphql/quote.ts index 07464e0f..281f1c6d 100644 --- a/apps/storefront/src/shared/service/b2b/graphql/quote.ts +++ b/apps/storefront/src/shared/service/b2b/graphql/quote.ts @@ -345,7 +345,7 @@ const getCreatedByUser = (companyId: number, module: number, fn: string) => `{ }` export const getBCCustomerAddresses = (): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: getCustomerAddresses(), }) @@ -360,7 +360,7 @@ export const getB2BQuotesList = (data: CustomFieldItems): CustomFieldItems => }) export const getBCQuotesList = (data: CustomFieldItems): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: getQuotesList(data, 'bc'), }) @@ -373,7 +373,7 @@ export const createQuote = (data: CustomFieldItems): CustomFieldItems => ) export const createBCQuote = (data: CustomFieldItems): CustomFieldItems => - B3Request.graphqlProxyBC( + B3Request.graphqlB2BWithBCCustomerToken( { query: quoteCreate(data), }, @@ -386,7 +386,7 @@ export const updateB2BQuote = (data: CustomFieldItems): CustomFieldItems => }) export const updateBCQuote = (data: CustomFieldItems): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: quoteUpdate(data), }) @@ -402,7 +402,7 @@ export const getBcQuoteDetail = (data: { id: number date: string }): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: getQuoteInfo(data), }) @@ -418,7 +418,7 @@ export const exportBcQuotePdf = (data: { quoteId: number currency: object }): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: exportQuotePdf(data), }) @@ -428,21 +428,21 @@ export const b2bQuoteCheckout = (data: { id: number }): CustomFieldItems => }) export const bcQuoteCheckout = (data: { id: number }): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: quoteCheckout(data), }) export const quoteDetailAttachFileCreate = ( data: CustomFieldItems ): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: quoteAttachFileCreate(data), }) export const quoteDetailAttachFileDelete = ( data: CustomFieldItems ): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: quoteAttachFileDelete(data), }) diff --git a/apps/storefront/src/shared/service/b2b/graphql/shoppingList.ts b/apps/storefront/src/shared/service/b2b/graphql/shoppingList.ts index a7ed7113..4c098e60 100644 --- a/apps/storefront/src/shared/service/b2b/graphql/shoppingList.ts +++ b/apps/storefront/src/shared/service/b2b/graphql/shoppingList.ts @@ -481,14 +481,14 @@ export const deleteB2BShoppingListItem = ( export const getBcShoppingList = ( data: CustomFieldItems = {} ): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: getCustomerShoppingLists(data), }) export const createBcShoppingList = ( data: CustomFieldItems = {} ): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: createOrUpdateCustomerShoppingList( 'customerShoppingListsCreate', data @@ -498,7 +498,7 @@ export const createBcShoppingList = ( export const updateBcShoppingList = ( data: CustomFieldItems = {} ): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: createOrUpdateCustomerShoppingList( 'customerShoppingListsUpdate', data @@ -508,7 +508,7 @@ export const updateBcShoppingList = ( export const duplicateBcShoppingList = ( data: CustomFieldItems = {} ): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: createOrUpdateCustomerShoppingList( 'customerShoppingListsDuplicate', data @@ -516,35 +516,35 @@ export const duplicateBcShoppingList = ( }) export const deleteBcShoppingList = (id: number): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: deleteCustomerShoppingList(id), }) export const getBcShoppingListDetails = ( data: CustomFieldItems = {} ): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: getCustomerShoppingListDetails(data), }) export const addProductToBcShoppingList = ( data: CustomFieldItems = {} ): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: addItemsToBcShoppingList(data), }) export const updateBcShoppingListsItem = ( data: CustomFieldItems = {} ): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: updateCustomerShoppingListsItem(data), }) export const deleteBcShoppingListItem = ( data: CustomFieldItems = {} ): CustomFieldItems => - B3Request.graphqlProxyBC({ + B3Request.graphqlB2BWithBCCustomerToken({ query: deleteCustomerShoppingListItem(data), }) diff --git a/apps/storefront/src/shared/service/request/b3Fetch.ts b/apps/storefront/src/shared/service/request/b3Fetch.ts index 9091c6ad..1f0af714 100644 --- a/apps/storefront/src/shared/service/request/b3Fetch.ts +++ b/apps/storefront/src/shared/service/request/b3Fetch.ts @@ -41,6 +41,12 @@ interface Config { } } +const GraphqlEndpoints = { + B2BGraphql: `${B2B_BASIC_URL}/graphql`, + BCGraphql: `${bcBaseUrl}/graphql`, + BCProxyGraphql: `${B2B_BASIC_URL}/api/v3/proxy/bc-storefront/graphql`, +} as const + function request(path: string, config?: T & Config, type?: string) { const url = RequestType.B2BRest === type ? `${B2B_BASIC_URL}${path}` : path const getToken = @@ -69,7 +75,7 @@ function request(path: string, config?: T & Config, type?: string) { } function graphqlRequest( - type: string, + type: keyof typeof GraphqlEndpoints, data: T, config?: Y, customMessage = false @@ -83,21 +89,24 @@ function graphqlRequest( body: JSON.stringify(data), } - const graphqlB2BUrl = `${B2B_BASIC_URL}/graphql` - - const url = - type === RequestType.B2BGraphql ? graphqlB2BUrl : `${bcBaseUrl}/graphql` + const url = GraphqlEndpoints[type] return b3Fetch(url, init, type, customMessage) } const B3Request = { + /** + * Request to B2B graphql API using B2B token + */ graphqlB2B: function post(data: T, customMessage = false): Promise { const config = { Authorization: `Bearer ${B3SStorage.get('B3B2BToken') || ''}`, } return graphqlRequest(RequestType.B2BGraphql, data, config, customMessage) }, - graphqlProxyBC: function post( + /** + * Request to B2B graphql API using BC customer token + */ + graphqlB2BWithBCCustomerToken: function post( data: T, customMessage = false ): Promise { @@ -108,12 +117,25 @@ const B3Request = { } return graphqlRequest(RequestType.B2BGraphql, data, config, customMessage) }, + /** + * @deprecated use {@link B3Request.graphqlBCProxy} instead + * Request to BC graphql API using BC graphql token + */ graphqlBC: function post(data: T): Promise { const config = { Authorization: `Bearer ${B3SStorage.get('bcGraphqlToken') || ''}`, } return graphqlRequest(RequestType.BCGraphql, data, config) }, + /** + * Request to BC graphql API using B2B token + */ + graphqlBCProxy: function post(data: T): Promise { + const config = { + Authorization: `Bearer ${B3SStorage.get('B3B2BToken') || ''}`, + } + return graphqlRequest(RequestType.BCProxyGraphql, data, config) + }, get: function get( url: string, type: string, diff --git a/apps/storefront/src/shared/service/request/base.ts b/apps/storefront/src/shared/service/request/base.ts index 1b45f3e0..f81c1dc8 100644 --- a/apps/storefront/src/shared/service/request/base.ts +++ b/apps/storefront/src/shared/service/request/base.ts @@ -5,6 +5,7 @@ const B2B_BASIC_URL = VITE_B2B_URL enum RequestType { B2BGraphql = 'B2BGraphql', BCGraphql = 'BCGraphql', + BCProxyGraphql = 'BCProxyGraphql', B2BRest = 'B2BRest', BCRest = 'BCRest', }