diff --git a/config/last_updated.json b/config/last_updated.json index 250901d9..31829c5a 100644 --- a/config/last_updated.json +++ b/config/last_updated.json @@ -111,8 +111,8 @@ }, "/static/js/histogram.js": { "date_published": "2018-05-08T00:00:00.000Z", - "date_modified": "2025-06-02T00:00:00.000Z", - "hash": "58efe705af1fb94fe47af02ffa19fa95" + "date_modified": "2025-12-07T00:00:00.000Z", + "hash": "762edb2f242b0c9275f64963596288a7" }, "/static/js/index.js": { "date_published": "2018-05-08T00:00:00.000Z", @@ -166,23 +166,23 @@ }, "/static/js/techreport.js": { "date_published": "2023-10-09T00:00:00.000Z", - "date_modified": "2025-10-16T00:00:00.000Z", - "hash": "0621955a4fd4c1b61e59d19b4efcb38c" + "date_modified": "2025-12-07T00:00:00.000Z", + "hash": "f1d524a0c3936491e48e422013548e03" }, "/static/js/techreport/section.js": { "date_published": "2023-10-09T00:00:00.000Z", - "date_modified": "2025-08-18T00:00:00.000Z", - "hash": "1775005cbf8d70f6fc4974781b7e1b51" + "date_modified": "2025-12-07T00:00:00.000Z", + "hash": "ccd53f137a4aa746f70dd6c90428db3b" }, "/static/js/techreport/timeseries.js": { "date_published": "2023-10-09T00:00:00.000Z", - "date_modified": "2025-10-15T00:00:00.000Z", - "hash": "66106fc8e5a8ae322d813311e6366657" + "date_modified": "2025-12-07T00:00:00.000Z", + "hash": "fffa299ba030c83dbac35f5f81703ce5" }, "/static/js/timeseries.js": { "date_published": "2018-05-08T00:00:00.000Z", - "date_modified": "2025-06-05T00:00:00.000Z", - "hash": "88e02e130b048bdbc7797a3c5c369d6d" + "date_modified": "2025-12-07T00:00:00.000Z", + "hash": "626181398990a64da615b1ab1e5737d3" }, "/static/js/web-vitals.js": { "date_published": "2022-01-03T00:00:00.000Z", diff --git a/package-lock.json b/package-lock.json index fe7abf4a..72f5d07a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -344,6 +344,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -369,6 +370,7 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -476,6 +478,7 @@ "url": "https://github.com/sponsors/ai" } ], + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.9", "caniuse-lite": "^1.0.30001746", @@ -1611,6 +1614,7 @@ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.103.0.tgz", "integrity": "sha512-HU1JOuV1OavsZ+mfigY0j8d1TgQgbZ6M+J75zDkpEAwYeXjWSqrGJtgnPblJjd/mAyTNQ7ygw0MiKOn6etz8yw==", "dev": true, + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -1659,6 +1663,7 @@ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz", "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", "dev": true, + "peer": true, "dependencies": { "@discoveryjs/json-ext": "^0.6.1", "@webpack-cli/configtest": "^3.0.1", @@ -2048,7 +2053,8 @@ "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "dev": true + "dev": true, + "peer": true }, "acorn-import-phases": { "version": "1.0.3", @@ -2062,6 +2068,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, + "peer": true, "requires": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -2129,6 +2136,7 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.3.tgz", "integrity": "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==", "dev": true, + "peer": true, "requires": { "baseline-browser-mapping": "^2.8.9", "caniuse-lite": "^1.0.30001746", @@ -2908,6 +2916,7 @@ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.103.0.tgz", "integrity": "sha512-HU1JOuV1OavsZ+mfigY0j8d1TgQgbZ6M+J75zDkpEAwYeXjWSqrGJtgnPblJjd/mAyTNQ7ygw0MiKOn6etz8yw==", "dev": true, + "peer": true, "requires": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -2941,6 +2950,7 @@ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz", "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", "dev": true, + "peer": true, "requires": { "@discoveryjs/json-ext": "^0.6.1", "@webpack-cli/configtest": "^3.0.1", diff --git a/server/csp.py b/server/csp.py index 1f6d2f94..fb7dac9c 100644 --- a/server/csp.py +++ b/server/csp.py @@ -10,6 +10,8 @@ "spdcrv.global.ssl.fastly.net", "lux.speedcurve.com", "'unsafe-inline'", + "reports-dev-2vzgiib6.uc.gateway.dev", + "reports-prod-2vzgiib6.uc.gateway.dev", ], "font-src": ["'self'"], "connect-src": [ diff --git a/src/js/components/drilldownHeader.js b/src/js/components/drilldownHeader.js index e8beeecf..c7eceb2b 100644 --- a/src/js/components/drilldownHeader.js +++ b/src/js/components/drilldownHeader.js @@ -8,7 +8,7 @@ function setTitle(title) { function setIcon(icon) { const img = document.querySelector('h1 .title-img'); - const imgUrl = `https://cdn.httparchive.org/static/icons/${icon}`; + const imgUrl = `https://reports-prod-2vzgiib6.uc.gateway.dev/v1/static/icons/${icon}`; img.setAttribute('style', `background-image: url(${imgUrl})`); } diff --git a/src/js/histogram.js b/src/js/histogram.js index 876946da..d686844d 100644 --- a/src/js/histogram.js +++ b/src/js/histogram.js @@ -11,7 +11,7 @@ const [COLOR_DESKTOP, COLOR_MOBILE, COLOR_DESKTOP_ALT, COLOR_MOBILE_ALT] = Color function histogram(metric, date, options) { options.date = date; options.metric = metric; - const dataUrl = `https://cdn.httparchive.org/reports/${options.lens ? `${options.lens.id}/` : ''}${date}/${metric}.json`; + const dataUrl = `https://reports-prod-2vzgiib6.uc.gateway.dev/v1/static/reports/${options.lens ? `${options.lens.id}/` : ''}${date}/${metric}.json`; fetch(dataUrl) .then(response => { if (!response.ok) { diff --git a/src/js/techreport/combobox.js b/src/js/techreport/combobox.js index 2759fd4f..f79c7970 100644 --- a/src/js/techreport/combobox.js +++ b/src/js/techreport/combobox.js @@ -31,7 +31,7 @@ class ComboBox { option.id = `${this.element.dataset.id}-${row.technology.replaceAll(' ','-')}`; const logo = document.createElement('img'); logo.setAttribute('alt', ''); - logo.setAttribute('src', `https://cdn.httparchive.org/static/icons/${icon}`); + logo.setAttribute('src', `https://reports-prod-2vzgiib6.uc.gateway.dev/v1/static/icons/${icon}`); logo.setAttribute('loading', 'lazy'); option.append(logo); if(this.selected.includes(row.technology)) { @@ -200,7 +200,7 @@ class ComboBox { /* Add the app logo */ const appIcon = document.createElement('img'); - appIcon.setAttribute('src', `https://cdn.httparchive.org/static/icons/${encodeURI(icon)}`); + appIcon.setAttribute('src', `https://reports-prod-2vzgiib6.uc.gateway.dev/v1/static/icons/${encodeURI(icon)}`); appIcon.setAttribute('alt', ''); appIcon.classList.add('logo'); deleteSelection.append(appIcon); diff --git a/src/js/techreport/tableLinked.js b/src/js/techreport/tableLinked.js index 810defcb..9311d13c 100644 --- a/src/js/techreport/tableLinked.js +++ b/src/js/techreport/tableLinked.js @@ -107,7 +107,7 @@ class TableLinked { wrapper.classList.add('app-wrapper'); const img = document.createElement('span'); - const imgUrl = `https://cdn.httparchive.org/static/icons/${encodeURI(technology[0]?.icon)}`; + const imgUrl = `https://reports-prod-2vzgiib6.uc.gateway.dev/v1/static/icons/${encodeURI(technology[0]?.icon)}`; img.setAttribute('aria-hidden', 'true'); img.setAttribute('style', `background-image: url(${imgUrl})`); img.classList.add('app-img'); diff --git a/src/js/timeseries.js b/src/js/timeseries.js index 17419143..b61a7078 100644 --- a/src/js/timeseries.js +++ b/src/js/timeseries.js @@ -8,7 +8,7 @@ import { el, prettyDate, chartExportOptions, drawMetricSummary, callOnceWhenVisi function timeseries(metric, options, start, end) { - const dataUrl = `https://cdn.httparchive.org/reports/${options.lens ? `${options.lens.id}/` : ''}${metric}.json`; + const dataUrl = `https://reports-prod-2vzgiib6.uc.gateway.dev/v1/static/reports/${options.lens ? `${options.lens.id}/` : ''}${metric}.json`; options.chartId = `${metric}-chart`; options.tableId = `${metric}-table`; options.metric = metric; diff --git a/templates/report/report.html b/templates/report/report.html index a7b7ffea..e1fef3a4 100644 --- a/templates/report/report.html +++ b/templates/report/report.html @@ -15,7 +15,7 @@ {% block head %} {{ super() }} - + {% endblock %} diff --git a/tools/scripts/test_reports.sh b/tools/scripts/test_reports.sh index ce2d295b..10c6550d 100755 --- a/tools/scripts/test_reports.sh +++ b/tools/scripts/test_reports.sh @@ -22,20 +22,20 @@ LENSES="drupal magento wordpress top1k top10k top100k top1m" # These dated report URLs are tested for 200 status # We test the first and last report for each lens REPORT_MONTHLY_URLS=$(cat <<-END -https://cdn.httparchive.org/reports/${REPORT_DATE}/bootupJs.json -https://cdn.httparchive.org/reports/${REPORT_DATE}/tcp.json -https://cdn.httparchive.org/reports/${CRUX_REPORT_DATE}/cruxCls.json -https://cdn.httparchive.org/reports/${CRUX_REPORT_DATE}/cruxOl.json +https://reports-prod-2vzgiib6.uc.gateway.dev/v1/static/reports/${REPORT_DATE}/bootupJs.json +https://reports-prod-2vzgiib6.uc.gateway.dev/v1/static/reports/${REPORT_DATE}/tcp.json +https://reports-prod-2vzgiib6.uc.gateway.dev/v1/static/reports/${CRUX_REPORT_DATE}/cruxCls.json +https://reports-prod-2vzgiib6.uc.gateway.dev/v1/static/reports/${CRUX_REPORT_DATE}/cruxOl.json END ) for LENS in ${LENSES} do REPORT_MONTHLY_URLS_LENS=$(cat <<-END -https://cdn.httparchive.org/reports/${LENS}/${REPORT_DATE}/bootupJs.json -https://cdn.httparchive.org/reports/${LENS}/${REPORT_DATE}/tcp.json -https://cdn.httparchive.org/reports/${LENS}/${CRUX_REPORT_DATE}/cruxCls.json -https://cdn.httparchive.org/reports/${LENS}/${CRUX_REPORT_DATE}/cruxOl.json +https://reports-prod-2vzgiib6.uc.gateway.dev/v1/static/reports/${LENS}/${REPORT_DATE}/bootupJs.json +https://reports-prod-2vzgiib6.uc.gateway.dev/v1/static/reports/${LENS}/${REPORT_DATE}/tcp.json +https://reports-prod-2vzgiib6.uc.gateway.dev/v1/static/reports/${LENS}/${CRUX_REPORT_DATE}/cruxCls.json +https://reports-prod-2vzgiib6.uc.gateway.dev/v1/static/reports/${LENS}/${CRUX_REPORT_DATE}/cruxOl.json END ) REPORT_MONTHLY_URLS="${REPORT_MONTHLY_URLS} ${REPORT_MONTHLY_URLS_LENS}" @@ -45,16 +45,16 @@ done # These timeseries URLs are tested if the date exists in the returned body # We test the first and last report for each lens TIMESERIES_URLS=$(cat <<-END -https://cdn.httparchive.org/reports/numUrls.json -https://cdn.httparchive.org/reports/a11yButtonName.json +https://reports-prod-2vzgiib6.uc.gateway.dev/v1/static/reports/numUrls.json +https://reports-prod-2vzgiib6.uc.gateway.dev/v1/static/reports/a11yButtonName.json END ) for LENS in ${LENSES} do TIMESERIES_URLS_LENS=$(cat <<-END -https://cdn.httparchive.org/reports/${LENS}/numUrls.json -https://cdn.httparchive.org/reports/${LENS}/a11yButtonName.json +https://reports-prod-2vzgiib6.uc.gateway.dev/v1/static/reports/${LENS}/numUrls.json +https://reports-prod-2vzgiib6.uc.gateway.dev/v1/static/reports/${LENS}/a11yButtonName.json END ) TIMESERIES_URLS="${TIMESERIES_URLS} ${TIMESERIES_URLS_LENS}" @@ -64,16 +64,16 @@ done # For CrUX we always test the month before (unless an explicit date was passed) # We test the first and last report CRUX_TIMESERIES_URLS=$(cat <<-END -https://cdn.httparchive.org/reports/cruxFastDcl.json -https://cdn.httparchive.org/reports/cruxSmallCls.json +https://reports-prod-2vzgiib6.uc.gateway.dev/v1/static/reports/cruxFastDcl.json +https://reports-prod-2vzgiib6.uc.gateway.dev/v1/static/reports/cruxSmallCls.json END ) for LENS in ${LENSES} do CRUX_TIMESERIES_URLS_LENS=$(cat <<-END -https://cdn.httparchive.org/reports/${LENS}/cruxFastDcl.json -https://cdn.httparchive.org/reports/${LENS}/cruxSmallCls.json +https://reports-prod-2vzgiib6.uc.gateway.dev/v1/static/reports/${LENS}/cruxFastDcl.json +https://reports-prod-2vzgiib6.uc.gateway.dev/v1/static/reports/${LENS}/cruxSmallCls.json END ) CRUX_TIMESERIES_URLS="${CRUX_TIMESERIES_URLS} ${CRUX_TIMESERIES_URLS_LENS}"