@newskit-render/core 0.0.0-d55b7d88

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 (456) hide show
  1. package/.ci/trigger-circleci-workflow.sh +37 -0
  2. package/.eslintignore +23 -0
  3. package/.eslintrc +74 -0
  4. package/.prettierignore +19 -0
  5. package/.prettierrc +7 -0
  6. package/CHANGELOG.md +7638 -0
  7. package/Dockerfile +14 -0
  8. package/Dockerfile.withNewRelic +15 -0
  9. package/README.md +274 -0
  10. package/__tests__/pages/__snapshots__/brightcove.test.tsx.snap +20 -0
  11. package/__tests__/pages/__snapshots__/home.test.tsx.snap +1195 -0
  12. package/__tests__/pages/brightcove.test.tsx +34 -0
  13. package/__tests__/pages/empty.test.tsx +10 -0
  14. package/__tests__/pages/home.test.tsx +16 -0
  15. package/app-context/InstrumentationContextProvider.tsx +36 -0
  16. package/assets/fontFamily.ts +416 -0
  17. package/assets/fonts/Graphik-Black-App.ttf +0 -0
  18. package/assets/fonts/Graphik-BlackItalic-App.ttf +0 -0
  19. package/assets/fonts/Graphik-Bold-App.ttf +0 -0
  20. package/assets/fonts/Graphik-BoldItalic-App.ttf +0 -0
  21. package/assets/fonts/Graphik-Extralight-App.ttf +0 -0
  22. package/assets/fonts/Graphik-ExtralightItalic-App.ttf +0 -0
  23. package/assets/fonts/Graphik-Light-App.ttf +0 -0
  24. package/assets/fonts/Graphik-LightItalic-App.ttf +0 -0
  25. package/assets/fonts/Graphik-Medium-App.ttf +0 -0
  26. package/assets/fonts/Graphik-Medium-Web.woff2 +0 -0
  27. package/assets/fonts/Graphik-MediumItalic-App.ttf +0 -0
  28. package/assets/fonts/Graphik-Regular-App.ttf +0 -0
  29. package/assets/fonts/Graphik-Regular-Web.woff2 +0 -0
  30. package/assets/fonts/Graphik-RegularItalic-App.ttf +0 -0
  31. package/assets/fonts/Graphik-Semibold-App.ttf +0 -0
  32. package/assets/fonts/Graphik-Semibold-Web.woff2 +0 -0
  33. package/assets/fonts/Graphik-SemiboldItalic-App.ttf +0 -0
  34. package/assets/fonts/Graphik-Super-App.ttf +0 -0
  35. package/assets/fonts/Graphik-SuperItalic-App.ttf +0 -0
  36. package/assets/fonts/Graphik-Thin-App.ttf +0 -0
  37. package/assets/fonts/Graphik-ThinItalic-App.ttf +0 -0
  38. package/assets/fonts/Montserrat-Black.ttf +0 -0
  39. package/assets/fonts/Montserrat-BlackItalic.ttf +0 -0
  40. package/assets/fonts/Montserrat-Bold.ttf +0 -0
  41. package/assets/fonts/Montserrat-BoldItalic.ttf +0 -0
  42. package/assets/fonts/Montserrat-ExtraBold.ttf +0 -0
  43. package/assets/fonts/Montserrat-ExtraBoldItalic.ttf +0 -0
  44. package/assets/fonts/Montserrat-ExtraLight.ttf +0 -0
  45. package/assets/fonts/Montserrat-ExtraLightItalic.ttf +0 -0
  46. package/assets/fonts/Montserrat-Italic.ttf +0 -0
  47. package/assets/fonts/Montserrat-Light.ttf +0 -0
  48. package/assets/fonts/Montserrat-LightItalic.ttf +0 -0
  49. package/assets/fonts/Montserrat-Medium.ttf +0 -0
  50. package/assets/fonts/Montserrat-MediumItalic.ttf +0 -0
  51. package/assets/fonts/Montserrat-Regular.ttf +0 -0
  52. package/assets/fonts/Montserrat-SemiBold.ttf +0 -0
  53. package/assets/fonts/Montserrat-SemiBoldItalic.ttf +0 -0
  54. package/assets/fonts/Montserrat-Thin.ttf +0 -0
  55. package/assets/fonts/Montserrat-ThinItalic.ttf +0 -0
  56. package/assets/fonts/PublicoHeadline-Black-App.ttf +0 -0
  57. package/assets/fonts/PublicoHeadline-BlackItalic-App.ttf +0 -0
  58. package/assets/fonts/PublicoHeadline-Bold-App.ttf +0 -0
  59. package/assets/fonts/PublicoHeadline-Bold-Web.woff2 +0 -0
  60. package/assets/fonts/PublicoHeadline-BoldItalic-App.ttf +0 -0
  61. package/assets/fonts/PublicoHeadline-Extrabold-App.ttf +0 -0
  62. package/assets/fonts/PublicoHeadline-ExtraboldItalic-App.ttf +0 -0
  63. package/assets/fonts/PublicoHeadline-Italic-App.ttf +0 -0
  64. package/assets/fonts/PublicoHeadline-Light-App.ttf +0 -0
  65. package/assets/fonts/PublicoHeadline-LightItalic-App.ttf +0 -0
  66. package/assets/fonts/PublicoHeadline-Medium-App.ttf +0 -0
  67. package/assets/fonts/PublicoHeadline-MediumItalic-App.ttf +0 -0
  68. package/assets/fonts/PublicoHeadline-Roman-App.ttf +0 -0
  69. package/assets/fonts/PublicoHeadline-Roman-Web.woff2 +0 -0
  70. package/assets/fonts/PublicoText-Bold-App.ttf +0 -0
  71. package/assets/fonts/PublicoText-BoldItalic-App.ttf +0 -0
  72. package/assets/fonts/PublicoText-Italic-App.ttf +0 -0
  73. package/assets/fonts/PublicoText-Italic-Web.woff2 +0 -0
  74. package/assets/fonts/PublicoText-Roman-App.ttf +0 -0
  75. package/assets/fonts/PublicoText-Roman-Web.woff2 +0 -0
  76. package/assets/fonts/PublicoText-Semibold-App.ttf +0 -0
  77. package/assets/fonts/PublicoText-SemiboldItalic-App.ttf +0 -0
  78. package/assets/fonts/Roboto-Bold.ttf +0 -0
  79. package/assets/fonts/Roboto-Light.ttf +0 -0
  80. package/assets/fonts/Roboto-Medium.ttf +0 -0
  81. package/assets/fonts/Roboto-Regular.ttf +0 -0
  82. package/assets/fonts/TheSun-Bold.ttf +0 -0
  83. package/assets/fonts/TheSun-BoldItalic.ttf +0 -0
  84. package/assets/fonts/TheSun-HeavyCondensed.ttf +0 -0
  85. package/assets/fonts/TheSun-HeavyNarrow.ttf +0 -0
  86. package/assets/fonts/TheSun-Italic.ttf +0 -0
  87. package/assets/fonts/TheSun-Medium.ttf +0 -0
  88. package/assets/fonts/TheSun-MediumItalic.ttf +0 -0
  89. package/assets/fonts/TheSun-Regular.ttf +0 -0
  90. package/assets/fonts/TimesDigital-Bold.ttf +0 -0
  91. package/assets/fonts/TimesDigital-BoldItalic.ttf +0 -0
  92. package/assets/fonts/TimesDigital-BoldSC.ttf +0 -0
  93. package/assets/fonts/TimesDigital-Italic.ttf +0 -0
  94. package/assets/fonts/TimesDigital-Regular.ttf +0 -0
  95. package/assets/fonts/TimesDigital-RegularSC.ttf +0 -0
  96. package/assets/fonts/TimesDigitalW04-Bold.ttf +0 -0
  97. package/assets/fonts/TimesDigitalW04-BoldItalic.ttf +0 -0
  98. package/assets/fonts/TimesDigitalW04-BoldSC.ttf +0 -0
  99. package/assets/fonts/TimesDigitalW04-Italic.ttf +0 -0
  100. package/assets/fonts/TimesDigitalW04-Regular.ttf +0 -0
  101. package/assets/fonts/TimesDigitalW04-RegularSC.ttf +0 -0
  102. package/assets/fonts/TimesModern-Regular.otf +0 -0
  103. package/assets/fonts/attribuitions.mdx +35 -0
  104. package/assets/fonts/bitter-medium.woff +0 -0
  105. package/assets/fonts/bitter-medium.woff2 +0 -0
  106. package/assets/fonts/bitter-mediumitalic.woff +0 -0
  107. package/assets/fonts/bitter-mediumitalic.woff2 +0 -0
  108. package/assets/fonts/bitter-regular.woff +0 -0
  109. package/assets/fonts/bitter-regular.woff2 +0 -0
  110. package/assets/fonts/bitter-semibold.woff +0 -0
  111. package/assets/fonts/bitter-semibold.woff2 +0 -0
  112. package/assets/fonts/dmmono-medium.woff +0 -0
  113. package/assets/fonts/dmmono-medium.woff2 +0 -0
  114. package/assets/fonts/dmsans-bold-webfont.woff +0 -0
  115. package/assets/fonts/dmsans-bold-webfont.woff2 +0 -0
  116. package/assets/fonts/dmsans-bolditalic-webfont.woff +0 -0
  117. package/assets/fonts/dmsans-bolditalic-webfont.woff2 +0 -0
  118. package/assets/fonts/dmsans-italic-webfont.woff +0 -0
  119. package/assets/fonts/dmsans-italic-webfont.woff2 +0 -0
  120. package/assets/fonts/dmsans-medium-webfont.woff +0 -0
  121. package/assets/fonts/dmsans-medium-webfont.woff2 +0 -0
  122. package/assets/fonts/dmsans-mediumitalic-webfont.woff +0 -0
  123. package/assets/fonts/dmsans-mediumitalic-webfont.woff2 +0 -0
  124. package/assets/fonts/dmsans-regular-webfont.woff +0 -0
  125. package/assets/fonts/dmsans-regular-webfont.woff2 +0 -0
  126. package/assets/fonts/notosans-bold-webfont.woff +0 -0
  127. package/assets/fonts/notosans-bold-webfont.woff2 +0 -0
  128. package/assets/fonts/notosans-italic-webfont.woff +0 -0
  129. package/assets/fonts/notosans-italic-webfont.woff2 +0 -0
  130. package/assets/fonts/notosans-medium-webfont.woff +0 -0
  131. package/assets/fonts/notosans-medium-webfont.woff2 +0 -0
  132. package/assets/fonts/notosans-regular-webfont.woff +0 -0
  133. package/assets/fonts/notosans-regular-webfont.woff2 +0 -0
  134. package/assets/fonts/poppins-bold-webfont.woff +0 -0
  135. package/assets/fonts/poppins-bold-webfont.woff2 +0 -0
  136. package/assets/fonts/poppins-bolditalic-webfont.woff +0 -0
  137. package/assets/fonts/poppins-bolditalic-webfont.woff2 +0 -0
  138. package/assets/fonts/poppins-extrabold-webfont.woff +0 -0
  139. package/assets/fonts/poppins-extrabold-webfont.woff2 +0 -0
  140. package/assets/fonts/poppins-extrabolditalic-webfont.woff +0 -0
  141. package/assets/fonts/poppins-extrabolditalic-webfont.woff2 +0 -0
  142. package/assets/fonts/poppins-italic-webfont.woff +0 -0
  143. package/assets/fonts/poppins-italic-webfont.woff2 +0 -0
  144. package/assets/fonts/poppins-light-webfont.woff +0 -0
  145. package/assets/fonts/poppins-light-webfont.woff2 +0 -0
  146. package/assets/fonts/poppins-lightitalic-webfont.woff +0 -0
  147. package/assets/fonts/poppins-lightitalic-webfont.woff2 +0 -0
  148. package/assets/fonts/poppins-medium-webfont.woff +0 -0
  149. package/assets/fonts/poppins-medium-webfont.woff2 +0 -0
  150. package/assets/fonts/poppins-mediumitalic-webfont.woff +0 -0
  151. package/assets/fonts/poppins-mediumitalic-webfont.woff2 +0 -0
  152. package/assets/fonts/poppins-regular-webfont.woff +0 -0
  153. package/assets/fonts/poppins-regular-webfont.woff2 +0 -0
  154. package/assets/fonts/poppins-semibold-webfont.woff +0 -0
  155. package/assets/fonts/poppins-semibold-webfont.woff2 +0 -0
  156. package/assets/fonts/poppins-semibolditalic-webfont.woff +0 -0
  157. package/assets/fonts/poppins-semibolditalic-webfont.woff2 +0 -0
  158. package/assets/fonts/source-serif-pro-600.woff +0 -0
  159. package/assets/fonts/source-serif-pro-600.woff2 +0 -0
  160. package/assets/fonts/source-serif-pro-600italic.woff +0 -0
  161. package/assets/fonts/source-serif-pro-600italic.woff2 +0 -0
  162. package/assets/fonts/source-serif-pro-700.woff +0 -0
  163. package/assets/fonts/source-serif-pro-700.woff2 +0 -0
  164. package/assets/fonts/source-serif-pro-700italic.woff +0 -0
  165. package/assets/fonts/source-serif-pro-700italic.woff2 +0 -0
  166. package/assets/fonts/source-serif-pro-italic.woff +0 -0
  167. package/assets/fonts/source-serif-pro-italic.woff2 +0 -0
  168. package/assets/fonts/source-serif-pro-regular.woff +0 -0
  169. package/assets/fonts/source-serif-pro-regular.woff2 +0 -0
  170. package/components/AccountDropdown/AccountDropdown.tsx +65 -0
  171. package/components/AccountDropdown/__tests__/AcountDropdown.test.tsx +83 -0
  172. package/components/AccountDropdown/accounts.ts +47 -0
  173. package/components/AccountDropdown/index.tsx +2 -0
  174. package/components/AccountDropdown/utils.ts +21 -0
  175. package/components/ErrorPage/ErrorPage.tsx +135 -0
  176. package/components/ad/index.tsx +35 -0
  177. package/components/article/Highlights.tsx +77 -0
  178. package/components/article/MetaBox.tsx +50 -0
  179. package/components/article/RelatedArticles.tsx +53 -0
  180. package/components/article/RelatedTopics.tsx +59 -0
  181. package/components/article/ShareBarComponent.tsx +53 -0
  182. package/components/article/__tests__/__snapshots__/index.test.tsx.snap +1568 -0
  183. package/components/article/__tests__/index.test.tsx +171 -0
  184. package/components/article/__tests__/mocks.ts +105 -0
  185. package/components/article/index.tsx +320 -0
  186. package/components/common/BackToHomepage.tsx +37 -0
  187. package/components/common/NavLink.tsx +26 -0
  188. package/components/common/NewskitLogo.tsx +52 -0
  189. package/components/common/NewskitLogoShort.tsx +48 -0
  190. package/components/common/SectionTitleBar.tsx +57 -0
  191. package/components/common/ShareButton.tsx +18 -0
  192. package/components/common/ViewMoreButton.tsx +20 -0
  193. package/components/common/iconNavLink/IconNavLink.tsx +70 -0
  194. package/components/common/iconNavLink/__tests__/IconNavLink.test.tsx +35 -0
  195. package/components/common/iconNavLink/index.ts +3 -0
  196. package/components/common/iconNavLink/types.ts +24 -0
  197. package/components/common/icons/IconAccount.tsx +13 -0
  198. package/components/common/icons/IconFilledTwitter.tsx +14 -0
  199. package/components/common/icons/StyledIconFilledChevronRight.tsx +12 -0
  200. package/components/footer/__snapshots__/index.test.tsx.snap +192 -0
  201. package/components/footer/index.test.tsx +13 -0
  202. package/components/footer/index.tsx +151 -0
  203. package/components/header/banner-messages.ts +39 -0
  204. package/components/header/index.tsx +52 -0
  205. package/components/header/navigation-links.ts +20 -0
  206. package/components/layout/Gutter.tsx +11 -0
  207. package/components/layout/LayoutTemplate.tsx +26 -0
  208. package/components/layout/MainGrid.tsx +66 -0
  209. package/components/layout/index.tsx +3 -0
  210. package/components/layout/layoutTypes.ts +13 -0
  211. package/components/section/ArticleSlice.tsx +35 -0
  212. package/components/section/CollectionBlock.tsx +54 -0
  213. package/components/section/SectionContext.tsx +9 -0
  214. package/components/section/__tests__/ArticleSlice.test.tsx +128 -0
  215. package/components/section/__tests__/CollectionBlock.test.tsx +83 -0
  216. package/components/section/__tests__/pageBlock.test.tsx +24 -0
  217. package/components/section/__tests__/sectionUtils.test.ts +94 -0
  218. package/components/section/index.tsx +39 -0
  219. package/components/section/layouts/Block.tsx +79 -0
  220. package/components/section/layouts/FallBack.tsx +24 -0
  221. package/components/section/layouts/Lead.tsx +43 -0
  222. package/components/section/layouts/Rows.tsx +82 -0
  223. package/components/section/layouts/SectionTitle.tsx +57 -0
  224. package/components/section/layouts/__tests__/Lead.test.tsx +37 -0
  225. package/components/section/layouts/__tests__/Rows.test.tsx +40 -0
  226. package/components/section/layouts/__tests__/SectionTitle.test.tsx +37 -0
  227. package/components/section/layouts/__tests__/__snapshots__/Lead.test.tsx.snap +180 -0
  228. package/components/section/layouts/__tests__/__snapshots__/SectionTitle.test.tsx.snap +354 -0
  229. package/components/section/layouts/gridUtils.ts +21 -0
  230. package/components/section/layouts/index.tsx +4 -0
  231. package/components/section/layouts/types.ts +13 -0
  232. package/components/section/pageBlock.tsx +23 -0
  233. package/components/section/sectionUtils.ts +61 -0
  234. package/components/teaser/index.test.tsx +50 -0
  235. package/components/teaser/index.tsx +64 -0
  236. package/components/teaser/teaserVariants.ts +33 -0
  237. package/components/teaser/variant-types.ts +49 -0
  238. package/components/teaser/variants/featureVariant.ts +42 -0
  239. package/components/teaser/variants/horizontal.ts +14 -0
  240. package/components/teaser/variants/titleTeaserVariant.ts +32 -0
  241. package/components/teaser/variants/titleVertical.ts +24 -0
  242. package/components/utils/index.test.ts +12 -0
  243. package/components/utils/index.ts +6 -0
  244. package/config/__tests__/index.test.ts +54 -0
  245. package/config/environment.ts +80 -0
  246. package/config/index.ts +2 -0
  247. package/config/multiTenancy.ts +11 -0
  248. package/constants/index.ts +2 -0
  249. package/context/app-context/AppContext.test.tsx +56 -0
  250. package/context/app-context/holidayStopListContextOverrides.ts +18 -0
  251. package/context/app-context/index.tsx +34 -0
  252. package/context/app-context/paymentMethodContext.tsx +70 -0
  253. package/context/index.tsx +2 -0
  254. package/context/multi-tenancy/MultiTenancy.test.tsx +48 -0
  255. package/context/multi-tenancy/index.tsx +32 -0
  256. package/css/index.ts +15 -0
  257. package/cypress/axe/terminal-log.js +19 -0
  258. package/cypress/config/visual.config.ts +11 -0
  259. package/cypress/config/visual.skip.config.ts +10 -0
  260. package/cypress/e2e/account/accessibility.cy.js +88 -0
  261. package/cypress/e2e/account/banners.cy.js +169 -0
  262. package/cypress/e2e/account/cancellation.cy.js +219 -0
  263. package/cypress/e2e/account/holiday-stops.cy.js +109 -0
  264. package/cypress/e2e/account/main-api.cy.js +102 -0
  265. package/cypress/e2e/account/newsletters-and-alerts.cy.js +149 -0
  266. package/cypress/e2e/account/newsletters-page.cy.js +69 -0
  267. package/cypress/e2e/account/payment-page.cy.js +98 -0
  268. package/cypress/e2e/account/personal-details.cy.js +1161 -0
  269. package/cypress/e2e/account/subscription-and-billing.cy.js +434 -0
  270. package/cypress/e2e/checkout/account-creation.cy.js +8 -0
  271. package/cypress/e2e/checkout/payment-details.cy.js +19 -0
  272. package/cypress/e2e/core/home-page.cy.js +6 -0
  273. package/cypress/e2e/help-hub/accessibility.cy.js +35 -0
  274. package/cypress/e2e/help-hub/article-page.cy.js +115 -0
  275. package/cypress/e2e/help-hub/landing-page.cy.js +94 -0
  276. package/cypress/e2e/help-hub/result-page.cy.js +117 -0
  277. package/cypress/fixtures/empty.html +10 -0
  278. package/cypress/fixtures/example.json +5 -0
  279. package/cypress/fixtures/holiday-stops.json +40 -0
  280. package/cypress/fixtures/paymentFailure.js +24 -0
  281. package/cypress/fixtures/testDates.js +26 -0
  282. package/cypress/support/commands.js +125 -0
  283. package/cypress/support/consentValues.js +5839 -0
  284. package/cypress/support/e2e.js +22 -0
  285. package/cypress/support/users.js +58 -0
  286. package/cypress/visual/account/print-visual-regression.cy.js +9 -0
  287. package/cypress/visual/account/visual-regression.cy.js +40 -0
  288. package/cypress/visual/empty/empty.cy.js +5 -0
  289. package/cypress.config.ts +38 -0
  290. package/helpers/__tests__/getUser.test.ts +45 -0
  291. package/helpers/__tests__/logger.test.ts +62 -0
  292. package/helpers/__tests__/useThemeDropdownObject.test.ts +49 -0
  293. package/helpers/a11y.ts +7 -0
  294. package/helpers/addCacheHeaders.ts +8 -0
  295. package/helpers/getUser.ts +37 -0
  296. package/helpers/getYear.ts +1 -0
  297. package/helpers/global-types.ts +186 -0
  298. package/helpers/logger/getWinstonLogger.ts +19 -0
  299. package/helpers/logger/index.ts +20 -0
  300. package/helpers/logger/replaceConsoleWithLogger.ts +14 -0
  301. package/helpers/mocks/articleMock.ts +50 -0
  302. package/helpers/mocks/getPageMock.ts +369 -0
  303. package/helpers/mocks/getRadioPostMock.ts +71 -0
  304. package/helpers/mocks/getRadioPostsMock.ts +26 -0
  305. package/helpers/mocks/getRecommendationsMock.ts +20 -0
  306. package/helpers/mocks/index.ts +7 -0
  307. package/helpers/multiTenancy.ts +19 -0
  308. package/helpers/setupTests.ts +5 -0
  309. package/helpers/test-utils.tsx +33 -0
  310. package/helpers/useThemeDropdownObject.tsx +73 -0
  311. package/infrastructure/.circleci/config.yml +1187 -0
  312. package/infrastructure/INFRASTRUCTURE.md +142 -0
  313. package/infrastructure/build_and_deploy.png +0 -0
  314. package/infrastructure/helm/Chart.yaml +21 -0
  315. package/infrastructure/helm/templates/_helpers.tpl +87 -0
  316. package/infrastructure/helm/templates/deployment.yaml +45 -0
  317. package/infrastructure/helm/templates/horizontalpodautoscaler.yaml +21 -0
  318. package/infrastructure/helm/templates/ingress.yaml +31 -0
  319. package/infrastructure/helm/templates/networkpolicy.yaml +26 -0
  320. package/infrastructure/helm/templates/secret.yaml +12 -0
  321. package/infrastructure/helm/templates/service.yaml +15 -0
  322. package/infrastructure/helm/values-dev.yaml +39 -0
  323. package/infrastructure/helm/values-local.yaml +30 -0
  324. package/infrastructure/helm/values-pr.yaml +40 -0
  325. package/infrastructure/helm/values-prod.yaml +39 -0
  326. package/infrastructure/helm/values-staging.yaml +39 -0
  327. package/infrastructure/helm/values.yaml +44 -0
  328. package/infrastructure/pull_request.png +0 -0
  329. package/infrastructure/release-documentation-cli.config.json +18 -0
  330. package/infrastructure/remove_pr.png +0 -0
  331. package/infrastructure/terraform-ecr/dev.tfvars +3 -0
  332. package/infrastructure/terraform-ecr/ecr.tf +69 -0
  333. package/infrastructure/terraform-ecr/main.tf +3 -0
  334. package/infrastructure/terraform-ecr/variables.tf +19 -0
  335. package/infrastructure/terraform-ecr/versions.tf +12 -0
  336. package/infrastructure/terraform-newrelic/alerts.tf +290 -0
  337. package/infrastructure/terraform-newrelic/dashboards.tf +347 -0
  338. package/infrastructure/terraform-newrelic/dev.tfvars +3 -0
  339. package/infrastructure/terraform-newrelic/lighthouse-script-dev.js +53 -0
  340. package/infrastructure/terraform-newrelic/lighthouse-script-prod.js +54 -0
  341. package/infrastructure/terraform-newrelic/lighthouse-script-stage.js +54 -0
  342. package/infrastructure/terraform-newrelic/main.tf +11 -0
  343. package/infrastructure/terraform-newrelic/monitors.tf +11 -0
  344. package/infrastructure/terraform-newrelic/prod.tfvars +3 -0
  345. package/infrastructure/terraform-newrelic/staging.tfvars +3 -0
  346. package/infrastructure/terraform-newrelic/variables.tf +33 -0
  347. package/infrastructure/terraform-newrelic/versions.tf +18 -0
  348. package/jest.config.js +40 -0
  349. package/jest.config.pact.js +18 -0
  350. package/newrelic.js +86 -0
  351. package/next-env.d.ts +5 -0
  352. package/next.config.js +95 -0
  353. package/package.json +127 -0
  354. package/pages/_app.tsx +117 -0
  355. package/pages/_document.tsx +112 -0
  356. package/pages/_error.tsx +68 -0
  357. package/pages/account/add/[field].tsx +34 -0
  358. package/pages/account/cancellation/index.tsx +22 -0
  359. package/pages/account/delete/confirm/index.tsx +16 -0
  360. package/pages/account/delete/error/index.tsx +16 -0
  361. package/pages/account/delete/index.tsx +16 -0
  362. package/pages/account/delete/success/index.tsx +16 -0
  363. package/pages/account/dream-team/index.tsx +19 -0
  364. package/pages/account/edit/[field].tsx +45 -0
  365. package/pages/account/family/index.tsx +19 -0
  366. package/pages/account/holiday-stop/index.tsx +19 -0
  367. package/pages/account/holiday-stop/previous-holiday-stops.tsx +19 -0
  368. package/pages/account/holiday-stop/upcoming-holiday-stops.tsx +19 -0
  369. package/pages/account/index.tsx +33 -0
  370. package/pages/account/newsletters/index.tsx +19 -0
  371. package/pages/account/newsletters-and-alerts/index.tsx +24 -0
  372. package/pages/account/payment/[paymentMethod].tsx +37 -0
  373. package/pages/account/payment/index.tsx +23 -0
  374. package/pages/account/payment-methods/index.tsx +21 -0
  375. package/pages/account/subscription-and-billing/index.tsx +29 -0
  376. package/pages/api/account/get-session/index.ts +33 -0
  377. package/pages/api/account/invoice/index.ts +35 -0
  378. package/pages/api/account/mutate/index.ts +8 -0
  379. package/pages/api/account/query/index.ts +7 -0
  380. package/pages/api/auth/[...nextauth].ts +11 -0
  381. package/pages/api/competitions-sitemap.ts +19 -0
  382. package/pages/api/feed.ts +23 -0
  383. package/pages/api/health-check.ts +7 -0
  384. package/pages/api/news-sitemap.ts +18 -0
  385. package/pages/api/pages-sitemap.ts +27 -0
  386. package/pages/api/robots.ts +19 -0
  387. package/pages/api/sitemap.ts +24 -0
  388. package/pages/checkout/account-creation/index.tsx +13 -0
  389. package/pages/checkout/payment-details/index.tsx +10 -0
  390. package/pages/empty.tsx +6 -0
  391. package/pages/help-hub/article/[title]/index.tsx +25 -0
  392. package/pages/help-hub/error.tsx +23 -0
  393. package/pages/help-hub/index.tsx +51 -0
  394. package/pages/help-hub/results.tsx +25 -0
  395. package/pages/index.tsx +19 -0
  396. package/pages/player/brightcove.tsx +19 -0
  397. package/pages/rss/create/index.tsx +18 -0
  398. package/pages/rss/feed/[feedId]/index.tsx +21 -0
  399. package/pages/rss/index.tsx +18 -0
  400. package/public/ads.min.js +8175 -0
  401. package/public/assets/display-base-header.svg +25 -0
  402. package/public/assets/display-personalDetails-header-sun.svg +55 -0
  403. package/public/assets/display-personalDetails-header-times.svg +90 -0
  404. package/public/assets/display-personalDetails-header-vr.svg +46 -0
  405. package/public/assets/dream-team.svg +10 -0
  406. package/public/assets/navigationPrimary-brandMark-sun.svg +9 -0
  407. package/public/assets/navigationPrimary-brandMark-times.svg +18 -0
  408. package/public/assets/navigationPrimary-brandMark-vr.svg +10 -0
  409. package/public/assets/newsletters/bestoftimes-101.png +0 -0
  410. package/public/assets/newsletters/books-115.png +0 -0
  411. package/public/assets/newsletters/environment-140.png +0 -0
  412. package/public/assets/newsletters/fashion-108.png +0 -0
  413. package/public/assets/newsletters/food-106.png +0 -0
  414. package/public/assets/newsletters/football-111.png +0 -0
  415. package/public/assets/newsletters/ireland-152.png +0 -0
  416. package/public/assets/newsletters/law-121.png +0 -0
  417. package/public/assets/newsletters/money-107.png +0 -0
  418. package/public/assets/newsletters/moneymentor-150.png +0 -0
  419. package/public/assets/newsletters/placeholder.png +0 -0
  420. package/public/assets/newsletters/politics-119.png +0 -0
  421. package/public/assets/newsletters/property-113.png +0 -0
  422. package/public/assets/newsletters/puzzles-125.png +0 -0
  423. package/public/assets/newsletters/scotland-134.png +0 -0
  424. package/public/assets/newsletters/theatre-127.png +0 -0
  425. package/public/assets/newsletters/travel-149.png +0 -0
  426. package/public/assets/newsletters/tv-133.png +0 -0
  427. package/public/assets/newsletters/us-153.png +0 -0
  428. package/public/assets/no-subscription.svg +15 -0
  429. package/public/assets/pending-activation.svg +16 -0
  430. package/public/assets/personal-details-header.svg +91 -0
  431. package/public/assets/plchldr150x100.png +0 -0
  432. package/public/assets/previous-subscription.svg +15 -0
  433. package/public/assets/primary-navigation-logo-white.svg +6 -0
  434. package/public/assets/primary-navigation-logo.svg +6 -0
  435. package/public/assets/tls-logo-white.svg +3 -0
  436. package/public/favicon.ico +0 -0
  437. package/public/icon.png +0 -0
  438. package/public/prebid.min.js +1 -0
  439. package/queries/getPage.ts +100 -0
  440. package/queries/getRadioPost.ts +61 -0
  441. package/queries/getRadioPosts.ts +16 -0
  442. package/queries/getUserSubscription.ts +9 -0
  443. package/queries/index.ts +3 -0
  444. package/scripts/k8s-local.sh +137 -0
  445. package/scripts/nr-exports.sh +7 -0
  446. package/temp/_app.tsx +15 -0
  447. package/temp/_document.tsx +61 -0
  448. package/temp/app-context-test.tsx +51 -0
  449. package/temp/app-context.tsx +25 -0
  450. package/temp/config-index.ts +1 -0
  451. package/temp/context-index.tsx +1 -0
  452. package/temp/header.tsx +45 -0
  453. package/temp/next.config.js +56 -0
  454. package/tsconfig.json +51 -0
  455. package/tsconfig.test.json +6 -0
  456. package/validation/index.tsx +24 -0
