From 2d44ba0431eda7ae155cef7a797c1fc130ebb9ac Mon Sep 17 00:00:00 2001 From: Nishant Kaushik Date: Thu, 16 Jul 2026 13:35:07 +0530 Subject: [PATCH] Add fallback locales + try catch block for fetchign core dependencies --- libs/navigation/federal-locales-fallback.js | 106 ++++++++++++++++++++ libs/navigation/navigation.js | 45 +++++++-- 2 files changed, 141 insertions(+), 10 deletions(-) create mode 100644 libs/navigation/federal-locales-fallback.js diff --git a/libs/navigation/federal-locales-fallback.js b/libs/navigation/federal-locales-fallback.js new file mode 100644 index 00000000000..69baf7b7d09 --- /dev/null +++ b/libs/navigation/federal-locales-fallback.js @@ -0,0 +1,106 @@ +/* + * Snapshot of federal/utils/locales.js, vendored as a fallback for when the + * live cross-origin fetch in navigation.js (resolveLocales) fails (CORS, + * network error, federal origin down). Pulled from + * https://main--federal--adobecom.aem.page/federal/utils/locales.js. + * This is a point-in-time copy and will drift from the source over time; + * update it periodically rather than treating it as authoritative. + */ +export default { + '': { ietf: 'en-US', tk: 'hah7vzn.css' }, + ae_ar: { ietf: 'ar-AE', tk: 'lpk1hwn.css', dir: 'rtl' }, + ae_en: { ietf: 'en', tk: 'hah7vzn.css' }, + africa: { ietf: 'en', tk: 'hah7vzn.css' }, + ar: { ietf: 'es-AR', tk: 'hah7vzn.css' }, + at: { ietf: 'de-AT', tk: 'hah7vzn.css' }, + au: { ietf: 'en-AU', tk: 'hah7vzn.css' }, + be_en: { ietf: 'en-BE', tk: 'hah7vzn.css' }, + be_fr: { ietf: 'fr-BE', tk: 'hah7vzn.css', base: 'fr' }, + be_nl: { ietf: 'nl-BE', tk: 'qxw8hzm.css' }, + bg: { ietf: 'bg-BG', tk: 'qxw8hzm.css' }, + br: { ietf: 'pt-BR', tk: 'hah7vzn.css' }, + ca_fr: { ietf: 'fr-CA', tk: 'hah7vzn.css', base: 'fr' }, + ca: { ietf: 'en-CA', tk: 'hah7vzn.css' }, + ch_de: { ietf: 'de-CH', tk: 'hah7vzn.css' }, + ch_fr: { ietf: 'fr-CH', tk: 'hah7vzn.css', base: 'fr' }, + ch_it: { ietf: 'it-CH', tk: 'hah7vzn.css' }, + cl: { ietf: 'es-CL', tk: 'hah7vzn.css' }, + cn: { ietf: 'zh-CN', tk: 'qxw8hzm' }, + co: { ietf: 'es-CO', tk: 'hah7vzn.css' }, + cr: { ietf: 'es-419', tk: 'hah7vzn.css' }, + cy_en: { ietf: 'en-CY', tk: 'hah7vzn.css' }, + cz: { ietf: 'cs-CZ', tk: 'qxw8hzm.css' }, + de: { ietf: 'de-DE', tk: 'hah7vzn.css' }, + dk: { ietf: 'da-DK', tk: 'qxw8hzm.css' }, + ec: { ietf: 'es-419', tk: 'hah7vzn.css' }, + ee: { ietf: 'et-EE', tk: 'qxw8hzm.css' }, + eg_ar: { ietf: 'ar', tk: 'qxw8hzm.css', dir: 'rtl' }, + eg_en: { ietf: 'en-GB', tk: 'hah7vzn.css' }, + el: { ietf: 'el', tk: 'qxw8hzm.css' }, + es: { ietf: 'es-ES', tk: 'hah7vzn.css' }, + fi: { ietf: 'fi-FI', tk: 'qxw8hzm.css' }, + fr: { ietf: 'fr-FR', tk: 'hah7vzn.css' }, + gr_el: { ietf: 'el', tk: 'qxw8hzm.css' }, + gr_en: { ietf: 'en-GR', tk: 'hah7vzn.css' }, + gt: { ietf: 'es-419', tk: 'hah7vzn.css' }, + hk_en: { ietf: 'en-HK', tk: 'hah7vzn.css' }, + hk_zh: { ietf: 'zh-HK', tk: 'jay0ecd' }, + hu: { ietf: 'hu-HU', tk: 'qxw8hzm.css' }, + id_en: { ietf: 'en', tk: 'hah7vzn.css' }, + id_id: { ietf: 'id', tk: 'qxw8hzm.css' }, + ie: { ietf: 'en-GB', tk: 'hah7vzn.css' }, + il_en: { ietf: 'en-IL', tk: 'hah7vzn.css' }, + il_he: { ietf: 'he', tk: 'qxw8hzm.css', dir: 'rtl' }, + in_hi: { ietf: 'hi', tk: 'qxw8hzm.css' }, + in: { ietf: 'en-GB', tk: 'hah7vzn.css' }, + it: { ietf: 'it-IT', tk: 'hah7vzn.css' }, + jp: { ietf: 'ja-JP', tk: 'dvg6awq' }, + kr: { ietf: 'ko-KR', tk: 'qjs5sfm' }, + kw_ar: { ietf: 'ar', tk: 'qxw8hzm.css', dir: 'rtl' }, + kw_en: { ietf: 'en-GB', tk: 'hah7vzn.css' }, + la: { ietf: 'es-LA', tk: 'hah7vzn.css' }, + langstore: { ietf: 'en-US', tk: 'hah7vzn.css' }, + lt: { ietf: 'lt-LT', tk: 'qxw8hzm.css' }, + lu_de: { ietf: 'de-LU', tk: 'hah7vzn.css' }, + lu_en: { ietf: 'en-LU', tk: 'hah7vzn.css' }, + lu_fr: { ietf: 'fr-LU', tk: 'hah7vzn.css', base: 'fr' }, + lv: { ietf: 'lv-LV', tk: 'qxw8hzm.css' }, + mena_ar: { ietf: 'ar', tk: 'qxw8hzm.css', dir: 'rtl' }, + mena_en: { ietf: 'en', tk: 'hah7vzn.css' }, + mt: { ietf: 'en-MT', tk: 'hah7vzn.css' }, + mx: { ietf: 'es-MX', tk: 'hah7vzn.css' }, + my_en: { ietf: 'en-GB', tk: 'hah7vzn.css' }, + my_ms: { ietf: 'ms', tk: 'qxw8hzm.css' }, + ng: { ietf: 'en-GB', tk: 'hah7vzn.css' }, + nl: { ietf: 'nl-NL', tk: 'qxw8hzm.css' }, + no: { ietf: 'no-NO', tk: 'qxw8hzm.css' }, + nz: { ietf: 'en-GB', tk: 'hah7vzn.css' }, + pe: { ietf: 'es-PE', tk: 'hah7vzn.css' }, + ph_en: { ietf: 'en', tk: 'hah7vzn.css' }, + ph_fil: { ietf: 'fil-PH', tk: 'qxw8hzm.css' }, + pl: { ietf: 'pl-PL', tk: 'qxw8hzm.css' }, + pr: { ietf: 'es-419', tk: 'hah7vzn.css' }, + pt: { ietf: 'pt-PT', tk: 'hah7vzn.css' }, + qa_ar: { ietf: 'ar', tk: 'qxw8hzm.css', dir: 'rtl' }, + qa_en: { ietf: 'en-GB', tk: 'hah7vzn.css' }, + ro: { ietf: 'ro-RO', tk: 'qxw8hzm.css' }, + ru: { ietf: 'ru-RU', tk: 'qxw8hzm.css' }, + sa_ar: { ietf: 'ar', tk: 'qxw8hzm.css', dir: 'rtl' }, + sa_en: { ietf: 'en', tk: 'hah7vzn.css' }, + se: { ietf: 'sv-SE', tk: 'qxw8hzm.css' }, + sg: { ietf: 'en-SG', tk: 'hah7vzn.css' }, + si: { ietf: 'sl-SI', tk: 'qxw8hzm.css' }, + sk: { ietf: 'sk-SK', tk: 'qxw8hzm.css' }, + th_en: { ietf: 'en', tk: 'hah7vzn.css' }, + th_th: { ietf: 'th', tk: 'lqo2bst.css' }, + tr: { ietf: 'tr-TR', tk: 'qxw8hzm.css' }, + tw: { ietf: 'zh-TW', tk: 'jay0ecd' }, + ua: { ietf: 'uk-UA', tk: 'qxw8hzm.css' }, + uk: { ietf: 'en-GB', tk: 'hah7vzn.css' }, + vn_en: { ietf: 'en-GB', tk: 'hah7vzn.css' }, + vn_vi: { ietf: 'vi', tk: 'qxw8hzm.css' }, + za: { ietf: 'en-GB', tk: 'hah7vzn.css' }, + cis_en: { ietf: 'en', tk: 'rks2kng.css' }, + cis_ru: { ietf: 'ru', tk: 'qxw8hzm.css' }, + sea: { ietf: 'en', tk: 'hah7vzn.css' }, +}; diff --git a/libs/navigation/navigation.js b/libs/navigation/navigation.js index 1658ff29321..0af0c914f2c 100644 --- a/libs/navigation/navigation.js +++ b/libs/navigation/navigation.js @@ -47,7 +47,18 @@ async function loadFederalLocales(env) { } async function resolveLocales(env, localesOverride) { - return localesOverride ?? loadFederalLocales(env); + if (localesOverride) return localesOverride; + try { + return await loadFederalLocales(env); + } catch (e) { + window.lana?.log(`Failed to load federal locales, falling back to defaults | ${e.message}`, { + clientId: 'feds-milo', + tags: 'standalone-gnav', + severity: 'error', + }); + const { default: fallbackLocales } = await import('./federal-locales-fallback.js'); + return fallbackLocales; + } } const getStageDomainsMap = (stageDomainsMap, env) => { @@ -146,15 +157,29 @@ export default async function loadBlock(configs, customLib) { } const origin = getStandaloneNavOrigin(env); - const [ - { default: bootstrapBlock }, - locales, - { setConfig, getConfig, createTag }, - ] = await Promise.all([ - import('./bootstrapper.js'), - resolveLocales(env, configs?.locales), - import('../utils/utils.js'), - ]); + let core; + try { + const [ + { default: bootstrapBlock }, + locales, + { setConfig, getConfig, createTag }, + ] = await Promise.all([ + import('./bootstrapper.js'), + resolveLocales(env, configs?.locales), + import('../utils/utils.js'), + ]); + core = { bootstrapBlock, locales, setConfig, getConfig, createTag }; + } catch (e) { + window.lana?.log(`Global navigation Error: failed to load core navigation dependencies | ${e.message} | href: ${window.location.href}`, { + clientId: 'feds-milo', + tags: 'standalone-gnav', + severity: 'error', + }); + header?.onError?.(e); + footer?.onError?.(e); + return; + } + const { bootstrapBlock, locales, setConfig, getConfig, createTag } = core; const paramConfigs = getParamsConfigs(configs); const clientConfig = { theme,