@se-studio/contentful-rest-api 0.0.0-next16-20260822103555

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.
Files changed (472) hide show
  1. package/CHANGELOG.md +2036 -0
  2. package/README.md +764 -0
  3. package/dist/api/article-type.d.ts +37 -0
  4. package/dist/api/article-type.d.ts.map +1 -0
  5. package/dist/api/article-type.js +140 -0
  6. package/dist/api/article-type.js.map +1 -0
  7. package/dist/api/article.d.ts +32 -0
  8. package/dist/api/article.d.ts.map +1 -0
  9. package/dist/api/article.js +43 -0
  10. package/dist/api/article.js.map +1 -0
  11. package/dist/api/asset.d.ts +28 -0
  12. package/dist/api/asset.d.ts.map +1 -0
  13. package/dist/api/asset.js +56 -0
  14. package/dist/api/asset.js.map +1 -0
  15. package/dist/api/banner.d.ts +8 -0
  16. package/dist/api/banner.d.ts.map +1 -0
  17. package/dist/api/banner.js +96 -0
  18. package/dist/api/banner.js.map +1 -0
  19. package/dist/api/breadcrumb.d.ts +40 -0
  20. package/dist/api/breadcrumb.d.ts.map +1 -0
  21. package/dist/api/breadcrumb.js +60 -0
  22. package/dist/api/breadcrumb.js.map +1 -0
  23. package/dist/api/componentPreview.d.ts +59 -0
  24. package/dist/api/componentPreview.d.ts.map +1 -0
  25. package/dist/api/componentPreview.js +88 -0
  26. package/dist/api/componentPreview.js.map +1 -0
  27. package/dist/api/context.d.ts +24 -0
  28. package/dist/api/context.d.ts.map +1 -0
  29. package/dist/api/context.js +73 -0
  30. package/dist/api/context.js.map +1 -0
  31. package/dist/api/custom-type.d.ts +37 -0
  32. package/dist/api/custom-type.d.ts.map +1 -0
  33. package/dist/api/custom-type.js +44 -0
  34. package/dist/api/custom-type.js.map +1 -0
  35. package/dist/api/document.d.ts +8 -0
  36. package/dist/api/document.d.ts.map +1 -0
  37. package/dist/api/document.js +84 -0
  38. package/dist/api/document.js.map +1 -0
  39. package/dist/api/helpers.d.ts +59 -0
  40. package/dist/api/helpers.d.ts.map +1 -0
  41. package/dist/api/helpers.js +313 -0
  42. package/dist/api/helpers.js.map +1 -0
  43. package/dist/api/index.d.ts +33 -0
  44. package/dist/api/index.d.ts.map +1 -0
  45. package/dist/api/index.js +37 -0
  46. package/dist/api/index.js.map +1 -0
  47. package/dist/api/links.d.ts +124 -0
  48. package/dist/api/links.d.ts.map +1 -0
  49. package/dist/api/links.js +307 -0
  50. package/dist/api/links.js.map +1 -0
  51. package/dist/api/listing-fetch-params.d.ts +70 -0
  52. package/dist/api/listing-fetch-params.d.ts.map +1 -0
  53. package/dist/api/listing-fetch-params.js +124 -0
  54. package/dist/api/listing-fetch-params.js.map +1 -0
  55. package/dist/api/media-library.d.ts +59 -0
  56. package/dist/api/media-library.d.ts.map +1 -0
  57. package/dist/api/media-library.js +315 -0
  58. package/dist/api/media-library.js.map +1 -0
  59. package/dist/api/navigation.d.ts +10 -0
  60. package/dist/api/navigation.d.ts.map +1 -0
  61. package/dist/api/navigation.js +18 -0
  62. package/dist/api/navigation.js.map +1 -0
  63. package/dist/api/page.d.ts +15 -0
  64. package/dist/api/page.d.ts.map +1 -0
  65. package/dist/api/page.js +39 -0
  66. package/dist/api/page.js.map +1 -0
  67. package/dist/api/person.d.ts +37 -0
  68. package/dist/api/person.d.ts.map +1 -0
  69. package/dist/api/person.js +135 -0
  70. package/dist/api/person.js.map +1 -0
  71. package/dist/api/preview-types.d.ts +65 -0
  72. package/dist/api/preview-types.d.ts.map +1 -0
  73. package/dist/api/preview-types.js +7 -0
  74. package/dist/api/preview-types.js.map +1 -0
  75. package/dist/api/preview.d.ts +49 -0
  76. package/dist/api/preview.d.ts.map +1 -0
  77. package/dist/api/preview.js +261 -0
  78. package/dist/api/preview.js.map +1 -0
  79. package/dist/api/redirects.d.ts +16 -0
  80. package/dist/api/redirects.d.ts.map +1 -0
  81. package/dist/api/redirects.js +110 -0
  82. package/dist/api/redirects.js.map +1 -0
  83. package/dist/api/related-articles.d.ts +28 -0
  84. package/dist/api/related-articles.d.ts.map +1 -0
  85. package/dist/api/related-articles.js +147 -0
  86. package/dist/api/related-articles.js.map +1 -0
  87. package/dist/api/server-asset.d.ts +67 -0
  88. package/dist/api/server-asset.d.ts.map +1 -0
  89. package/dist/api/server-asset.js +106 -0
  90. package/dist/api/server-asset.js.map +1 -0
  91. package/dist/api/sitemap.d.ts +131 -0
  92. package/dist/api/sitemap.d.ts.map +1 -0
  93. package/dist/api/sitemap.js +201 -0
  94. package/dist/api/sitemap.js.map +1 -0
  95. package/dist/api/tag-type.d.ts +32 -0
  96. package/dist/api/tag-type.d.ts.map +1 -0
  97. package/dist/api/tag-type.js +123 -0
  98. package/dist/api/tag-type.js.map +1 -0
  99. package/dist/api/tag.d.ts +37 -0
  100. package/dist/api/tag.d.ts.map +1 -0
  101. package/dist/api/tag.js +132 -0
  102. package/dist/api/tag.js.map +1 -0
  103. package/dist/api/template.d.ts +61 -0
  104. package/dist/api/template.d.ts.map +1 -0
  105. package/dist/api/template.js +94 -0
  106. package/dist/api/template.js.map +1 -0
  107. package/dist/api/types.d.ts +113 -0
  108. package/dist/api/types.d.ts.map +1 -0
  109. package/dist/api/types.js +2 -0
  110. package/dist/api/types.js.map +1 -0
  111. package/dist/baseTypes/baseAlternatePageContent.d.ts +32 -0
  112. package/dist/baseTypes/baseAlternatePageContent.d.ts.map +1 -0
  113. package/dist/baseTypes/baseAlternatePageContent.js +2 -0
  114. package/dist/baseTypes/baseAlternatePageContent.js.map +1 -0
  115. package/dist/baseTypes/baseArticle.d.ts +206 -0
  116. package/dist/baseTypes/baseArticle.d.ts.map +1 -0
  117. package/dist/baseTypes/baseArticle.js +2 -0
  118. package/dist/baseTypes/baseArticle.js.map +1 -0
  119. package/dist/baseTypes/baseArticleType.d.ts +177 -0
  120. package/dist/baseTypes/baseArticleType.d.ts.map +1 -0
  121. package/dist/baseTypes/baseArticleType.js +2 -0
  122. package/dist/baseTypes/baseArticleType.js.map +1 -0
  123. package/dist/baseTypes/baseBanner.d.ts +113 -0
  124. package/dist/baseTypes/baseBanner.d.ts.map +1 -0
  125. package/dist/baseTypes/baseBanner.js +2 -0
  126. package/dist/baseTypes/baseBanner.js.map +1 -0
  127. package/dist/baseTypes/baseCollection.d.ts +132 -0
  128. package/dist/baseTypes/baseCollection.d.ts.map +1 -0
  129. package/dist/baseTypes/baseCollection.js +2 -0
  130. package/dist/baseTypes/baseCollection.js.map +1 -0
  131. package/dist/baseTypes/baseComponent.d.ts +130 -0
  132. package/dist/baseTypes/baseComponent.d.ts.map +1 -0
  133. package/dist/baseTypes/baseComponent.js +2 -0
  134. package/dist/baseTypes/baseComponent.js.map +1 -0
  135. package/dist/baseTypes/baseCustomType.d.ts +147 -0
  136. package/dist/baseTypes/baseCustomType.d.ts.map +1 -0
  137. package/dist/baseTypes/baseCustomType.js +2 -0
  138. package/dist/baseTypes/baseCustomType.js.map +1 -0
  139. package/dist/baseTypes/baseDocument.d.ts +70 -0
  140. package/dist/baseTypes/baseDocument.d.ts.map +1 -0
  141. package/dist/baseTypes/baseDocument.js +2 -0
  142. package/dist/baseTypes/baseDocument.js.map +1 -0
  143. package/dist/baseTypes/baseExternalComponent.d.ts +138 -0
  144. package/dist/baseTypes/baseExternalComponent.d.ts.map +1 -0
  145. package/dist/baseTypes/baseExternalComponent.js +2 -0
  146. package/dist/baseTypes/baseExternalComponent.js.map +1 -0
  147. package/dist/baseTypes/baseExternalVideo.d.ts +86 -0
  148. package/dist/baseTypes/baseExternalVideo.d.ts.map +1 -0
  149. package/dist/baseTypes/baseExternalVideo.js +2 -0
  150. package/dist/baseTypes/baseExternalVideo.js.map +1 -0
  151. package/dist/baseTypes/baseHtmlComponent.d.ts +72 -0
  152. package/dist/baseTypes/baseHtmlComponent.d.ts.map +1 -0
  153. package/dist/baseTypes/baseHtmlComponent.js +2 -0
  154. package/dist/baseTypes/baseHtmlComponent.js.map +1 -0
  155. package/dist/baseTypes/baseLink.d.ts +115 -0
  156. package/dist/baseTypes/baseLink.d.ts.map +1 -0
  157. package/dist/baseTypes/baseLink.js +2 -0
  158. package/dist/baseTypes/baseLink.js.map +1 -0
  159. package/dist/baseTypes/baseMedia.d.ts +100 -0
  160. package/dist/baseTypes/baseMedia.d.ts.map +1 -0
  161. package/dist/baseTypes/baseMedia.js +2 -0
  162. package/dist/baseTypes/baseMedia.js.map +1 -0
  163. package/dist/baseTypes/baseNavigation.d.ts +37 -0
  164. package/dist/baseTypes/baseNavigation.d.ts.map +1 -0
  165. package/dist/baseTypes/baseNavigation.js +2 -0
  166. package/dist/baseTypes/baseNavigation.js.map +1 -0
  167. package/dist/baseTypes/baseNavigationItem.d.ts +109 -0
  168. package/dist/baseTypes/baseNavigationItem.d.ts.map +1 -0
  169. package/dist/baseTypes/baseNavigationItem.js +2 -0
  170. package/dist/baseTypes/baseNavigationItem.js.map +1 -0
  171. package/dist/baseTypes/basePage.d.ts +142 -0
  172. package/dist/baseTypes/basePage.d.ts.map +1 -0
  173. package/dist/baseTypes/basePage.js +2 -0
  174. package/dist/baseTypes/basePage.js.map +1 -0
  175. package/dist/baseTypes/basePageVariant.d.ts +145 -0
  176. package/dist/baseTypes/basePageVariant.d.ts.map +1 -0
  177. package/dist/baseTypes/basePageVariant.js +2 -0
  178. package/dist/baseTypes/basePageVariant.js.map +1 -0
  179. package/dist/baseTypes/basePerson.d.ts +160 -0
  180. package/dist/baseTypes/basePerson.d.ts.map +1 -0
  181. package/dist/baseTypes/basePerson.js +2 -0
  182. package/dist/baseTypes/basePerson.js.map +1 -0
  183. package/dist/baseTypes/baseRedirect.d.ts +69 -0
  184. package/dist/baseTypes/baseRedirect.d.ts.map +1 -0
  185. package/dist/baseTypes/baseRedirect.js +2 -0
  186. package/dist/baseTypes/baseRedirect.js.map +1 -0
  187. package/dist/baseTypes/baseSchema.d.ts +19 -0
  188. package/dist/baseTypes/baseSchema.d.ts.map +1 -0
  189. package/dist/baseTypes/baseSchema.js +2 -0
  190. package/dist/baseTypes/baseSchema.js.map +1 -0
  191. package/dist/baseTypes/baseShared.d.ts +25 -0
  192. package/dist/baseTypes/baseShared.d.ts.map +1 -0
  193. package/dist/baseTypes/baseShared.js +2 -0
  194. package/dist/baseTypes/baseShared.js.map +1 -0
  195. package/dist/baseTypes/baseTag.d.ts +129 -0
  196. package/dist/baseTypes/baseTag.d.ts.map +1 -0
  197. package/dist/baseTypes/baseTag.js +2 -0
  198. package/dist/baseTypes/baseTag.js.map +1 -0
  199. package/dist/baseTypes/baseTagType.d.ts +70 -0
  200. package/dist/baseTypes/baseTagType.d.ts.map +1 -0
  201. package/dist/baseTypes/baseTagType.js +2 -0
  202. package/dist/baseTypes/baseTagType.js.map +1 -0
  203. package/dist/baseTypes/baseTemplate.d.ts +77 -0
  204. package/dist/baseTypes/baseTemplate.d.ts.map +1 -0
  205. package/dist/baseTypes/baseTemplate.js +2 -0
  206. package/dist/baseTypes/baseTemplate.js.map +1 -0
  207. package/dist/client.d.ts +145 -0
  208. package/dist/client.d.ts.map +1 -0
  209. package/dist/client.js +322 -0
  210. package/dist/client.js.map +1 -0
  211. package/dist/cms-integrity.d.ts +10 -0
  212. package/dist/cms-integrity.d.ts.map +1 -0
  213. package/dist/cms-integrity.js +7 -0
  214. package/dist/cms-integrity.js.map +1 -0
  215. package/dist/converters/animationEnricher.d.ts +17 -0
  216. package/dist/converters/animationEnricher.d.ts.map +1 -0
  217. package/dist/converters/animationEnricher.js +177 -0
  218. package/dist/converters/animationEnricher.js.map +1 -0
  219. package/dist/converters/article.d.ts +48 -0
  220. package/dist/converters/article.d.ts.map +1 -0
  221. package/dist/converters/article.js +364 -0
  222. package/dist/converters/article.js.map +1 -0
  223. package/dist/converters/asset.d.ts +33 -0
  224. package/dist/converters/asset.d.ts.map +1 -0
  225. package/dist/converters/asset.js +340 -0
  226. package/dist/converters/asset.js.map +1 -0
  227. package/dist/converters/banner.d.ts +10 -0
  228. package/dist/converters/banner.d.ts.map +1 -0
  229. package/dist/converters/banner.js +63 -0
  230. package/dist/converters/banner.js.map +1 -0
  231. package/dist/converters/collection.d.ts +26 -0
  232. package/dist/converters/collection.d.ts.map +1 -0
  233. package/dist/converters/collection.js +52 -0
  234. package/dist/converters/collection.js.map +1 -0
  235. package/dist/converters/component.d.ts +26 -0
  236. package/dist/converters/component.d.ts.map +1 -0
  237. package/dist/converters/component.js +54 -0
  238. package/dist/converters/component.js.map +1 -0
  239. package/dist/converters/customType.d.ts +24 -0
  240. package/dist/converters/customType.d.ts.map +1 -0
  241. package/dist/converters/customType.js +93 -0
  242. package/dist/converters/customType.js.map +1 -0
  243. package/dist/converters/document.d.ts +14 -0
  244. package/dist/converters/document.d.ts.map +1 -0
  245. package/dist/converters/document.js +51 -0
  246. package/dist/converters/document.js.map +1 -0
  247. package/dist/converters/enrichAssets.d.ts +19 -0
  248. package/dist/converters/enrichAssets.d.ts.map +1 -0
  249. package/dist/converters/enrichAssets.js +36 -0
  250. package/dist/converters/enrichAssets.js.map +1 -0
  251. package/dist/converters/externalComponent.d.ts +27 -0
  252. package/dist/converters/externalComponent.d.ts.map +1 -0
  253. package/dist/converters/externalComponent.js +46 -0
  254. package/dist/converters/externalComponent.js.map +1 -0
  255. package/dist/converters/externalVideoEnricher.d.ts +12 -0
  256. package/dist/converters/externalVideoEnricher.d.ts.map +1 -0
  257. package/dist/converters/externalVideoEnricher.js +70 -0
  258. package/dist/converters/externalVideoEnricher.js.map +1 -0
  259. package/dist/converters/helpers.d.ts +173 -0
  260. package/dist/converters/helpers.d.ts.map +1 -0
  261. package/dist/converters/helpers.js +167 -0
  262. package/dist/converters/helpers.js.map +1 -0
  263. package/dist/converters/heroVideoEnricher.d.ts +9 -0
  264. package/dist/converters/heroVideoEnricher.d.ts.map +1 -0
  265. package/dist/converters/heroVideoEnricher.js +108 -0
  266. package/dist/converters/heroVideoEnricher.js.map +1 -0
  267. package/dist/converters/heroVideoEnv.d.ts +14 -0
  268. package/dist/converters/heroVideoEnv.d.ts.map +1 -0
  269. package/dist/converters/heroVideoEnv.js +28 -0
  270. package/dist/converters/heroVideoEnv.js.map +1 -0
  271. package/dist/converters/htmlComponent.d.ts +17 -0
  272. package/dist/converters/htmlComponent.d.ts.map +1 -0
  273. package/dist/converters/htmlComponent.js +33 -0
  274. package/dist/converters/htmlComponent.js.map +1 -0
  275. package/dist/converters/iconCollector.d.ts +36 -0
  276. package/dist/converters/iconCollector.d.ts.map +1 -0
  277. package/dist/converters/iconCollector.js +309 -0
  278. package/dist/converters/iconCollector.js.map +1 -0
  279. package/dist/converters/index.d.ts +26 -0
  280. package/dist/converters/index.d.ts.map +1 -0
  281. package/dist/converters/index.js +21 -0
  282. package/dist/converters/index.js.map +1 -0
  283. package/dist/converters/link.d.ts +11 -0
  284. package/dist/converters/link.d.ts.map +1 -0
  285. package/dist/converters/link.js +109 -0
  286. package/dist/converters/link.js.map +1 -0
  287. package/dist/converters/navigationItem.d.ts +17 -0
  288. package/dist/converters/navigationItem.d.ts.map +1 -0
  289. package/dist/converters/navigationItem.js +126 -0
  290. package/dist/converters/navigationItem.js.map +1 -0
  291. package/dist/converters/page.d.ts +44 -0
  292. package/dist/converters/page.d.ts.map +1 -0
  293. package/dist/converters/page.js +160 -0
  294. package/dist/converters/page.js.map +1 -0
  295. package/dist/converters/pageVariantMerge.d.ts +24 -0
  296. package/dist/converters/pageVariantMerge.d.ts.map +1 -0
  297. package/dist/converters/pageVariantMerge.js +151 -0
  298. package/dist/converters/pageVariantMerge.js.map +1 -0
  299. package/dist/converters/person.d.ts +40 -0
  300. package/dist/converters/person.d.ts.map +1 -0
  301. package/dist/converters/person.js +152 -0
  302. package/dist/converters/person.js.map +1 -0
  303. package/dist/converters/pictureBlurEnricher.d.ts +9 -0
  304. package/dist/converters/pictureBlurEnricher.d.ts.map +1 -0
  305. package/dist/converters/pictureBlurEnricher.js +79 -0
  306. package/dist/converters/pictureBlurEnricher.js.map +1 -0
  307. package/dist/converters/redirect.d.ts +20 -0
  308. package/dist/converters/redirect.d.ts.map +1 -0
  309. package/dist/converters/redirect.js +50 -0
  310. package/dist/converters/redirect.js.map +1 -0
  311. package/dist/converters/resolver.d.ts +26 -0
  312. package/dist/converters/resolver.d.ts.map +1 -0
  313. package/dist/converters/resolver.js +383 -0
  314. package/dist/converters/resolver.js.map +1 -0
  315. package/dist/converters/schema.d.ts +14 -0
  316. package/dist/converters/schema.d.ts.map +1 -0
  317. package/dist/converters/schema.js +25 -0
  318. package/dist/converters/schema.js.map +1 -0
  319. package/dist/converters/svgProcessor.d.ts +58 -0
  320. package/dist/converters/svgProcessor.d.ts.map +1 -0
  321. package/dist/converters/svgProcessor.js +225 -0
  322. package/dist/converters/svgProcessor.js.map +1 -0
  323. package/dist/converters/tag.d.ts +25 -0
  324. package/dist/converters/tag.d.ts.map +1 -0
  325. package/dist/converters/tag.js +170 -0
  326. package/dist/converters/tag.js.map +1 -0
  327. package/dist/converters/tagType.d.ts +15 -0
  328. package/dist/converters/tagType.d.ts.map +1 -0
  329. package/dist/converters/tagType.js +56 -0
  330. package/dist/converters/tagType.js.map +1 -0
  331. package/dist/converters/template.d.ts +31 -0
  332. package/dist/converters/template.d.ts.map +1 -0
  333. package/dist/converters/template.js +53 -0
  334. package/dist/converters/template.js.map +1 -0
  335. package/dist/converters/videoEnricher.d.ts +14 -0
  336. package/dist/converters/videoEnricher.d.ts.map +1 -0
  337. package/dist/converters/videoEnricher.js +85 -0
  338. package/dist/converters/videoEnricher.js.map +1 -0
  339. package/dist/icons/rebuildIconSprite.d.ts +8 -0
  340. package/dist/icons/rebuildIconSprite.d.ts.map +1 -0
  341. package/dist/icons/rebuildIconSprite.js +15 -0
  342. package/dist/icons/rebuildIconSprite.js.map +1 -0
  343. package/dist/index.d.ts +33 -0
  344. package/dist/index.d.ts.map +1 -0
  345. package/dist/index.js +42 -0
  346. package/dist/index.js.map +1 -0
  347. package/dist/navigation/assembly.d.ts +8 -0
  348. package/dist/navigation/assembly.d.ts.map +1 -0
  349. package/dist/navigation/assembly.js +115 -0
  350. package/dist/navigation/assembly.js.map +1 -0
  351. package/dist/navigation/cacheOptions.d.ts +17 -0
  352. package/dist/navigation/cacheOptions.d.ts.map +1 -0
  353. package/dist/navigation/cacheOptions.js +45 -0
  354. package/dist/navigation/cacheOptions.js.map +1 -0
  355. package/dist/navigation/enrichModelNavigation.d.ts +17 -0
  356. package/dist/navigation/enrichModelNavigation.d.ts.map +1 -0
  357. package/dist/navigation/enrichModelNavigation.js +46 -0
  358. package/dist/navigation/enrichModelNavigation.js.map +1 -0
  359. package/dist/navigation/linkIndex.d.ts +10 -0
  360. package/dist/navigation/linkIndex.d.ts.map +1 -0
  361. package/dist/navigation/linkIndex.js +34 -0
  362. package/dist/navigation/linkIndex.js.map +1 -0
  363. package/dist/navigation/listingLinkBundle.d.ts +22 -0
  364. package/dist/navigation/listingLinkBundle.d.ts.map +1 -0
  365. package/dist/navigation/listingLinkBundle.js +88 -0
  366. package/dist/navigation/listingLinkBundle.js.map +1 -0
  367. package/dist/navigation/registry.d.ts +15 -0
  368. package/dist/navigation/registry.d.ts.map +1 -0
  369. package/dist/navigation/registry.js +130 -0
  370. package/dist/navigation/registry.js.map +1 -0
  371. package/dist/navigation/requestCache.d.ts +18 -0
  372. package/dist/navigation/requestCache.d.ts.map +1 -0
  373. package/dist/navigation/requestCache.js +66 -0
  374. package/dist/navigation/requestCache.js.map +1 -0
  375. package/dist/navigation/types.d.ts +45 -0
  376. package/dist/navigation/types.d.ts.map +1 -0
  377. package/dist/navigation/types.js +2 -0
  378. package/dist/navigation/types.js.map +1 -0
  379. package/dist/revalidation/entry-handlers.d.ts +40 -0
  380. package/dist/revalidation/entry-handlers.d.ts.map +1 -0
  381. package/dist/revalidation/entry-handlers.js +144 -0
  382. package/dist/revalidation/entry-handlers.js.map +1 -0
  383. package/dist/revalidation/handlers.d.ts +19 -0
  384. package/dist/revalidation/handlers.d.ts.map +1 -0
  385. package/dist/revalidation/handlers.js +50 -0
  386. package/dist/revalidation/handlers.js.map +1 -0
  387. package/dist/revalidation/index.d.ts +4 -0
  388. package/dist/revalidation/index.d.ts.map +1 -0
  389. package/dist/revalidation/index.js +5 -0
  390. package/dist/revalidation/index.js.map +1 -0
  391. package/dist/revalidation/nextjs-route.d.ts +38 -0
  392. package/dist/revalidation/nextjs-route.d.ts.map +1 -0
  393. package/dist/revalidation/nextjs-route.js +36 -0
  394. package/dist/revalidation/nextjs-route.js.map +1 -0
  395. package/dist/revalidation/route.d.ts +3 -0
  396. package/dist/revalidation/route.d.ts.map +1 -0
  397. package/dist/revalidation/route.js +99 -0
  398. package/dist/revalidation/route.js.map +1 -0
  399. package/dist/revalidation/server-utils.d.ts +31 -0
  400. package/dist/revalidation/server-utils.d.ts.map +1 -0
  401. package/dist/revalidation/server-utils.js +54 -0
  402. package/dist/revalidation/server-utils.js.map +1 -0
  403. package/dist/revalidation/tags.d.ts +110 -0
  404. package/dist/revalidation/tags.d.ts.map +1 -0
  405. package/dist/revalidation/tags.js +160 -0
  406. package/dist/revalidation/tags.js.map +1 -0
  407. package/dist/revalidation/utils.d.ts +21 -0
  408. package/dist/revalidation/utils.d.ts.map +1 -0
  409. package/dist/revalidation/utils.js +61 -0
  410. package/dist/revalidation/utils.js.map +1 -0
  411. package/dist/revalidation/webhook-content-types.d.ts +12 -0
  412. package/dist/revalidation/webhook-content-types.d.ts.map +1 -0
  413. package/dist/revalidation/webhook-content-types.js +28 -0
  414. package/dist/revalidation/webhook-content-types.js.map +1 -0
  415. package/dist/routing/index.d.ts +2 -0
  416. package/dist/routing/index.d.ts.map +1 -0
  417. package/dist/routing/index.js +2 -0
  418. package/dist/routing/index.js.map +1 -0
  419. package/dist/routing/marketing-site-url-calculators.d.ts +21 -0
  420. package/dist/routing/marketing-site-url-calculators.d.ts.map +1 -0
  421. package/dist/routing/marketing-site-url-calculators.js +43 -0
  422. package/dist/routing/marketing-site-url-calculators.js.map +1 -0
  423. package/dist/server.d.ts +7 -0
  424. package/dist/server.d.ts.map +1 -0
  425. package/dist/server.js +10 -0
  426. package/dist/server.js.map +1 -0
  427. package/dist/telemetry/deriveOperation.d.ts +8 -0
  428. package/dist/telemetry/deriveOperation.d.ts.map +1 -0
  429. package/dist/telemetry/deriveOperation.js +59 -0
  430. package/dist/telemetry/deriveOperation.js.map +1 -0
  431. package/dist/telemetry/queryContext.d.ts +7 -0
  432. package/dist/telemetry/queryContext.d.ts.map +1 -0
  433. package/dist/telemetry/queryContext.js +9 -0
  434. package/dist/telemetry/queryContext.js.map +1 -0
  435. package/dist/telemetry/queryLog.d.ts +17 -0
  436. package/dist/telemetry/queryLog.d.ts.map +1 -0
  437. package/dist/telemetry/queryLog.js +54 -0
  438. package/dist/telemetry/queryLog.js.map +1 -0
  439. package/dist/types.d.ts +93 -0
  440. package/dist/types.d.ts.map +1 -0
  441. package/dist/types.js +2 -0
  442. package/dist/types.js.map +1 -0
  443. package/dist/utils/arrayUtils.d.ts +3 -0
  444. package/dist/utils/arrayUtils.d.ts.map +1 -0
  445. package/dist/utils/arrayUtils.js +12 -0
  446. package/dist/utils/arrayUtils.js.map +1 -0
  447. package/dist/utils/dateUtils.d.ts +9 -0
  448. package/dist/utils/dateUtils.d.ts.map +1 -0
  449. package/dist/utils/dateUtils.js +26 -0
  450. package/dist/utils/dateUtils.js.map +1 -0
  451. package/dist/utils/errors.d.ts +56 -0
  452. package/dist/utils/errors.d.ts.map +1 -0
  453. package/dist/utils/errors.js +100 -0
  454. package/dist/utils/errors.js.map +1 -0
  455. package/dist/utils/index.d.ts +9 -0
  456. package/dist/utils/index.d.ts.map +1 -0
  457. package/dist/utils/index.js +9 -0
  458. package/dist/utils/index.js.map +1 -0
  459. package/dist/utils/redirectMap.d.ts +40 -0
  460. package/dist/utils/redirectMap.d.ts.map +1 -0
  461. package/dist/utils/redirectMap.js +129 -0
  462. package/dist/utils/redirectMap.js.map +1 -0
  463. package/dist/utils/retry.d.ts +103 -0
  464. package/dist/utils/retry.d.ts.map +1 -0
  465. package/dist/utils/retry.js +248 -0
  466. package/dist/utils/retry.js.map +1 -0
  467. package/dist/utils/tags.d.ts +35 -0
  468. package/dist/utils/tags.d.ts.map +1 -0
  469. package/dist/utils/tags.js +37 -0
  470. package/dist/utils/tags.js.map +1 -0
  471. package/docs/llms.md +430 -0
  472. package/package.json +86 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redirectMap.js","sourceRoot":"","sources":["../../src/utils/redirectMap.ts"],"names":[],"mappings":"AAaA,SAAS,qBAAqB,CAAC,CAAS;IACtC,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAClB,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACjB,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IACnD,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;IACjD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAyC;IACxE,MAAM,GAAG,GAAgB,EAAE,CAAC;IAE5B,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzC,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK;YAAE,SAAS;QAEjC,MAAM,IAAI,GAAG,qBAAqB,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,IAAI;YAAE,SAAS;QAEpB,MAAM,EAAE,GAAG,qBAAqB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,EAAE;YAAE,SAAS;QAElB,wCAAwC;QACxC,IAAI,IAAI,KAAK,EAAE;YAAE,SAAS;QAE1B,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,UAAU,IAAI,GAAG,CAA+B,CAAC;QAEnE,uEAAuE;QACvE,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;IAC7B,CAAC;IAED,iFAAiF;IACjF,+EAA+E;IAC/E,yCAAyC;IACzC,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACzC,uEAAuE;QACvE,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACd,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAED,SAAS,SAAS,CAAC,KAAa;QAC9B,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,IAAI,GAAG,GAAuB,KAAK,CAAC;QACpC,OAAO,GAAG,EAAE,CAAC;YACX,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClB,2CAA2C;gBAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC9B,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACnE,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACf,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,KAAK,EAAE,CAAC;gBACV,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS;wBAAE,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACzB,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACnD,OAAO,CAAC,IAAI,CACV,wBAAwB,WAAW,CAAC,IAAI,iDAAiD,EACzF,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CACxB,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,sCAAsC,CACpD,OAAY,EACZ,WAAwB;IAExB,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAEhD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAC9B,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACpB,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QAE/B,oGAAoG;QACpG,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAC;QACvC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,103 @@
