diff --git a/CHANGELOG.md b/CHANGELOG.md index 666389b4ab..082954ec9f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,7 +31,7 @@ Our versioning strategy is as follows: * `[sitecore-jss-dev-tools]` `[templates/nextjs]` `[templates/react]` Introduce "components" configuration for ComponentBuilder ([#1598](https://github.com/Sitecore/jss/pull/1598)) * `[sitecore-jss-react]` `[sitecore-jss-nextjs]` Component level data fetching(SSR/SSG) for BYOC ([#1610](https://github.com/Sitecore/jss/pull/1610)) * `[sitecore-jss-nextjs]` Reduce the amount of Edge API calls during fetch getStaticPaths ([#1612](https://github.com/Sitecore/jss/pull/1612)) -* `[sitecore-jss]` `[templates/nextjs]` GraphQL Layout and Dictionary services can handle endpoint rate limits through retryer functionality in GraphQLClient. To prevent SSG builds from failing and enable multiple retries, set retry amount in lib/dictionary-service-factory and lib/layout-service-factory ([#1618](https://github.com/Sitecore/jss/pull/1618)) +* `[sitecore-jss]` `[templates/nextjs] [templates/nextjs-sxa]` GraphQL Layout and Dictionary services in base remplate, and ErrorPages service in nextjs-sxa can handle endpoint rate limits through retryer functionality in GraphQLClient. To prevent SSG builds from failing and enable multiple retries, set retry amount in lib/dictionary-service-factory and lib/layout-service-factory ([#1618](https://github.com/Sitecore/jss/pull/1618) [#1619](https://github.com/Sitecore/jss/pull/1619)) * `[templates/nextjs]` `[sitecore-jss-nextjs]` Upgrade Nextjs to 13.4.16([#1616](https://github.com/Sitecore/jss/pull/1616)) ### 🧹 Chores diff --git a/packages/create-sitecore-jss/src/templates/nextjs-sxa/src/pages/404.tsx b/packages/create-sitecore-jss/src/templates/nextjs-sxa/src/pages/404.tsx index 8b4ed0ffc0..aef20616ea 100644 --- a/packages/create-sitecore-jss/src/templates/nextjs-sxa/src/pages/404.tsx +++ b/packages/create-sitecore-jss/src/templates/nextjs-sxa/src/pages/404.tsx @@ -33,6 +33,10 @@ export const getStaticProps: GetStaticProps = async (context) => { apiKey: config.sitecoreApiKey, siteName: site.name, language: context.locale || config.defaultLanguage, + retries: + (process.env.GRAPH_QL_SERVICE_RETRIES && + parseInt(process.env.GRAPH_QL_SERVICE_RETRIES, 10)) || + 0, }); let resultErrorPages: ErrorPages | null = null; diff --git a/packages/create-sitecore-jss/src/templates/nextjs-sxa/src/pages/500.tsx b/packages/create-sitecore-jss/src/templates/nextjs-sxa/src/pages/500.tsx index 191391d839..15d33bc326 100644 --- a/packages/create-sitecore-jss/src/templates/nextjs-sxa/src/pages/500.tsx +++ b/packages/create-sitecore-jss/src/templates/nextjs-sxa/src/pages/500.tsx @@ -49,6 +49,10 @@ export const getStaticProps: GetStaticProps = async (context) => { apiKey: config.sitecoreApiKey, siteName: site.name, language: context.locale || context.defaultLocale || config.defaultLanguage, + retries: + (process.env.GRAPH_QL_SERVICE_RETRIES && + parseInt(process.env.GRAPH_QL_SERVICE_RETRIES, 10)) || + 0, }); let resultErrorPages: ErrorPages | null = null; diff --git a/packages/create-sitecore-jss/src/templates/nextjs/.env b/packages/create-sitecore-jss/src/templates/nextjs/.env index a467736f43..70f37e6a10 100644 --- a/packages/create-sitecore-jss/src/templates/nextjs/.env +++ b/packages/create-sitecore-jss/src/templates/nextjs/.env @@ -42,6 +42,9 @@ JSS_APP_NAME= # Your default app language. DEFAULT_LANGUAGE= +# How many times should GraphQL Layout, Dictionary and ErrorPages services retry a fetch when endpoint rate limit is reached +GRAPH_QL_SERVICE_RETRIES=0 + # The way in which layout and dictionary data is fetched from Sitecore FETCH_WITH=<%- fetchWith %> diff --git a/packages/create-sitecore-jss/src/templates/nextjs/src/lib/dictionary-service-factory.ts b/packages/create-sitecore-jss/src/templates/nextjs/src/lib/dictionary-service-factory.ts index dc1c81e32c..9f187dfecb 100644 --- a/packages/create-sitecore-jss/src/templates/nextjs/src/lib/dictionary-service-factory.ts +++ b/packages/create-sitecore-jss/src/templates/nextjs/src/lib/dictionary-service-factory.ts @@ -34,6 +34,10 @@ export class DictionaryServiceFactory { It will only try the request once by default. retries: 'number' */ + retries: + (process.env.GRAPH_QL_SERVICE_RETRIES && + parseInt(process.env.GRAPH_QL_SERVICE_RETRIES, 10)) || + 0, }) : new RestDictionaryService({ apiHost: config.sitecoreApiHost, diff --git a/packages/create-sitecore-jss/src/templates/nextjs/src/lib/layout-service-factory.ts b/packages/create-sitecore-jss/src/templates/nextjs/src/lib/layout-service-factory.ts index 07a7803981..2c6e49b1d5 100644 --- a/packages/create-sitecore-jss/src/templates/nextjs/src/lib/layout-service-factory.ts +++ b/packages/create-sitecore-jss/src/templates/nextjs/src/lib/layout-service-factory.ts @@ -27,6 +27,10 @@ export class LayoutServiceFactory { It will only try the request once by default. retries: 'number' */ + retries: + (process.env.GRAPH_QL_SERVICE_RETRIES && + parseInt(process.env.GRAPH_QL_SERVICE_RETRIES, 10)) || + 0, }) : new RestLayoutService({ apiHost: config.sitecoreApiHost, diff --git a/packages/sitecore-jss/src/site/graphql-error-pages-service.ts b/packages/sitecore-jss/src/site/graphql-error-pages-service.ts index 58efd6af68..f7a123cf47 100644 --- a/packages/sitecore-jss/src/site/graphql-error-pages-service.ts +++ b/packages/sitecore-jss/src/site/graphql-error-pages-service.ts @@ -1,4 +1,4 @@ -import { GraphQLClient, GraphQLRequestClient } from '../graphql'; +import { GraphQLClient, GraphQLRequestClient, GraphQLRequestClientConfig } from '../graphql'; import { siteNameError } from '../constants'; import debug from '../debug'; import { LayoutServiceData } from '../layout'; @@ -23,7 +23,8 @@ const defaultQuery = /* GraphQL */ ` } `; -export type GraphQLErrorPagesServiceConfig = { +export interface GraphQLErrorPagesServiceConfig + extends Pick { /** * Your Graphql endpoint */ @@ -40,7 +41,7 @@ export type GraphQLErrorPagesServiceConfig = { * The language */ language: string; -}; +} /** * Object model of Error Pages result @@ -110,6 +111,7 @@ export class GraphQLErrorPagesService { return new GraphQLRequestClient(this.options.endpoint, { apiKey: this.options.apiKey, debugger: debug.errorpages, + retries: this.options.retries, }); } }