{"version":3,"file":"static/js/7431.d86bc67f.chunk.js","mappings":"8KAQA,SAASA,IACP,MAAMC,EAJGC,OAAeC,aAAoC,KAK5D,OAAOF,GAAWG,WACpB,CAGO,SAASC,IACd,MAAMC,EAAQN,IACd,OAAOM,EAAS,GAAEA,EAAMC,aAAaD,EAAMF,mBAAgBI,CAC7D,CAGO,SAASC,IACd,MAAMH,EAAQN,IACd,OAAOU,EAAAA,EAAAA,UAAQ,KACb,MAAMN,EAAcE,GAAOF,YAC3B,GAAIA,EACF,OAAOO,IAAWP,EACpB,GACC,CAACE,GACN,CAEO,SAASM,IACd,MAAMC,EAAeJ,IACrB,OAAOI,GAAcC,IACvB,C,0EC9BO,SAASC,EAAsBC,GAAoB,GACxD,MAAM,UAAEf,EAAS,SAAEgB,IAAaC,EAAAA,EAAAA,eAC1BC,GAAWC,EAAAA,EAAAA,eACXC,GAAWC,EAAAA,EAAAA,eACjB,MAAO,KACL,GAAIrB,GAAWsB,gBAAiB,CAC9B,MAAMC,EAAiBC,KAAKC,MACtBC,EAAYC,eAAeC,QAAQ,kBAGzC,OAD2BL,GADCG,GAAaA,EAAY,GACa,KAEhEC,eAAeE,QAAQ,iBAAkBN,EAAeO,YACpDf,GAEFgB,QAAQC,IAAI,yCACPhB,EAASX,MAAM4B,cAAcC,MACjCC,GACQ,IAAIC,SAAkBC,IAC3BrB,EAASsB,aAAaC,UAAUJ,GAAQ,IAAME,GAAQ,KAClDtB,GAEFgB,QAAQC,IACN,8DACD,MAGNQ,IACKzB,GAEFgB,QAAQC,IACNQ,EACA,qGAEGxB,EAASX,MAAMoC,mBAAmBP,MACtCQ,GACQ,IAAIN,SAAkBC,IAC3B,MAAMF,EAASO,EAAcP,OAC7BnB,EAASsB,aAAaC,UAAUJ,GAAQ,IAAME,GAAQ,KAClDtB,GAEFgB,QAAQC,IACN,mEACD,MAGNQ,IACKzB,IAEFgB,QAAQC,IACNQ,EACA,wEAGFT,QAAQC,IAAI,wCAEdhB,EAASsB,aAAaK,QAClB3C,IACFA,EAAUsB,iBAAkB,GAE9BF,EAAS,SAAU,CAAEwB,MAAO,CAAEC,KAAM3B,MAC7B,UAMXH,GAEFgB,QAAQC,IACN,oFAEG,IAAII,SAAkBC,IAC3BS,YAAW,IAAMT,GAAQ,IAAO,IAAK,IAG3C,CAIE,OAFItB,GAAmBgB,QAAQC,IAAI,yBACnCZ,EAAS,SAAU,CAAEwB,MAAO,CAAEC,KAAM3B,KAC7BkB,QAAQC,SAAQ,EACzB,CAEJ,C,qGC1EO,SAASU,IACd,MAAMnC,GAAeJ,EAAAA,EAAAA,MACrB,GAAII,EACF,MAAO,CACLoC,MAAOpC,EAAaoC,MACpBC,YAAarC,EAAasC,SAC1BC,WAAYvC,EAAawC,UACzBC,KAAO,GAAEzC,EAAawC,aAAaxC,EAAasC,WAChDI,mBAAoB1C,EAAa2C,MAGvC,CAEO,SAASC,IACd,MAAMC,GAAcxC,EAAAA,EAAAA,eACpB,OAAmD,IAA5CwC,GAAazD,WAAWsB,eACjC,CAEO,SAASoC,IACd,MAAMC,GAAcnD,EAAAA,EAAAA,OAAmBoD,IACvC,YACkBrD,IAAhBoD,GACgB,IAAhBA,GACAA,EAAcE,KAAKC,MAAMtC,KAAKC,MAAQ,IAE1C,CAEOsC,eAAeC,IACpB,MAAMC,QAAiBC,MAAM,iCAAkC,CAC7DC,QAAS,CACPC,OAAQ,mBACR,eAAgB,oBAElBC,OAAQ,QAEV,OAAIJ,EAASK,UACQL,EAASM,QACN,SAEjB,EACT,C,kFCrCO,SAASC,EAAoBC,GAClC,MAAM,SAAEC,EAAQ,QAAEC,EAAU,CAAC,EAAC,UAAEC,GAAcH,EAExCI,GAAcpE,EAAAA,EAAAA,UAAQ,KACnBqE,EAAAA,EAAAA,GAAkBH,EAASC,IACjC,CAACD,EAASC,KAEP,SAAEG,GAAaC,EAAAA,EACrB,OAAOC,IAAAA,cAACF,EAAQ,CAACG,MAAOL,GAAcH,EACxC,C,uEClBA,MAAMS,EAAa,QACbC,EAAgB,WAWhBC,EAAoB,CACxB,cACA,aACA,iBACA,kBACA,UACA,WACA,WACA,QAKIC,EAAe,CAAC,YAcTN,GAAqBO,EAAAA,EAAAA,oBAChChF,GAGK,SAASuE,EACdH,EACAC,GAEA,MAAMY,EAAkC,CAAC,EAEzCC,OAAOC,QAAQf,GAASgB,SAAQ,EAAEC,EAAKV,MACjCU,EAAIC,WAAWV,GACjBK,EAAOI,EAAIE,UAAUX,EAAWY,SAAWb,EAClCU,EAAIC,WAAWT,GACxBI,EAAOI,EAAIE,UAAUV,EAAcW,SAAWb,EAC7B,aAARU,IACTJ,EAAOQ,iBAAmBd,EAC5B,IAIF,MAAMc,EAAmBR,EAAOQ,kBAAoB,GACpD,IAAKX,EAAkBY,SAASD,GAC9B,MAAM,IAAIE,MACP,kCAAiCF,sBAAqCG,KAAKC,UAC1Ef,OAWN,OANAC,EAAaK,SAASC,IACpB,IAAKJ,EAAOI,GACV,MAAM,IAAIM,MAAO,iBAAgBN,aACnC,IAGK,CACLhB,YAEAyB,KAAMZ,OAAOa,OAAOd,GAExB,C,4MClFO,SAASe,IACd,MAAM1B,GAAc2B,EAAAA,EAAAA,YAAWxB,EAAAA,GAC/B,IAAKH,EACH,MAAM,IAAIqB,MACR,8GAGJ,OAAOrB,CACT,CAEO,SAAS4B,IACd,OAAOF,IAAiBF,IAC1B,CAGO,SAASK,IACd,OAAOH,IAAiB3B,SAC1B,C,gdCbA,MAAM+B,EAAcC,SAAOrG,GAAWsG,QAAQ,CAG5CC,YAAa,cAEb3C,QAAS,CACP4C,OAAQ,mBACR,eAAgB,oBAIlBC,KAAM,SAOD,SAASC,EAAmBxC,GACjC,MAAM,SAAEC,GAAaD,EAEfyC,GAAYT,EAAAA,EAAAA,MAIZU,EAC2B,eAA/BD,EAAUlB,kBACqB,mBAA/BkB,EAAUlB,kBACqB,gBAA/BkB,EAAUlB,kBAC0C,SAApDoB,aAAaxF,QAAQyF,EAAAA,IAEhBnC,EAAOoC,IAAYC,EAAAA,EAAAA,eAAiChH,GAiD3D,IA/CAiH,EAAAA,EAAAA,YAAU,KACR,IAAIC,GAAS,EAKb,MAAMC,EAAqD,CACzDC,IAAKT,EAA8B,oBAkCrC,MA/BA,WACE,IAAIU,EAAWjB,EAAYkB,IACxB,GACCV,GACIW,EAAAA,EAAAA,KACAZ,EAAUa,kDASdC,WAAW9G,SAAS+G,OAAOC,QAAQ,aAAe,IAKpDR,EAAsB,SAAIR,EAAUiB,oBAGtCP,EAAWA,EAASQ,MAAMV,GAE1B,MAAMW,QAAmBT,EAASU,MAAM/D,OAEpCkD,GACFH,EAASe,EAEZ,EA7BD,GA+BO,KACLZ,GAAS,CAAK,CACf,GAEA,CAACP,EAAWI,KAEVpC,EACH,OAAO,KAGT,MAAM,SAAEH,GAAawD,EAAAA,EACrB,OAAOtD,IAAAA,cAACF,EAAQ,CAACG,MAAOA,GAAQR,EAClC,C,6JC1DO,MAAM6D,GAAoBhD,E,SAAAA,oBAC/BhF,E,qFChCK,SAASiI,IACd,MAAMH,GAAaI,EAAAA,EAAAA,MACnBjB,EAAAA,EAAAA,YAAU,KACJa,EAAWK,mBACbC,EAAAA,EAAAA,MAAc,CACZC,OAAO,EACPC,KAAM,gBACNC,UAAW,KACXC,MAAO,QACPC,0BAA0B,EAC1BC,sBAAsB,EACtBC,OAAQ,8BAEZ,GACC,CAACb,GACN,C,0EChBO,SAASI,IACd,MAAMJ,GAAa7B,EAAAA,EAAAA,YAAW+B,EAAAA,GAC9B,IAAKF,EACH,MAAM,IAAInC,MACR,4GAGJ,OAAOmC,CACT,C,+DCTA,MAAMc,EAAqB,WAKpB,SAASC,IACd,MAAOC,EAAWC,IAAgB/B,EAAAA,EAAAA,UAAS4B,GAe3C,OAPA3B,EAAAA,EAAAA,YAAU,KACR+B,SAASC,MAAQH,EACV,KACLE,SAASC,MAAQL,CAAkB,IAEpC,CAACE,IAEG,CAAEA,YAAWI,gBAbKC,IACnBA,GAAgBL,IAAcK,GAChCJ,EAAaI,EACf,EAWJ,C,0KCpBO,IAAKC,EAAY,SAAZA,GAAY,OAAZA,EAAY,YAAZA,EAAY,UAAZA,EAAY,YAAZA,EAAY,YAAZA,CAAY,MAOxB,MAmCA,EAnCuBC,KACrB,MAAM,kBACJC,EAAiB,iBACjBC,EAAgB,kBAChBC,EAAiB,kBACjBC,IACEvD,EAAAA,EAAAA,OAEGiB,IAAeuC,EAAAA,EAAAA,mBAChBC,EAAcxC,EAAYY,IAAI,UAuBpC,OArBqB7H,EAAAA,EAAAA,UAAQ,KAC3B,OAAQyJ,GACN,KAAKP,EAAaQ,KAChB,OAAON,EACT,KAAKF,EAAaS,KAChB,OAAOJ,EACT,KAAKL,EAAaU,KAChB,OAAON,EACT,KAAKJ,EAAaW,IAChB,OAAOR,EACT,QACE,OAAOE,EACX,GACC,CACDE,EACAL,EACAG,EACAD,EACAD,GAGiB,C,2ICjCrB,MAAMS,EAAiB,kBAQhB,SAASC,IACd,MAAMlJ,GAAkBkC,EAAAA,EAAAA,MAClB5C,GAAeJ,EAAAA,EAAAA,MACfiK,GAAUC,EAAAA,EAAAA,0BACVtJ,GAAWC,EAAAA,EAAAA,gBACX,iBAAEsJ,IAAqBC,EAAAA,EAAAA,KAEvBC,EAAU5K,OAAO6K,OAAS7K,OAAO8K,IACjCC,EAAY/K,OAAOiB,SAAS+J,gBAC5BC,GAAetB,EAAAA,EAAAA,MAEduB,IAAkB5D,EAAAA,EAAAA,UACvBsD,GAAWG,EAAUI,SAASF,KAGzBG,EAAcC,IAAmB/D,EAAAA,EAAAA,UAAkBsD,GAEpDU,GAAsBC,EAAAA,EAAAA,SAAO,GAC7BC,GAAaD,EAAAA,EAAAA,SAAO,IAEnBE,EAAYC,IAAiBpE,EAAAA,EAAAA,UAAkBsD,IAC/Ce,EAAYC,IAAiBtE,EAAAA,EAAAA,UAAkBsD,IAC/CiB,EAAaC,IAAkBxE,EAAAA,EAAAA,UAAkBsD,IACjDmB,EAAcC,IAAmB1E,EAAAA,EAAAA,UAAoB,CAAC,IAEtD2E,EAAgBC,IAAqB5E,EAAAA,EAAAA,UAAS,IAE/C6E,EAAqBC,IAEzB,KAAKC,EAAAA,EAAAA,GAAcD,EAAMpE,QAAS,OAElC,IAAKoE,GAASA,EAAME,MAAMC,UAAYC,EAAAA,EAAU,OAChD,MAAM,OACJC,EAAM,WACNhB,EAAU,WACVE,EAAU,YACVE,EAAW,OACXa,EAAM,aACNX,EAAY,OACZY,GACEP,EAAME,KAOV,GALKhB,EAAoBsB,SAAsB,kBAAXH,IAClC/B,EAAiB,iBAAkB,CAAE1C,OAAQhI,OAAOiB,SAAS+G,SAC7DsD,EAAoBsB,SAAU,GAGjB,kBAAXH,IACFf,EAAcD,IAAc,GAC5BG,EAAcD,IAAc,GAC5BG,EAAeD,IAAe,GAE1BE,GAAgBvG,OAAOqH,KAAKd,IAAejG,OAAS,GACtDkG,EAAgBD,GAGlBV,GAAgB,GAEZqB,IACGlC,EAAQsC,iBAAiB9G,SAAS0G,GAKrCR,EAAkBQ,GAJlB5K,QAAQiL,KACL,WAAUL,4FAAiGlC,EAAQsC,iBAAiBjL,eAOvI8K,GAAQ,CACV,MAAMK,EAAW1D,SAAS2D,eAAe3C,GACzC,IAAK0C,EAAU,CACb,MAAME,EAAM5D,SAAS6D,cAAc,SACnCD,EAAIE,GAAK9C,EACThB,SAAS+D,KAAKC,OAAOJ,EACvB,CACIF,GAAYL,IAAWK,EAASO,cAClCP,EAASO,YAAcZ,EAC3B,CAGa,oBAAXF,GACEL,EAAME,MAAMkB,OACdrM,EAASiL,EAAME,MAAMkB,MAGzB,EA0BF,OAvBAjG,EAAAA,EAAAA,YAAU,KACR,GAAIlG,GAAmB+J,IAAiBI,EAAWoB,QAUjD,OARAlC,EAAiB,cAAe,CAC9B1C,OAAQhI,OAAOiB,SAAS+G,OACxByF,QAAS9M,GAAc+M,WAAWC,WAEpCnC,EAAWoB,SAAU,EAGrB5M,OAAO4N,iBAAiB,UAAWzB,GAC5B,IAAMnM,OAAO6N,oBAAoB,UAAW1B,EACrD,GAEC,CAAC9K,KAEJkG,EAAAA,EAAAA,YAAU,KACR,MAAMuG,EAAatD,EAAQkC,OACvBT,GAAkB6B,IAAe7B,GACnCzB,EAAQuD,UAAU9B,EACpB,GACC,CAACzB,EAASyB,KAENzL,EAAAA,EAAAA,UAAQ,KACN,CACL0K,iBACAE,eACA4C,cAAe,CACbvC,aACAE,aACAE,cACAE,mBAGH,CACDN,EACAE,EACAE,EACAX,EACAE,EACAW,GAEJ,C,qFChJO,SAASpB,IACd,MAAM,WAAEsD,IAAezH,EAAAA,EAAAA,MACjB0H,GAAevE,EAAAA,EAAAA,KACfe,EAAmBA,CACvB+B,EACA0B,EACAC,GAAU,KAEVpO,OAAOqO,OAAOC,YACZ,CACE7B,SACAF,QAASC,EAAAA,KACN2B,GAELC,EAAUF,EAAeD,EAC1B,EA2BH,MAAO,CACLM,qBApB2BA,KAC3B7D,EAAiB,wBAAwB,EAoBzC8D,gBAXuBC,IAMvB/D,EAAiB,kBAAmB,CAAE+D,cAAa,EAMnD/D,mBACAgE,2BA5BkCC,IAClCjE,EAAiB,uBAAwB,CAAEiE,cAAa,EA4BxDC,mBAnByBA,CAACC,EAAiB3D,GAAiB,KAC5DR,EAAiB,oBAAqB,CAAEmE,WAAW3D,EAAe,EAoBtE,C,wDCrDO,MAAMsB,EAAW,WAIjB,SAASH,EAAcrE,GAG5B,MADE,iFACiB8G,KAAK9G,EAC1B,C,8LCUA,MAAMtB,EAAcC,SAAOrG,GAAWsG,QAAQ,CAC5CC,YAAa,cACbE,KAAM,SAGD,SAASgI,EACdvB,EACAwB,EACAC,EACAC,EACAC,GAEA,MAAM9N,GAAkBkC,EAAAA,EAAAA,MAClB6L,GAAiB3L,EAAAA,EAAAA,MACjB4L,EAASC,EAAcH,GAGvBI,IACDH,GAAkB/N,KACjB8N,GAAmBK,eACtBP,GAAiBM,cAAwCjP,IAA7B2O,GAAiBM,SAWhD,OAAOE,EAAAA,EAAAA,UAAa,IAAKR,MARhBS,EAAAA,EAAAA,cAAiB,CACtBH,UACAI,QAASA,IAAMN,EAAO7B,EAAOwB,EAAQE,GACrCU,SAAU,CAACpC,EAAOwB,EAAQE,GAC1BW,MAAO,KAKb,CAEO,SAASP,EACdH,GAEA,MAAMW,IAAkBX,GAAmBK,YACrCO,EACJZ,GAAmBY,iBACwB,SAA3C5I,aAAaxF,QAAQ,kBACjBqO,GAAaC,EAAAA,EAAAA,KACbC,GAAgBC,EAAAA,EAAAA,GAAcL,EAAeC,GAC7CK,GAAqBvP,EAAAA,EAAAA,KAE3B,OAAO,SACL2M,EACAwB,EACAE,GAEA,MAAMmB,EAAaH,EAAchB,GAE3BtH,EAAO,GADGoI,EAAWxC,KACFA,IAEzB,IAAI8C,EAAU5J,EAAYkB,IAAIA,GAI9B,OAHIoH,IACFsB,EAAUA,EAAQnI,MAAM6G,IAEnBsB,EACJpM,QAAQmM,GACRhI,MACA/D,OACAiM,OAAOC,IACN,GAAgC,MAA5BA,GAAOxM,UAAUyM,QAAmBX,EAgBtC,MAAMU,EAfN,OAAOJ,IAAqBnO,MAAMyO,IAChC,GAAIA,EAEF,OAAOJ,EACJpM,QAAQgM,EAAchB,IACtB7G,MACA/D,OACAiM,OAAOhO,IACN,MAAMA,CAAG,IAGb,MAAMiO,CACR,GAIJ,GAEN,CACF,CAEO,SAASG,EACdxB,GAEA,MAAMW,IAAkBX,GAAmBK,YAIrCQ,GAAaC,EAAAA,EAAAA,KACbC,GAAgBC,EAAAA,EAAAA,GAAcL,GAC9BM,GAAqBvP,EAAAA,EAAAA,KAE3B,OAAO,SACL2M,EACAoD,EACA5B,EACAE,GAEA,MAAMtH,EAAO,GAAEoI,EAAWxC,KAASA,IAEnC,IAAI8C,EAAU5J,EAAYkB,IAAIA,GAI9B,OAHIoH,IACFsB,EAAUA,EAAQnI,MAAM6G,IAEnBsB,EACJpM,QAAQgM,EAAchB,IACtB0B,KAAK1K,KAAKC,UAAUyK,IACpBC,OACAvM,OACAiM,OAAOC,IACN,GAAgC,MAA5BA,GAAOxM,UAAUyM,QAAmBX,EAiBtC,MAAMU,EAhBN,OAAOJ,IAAqBnO,MAAMyO,IAChC,GAAIA,EAEF,OAAOJ,EACJpM,QAAQgM,EAAchB,IACtB0B,KAAK1K,KAAKC,UAAUyK,IACpBC,OACAvM,OACAiM,OAAOhO,IACN,MAAMA,CAAG,IAGb,MAAMiO,CACR,GAIJ,GAEN,CACF,CAEO,SAASM,EACd3B,GAEA,MAAMW,IAAkBX,GAAmBK,YACrCQ,GAAaC,EAAAA,EAAAA,KACbC,GAAgBC,EAAAA,EAAAA,GAAcL,GAC9BM,GAAqBvP,EAAAA,EAAAA,KAE3B,OAAO,SACL2M,EACAuD,EACA/B,EACAE,GAEA,MAAM8B,EAAad,EAAchB,UAC1B8B,EAAW,gBAElB,MAAMpJ,EAAO,GAAEoI,EAAWxC,KAASA,IAEnC,IAAI8C,EAAU5J,EAAYkB,IAAIA,GAI9B,OAHIoH,IACFsB,EAAUA,EAAQnI,MAAM6G,IAEnBsB,EACJpM,QAAQ8M,GACRD,SAASA,GACTF,OACAvM,OACAiM,OAAOC,IACN,GAAgC,MAA5BA,GAAOxM,UAAUyM,QAAmBX,EAiBtC,MAAMU,EAhBN,OAAOJ,IAAqBnO,MAAMyO,IAChC,GAAIA,EAEF,OAAOJ,EACJpM,QAAQgM,EAAchB,IACtB6B,SAASA,GACTF,OACAvM,OACAiM,OAAOhO,IACN,MAAMA,CAAG,IAGb,MAAMiO,CACR,GAIJ,GAEN,CACF,CAEO,SAASS,IACd,MAAMjB,GAAaC,EAAAA,EAAAA,KACbC,GAAgBC,EAAAA,EAAAA,KAChBC,GAAqBvP,EAAAA,EAAAA,KAE3B,OAAO,SACL2M,EACAoD,EACA5B,EACAE,GAEA,MAAMtH,EAAO,GAAEoI,EAAWxC,KAASA,IAEnC,IAAI8C,EAAU5J,EAAYkB,IAAIA,GAI9B,OAHIoH,IACFsB,EAAUA,EAAQnI,MAAM6G,IAEnBsB,EACJpM,QAAQgM,EAAchB,IACtB0B,KAAK1K,KAAKC,UAAUyK,IACpBM,QACA5M,OACAiM,OAAOC,IACN,GAAgC,MAA5BA,GAAOxM,UAAUyM,OACnB,OAAOL,IAAqBnO,MAAMyO,IAChC,GAAIA,EAEF,OAAOJ,EACJpM,QAAQgM,EAAchB,IACtB0B,KAAK1K,KAAKC,UAAUyK,IACpBM,QACA5M,OACAiM,OAAOhO,IACN,MAAMA,CAAG,IAGb,MAAMiO,CACR,IAGF,MAAMA,CACR,GAEN,CACF,CAEO,SAASW,IACd,MAAMnB,GAAaC,EAAAA,EAAAA,KACbC,GAAgBC,EAAAA,EAAAA,KAChBC,GAAqBvP,EAAAA,EAAAA,KAE3B,OAAO,SACL2M,EACAoD,EACA5B,EACAE,GAEA,MAAMtH,EAAO,GAAEoI,EAAWxC,KAASA,IAEnC,IAAI8C,EAAU5J,EAAYkB,IAAIA,GAO9B,OANIgJ,IACFN,EAAUA,EAAQM,KAAK1K,KAAKC,UAAUyK,KAEpC5B,IACFsB,EAAUA,EAAQnI,MAAM6G,IAEnBsB,EACJpM,QAAQgM,EAAchB,IACtBkC,SACA9M,OACAiM,OAAOC,IACN,GAAgC,MAA5BA,GAAOxM,UAAUyM,OACnB,OAAOL,IAAqBnO,MAAMyO,IAChC,GAAIA,EAEF,OAAOJ,EACJpM,QAAQgM,EAAchB,IACtBkC,SACA9M,OACAiM,OAAOhO,IACN,MAAMA,CAAG,IAGb,MAAMiO,CACR,IAGF,MAAMA,CACR,GAEN,CACF,CAEO,SAASa,EACdlC,GAKA,MAAMa,GAAaC,EAAAA,EAAAA,KACbC,GAAgBC,EAAAA,EAAAA,KAChBC,GAAqBvP,EAAAA,EAAAA,KAE3B,OAAO,SACL2M,EACAoD,EACA5B,EACAE,GAEA,MAAMtH,EAAO,GAAEoI,EAAWxC,KAASA,IAEnC,IAAI8C,EAAU5J,EAAYkB,IAAIA,GAO9B,OANIgJ,IACFN,EAAUA,EAAQM,KAAK1K,KAAKC,UAAUyK,KAEpC5B,IACFsB,EAAUA,EAAQnI,MAAM6G,IAEnBsB,EACJpM,QAAQgM,EAAchB,IACtB0B,KAAK1K,KAAKC,UAAUyK,IACpBU,MACAhN,OACAiM,OAAOC,IACN,GAAgC,MAA5BA,GAAOxM,UAAUyM,OACnB,OAAOL,IAAqBnO,MAAMyO,IAChC,GAAIA,EAEF,OAAOJ,EACJpM,QAAQgM,EAAchB,IACtB0B,KAAK1K,KAAKC,UAAUyK,IACpBU,MACAhN,OACAiM,OAAOhO,IACN,MAAMA,CAAG,IAGb,MAAMiO,CACR,IAGF,MAAMA,CACR,GAEN,CACF,CAWO,SAASe,EACd/D,EACAoD,EACA5B,EACAC,EACAC,EACAC,GAEA,MAAM9N,GAAkBkC,EAAAA,EAAAA,MAClBiO,EAAUb,EAAexB,GAGzBI,GACHlO,KAAqB8N,GAAmBK,eACxCP,GAAiBM,cAAwCjP,IAA7B2O,GAAiBM,SAWhD,OAAOE,EAAAA,EAAAA,WAREC,EAAAA,EAAAA,cAAa,CAClBH,UACAI,QAASA,IAAM6B,EAAQhE,EAAOoD,EAAM5B,EAAQE,GAC5CU,SAAU,CAACpC,EAAOoD,EAAM5B,EAAQE,GAChCW,MAAO,IAKb,C,6FC5XO,SAAS4B,EAAYC,GAE1B,MADkE,SAA3CvK,aAAaxF,QAAQ,kBAEnC+P,GAAkB,MAATA,EACZC,EAAAA,GAAO/O,KAAKgP,mBAAmBF,EAAM7P,YAAa,QAAQA,SACxD,UAEF,GACQ6P,CAChB,CAEO,SAASG,EAAYH,GAE1B,GADkE,SAA3CvK,aAAaxF,QAAQ,kBACvB,OAAO+P,EAE5B,IAAKA,EAAO,MAAO,GAEnB,IACE,MAAMI,EAAgBH,EAAAA,GAAO/O,KAAK8O,EAAO,UAAU7P,SAAS,QAC5D,OAAOkQ,mBAAmBD,EAC5B,CAAE,MAAOtB,GAEP,OADA1O,QAAQiL,KAAK,8BAA+ByD,GACrCkB,CACT,CACF,CAoBO,SAASM,EAAgBpK,EAAaqK,GAAS,IAC1B,IAAtBrK,EAAIK,QAAQ,OACdL,EAAO,IAAGA,KAEZ,MAAO4F,EAAOwB,GAAUpH,EAAIsK,MAAM,KAC5BC,GAAeC,EAAAA,EAAAA,OAAMpD,GACrBqD,EAAeJ,EAhBvB,SAAsBjD,GACpB,MAAMsD,EAA2B,CAAC,EAMlC,OALItD,GACFxJ,OAAOqH,KAAKmC,GAAQtJ,SAAS6M,IAC3BD,EAAcC,GAAQV,EAAY7C,EAAOuD,GAAgB,IAGtDD,CACT,CASME,CAAaL,GAzBnB,SAAsBnD,GACpB,MAAMyD,EAA2B,CAAC,EAIlC,OAHAjN,OAAOqH,KAAKmC,GAAQtJ,SAAS6M,IAC3BE,EAAcF,GAAQd,EAAYzC,EAAOuD,GAAgB,IAEpDE,CACT,CAoBMC,CAAaP,GAEjB,MADmB,GAAE3E,MAASrH,EAAAA,EAAAA,WAAUkM,IAE1C,C,waChEO,MAAMjL,EAA4B,2B,+FCKlC,SAAS6I,IACd,MAAMhJ,GAAYT,EAAAA,EAAAA,gBACZ4B,GAAaI,EAAAA,EAAAA,iBACbtB,GAA0ByL,EAAAA,EAAAA,KAE1BC,EAAU3L,EAAU4L,aACpBC,EAAY7L,EAAU8L,gBACtBC,EAAuBC,EAC3BC,EACAjM,EAAUlB,iBACVqC,EAAW+K,UAEPC,EAA0BH,EAC9BI,EACApM,EAAUlB,iBACVqC,EAAW+K,UAGb,OAAQ3F,IACN,GAAIA,GAAO8F,cAAc1N,WAAW,QAClC,MAAO,GAET,GAAIsB,IACF,OAAOW,EAAAA,EAAAA,KAGT,IAAI0L,EAAUtM,EAAUa,SACxB,GAAI8K,GAAWE,EAAW,CACxB,MAAMU,EAC8B,iBAA3BvM,EAAU4L,cACjBG,EAAWS,MAAMC,GACRlG,EAAMxH,SAAS0N,KAGgB,iBAAjCzM,EAA2B,iBAClCmM,EAAcK,MAAMC,GACXlG,EAAMxH,SAAS0N,KAGxBH,EAAUtM,EAA2B,gBAC5BuM,IACTD,EAAUtM,EAAU4L,aAExB,CAEA,OAAOU,CAAO,CAElB,CAQA,SAASN,EACPU,EACA5N,EACAoN,GAEA,OACEQ,EACGC,QACEC,IACoB,MAAlBA,EAAEC,aAAuBD,EAAEC,cAAgB/N,KAC3C8N,EAAEE,UAAU/N,SAAS,MAAQ6N,EAAEE,UAAU/N,SAASmN,MAEtDa,SAASH,GAAMA,EAAEI,UAAW,EAEnC,C,+FC9DA,MAAMC,EAAMlU,OACNmU,GAAkBC,EAAAA,EAAAA,MAEjB,SAASjE,EACdkE,GAAkB,EAClBtE,GAAkB,GAElB,MAAM3H,GAAaI,EAAAA,EAAAA,iBACb5D,GAAc4B,EAAAA,EAAAA,gBACd7F,GAAeJ,EAAAA,EAAAA,MACf+T,GAAc7J,EAAAA,EAAAA,0BAEpB,OAAQyE,IACN,MAAMqF,GAAgBpU,EAAAA,EAAAA,MAChBqU,GAAgBJ,EAAAA,EAAAA,OAChB,OAAE1H,GAAW4H,GACZ,CAAEG,GAAe/H,EAAOwF,MAAM,MAC/B,YAAE4B,EAAW,SAAEX,GAAa/K,EAE5BuG,EAAahO,GAAcgO,YAAc,GACzC+F,EAAS/T,GAAc+T,QAAU,GAIjCxQ,EAAU,CAEd,oBAAqBwI,EACrB,mBAAoB8H,EACpB,iBAAkBC,EAClB,oBAAqB9F,EACrB,iBARAuF,EAAIS,QAAQC,sBAAsBC,YAAcV,EAShD,iBAAkBL,EAClB,qBAAsB,UACtB,gBAAiBnF,EACjB,cAAe,QACf,cAAewE,EACf,YAAauB,EAEb5N,OAAQ,mBACR,kBAAmB4F,EACnB6H,gBACA,eAAgB,mBAGhBC,gBACAC,cACAK,eAAgBnG,EAChBoG,oBAAqBpU,GAAc+M,WAAWqH,oBAC9CC,SAAUrU,GAAc+M,WAAWsH,SACnCC,eAAgBR,KACbvF,GASL,OANImF,IACFnQ,EAAQ,aAAeU,EAAqB,SAE1CmL,IACF7L,EAAmB,UAAI,QAElBA,CAAO,CAElB,C,6FCnEYlE,OAERkV,qBAAuB,KACzB,MACMC,EAAwB,SADXhO,aAAaxF,QAAQyF,EAAAA,GACD,QAAU,OACjDD,aAAavF,QAAQwF,EAAAA,EAA2B+N,GAChDrT,QAAQC,IACL,2BACY,SAAXoT,EAAoB,UAAY,2CAEnC,EAGI,MAAMtN,EAA2BA,IAC9B,OAKG8K,EAAoBA,KAC/B,MAAM1L,GAAYT,EAAAA,EAAAA,MAelB,OAZgC4O,EAAAA,EAAAA,cAAY,IACP,gBAA/BnO,EAAUlB,kBAC0C,SAApDoB,aAAaxF,QAAQyF,EAAAA,IAIQ,eAA/BH,EAAUlB,kBACqB,mBAA/BkB,EAAUlB,kBAC0C,SAApDoB,aAAaxF,QAAQyF,EAAAA,IAEtB,CAACH,EAAUlB,kBAEgB,C","sources":["webpack:///./src/auth/authorization.hook.ts","webpack:///./src/auth/useRefreshAccessToken.ts","webpack:///./src/auth/user-info.hooks.ts","webpack:///./src/config/build-config/BuildConfigProvider.tsx","webpack:///./src/config/build-config/build-config-context.ts","webpack:///./src/config/build-config/useBuildConfig.ts","webpack:///./src/config/site-config/SiteConfigProvider.tsx","webpack:///./src/config/site-config/site-config-context.ts","webpack:///./src/config/site-config/useFullStoryConfig.ts","webpack:///./src/config/site-config/useSiteConfig.ts","webpack:///./src/config/usePageTitle.ts","webpack:///./src/config/xvantage-iframe/useIM360Origin.ts","webpack:///./src/config/xvantage-iframe/useInX4AFrame.ts","webpack:///./src/config/xvantage-iframe/usePostToX4A.ts","webpack:///./src/config/xvantage-iframe/utils.ts","webpack:///./src/query/api-hooks.ts","webpack:///./src/query/encode-decode-util.ts","webpack:///./src/query/query-consts.ts","webpack:///./src/query/useApiBase.ts","webpack:///./src/query/useApiHeaders.ts","webpack:///./src/query/utils.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { AuthState } from '@okta/okta-auth-js';\nimport jwt_decode from 'jwt-decode';\n\nfunction getAuthState() {\n  return ((window as any).ImAuthState as AuthState | null) || null;\n}\n\nfunction getToken() {\n  const authState = getAuthState();\n  return authState?.accessToken;\n}\n\n/** The header `authorization` (Bearer token) for api requests. */\nexport function getAuthorizationHeader() {\n  const token = getToken();\n  return token ? `${token.tokenType} ${token.accessToken}` : undefined;\n}\n\n// The content of the Token\nexport function useDecodedToken() {\n  const token = getToken();\n  return useMemo(() => {\n    const accessToken = token?.accessToken;\n    if (accessToken) {\n      return jwt_decode(accessToken) as TokenContent;\n    }\n  }, [token]);\n}\n\nexport function useRoles() {\n  const decodedToken = useDecodedToken();\n  return decodedToken?.role;\n}\n\nexport type Segments = {\n  resellerPersonalization: string[];\n  userAdbutler: string[];\n  userPersonalization: string[];\n};\n\nexport type TokenContent = {\n  acr: string;\n  appName: string;\n  aud: string;\n  azureAd: string;\n  cid: string;\n  email: string;\n  environment: string;\n  exp: number;\n  firstName: string;\n  iat: number;\n  imoProfile: {\n    displayUserName: string;\n    distributionChannel: string;\n    division: string;\n    emailAddress: string;\n    firstName: string;\n    impersonationMode: false;\n    lastName: string;\n    originalResellerId: string;\n    originalUserName: string;\n    resellerId: string;\n    salesOrganization: string;\n    userId: string;\n    userName: string;\n    userType: string; // 10\"\n  };\n  iss: string;\n  jti: string;\n  lastName: string;\n  login: string;\n  resellerId: string;\n  resellerProspect?: boolean;\n  role: string[];\n  scp: string[];\n  segments: Segments;\n  senderId: string;\n  siteCode: string;\n  sub: string;\n  uid: string;\n  userId: string;\n  ver: number;\n  whiteListedFeatures: string[];\n};\n","import { useLocation, useNavigate } from 'react-router-dom';\nimport { useOktaAuth } from '@okta/okta-react';\n\nexport function useRefreshAccessToken(writeLogToConsole = false) {\n  const { authState, oktaAuth } = useOktaAuth();\n  const location = useLocation();\n  const navigate = useNavigate();\n  return () => {\n    if (authState?.isAuthenticated) {\n      const tokenTimestamp = Date.now();\n      const timestamp = sessionStorage.getItem('tokenTimestamp');\n      const savedTokenTimestamp = timestamp ? +timestamp : 0;\n      const tokenRefreshNeeded = tokenTimestamp - savedTokenTimestamp > 5000;\n      if (tokenRefreshNeeded) {\n        sessionStorage.setItem('tokenTimestamp', tokenTimestamp.toString());\n        if (writeLogToConsole)\n          // eslint-disable-next-line no-console\n          console.log('access token refresh is kicking in...');\n        return oktaAuth.token.renewTokens().then(\n          (tokens) => {\n            return new Promise<boolean>((resolve) => {\n              oktaAuth.tokenManager.setTokens(tokens, () => resolve(true));\n              if (writeLogToConsole)\n                // eslint-disable-next-line no-console\n                console.log(\n                  'tokens have been refreshed through refresh_token grand type'\n                );\n            });\n          },\n          (err) => {\n            if (writeLogToConsole)\n              // eslint-disable-next-line no-console\n              console.log(\n                err,\n                'failed to refresh access token through refresh_token grand type, trying authorization_code now...'\n              );\n            return oktaAuth.token.getWithoutPrompt().then(\n              (tokenResponse) => {\n                return new Promise<boolean>((resolve) => {\n                  const tokens = tokenResponse.tokens;\n                  oktaAuth.tokenManager.setTokens(tokens, () => resolve(true));\n                  if (writeLogToConsole)\n                    // eslint-disable-next-line no-console\n                    console.log(\n                      'tokens have been refreshed through authorization_code grand type'\n                    );\n                });\n              },\n              (err) => {\n                if (writeLogToConsole) {\n                  // eslint-disable-next-line no-console\n                  console.log(\n                    err,\n                    'failed to refresh access token through authorization_code grand type'\n                  );\n                  // eslint-disable-next-line no-console\n                  console.log('logging out from the application...');\n                }\n                oktaAuth.tokenManager.clear();\n                if (authState) {\n                  authState.isAuthenticated = false;\n                }\n                navigate('/login', { state: { from: location } });\n                return false;\n              }\n            );\n          }\n        );\n      } else {\n        if (writeLogToConsole)\n          // eslint-disable-next-line no-console\n          console.log(\n            \"access token refresh is happening in a parallel process, let's just wait here...\"\n          );\n        return new Promise<boolean>((resolve) => {\n          setTimeout(() => resolve(true), 3000);\n        });\n      }\n    } else {\n      // eslint-disable-next-line no-console\n      if (writeLogToConsole) console.log('user is not logged in');\n      navigate('/login', { state: { from: location } });\n      return Promise.resolve(false);\n    }\n  };\n}\n","import { useOktaAuth } from '@okta/okta-react';\nimport { useDecodedToken } from './authorization.hook';\n\ntype UserInfo = {\n  email: string;\n  family_name: string;\n  given_name: string;\n  name: string;\n  preferred_username: string;\n};\n\nexport function useUserInfo() {\n  const decodedToken = useDecodedToken();\n  if (decodedToken) {\n    return {\n      email: decodedToken.email,\n      family_name: decodedToken.lastName,\n      given_name: decodedToken.firstName,\n      name: `${decodedToken.firstName} ${decodedToken.lastName}`,\n      preferred_username: decodedToken.login,\n    } as UserInfo;\n  }\n}\n\nexport function useIsAuthenticated() {\n  const oktaContext = useOktaAuth();\n  return oktaContext?.authState?.isAuthenticated === true;\n}\n\nexport function useIsTokenExpired() {\n  const tokenExpiry = useDecodedToken()?.exp;\n  return (\n    tokenExpiry !== undefined &&\n    tokenExpiry !== 0 &&\n    tokenExpiry < Math.round(Date.now() / 1000)\n  );\n}\n\nexport async function fetchIpAdrress(): Promise<string> {\n  const response = await fetch('/Site/ExternalHost/GetClientIp', {\n    headers: {\n      Accept: 'application/json',\n      'Content-Type': 'application/json',\n    },\n    method: 'GET',\n  });\n  if (response.ok) {\n    const data = await response.json();\n    return data['ClientIp'];\n  }\n  return '';\n}\n","import React, { ReactNode, useMemo } from 'react';\nimport { MFOutlet } from '@im/ui-lib/mf-utils';\nimport {\n  EnvVars,\n  buildConfigContext,\n  createBuildConfig,\n} from './build-config-context';\n\ntype Props = {\n  children: ReactNode;\n  envVars: EnvVars;\n  mfOutlets: MFOutlet[];\n};\n\nexport function BuildConfigProvider(props: Props) {\n  const { children, envVars = {}, mfOutlets } = props;\n\n  const buildConfig = useMemo(() => {\n    return createBuildConfig(envVars, mfOutlets);\n  }, [envVars, mfOutlets]);\n\n  const { Provider } = buildConfigContext;\n  return <Provider value={buildConfig}>{children}</Provider>;\n}\n","import { createContext } from 'react';\nimport { MFOutlet } from '@im/ui-lib/mf-utils';\n\nexport type EnvVars = { [k: string]: string };\n\nconst CEP_PREFIX = 'CEP__';\nconst INGRAM_PREFIX = 'INGRAM__';\n\ntype BuildEnvironment =\n  | 'development'\n  | 'production'\n  | 'productionbeta'\n  | 'productionbetax'\n  | 'staging'\n  | 'staging2'\n  | 'stagingx'\n  | 'test';\nconst buildEnvironments = [\n  'development',\n  'production',\n  'productionbeta',\n  'productionbetax',\n  'staging',\n  'staging2',\n  'stagingx',\n  'test',\n];\n\ntype RequiredKey = 'API_BASE';\ntype OptionalKey = 'DEV_PROXY_HOSTNAME' | 'API_GCP_BASE' | 'API_EU_GCP_BASE';\nconst requiredKeys = ['API_BASE'];\n\ntype RawBuildConfig = {\n  buildEnvironment: BuildEnvironment;\n} & { [rk in RequiredKey]: string } & Partial<{\n    [ok in OptionalKey]: string;\n  }> & { [k: string]: string };\n\nexport type BuildConfig = {\n  /** @deprecated */\n  mfOutlets: MFOutlet[];\n  vars: Readonly<RawBuildConfig>;\n};\n\nexport const buildConfigContext = createContext<BuildConfig | undefined>(\n  undefined\n);\n\nexport function createBuildConfig(\n  envVars: EnvVars,\n  mfOutlets: MFOutlet[]\n): BuildConfig {\n  const config: Partial<RawBuildConfig> = {};\n\n  Object.entries(envVars).forEach(([key, value]) => {\n    if (key.startsWith(CEP_PREFIX)) {\n      config[key.substring(CEP_PREFIX.length)] = value;\n    } else if (key.startsWith(INGRAM_PREFIX)) {\n      config[key.substring(INGRAM_PREFIX.length)] = value;\n    } else if (key === 'NODE_ENV') {\n      config.buildEnvironment = value as BuildEnvironment;\n    }\n  });\n\n  // Validate\n  const buildEnvironment = config.buildEnvironment || '';\n  if (!buildEnvironments.includes(buildEnvironment)) {\n    throw new Error(\n      `[BuildConfig] invalid NODE_ENV=${buildEnvironment}; Must be one of: ${JSON.stringify(\n        buildEnvironments\n      )}.`\n    );\n  }\n\n  requiredKeys.forEach((key) => {\n    if (!config[key]) {\n      throw new Error(`[BuildConfig] ${key} not set.`);\n    }\n  });\n\n  return {\n    mfOutlets,\n    // Freeze to prevent modifications.\n    vars: Object.freeze(config as RawBuildConfig),\n  };\n}\n","import { useContext } from 'react';\nimport { buildConfigContext } from './build-config-context';\n\nexport function useBuildConfig() {\n  const buildConfig = useContext(buildConfigContext);\n  if (!buildConfig) {\n    throw new Error(\n      'buildConfigContext value is undefined. Make sure you use the BuildConfigProvider before using the context.'\n    );\n  }\n  return buildConfig;\n}\n\nexport function useBuildVars() {\n  return useBuildConfig().vars;\n}\n\n/** @deprecated */\nexport function useMfOutlets() {\n  return useBuildConfig().mfOutlets;\n}\n","import React, { ReactNode, useEffect, useState } from 'react';\nimport wretch from 'wretch';\nimport { useBuildVars } from '../build-config';\nimport { SiteConfig, siteConfigContext } from './site-config-context';\nimport { getSameOriginApiBasePath } from '../../query/utils';\nimport { disableSameOriginRequests } from '../../query/query-consts';\n\nconst apiWretcher = wretch(undefined).options({\n  // https://developer.mozilla.org/en-US/docs/Web/API/Request/credentials\n  // credentials: 'include',\n  credentials: 'same-origin', // Default\n\n  headers: {\n    accept: 'application/json',\n    'content-type': 'application/json',\n  },\n\n  // https://developer.mozilla.org/en-US/docs/Web/API/Request/mode\n  mode: 'cors',\n});\n\ntype Props = {\n  children: ReactNode;\n};\n\nexport function SiteConfigProvider(props: Props) {\n  const { children } = props;\n\n  const buildVars = useBuildVars();\n\n  // TODO: Same-origin Config API cannot be enabled per country as config call contains siteCode.\n  //   This logic should be removed once once same-origin APIs is rollouted to ALL countries.\n  const shouldUseSameOriginApis =\n    buildVars.buildEnvironment !== 'production' &&\n    buildVars.buildEnvironment !== 'productionbeta' &&\n    buildVars.buildEnvironment !== 'development' &&\n    localStorage.getItem(disableSameOriginRequests) !== 'true';\n\n  const [value, setValue] = useState<SiteConfig | undefined>(undefined);\n\n  useEffect(() => {\n    let active = true;\n\n    /**\n     * Config API response is being cached. The 'ver' query param would be used to invalidate cache if necessary\n     */\n    const queryParams: { [key: string]: string | undefined } = {\n      ver: buildVars['CONFIG_API_VERSION'],\n    };\n\n    (async () => {\n      let wretcher = apiWretcher.url(\n        `${\n          shouldUseSameOriginApis\n            ? getSameOriginApiBasePath()\n            : buildVars.API_BASE\n        }/imonline-k8s-cep/cwc/config/v1/config`\n      );\n      // TODO: When same-origin APIs is rolled out to all countries on prod, the above wretcher definition\n      //   can be replaced with the below code to enable it for all envs, all countries.\n      // let wretcher = apiWretcher.url(\n      //   `${getSameOriginApiBasePath()/imonline-k8s-cep/cwc/config/v1/config`\n      // );\n\n      if (globalThis.location.origin.indexOf('://local') > -1) {\n        /**\n         * Note: hostname query param is always needed when running locally.\n         * Even when running stage and production builds locally in express or ngnix.\n         */\n        queryParams['hostname'] = buildVars.DEV_PROXY_HOSTNAME;\n      }\n\n      wretcher = wretcher.query(queryParams);\n\n      const siteConfig = await wretcher.get().json<SiteConfig>();\n\n      if (active) {\n        setValue(siteConfig);\n      }\n    })();\n\n    return () => {\n      active = false;\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [buildVars, setValue]);\n\n  if (!value) {\n    return null;\n  }\n\n  const { Provider } = siteConfigContext;\n  return <Provider value={value}>{children}</Provider>;\n}\n","import { createContext } from 'react';\n\nexport type SiteConfig = {\n  /** OKTA issuer */\n  authServer: string;\n\n  /** OKTA clientId */\n  clientId: string;\n\n  /** Default locale like: \"en-CA\".\n   * Defaults to first locale in `Accept-Language` header that exists in `supportedLocales`.\n   * If not found; (`Accept-Language` header missing or no locale in header exist in `supportedLocales`)\n   * then returns the first locale in `supportedLocales`.\n   */\n  defaultLocale: string;\n\n  /** Server environment like: \"stage1\" */\n  environment: string;\n\n  /** fullstory enabled like: true or false */\n  fullStoryEnabled: boolean;\n\n  //** redirect to IDP web site to login */\n  idpLogin: boolean;\n\n  /** authorization code flow vs interaction code flow */\n  interactionCodeFlow: boolean;\n\n  /** Site code like: \"ca\" */\n  siteCode: string;\n\n  /** Supported locales like: [\"en-CA\",\"fr-CA\"] */\n  supportedLocales: string[];\n};\n\nexport const siteConfigContext = createContext<SiteConfig | undefined>(\n  undefined\n);\n","import { useSiteConfig } from './useSiteConfig';\nimport { init as fullStoryInit } from '@fullstory/browser';\nimport { useEffect } from 'react';\n\nexport function useFullStory() {\n  const siteConfig = useSiteConfig();\n  useEffect(() => {\n    if (siteConfig.fullStoryEnabled) {\n      fullStoryInit({\n        debug: false, //Enables FullStory debug messages\n        host: 'fullstory.com', //Host name path of fullstory\n        namespace: 'FS', //Sets the global identifier for FullStory when conflicts with FS arise\n        orgId: 'P9XEH', //Sets your FullStory Org Id\n        recordCrossDomainIFrames: true, //Capture Cross Domain IFrame conetnt\n        recordOnlyThisIFrame: true, //Tells FullStory that the IFrame is the \"root\" of the recording and should be its own session\n        script: 'edge.fullstory.com/s/fs.js', //script path\n      });\n    }\n  }, [siteConfig]);\n}\n","import { useContext } from 'react';\nimport { siteConfigContext } from './site-config-context';\n\nexport function useSiteConfig() {\n  const siteConfig = useContext(siteConfigContext);\n  if (!siteConfig) {\n    throw new Error(\n      'siteConfigContext value is undefined. Make sure you use the SiteConfigProvider before using the context.'\n    );\n  }\n  return siteConfig;\n}\n","import { useEffect, useState } from 'react';\n\nconst DEFAULT_PAGE_TITLE = 'Xvantage';\n\n/** updatePageTitle: Sets page title for the consuming View component as the input string.\n * For setting page title on iFramed pages, see:\n * https://imonline.atlassian.net/wiki/spaces/DigitalT/pages/3070820435/X4C+Page+Titles#iFramed-Pages */\nexport function usePageTitle() {\n  const [pageTitle, setPageTitle] = useState(DEFAULT_PAGE_TITLE);\n\n  const updatePageTitle = (newPageTitle: string) => {\n    if (newPageTitle && pageTitle !== newPageTitle) {\n      setPageTitle(newPageTitle);\n    }\n  };\n\n  useEffect(() => {\n    document.title = pageTitle;\n    return () => {\n      document.title = DEFAULT_PAGE_TITLE;\n    };\n  }, [pageTitle]);\n\n  return { pageTitle, updatePageTitle };\n}\n","import { useMemo } from 'react';\nimport { useBuildVars } from '../build-config';\nimport { useSearchParams } from 'react-router-dom';\n\nexport enum IM360Regions {\n  AMER = 'AMER',\n  ANZ = 'ANZ',\n  APAC = 'APAC',\n  EMEA = 'EMEA',\n}\n\nconst useIM360Origin = () => {\n  const {\n    IM360_ORIGIN_AMER,\n    IM360_ORIGIN_ANZ,\n    IM360_ORIGIN_APAC,\n    IM360_ORIGIN_EMEA,\n  } = useBuildVars();\n\n  const [queryParams] = useSearchParams();\n  const im360Region = queryParams.get('region');\n\n  const IM360_ORIGIN = useMemo(() => {\n    switch (im360Region) {\n      case IM360Regions.AMER:\n        return IM360_ORIGIN_AMER;\n      case IM360Regions.EMEA:\n        return IM360_ORIGIN_EMEA;\n      case IM360Regions.APAC:\n        return IM360_ORIGIN_APAC;\n      case IM360Regions.ANZ:\n        return IM360_ORIGIN_ANZ;\n      default:\n        return IM360_ORIGIN_EMEA;\n    }\n  }, [\n    im360Region,\n    IM360_ORIGIN_AMER,\n    IM360_ORIGIN_EMEA,\n    IM360_ORIGIN_APAC,\n    IM360_ORIGIN_ANZ,\n  ]);\n\n  return IM360_ORIGIN;\n};\n\nexport default useIM360Origin;\n","import { useEffect, useMemo, useRef, useState } from 'react';\nimport { useNavigate } from 'react-router';\nimport { useLocalizationContext } from '@im/react-localization';\n\nimport { usePostToX4A } from './usePostToX4A';\nimport { useIsAuthenticated } from '../../auth/user-info.hooks';\nimport { useDecodedToken } from '../../auth/authorization.hook';\nimport { FRAME_ID, isValidOrigin } from './utils';\nimport useIM360Origin from './useIM360Origin';\n\nconst FRAME_STYLE_ID = 'x4a-frame-style';\n\ntype ObjectMap = {\n  [key: string]: any;\n};\n\n/** Use Xvantage frame: Identify if X4C is currently loaded in an X4A iframe\n * and handles configurations received from the parent application. */\nexport function useInX4AFrame() {\n  const isAuthenticated = useIsAuthenticated();\n  const decodedToken = useDecodedToken();\n  const context = useLocalizationContext();\n  const navigate = useNavigate();\n  const { postMessageToX4A } = usePostToX4A();\n\n  const isFrame = window.self !== window.top;\n  const ancestors = window.location.ancestorOrigins;\n  const IM360_Origin = useIM360Origin();\n\n  const [isInIM360Frame] = useState<boolean>(\n    isFrame && ancestors.contains(IM360_Origin)\n  );\n\n  const [isInX4AFrame, setIsInX4AFrame] = useState<boolean>(isFrame);\n\n  const listeningForPostMsg = useRef(false);\n  const x4cMounted = useRef(false);\n\n  const [hideFooter, setHideFooter] = useState<boolean>(isFrame);\n  const [hideHeader, setHideHeader] = useState<boolean>(isFrame);\n  const [hideSideNav, setHideSideNav] = useState<boolean>(isFrame);\n  const [searchParams, setSearchParams] = useState<ObjectMap>({});\n\n  const [selectedLocale, setSelectedLocale] = useState('');\n\n  const onPostMsgReceived = (event: MessageEvent) => {\n    //Messages from invalid origins should not be processed!\n    if (!isValidOrigin(event.origin)) return;\n    //Xv frame post messages should always contain xv-frame frameId\n    if (!event || event.data?.frameId !== FRAME_ID) return;\n    const {\n      action,\n      hideFooter,\n      hideHeader,\n      hideSideNav,\n      locale,\n      searchParams,\n      styles,\n    } = event.data;\n\n    if (!listeningForPostMsg.current && action === 'post-msg-ping') {\n      postMessageToX4A('post-msg-ready', { origin: window.location.origin });\n      listeningForPostMsg.current = true;\n    }\n\n    if (action === 'update-config') {\n      setHideFooter(hideFooter ?? true);\n      setHideHeader(hideHeader ?? true);\n      setHideSideNav(hideSideNav ?? true);\n\n      if (searchParams && Object.keys(searchParams)?.length > 0) {\n        setSearchParams(searchParams);\n      }\n\n      setIsInX4AFrame(true);\n\n      if (locale) {\n        if (!context.supportedLocales.includes(locale)) {\n          console.warn(\n            `Locale \"${locale}\" received from X4A frame config is not supported. Language not set. Supported locales: ${context.supportedLocales.toString()}`\n          );\n        } else {\n          setSelectedLocale(locale);\n        }\n      }\n\n      if (styles) {\n        const styleEle = document.getElementById(FRAME_STYLE_ID);\n        if (!styleEle) {\n          const ele = document.createElement('style');\n          ele.id = FRAME_STYLE_ID;\n          document.head.append(ele);\n        }\n        if (styleEle && styles !== styleEle.textContent)\n          styleEle.textContent = styles;\n      }\n    }\n\n    if (action === 'navigate-x4c-to') {\n      if (event.data?.route) {\n        navigate(event.data?.route);\n        return;\n      }\n    }\n  };\n\n  useEffect(() => {\n    if (isAuthenticated && isInX4AFrame && !x4cMounted.current) {\n      //Inform parent that X4C has mounted\n      postMessageToX4A('x4c-mounted', {\n        origin: window.location.origin,\n        x4cUser: decodedToken?.imoProfile.userName,\n      });\n      x4cMounted.current = true;\n\n      //Listener receives post messages from X4A\n      window.addEventListener('message', onPostMsgReceived);\n      return () => window.removeEventListener('message', onPostMsgReceived);\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [isAuthenticated]);\n\n  useEffect(() => {\n    const currLocale = context.locale;\n    if (selectedLocale && currLocale !== selectedLocale) {\n      context.setLocale(selectedLocale);\n    }\n  }, [context, selectedLocale]);\n\n  return useMemo(() => {\n    return {\n      isInIM360Frame,\n      isInX4AFrame,\n      xvFrameConfig: {\n        hideFooter,\n        hideHeader,\n        hideSideNav,\n        searchParams,\n      },\n    };\n  }, [\n    hideFooter,\n    hideHeader,\n    hideSideNav,\n    isInIM360Frame,\n    isInX4AFrame,\n    searchParams,\n  ]);\n}\n","import { useBuildVars } from '../build-config';\nimport useIM360Origin from './useIM360Origin';\nimport { FRAME_ID } from './utils';\n\nexport function usePostToX4A() {\n  const { X4A_ORIGIN } = useBuildVars();\n  const IM360_ORIGIN = useIM360Origin();\n  const postMessageToX4A = (\n    action: string,\n    payload?: { [key: string]: any },\n    isIM360 = false\n  ) => {\n    window.parent.postMessage(\n      {\n        action,\n        frameId: FRAME_ID,\n        ...payload,\n      },\n      isIM360 ? IM360_ORIGIN : X4A_ORIGIN\n    );\n  };\n  /** Updates the reseller context in X4A by calling impersonation API with the specified BCN. */\n  const updateImpersonatedReseller = (resellerId: string) => {\n    postMessageToX4A('impersonate-reseller', { resellerId });\n  };\n\n  /** Ends impersonation of the current reseller in X4A. */\n  const disableImpersonation = () => {\n    postMessageToX4A('disable-impersonation');\n  };\n\n  /** Re-renders the X4C iframe with the newly specified path. */\n  const updateX4CFramePath = (newPath: string, isInIM360Frame = false) => {\n    postMessageToX4A('update-frame-path', { newPath }, isInIM360Frame);\n  };\n\n  /** Navigates X4C app to the specified route or route. Open in new tab is false by default. */\n  const navigateToInX4A = (navOptions: {\n    countryCode?: string;\n    openInNewTab?: boolean;\n    url?: string;\n    x4aRoute?: string;\n  }) => {\n    postMessageToX4A('navigate-x4a-to', { navOptions });\n  };\n\n  return {\n    disableImpersonation,\n    navigateToInX4A,\n    postMessageToX4A,\n    updateImpersonatedReseller,\n    updateX4CFramePath,\n  };\n}\n","export const FRAME_ID = 'xv-frame';\n\n/** Returns true if the given string matches the https://subdomain.ingrammicro.com structure.\n * Subdomains and port number are optional, otherwise the string must match exactly. */\nexport function isValidOrigin(origin: string) {\n  const originRegEx =\n    /^(https:\\/\\/)([A-Za-z0-9-]*\\.){0,1}(ingrammicro\\.com){1}(:{1}[0-9]{0,8}){0,1}$/;\n  return originRegEx.test(origin);\n}\n","/* eslint-disable max-lines */\nimport wretch from 'wretch';\nimport { useQuery, queryOptions, UseQueryOptions } from '@tanstack/react-query';\n\nimport { useIsAuthenticated, useIsTokenExpired } from '../auth/user-info.hooks';\nimport { useRefreshAccessToken } from '../auth/useRefreshAccessToken';\nimport { useApiHeaders, ExtraHeaders } from './useApiHeaders';\nimport { useApiBase } from './useApiBase';\n\ntype ObjectMap = {\n  [key: string]: any;\n};\n\ntype ExtraQueryOptions = {\n  isEncodedParams?: boolean;\n  isLogoutApi?: boolean;\n};\n\nconst apiWretcher = wretch(undefined).options({\n  credentials: 'same-origin',\n  mode: 'cors',\n});\n\nexport function useApiQuery<TO = ObjectMap>(\n  route: string,\n  params?: ObjectMap,\n  useQueryOptions?: Partial<UseQueryOptions<TO>>,\n  extraHeaders?: ExtraHeaders,\n  extraQueryOptions?: ExtraQueryOptions\n) {\n  const isAuthenticated = useIsAuthenticated();\n  const isTokenExpired = useIsTokenExpired();\n  const apiGet = useApiGet<TO>(extraQueryOptions);\n\n  // Wait for authorization\n  const enabled =\n    ((!isTokenExpired && isAuthenticated) ||\n      !!extraQueryOptions?.isLogoutApi) &&\n    (useQueryOptions?.enabled || useQueryOptions?.enabled === undefined);\n\n  const contentOptions = () => {\n    return queryOptions<TO>({\n      enabled,\n      queryFn: () => apiGet(route, params, extraHeaders),\n      queryKey: [route, params, extraHeaders],\n      retry: 0,\n    });\n  };\n\n  return useQuery<TO>({ ...useQueryOptions, ...contentOptions() });\n}\n\nexport function useApiGet<TO = ObjectMap>(\n  extraQueryOptions?: ExtraQueryOptions\n) {\n  const isLogoutQuery = !!extraQueryOptions?.isLogoutApi;\n  const isEncodedParams =\n    extraQueryOptions?.isEncodedParams &&\n    localStorage.getItem('useUrlEncoding') === 'true';\n  const getBaseUrl = useApiBase();\n  const getApiHeaders = useApiHeaders(isLogoutQuery, isEncodedParams);\n  const refreshAccessToken = useRefreshAccessToken();\n\n  return function (\n    route: string,\n    params?: ObjectMap,\n    extraHeaders?: ExtraHeaders\n  ) {\n    const apiHeaders = getApiHeaders(extraHeaders);\n    const apiBase = getBaseUrl(route);\n    const url = `${apiBase}${route}`;\n\n    let apiCall = apiWretcher.url(url);\n    if (params) {\n      apiCall = apiCall.query(params);\n    }\n    return apiCall\n      .headers(apiHeaders)\n      .get()\n      .json<TO>()\n      .catch((error) => {\n        if (error?.response?.status === 401 && !isLogoutQuery) {\n          return refreshAccessToken().then((success) => {\n            if (success) {\n              //repeating API call\n              return apiCall\n                .headers(getApiHeaders(extraHeaders))\n                .get()\n                .json<TO>()\n                .catch((err) => {\n                  throw err;\n                });\n            } else {\n              throw error;\n            }\n          });\n        } else {\n          throw error;\n        }\n      });\n  };\n}\n\nexport function useApiPost<TO = ObjectMap>( //FIXME\n  extraQueryOptions?: ExtraQueryOptions\n) {\n  const isLogoutQuery = !!extraQueryOptions?.isLogoutApi;\n  // const isEncodedParams =\n  //   extraQueryOptions?.isEncodedParams &&\n  //   localStorage.getItem('useUrlEncoding') === 'true';\n  const getBaseUrl = useApiBase();\n  const getApiHeaders = useApiHeaders(isLogoutQuery);\n  const refreshAccessToken = useRefreshAccessToken();\n\n  return function (\n    route: string,\n    body: ObjectMap,\n    params?: ObjectMap,\n    extraHeaders?: ExtraHeaders\n  ) {\n    const url = `${getBaseUrl(route)}${route}`;\n\n    let apiCall = apiWretcher.url(url);\n    if (params) {\n      apiCall = apiCall.query(params);\n    }\n    return apiCall\n      .headers(getApiHeaders(extraHeaders))\n      .body(JSON.stringify(body))\n      .post()\n      .json<TO>()\n      .catch((error) => {\n        if (error?.response?.status === 401 && !isLogoutQuery) {\n          return refreshAccessToken().then((success) => {\n            if (success) {\n              //repeating API call\n              return apiCall\n                .headers(getApiHeaders(extraHeaders))\n                .body(JSON.stringify(body))\n                .post()\n                .json<TO>()\n                .catch((err) => {\n                  throw err;\n                });\n            } else {\n              throw error;\n            }\n          });\n        } else {\n          throw error;\n        }\n      });\n  };\n}\n\nexport function useApiPostFormData<TO = ObjectMap>(\n  extraQueryOptions?: ExtraQueryOptions\n) {\n  const isLogoutQuery = !!extraQueryOptions?.isLogoutApi;\n  const getBaseUrl = useApiBase();\n  const getApiHeaders = useApiHeaders(isLogoutQuery);\n  const refreshAccessToken = useRefreshAccessToken();\n\n  return function (\n    route: string,\n    formData: ObjectMap,\n    params?: ObjectMap,\n    extraHeaders?: ExtraHeaders\n  ) {\n    const apiheaders = getApiHeaders(extraHeaders);\n    delete apiheaders['content-type']; //The browser has to infer the content-type automatically for multipart requests.\n\n    const url = `${getBaseUrl(route)}${route}`;\n\n    let apiCall = apiWretcher.url(url);\n    if (params) {\n      apiCall = apiCall.query(params);\n    }\n    return apiCall\n      .headers(apiheaders)\n      .formData(formData)\n      .post()\n      .json<TO>()\n      .catch((error) => {\n        if (error?.response?.status === 401 && !isLogoutQuery) {\n          return refreshAccessToken().then((success) => {\n            if (success) {\n              //repeating API call\n              return apiCall\n                .headers(getApiHeaders(extraHeaders))\n                .formData(formData)\n                .post()\n                .json<TO>()\n                .catch((err) => {\n                  throw err;\n                });\n            } else {\n              throw error;\n            }\n          });\n        } else {\n          throw error;\n        }\n      });\n  };\n}\n\nexport function useApiPatch<TO = ObjectMap>() {\n  const getBaseUrl = useApiBase();\n  const getApiHeaders = useApiHeaders();\n  const refreshAccessToken = useRefreshAccessToken();\n\n  return function (\n    route: string,\n    body: ObjectMap,\n    params?: ObjectMap,\n    extraHeaders?: ExtraHeaders\n  ) {\n    const url = `${getBaseUrl(route)}${route}`;\n\n    let apiCall = apiWretcher.url(url);\n    if (params) {\n      apiCall = apiCall.query(params);\n    }\n    return apiCall\n      .headers(getApiHeaders(extraHeaders))\n      .body(JSON.stringify(body))\n      .patch()\n      .json<TO>()\n      .catch((error) => {\n        if (error?.response?.status === 401) {\n          return refreshAccessToken().then((success) => {\n            if (success) {\n              //repeating API call\n              return apiCall\n                .headers(getApiHeaders(extraHeaders))\n                .body(JSON.stringify(body))\n                .patch()\n                .json<TO>()\n                .catch((err) => {\n                  throw err;\n                });\n            } else {\n              throw error;\n            }\n          });\n        } else {\n          throw error;\n        }\n      });\n  };\n}\n\nexport function useApiDelete<TO = ObjectMap>() {\n  const getBaseUrl = useApiBase();\n  const getApiHeaders = useApiHeaders();\n  const refreshAccessToken = useRefreshAccessToken();\n\n  return function (\n    route: string,\n    body?: ObjectMap,\n    params?: ObjectMap,\n    extraHeaders?: ExtraHeaders\n  ) {\n    const url = `${getBaseUrl(route)}${route}`;\n\n    let apiCall = apiWretcher.url(url);\n    if (body) {\n      apiCall = apiCall.body(JSON.stringify(body));\n    }\n    if (params) {\n      apiCall = apiCall.query(params);\n    }\n    return apiCall\n      .headers(getApiHeaders(extraHeaders))\n      .delete()\n      .json<TO>()\n      .catch((error) => {\n        if (error?.response?.status === 401) {\n          return refreshAccessToken().then((success) => {\n            if (success) {\n              //repeating API call\n              return apiCall\n                .headers(getApiHeaders(extraHeaders))\n                .delete()\n                .json<TO>()\n                .catch((err) => {\n                  throw err;\n                });\n            } else {\n              throw error;\n            }\n          });\n        } else {\n          throw error;\n        }\n      });\n  };\n}\n\nexport function useApiPut<TO = ObjectMap>(\n  extraQueryOptions?: ExtraQueryOptions\n) {\n  // const isEncodedParams =\n  //   extraQueryOptions?.isEncodedParams &&\n  //   localStorage.getItem('useUrlEncoding') === 'true';\n  const getBaseUrl = useApiBase();\n  const getApiHeaders = useApiHeaders();\n  const refreshAccessToken = useRefreshAccessToken();\n\n  return function (\n    route: string,\n    body: ObjectMap,\n    params?: ObjectMap,\n    extraHeaders?: ExtraHeaders\n  ) {\n    const url = `${getBaseUrl(route)}${route}`;\n\n    let apiCall = apiWretcher.url(url);\n    if (body) {\n      apiCall = apiCall.body(JSON.stringify(body));\n    }\n    if (params) {\n      apiCall = apiCall.query(params);\n    }\n    return apiCall\n      .headers(getApiHeaders(extraHeaders))\n      .body(JSON.stringify(body))\n      .put()\n      .json<TO>()\n      .catch((error) => {\n        if (error?.response?.status === 401) {\n          return refreshAccessToken().then((success) => {\n            if (success) {\n              //repeating API call\n              return apiCall\n                .headers(getApiHeaders(extraHeaders))\n                .body(JSON.stringify(body))\n                .put()\n                .json<TO>()\n                .catch((err) => {\n                  throw err;\n                });\n            } else {\n              throw error;\n            }\n          });\n        } else {\n          throw error;\n        }\n      });\n  };\n}\n\n/**\n * WARNING: USE react-query `useMutation` for true POST apis that MUTATE data.\n *\n * This `useApiPostQuery` is only for apis that retrieve data and\n * DO NOT MUTATE data.\n * These apis should have been implemented with GET method\n * but currently use POST method instead.\n */\n// eslint-disable-next-line max-params\nexport function useApiPostQuery<TO = ObjectMap>(\n  route: string,\n  body: ObjectMap,\n  params?: ObjectMap,\n  useQueryOptions?: Partial<UseQueryOptions<TO>>,\n  extraHeaders?: ExtraHeaders,\n  extraQueryOptions?: ExtraQueryOptions\n) {\n  const isAuthenticated = useIsAuthenticated();\n  const apiPost = useApiPost<TO>(extraQueryOptions);\n\n  // Wait for authorization\n  const enabled =\n    (isAuthenticated || !!extraQueryOptions?.isLogoutApi) &&\n    (useQueryOptions?.enabled || useQueryOptions?.enabled === undefined);\n\n  const contentOptions = () => {\n    return queryOptions({\n      enabled,\n      queryFn: () => apiPost(route, body, params, extraHeaders),\n      queryKey: [route, body, params, extraHeaders],\n      retry: 0,\n    });\n  };\n\n  return useQuery(contentOptions());\n}\n","// eslint-disable-next-line import/no-nodejs-modules\nimport { Buffer } from 'buffer';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport { parse, ParsedQs, stringify } from 'qs';\n\ntype ObjectMap = {\n  [key: string]: string;\n};\n\nexport function encodeParam(param: string): string {\n  const useUrlEncoding = localStorage.getItem('useUrlEncoding') === 'true';\n  if (useUrlEncoding) {\n    return param || param != null\n      ? Buffer.from(encodeURIComponent(param.toString()), 'utf8').toString(\n          'base64'\n        )\n      : '';\n  } else return param;\n}\n\nexport function decodeParam(param: string): string {\n  const useUrlEncoding = localStorage.getItem('useUrlEncoding') === 'true';\n  if (!useUrlEncoding) return param;\n\n  if (!param) return '';\n\n  try {\n    const base64Decoded = Buffer.from(param, 'base64').toString('utf8');\n    return decodeURIComponent(base64Decoded);\n  } catch (error) {\n    console.warn('Failed to decode parameter:', error);\n    return param;\n  }\n}\n\nfunction encodeParams(params: ParsedQs): ObjectMap {\n  const encodedParams: ObjectMap = {};\n  Object.keys(params).forEach((prop: string) => {\n    encodedParams[prop] = encodeParam(params[prop] as string);\n  });\n  return encodedParams;\n}\n\nfunction decodeParams(params: ParsedQs): ObjectMap {\n  const decodedParams: ObjectMap = {};\n  if (params) {\n    Object.keys(params).forEach((prop: string) => {\n      decodedParams[prop] = decodeParam(params[prop] as string);\n    });\n  }\n  return decodedParams;\n}\n\nexport function encodeDecodeUrl(url: string, decode = false): string {\n  if (url.indexOf('?') === -1) {\n    url = `?${url}`;\n  }\n  const [route, params] = url.split('?');\n  const parsedParams = parse(params);\n  const resultParams = decode\n    ? decodeParams(parsedParams)\n    : encodeParams(parsedParams);\n  const resultUrl = `${route}?${stringify(resultParams)}`;\n  return resultUrl;\n}\n","export const disableSameOriginRequests = 'disableSameOriginRequests';\n","import { useBuildVars, useSiteConfig } from '../config';\nimport GCP_US_ROUTES_CONFIG from './gcp-routes.json';\nimport GCP_EU_ROUTES_CONFIG from './gcp-routes-eu.json';\nimport { getSameOriginApiBasePath, useSameOriginApis } from './utils';\n\nexport function useApiBase() {\n  const buildVars = useBuildVars();\n  const siteConfig = useSiteConfig();\n  const shouldUseSameOriginApis = useSameOriginApis();\n\n  const GCPHost = buildVars.API_GCP_BASE;\n  const EUGCPHost = buildVars.API_EU_GCP_BASE;\n  const gcp_routes: string[] = getRoutes(\n    GCP_US_ROUTES_CONFIG,\n    buildVars.buildEnvironment,\n    siteConfig.siteCode\n  );\n  const gcp_eu_routes: string[] = getRoutes(\n    GCP_EU_ROUTES_CONFIG,\n    buildVars.buildEnvironment,\n    siteConfig.siteCode\n  );\n\n  return (route: string) => {\n    if (route?.toLowerCase().startsWith('http')) {\n      return '';\n    }\n    if (shouldUseSameOriginApis()) {\n      return getSameOriginApiBasePath();\n    }\n\n    let apiBase = buildVars.API_BASE;\n    if (GCPHost || EUGCPHost) {\n      const isGCP =\n        typeof buildVars.API_GCP_BASE === 'string' &&\n        gcp_routes.some((path) => {\n          return route.includes(path);\n        });\n      const isEUGCP =\n        typeof buildVars['API_EU_GCP_BASE'] === 'string' &&\n        gcp_eu_routes.some((path) => {\n          return route.includes(path);\n        });\n      if (isEUGCP) {\n        apiBase = buildVars['API_EU_GCP_BASE'];\n      } else if (isGCP) {\n        apiBase = buildVars.API_GCP_BASE;\n      }\n    }\n\n    return apiBase;\n  };\n}\n\ntype RouteConfig = {\n  countries: string[];\n  environment: string;\n  routes: string[];\n};\n\nfunction getRoutes(\n  routesConfig: RouteConfig[],\n  buildEnvironment: string,\n  siteCode: string\n) {\n  return (\n    routesConfig\n      .filter(\n        (r) =>\n          (r.environment === '*' || r.environment === buildEnvironment) &&\n          (r.countries.includes('*') || r.countries.includes(siteCode))\n      )\n      .flatMap((r) => r.routes) || []\n  );\n}\n","import { v4 as uuidV4 } from 'uuid';\nimport { useBuildVars, useSiteConfig } from '../config';\nimport {\n  getAuthorizationHeader,\n  useDecodedToken,\n} from '../auth/authorization.hook';\nimport { useLocalizationContext } from '@im/react-localization';\n\nexport type ExtraHeaders = Partial<{\n  [headerName: string]: string;\n}>;\n\nconst win = window as any;\nconst temp_session_Id = uuidV4(); // used if datadog session id is not available\n\nexport function useApiHeaders(\n  isLoggedOutMode = false,\n  isEncodedParams = false\n) {\n  const siteConfig = useSiteConfig();\n  const buildConfig = useBuildVars();\n  const decodedToken = useDecodedToken();\n  const l10nContext = useLocalizationContext();\n\n  return (extraHeaders?: ExtraHeaders) => {\n    const authorization = getAuthorizationHeader();\n    const correlationId = uuidV4();\n    const { locale } = l10nContext;\n    const [, countryCode] = locale.split('-');\n    const { environment, siteCode } = siteConfig;\n\n    const resellerId = decodedToken?.resellerId || '';\n    const userId = decodedToken?.userId || '';\n    const dd_session_id =\n      win.DD_RUM?.getInternalContext()?.session_id || temp_session_Id;\n\n    const headers = {\n      // New APIs Headers\n      'IM-AcceptLanguage': locale, // en-US [deprecated-soon]\n      'IM-CorrelationID': correlationId,\n      'IM-CountryCode': countryCode, // US\n      'IM-CustomerNumber': resellerId,\n      'IM-DDSessionId': dd_session_id, // session_id used for throttling rate limit for no-auth\n      'IM-Environment': environment, // [deprecated-soon]\n      'IM-MicroFrontendID': 'cep_app',\n      'IM-ResellerID': resellerId,\n      'IM-SenderID': 'IMCEP',\n      'IM-SiteCode': siteCode,\n      'IM-UserID': userId,\n\n      accept: 'application/json',\n      'accept-language': locale, // en-US\n      authorization,\n      'content-type': 'application/json',\n\n      // Old APIs Headers\n      correlationId,\n      countryCode, // US\n      customerNumber: resellerId,\n      distributionChannel: decodedToken?.imoProfile.distributionChannel,\n      division: decodedToken?.imoProfile.division,\n      isoCountryCode: countryCode, // US\n      ...extraHeaders,\n    } as { [headerName: string]: string };\n\n    if (isLoggedOutMode) {\n      headers['IM-ApiKey'] = buildConfig['API_KEY'];\n    }\n    if (isEncodedParams) {\n      headers['Decodeurl'] = 'true';\n    }\n    return headers;\n  };\n}\n","/* eslint-disable no-console */\nimport { useCallback } from 'react';\nimport { useBuildVars } from '../config/build-config';\nimport { disableSameOriginRequests } from './query-consts';\n// import { useSiteConfig } from '../config/site-config/useSiteConfig';\n\nconst win = window as any;\n\nwin.toggleSameOriginApis = () => {\n  const isDisabled = localStorage.getItem(disableSameOriginRequests);\n  const newVal = isDisabled === 'true' ? 'false' : 'true';\n  localStorage.setItem(disableSameOriginRequests, newVal);\n  console.log(\n    `[cross origin requests] ${\n      newVal === 'true' ? 'enabled' : 'disabled'\n    } - refresh page to see changes`\n  );\n};\n\nexport const getSameOriginApiBasePath = () => {\n  return `/api`;\n};\n\n// Controls whether to use same origin APIs or not. NOTE: Config API call is\n//  out of scope of QueryClient and handled separately in SiteConfigProvider.tsx.\nexport const useSameOriginApis = () => {\n  const buildVars = useBuildVars();\n  // const { siteCode } = useSiteConfig();\n\n  const shouldUseSameOriginApis = useCallback(() => {\n    if (buildVars.buildEnvironment === 'development') return false;\n    if (localStorage.getItem(disableSameOriginRequests) === 'true')\n      return false;\n    // if (siteCode === 'us') return true;\n    return (\n      buildVars.buildEnvironment !== 'production' &&\n      buildVars.buildEnvironment !== 'productionbeta' &&\n      localStorage.getItem(disableSameOriginRequests) !== 'true'\n    );\n  }, [buildVars.buildEnvironment]);\n\n  return shouldUseSameOriginApis;\n};\n"],"names":["getToken","authState","window","ImAuthState","accessToken","getAuthorizationHeader","token","tokenType","undefined","useDecodedToken","useMemo","jwt_decode","useRoles","decodedToken","role","useRefreshAccessToken","writeLogToConsole","oktaAuth","useOktaAuth","location","useLocation","navigate","useNavigate","isAuthenticated","tokenTimestamp","Date","now","timestamp","sessionStorage","getItem","setItem","toString","console","log","renewTokens","then","tokens","Promise","resolve","tokenManager","setTokens","err","getWithoutPrompt","tokenResponse","clear","state","from","setTimeout","useUserInfo","email","family_name","lastName","given_name","firstName","name","preferred_username","login","useIsAuthenticated","oktaContext","useIsTokenExpired","tokenExpiry","exp","Math","round","async","fetchIpAdrress","response","fetch","headers","Accept","method","ok","json","BuildConfigProvider","props","children","envVars","mfOutlets","buildConfig","createBuildConfig","Provider","buildConfigContext","React","value","CEP_PREFIX","INGRAM_PREFIX","buildEnvironments","requiredKeys","createContext","config","Object","entries","forEach","key","startsWith","substring","length","buildEnvironment","includes","Error","JSON","stringify","vars","freeze","useBuildConfig","useContext","useBuildVars","useMfOutlets","apiWretcher","wretch","options","credentials","accept","mode","SiteConfigProvider","buildVars","shouldUseSameOriginApis","localStorage","disableSameOriginRequests","setValue","useState","useEffect","active","queryParams","ver","wretcher","url","getSameOriginApiBasePath","API_BASE","globalThis","origin","indexOf","DEV_PROXY_HOSTNAME","query","siteConfig","get","siteConfigContext","useFullStory","useSiteConfig","fullStoryEnabled","fullStoryInit","debug","host","namespace","orgId","recordCrossDomainIFrames","recordOnlyThisIFrame","script","DEFAULT_PAGE_TITLE","usePageTitle","pageTitle","setPageTitle","document","title","updatePageTitle","newPageTitle","IM360Regions","useIM360Origin","IM360_ORIGIN_AMER","IM360_ORIGIN_ANZ","IM360_ORIGIN_APAC","IM360_ORIGIN_EMEA","useSearchParams","im360Region","AMER","EMEA","APAC","ANZ","FRAME_STYLE_ID","useInX4AFrame","context","useLocalizationContext","postMessageToX4A","usePostToX4A","isFrame","self","top","ancestors","ancestorOrigins","IM360_Origin","isInIM360Frame","contains","isInX4AFrame","setIsInX4AFrame","listeningForPostMsg","useRef","x4cMounted","hideFooter","setHideFooter","hideHeader","setHideHeader","hideSideNav","setHideSideNav","searchParams","setSearchParams","selectedLocale","setSelectedLocale","onPostMsgReceived","event","isValidOrigin","data","frameId","FRAME_ID","action","locale","styles","current","keys","supportedLocales","warn","styleEle","getElementById","ele","createElement","id","head","append","textContent","route","x4cUser","imoProfile","userName","addEventListener","removeEventListener","currLocale","setLocale","xvFrameConfig","X4A_ORIGIN","IM360_ORIGIN","payload","isIM360","parent","postMessage","disableImpersonation","navigateToInX4A","navOptions","updateImpersonatedReseller","resellerId","updateX4CFramePath","newPath","test","useApiQuery","params","useQueryOptions","extraHeaders","extraQueryOptions","isTokenExpired","apiGet","useApiGet","enabled","isLogoutApi","useQuery","queryOptions","queryFn","queryKey","retry","isLogoutQuery","isEncodedParams","getBaseUrl","useApiBase","getApiHeaders","useApiHeaders","refreshAccessToken","apiHeaders","apiCall","catch","error","status","success","useApiPost","body","post","useApiPostFormData","formData","apiheaders","useApiPatch","patch","useApiDelete","delete","useApiPut","put","useApiPostQuery","apiPost","encodeParam","param","Buffer","encodeURIComponent","decodeParam","base64Decoded","decodeURIComponent","encodeDecodeUrl","decode","split","parsedParams","parse","resultParams","decodedParams","prop","decodeParams","encodedParams","encodeParams","useSameOriginApis","GCPHost","API_GCP_BASE","EUGCPHost","API_EU_GCP_BASE","gcp_routes","getRoutes","GCP_US_ROUTES_CONFIG","siteCode","gcp_eu_routes","GCP_EU_ROUTES_CONFIG","toLowerCase","apiBase","isGCP","some","path","routesConfig","filter","r","environment","countries","flatMap","routes","win","temp_session_Id","uuidV4","isLoggedOutMode","l10nContext","authorization","correlationId","countryCode","userId","DD_RUM","getInternalContext","session_id","customerNumber","distributionChannel","division","isoCountryCode","toggleSameOriginApis","newVal","useCallback"],"sourceRoot":""}