1
+ import type { RetryConfig } from '../types';
2
+ /**
3
+ * Calculates the delay for the next retry attempt using exponential backoff
4
+ *
5
+ * @param attempt - Current retry attempt (0-based)
6
+ * @param config - Retry configuration
7
+ * @param retryAfter - Optional retry-after value from rate limit response
8
+ * @returns Delay in milliseconds
9
+ */
10
+ export declare function calculateBackoffDelay(attempt: number, config: Required<RetryConfig>, retryAfter?: number): number;
11
+ /**
12
+ * Executes a function with retry logic
13
+ *
14
+ * @param fn - Async function to execute
15
+ * @param config - Retry configuration
16
+ * @returns Promise resolving to the function result
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * const result = await withRetry(
21
+ * async () => await client.getEntry('id'),
22
+ * { maxRetries: 3, initialDelay: 1000 }
23
+ * );
24
+ * ```
25
+ */
26
+ export declare function withRetry<T>(fn: () => Promise<T>, config?: RetryConfig): Promise<T>;
27
+ /**
28
+ * Interval-based rate limiter that enforces minimum time between requests.
29
+ * Unlike token bucket, this prevents bursts entirely by spacing requests evenly.
30
+ * Requests are processed in FIFO order with guaranteed minimum intervals.
31
+ *
32
+ * @example
33
+ * ```ts
34
+ * const limiter = new RateLimiter(14); // 14 req/s = ~71ms between requests
35
+ * await limiter.acquire(); // Wait for permission to make request
36
+ * await fetch(...);
37
+ * ```
38
+ */
39
+ export declare class RateLimiter {
40
+ /** Minimum interval between requests in milliseconds */
41
+ private readonly intervalMs;
42
+ /** Timestamp when the next request can be made */
43
+ private nextAvailableTime;
44
+ /** Queue of pending requests */
45
+ private readonly queue;
46
+ /** Whether the queue processor is running */
47
+ private processing;
48
+ /** Additional pause time from 429 responses (ms) */
49
+ private pauseUntil;
50
+ constructor(requestsPerSecond: number,
51
+ /** @deprecated Use single parameter - kept for backward compatibility */
52
+ _refillRate?: number);
53
+ /**
54
+ * Calculates how long to wait before the next request can be made
55
+ */
56
+ private getWaitTime;
57
+ /**
58
+ * Processes the queue, releasing requests one at a time with proper spacing
59
+ */
60
+ private processQueue;
61
+ /**
62
+ * Acquires permission to make a request.
63
+ * Returns a promise that resolves when the request can proceed.
64
+ * Requests are processed in FIFO order with minimum interval spacing.
65
+ *
66
+ * @returns Promise that resolves when rate limit allows the request
67
+ */
68
+ acquire(): Promise<void>;
69
+ /**
70
+ * Gets the number of requests currently waiting in the queue
71
+ */
72
+ getQueueLength(): number;
73
+ /**
74
+ * Pauses the rate limiter for a specified duration.
75
+ * All requests (current and queued) will wait until pause expires.
76
+ * Does NOT block - just sets the pause time and returns.
77
+ *
78
+ * @param seconds - Duration to pause in seconds
79
+ */
80
+ pause(seconds: number): void;
81
+ /**
82
+ * Gets the current interval between requests in milliseconds
83
+ */
84
+ getIntervalMs(): number;
85
+ }
86
+ /**
87
+ * Retry configuration for Contentful 429 handling.
88
+ * Preview/draft uses longer backoff than published delivery.
89
+ */
90
+ export declare function getRetryConfig(preview: boolean): Required<RetryConfig>;
91
+ /**
92
+ * Minimum pause applied to the shared rate limiter after a 429.
93
+ * Preview uses a longer floor so short retryAfter values do not re-burst.
94
+ */
95
+ export declare function getRateLimitPauseSeconds(retryAfter: number | undefined, preview: boolean): number;
96
+ /**
97
+ * Gets the appropriate rate limiter based on preview mode
98
+ *
99
+ * @param preview - Whether using preview API
100
+ * @returns The appropriate rate limiter instance
101
+ */
102
+ export declare function getRateLimiter(preview: boolean): RateLimiter;
103
+ //# sourceMappingURL=retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAoB5C;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,EAC7B,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAaR;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAyCzF;AASD;;;;;;;;;;;GAWG;AACH,qBAAa,WAAW;IACtB,wDAAwD;IACxD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,kDAAkD;IAClD,OAAO,CAAC,iBAAiB,CAAa;IACtC,gCAAgC;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAC1C,6CAA6C;IAC7C,OAAO,CAAC,UAAU,CAAS;IAC3B,oDAAoD;IACpD,OAAO,CAAC,UAAU,CAAa;gBAG7B,iBAAiB,EAAE,MAAM;IACzB,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM;IAOtB;;OAEG;IACH,OAAO,CAAC,WAAW;IAOnB;;OAEG;YACW,YAAY;IAyB1B;;;;;;OAMG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB9B;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;;;;;OAMG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQ5B;;OAEG;IACH,aAAa,IAAI,MAAM;CAGxB;AA8BD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,CAEtE;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAGjG;AAcD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW,CAE5D"}
@@ -0,0 +1,248 @@
1
+ import { getRetryAfter, isRetryableError } from './errors.js';
2
+ /**
3
+ * Default retry configuration
4
+ */
5
+ const DEFAULT_RETRY_CONFIG = {
6
+ maxRetries: 3,
7
+ initialDelay: 1000, // 1 second
8
+ maxDelay: 30000, // 30 seconds
9
+ backoffMultiplier: 2,
10
+ };
11
+ /**
12
+ * Sleep utility for async delays
13
+ */
14
+ function sleep(ms) {
15
+ return new Promise((resolve) => setTimeout(resolve, ms));
16
+ }
17
+ /**
18
+ * Calculates the delay for the next retry attempt using exponential backoff
19
+ *
20
+ * @param attempt - Current retry attempt (0-based)
21
+ * @param config - Retry configuration
22
+ * @param retryAfter - Optional retry-after value from rate limit response
23
+ * @returns Delay in milliseconds
24
+ */
25
+ export function calculateBackoffDelay(attempt, config, retryAfter) {
26
+ // If server specified retry-after, use that
27
+ if (retryAfter !== undefined) {
28
+ return Math.min(retryAfter * 1000, config.maxDelay);
29
+ }
30
+ // Calculate exponential backoff
31
+ const exponentialDelay = config.initialDelay * config.backoffMultiplier ** attempt;
32
+ // Add jitter (random value between 0 and delay) to prevent thundering herd
33
+ const jitter = Math.random() * exponentialDelay;
34
+ return Math.min(exponentialDelay + jitter, config.maxDelay);
35
+ }
36
+ /**
37
+ * Executes a function with retry logic
38
+ *
39
+ * @param fn - Async function to execute
40
+ * @param config - Retry configuration
41
+ * @returns Promise resolving to the function result
42
+ *
43
+ * @example
44
+ * ```ts
45
+ * const result = await withRetry(
46
+ * async () => await client.getEntry('id'),
47
+ * { maxRetries: 3, initialDelay: 1000 }
48
+ * );
49
+ * ```
50
+ */
51
+ export async function withRetry(fn, config) {
52
+ const retryConfig = {
53
+ ...DEFAULT_RETRY_CONFIG,
54
+ ...config,
55
+ };
56
+ let lastError;
57
+ for (let attempt = 0; attempt <= retryConfig.maxRetries; attempt++) {
58
+ try {
59
+ return await fn();
60
+ }
61
+ catch (error) {
62
+ lastError = error;
63
+ // Don't retry if it's the last attempt
64
+ if (attempt === retryConfig.maxRetries) {
65
+ break;
66
+ }
67
+ // Only retry if the error is retryable
68
+ if (!isRetryableError(error)) {
69
+ throw error;
70
+ }
71
+ const retryAfter = getRetryAfter(error);
72
+ const delay = calculateBackoffDelay(attempt, retryConfig, retryAfter);
73
+ // Only log in development mode
74
+ if (typeof process !== 'undefined' && process.env?.NODE_ENV !== 'production') {
75
+ console.warn(`Retry attempt ${attempt + 1}/${retryConfig.maxRetries} after ${delay}ms`, error);
76
+ }
77
+ await sleep(delay);
78
+ }
79
+ }
80
+ // If we get here, all retries failed
81
+ throw lastError;
82
+ }
83
+ /**
84
+ * Interval-based rate limiter that enforces minimum time between requests.
85
+ * Unlike token bucket, this prevents bursts entirely by spacing requests evenly.
86
+ * Requests are processed in FIFO order with guaranteed minimum intervals.
87
+ *
88
+ * @example
89
+ * ```ts
90
+ * const limiter = new RateLimiter(14); // 14 req/s = ~71ms between requests
91
+ * await limiter.acquire(); // Wait for permission to make request
92
+ * await fetch(...);
93
+ * ```
94
+ */
95
+ export class RateLimiter {
96
+ /** Minimum interval between requests in milliseconds */
97
+ intervalMs;
98
+ /** Timestamp when the next request can be made */
99
+ nextAvailableTime = 0;
100
+ /** Queue of pending requests */
101
+ queue = [];
102
+ /** Whether the queue processor is running */
103
+ processing = false;
104
+ /** Additional pause time from 429 responses (ms) */
105
+ pauseUntil = 0;
106
+ constructor(requestsPerSecond,
107
+ /** @deprecated Use single parameter - kept for backward compatibility */
108
+ _refillRate) {
109
+ // Calculate minimum interval between requests
110
+ // Use 80% of theoretical max to leave headroom
111
+ this.intervalMs = Math.ceil(1000 / (requestsPerSecond * 0.8));
112
+ }
113
+ /**
114
+ * Calculates how long to wait before the next request can be made
115
+ */
116
+ getWaitTime() {
117
+ const now = Date.now();
118
+ const waitForInterval = Math.max(0, this.nextAvailableTime - now);
119
+ const waitForPause = Math.max(0, this.pauseUntil - now);
120
+ return Math.max(waitForInterval, waitForPause);
121
+ }
122
+ /**
123
+ * Processes the queue, releasing requests one at a time with proper spacing
124
+ */
125
+ async processQueue() {
126
+ if (this.processing) {
127
+ return;
128
+ }
129
+ this.processing = true;
130
+ while (this.queue.length > 0) {
131
+ const waitTime = this.getWaitTime();
132
+ if (waitTime > 0) {
133
+ await sleep(waitTime);
134
+ }
135
+ // Update next available time BEFORE releasing the request
136
+ this.nextAvailableTime = Date.now() + this.intervalMs;
137
+ // Release the next queued request
138
+ const entry = this.queue.shift();
139
+ entry?.resolve();
140
+ }
141
+ this.processing = false;
142
+ }
143
+ /**
144
+ * Acquires permission to make a request.
145
+ * Returns a promise that resolves when the request can proceed.
146
+ * Requests are processed in FIFO order with minimum interval spacing.
147
+ *
148
+ * @returns Promise that resolves when rate limit allows the request
149
+ */
150
+ async acquire() {
151
+ const waitTime = this.getWaitTime();
152
+ // If no wait needed and no queue, proceed immediately
153
+ if (waitTime === 0 && this.queue.length === 0) {
154
+ this.nextAvailableTime = Date.now() + this.intervalMs;
155
+ return;
156
+ }
157
+ // Otherwise, queue the request
158
+ return new Promise((resolve) => {
159
+ this.queue.push({ resolve });
160
+ this.processQueue();
161
+ });
162
+ }
163
+ /**
164
+ * Gets the number of requests currently waiting in the queue
165
+ */
166
+ getQueueLength() {
167
+ return this.queue.length;
168
+ }
169
+ /**
170
+ * Pauses the rate limiter for a specified duration.
171
+ * All requests (current and queued) will wait until pause expires.
172
+ * Does NOT block - just sets the pause time and returns.
173
+ *
174
+ * @param seconds - Duration to pause in seconds
175
+ */
176
+ pause(seconds) {
177
+ const pauseUntil = Date.now() + seconds * 1000;
178
+ // Only extend pause, never shorten it
179
+ if (pauseUntil > this.pauseUntil) {
180
+ this.pauseUntil = pauseUntil;
181
+ }
182
+ }
183
+ /**
184
+ * Gets the current interval between requests in milliseconds
185
+ */
186
+ getIntervalMs() {
187
+ return this.intervalMs;
188
+ }
189
+ }
190
+ // ============================================================================
191
+ // Shared Rate Limiter Instances
192
+ // ============================================================================
193
+ /**
194
+ * Rate limits for Contentful APIs (requests per second)
195
+ */
196
+ const CONTENTFUL_RATE_LIMITS = {
197
+ /** Content Delivery API: 55 requests/second */
198
+ delivery: 55,
199
+ /** Content Preview API: 14 requests/second (use 10 for proactive headroom) */
200
+ preview: 10,
201
+ };
202
+ const DELIVERY_RETRY_CONFIG = {
203
+ maxRetries: 20,
204
+ initialDelay: 2000,
205
+ maxDelay: 30000,
206
+ backoffMultiplier: 2,
207
+ };
208
+ const PREVIEW_RETRY_CONFIG = {
209
+ maxRetries: 25,
210
+ initialDelay: 3000,
211
+ maxDelay: 60000,
212
+ backoffMultiplier: 2,
213
+ };
214
+ /**
215
+ * Retry configuration for Contentful 429 handling.
216
+ * Preview/draft uses longer backoff than published delivery.
217
+ */
218
+ export function getRetryConfig(preview) {
219
+ return preview ? PREVIEW_RETRY_CONFIG : DELIVERY_RETRY_CONFIG;
220
+ }
221
+ /**
222
+ * Minimum pause applied to the shared rate limiter after a 429.
223
+ * Preview uses a longer floor so short retryAfter values do not re-burst.
224
+ */
225
+ export function getRateLimitPauseSeconds(retryAfter, preview) {
226
+ const minPause = preview ? 4 : 2;
227
+ return Math.max(retryAfter ?? minPause, minPause);
228
+ }
229
+ /**
230
+ * Shared rate limiter for Contentful Delivery API (55 req/s)
231
+ * Module-level singleton shared across all client instances
232
+ */
233
+ const deliveryRateLimiter = new RateLimiter(CONTENTFUL_RATE_LIMITS.delivery);
234
+ /**
235
+ * Shared rate limiter for Contentful Preview API (14 req/s)
236
+ * Module-level singleton shared across all client instances
237
+ */
238
+ const previewRateLimiter = new RateLimiter(CONTENTFUL_RATE_LIMITS.preview);
239
+ /**
240
+ * Gets the appropriate rate limiter based on preview mode
241
+ *
242
+ * @param preview - Whether using preview API
243
+ * @returns The appropriate rate limiter instance
244
+ */
245
+ export function getRateLimiter(preview) {
246
+ return preview ? previewRateLimiter : deliveryRateLimiter;
247
+ }
248
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { IArticleTypeLink, ITagLink } from '@se-studio/core-data-types';
2
+ /** Treat undefined/null as visible; only explicit `false` hides from UI. */
3
+ export declare function isTagShowEnabled(show?: boolean | null): boolean;
4
+ export type TagVisibilityFields = Pick<ITagLink, 'show' | 'tagType'>;
5
+ /** Whether a tag should render visually (card/detail). Does not affect search. */
6
+ export declare function isTagVisible(tag: TagVisibilityFields): boolean;
7
+ /**
8
+ * Tags to display on cards/detail pages.
9
+ * Related-articles ambient fallback (article.tags on detail pages) also uses {@link isTagVisible};
10
+ * explicit CMS tag filters and search may still include non-visible tags.
11
+ */
12
+ export declare function filterVisibleTags<T extends TagVisibilityFields>(tags: ReadonlyArray<T> | undefined): T[];
13
+ export type ArticleForTagSelection = {
14
+ slug: string;
15
+ tags: ReadonlyArray<ITagLink>;
16
+ articleType: IArticleTypeLink | undefined;
17
+ };
18
+ export type PrimaryTagSelector = (article: ArticleForTagSelection) => ITagLink | undefined;
19
+ type ArticleLike = {
20
+ slug?: string;
21
+ tags?: ReadonlyArray<ITagLink>;
22
+ articleType?: IArticleTypeLink | null;
23
+ };
24
+ /**
25
+ * Returns the primary tag for an article.
26
+ * Without a selector, returns tags[0] (default behaviour).
27
+ * With a selector, calls the selector with the full article context; falls back to tags[0] if it returns undefined.
28
+ *
29
+ * The returned value (if any) is passed as the 3rd arg to urlCalculators.article(...)
30
+ * by the article link converter. This is how projects with different article URL structures
31
+ * (see docs/routing.md) control whether/which tag appears in the path.
32
+ */
33
+ export declare function getPrimaryTag(article: ArticleLike | undefined, selector?: PrimaryTagSelector): ITagLink | undefined;
34
+ export {};
35
+ //# sourceMappingURL=tags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../src/utils/tags.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAE7E,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAE/D;AAED,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAErE,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAE9D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,mBAAmB,EAC7D,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS,GACjC,CAAC,EAAE,CAKL;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC9B,WAAW,EAAE,gBAAgB,GAAG,SAAS,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,sBAAsB,KAAK,QAAQ,GAAG,SAAS,CAAC;AAE3F,KAAK,WAAW,GAAG;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC/B,WAAW,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;CACvC,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,WAAW,GAAG,SAAS,EAChC,QAAQ,CAAC,EAAE,kBAAkB,GAC5B,QAAQ,GAAG,SAAS,CAKtB"}
@@ -0,0 +1,37 @@
1
+ /** Treat undefined/null as visible; only explicit `false` hides from UI. */
2
+ export function isTagShowEnabled(show) {
3
+ return show !== false;
4
+ }
5
+ /** Whether a tag should render visually (card/detail). Does not affect search. */
6
+ export function isTagVisible(tag) {
7
+ return isTagShowEnabled(tag.show) && isTagShowEnabled(tag.tagType?.show);
8
+ }
9
+ /**
10
+ * Tags to display on cards/detail pages.
11
+ * Related-articles ambient fallback (article.tags on detail pages) also uses {@link isTagVisible};
12
+ * explicit CMS tag filters and search may still include non-visible tags.
13
+ */
14
+ export function filterVisibleTags(tags) {
15
+ if (!tags?.length) {
16
+ return [];
17
+ }
18
+ return tags.filter(isTagVisible);
19
+ }
20
+ /**
21
+ * Returns the primary tag for an article.
22
+ * Without a selector, returns tags[0] (default behaviour).
23
+ * With a selector, calls the selector with the full article context; falls back to tags[0] if it returns undefined.
24
+ *
25
+ * The returned value (if any) is passed as the 3rd arg to urlCalculators.article(...)
26
+ * by the article link converter. This is how projects with different article URL structures
27
+ * (see docs/routing.md) control whether/which tag appears in the path.
28
+ */
29
+ export function getPrimaryTag(article, selector) {
30
+ const { tags, articleType, slug } = article ?? {};
31
+ if (!tags?.length)
32
+ return undefined;
33
+ if (!selector)
34
+ return tags[0];
35
+ return selector({ slug: slug ?? '', tags, articleType: articleType ?? undefined }) ?? tags[0];
36
+ }
37
+ //# sourceMappingURL=tags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/utils/tags.ts"],"names":[],"mappings":"AAEA,4EAA4E;AAC5E,MAAM,UAAU,gBAAgB,CAAC,IAAqB;IACpD,OAAO,IAAI,KAAK,KAAK,CAAC;AACxB,CAAC;AAID,kFAAkF;AAClF,MAAM,UAAU,YAAY,CAAC,GAAwB;IACnD,OAAO,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC3E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAkC;IAElC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AACnC,CAAC;AAgBD;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAC3B,OAAgC,EAChC,QAA6B;IAE7B,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;IAClD,IAAI,CAAC,IAAI,EAAE,MAAM;QAAE,OAAO,SAAS,CAAC;IACpC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,OAAO,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,IAAI,SAAS,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;AAChG,CAAC"}