Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
120 commits
Select commit Hold shift + click to select a range
364bd31
Move `sw.js` rewrite to `next.config`
amoore108 Nov 25, 2025
b1ac65e
Update next.config.js
amoore108 Nov 25, 2025
c8e70e7
Logic to set headers from `_document`
amoore108 Nov 26, 2025
86b716f
Fix `tsc` error
amoore108 Nov 26, 2025
73a7cb7
Remove `middleware`
amoore108 Nov 26, 2025
da25265
Check hostname
amoore108 Nov 26, 2025
efffba4
Update _document.page.tsx
amoore108 Nov 26, 2025
1c90626
Update index.ts
amoore108 Nov 26, 2025
995bd14
Merge branch 'latest' into move-sw.js-rewrite-to-next.config
amoore108 Nov 26, 2025
0b6ff25
Merge branch 'latest' into move-sw.js-rewrite-to-next.config
amoore108 Nov 28, 2025
5c09c88
Merge branch 'latest' into move-sw.js-rewrite-to-next.config
amoore108 Dec 2, 2025
29abfc2
Replace `cspHeaderResponse` with `DocumentContext` version
amoore108 Dec 2, 2025
157e312
Fetch toggles from `_document.page.tsx`
amoore108 Dec 2, 2025
96d15ab
Pass args as object
amoore108 Dec 2, 2025
5d2c637
Add `extractHeaders` function to global page props
amoore108 Dec 2, 2025
3bfde8d
Pass `isNextJs: true` down
amoore108 Dec 2, 2025
6925ed3
Remove toggle check from `augmentWithDisclaimer`
amoore108 Dec 2, 2025
c112fa8
Remove `toggles` from `getServerSideProps` in pages
amoore108 Dec 2, 2025
e845825
Remove `toggles` fetch from `getPageData`
amoore108 Dec 2, 2025
e812071
Merge branch 'latest' into nextjs-toggles-refactor
amoore108 Dec 2, 2025
659d870
Remove `toggles` from old article fetcher to fix TS error
amoore108 Dec 2, 2025
17b3974
fallback to `index` if no `id` on block
amoore108 Dec 2, 2025
576873c
Remove platform flags from `handleArticleRoute`
amoore108 Dec 2, 2025
70f9ffa
Remove platform flag from `handleAvRoute`
amoore108 Dec 2, 2025
2302978
Remove platform flags from `downloads` page
amoore108 Dec 2, 2025
8987c09
Remove platform flags from `live` page
amoore108 Dec 2, 2025
fe53045
Remove platform flags from `send` page
amoore108 Dec 2, 2025
e3b4173
Remove platform flag from `watch` page
amoore108 Dec 2, 2025
b58cfff
Remove platform flags from catch-all route
amoore108 Dec 2, 2025
b7ff18b
Remove platform flags from `wrapped` page
amoore108 Dec 2, 2025
6470eaf
Remove platform flags from `languages` page
amoore108 Dec 2, 2025
4dcc656
Remove unneeded import
amoore108 Dec 2, 2025
49ffb5d
Remove `extractHeaders` from articles route
amoore108 Dec 2, 2025
9abc415
Remove `extractHeaders` from av-embeds route
amoore108 Dec 2, 2025
f521257
Remove `extractHeaders` from downloads route
amoore108 Dec 2, 2025
898c0d3
Remove `extractHeaders` from live route
amoore108 Dec 2, 2025
6be2b70
Remove `extractHeaders` from send route
amoore108 Dec 2, 2025
a034805
Remove `extractHeaders` from watch route
amoore108 Dec 2, 2025
a750b0c
Remove `extractHeaders` from catch-all route
amoore108 Dec 2, 2025
4575d98
Remove `extractHeaders` from wrapped route
amoore108 Dec 2, 2025
fc981a2
Remove duplicate `ctx.res?.setHeader`
amoore108 Dec 2, 2025
1ad3a42
Move logic from _document and move to _app
amoore108 Dec 2, 2025
d7fa9eb
Fix type imports
amoore108 Dec 2, 2025
5910d7d
Remove `appProps` and add comment
amoore108 Dec 2, 2025
3f88c1b
Use cached version of toggles
amoore108 Dec 3, 2025
bdf3db0
Merge branch 'latest' into nextjs-toggles-refactor
amoore108 Dec 3, 2025
71bfcc7
Merge branch 'latest' into nextjs-toggles-refactor
amoore108 Dec 3, 2025
7ca7ecc
Merge branch 'latest' into nextjs-toggles-refactor
amoore108 Dec 4, 2025
11bcf52
Rename CSP header tests to be more reflective of intent
amoore108 Dec 4, 2025
d264314
Merge branch 'latest' into nextjs-toggles-refactor
amoore108 Dec 4, 2025
dcf3ade
Make toggles destruct more readable
amoore108 Dec 4, 2025
f771e72
Merge branch 'latest' into nextjs-toggles-refactor
amoore108 Dec 8, 2025
094797c
Merge branch 'latest' into nextjs-toggles-refactor
amoore108 Dec 8, 2025
0d51750
Merge branch 'latest' into nextjs-toggles-refactor
amoore108 Dec 9, 2025
052b96c
Add `service` to toggles fetch from `ctx`
amoore108 Dec 9, 2025
1d92695
Pass `service` down to csp header function to simplify logic
amoore108 Dec 9, 2025
d1ee521
Move comment for clarity
amoore108 Dec 9, 2025
a35e982
Get `service` from path instead of `query`
amoore108 Dec 9, 2025
ac7487e
Merge branch 'latest' into nextjs-toggles-refactor
amoore108 Dec 10, 2025
6a88bec
Update augmentWithDisclaimer.test.ts
amoore108 Dec 10, 2025
8d963eb
Merge branch 'latest' into nextjs-toggles-refactor
amoore108 Dec 10, 2025
853616b
Remove toggles fetch and common props from Offline page
amoore108 Dec 10, 2025
9e582fd
Merge branch 'latest' into nextjs-toggles-refactor
amoore108 Dec 12, 2025
1af8546
Remove `async/await` from header setting
amoore108 Dec 12, 2025
6494cbb
Update _app.page.tsx
amoore108 Dec 12, 2025
74d3ad8
Add `Unknown` page type
amoore108 Dec 12, 2025
7665b57
Remove manual `Unknown` type unions
amoore108 Dec 12, 2025
7223ac5
Separate out header setting
amoore108 Dec 12, 2025
1bde009
Move csp header function call logic into cspHeaderResponse function
amoore108 Dec 12, 2025
bb24194
Fix tests
amoore108 Dec 12, 2025
d788d26
Rename folder
amoore108 Dec 12, 2025
68e731c
Move into separate utils folder
amoore108 Dec 12, 2025
b454b9c
Remove server experiments logic from articles route
amoore108 Dec 12, 2025
c79d1c7
add tests
amoore108 Dec 12, 2025
0df6419
Convert _app to class component to be consistent with _document
amoore108 Dec 13, 2025
0bf2aeb
Remove unneeded type cast
amoore108 Dec 13, 2025
aff87f0
Move `handleServerLogging` to separate file
amoore108 Dec 13, 2025
7217d92
Update _app.page.tsx
amoore108 Dec 13, 2025
4ec7c9b
Update _app.page.tsx
amoore108 Dec 14, 2025
bb3688a
Update _app.page.tsx
amoore108 Dec 14, 2025
a098527
Update _app.page.tsx
amoore108 Dec 14, 2025
f0d4683
Add page type tests to `derivePageType`
amoore108 Dec 14, 2025
24dfb60
Use `page-type` header first if available
amoore108 Dec 14, 2025
30973a7
Merge branch 'latest' into set-vary-onion-headers-in-nextjs
amoore108 Dec 15, 2025
dc117fd
Merge branch 'latest' into set-vary-onion-headers-in-nextjs
amoore108 Dec 16, 2025
6bc7e25
Merge branch 'latest' into set-vary-onion-headers-in-nextjs
amoore108 Dec 16, 2025
42c47bd
Fix import order
amoore108 Dec 16, 2025
698f3cc
Update _app.page.tsx
amoore108 Dec 16, 2025
5966ef7
Update _app.page.tsx
amoore108 Dec 16, 2025
da310b1
Update index.test.ts
amoore108 Dec 17, 2025
e894ff3
Convert _error page to class component
amoore108 Dec 17, 2025
49848a2
Update _error.page.tsx
amoore108 Dec 17, 2025
6214f51
Merge branch 'latest' into set-vary-onion-headers-in-nextjs
amoore108 Dec 17, 2025
2e18a04
Merge branch 'latest' into set-vary-onion-headers-in-nextjs
amoore108 Dec 17, 2025
cada129
Merge branch 'latest' into set-vary-onion-headers-in-nextjs
amoore108 Dec 17, 2025
dee6b14
Use `UNKNOWN_PAGE` const
amoore108 Dec 17, 2025
a7475a6
Mock url typo
amoore108 Dec 17, 2025
e855f90
Check localhost domain using `some`
amoore108 Dec 17, 2025
4d018e4
Change instances of `'unknown'` page type to use const
amoore108 Dec 17, 2025
1e822b3
Update _error.page.tsx
amoore108 Dec 17, 2025
4ccd313
Make type import consistent
amoore108 Dec 17, 2025
41f74f7
Merge branch 'latest' into set-vary-onion-headers-in-nextjs
amoore108 Dec 17, 2025
68e7da6
Merge branch 'latest' into set-vary-onion-headers-in-nextjs
amoore108 Dec 17, 2025
dc1eddd
Merge branch 'latest' into set-vary-onion-headers-in-nextjs
amoore108 Dec 23, 2025
3188751
un-pluralise vary header function
amoore108 Dec 30, 2025
94dd575
Add `Link` header function
amoore108 Dec 30, 2025
2e34c5f
Fix typo in process.env setting in test
amoore108 Dec 30, 2025
8082e92
Change `getAssetOrigins` to TS
amoore108 Dec 31, 2025
7321d43
Move consts out of function
amoore108 Dec 31, 2025
239fb04
Merge branch 'latest' into set-vary-onion-headers-in-nextjs
amoore108 Jan 2, 2026
4c2a0c1
Merge branch 'latest' into set-vary-onion-headers-in-nextjs
amoore108 Jan 5, 2026
d94f591
Merge branch 'latest' into set-vary-onion-headers-in-nextjs
amoore108 Jan 5, 2026
ff8a8ce
Merge branch 'latest' into set-vary-onion-headers-in-nextjs
amoore108 Jan 5, 2026
baa8fba
Update ws-nextjs-app/utilities/derivePageType/index.test.ts
amoore108 Jan 5, 2026
efcd806
Merge branch 'latest' into set-vary-onion-headers-in-nextjs
amoore108 Jan 5, 2026
14de2bd
Update responseHeaderTests.ts
amoore108 Jan 5, 2026
04b9534
typo
amoore108 Jan 5, 2026
ad04159
Extend `responseHeaderTests` integration tests
amoore108 Jan 5, 2026
d877e25
Update responseHeaderTests.ts
amoore108 Jan 5, 2026
0cb07f0
Merge branch 'latest' into set-vary-onion-headers-in-nextjs
amoore108 Jan 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/app/components/ChartbeatAnalytics/utils/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import {
AUDIO_PAGE,
TV_PAGE,
LIVE_TV_PAGE,
UNKNOWN_PAGE,
} from '../../../routes/utils/pageTypes';
import {
chartbeatUID,
Expand Down Expand Up @@ -309,7 +310,7 @@ describe('Chartbeat utilities', () => {
${MEDIA_ASSET_PAGE} | ${'MAP Page Title'} | ${'MAP Page Title'}
${ARTICLE_PAGE} | ${'Article Page Title'} | ${'Article Page Title'}
${MEDIA_ARTICLE_PAGE} | ${'Media Article Page Title'} | ${'Media Article Page Title'}
${'unknown'} | ${'Unknown Page Title'} | ${'Unknown Page Title'}
${UNKNOWN_PAGE} | ${'Unknown Page Title'} | ${'Unknown Page Title'}
`(
'should return correct title when pageType is $pageType',
({ pageType, title, expected }) => {
Expand Down
1 change: 1 addition & 0 deletions src/app/routes/utils/pageTypes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,4 @@ export const AUDIO_PAGE = 'audio' as const;
export const TV_PAGE = 'tv' as const;
export const OFFLINE_PAGE = 'offline' as const;
export const LIVE_TV_PAGE = 'liveTV' as const;
export const UNKNOWN_PAGE = 'Unknown' as const;
3 changes: 2 additions & 1 deletion src/server/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ import extractHeaders from './utilities/extractHeaders';
import addPlatformToRequestChainHeader from './utilities/addPlatformToRequestChainHeader';
import services from './utilities/serviceConfigs';
import createAdNonce from '../app/utilities/createAdNonce';
import { UNKNOWN_PAGE } from '../app/routes/utils/pageTypes';

const morgan = require('morgan');

Expand Down Expand Up @@ -198,7 +199,7 @@ server.get(
injectPlatformToRequestChainHeader,
],
async ({ url, query, headers, path: urlPath }, res) => {
let derivedPageType = 'Unknown';
let derivedPageType = UNKNOWN_PAGE;
let serverSideExperiments = [];

try {
Expand Down
2 changes: 1 addition & 1 deletion src/server/utilities/customMetrics/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import onEnvironment from '../onEnvironment';
export type Params = {
metricName: string;
statusCode?: number | string;
pageType: PageTypes | 'Unknown';
pageType: PageTypes;
requestUrl: string;
};

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
const getAssetOrigins = () => {
const IMAGES_ORIGIN = 'https://ichef.bbci.co.uk';

const ANALYTICS_ORIGINS = ['https://ping.chartbeat.net'];
const IMAGES_ORIGIN = 'https://ichef.bbci.co.uk';
const ANALYTICS_ORIGINS = ['https://ping.chartbeat.net'];

const getAssetOrigins = () => {
const assetOrigins = [
IMAGES_ORIGIN,
process.env.SIMORGH_PUBLIC_STATIC_ASSETS_ORIGIN,
Expand Down
32 changes: 30 additions & 2 deletions ws-nextjs-app/integration/utils/responseHeaderTests.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,39 @@
export default () => {
// This header is set in the Next.js middleware/proxy file: 'ws-nextjs-app/middleware.ts'
// The presence of this header and its value including the word 'SIMORGH' indicates that middleware/proxy is working correctly
// These headers are set in the Next.js _app.page.tsx file
// The presence of this header and its value including the word 'SIMORGH' indicates that _app.page.tsx is setting headers correctly
describe('req-svc-chain is set correctly', () => {
it('should contain the correct svc chain', async () => {
const fetchResponse = await fetch(window.location.href);
const reqSvcChain = fetchResponse.headers.get('req-svc-chain');
expect(reqSvcChain).toContain('SIMORGH');
});
});

describe('Onion-Location header is set correctly', () => {
it('should contain the correct Onion-Location header', async () => {
const fetchResponse = await fetch(window.location.href);
const onionHeader = fetchResponse.headers.get('Onion-Location');
expect(onionHeader).toBe(
`https://www.bbcweb3hytmzhn5d532owbu6oqadra5z3ar726vq5kgwwn6aucdccrad.onion${new URL(window.location.href).pathname}`,
);
});
});