@@ -0,0 +1,16 @@
1
+ import React from 'react'
2
+ import {
3
+ AccountDeletionError,
4
+ getProviderProps,
5
+ } from '@newskit-render/my-account'
6
+ import { replaceConsoleAndSetTransactionName } from '../../../../helpers/logger'
7
+
8
+ const Error = (props) => <AccountDeletionError {...props} />
9
+
10
+ export default Error
11
+
12
+ export const getServerSideProps = async (context) => {
13
+ replaceConsoleAndSetTransactionName('Account: Deletion - Error')
14
+
15
+ return getProviderProps({ ...context })
16
+ }
@@ -0,0 +1,16 @@
1
+ import React from 'react'
2
+ import {
3
+ InitiateAccountDeletion,
4
+ getProviderProps,
5
+ } from '@newskit-render/my-account'
6
+ import { replaceConsoleAndSetTransactionName } from '../../../helpers/logger'
7
+
8
+ const AccountDeletion = (props) => <InitiateAccountDeletion {...props} />
9
+
10
+ export default AccountDeletion
11
+
12
+ export const getServerSideProps = async (context) => {
13
+ replaceConsoleAndSetTransactionName('Account: Deletion')
14
+
15
+ return getProviderProps({ ...context })
16
+ }
@@ -0,0 +1,16 @@
1
+ import React from 'react'
2
+ import {
3
+ AccountDeletionSuccess,
4
+ getProviderProps,
5
+ } from '@newskit-render/my-account'
6
+ import { replaceConsoleAndSetTransactionName } from '../../../../helpers/logger'
7
+
8
+ const Success = (props) => <AccountDeletionSuccess {...props} />
9
+
10
+ export default Success
11
+
12
+ export const getServerSideProps = async (context) => {
13
+ replaceConsoleAndSetTransactionName('Account: Deletion - Success')
14
+
15
+ return getProviderProps({ ...context })
16
+ }
@@ -0,0 +1,19 @@
1
+ import React from 'react'
2
+ import { DreamTeam, getProviderProps } from '@newskit-render/my-account'
3
+ import { replaceConsoleAndSetTransactionName } from '../../../helpers/logger'
4
+ import { getFlagsAll } from '@newskit-render/feature-flags' /* cra-effected */
5
+
6
+ const AccountNewslettersAndAlerts = (props) => <DreamTeam {...props} />
7
+
8
+ export default AccountNewslettersAndAlerts
9
+
10
+ export const getServerSideProps = async (context) => {
11
+ replaceConsoleAndSetTransactionName('Account: Dream Team')
12
+ /* start cra-effected */
13
+ const featureFlags = await getFlagsAll()
14
+ /* end cra-effected */
15
+ return getProviderProps(
16
+ { ...context, provider: 'DreamTeam' },
17
+ { featureFlags } /* cra-effected */
18
+ )
19
+ }
@@ -0,0 +1,45 @@
1
+ import React from 'react'
2
+ import { replaceConsoleAndSetTransactionName } from '../../../helpers/logger'
3
+ import {
4
+ EditField,
5
+ getProviderProps,
6
+ editComponentMap,
7
+ DynamicPage,
8
+ } from '@newskit-render/my-account'
9
+ import { getFlagsAll } from '@newskit-render/feature-flags' /* cra-effected */
10
+ import validation from '../../../validation'
11
+
12
+ const AccountEditField = (props) => (
13
+ <DynamicPage
14
+ objectMap={editComponentMap}
15
+ pageName={props.data.type}
16
+ Component={EditField}
17
+ componentProps={props}
18
+ validation={validation}
19
+ />
20
+ )
21
+
22
+ export default AccountEditField
23
+
24
+ export const getServerSideProps = async (context) => {
25
+ const {
26
+ params: { field },
27
+ } = context
28
+ const doesEditPageExist = Object.keys(editComponentMap).includes(field)
29
+
30
+ replaceConsoleAndSetTransactionName(`Account: edit ${field}`)
31
+
32
+ if (!doesEditPageExist) {
33
+ context.res.statusCode = 404
34
+ // Logging the error for being captured by New Relic
35
+ console.error(`An error ${context.res.statusCode} occurred on server`)
36
+ }
37
+ /* start cra-effected */
38
+ const featureFlags = await getFlagsAll()
39
+ /* end cra-effected */
40
+
41
+ return getProviderProps(
42
+ { ...context, provider: 'EditField' },
43
+ { featureFlags } /* cra-effected */
44
+ )
45
+ }
@@ -0,0 +1,19 @@
1
+ import React from 'react'
2
+ import { Family, getProviderProps } from '@newskit-render/my-account'
3
+ import { replaceConsoleAndSetTransactionName } from '../../../helpers/logger'
4
+ import { getFlagsAll } from '@newskit-render/feature-flags' /* cra-effected */
5
+
6
+ const AccountFamily = (props) => <Family {...props} />
7
+
8
+ export default AccountFamily
9
+
10
+ export const getServerSideProps = async (context) => {
11
+ replaceConsoleAndSetTransactionName('Account: Family')
12
+ /* start cra-effected */
13
+ const featureFlags = await getFlagsAll()
14
+ /* end cra-effected */
15
+ return getProviderProps(
16
+ { ...context, provider: 'GroupAccounts' },
17
+ { featureFlags } /* cra-effected */
18
+ )
19
+ }
@@ -0,0 +1,19 @@
1
+ import React from 'react'
2
+ import { getProviderProps, HolidayStop } from '@newskit-render/my-account'
3
+ import { replaceConsoleAndSetTransactionName } from '../../../helpers/logger'
4
+ import { getFlagsAll } from '@newskit-render/feature-flags' /* cra-effected */
5
+
6
+ const AccountHolidayStop = (props) => <HolidayStop {...props} />
7
+
8
+ export default AccountHolidayStop
9
+
10
+ export const getServerSideProps = async (context) => {
11
+ replaceConsoleAndSetTransactionName('Account: Book a Holiday Stop')
12
+ /* start cra-effected */
13
+ const featureFlags = await getFlagsAll()
14
+ /* end cra-effected */
15
+ return getProviderProps(
16
+ { ...context, provider: 'HolidayStop' },
17
+ { featureFlags } /* cra-effected */
18
+ )
19
+ }
@@ -0,0 +1,19 @@
1
+ import React from 'react'
2
+ import { getProviderProps, HolidayStopList } from '@newskit-render/my-account'
3
+ import { replaceConsoleAndSetTransactionName } from '../../../helpers/logger'
4
+ import { holidayStopListContextOverrides } from '../../../context/app-context/holidayStopListContextOverrides'
5
+
6
+ const AccountPreviousHolidayStops = (props) => (
7
+ <HolidayStopList
8
+ {...props}
9
+ holidayStopType="previous"
10
+ context={holidayStopListContextOverrides}
11
+ />
12
+ )
13
+
14
+ export default AccountPreviousHolidayStops
15
+
16
+ export const getServerSideProps = async (context) => {
17
+ replaceConsoleAndSetTransactionName('Account: Previous Holiday Stops')
18
+ return getProviderProps({ ...context, provider: 'HolidayStop' })
19
+ }
@@ -0,0 +1,19 @@
1
+ import React from 'react'
2
+ import { getProviderProps, HolidayStopList } from '@newskit-render/my-account'
3
+ import { replaceConsoleAndSetTransactionName } from '../../../helpers/logger'
4
+ import { holidayStopListContextOverrides } from '../../../context/app-context/holidayStopListContextOverrides'
5
+
6
+ const AccountUpcomingHolidayStops = (props) => (
7
+ <HolidayStopList
8
+ {...props}
9
+ holidayStopType="upcoming"
10
+ context={holidayStopListContextOverrides}
11
+ />
12
+ )
13
+
14
+ export default AccountUpcomingHolidayStops
15
+
16
+ export const getServerSideProps = async (context) => {
17
+ replaceConsoleAndSetTransactionName('Account: Upcoming Holiday Stops')
18
+ return getProviderProps({ ...context, provider: 'HolidayStop' })
19
+ }
@@ -0,0 +1,33 @@
1
+ import React from 'react'
2
+ import { PersonalDetails, getProviderProps } from '@newskit-render/my-account'
3
+ import { getFlagsAll } from '@newskit-render/feature-flags' /* cra-effected */
4
+ import { AccountDropdown } from '../../components/AccountDropdown' /* cra-disabled */
5
+ import { replaceConsoleAndSetTransactionName } from '../../helpers/logger'
6
+ import { closeFlagsInstance } from '@newskit-render/feature-flags'
7
+
8
+ const AccountPersonalDetails = (props) => {
9
+ return (
10
+ <>
11
+ {
12
+ /* start cra-disabled */
13
+ <AccountDropdown />
14
+ /* end cra-disabled */
15
+ }
16
+ <PersonalDetails {...props} />
17
+ </>
18
+ )
19
+ }
20
+
21
+ export default AccountPersonalDetails
22
+
23
+ export const getServerSideProps = async (context) => {
24
+ replaceConsoleAndSetTransactionName('Account: Personal details')
25
+
26
+ const featureFlags = await getFlagsAll()
27
+ await closeFlagsInstance()
28
+
29
+ return getProviderProps(
30
+ { ...context, provider: 'PersonalDetails' },
31
+ { featureFlags } /* cra-effected */
32
+ )
33
+ }
@@ -0,0 +1,19 @@
1
+ import React from 'react'
2
+ import { Newsletters, getProviderProps } from '@newskit-render/my-account'
3
+ import { replaceConsoleAndSetTransactionName } from '../../../helpers/logger'
4
+ import { getFlagsAll } from '@newskit-render/feature-flags' /* cra-effected */
5
+
6
+ const AccountNewsletters = (props) => <Newsletters {...props} />
7
+
8
+ export default AccountNewsletters
9
+
10
+ export const getServerSideProps = async (context) => {
11
+ replaceConsoleAndSetTransactionName('Account: Newsletters')
12
+ /* start cra-effected */
13
+ const featureFlags = await getFlagsAll()
14
+ /* end cra-effected */
15
+ return getProviderProps(
16
+ { ...context, provider: 'Newsletters' },
17
+ { featureFlags } /* cra-effected */
18
+ )
19
+ }
@@ -0,0 +1,24 @@
1
+ import React from 'react'
2
+ import {
3
+ NewslettersAndAlerts,
4
+ getProviderProps,
5
+ } from '@newskit-render/my-account'
6
+ import { replaceConsoleAndSetTransactionName } from '../../../helpers/logger'
7
+ import { getFlagsAll } from '@newskit-render/feature-flags' /* cra-effected */
8
+
9
+ const AccountNewslettersAndAlerts = (props) => (
10
+ <NewslettersAndAlerts {...props} />
11
+ )
12
+
13
+ export default AccountNewslettersAndAlerts
14
+
15
+ export const getServerSideProps = async (context) => {
16
+ replaceConsoleAndSetTransactionName('Account: Newsletters and Alerts')
17
+ /* start cra-effected */
18
+ const featureFlags = await getFlagsAll()
19
+ /* end cra-effected */
20
+ return getProviderProps(
21
+ { ...context, provider: 'NewslettersAndAlerts' },
22
+ { featureFlags } /* cra-effected */
23
+ )
24
+ }
@@ -0,0 +1,37 @@
1
+ import React from 'react'
2
+ import { replaceConsoleAndSetTransactionName } from '../../../helpers/logger'
3
+ import {
4
+ getProviderProps,
5
+ Payment,
6
+ paymentMethodsMap,
7
+ DynamicPage,
8
+ } from '@newskit-render/my-account'
9
+ import { getFlagsAll } from '@newskit-render/feature-flags' /* cra-effected */
10
+
11
+ const PaymentPage = (props) => {
12
+ return (
13
+ <DynamicPage
14
+ objectMap={paymentMethodsMap}
15
+ pageName={props.paymentType}
16
+ Component={Payment}
17
+ componentProps={props}
18
+ />
19
+ )
20
+ }
21
+
22
+ export default PaymentPage
23
+
24
+ export const getServerSideProps = async (context) => {
25
+ replaceConsoleAndSetTransactionName('Payment method')
26
+ /* start cra-effected */
27
+ const featureFlags = await getFlagsAll()
28
+ /* end cra-effected */
29
+
30
+ return getProviderProps(
31
+ {
32
+ ...context,
33
+ provider: 'Payment',
34
+ },
35
+ { featureFlags } /* cra-effected */
36
+ )
37
+ }
@@ -0,0 +1,23 @@
1
+ import React from 'react'
2
+ import { replaceConsoleAndSetTransactionName } from '../../../helpers/logger'
3
+ import { Payment, getProviderProps } from '@newskit-render/my-account'
4
+ import { getFlagsAll } from '@newskit-render/feature-flags' /* cra-effected */
5
+
6
+ const AccountPayment = (props) => <Payment {...props} />
7
+
8
+ export default AccountPayment
9
+
10
+ export const getServerSideProps = async (context) => {
11
+ replaceConsoleAndSetTransactionName('Edit Payment method')
12
+ /* start cra-effected */
13
+ const featureFlags = await getFlagsAll()
14
+ /* end cra-effected */
15
+
16
+ return getProviderProps(
17
+ {
18
+ ...context,
19
+ provider: 'Payment',
20
+ },
21
+ { featureFlags } /* cra-effected */
22
+ )
23
+ }
@@ -0,0 +1,21 @@
1
+ import React from 'react'
2
+ import { getProviderProps, PaymentMethods } from '@newskit-render/my-account'
3
+ import { getFlagsAll } from '@newskit-render/feature-flags' // create-render-app effected
4
+ import { paymentMethodContext } from '../../../context/app-context/paymentMethodContext'
5
+ import { replaceConsoleAndSetTransactionName } from '../../../helpers/logger'
6
+
7
+ const AccountPaymentMethods = (props) => (
8
+ <PaymentMethods {...props} context={paymentMethodContext} />
9
+ )
10
+
11
+ export default AccountPaymentMethods
12
+
13
+ export const getServerSideProps = async (context) => {
14
+ replaceConsoleAndSetTransactionName('Account: Payment Methods')
15
+ const featureFlags = await getFlagsAll()
16
+ // create-render-app effected
17
+ return getProviderProps(
18
+ { ...context, provider: 'PaymentMethods' },
19
+ { featureFlags } // create-render-app effected
20
+ )
21
+ }
@@ -0,0 +1,29 @@
1
+ import React from 'react'
2
+ import {
3
+ SubscriptionAndBilling,
4
+ getProviderProps,
5
+ } from '@newskit-render/my-account'
6
+ import { getFlagsAll } from '@newskit-render/feature-flags' /* cra-effected */
7
+ import { replaceConsoleAndSetTransactionName } from '../../../helpers/logger'
8
+
9
+ const AccountSubscriptionAndBilling = (props) => (
10
+ <SubscriptionAndBilling {...props} />
11
+ )
12
+
13
+ export default AccountSubscriptionAndBilling
14
+
15
+ export const getServerSideProps = async (context) => {
16
+ replaceConsoleAndSetTransactionName('Account: Subscription and Billing')
17
+ /* start cra-effected */
18
+ const featureFlags = await getFlagsAll()
19
+ /* end cra-effected */
20
+ const result = await getProviderProps(
21
+ {
22
+ ...context,
23
+ provider: 'SubscriptionAndBilling',
24
+ },
25
+ { featureFlags } /* cra-effected */
26
+ )
27
+
28
+ return result
29
+ }
@@ -0,0 +1,33 @@
1
+ import { fetchSessionCookie } from '@newskit-render/api'
2
+ import { safeJsonParse } from '@newskit-render/shared-components'
3
+ import { NextApiRequest, NextApiResponse } from 'next'
4
+ import { acsSessionUrlTimes, acsSessionUrlSun } from '../../../../config'
5
+ import { getAccounts } from '../../../../components/AccountDropdown'
6
+
7
+ const tenantMap = {
8
+ SUN: acsSessionUrlSun,
9
+ TIMES: acsSessionUrlTimes,
10
+ }
11
+
12
+ const handler = async (req: NextApiRequest, res: NextApiResponse) => {
13
+ if (process.env.TM_ACCOUNTS_PASSWORD && process.env.NGN_ACCOUNTS_PASSWORD) {
14
+ const options = getAccounts(
15
+ process.env.NGN_ACCOUNTS_PASSWORD,
16
+ process.env.TM_ACCOUNTS_PASSWORD
17
+ )
18
+ const { option } = safeJsonParse(req.body)
19
+ const { username, password, tenant } = options[option]
20
+
21
+ const tenantUrl = tenantMap[tenant]
22
+
23
+ const result = await fetchSessionCookie({
24
+ username,
25
+ password,
26
+ tenantUrl,
27
+ })
28
+ res.send(result)
29
+ } else {
30
+ res.end()
31
+ }
32
+ }
33
+ export default handler
@@ -0,0 +1,35 @@
1
+ import type { NextApiRequest, NextApiResponse } from 'next'
2
+ import { nodeEnviroment } from '../../../../config'
3
+
4
+ const buildUrl = (cpn: string, invoiceId: string, pdfId: string) => {
5
+ const envPrefix = nodeEnviroment === 'production' ? '' : 'staging-'
6
+ return `https://api.${envPrefix}news.co.uk/cps/api/billing/tenants/tnl/accounts/${cpn}/invoices/${invoiceId}/pdf/${pdfId}`
7
+ }
8
+
9
+ export const handler = async (req: NextApiRequest, res: NextApiResponse) => {
10
+ try {
11
+ const { cookie } = req.headers as { cookie: string }
12
+ const { cpn, invoiceId, pdfId } = req.body
13
+ const apiUrl = buildUrl(cpn, invoiceId, pdfId)
14
+
15
+ const pdfResponse = await fetch(apiUrl, {
16
+ method: 'GET',
17
+ headers: {
18
+ Cookie: cookie,
19
+ },
20
+ })
21
+ const pdfBuffer = await pdfResponse.arrayBuffer()
22
+
23
+ res.setHeader('Content-Type', pdfResponse.headers.get('content-type'))
24
+ res.setHeader(
25
+ 'Content-Disposition',
26
+ pdfResponse.headers.get('content-disposition')
27
+ )
28
+ res.status(200).send(Buffer.from(pdfBuffer))
29
+ } catch (err) {
30
+ console.error('Error fetching PDF:', err)
31
+ res.status(500).send({ error: 'Error fetching PDF file' })
32
+ }
33
+ }
34
+
35
+ export default handler
@@ -0,0 +1,8 @@
1
+ import { NextApiRequest, NextApiResponse } from 'next'
2
+ import { mutateHandler } from '@newskit-render/my-account'
3
+ import validation from '../../../../validation'
4
+
5
+ const handler = async (req: NextApiRequest, res: NextApiResponse) =>
6
+ mutateHandler(req, res, validation)
7
+
8
+ export default handler
@@ -0,0 +1,7 @@
1
+ import { NextApiRequest, NextApiResponse } from 'next'
2
+ import { queryHandler } from '@newskit-render/my-account'
3
+
4
+ const handler = async (req: NextApiRequest, res: NextApiResponse) =>
5
+ queryHandler(req, res)
6
+
7
+ export default handler
@@ -0,0 +1,11 @@
1
+ import createAuthRoute from '@newskit-render/auth/providers'
2
+ import { NextApiRequest, NextApiResponse } from 'next'
3
+ import { oktaClientId, oktaClientSecret, oktaDomain } from '../../../config'
4
+
5
+ const router = (req: NextApiRequest, res: NextApiResponse) =>
6
+ createAuthRoute(req, res, {
7
+ clientId: oktaClientId,
8
+ clientSecret: oktaClientSecret,
9
+ issuer: oktaDomain,
10
+ })
11
+ export default router
@@ -0,0 +1,19 @@
1
+ import { NextApiRequest, NextApiResponse } from 'next'
2
+ import { genericSitemap } from '@newskit-render/feed'
3
+ import { Publisher } from '@newskit-render/api'
4
+ import { getHost } from '@newskit-render/shared-components'
5
+ import { publisher, sitemapPublicationName } from '../../config'
6
+ /* We do not have sitemap date for Demo so using Virgin,
7
+ * This can be removed and replace with just - publisher: process.env.PUBLISHER as PublisherGroup, in created projects
8
+ */
9
+
10
+ const handler = async (req: NextApiRequest, res: NextApiResponse) =>
11
+ genericSitemap({
12
+ res,
13
+ dataType: 'competitionList',
14
+ publisher: publisher as Publisher,
15
+ domain: new URL(getHost(req) as string).host,
16
+ publicationName: sitemapPublicationName as string,
17
+ })
18
+
19
+ export default handler
@@ -0,0 +1,23 @@
1
+ import { NextApiRequest, NextApiResponse } from 'next'
2
+ import { rssFeed, UpdatePeriod } from '@newskit-render/feed'
3
+ import { Publisher } from '@newskit-render/api'
4
+ import { getHost } from '@newskit-render/shared-components'
5
+ import { publisher } from '../../config'
6
+
7
+ const handler = async (req: NextApiRequest, res: NextApiResponse) =>
8
+ rssFeed({
9
+ res,
10
+ publisher: publisher as Publisher,
11
+ domain: getHost(req) as string,
12
+ titeAttributes: {
13
+ title: 'Demo Site',
14
+ link: '/feed',
15
+ description: 'Newskit Render Demo site',
16
+ language: 'en-US',
17
+ updatePeriod: 'hourly' as UpdatePeriod,
18
+ updateFrequency: 1,
19
+ logoUrl: '/icon.png',
20
+ },
21
+ })
22
+
23
+ export default handler
@@ -0,0 +1,7 @@
1
+ import { NextApiRequest, NextApiResponse } from 'next'
2
+
3
+ export default function handler(req: NextApiRequest, res: NextApiResponse) {
4
+ res.statusCode = 200
5
+ res.setHeader('Content-Type', 'application/json')
6
+ res.end(JSON.stringify({ status: true }))
7
+ }
@@ -0,0 +1,18 @@
1
+ import { NextApiRequest, NextApiResponse } from 'next'
2
+ import { newsSitemap } from '@newskit-render/feed'
3
+ import { Publisher } from '@newskit-render/api'
4
+ import { getHost } from '@newskit-render/shared-components'
5
+ import { publisher, sitemapPublicationName } from '../../config'
6
+ /* We do not have sitemap date for Demo so using Virgin,
7
+ * This can be removed and replace with just - publisher: process.env.PUBLISHER as PublisherGroup, in created projects
8
+ */
9
+
10
+ const handler = async (req: NextApiRequest, res: NextApiResponse) =>
11
+ newsSitemap({
12
+ res,
13
+ publisher: publisher as Publisher,
14
+ domain: new URL(getHost(req) as string).host,
15
+ publicationName: sitemapPublicationName as string,
16
+ })
17
+
18
+ export default handler
@@ -0,0 +1,27 @@
1
+ import { NextApiRequest, NextApiResponse } from 'next'
2
+ import { genericSitemap, CustomStaticPage } from '@newskit-render/feed'
3
+ import { Publisher } from '@newskit-render/api'
4
+ import { getHost } from '@newskit-render/shared-components'
5
+ import { publisher, sitemapPublicationName } from '../../config'
6
+ /* We do not have sitemap date for Demo so using Virgin,
7
+ * This can be removed and replace with just - publisher: process.env.PUBLISHER as PublisherGroup, in created projects
8
+ */
9
+
10
+ const defaultCustomStaticPagesCollection: CustomStaticPage[] = [
11
+ {
12
+ slug: 'test-custom-page',
13
+ },
14
+ ]
15
+ const handler = async (req: NextApiRequest, res: NextApiResponse) =>
16
+ genericSitemap({
17
+ res,
18
+ dataType: 'pageList',
19
+ publisher: publisher as Publisher,
20
+ domain: new URL(getHost(req) as string).host,
21
+ publicationName: sitemapPublicationName as string,
22
+ customStaticPageCollection: defaultCustomStaticPagesCollection,
23
+ changefreq: 'hourly',
24
+ priority: '0.8',
25
+ })
26
+
27
+ export default handler
@@ -0,0 +1,19 @@
1
+ import { NextApiRequest, NextApiResponse } from 'next'
2
+ import { getHost } from '@newskit-render/shared-components'
3
+ import { nodeEnviroment } from '../../config'
4
+
5
+ export default function handler(req: NextApiRequest, res: NextApiResponse) {
6
+ const crawable =
7
+ nodeEnviroment === 'production' ? 'Disallow: /' : 'Disallow: /' // change to Allow when your ready for prod to be crawlable
8
+ const robots = `User-agent: *
9
+ ${crawable}
10
+ Sitemap: ${new URL(getHost(req) as string)}sitemap.xml
11
+ Sitemap: ${new URL(getHost(req) as string)}news-sitemap.xml
12
+ Sitemap: ${new URL(getHost(req) as string)}pages-sitemap.xml
13
+ Sitemap: ${new URL(getHost(req) as string)}competitions-sitemap.xml`
14
+
15
+ res.statusCode = 200
16
+ res.setHeader('Content-Type', 'text/plain')
17
+ res.write(robots)
18
+ res.end()
19
+ }
@@ -0,0 +1,24 @@
1
+ import { NextApiRequest, NextApiResponse } from 'next'
2
+ import { genericSitemap } from '@newskit-render/feed'
3
+ import { Publisher } from '@newskit-render/api'
4
+ import { getHost } from '@newskit-render/shared-components'
5
+ import {
6
+ publisher,
7
+ sitemapFirstPublicationDate,
8
+ sitemapPublicationName,
9
+ } from '../../config'
10
+ /* We do not have sitemap date for Demo so using Virgin,
11
+ * This can be removed and replace with just - publisher: process.env.PUBLISHER as PublisherGroup, in created projects
12
+ */
13
+
14
+ const handler = async (req: NextApiRequest, res: NextApiResponse) =>
15
+ genericSitemap({
16
+ res,
17
+ query: req.query,
18
+ publisher: publisher as Publisher,
19
+ domain: new URL(getHost(req) as string).host,
20
+ firstArticleDate: sitemapFirstPublicationDate as string,
21
+ publicationName: sitemapPublicationName as string,
22
+ })
23
+
24
+ export default handler
@@ -0,0 +1,13 @@
1
+ import React from 'react'
2
+ import { AccountCreation, getProviderProps } from '@newskit-render/checkout'
3
+ import validation from '../../../validation'
4
+
5
+ const AccountCreationPage = (props) => (
6
+ <AccountCreation {...props} validation={validation} />
7
+ )
8
+
9
+ export default AccountCreationPage
10
+
11
+ export const getServerSideProps = async (context) => {
12
+ return getProviderProps({ ...context, provider: 'accountCreation' })
13
+ }