@se-studio/contentful-rest-api 1.0.46 → 1.0.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +424 -0
- package/dist/api/article-type.d.ts +37 -0
- package/dist/api/article-type.d.ts.map +1 -0
- package/dist/api/article-type.js +134 -0
- package/dist/api/article-type.js.map +1 -0
- package/dist/api/article.d.ts +32 -0
- package/dist/api/article.d.ts.map +1 -0
- package/dist/api/article.js +43 -0
- package/dist/api/article.js.map +1 -0
- package/dist/api/asset.d.ts +28 -0
- package/dist/api/asset.d.ts.map +1 -0
- package/dist/api/asset.js +55 -0
- package/dist/api/asset.js.map +1 -0
- package/dist/api/context.d.ts +24 -0
- package/dist/api/context.d.ts.map +1 -0
- package/dist/api/context.js +62 -0
- package/dist/api/context.js.map +1 -0
- package/dist/api/custom-type.d.ts +37 -0
- package/dist/api/custom-type.d.ts.map +1 -0
- package/dist/api/custom-type.js +44 -0
- package/dist/api/custom-type.js.map +1 -0
- package/dist/api/helpers.d.ts +73 -0
- package/dist/api/helpers.d.ts.map +1 -0
- package/dist/api/helpers.js +296 -0
- package/dist/api/helpers.js.map +1 -0
- package/dist/api/index.d.ts +22 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +28 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/links.d.ts +109 -0
- package/dist/api/links.d.ts.map +1 -0
- package/dist/api/links.js +199 -0
- package/dist/api/links.js.map +1 -0
- package/dist/api/page.d.ts +33 -0
- package/dist/api/page.d.ts.map +1 -0
- package/dist/api/page.js +40 -0
- package/dist/api/page.js.map +1 -0
- package/dist/api/person.d.ts +37 -0
- package/dist/api/person.d.ts.map +1 -0
- package/dist/api/person.js +134 -0
- package/dist/api/person.js.map +1 -0
- package/dist/api/preview.d.ts +55 -0
- package/dist/api/preview.d.ts.map +1 -0
- package/dist/api/preview.js +160 -0
- package/dist/api/preview.js.map +1 -0
- package/dist/api/related-articles.d.ts +22 -0
- package/dist/api/related-articles.d.ts.map +1 -0
- package/dist/api/related-articles.js +82 -0
- package/dist/api/related-articles.js.map +1 -0
- package/dist/api/server-asset.d.ts +40 -0
- package/dist/api/server-asset.d.ts.map +1 -0
- package/dist/api/server-asset.js +65 -0
- package/dist/api/server-asset.js.map +1 -0
- package/dist/api/sitemap.d.ts +131 -0
- package/dist/api/sitemap.d.ts.map +1 -0
- package/dist/api/sitemap.js +199 -0
- package/dist/api/sitemap.js.map +1 -0
- package/dist/api/tag.d.ts +37 -0
- package/dist/api/tag.d.ts.map +1 -0
- package/dist/api/tag.js +131 -0
- package/dist/api/tag.js.map +1 -0
- package/dist/api/template.d.ts +49 -0
- package/dist/api/template.d.ts.map +1 -0
- package/dist/api/template.js +88 -0
- package/dist/api/template.js.map +1 -0
- package/dist/api/types.d.ts +98 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +2 -0
- package/dist/api/types.js.map +1 -0
- package/dist/baseTypes/baseAlternatePageContent.d.ts +24 -0
- package/dist/baseTypes/baseAlternatePageContent.d.ts.map +1 -0
- package/dist/baseTypes/baseAlternatePageContent.js +2 -0
- package/dist/baseTypes/baseAlternatePageContent.js.map +1 -0
- package/dist/baseTypes/baseArticle.d.ts +179 -0
- package/dist/baseTypes/baseArticle.d.ts.map +1 -0
- package/dist/baseTypes/baseArticle.js +2 -0
- package/dist/baseTypes/baseArticle.js.map +1 -0
- package/dist/baseTypes/baseArticleType.d.ts +156 -0
- package/dist/baseTypes/baseArticleType.d.ts.map +1 -0
- package/dist/baseTypes/baseArticleType.js +2 -0
- package/dist/baseTypes/baseArticleType.js.map +1 -0
- package/dist/baseTypes/baseBanner.d.ts +76 -0
- package/dist/baseTypes/baseBanner.d.ts.map +1 -0
- package/dist/baseTypes/baseBanner.js +2 -0
- package/dist/baseTypes/baseBanner.js.map +1 -0
- package/dist/baseTypes/baseCollection.d.ts +132 -0
- package/dist/baseTypes/baseCollection.d.ts.map +1 -0
- package/dist/baseTypes/baseCollection.js +2 -0
- package/dist/baseTypes/baseCollection.js.map +1 -0
- package/dist/baseTypes/baseComponent.d.ts +130 -0
- package/dist/baseTypes/baseComponent.d.ts.map +1 -0
- package/dist/baseTypes/baseComponent.js +2 -0
- package/dist/baseTypes/baseComponent.js.map +1 -0
- package/dist/baseTypes/baseCustomType.d.ts +126 -0
- package/dist/baseTypes/baseCustomType.d.ts.map +1 -0
- package/dist/baseTypes/baseCustomType.js +2 -0
- package/dist/baseTypes/baseCustomType.js.map +1 -0
- package/dist/baseTypes/baseExternalComponent.d.ts +66 -0
- package/dist/baseTypes/baseExternalComponent.d.ts.map +1 -0
- package/dist/baseTypes/baseExternalComponent.js +2 -0
- package/dist/baseTypes/baseExternalComponent.js.map +1 -0
- package/dist/baseTypes/baseExternalVideo.d.ts +85 -0
- package/dist/baseTypes/baseExternalVideo.d.ts.map +1 -0
- package/dist/baseTypes/baseExternalVideo.js +2 -0
- package/dist/baseTypes/baseExternalVideo.js.map +1 -0
- package/dist/baseTypes/baseLink.d.ts +90 -0
- package/dist/baseTypes/baseLink.d.ts.map +1 -0
- package/dist/baseTypes/baseLink.js +2 -0
- package/dist/baseTypes/baseLink.js.map +1 -0
- package/dist/baseTypes/baseMedia.d.ts +92 -0
- package/dist/baseTypes/baseMedia.d.ts.map +1 -0
- package/dist/baseTypes/baseMedia.js +2 -0
- package/dist/baseTypes/baseMedia.js.map +1 -0
- package/dist/baseTypes/baseNavigation.d.ts +36 -0
- package/dist/baseTypes/baseNavigation.d.ts.map +1 -0
- package/dist/baseTypes/baseNavigation.js +2 -0
- package/dist/baseTypes/baseNavigation.js.map +1 -0
- package/dist/baseTypes/baseNavigationItem.d.ts +96 -0
- package/dist/baseTypes/baseNavigationItem.d.ts.map +1 -0
- package/dist/baseTypes/baseNavigationItem.js +2 -0
- package/dist/baseTypes/baseNavigationItem.js.map +1 -0
- package/dist/baseTypes/basePage.d.ts +120 -0
- package/dist/baseTypes/basePage.d.ts.map +1 -0
- package/dist/baseTypes/basePage.js +2 -0
- package/dist/baseTypes/basePage.js.map +1 -0
- package/dist/baseTypes/basePageTest.d.ts +66 -0
- package/dist/baseTypes/basePageTest.d.ts.map +1 -0
- package/dist/baseTypes/basePageTest.js +2 -0
- package/dist/baseTypes/basePageTest.js.map +1 -0
- package/dist/baseTypes/basePageVariant.d.ts +123 -0
- package/dist/baseTypes/basePageVariant.d.ts.map +1 -0
- package/dist/baseTypes/basePageVariant.js +2 -0
- package/dist/baseTypes/basePageVariant.js.map +1 -0
- package/dist/baseTypes/basePerson.d.ts +111 -0
- package/dist/baseTypes/basePerson.d.ts.map +1 -0
- package/dist/baseTypes/basePerson.js +2 -0
- package/dist/baseTypes/basePerson.js.map +1 -0
- package/dist/baseTypes/baseSchema.d.ts +18 -0
- package/dist/baseTypes/baseSchema.d.ts.map +1 -0
- package/dist/baseTypes/baseSchema.js +2 -0
- package/dist/baseTypes/baseSchema.js.map +1 -0
- package/dist/baseTypes/baseShared.d.ts +30 -0
- package/dist/baseTypes/baseShared.d.ts.map +1 -0
- package/dist/baseTypes/baseShared.js +2 -0
- package/dist/baseTypes/baseShared.js.map +1 -0
- package/dist/baseTypes/baseTag.d.ts +108 -0
- package/dist/baseTypes/baseTag.d.ts.map +1 -0
- package/dist/baseTypes/baseTag.js +2 -0
- package/dist/baseTypes/baseTag.js.map +1 -0
- package/dist/baseTypes/baseTagType.d.ts +11 -0
- package/dist/baseTypes/baseTagType.d.ts.map +1 -0
- package/dist/baseTypes/baseTagType.js +2 -0
- package/dist/baseTypes/baseTagType.js.map +1 -0
- package/dist/baseTypes/baseTemplate.d.ts +55 -0
- package/dist/baseTypes/baseTemplate.d.ts.map +1 -0
- package/dist/baseTypes/baseTemplate.js +2 -0
- package/dist/baseTypes/baseTemplate.js.map +1 -0
- package/dist/client.d.ts +143 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +268 -0
- package/dist/client.js.map +1 -0
- package/dist/converters/article.d.ts +42 -0
- package/dist/converters/article.d.ts.map +1 -0
- package/dist/converters/article.js +220 -0
- package/dist/converters/article.js.map +1 -0
- package/dist/converters/asset.d.ts +22 -0
- package/dist/converters/asset.d.ts.map +1 -0
- package/dist/converters/asset.js +282 -0
- package/dist/converters/asset.js.map +1 -0
- package/dist/converters/collection.d.ts +26 -0
- package/dist/converters/collection.d.ts.map +1 -0
- package/dist/converters/collection.js +50 -0
- package/dist/converters/collection.js.map +1 -0
- package/dist/converters/component.d.ts +26 -0
- package/dist/converters/component.d.ts.map +1 -0
- package/dist/converters/component.js +54 -0
- package/dist/converters/component.js.map +1 -0
- package/dist/converters/customType.d.ts +24 -0
- package/dist/converters/customType.d.ts.map +1 -0
- package/dist/converters/customType.js +71 -0
- package/dist/converters/customType.js.map +1 -0
- package/dist/converters/externalComponent.d.ts +22 -0
- package/dist/converters/externalComponent.d.ts.map +1 -0
- package/dist/converters/externalComponent.js +34 -0
- package/dist/converters/externalComponent.js.map +1 -0
- package/dist/converters/helpers.d.ts +116 -0
- package/dist/converters/helpers.d.ts.map +1 -0
- package/dist/converters/helpers.js +128 -0
- package/dist/converters/helpers.js.map +1 -0
- package/dist/converters/iconCollector.d.ts +65 -0
- package/dist/converters/iconCollector.d.ts.map +1 -0
- package/dist/converters/iconCollector.js +282 -0
- package/dist/converters/iconCollector.js.map +1 -0
- package/dist/converters/index.d.ts +18 -0
- package/dist/converters/index.d.ts.map +1 -0
- package/dist/converters/index.js +18 -0
- package/dist/converters/index.js.map +1 -0
- package/dist/converters/link.d.ts +11 -0
- package/dist/converters/link.d.ts.map +1 -0
- package/dist/converters/link.js +96 -0
- package/dist/converters/link.js.map +1 -0
- package/dist/converters/navigationItem.d.ts +11 -0
- package/dist/converters/navigationItem.d.ts.map +1 -0
- package/dist/converters/navigationItem.js +73 -0
- package/dist/converters/navigationItem.js.map +1 -0
- package/dist/converters/page.d.ts +44 -0
- package/dist/converters/page.d.ts.map +1 -0
- package/dist/converters/page.js +121 -0
- package/dist/converters/page.js.map +1 -0
- package/dist/converters/person.d.ts +40 -0
- package/dist/converters/person.d.ts.map +1 -0
- package/dist/converters/person.js +109 -0
- package/dist/converters/person.js.map +1 -0
- package/dist/converters/resolver.d.ts +29 -0
- package/dist/converters/resolver.d.ts.map +1 -0
- package/dist/converters/resolver.js +317 -0
- package/dist/converters/resolver.js.map +1 -0
- package/dist/converters/schema.d.ts +14 -0
- package/dist/converters/schema.d.ts.map +1 -0
- package/dist/converters/schema.js +18 -0
- package/dist/converters/schema.js.map +1 -0
- package/dist/converters/svgProcessor.d.ts +23 -0
- package/dist/converters/svgProcessor.d.ts.map +1 -0
- package/dist/converters/svgProcessor.js +47 -0
- package/dist/converters/svgProcessor.js.map +1 -0
- package/dist/converters/tag.d.ts +25 -0
- package/dist/converters/tag.d.ts.map +1 -0
- package/dist/converters/tag.js +98 -0
- package/dist/converters/tag.js.map +1 -0
- package/dist/converters/template.d.ts +26 -0
- package/dist/converters/template.d.ts.map +1 -0
- package/dist/converters/template.js +44 -0
- package/dist/converters/template.js.map +1 -0
- package/dist/index.d.ts +28 -721
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -3634
- package/dist/index.js.map +1 -1
- package/dist/revalidation/handlers.d.ts +52 -0
- package/dist/revalidation/handlers.d.ts.map +1 -0
- package/dist/revalidation/handlers.js +130 -0
- package/dist/revalidation/handlers.js.map +1 -0
- package/dist/revalidation/index.d.ts +3 -0
- package/dist/revalidation/index.d.ts.map +1 -0
- package/dist/revalidation/index.js +4 -0
- package/dist/revalidation/index.js.map +1 -0
- package/dist/revalidation/nextjs-route.d.ts +31 -0
- package/dist/revalidation/nextjs-route.d.ts.map +1 -0
- package/dist/revalidation/nextjs-route.js +34 -0
- package/dist/revalidation/nextjs-route.js.map +1 -0
- package/dist/revalidation/route.d.ts +3 -0
- package/dist/revalidation/route.d.ts.map +1 -0
- package/dist/revalidation/route.js +97 -0
- package/dist/revalidation/route.js.map +1 -0
- package/dist/revalidation/server-utils.d.ts +22 -0
- package/dist/revalidation/server-utils.d.ts.map +1 -0
- package/dist/revalidation/server-utils.js +41 -0
- package/dist/revalidation/server-utils.js.map +1 -0
- package/dist/revalidation/tags.d.ts +81 -0
- package/dist/revalidation/tags.d.ts.map +1 -0
- package/dist/revalidation/tags.js +117 -0
- package/dist/revalidation/tags.js.map +1 -0
- package/dist/revalidation/utils.d.ts +21 -0
- package/dist/revalidation/utils.d.ts.map +1 -0
- package/dist/revalidation/utils.js +51 -0
- package/dist/revalidation/utils.js.map +1 -0
- package/dist/server.d.ts +7 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +10 -0
- package/dist/server.js.map +1 -0
- package/dist/types.d.ts +67 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/arrayUtils.d.ts +3 -0
- package/dist/utils/arrayUtils.d.ts.map +1 -0
- package/dist/utils/arrayUtils.js +12 -0
- package/dist/utils/arrayUtils.js.map +1 -0
- package/dist/utils/dateUtils.d.ts +9 -0
- package/dist/utils/dateUtils.d.ts.map +1 -0
- package/dist/utils/dateUtils.js +26 -0
- package/dist/utils/dateUtils.js.map +1 -0
- package/dist/utils/errors.d.ts +56 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +100 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/json-utils.d.ts +17 -0
- package/dist/utils/json-utils.d.ts.map +1 -0
- package/dist/utils/json-utils.js +43 -0
- package/dist/utils/json-utils.js.map +1 -0
- package/dist/utils/retry.d.ts +112 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +221 -0
- package/dist/utils/retry.js.map +1 -0
- package/package.json +12 -6
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export type { BaseArticleSkeleton } from './baseArticle';
|
|
2
|
+
export type { BaseArticleTypeSkeleton } from './baseArticleType';
|
|
3
|
+
export type { BaseCollectionSkeleton } from './baseCollection';
|
|
4
|
+
export type { BaseComponentSkeleton } from './baseComponent';
|
|
5
|
+
export type { BaseExternalComponentSkeleton } from './baseExternalComponent';
|
|
6
|
+
export type { BaseExternalVideoSkeleton } from './baseExternalVideo';
|
|
7
|
+
export type { BaseLinkSkeleton } from './baseLink';
|
|
8
|
+
export type { BaseMediaSkeleton } from './baseMedia';
|
|
9
|
+
export type { BasePageSkeleton } from './basePage';
|
|
10
|
+
export type { BasePageVariantSkeleton } from './basePageVariant';
|
|
11
|
+
export type { BasePersonSkeleton } from './basePerson';
|
|
12
|
+
export type { BaseTagSkeleton } from './baseTag';
|
|
13
|
+
import type { BaseArticleSkeleton } from './baseArticle';
|
|
14
|
+
import type { BaseArticleTypeSkeleton } from './baseArticleType';
|
|
15
|
+
import type { BaseCollectionSkeleton } from './baseCollection';
|
|
16
|
+
import type { BaseComponentSkeleton } from './baseComponent';
|
|
17
|
+
import type { BaseCustomTypeSkeleton } from './baseCustomType';
|
|
18
|
+
import type { BaseExternalComponentSkeleton } from './baseExternalComponent';
|
|
19
|
+
import type { BaseExternalVideoSkeleton } from './baseExternalVideo';
|
|
20
|
+
import type { BaseLinkSkeleton } from './baseLink';
|
|
21
|
+
import type { BaseMediaSkeleton } from './baseMedia';
|
|
22
|
+
import type { BasePageSkeleton } from './basePage';
|
|
23
|
+
import type { BasePageVariantSkeleton } from './basePageVariant';
|
|
24
|
+
import type { BasePersonSkeleton } from './basePerson';
|
|
25
|
+
import type { BaseTagSkeleton } from './baseTag';
|
|
26
|
+
export type BaseContent = BaseCollectionSkeleton | BaseComponentSkeleton | BaseExternalComponentSkeleton | BaseExternalVideoSkeleton | BaseMediaSkeleton | BasePersonSkeleton;
|
|
27
|
+
export type BaseLink = BaseArticleSkeleton | BaseArticleTypeSkeleton | BaseLinkSkeleton | BasePageSkeleton | BasePageVariantSkeleton | BasePersonSkeleton | BaseTagSkeleton | BaseCustomTypeSkeleton;
|
|
28
|
+
export type BaseContentTypes = BaseContent['contentTypeId'];
|
|
29
|
+
export type BaseLinkTypes = BaseLink['contentTypeId'];
|
|
30
|
+
//# sourceMappingURL=baseShared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseShared.d.ts","sourceRoot":"","sources":["../../src/baseTypes/baseShared.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACzD,YAAY,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACjE,YAAY,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC/D,YAAY,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC7D,YAAY,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAC7E,YAAY,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AACrE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,YAAY,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACjE,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,MAAM,WAAW,GACnB,sBAAsB,GACtB,qBAAqB,GACrB,6BAA6B,GAC7B,yBAAyB,GACzB,iBAAiB,GACjB,kBAAkB,CAAC;AAEvB,MAAM,MAAM,QAAQ,GAChB,mBAAmB,GACnB,uBAAuB,GACvB,gBAAgB,GAChB,gBAAgB,GAChB,uBAAuB,GACvB,kBAAkB,GAClB,eAAe,GACf,sBAAsB,CAAC;AAE3B,MAAM,MAAM,gBAAgB,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC;AAC5D,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseShared.js","sourceRoot":"","sources":["../../src/baseTypes/baseShared.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import type { EntryFieldTypes, EntrySkeletonType } from 'contentful';
|
|
2
|
+
import type { BaseExternalVideoSkeleton } from './baseExternalVideo';
|
|
3
|
+
import type { BaseMediaSkeleton } from './baseMedia';
|
|
4
|
+
import type { BaseNavigationSkeleton } from './baseNavigation';
|
|
5
|
+
import type { BaseSchemaSkeleton } from './baseSchema';
|
|
6
|
+
import type { BaseContent } from './baseShared';
|
|
7
|
+
import type { BaseTagTypeSkeleton } from './baseTagType';
|
|
8
|
+
import type { BaseTemplateSkeleton } from './baseTemplate';
|
|
9
|
+
export interface BaseTagFields {
|
|
10
|
+
/**
|
|
11
|
+
* Field type definition for field 'cmsLabel' (Cms label)
|
|
12
|
+
* @name Cms label
|
|
13
|
+
* @localized false
|
|
14
|
+
*/
|
|
15
|
+
cmsLabel: EntryFieldTypes.Symbol;
|
|
16
|
+
/**
|
|
17
|
+
* Field type definition for field 'name' (Name)
|
|
18
|
+
* @name Name
|
|
19
|
+
* @localized false
|
|
20
|
+
*/
|
|
21
|
+
name: EntryFieldTypes.Symbol;
|
|
22
|
+
/**
|
|
23
|
+
* Field type definition for field 'tagType' (Tag type)
|
|
24
|
+
* @name Tag type
|
|
25
|
+
* @localized false
|
|
26
|
+
*/
|
|
27
|
+
tagType: EntryFieldTypes.EntryLink<BaseTagTypeSkeleton>;
|
|
28
|
+
/**
|
|
29
|
+
* Field type definition for field 'slug' (Slug)
|
|
30
|
+
* @name Slug
|
|
31
|
+
* @localized false
|
|
32
|
+
*/
|
|
33
|
+
slug: EntryFieldTypes.Symbol;
|
|
34
|
+
/**
|
|
35
|
+
* Field type definition for field 'description' (Description)
|
|
36
|
+
* @name Description
|
|
37
|
+
* @localized false
|
|
38
|
+
*/
|
|
39
|
+
description: EntryFieldTypes.Symbol;
|
|
40
|
+
/**
|
|
41
|
+
* Field type definition for field 'featuredImage' (Featured Image)
|
|
42
|
+
* @name Featured Image
|
|
43
|
+
* @localized false
|
|
44
|
+
*/
|
|
45
|
+
featuredImage: EntryFieldTypes.AssetLink;
|
|
46
|
+
/**
|
|
47
|
+
* Field type definition for field 'visuals' (Visuals)
|
|
48
|
+
* @name Visuals
|
|
49
|
+
* @localized false
|
|
50
|
+
*/
|
|
51
|
+
visuals?: EntryFieldTypes.Array<EntryFieldTypes.EntryLink<BaseExternalVideoSkeleton | BaseMediaSkeleton>>;
|
|
52
|
+
/**
|
|
53
|
+
* Field type definition for field 'menu' (Menu)
|
|
54
|
+
* @name Menu
|
|
55
|
+
* @localized false
|
|
56
|
+
*/
|
|
57
|
+
menu?: EntryFieldTypes.EntryLink<BaseNavigationSkeleton>;
|
|
58
|
+
/**
|
|
59
|
+
* Field type definition for field 'footer' (Footer)
|
|
60
|
+
* @name Footer
|
|
61
|
+
* @localized false
|
|
62
|
+
*/
|
|
63
|
+
footer?: EntryFieldTypes.EntryLink<BaseNavigationSkeleton>;
|
|
64
|
+
/**
|
|
65
|
+
* Field type definition for field 'template' (Template)
|
|
66
|
+
* @name Template
|
|
67
|
+
* @localized false
|
|
68
|
+
*/
|
|
69
|
+
template?: EntryFieldTypes.EntryLink<BaseTemplateSkeleton>;
|
|
70
|
+
/**
|
|
71
|
+
* Field type definition for field 'topContent' (Top content)
|
|
72
|
+
* @name Top content
|
|
73
|
+
* @localized false
|
|
74
|
+
*/
|
|
75
|
+
topContent?: EntryFieldTypes.Array<EntryFieldTypes.EntryLink<BaseContent>>;
|
|
76
|
+
/**
|
|
77
|
+
* Field type definition for field 'structuredData' (Structured data)
|
|
78
|
+
* @name Structured data
|
|
79
|
+
* @localized false
|
|
80
|
+
*/
|
|
81
|
+
structuredData?: EntryFieldTypes.Array<EntryFieldTypes.EntryLink<BaseSchemaSkeleton>>;
|
|
82
|
+
/**
|
|
83
|
+
* Field type definition for field 'backgroundColour' (Background colour)
|
|
84
|
+
* @name Background colour
|
|
85
|
+
* @localized false
|
|
86
|
+
*/
|
|
87
|
+
backgroundColour?: EntryFieldTypes.Symbol<string>;
|
|
88
|
+
/**
|
|
89
|
+
* Field type definition for field 'textColour' (Text colour)
|
|
90
|
+
* @name Text colour
|
|
91
|
+
* @localized false
|
|
92
|
+
*/
|
|
93
|
+
textColour?: EntryFieldTypes.Symbol<string>;
|
|
94
|
+
/**
|
|
95
|
+
* Field type definition for field 'indexed' (Indexed)
|
|
96
|
+
* @name Indexed
|
|
97
|
+
* @localized false
|
|
98
|
+
*/
|
|
99
|
+
indexed: EntryFieldTypes.Boolean;
|
|
100
|
+
/**
|
|
101
|
+
* Field type definition for field 'hidden' (Hidden)
|
|
102
|
+
* @name Hidden
|
|
103
|
+
* @localized false
|
|
104
|
+
*/
|
|
105
|
+
hidden: EntryFieldTypes.Boolean;
|
|
106
|
+
}
|
|
107
|
+
export type BaseTagSkeleton = EntrySkeletonType<BaseTagFields, 'tag'>;
|
|
108
|
+
//# sourceMappingURL=baseTag.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseTag.d.ts","sourceRoot":"","sources":["../../src/baseTypes/baseTag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC;IACjC;;;;OAIG;IACH,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC;IAC7B;;;;OAIG;IACH,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IACxD;;;;OAIG;IACH,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC;IAC7B;;;;OAIG;IACH,WAAW,EAAE,eAAe,CAAC,MAAM,CAAC;IACpC;;;;OAIG;IACH,aAAa,EAAE,eAAe,CAAC,SAAS,CAAC;IACzC;;;;OAIG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC,KAAK,CAC7B,eAAe,CAAC,SAAS,CAAC,yBAAyB,GAAG,iBAAiB,CAAC,CACzE,CAAC;IACF;;;;OAIG;IACH,IAAI,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;IACzD;;;;OAIG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;IAC3D;;;;OAIG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;IAC3D;;;;OAIG;IACH,UAAU,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;IAC3E;;;;OAIG;IACH,cAAc,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACtF;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClD;;;;OAIG;IACH,UAAU,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C;;;;OAIG;IACH,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC;IACjC;;;;OAIG;IACH,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC;CACjC;AAED,MAAM,MAAM,eAAe,GAAG,iBAAiB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseTag.js","sourceRoot":"","sources":["../../src/baseTypes/baseTag.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { EntryFieldTypes, EntrySkeletonType } from 'contentful';
|
|
2
|
+
export interface BaseTagTypeFields {
|
|
3
|
+
/**
|
|
4
|
+
* Field type definition for field 'name' (Name)
|
|
5
|
+
* @name Name
|
|
6
|
+
* @localized false
|
|
7
|
+
*/
|
|
8
|
+
name: EntryFieldTypes.Symbol;
|
|
9
|
+
}
|
|
10
|
+
export type BaseTagTypeSkeleton = EntrySkeletonType<BaseTagTypeFields, 'tagType'>;
|
|
11
|
+
//# sourceMappingURL=baseTagType.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseTagType.d.ts","sourceRoot":"","sources":["../../src/baseTypes/baseTagType.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAErE,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC;CAC9B;AAED,MAAM,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseTagType.js","sourceRoot":"","sources":["../../src/baseTypes/baseTagType.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { EntryFieldTypes, EntrySkeletonType } from 'contentful';
|
|
2
|
+
import type { BaseNavigationSkeleton } from './baseNavigation';
|
|
3
|
+
import type { BaseContent } from './baseShared';
|
|
4
|
+
export interface BaseTemplateFields {
|
|
5
|
+
/**
|
|
6
|
+
* Field type definition for field 'cmsLabel' (CMS Label)
|
|
7
|
+
* @name CMS Label
|
|
8
|
+
* @localized false
|
|
9
|
+
*/
|
|
10
|
+
cmsLabel: EntryFieldTypes.Symbol;
|
|
11
|
+
/**
|
|
12
|
+
* Field type definition for field 'preContent' (Pre content)
|
|
13
|
+
* @name Pre content
|
|
14
|
+
* @localized false
|
|
15
|
+
*/
|
|
16
|
+
preContent?: EntryFieldTypes.Array<EntryFieldTypes.EntryLink<BaseContent>>;
|
|
17
|
+
/**
|
|
18
|
+
* Field type definition for field 'postContent' (Post content)
|
|
19
|
+
* @name Post content
|
|
20
|
+
* @localized false
|
|
21
|
+
*/
|
|
22
|
+
postContent?: EntryFieldTypes.Array<EntryFieldTypes.EntryLink<BaseContent>>;
|
|
23
|
+
/**
|
|
24
|
+
* Field type definition for field 'menu' (Menu)
|
|
25
|
+
* @name Menu
|
|
26
|
+
* @localized false
|
|
27
|
+
*/
|
|
28
|
+
menu?: EntryFieldTypes.EntryLink<BaseNavigationSkeleton>;
|
|
29
|
+
/**
|
|
30
|
+
* Field type definition for field 'footer' (Footer)
|
|
31
|
+
* @name Footer
|
|
32
|
+
* @localized false
|
|
33
|
+
*/
|
|
34
|
+
footer?: EntryFieldTypes.EntryLink<BaseNavigationSkeleton>;
|
|
35
|
+
/**
|
|
36
|
+
* Field type definition for field 'backgroundColour' (Background colour)
|
|
37
|
+
* @name Background colour
|
|
38
|
+
* @localized false
|
|
39
|
+
*/
|
|
40
|
+
backgroundColour?: EntryFieldTypes.Symbol<string>;
|
|
41
|
+
/**
|
|
42
|
+
* Field type definition for field 'textColour' (Text colour)
|
|
43
|
+
* @name Text colour
|
|
44
|
+
* @localized false
|
|
45
|
+
*/
|
|
46
|
+
textColour?: EntryFieldTypes.Symbol<string>;
|
|
47
|
+
/**
|
|
48
|
+
* Field type definition for field 'flags' (Flags)
|
|
49
|
+
* @name Flags
|
|
50
|
+
* @localized false
|
|
51
|
+
*/
|
|
52
|
+
flags?: EntryFieldTypes.Array<EntryFieldTypes.Symbol<'Sticky nav'>>;
|
|
53
|
+
}
|
|
54
|
+
export type BaseTemplateSkeleton = EntrySkeletonType<BaseTemplateFields, 'template'>;
|
|
55
|
+
//# sourceMappingURL=baseTemplate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseTemplate.d.ts","sourceRoot":"","sources":["../../src/baseTypes/baseTemplate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC;IACjC;;;;OAIG;IACH,UAAU,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;IAC3E;;;;OAIG;IACH,WAAW,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5E;;;;OAIG;IACH,IAAI,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;IACzD;;;;OAIG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;IAC3D;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClD;;;;OAIG;IACH,UAAU,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C;;;;OAIG;IACH,KAAK,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;CACrE;AAED,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseTemplate.js","sourceRoot":"","sources":["../../src/baseTypes/baseTemplate.ts"],"names":[],"mappings":""}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/** biome-ignore-all lint/suspicious/noExplicitAny: Any ok for now! */
|
|
2
|
+
import type { ContentfulConfig, FetchOptions } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Contentful REST API response structure
|
|
5
|
+
* The items array contains Entry objects when T is an EntrySkeletonType
|
|
6
|
+
*/
|
|
7
|
+
export interface ContentfulResponse<T = any> {
|
|
8
|
+
sys: {
|
|
9
|
+
type: 'Array';
|
|
10
|
+
};
|
|
11
|
+
total: number;
|
|
12
|
+
skip: number;
|
|
13
|
+
limit: number;
|
|
14
|
+
items: T extends import('contentful').EntrySkeletonType ? Array<import('contentful').Entry<T, 'WITHOUT_LINK_RESOLUTION', string>> : T[];
|
|
15
|
+
includes?: {
|
|
16
|
+
Entry?: any[];
|
|
17
|
+
Asset?: any[];
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Contentful Asset fields structure
|
|
22
|
+
*/
|
|
23
|
+
export interface ContentfulAssetFields {
|
|
24
|
+
title?: string;
|
|
25
|
+
description?: string;
|
|
26
|
+
file?: {
|
|
27
|
+
url: string;
|
|
28
|
+
fileName: string;
|
|
29
|
+
contentType: string;
|
|
30
|
+
details?: {
|
|
31
|
+
size?: number;
|
|
32
|
+
image?: {
|
|
33
|
+
width: number;
|
|
34
|
+
height: number;
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Contentful Asset API response structure
|
|
41
|
+
*/
|
|
42
|
+
export interface ContentfulAssetResponse {
|
|
43
|
+
sys: {
|
|
44
|
+
id: string;
|
|
45
|
+
type: 'Asset';
|
|
46
|
+
createdAt: string;
|
|
47
|
+
updatedAt: string;
|
|
48
|
+
};
|
|
49
|
+
fields: ContentfulAssetFields;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Query parameters for Contentful API
|
|
53
|
+
*/
|
|
54
|
+
export interface ContentfulQuery {
|
|
55
|
+
content_type?: string;
|
|
56
|
+
locale?: string;
|
|
57
|
+
include?: number;
|
|
58
|
+
limit?: number;
|
|
59
|
+
skip?: number;
|
|
60
|
+
[key: string]: any;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Fetch-based Contentful client that participates in Next.js caching.
|
|
64
|
+
* Includes proactive rate limiting and automatic retry on 429 errors.
|
|
65
|
+
*/
|
|
66
|
+
export declare class ContentfulFetchClient {
|
|
67
|
+
private readonly baseUrl;
|
|
68
|
+
private readonly accessToken;
|
|
69
|
+
private readonly rateLimiter;
|
|
70
|
+
private readonly isPreview;
|
|
71
|
+
constructor(config: ContentfulConfig, preview?: boolean);
|
|
72
|
+
/**
|
|
73
|
+
* Fetches entries from Contentful with proactive rate limiting
|
|
74
|
+
* and automatic retry on rate limit errors.
|
|
75
|
+
*
|
|
76
|
+
* Rate limits are applied proactively:
|
|
77
|
+
* - Preview API: 14 requests/second
|
|
78
|
+
* - Delivery API: 55 requests/second
|
|
79
|
+
*
|
|
80
|
+
* If a 429 is still received (e.g., due to other processes), retries with backoff.
|
|
81
|
+
*/
|
|
82
|
+
getEntries<T = any>(query: ContentfulQuery, options?: FetchOptions): Promise<ContentfulResponse<T>>;
|
|
83
|
+
/**
|
|
84
|
+
* Fetches a single asset from Contentful by ID with proactive rate limiting
|
|
85
|
+
* and automatic retry on rate limit errors.
|
|
86
|
+
*
|
|
87
|
+
* @param assetId - The Contentful asset ID
|
|
88
|
+
* @param options - Optional fetch options (locale, preview, caching, retry)
|
|
89
|
+
* @returns The asset response or null if not found
|
|
90
|
+
*/
|
|
91
|
+
getAsset(assetId: string, options?: FetchOptions): Promise<ContentfulAssetResponse | null>;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Creates a Contentful Content Delivery API (CDA) client
|
|
95
|
+
*
|
|
96
|
+
* @param config - Configuration object for the Contentful client
|
|
97
|
+
* @returns Contentful CDA client instance
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```ts
|
|
101
|
+
* const client = createContentfulClient({
|
|
102
|
+
* spaceId: process.env.CONTENTFUL_SPACE_ID!,
|
|
103
|
+
* accessToken: process.env.CONTENTFUL_ACCESS_TOKEN!,
|
|
104
|
+
* environment: 'master'
|
|
105
|
+
* });
|
|
106
|
+
* ```
|
|
107
|
+
*/
|
|
108
|
+
export declare function createContentfulClient(config: ContentfulConfig): ContentfulFetchClient;
|
|
109
|
+
/**
|
|
110
|
+
* Creates a Contentful Content Preview API (CPA) client
|
|
111
|
+
*
|
|
112
|
+
* @param config - Configuration object for the Contentful preview client
|
|
113
|
+
* @returns Contentful CPA client instance
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* ```ts
|
|
117
|
+
* const previewClient = createContentfulPreviewClient({
|
|
118
|
+
* spaceId: process.env.CONTENTFUL_SPACE_ID!,
|
|
119
|
+
* accessToken: process.env.CONTENTFUL_PREVIEW_ACCESS_TOKEN!,
|
|
120
|
+
* environment: 'master'
|
|
121
|
+
* });
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
export declare function createContentfulPreviewClient(config: ContentfulConfig): ContentfulFetchClient;
|
|
125
|
+
/**
|
|
126
|
+
* Gets the appropriate Contentful client based on preview mode
|
|
127
|
+
*
|
|
128
|
+
* @param config - Configuration for the Contentful client
|
|
129
|
+
* @param preview - Whether to use the preview API
|
|
130
|
+
* @returns Contentful client instance (CDA or CPA)
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* ```ts
|
|
134
|
+
* const client = getContentfulClient({
|
|
135
|
+
* spaceId: process.env.CONTENTFUL_SPACE_ID!,
|
|
136
|
+
* accessToken: preview
|
|
137
|
+
* ? process.env.CONTENTFUL_PREVIEW_ACCESS_TOKEN!
|
|
138
|
+
* : process.env.CONTENTFUL_ACCESS_TOKEN!,
|
|
139
|
+
* }, preview);
|
|
140
|
+
* ```
|
|
141
|
+
*/
|
|
142
|
+
export declare function getContentfulClient(config: ContentfulConfig, preview: boolean): ContentfulFetchClient;
|
|
143
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { AuthenticationError, ContentfulError, EntryNotFoundError, RateLimitError, ValidationError, } from './utils/errors';
|
|
2
|
+
import { calculateBackoffDelay, getRateLimiter } from './utils/retry';
|
|
3
|
+
/**
|
|
4
|
+
* Builds query string from query parameters
|
|
5
|
+
*/
|
|
6
|
+
function buildQueryString(query) {
|
|
7
|
+
const params = new URLSearchParams();
|
|
8
|
+
Object.entries(query).forEach(([key, value]) => {
|
|
9
|
+
if (value !== undefined && value !== null) {
|
|
10
|
+
params.append(key, String(value));
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
return params.toString();
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Sleep utility for async delays
|
|
17
|
+
*/
|
|
18
|
+
function sleep(ms) {
|
|
19
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Retry configuration for 429 error handling in getEntries
|
|
23
|
+
*/
|
|
24
|
+
const RETRY_CONFIG = {
|
|
25
|
+
maxRetries: 10,
|
|
26
|
+
initialDelay: 1000,
|
|
27
|
+
maxDelay: 15000,
|
|
28
|
+
backoffMultiplier: 2,
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Parses retry-after header from response
|
|
32
|
+
*
|
|
33
|
+
* @param response - Fetch response object
|
|
34
|
+
* @returns Retry-after value in seconds, or undefined if not present
|
|
35
|
+
*/
|
|
36
|
+
function parseRetryAfter(response) {
|
|
37
|
+
const retryAfterHeader = response.headers.get('X-Contentful-RateLimit-Reset') || response.headers.get('Retry-After');
|
|
38
|
+
if (retryAfterHeader) {
|
|
39
|
+
const parsed = Number.parseInt(retryAfterHeader, 10);
|
|
40
|
+
return Number.isNaN(parsed) ? undefined : parsed;
|
|
41
|
+
}
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Parses error response from Contentful API
|
|
46
|
+
*/
|
|
47
|
+
async function parseErrorResponse(response) {
|
|
48
|
+
const statusCode = response.status;
|
|
49
|
+
let errorData;
|
|
50
|
+
try {
|
|
51
|
+
errorData = await response.json();
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
errorData = { message: response.statusText };
|
|
55
|
+
}
|
|
56
|
+
const message = errorData?.message || `Contentful API error: ${statusCode}`;
|
|
57
|
+
switch (statusCode) {
|
|
58
|
+
case 401:
|
|
59
|
+
return new AuthenticationError(message);
|
|
60
|
+
case 404:
|
|
61
|
+
return new EntryNotFoundError(errorData?.sys?.id || 'unknown', errorData?.sys?.contentType?.sys?.id);
|
|
62
|
+
case 429: {
|
|
63
|
+
// Parse retry-after header (in seconds)
|
|
64
|
+
const retryAfterHeader = response.headers.get('X-Contentful-RateLimit-Reset') || response.headers.get('Retry-After');
|
|
65
|
+
const retryAfter = retryAfterHeader ? Number.parseInt(retryAfterHeader, 10) : undefined;
|
|
66
|
+
return new RateLimitError(message, retryAfter, errorData);
|
|
67
|
+
}
|
|
68
|
+
case 400:
|
|
69
|
+
return new ValidationError(message, errorData);
|
|
70
|
+
default:
|
|
71
|
+
return new ContentfulError(message, statusCode, errorData);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Fetch-based Contentful client that participates in Next.js caching.
|
|
76
|
+
* Includes proactive rate limiting and automatic retry on 429 errors.
|
|
77
|
+
*/
|
|
78
|
+
export class ContentfulFetchClient {
|
|
79
|
+
baseUrl;
|
|
80
|
+
accessToken;
|
|
81
|
+
rateLimiter;
|
|
82
|
+
isPreview;
|
|
83
|
+
constructor(config, preview = false) {
|
|
84
|
+
const host = config.host || (preview ? 'preview.contentful.com' : 'cdn.contentful.com');
|
|
85
|
+
const environment = config.environment || 'master';
|
|
86
|
+
this.baseUrl = `https://${host}/spaces/${config.spaceId}/environments/${environment}`;
|
|
87
|
+
this.accessToken = config.accessToken;
|
|
88
|
+
this.isPreview = preview;
|
|
89
|
+
this.rateLimiter = getRateLimiter(preview);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Fetches entries from Contentful with proactive rate limiting
|
|
93
|
+
* and automatic retry on rate limit errors.
|
|
94
|
+
*
|
|
95
|
+
* Rate limits are applied proactively:
|
|
96
|
+
* - Preview API: 14 requests/second
|
|
97
|
+
* - Delivery API: 55 requests/second
|
|
98
|
+
*
|
|
99
|
+
* If a 429 is still received (e.g., due to other processes), retries with backoff.
|
|
100
|
+
*/
|
|
101
|
+
async getEntries(query, options) {
|
|
102
|
+
const queryString = buildQueryString(query);
|
|
103
|
+
const url = `${this.baseUrl}/entries?${queryString}`;
|
|
104
|
+
const fetchOptions = {
|
|
105
|
+
headers: {
|
|
106
|
+
Authorization: `Bearer ${this.accessToken}`,
|
|
107
|
+
'Content-Type': 'application/json',
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
// Add Next.js cache configuration if provided
|
|
111
|
+
if (options?.next) {
|
|
112
|
+
fetchOptions.next = options.next;
|
|
113
|
+
}
|
|
114
|
+
for (let attempt = 0; attempt <= RETRY_CONFIG.maxRetries; attempt++) {
|
|
115
|
+
try {
|
|
116
|
+
// Wait for rate limiter before making request
|
|
117
|
+
await this.rateLimiter.acquire();
|
|
118
|
+
const response = await fetch(url, fetchOptions);
|
|
119
|
+
if (response.ok) {
|
|
120
|
+
return response.json();
|
|
121
|
+
}
|
|
122
|
+
// Handle rate limiting (429) with automatic retry
|
|
123
|
+
if (response.status === 429 && attempt < RETRY_CONFIG.maxRetries) {
|
|
124
|
+
const retryAfter = parseRetryAfter(response);
|
|
125
|
+
const delay = calculateBackoffDelay(attempt, RETRY_CONFIG, retryAfter);
|
|
126
|
+
console.warn(`[Contentful] Rate limited (429), retrying in ${delay}ms (attempt ${attempt + 1}/${RETRY_CONFIG.maxRetries}). ` +
|
|
127
|
+
`Queue: ${this.rateLimiter.getQueueLength()} waiting. ` +
|
|
128
|
+
`API: ${this.isPreview ? 'preview' : 'delivery'}`);
|
|
129
|
+
// Pause the rate limiter - this affects all queued requests
|
|
130
|
+
// Use the longer of retryAfter or 2 seconds as minimum pause
|
|
131
|
+
const pauseSeconds = Math.max(retryAfter ?? 2, 2);
|
|
132
|
+
this.rateLimiter.pause(pauseSeconds);
|
|
133
|
+
// Wait before retrying this request
|
|
134
|
+
await sleep(delay);
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
// For non-429 errors or final retry attempt, throw the error
|
|
138
|
+
throw await parseErrorResponse(response);
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
if (error instanceof ContentfulError) {
|
|
142
|
+
throw error;
|
|
143
|
+
}
|
|
144
|
+
console.error('[Contentful] Unexpected error in request', error);
|
|
145
|
+
throw new ContentfulError('Unexpected error in request', 500);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// This should never be reached due to the throw in the loop,
|
|
149
|
+
// but TypeScript needs it for type safety
|
|
150
|
+
throw new ContentfulError('Max retries exceeded', 500);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Fetches a single asset from Contentful by ID with proactive rate limiting
|
|
154
|
+
* and automatic retry on rate limit errors.
|
|
155
|
+
*
|
|
156
|
+
* @param assetId - The Contentful asset ID
|
|
157
|
+
* @param options - Optional fetch options (locale, preview, caching, retry)
|
|
158
|
+
* @returns The asset response or null if not found
|
|
159
|
+
*/
|
|
160
|
+
async getAsset(assetId, options) {
|
|
161
|
+
const url = `${this.baseUrl}/assets/${assetId}`;
|
|
162
|
+
const fetchOptions = {
|
|
163
|
+
headers: {
|
|
164
|
+
Authorization: `Bearer ${this.accessToken}`,
|
|
165
|
+
'Content-Type': 'application/json',
|
|
166
|
+
},
|
|
167
|
+
};
|
|
168
|
+
// Add Next.js cache configuration if provided
|
|
169
|
+
if (options?.next) {
|
|
170
|
+
fetchOptions.next = options.next;
|
|
171
|
+
}
|
|
172
|
+
for (let attempt = 0; attempt <= RETRY_CONFIG.maxRetries; attempt++) {
|
|
173
|
+
try {
|
|
174
|
+
// Wait for rate limiter before making request
|
|
175
|
+
await this.rateLimiter.acquire();
|
|
176
|
+
const response = await fetch(url, fetchOptions);
|
|
177
|
+
if (response.ok) {
|
|
178
|
+
return response.json();
|
|
179
|
+
}
|
|
180
|
+
// Return null for 404 (asset not found)
|
|
181
|
+
if (response.status === 404) {
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
// Handle rate limiting (429) with automatic retry
|
|
185
|
+
if (response.status === 429 && attempt < RETRY_CONFIG.maxRetries) {
|
|
186
|
+
const retryAfter = parseRetryAfter(response);
|
|
187
|
+
const delay = calculateBackoffDelay(attempt, RETRY_CONFIG, retryAfter);
|
|
188
|
+
console.warn(`[Contentful] Rate limited (429), retrying in ${delay}ms (attempt ${attempt + 1}/${RETRY_CONFIG.maxRetries}). ` +
|
|
189
|
+
`Queue: ${this.rateLimiter.getQueueLength()} waiting. ` +
|
|
190
|
+
`API: ${this.isPreview ? 'preview' : 'delivery'}`);
|
|
191
|
+
// Pause the rate limiter - this affects all queued requests
|
|
192
|
+
const pauseSeconds = Math.max(retryAfter ?? 2, 2);
|
|
193
|
+
this.rateLimiter.pause(pauseSeconds);
|
|
194
|
+
// Wait before retrying this request
|
|
195
|
+
await sleep(delay);
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
// For non-429 errors or final retry attempt, throw the error
|
|
199
|
+
throw await parseErrorResponse(response);
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
if (error instanceof ContentfulError) {
|
|
203
|
+
throw error;
|
|
204
|
+
}
|
|
205
|
+
console.error('[Contentful] Unexpected error in asset request', error);
|
|
206
|
+
throw new ContentfulError('Unexpected error in asset request', 500);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
throw new ContentfulError('Max retries exceeded', 500);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Creates a Contentful Content Delivery API (CDA) client
|
|
214
|
+
*
|
|
215
|
+
* @param config - Configuration object for the Contentful client
|
|
216
|
+
* @returns Contentful CDA client instance
|
|
217
|
+
*
|
|
218
|
+
* @example
|
|
219
|
+
* ```ts
|
|
220
|
+
* const client = createContentfulClient({
|
|
221
|
+
* spaceId: process.env.CONTENTFUL_SPACE_ID!,
|
|
222
|
+
* accessToken: process.env.CONTENTFUL_ACCESS_TOKEN!,
|
|
223
|
+
* environment: 'master'
|
|
224
|
+
* });
|
|
225
|
+
* ```
|
|
226
|
+
*/
|
|
227
|
+
export function createContentfulClient(config) {
|
|
228
|
+
return new ContentfulFetchClient(config, false);
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Creates a Contentful Content Preview API (CPA) client
|
|
232
|
+
*
|
|
233
|
+
* @param config - Configuration object for the Contentful preview client
|
|
234
|
+
* @returns Contentful CPA client instance
|
|
235
|
+
*
|
|
236
|
+
* @example
|
|
237
|
+
* ```ts
|
|
238
|
+
* const previewClient = createContentfulPreviewClient({
|
|
239
|
+
* spaceId: process.env.CONTENTFUL_SPACE_ID!,
|
|
240
|
+
* accessToken: process.env.CONTENTFUL_PREVIEW_ACCESS_TOKEN!,
|
|
241
|
+
* environment: 'master'
|
|
242
|
+
* });
|
|
243
|
+
* ```
|
|
244
|
+
*/
|
|
245
|
+
export function createContentfulPreviewClient(config) {
|
|
246
|
+
return new ContentfulFetchClient(config, true);
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Gets the appropriate Contentful client based on preview mode
|
|
250
|
+
*
|
|
251
|
+
* @param config - Configuration for the Contentful client
|
|
252
|
+
* @param preview - Whether to use the preview API
|
|
253
|
+
* @returns Contentful client instance (CDA or CPA)
|
|
254
|
+
*
|
|
255
|
+
* @example
|
|
256
|
+
* ```ts
|
|
257
|
+
* const client = getContentfulClient({
|
|
258
|
+
* spaceId: process.env.CONTENTFUL_SPACE_ID!,
|
|
259
|
+
* accessToken: preview
|
|
260
|
+
* ? process.env.CONTENTFUL_PREVIEW_ACCESS_TOKEN!
|
|
261
|
+
* : process.env.CONTENTFUL_ACCESS_TOKEN!,
|
|
262
|
+
* }, preview);
|
|
263
|
+
* ```
|
|
264
|
+
*/
|
|
265
|
+
export function getContentfulClient(config, preview) {
|
|
266
|
+
return preview ? createContentfulPreviewClient(config) : createContentfulClient(config);
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=client.js.map
|