describe('Vary header is set correctly', () => {
it('should contain the correct Vary header', async () => {
const fetchResponse = await fetch(window.location.href);
const varyHeader = fetchResponse.headers.get('Vary');
expect(varyHeader).toContain('X-Country, Accept-Encoding');
});
});

describe('Link header is set correctly', () => {
it('should contain the correct Link header for AMP pages', async () => {
const fetchResponse = await fetch(window.location.href);
const linkHeader = fetchResponse.headers.get('Link');
expect(linkHeader).toContain(
'<https://ichef.bbci.co.uk>; rel="dns-prefetch"',
);
});
});
};
8 changes: 0 additions & 8 deletions ws-nextjs-app/pages/[service]/articles/handleArticleRoute.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import handleError from '#app/routes/utils/handleError';
import { PageTypes } from '#app/models/types/global';

import { ArticleMetadata } from '#app/models/types/optimo';
import { getServerExperiments } from '#server/utilities/experimentHeader';
import augmentWithDisclaimer from './augmentWithDisclaimer';
import shouldRender from '../../../utilities/shouldRender';
import getPageData from '../../../utilities/pageRequests/getPageData';
Expand Down Expand Up @@ -176,12 +175,6 @@ export default async (context: GetServerSidePropsContext) => {

const derivedPageType = getDerivedArticleType(article.metadata);

const serverSideExperiments = getServerExperiments({
headers: reqHeaders,
service,
pageType: derivedPageType,
});

return {
props: {
country,
Expand All @@ -201,7 +194,6 @@ export default async (context: GetServerSidePropsContext) => {
},
pageType: derivedPageType,
pathname: resolvedUrlWithoutQuery,
serverSideExperiments,
service,
status,
variant: variant || null,
Expand Down
Loading
Loading