{"version":3,"file":"static/js/3fd6125caab26b4c61f1.bundle.js","mappings":";+qBAAA,MAAMA,EAAU,CAAEC,QAAS,GAAIC,YAAa,IAElCC,EAAoBC,IAClBJ,EAAQE,YAAYE,IACpBJ,EAAQE,YAAYE,GAAYC,SAChCL,EAAQE,YAAYE,GAAYC,QAAQC,WACxCN,EAAQE,YAAYE,GAAYC,QAAQC,UAAUC,GAClDP,EAAQE,YAAYF,EAAQE,YAAYE,GAAYC,QAAQC,UAAUC,IAAMP,EAAQE,YAAYE,GAEhGI,OAAOC,KAAKT,EAAQE,YAAYE,IAAe,IAAIM,SAAQC,IACnDX,EAAQE,YAAYE,GAAYO,IAChCX,EAAQE,YAAYE,GAAYO,GAAYL,WAC5CN,EAAQE,YAAYE,GAAYO,GAAYL,UAAUM,SACtDZ,EAAQE,YAAYF,EAAQE,YAAYE,GAAYO,GAAYL,UAAUC,IAAMP,EAAQE,YAAYE,GAAYO,QA2B5H,CACI,MAAMP,EAAa,mHACnBJ,EAAQE,YAAYE,GAAcS,EAAQ,KAC1CV,EAAiBC,GAGrB,CACI,MAAMA,EAAa,yFACnBJ,EAAQE,YAAYE,GAAcS,EAAQ,MAC1CV,EAAiBC,GAGrB,CACI,MAAMA,EAAa,iGACnBJ,EAAQE,YAAYE,GAAcS,EAAQ,MAC1CV,EAAiBC,GAGrB,CACI,MAAMA,EAAa,+FACnBJ,EAAQE,YAAYE,GAAcS,EAAQ,MAC1CV,EAAiBC,GAGrB,CACI,MAAMA,EAAa,gGACnBJ,EAAQE,YAAYE,GAAcS,EAAQ,MAC1CV,EAAiBC,GAGrB,CACI,MAAMA,EAAa,4GACnBJ,EAAQE,YAAYE,GAAcS,EAAQ,MAC1CV,EAAiBC,GAGrB,CACI,MAAMA,EAAa,wFACnBJ,EAAQE,YAAYE,GAAcS,EAAQ,MAC1CV,EAAiBC,GAGrB,CACI,MAAMA,EAAa,wFACnBJ,EAAQE,YAAYE,GAAcS,EAAQ,MAC1CV,EAAiBC,GAGrB,CACI,MAAMA,EAAa,8FACnBJ,EAAQE,YAAYE,GAAcS,EAAQ,MAC1CV,EAAiBC,GAGrB,CACI,MAAMA,EAAa,0FACnBJ,EAAQE,YAAYE,GAAcS,EAAQ,MAC1CV,EAAiBC,GAGrB,CACI,MAAMA,EAAa,8GACnBJ,EAAQE,YAAYE,GAAcS,EAAQ,KAC1CV,EAAiBC,GAGrB,CACI,MAAMA,EAAa,4GACnBJ,EAAQE,YAAYE,GAAcS,EAAQ,KAC1CV,EAAiBC,GAGrB,CACI,MAAMA,EAAa,sGACnBJ,EAAQE,YAAYE,GAAcS,EAAQ,KAC1CV,EAAiBC,GAGrB,CACI,MAAMA,EAAa,4GACnBJ,EAAQE,YAAYE,GAAcS,EAAQ,KAC1CV,EAAiBC,GAIzBU,OAAOC,aAAeD,OAAOC,cAAgB,GAC7CD,OAAOC,aAAad,QAAOe,EAAAA,EAAA,GACpBF,OAAOC,aAAad,SAAW,IAC/BD,EAAQC,SAGXa,OAAOC,aAAaE,mBAAqB,GACzCH,OAAOC,aAAaE,mBAA8B,UAACD,EAAA,GAC5ChB,EAAQE,kHC3HhB,MAAMgB,EAAbC,cACW,KAAAC,YAAc,IAAM,4BACpB,KAAAC,mBAAqB,IAAM,4BAC3B,KAAAC,cAAgB,IAA0B,eAgBrD,QAAeC,EAAAA,GAAoC,CAC/CC,OAVJC,eAAsBC,EAA6BC,GAA4B,IAAAC,EAC3E,MAAMC,QAAmD,QAApCD,EAAME,EAAAA,GAAiBC,qBAAa,IAAAH,OAAA,EAA9BA,EAAgCI,eACvD,6BACAL,EAAIM,eAAeC,YAAYC,UAE7BC,EAAWP,MAAAA,OAAY,EAAZA,EAAcQ,MAC/B,OAAOD,MAAAA,EAAAA,EAAY,IAKnB7B,GAAI,uBACJmB,MAhBiBY,GACV,IAAIpB,gFCmDfqB,EAAAA,EAAAA,IAAqB,CACjBC,SAAU,qDACVC,eA3BmBhB,MAAOiB,EAAwCC,EAAqBC,KACvF,GAAI9B,QAAUA,OAAO+B,WAAa/B,OAAO+B,UAAUC,UAAW,CAC1D,MAAMC,EAAaC,MAAMC,QAAQN,GAAQA,EAAK,GAAKA,EAC7CO,EAA6BN,EAAcX,eAAekB,cAAcD,eAC9E,IAAIE,EAAgC,GAGpC,GAAIF,EACA,IACIE,QAAsBC,EAAAA,EAAAA,GAAiCH,EAAgBN,GACzE,MAAOU,GACLV,EAAcE,UAAUQ,MAAM,mEAAoEA,GAK1GxC,OAAO+B,UAAUC,UAAUS,SAASC,EAAAA,GAAeC,UAAW,CAC1DC,OAAQX,EAAWY,GACnBC,YAAab,EAAWc,QAAUd,EAAWc,QAAQC,WAAa,GAClEC,SAAUX,EACVY,QAASjB,EAAWkB,YAAclB,EAAWkB,YAAYH,WAAa,OAQ9EI,cArDoBzC,MAAO0C,EAAuCvB,KAClE,IACI,MAAMwB,EAAcpB,MAAMC,QAAQkB,GAA+BA,EAAO,GAA0BA,EAGlG,GAAIC,EAAYC,aAAkD,mBAA5BD,EAAYC,YAA4B,CAC1E,MAAMC,EAAqBF,EAAYC,cACvC,GAAIC,GAAsBA,EAAmBC,UAGzC,YADA3B,EAAcX,eAAekB,cAAcD,eAAiBoB,EAAmBC,WAIvF3B,EAAcE,UAAU0B,MAAM,qEAChC,MAAOC,GACL7B,EAAcE,UAAU0B,MAAM,yCAA0CC,mFCiBhFlC,EAAAA,EAAAA,IAAqB,CACjBC,SAAU,6CACVC,eA1BkBhB,MAAOiB,EAAwCC,EAAqBC,KACtF,GAAI9B,QAAUA,OAAO+B,WAAa/B,OAAO+B,UAAUC,UAAW,CAC1D,MAAMC,EAAaC,MAAMC,QAAQN,GAAQA,EAAK,GAAKA,EACnD,IAAI+B,EAAuC,GAG3C,GAAI3B,GAAcA,EAAW4B,WAAa3B,MAAMC,QAAQF,EAAW4B,YAAc5B,EAAW4B,UAAUC,OAAS,EAC3G,IACIF,QAA6BrB,EAAAA,EAAAA,GAAiCN,EAAW4B,UAAW/B,GACtF,MAAOU,GACLV,EAAcE,UAAUQ,MAAM,+DAAgEA,GAKtGxC,OAAO+B,UAAUC,UAAUS,SAASC,EAAAA,GAAeqB,SAAU,CACzDnB,OAAQX,EAAWY,GACnBC,YAAab,EAAWc,QAAUd,EAAWc,QAAQC,WAAa,GAClEC,SAAUW,EACVV,QAASjB,EAAWkB,YAAclB,EAAWkB,YAAYH,WAAa,OAQ9EI,cArCmBzC,MAAAA,8ECavBc,EAAAA,EAAAA,IAAqB,CACjBC,SAAU,mDACVC,eAjBiBhB,MACjBiB,EACAoC,EACAlC,KAKA,GAHAkC,QAAsBC,QAAQC,QAAQhC,MAAMC,QAAQ6B,GAAiBA,EAAc,GAAKA,GAGrE,CACf,MAAMG,GAAcC,EAAAA,EAAAA,GAAgCJ,GACpDlC,EAAcX,eAAekB,cAAc8B,EAAYE,YAAcF,EACrErC,EAAcX,eAAekB,cAAcK,EAAAA,GAAe4B,iBAAmBH,EAAc,CAACA,GAAe,KAO/Gf,cAtBkBzC,MAAAA,2ECqBtBc,EAAAA,EAAAA,IAAqB,CACjBC,SAAU,oDACVC,eApBkBhB,MAClBiB,EACA2C,EACAzC,KAEKI,MAAMC,QAAQoC,KACfA,EAAiB,CAACA,IAGtBA,EAAe3E,SAAQe,MAAAA,IACnB,GAAI6D,EAAS,CACTA,QAAgBP,QAAQC,QAAQM,GAChC,MAAML,GAAcC,EAAAA,EAAAA,GAAgCI,GACpD1C,EAAcX,eAAekB,cAAc8B,EAAYE,YAAcF,OAQ7Ef,cAzBmBzC,MAAAA,2ECsBvBc,EAAAA,EAAAA,IAAqB,CACjBC,SAAU,wEACVC,eApBsChB,MACtCiB,EACA2C,EACAzC,KAEKI,MAAMC,QAAQoC,KACfA,EAAiB,CAACA,IAGtBA,EAAe3E,SAAQe,MAAAA,IACnB,GAAI6D,EAAS,CACTA,QAAgBP,QAAQC,QAAQM,GAChC,MAAML,GAAcC,EAAAA,EAAAA,GAAgCI,GACpD1C,EAAcX,eAAekB,cAAc8B,EAAYE,YAAcF,OAQ7Ef,cAzBuCzC,MAAAA,oFCqD3Cc,EAAAA,EAAAA,IAAqB,CACjBC,SAAU,iDACVC,eAtCkBhB,MAClBiB,EACA6C,EACA3C,KAEA,GAAI9B,QAAUA,OAAO+B,WAAa/B,OAAO+B,UAAUC,UAAW,CAC1D,MAAM0C,EAAcxC,MAAMC,QAAQsC,GAAcA,EAAW,GAAKA,EAChE,IAAIE,EAAuC,GAG3C,GAAID,GAAeA,EAAYE,YAAc1C,MAAMC,QAAQuC,EAAYE,aAAeF,EAAYE,WAAWd,OAAS,EAClH,IACIa,QAA6BpC,EAAAA,EAAAA,GAAiCmC,EAAYE,WAAY9C,GACxF,MAAOU,GACLV,EAAcE,UAAUQ,MAAM,+DAAgEA,GAKtGV,EAAcX,eAAekB,cAAcK,EAAAA,GAAemC,UAAY,CAClEpF,GAAIiF,EAAY7B,GAChBiC,YAAaJ,EAAYK,UAAYL,EAAYK,UAAU/B,WAAa,GACxEgC,QAASN,EAAYO,oBACrBC,IAAKR,EAAYS,UAEjBlC,SAAU0B,GAId3E,OAAO+B,UAAUC,UAAUS,SACvBC,EAAAA,GAAemC,SACM/C,EAAcX,eAAekB,cAAcK,EAAAA,GAAemC,aAQvFzB,cAjDmBzC,MAAAA,kDCKvBc,OAAAA,IAAqB,CACjBC,SAAU,6CACVC,eAXchB,MAAOiB,EAAwCC,EAAqBC,KAClF,IACI,MAAMsD,QAAmBnB,QAAQC,QAAQhC,MAAMC,QAAQN,GAAQA,EAAK,GAAKA,GACzEC,EAAcX,eAAekB,cAAc+C,WAAaA,EAC1D,MAAOzB,GACL7B,EAAcE,UAAU0B,MAAM,yCAA0CC,KAO5EP,cAhBezC,MAAAA,iFCkFnBc,EAAAA,EAAAA,IAAqB,CACjBC,SAAU,wDACVC,eAlDwBhB,MAAOiB,EAAwCC,EAAqBC,KAC5F,GAAI9B,QAAUA,OAAO+B,WAAa/B,OAAO+B,UAAUC,UAAW,CAC1D,MAAMC,EAAaC,MAAMC,QAAQN,GAAQA,EAAK,GAAKA,EAC7CwD,EAA8BvD,EAAcX,eAAekB,cAAciD,mBACzEF,EAAmBtD,EAAcX,eAAekB,cAAc+C,WAC9DG,EAA0CzD,EAAcX,eAAekB,cAAcK,EAAAA,GAAemC,UACpGW,EAA+B,GACrC,IAAIC,EAAkC,GAGtC,GAAIJ,GAAqBD,GAAcA,EAAWvB,YAC9CuB,EAAWvB,UAAUjE,SAAS8F,KAEtBA,EAASC,YAC8D,IAAvEN,EAAkBO,QAAQF,EAASG,OAASH,EAASG,OAAS,KAE1DN,GACAA,EAAmBtC,UACnBsC,EAAmBtC,SAAS6C,MAAKtB,IAAYA,EAAQH,aAAeqB,EAASC,aAGjFH,EAAiBO,KAAKL,MAI1BF,EAAiB1B,OAAS,GAC1B,IACI2B,QAAwBlD,EAAAA,EAAAA,GAAiCiD,EAAkB1D,GAC7E,MAAOU,GACLV,EAAcE,UAAUQ,MAAM,sEAAuEA,GAM7GgD,GAAoBA,EAAiB1B,OAAS,EAC9C9D,OAAO+B,UAAUC,UAAUS,SAASC,EAAAA,GAAesD,eAAgB,CAC/DpD,OAAQX,EAAWY,GACnBC,YAAab,EAAWc,QAAUd,EAAWc,QAAQC,WAAa,GAClEC,SAAUwC,EACVvC,QAASjB,EAAWkB,YAAclB,EAAWkB,YAAYH,WAAa,KAG1ElB,EAAcE,UAAU0B,MAAM,gEAQtCN,cA5EyBzC,MAAO0C,EAAuCvB,KACvE,IACI,MAAMwB,EAAcpB,MAAMC,QAAQkB,GAA+BA,EAAO,GAA0BA,EAGlG,GAAIC,EAAYC,aAAkD,mBAA5BD,EAAYC,YAA4B,CAC1E,MAAM0C,EAAwB3C,EAAYC,cAC1C,GAAI0C,GAAyBA,EAAsBC,YAG/C,YADApE,EAAcX,eAAekB,cAAciD,mBAAqBW,EAAsBC,aAI9FpE,EAAcE,UAAU0B,MAAM,4EAChC,MAAOC,GACL7B,EAAcE,UAAU0B,MAAM,8CAA+CC,wFChB9E,MAAMpB,EAAmC5B,MAAO8C,EAAuB3B,KAC1E,QAA6CqE,IAAzCrE,EAAcX,eAAeiF,QAC7B,MAAM,IAAIC,MAAM,wDAGpB,MAAMC,EAA2C,GAGjD,IAAK,IAAIC,EAAI,EAAGA,EAAI9C,EAAUK,OAAQyC,IAAK,CAEvC,MAAMb,EAAqBjC,EAAU8C,GAEjCb,EAASC,WAETW,EAAgBP,MACZS,EAAAA,EAAAA,cAAa,CAAEC,cAAe3E,GAAiB4D,EAASC,UAAW7D,EAAcX,eAAeiF,QAAQM,UAAUC,MAC9GC,IAEI,MAAMzC,EAAcC,EAAgCwC,GAMpD,OAHAzC,EAAY0C,aAAenB,EAASoB,MAAQpB,EAASoB,MAAM9D,WAAa,GACxEmB,EAAY4C,gBAAkBrB,EAASsB,SAAWtB,EAASsB,SAAShE,WAAa,GAE1EmB,KAEX8C,IACI,MAAM,IAAIZ,MAAM,6CAA6CX,EAASC,eAAesB,SAQzG,OAAOhD,QAAQiD,IAAIZ,IAQVlC,EAAmCJ,IAC5C,MAAMmD,EAAWnD,EAAc0C,UAAY,GAE3C,MAAO,CAEHU,UAAWpD,EAAcqD,gBAAkBrD,EAAcqD,gBAAgBrE,WAAamE,EAASnE,WAC/FqB,WAAY8C,EAAWA,EAASnE,WAAa,GAC7CsE,YAAatD,EAAcuD,MAAQvD,EAAcwD,aAAe,GAChEX,aAAc7C,EAAc8C,MAAQ9C,EAAc8C,MAAM9D,WAAa,GACrEyE,iBAAkB,GAClBC,mBAAoB,GACpBC,kBAAmB,GACnBC,oBAAqB,GACrBb,gBAAiB,GACjBc,gBAAiB,yECLzBpG,EAAAA,EAAAA,IAAqB,CACjBC,SAAU,wDACVC,eA3BoBhB,MAAOiB,EAAwCC,EAAqBC,KACxF,GAAI9B,QAAUA,OAAO+B,WAAa/B,OAAO+B,UAAUC,UAAW,CAC1D,MAAMC,EAAaC,MAAMC,QAAQN,GAAQA,EAAK,GAAKA,EAC7CiG,EAA+BhG,EAAcX,eAAekB,cAAcyF,iBAChF,IAAIC,EAAkC,GAGtC,GAAID,EACA,IACIC,QAAwBxF,EAAAA,EAAAA,GAAiCuF,EAAkBhG,GAC7E,MAAOU,GACLV,EAAcE,UAAUQ,MAAM,sEAAuEA,GAK7GxC,OAAO+B,UAAUC,UAAUS,SAASC,EAAAA,GAAesF,aAAc,CAC7DpF,OAAQX,EAAWY,GACnBC,YAAab,EAAWc,QAAUd,EAAWc,QAAQC,WAAa,GAClEC,SAAU8E,EACV7E,QAASjB,EAAWkB,YAAclB,EAAWkB,YAAYH,WAAa,OAQ9EI,cArDqBzC,MAAO0C,EAAuCvB,KACnE,IACI,MAAMwB,EAAcpB,MAAMC,QAAQkB,GAA+BA,EAAO,GAA0BA,EAGlG,GAAIC,EAAYC,aAAkD,mBAA5BD,EAAYC,YAA4B,CAC1E,MAAM0E,EAAwB3E,EAAYC,cAC1C,GAAI0E,GAAyBA,EAAsBxE,UAG/C,YADA3B,EAAcX,eAAekB,cAAcyF,iBAAmBG,EAAsBxE,WAI5F3B,EAAcE,UAAU0B,MAAM,wEAChC,MAAOC,GACL7B,EAAcE,UAAU0B,MAAM,0CAA2CC,4YCA1E,MAAMuE,EAKT7H,YAAY8H,EAAgEhH,GAKrE,KAAAZ,mBAAqB,IAAc,sBAEnC,KAAAD,YAAc,KAAc8H,EAAAA,EAAAA,4BAA2B,sBAAuBC,KAAKlH,gBAEnF,KAAAX,cAAgB,IAAiB,UARpC6H,KAAKF,OAASA,GAAU,GACxBE,KAAKlH,eAAiBA,GAgC9B,MAuDA,GAAemH,EAAAA,EAAAA,IAA2B,CACtC7I,GAAI,gEACJiB,OAzDWC,MAAOC,EAAiC2H,KACnD,MAAM,OAAEJ,GAAWvH,EACnB,IAAI4H,EACJ,IACIA,QAA8BC,EAAAA,EAAAA,oBA1BAC,EAClCC,EACAR,KAEA,GAAIQ,GAAaA,EAAUxH,eAAgB,CACvC,IAAIyH,EAIJ,OAHIT,IACAS,EAAuBT,EAAsCS,qBAE1D,IAAIC,EAAAA,qBAAqBF,EAAUxH,eAAgByH,GAG9D,MAAM,IAAIvC,MAAM,uDAcqCqC,CAA8BH,EAAS3H,EAAMuH,QAASI,GACzG,MAAAO,IAGF,GAAIN,EAAuB,CACvB,MAAMO,uWAAe7I,CAAA,GAAQsI,GAC7B,IAAIQ,EACJ,IAEI,MAAMC,GAAYC,EAAAA,EAAAA,IAAgBX,EAAQpH,eAAegI,OAAQJ,EAAgBK,kBAC3EC,EAAkBN,EAAgBO,iBAAmBP,EAAgBxB,KAC3EwB,EAAgBxB,KAAO0B,EACvBF,EAAgBO,gBAAkBD,EAClCL,GAAcO,EAAAA,EAAAA,gBAAeR,GAE7B,MAAMS,EAAkBjB,EAAQpH,eAAeqI,gBAC/C,GAAIR,GAAeQ,EAAiB,CAChCR,EAAc,WAAWQ,IAAkBR,IAAcS,oBACzD,MAAMC,GA1BAf,EA0ByBJ,IAzBvBI,EAAUxH,gBAAkBwH,EAAUxH,eAAewI,OAAShB,EAAUxH,eAAewI,MAAMC,KA0B/FC,EAAM,IAAIC,IAAId,GACde,EAA6B,IAAIC,gBAAgBH,EAAII,QACvDP,GACAK,EAAUG,IAAI,OAAQR,GAE1BG,EAAII,OAASF,EAAU/G,WACvBgG,EAAca,EAAI7G,WAClBgG,GAAcmB,EAAAA,EAAAA,wBAAuBnB,EAAaT,EAAQpH,qBAE1D6H,OAAc7C,EAEpB,MAAAiE,GACEpB,OAAc7C,EAElB,MAAO,CACHkE,MAAOtB,EAAgBxB,KACvB+C,gBAAiBvB,EAAgBwB,aACjCC,aAAcxB,EACdyB,WAAYtC,GAAUA,EAAOsC,YAI9B,OAAItC,EACA,CACHkC,MAAOlC,EAAOkC,MACdC,gBAAiBnC,EAAOuC,cAAgBvC,EAAOuC,aAAaC,IAC5DF,WAAYtC,GAAUA,EAAOsC,YAG9B,GAxDX,IAAsB9B,GA8DlB/H,MAAQY,GACG,IAAI0G,EAAoD1G,EAAK2G,OAAQ3G,EAAKL,gICrGlF,MAAMyJ,EAKTvK,YAAY8H,EAAmChH,GAKxC,KAAAZ,mBAAqB,IAAc,cAEnC,KAAAD,YAAc,IAAc,IAAG8H,EAAAA,EAAAA,4BAA2B,cAAeC,KAAKlH,mBAAmBkH,KAAKF,OAAOkC,QAE7G,KAAA7J,cAAgB,IAAiB,UARpC6H,KAAKF,OAASA,GAAU,GACxBE,KAAKlH,eAAiBA,GAU9B,MAeA,GAAemH,EAAAA,EAAAA,IAA2B,CACtC7I,GAAI,+DACJiB,OAjBWC,MAAOC,EAAyB2H,KAC3C,MAAM,OAAEJ,GAAWvH,EACnB,MAAO,CACHyJ,MAAOlC,GAAUA,EAAOkC,MACxBQ,YAAa1C,GAAUA,EAAO0C,YAC9BC,SAAU3C,GAAUA,EAAO2C,SAC3BR,gBAAiBnC,GAAUA,EAAOuC,cAAgBvC,EAAOuC,aAAaC,IACtEH,aACIjC,EAAQpH,gBAAkBoH,EAAQpH,eAAeqJ,cAC3CL,EAAAA,EAAAA,wBAAuB5B,EAAQpH,eAAeqJ,aAAcjC,EAAQpH,qBACpEgF,EACVsE,WAAYtC,GAAUA,EAAOsC,aAOjC7J,MAAQY,GACG,IAAIoJ,EAA4CpJ,EAAK2G,OAAQ3G,EAAKL,gICpB5E4J,gBApBE,MAAMC,EAKT3K,YAAY8H,EAAmChH,GAKxC,KAAAZ,mBAAqB,IAAc,kBAEnC,KAAAD,YAAc,KAAc8H,EAAAA,EAAAA,4BAA2B,kBAAmBC,KAAKlH,gBAE/E,KAAAX,cAAgB,IAAiB,UARpC6H,KAAKF,OAASA,GAAU,GACxBE,KAAKlH,eAAiBA,GAyC9B,SAAS8J,EAAeC,EAAsBC,GAC1C,MAAMC,EAAqBC,EAAUH,EAAKI,OAAOC,QAAQC,QAEnDC,GArBaC,EAqBeR,EAAKI,OAAOK,MArBTC,EAqBgBT,EApBhDO,EAIAE,EAKE,GAAGA,KAAYF,MAJX,IAAIA,MAJJ,IAFf,IAAuBA,EAAkBE,EAsBrC,MAAO,CACHC,MAAOX,EAAKI,OAAOC,QAAQlB,MAC3B7C,YAAa0D,EAAKI,OAAOC,QAAQV,YACjCiB,iBAAkBZ,EAAKI,OAAOC,QAAQQ,iBACtCC,gBAAiBd,EAAKI,OAAOC,QAAQU,gBACrCC,gBAAiBhB,EAAKI,OAAOC,QAAQY,gBACrCC,KAAMX,EACNY,OAAQjB,GAQhB,SAASkB,EAAY3D,GACjB,OAAOA,GAAaA,EAAUxH,gBAAkBwH,EAAUxH,eAAeyK,SAAWjD,EAAUxH,eAAeyK,SAAW,GAkC5H,SAASP,EAAUG,GACf,MAAMe,EAA2B,GAEjC,OAAKf,GAILA,EAAO5L,SAAQsL,IACX,GAAIA,GAAQA,EAAKsB,OAAStB,EAAKsB,MAAMC,KAAM,CAEvC,MAAMC,EAAmB,CACrBD,KAAMvB,EAAKsB,MAAMC,KACjBE,QAASzB,EAAKsB,MAAMG,QACpBtC,MAAOa,EAAKsB,MAAMnC,MAClBuC,MAAO1B,EAAKsB,MAAMI,MAClBC,OAAQ3B,EAAKsB,MAAMK,QAGvBN,EAAgBxG,KAAK2G,OAItBH,GAlBIA,GAtFf,SAAKxB,GACDA,EAAA,YACAA,EAAA,kBAFJ,CAAKA,IAAAA,EAAY,KA8IjB,MAAM+B,EAAsBnE,IACxB,MAAMoE,EAhCV,SAA0BpE,GACtB,IAAIoE,EACCpE,GAAcA,EAAUxH,gBAAmBwH,EAAUxH,eAAe6L,SAAkBrE,EAAUxH,eAAe6L,SAASC,KAAzC,KACpF,KACKtE,GACAA,EAAUxH,gBACVwH,EAAUxH,eAAe6L,UACzBrE,EAAUxH,eAAe6L,SAASC,MAClCtE,EAAUxH,eAAe6L,SAASC,KAAK1B,SACvC5C,EAAUxH,eAAe6L,SAASC,KAAK1B,QAAQ2B,OAC/CvE,EAAUxH,eAAe6L,SAASC,KAAK1B,QAAQlB,OAC/C1B,EAAUxH,eAAe6L,SAASC,KAAKE,KAC1C,CACE,KACKxE,GACAA,EAAUyE,MACVzE,EAAUyE,KAAKH,MACftE,EAAUyE,KAAKH,KAAK1B,SACpB5C,EAAUyE,KAAKH,KAAK1B,QAAQ2B,OAC5BvE,EAAUyE,KAAKH,KAAK1B,QAAQlB,OAC5B1B,EAAUyE,KAAKH,KAAKE,KAGrB,MADAE,QAAQ7K,MAAM,kDACR,IAAI6D,MAAM,kDAGpB0G,EAAWpE,EAAUyE,KAAKH,KAE9B,OAAOF,EAI0BO,CAAiB3E,GAC5C4E,EAA2C,GACjD,IAAIC,EAA8B,GAElC,MAAMC,EAA2BpC,EAAU0B,EAASxB,QAAQC,QAEtDkC,EA9FV,SAAyB/E,GACrB,IAAKA,IAAcA,EAAUR,SAAWQ,EAAUR,OAAOuF,aACrD,OAAO,GAGX,MAAM9G,EAAS+G,OAAOhF,EAAUR,OAAOuF,cACvC,OAAIE,MAAMhH,GACC,GAGJA,EAoFciH,CAAgBlF,GAC/Be,EA9EV,SAAsBf,GAClB,OAAOA,GAAaA,EAAUxH,gBAAkBwH,EAAUxH,eAAewI,OAAShB,EAAUxH,eAAewI,MAAMD,UAC3GiE,OAAOhF,EAAUxH,eAAewI,MAAMD,WACtC,EA2EYoE,CAAanF,GAGzBoF,EAA+B,GAC/BC,EAAMtE,EAAYgE,EACxB,IAAK,IAAIO,EAAQvE,EAAWuE,EAAQlB,EAASxB,QAAQ2B,MAAMpJ,QAAUmK,EAAQD,EAAKC,IAAS,CACvF,MAAM/C,EAAO6B,EAASxB,QAAQ2B,MAAMe,GACpC,GAAI/C,EAAKgD,OAASnD,EAAakC,KAAM,CACjC,IAAK/B,EAAKI,SAAWJ,EAAKI,OAAOC,UAAYL,EAAKI,OAAOC,QAAQlB,MAAO,CACpEgD,QAAQ7K,MAAM,yDAAyDuK,EAASI,OAChF,SAIJ,GAAIK,EAAY1J,OAAS,EAAG,CACxB,MAAMqK,EAAa,IAAIX,GACvBD,EAAUxH,KAAKoI,GACfX,EAAc,GAIlBD,EAAUxH,KAAKkF,EAAeC,EAAMoB,EAAY3D,KAGpD,GAAIuC,EAAKgD,OAASnD,EAAavG,QAAS,CACpC,IAAK0G,EAAKI,SAAWJ,EAAKI,OAAOnE,SAAU,CACvCkG,QAAQ7K,MAAM,yCAAyCuK,EAASI,OAChE,SAIJ,MAAMiB,EAA4B,CAC9B1H,SAAUwE,EAAKI,OAAOnE,SACtBkH,UAAWnD,EAAKI,OAAOgD,WAAa,KAGxCd,EAAYzH,KAAKqI,GACjBL,EAAahI,KAAKqI,IAS1B,OAJIZ,EAAY1J,OAAS,GACrByJ,EAAUxH,KAAKyH,GAGZ,IAAIe,EAAAA,UACPxB,EAASI,IACTJ,EAASxB,QAAQlB,MACjB0C,EAASxB,QAAQV,YACjBkC,EAASxB,QAAQQ,iBACjBgB,EAASxB,QAAQU,gBACjBc,EAASxB,QAAQY,gBACjBsB,EACAF,EACAQ,EACAhB,EAASxB,QAAQ2B,MAAMpJ,OACvB4J,EACAhE,IA4BR,GAAepB,EAAAA,EAAAA,IAA2B,CACtC7I,GAAI,4DACJiB,OA1BWC,MAAOC,EAA6B2H,KAC/C,MAAM,OAAEJ,GAAWvH,EACnB,IAAImM,EACJ,IACIA,QAAiByB,EAAAA,EAAAA,SAAQ1B,EAAmBvE,GAAUA,GACxD,MAAAO,IAGF,OAAIiE,GAAYA,EAASlB,MACd,CACHxB,MAAO0C,EAASlB,MAChBhB,YAAakC,EAASvF,aAInBW,EACA,CACHkC,MAAOlC,EAAOkC,MACdQ,YAAa1C,EAAO0C,aAGrB,IAMPjK,MAAQY,GACG,IAAIwJ,EAAgDxJ,EAAK2G,OAAQ3G,EAAKL,oJC5P9E,MAAMsN,EASTpO,YACI8H,EACA/G,EACAgG,EACAjG,GAWG,KAAAZ,mBAAqB,IAAc,qBAEnC,KAAAD,YAAc,KACjBoO,EAAAA,EAAAA,kBACIrG,KAAKjH,YACL,CAAEuN,IAAK,MAAOpN,MAAO,sBACrB,CAAEoN,IAAK,QAASpN,MAAO8G,KAAKF,OAAOkC,OACnC,CAAEsE,IAAK,YAAapN,MAAO8G,KAAKjB,WAChC,CAAEuH,IAAK,YAAapN,MAAO8G,KAAKiG,YAGjC,KAAA9N,cAAgB,IAAiB,cApBpC6H,KAAKF,OAASA,GAAU,GACxBE,KAAKjH,YAAcA,EACnBiH,KAAKjB,UAAYA,EAEbjG,IACAkH,KAAKiG,WAAYM,EAAAA,EAAAA,IAAazN,KAwB1C,MAqGA,GAAemH,EAAAA,EAAAA,IAA2B,CACtC7I,GAAI,+DACJiB,OAjEWC,MAAOC,EAAgC2H,KAClD,MAAM,OAAEJ,EAAM,UAAEf,EAAS,YAAEhG,GAAgBR,EAC3C,IAAIiO,EACJ,IAAK,IAADC,EACAD,EAAqBE,EAAAA,gBAAgBC,kBAC3BC,EAAAA,EAAAA,eACF,CACIxI,cAAe8B,EACf2G,oBAAqBC,EAAAA,yBAAyBC,qCAAqC7G,IAEvFnH,EAAYiO,UACZ,CAACjI,GACD,KACe,QADX0H,EACJlO,EAAM0N,iBAAS,IAAAQ,EAAAA,EAAI,IAG7B,MAAAhG,IAGF,GAAIiG,EAAAA,gBAAgBO,YAAYT,GAAqB,CACjD,MAAMU,EAAoBV,EAAmB,GAC7C,IAAIW,EAaAC,EAZJ,IACID,GAAaE,EAAAA,EAAAA,mBAAkBH,EAAmBhH,GAClD,MAAMiB,EAAkBjB,EAAQpH,eAAeqI,gBAC3CgG,GAAchG,GACdgG,EAAa,WAAWhG,IAAkBgG,IAAa/F,oBACvD+F,GAAarF,EAAAA,EAAAA,wBAAuBqF,EAAYjH,EAAQpH,iBAExDqO,OAAarJ,EAEnB,MAAAiE,GACEoF,OAAarJ,EAGjB,IAAK,IAADwJ,EACAF,OA3DY9O,OACpB4H,EACApB,EACAkI,EACAf,KAEA,MAAMsB,QAA0BC,EAAAA,EAAAA,yBAC5B,CACIpJ,cAAe8B,EACf2G,oBAAqBC,EAAAA,yBAAyBC,qCAAqC7G,IAEvFpB,EACAkI,EACAf,GAEJ,IAAK,MAAMwB,KAAoBF,EAC3B,GAA8B,UAA1BE,EAAiBvI,KACjB,OAAOuI,EAAiBC,WA0CHC,CAAgBzH,EAASnB,EAAWhG,EAAYiO,UAA0B,QAAjBM,EAAE/O,EAAM0N,iBAAS,IAAAqB,EAAAA,EAAI,GACrG,MAAAM,GACER,OAAetJ,EAEnB,MAAO,CACHkE,MAAOkF,EAAkBhI,KACzBsD,YAAa0E,EAAkB/H,YAC/B8C,iBAAiB4F,EAAAA,EAAAA,kBAAiBX,EAAkBY,gBAAiB/O,GACrEoJ,aAAcgF,EACd/E,WAAYtC,GAAUA,EAAOsC,WAC7BrD,UAAWmI,EAAkB7I,SAC7B0J,MAAOb,EAAkBc,cACzBZ,aAAAA,GAID,OAAItH,EACA,CACHkC,MAAOlC,EAAOkC,MACdQ,YAAa1C,EAAO0C,YACpBP,gBAAiBnC,EAAOuC,cAAgBvC,EAAOuC,aAAaC,IAC5DF,WAAYtC,GAAUA,EAAOsC,YAG9B,IAMP7J,MAxGiBY,IACjB,MAAM4F,GAAYkJ,EAAAA,EAAAA,qCAAoC9O,GAEtD,GAAI4F,EACA,OAAO,IAAIqH,EACoBjN,EAAK2G,OAChC3G,EAAKL,eAAeC,aACnBgG,EACD5F,EAAKL,gBAGb,MAAM,IAAIkF,MAAM,wHCzFpBkK,EAAOC,QAAUC,2BCAjBF,EAAOC,QAAUE","sources":["webpack://sgi-bookstore/./lib/__local__/module-registration.js?8a42","webpack://sgi-bookstore/./src/modules/msdyn365-pva-chat-connector/actions/getBotFrameworkToken.action.ts?0785","webpack://sgi-bookstore/./src/actions/addToCart-telemetry.action.ts?4575","webpack://sgi-bookstore/./src/actions/copyCart-checkOut-telemetry.action.ts?403f","webpack://sgi-bookstore/./src/actions/getById-product-telemetry.action.ts?9e39","webpack://sgi-bookstore/./src/actions/getByIds-product-telemetry.action.ts?1a7f","webpack://sgi-bookstore/./src/actions/getVariantsByDimensionValues-telemetry.action.ts?b148","webpack://sgi-bookstore/./src/actions/purchase-telemetry.action.ts?d6c7","webpack://sgi-bookstore/./src/actions/readCart-telemetry.action.ts?ac14","webpack://sgi-bookstore/./src/actions/removeFromCart-telemetry.action.ts?b268","webpack://sgi-bookstore/./src/actions/telemetry.action.helper.ts?7f4a","webpack://sgi-bookstore/./src/actions/updateCart-telemetry.action.ts?f56d","webpack://sgi-bookstore/./src/modules/category-page-summary/category-page-summary.action.ts?c40c","webpack://sgi-bookstore/./src/modules/default-page-summary/default-page-summary.action.ts?5b44","webpack://sgi-bookstore/./src/modules/list-page-summary/list-page-summary.action.ts?a1a8","webpack://sgi-bookstore/./src/modules/product-page-summary/product-page-summary.action.ts?9992","webpack://sgi-bookstore/external var \"React\"?0d3b","webpack://sgi-bookstore/external var \"ReactDOM\"?853b"],"sourcesContent":["const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n { \n const actionPath = '@msdyn365-commerce-modules/chat/dist/lib/modules/msdyn365-pva-chat-connector/actions/getBotFrameworkToken.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/chat/dist/lib/modules/msdyn365-pva-chat-connector/actions/getBotFrameworkToken.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/core-components/dist/lib/actions/addToCart-telemetry.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/core-components/dist/lib/actions/addToCart-telemetry.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/core-components/dist/lib/actions/copyCart-checkOut-telemetry.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/core-components/dist/lib/actions/copyCart-checkOut-telemetry.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/core-components/dist/lib/actions/getById-product-telemetry.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/core-components/dist/lib/actions/getById-product-telemetry.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/core-components/dist/lib/actions/getByIds-product-telemetry.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/core-components/dist/lib/actions/getByIds-product-telemetry.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/core-components/dist/lib/actions/getVariantsByDimensionValues-telemetry.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/core-components/dist/lib/actions/getVariantsByDimensionValues-telemetry.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/core-components/dist/lib/actions/purchase-telemetry.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/core-components/dist/lib/actions/purchase-telemetry.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/core-components/dist/lib/actions/readCart-telemetry.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/core-components/dist/lib/actions/readCart-telemetry.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/core-components/dist/lib/actions/removeFromCart-telemetry.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/core-components/dist/lib/actions/removeFromCart-telemetry.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/core-components/dist/lib/actions/updateCart-telemetry.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/core-components/dist/lib/actions/updateCart-telemetry.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/page-summary/dist/lib/modules/category-page-summary/category-page-summary.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/page-summary/dist/lib/modules/category-page-summary/category-page-summary.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/page-summary/dist/lib/modules/default-page-summary/default-page-summary.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/page-summary/dist/lib/modules/default-page-summary/default-page-summary.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/page-summary/dist/lib/modules/list-page-summary/list-page-summary.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/page-summary/dist/lib/modules/list-page-summary/list-page-summary.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/page-summary/dist/lib/modules/product-page-summary/product-page-summary.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/page-summary/dist/lib/modules/product-page-summary/product-page-summary.action');\n registerActionId(actionPath);\n }\n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.packageDataActions = {};\n window.__bindings__.packageDataActions['__local__'] = {\n ...binding.dataActions\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport msdyn365Commerce, * as Msdyn365 from '@msdyn365-commerce/core';\n\n/**\n * Bot Framework input. Used to retrieve existing active bot framework session token.\n */\nexport class GetBotFrameworkInput implements Msdyn365.IActionInput {\n public getCacheKey = () => `CURRENT-BOTFRAMEWORKTOKEN`;\n public getCacheObjectType = () => 'CURRENT-BOTFRAMEWORK-KEY1';\n public dataCacheType = (): Msdyn365.CacheType => 'application';\n}\n\nconst createInput = (args: Msdyn365.ICreateActionContext): Msdyn365.IActionInput => {\n return new GetBotFrameworkInput();\n};\n\nasync function action(input: GetBotFrameworkInput, ctx: Msdyn365.IActionContext): Promise {\n const ISecretValue = await msdyn365Commerce.secretManager?.getSecretValue(\n 'PVA-WEBCHANNELSECURITY-KEY',\n ctx.requestContext.apiSettings.baseUrl\n );\n const apiToken = ISecretValue?.value;\n return apiToken ?? '';\n}\n\nexport default Msdyn365.createObservableDataAction({\n action: >action,\n id: 'getBotFrameworkToken',\n input: createInput\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createDataActionHook, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { IMSDyn365Window } from '@msdyn365-commerce/core-internal';\nimport { Cart, CartLine, IAddCartLinesParam, IDataServiceRequest } from '@msdyn365-commerce/retail-proxy';\nimport { IProductInfo, TelemetryEvent } from '@msdyn365-commerce/telemetry-internal';\nimport { getProductInfoFromCartLinesAsync } from './telemetry.action.helper';\n\ndeclare let window: IMSDyn365Window;\n\n/**\n * Saves info on cart lines added before calling data action\n * @param inputs Data action inputs\n * @param actionContext Action context\n */\nconst beforeAddToCart = async (inputs: IActionInput | IActionInput[], actionContext: IActionContext) => {\n try {\n const actionInput = Array.isArray(inputs) ? inputs[0] : inputs;\n\n // If cart lines were added\n if (actionInput.queryParams && typeof actionInput.queryParams === 'function') {\n const addCartLinesParams = actionInput.queryParams();\n if (addCartLinesParams && addCartLinesParams.cartLines) {\n // Save info on added cart lines for post data action hook to pick up\n actionContext.requestContext.telemetryData.addedCartLines = addCartLinesParams.cartLines;\n return;\n }\n }\n actionContext.telemetry.debug('AddToCart pre-data action hook failed - No added cart lines found');\n } catch (e) {\n actionContext.telemetry.debug('AddToCart pre-data action hook failed.', e);\n }\n};\n\n/**\n * Fires an AddToCart event after AddCartLines data action completed\n * @param _inputs Data action inputs\n * @param cart New cart object after cart lines have been added\n * @param actionContext Action context\n */\nconst afterAddToCart = async (_inputs: IActionInput | IActionInput[], cart: Cart | Cart[], actionContext: IActionContext) => {\n if (window && window._msdyn365 && window._msdyn365.telemetry) {\n const cartObject = Array.isArray(cart) ? cart[0] : cart;\n const addedCartLines = actionContext.requestContext.telemetryData.addedCartLines;\n let addedProducts: IProductInfo[] = [];\n\n // Collect info on products added to cart\n if (addedCartLines) {\n try {\n addedProducts = await getProductInfoFromCartLinesAsync(addedCartLines, actionContext);\n } catch (error) {\n actionContext.telemetry.error('AddCartLines post-data action hook failed to process cart lines.', error);\n }\n }\n\n // Fire AddToCart event\n window._msdyn365.telemetry.logEvent(TelemetryEvent.AddToCart, {\n cartId: cartObject.Id,\n cartVersion: cartObject.Version ? cartObject.Version.toString() : '',\n products: addedProducts,\n orderId: cartObject.OrderNumber ? cartObject.OrderNumber.toString() : ''\n });\n }\n};\n\ncreateDataActionHook({\n actionId: '@msdyn365-commerce/retail-proxy/Carts/AddCartLines',\n postReaderHook: afterAddToCart,\n preReaderHook: beforeAddToCart\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createDataActionHook, IActionContext, IActionInput, IMSDyn365Window } from '@msdyn365-commerce/core';\nimport { Cart } from '@msdyn365-commerce/retail-proxy';\nimport { IProductInfo, TelemetryEvent } from '@msdyn365-commerce/telemetry-internal';\nimport { getProductInfoFromCartLinesAsync } from './telemetry.action.helper';\n\ndeclare let window: IMSDyn365Window;\n\n/**\n * CopyCart data action pre-hook\n * @param inputs Data action inputs\n */\nconst beforeCopyCart = async (inputs: IActionInput | IActionInput[]) => {\n // placeholder\n};\n\n/**\n * Fires an CheckOut event after CopyCart data action completed\n * @param _inputs Data action inputs\n * @param cart New checkout cart\n * @param actionContext Action context\n */\nconst afterCopyCart = async (_inputs: IActionInput | IActionInput[], cart: Cart | Cart[], actionContext: IActionContext) => {\n if (window && window._msdyn365 && window._msdyn365.telemetry) {\n const cartObject = Array.isArray(cart) ? cart[0] : cart;\n let cartLineProductUnits: IProductInfo[] = [];\n\n // Collect info on products in the cart\n if (cartObject && cartObject.CartLines && Array.isArray(cartObject.CartLines) && cartObject.CartLines.length > 0) {\n try {\n cartLineProductUnits = await getProductInfoFromCartLinesAsync(cartObject.CartLines, actionContext);\n } catch (error) {\n actionContext.telemetry.error('CopyCart post-data action hook failed to process cart lines.', error);\n }\n }\n\n // Fire Checkout event\n window._msdyn365.telemetry.logEvent(TelemetryEvent.CheckOut, {\n cartId: cartObject.Id,\n cartVersion: cartObject.Version ? cartObject.Version.toString() : '',\n products: cartLineProductUnits,\n orderId: cartObject.OrderNumber ? cartObject.OrderNumber.toString() : ''\n });\n }\n};\n\ncreateDataActionHook({\n actionId: '@msdyn365-commerce/retail-proxy/Carts/Copy',\n postReaderHook: afterCopyCart,\n preReaderHook: beforeCopyCart\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createDataActionHook, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { TelemetryEvent } from '@msdyn365-commerce/telemetry-internal';\nimport { getProductInfoFromSimpleProduct } from './telemetry.action.helper';\n\nconst beforeGetById = async (inputs: IActionInput | IActionInput[]) => {\n // placeholder\n};\n\nconst afterGetById = async (\n _inputs: IActionInput | IActionInput[],\n simpleProduct: SimpleProduct | SimpleProduct[],\n actionContext: IActionContext\n) => {\n simpleProduct = await Promise.resolve(Array.isArray(simpleProduct) ? simpleProduct[0] : simpleProduct);\n\n // If simple product result is defined run the post hook\n if (simpleProduct) {\n const productInfo = getProductInfoFromSimpleProduct(simpleProduct);\n actionContext.requestContext.telemetryData[productInfo.productSku] = productInfo;\n actionContext.requestContext.telemetryData[TelemetryEvent.ProductPageView] = productInfo ? [productInfo] : [];\n }\n};\n\ncreateDataActionHook({\n actionId: '@msdyn365-commerce/retail-proxy/Products/GetById',\n postReaderHook: afterGetById,\n preReaderHook: beforeGetById\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createDataActionHook, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getProductInfoFromSimpleProduct } from './telemetry.action.helper';\n\nconst beforeGetByIds = async (inputs: IActionInput | IActionInput[]) => {\n // placeholder\n};\n\nconst afterGetByIds = async (\n _inputs: IActionInput | IActionInput[],\n simpleProducts: SimpleProduct | SimpleProduct[],\n actionContext: IActionContext\n) => {\n if (!Array.isArray(simpleProducts)) {\n simpleProducts = [simpleProducts];\n }\n\n simpleProducts.forEach(async product => {\n if (product) {\n product = await Promise.resolve(product);\n const productInfo = getProductInfoFromSimpleProduct(product);\n actionContext.requestContext.telemetryData[productInfo.productSku] = productInfo;\n }\n });\n};\n\ncreateDataActionHook({\n actionId: '@msdyn365-commerce/retail-proxy/Products/GetByIds',\n postReaderHook: afterGetByIds,\n preReaderHook: beforeGetByIds\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createDataActionHook, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getProductInfoFromSimpleProduct } from './telemetry.action.helper';\n\nconst beforeGetVariantsByDimensionValues = async (inputs: IActionInput | IActionInput[]) => {\n // placeholder\n};\n\nconst afterGetVariantsByDimensionValues = async (\n _inputs: IActionInput | IActionInput[],\n simpleProducts: SimpleProduct | SimpleProduct[],\n actionContext: IActionContext\n) => {\n if (!Array.isArray(simpleProducts)) {\n simpleProducts = [simpleProducts];\n }\n\n simpleProducts.forEach(async product => {\n if (product) {\n product = await Promise.resolve(product);\n const productInfo = getProductInfoFromSimpleProduct(product);\n actionContext.requestContext.telemetryData[productInfo.productSku] = productInfo;\n }\n });\n};\n\ncreateDataActionHook({\n actionId: '@msdyn365-commerce/retail-proxy/Products/GetVariantsByDimensionValues',\n postReaderHook: afterGetVariantsByDimensionValues,\n preReaderHook: beforeGetVariantsByDimensionValues\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createDataActionHook, IActionContext, IActionInput, IMSDyn365Window } from '@msdyn365-commerce/core';\nimport { SalesOrder } from '@msdyn365-commerce/retail-proxy';\nimport { IProductInfo, IProductTransaction, TelemetryEvent } from '@msdyn365-commerce/telemetry-internal';\nimport { getProductInfoFromCartLinesAsync } from './telemetry.action.helper';\n\ndeclare let window: IMSDyn365Window;\n\n/**\n * Checkout data action pre-hook\n * @param inputs Data action inputs\n */\nconst beforePurchase = async (inputs: IActionInput | IActionInput[]) => {\n // placeholder\n};\n\n/**\n * Fires a Purchase event after Checkout data action completed\n * @param _inputs Data action inputs\n * @param salesOrder Sales order for transaction\n * @param actionContext Action context\n */\nconst afterPurchase = async (\n _inputs: IActionInput | IActionInput[],\n salesOrder: SalesOrder | SalesOrder[],\n actionContext: IActionContext\n) => {\n if (window && window._msdyn365 && window._msdyn365.telemetry) {\n const salesObject = Array.isArray(salesOrder) ? salesOrder[0] : salesOrder;\n let saleLineProductUnits: IProductInfo[] = [];\n\n // Collect info on products in the sales order\n if (salesObject && salesObject.SalesLines && Array.isArray(salesObject.SalesLines) && salesObject.SalesLines.length > 0) {\n try {\n saleLineProductUnits = await getProductInfoFromCartLinesAsync(salesObject.SalesLines, actionContext);\n } catch (error) {\n actionContext.telemetry.error('Checkout post-data action hook failed to process cart lines.', error);\n }\n }\n\n // Store the purchased product information so that we can avoid \"code triggered\" remove from cart telemetry event.\n actionContext.requestContext.telemetryData[TelemetryEvent.Purchase] = {\n id: salesObject.Id,\n affiliation: salesObject.ChannelId ? salesObject.ChannelId.toString() : '',\n revenue: salesObject.NetAmountWithoutTax,\n tax: salesObject.TaxAmount,\n // shippingCost?: // Confirm if it is delivery mode charge amount;\n products: saleLineProductUnits\n };\n\n // Fire Purchase event\n window._msdyn365.telemetry.logEvent(\n TelemetryEvent.Purchase,\n actionContext.requestContext.telemetryData[TelemetryEvent.Purchase]\n );\n }\n};\n\ncreateDataActionHook({\n actionId: '@msdyn365-commerce/retail-proxy/Carts/Checkout',\n postReaderHook: afterPurchase,\n preReaderHook: beforePurchase\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createDataActionHook, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { Cart } from '@msdyn365-commerce/retail-proxy';\n\nconst beforeRead = async (inputs: IActionInput | IActionInput[]) => {\n // placeholder\n};\n\nconst afterRead = async (_inputs: IActionInput | IActionInput[], cart: Cart | Cart[], actionContext: IActionContext) => {\n try {\n const activeCart = await Promise.resolve(Array.isArray(cart) ? cart[0] : cart);\n actionContext.requestContext.telemetryData.activeCart = activeCart;\n } catch (e) {\n actionContext.telemetry.debug('ReadCart post-data action hook failed.', e);\n }\n};\n\ncreateDataActionHook({\n actionId: '@msdyn365-commerce/retail-proxy/Carts/Read',\n postReaderHook: afterRead,\n preReaderHook: beforeRead\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createDataActionHook, IActionContext, IActionInput, IMSDyn365Window, TelemetryEvent } from '@msdyn365-commerce/core';\nimport { Cart, CartLine, IDataServiceRequest, IRemoveCartLinesParam } from '@msdyn365-commerce/retail-proxy';\nimport { IProductInfo, IProductTransaction } from '@msdyn365-commerce/telemetry-internal';\nimport { getProductInfoFromCartLinesAsync } from './telemetry.action.helper';\n\ndeclare let window: IMSDyn365Window;\n\n/**\n * Saves info on cart lines removed before calling data action\n * @param inputs Data action inputs\n * @param actionContext Action context\n */\nconst beforeRemoveFromCart = async (inputs: IActionInput | IActionInput[], actionContext: IActionContext) => {\n try {\n const actionInput = Array.isArray(inputs) ? inputs[0] : inputs;\n\n // If cart lines were removed\n if (actionInput.queryParams && typeof actionInput.queryParams === 'function') {\n const removeCartLinesParams = actionInput.queryParams();\n if (removeCartLinesParams && removeCartLinesParams.cartLineIds) {\n // Save info on removed cart lines for post data action hook to pick up\n actionContext.requestContext.telemetryData.removedCartLineIds = removeCartLinesParams.cartLineIds;\n return;\n }\n }\n actionContext.telemetry.debug('RemoveFromCart pre-data action hook failed - No removed cart lines found');\n } catch (e) {\n actionContext.telemetry.debug('RemoveFromCart pre-data action hook failed.', e);\n }\n};\n\n/**\n * Fires a RemoveFromCart event after RemoveCartLines data action completed\n * @param _inputs Data action inputs\n * @param cart New cart object after cart lines have been removed\n * @param actionContext Action context\n */\nconst afterRemoveFromCart = async (_inputs: IActionInput | IActionInput[], cart: Cart | Cart[], actionContext: IActionContext) => {\n if (window && window._msdyn365 && window._msdyn365.telemetry) {\n const cartObject = Array.isArray(cart) ? cart[0] : cart;\n const removeCartLineIds = actionContext.requestContext.telemetryData.removedCartLineIds;\n const activeCart = actionContext.requestContext.telemetryData.activeCart;\n const productTransaction = actionContext.requestContext.telemetryData[TelemetryEvent.Purchase];\n const removedCartLines: CartLine[] = [];\n let removedProducts: IProductInfo[] = [];\n\n // Collect info on products removed from cart\n if (removeCartLineIds && activeCart && activeCart.CartLines) {\n activeCart.CartLines.forEach((cartLine: CartLine) => {\n if (\n cartLine.ProductId &&\n removeCartLineIds.indexOf(cartLine.LineId ? cartLine.LineId : '') !== -1 &&\n !(\n productTransaction &&\n productTransaction.products &&\n productTransaction.products.some(product => +product.productSku === cartLine.ProductId)\n )\n ) {\n removedCartLines.push(cartLine);\n }\n });\n\n if (removedCartLines.length > 0) {\n try {\n removedProducts = await getProductInfoFromCartLinesAsync(removedCartLines, actionContext);\n } catch (error) {\n actionContext.telemetry.error('RemoveCartLines post-data action hook failed to process cart lines.', error);\n }\n }\n }\n\n // Fire RemoveFromCart event if cart lines were removed\n if (removedCartLines && removedCartLines.length > 0) {\n window._msdyn365.telemetry.logEvent(TelemetryEvent.RemoveFromCart, {\n cartId: cartObject.Id,\n cartVersion: cartObject.Version ? cartObject.Version.toString() : '',\n products: removedProducts,\n orderId: cartObject.OrderNumber ? cartObject.OrderNumber.toString() : ''\n });\n } else {\n actionContext.telemetry.debug('No RemoveFromCart event fired, no removed cart lines found');\n }\n }\n};\n\ncreateDataActionHook({\n actionId: '@msdyn365-commerce/retail-proxy/Carts/RemoveCartLines',\n postReaderHook: afterRemoveFromCart,\n preReaderHook: beforeRemoveFromCart\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core-internal';\nimport { CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getByIdAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { IProductInfo } from '@msdyn365-commerce/telemetry-internal';\n\n/**\n * Converts cart line products into promise of array of product info\n * @param cartLines Cart Lines with product info to collect\n * @param actionContext Action context\n * @returns Array of product info\n */\nexport const getProductInfoFromCartLinesAsync = async (cartLines: CartLine[], actionContext: IActionContext): Promise => {\n if (actionContext.requestContext.channel === undefined) {\n throw new Error('Unable to make product call, channel ID not provided');\n }\n\n const productPromises: Promise[] = [];\n\n // Call GetById API for all products in cartLines\n for (let i = 0; i < cartLines.length; i++) {\n // eslint-disable-next-line security/detect-object-injection -- bracket object notation with user input present leads to eslint security issue.\n const cartLine: CartLine = cartLines[i];\n\n if (cartLine.ProductId) {\n // The product id in cartLine actually contains recordId and not master product id so we can use it up here to lookup product.\n productPromises.push(\n getByIdAsync({ callerContext: actionContext }, cartLine.ProductId, actionContext.requestContext.channel.RecordId).then(\n result => {\n // Construct basic IProductInfo object for product\n const productInfo = getProductInfoFromSimpleProduct(result);\n\n // Attach fields from the CartLine\n productInfo.productPrice = cartLine.Price ? cartLine.Price.toString() : '';\n productInfo.productQuantity = cartLine.Quantity ? cartLine.Quantity.toString() : '';\n\n return productInfo;\n },\n reason => {\n throw new Error(`Failed to get product details for product ${cartLine.ProductId}.\\n${reason}`);\n }\n )\n );\n }\n }\n\n // Return promise for array of product results\n return Promise.all(productPromises);\n};\n\n/**\n * Converts a SimpleProduct object into an IProductInfo object\n * @param simpleProduct Simple Product object\n * @returns Populated IProductInfo\n */\nexport const getProductInfoFromSimpleProduct = (simpleProduct: SimpleProduct): IProductInfo => {\n const recordId = simpleProduct.RecordId || '';\n\n return {\n // If master product id is not available then product record id is master product id\n productId: simpleProduct.MasterProductId ? simpleProduct.MasterProductId.toString() : recordId.toString(),\n productSku: recordId ? recordId.toString() : '',\n productName: simpleProduct.Name || simpleProduct.Description || '',\n productPrice: simpleProduct.Price ? simpleProduct.Price.toString() : '',\n productChannelId: '', // Not needed for each product, sent as part of all events\n productChannelName: '',\n productCategoryId: '',\n productCategoryName: '',\n productQuantity: '', // Cannot be deteremined from SimpleProduct, will be added from CartLine later\n productCurrency: '' // Not needed for each product, sent as part of all events with product data\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createDataActionHook, IActionContext, IActionInput, TelemetryEvent } from '@msdyn365-commerce/core';\nimport { IMSDyn365Window } from '@msdyn365-commerce/core-internal';\nimport { Cart, CartLine, IDataServiceRequest, IUpdateCartLinesParam } from '@msdyn365-commerce/retail-proxy';\nimport { IProductInfo } from '@msdyn365-commerce/telemetry-internal';\nimport { getProductInfoFromCartLinesAsync } from './telemetry.action.helper';\n\ndeclare let window: IMSDyn365Window;\n\n/**\n * Saves info on cart lines updated before calling data action\n * @param inputs Data action inputs\n * @param actionContext Action context\n */\nconst beforeUpdateCart = async (inputs: IActionInput | IActionInput[], actionContext: IActionContext) => {\n try {\n const actionInput = Array.isArray(inputs) ? inputs[0] : inputs;\n\n // If cart lines were updated\n if (actionInput.queryParams && typeof actionInput.queryParams === 'function') {\n const updateCartLinesParams = actionInput.queryParams();\n if (updateCartLinesParams && updateCartLinesParams.cartLines) {\n // Save info on updated cart lines for post data action hook to pick up\n actionContext.requestContext.telemetryData.updatedCartLines = updateCartLinesParams.cartLines;\n return;\n }\n }\n actionContext.telemetry.debug('UpdateCart pre-data action hook failed - No updated cart lines found');\n } catch (e) {\n actionContext.telemetry.debug('UpdateCart pre-data action hook failed.', e);\n }\n};\n\n/**\n * Fires an UpdateInCart event after UpdateCartLines data action completed\n * @param _inputs Data action inputs\n * @param cart New cart object after cart lines have been added\n * @param actionContext Action context\n */\nconst afterUpdateCart = async (_inputs: IActionInput | IActionInput[], cart: Cart | Cart[], actionContext: IActionContext) => {\n if (window && window._msdyn365 && window._msdyn365.telemetry) {\n const cartObject = Array.isArray(cart) ? cart[0] : cart;\n const updatedCartLines = actionContext.requestContext.telemetryData.updatedCartLines;\n let updatedProducts: IProductInfo[] = [];\n\n // Collect info on products updated in cart\n if (updatedCartLines) {\n try {\n updatedProducts = await getProductInfoFromCartLinesAsync(updatedCartLines, actionContext);\n } catch (error) {\n actionContext.telemetry.error('UpdateCartLines post-data action hook failed to process cart lines.', error);\n }\n }\n\n // Fire UpdateInCart event\n window._msdyn365.telemetry.logEvent(TelemetryEvent.UpdateInCart, {\n cartId: cartObject.Id,\n cartVersion: cartObject.Version ? cartObject.Version.toString() : '',\n products: updatedProducts,\n orderId: cartObject.OrderNumber ? cartObject.OrderNumber.toString() : ''\n });\n }\n};\n\ncreateDataActionHook({\n actionId: '@msdyn365-commerce/retail-proxy/Carts/UpdateCartLines',\n postReaderHook: afterUpdateCart,\n preReaderHook: beforeUpdateCart\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n CacheType,\n createObservableDataAction,\n getFriendlyName,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICreateActionContext,\n IGeneric,\n IRequestContext\n} from '@msdyn365-commerce/core';\nimport {\n buildCacheKeyWithUrlTokens,\n CurrentCategoryInput,\n getCategoryUrl,\n getCurrentCategory,\n removeDomainQspFromUrl\n} from '@msdyn365-commerce-modules/retail-actions';\n\nimport { IPageSummaryData } from '../IPageSummaryData';\n\nimport { ICategoryPageSummaryConfig } from './category-page-summary.props.autogenerated';\nimport { IDefaultPageSummaryConfig } from '../default-page-summary';\n\n/**\n * Category Page Summary Input\n */\nexport class CategoryPageSummaryInput implements IActionInput {\n public requestContext: IRequestContext;\n\n public config: ICategoryPageSummaryConfig | IDefaultPageSummaryConfig;\n\n constructor(config: ICategoryPageSummaryConfig | IDefaultPageSummaryConfig, requestContext: IRequestContext) {\n this.config = config || {};\n this.requestContext = requestContext;\n }\n\n public getCacheObjectType = (): string => 'CategoryPageSummary';\n\n public getCacheKey = (): string => buildCacheKeyWithUrlTokens('CategoryPageSummary', this.requestContext);\n\n public dataCacheType = (): CacheType => 'request';\n}\n\nconst createGetCurrentCategoryInput = (\n inputData: IActionContext,\n config?: ICategoryPageSummaryConfig | IDefaultPageSummaryConfig\n): CurrentCategoryInput => {\n if (inputData && inputData.requestContext) {\n let includeRootCategory: boolean | undefined;\n if (config) {\n includeRootCategory = (config as ICategoryPageSummaryConfig).includeRootCategory;\n }\n return new CurrentCategoryInput(inputData.requestContext, includeRootCategory);\n }\n\n throw new Error('Please specify categoryId query string in request.');\n};\n/**\n * Get skip count.\n * @param inputData\n */\nfunction getSkipCount(inputData: ICreateActionContext, IGeneric>): string | undefined {\n return inputData && inputData.requestContext && inputData.requestContext.query && inputData.requestContext.query.skip;\n}\n\nconst action = async (input: CategoryPageSummaryInput, context: IActionContext): Promise => {\n const { config } = input;\n let currentCategoryResult;\n try {\n currentCategoryResult = await getCurrentCategory(createGetCurrentCategoryInput(context, input.config), context);\n } catch {\n // Do nothing, if the action fails fallback to values defined in data\n }\n if (currentCategoryResult) {\n const currentCategory = { ...currentCategoryResult };\n let categoryUrl: string | undefined;\n try {\n // Reset category's name neutralizedName\n const localName = getFriendlyName(context.requestContext.locale, currentCategory.NameTranslations);\n const neutralizedName = currentCategory.NeutralizedName || currentCategory.Name;\n currentCategory.Name = localName;\n currentCategory.NeutralizedName = neutralizedName;\n categoryUrl = getCategoryUrl(currentCategory);\n\n const canonicalDomain = context.requestContext.canonicalDomain;\n if (categoryUrl && canonicalDomain) {\n categoryUrl = `https://${canonicalDomain}${categoryUrl}`.toLocaleLowerCase();\n const skipCount = getSkipCount(context);\n const Url = new URL(categoryUrl);\n const urlParams: URLSearchParams = new URLSearchParams(Url.search);\n if (skipCount) {\n urlParams.set('skip', skipCount);\n }\n Url.search = urlParams.toString();\n categoryUrl = Url.toString();\n categoryUrl = removeDomainQspFromUrl(categoryUrl, context.requestContext);\n } else {\n categoryUrl = undefined;\n }\n } catch {\n categoryUrl = undefined;\n }\n return {\n title: currentCategory.Name,\n sharingImageUrl: currentCategory.OfflineImage,\n canonicalUrl: categoryUrl,\n faviconUrl: config && config.faviconUrl\n };\n\n // If the action fails fallback to values defined from data\n } else if (config) {\n return {\n title: config.title,\n sharingImageUrl: config.sharingImage && config.sharingImage.src,\n faviconUrl: config && config.faviconUrl\n };\n }\n return {};\n};\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/page-summary/category-page-summary',\n action: >action,\n input: (args: ICreateActionContext) => {\n return new CategoryPageSummaryInput(args.config, args.requestContext);\n }\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext,\n IRequestContext\n} from '@msdyn365-commerce/core';\nimport { buildCacheKeyWithUrlTokens, removeDomainQspFromUrl } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { IDefaultPageSummaryConfig } from './default-page-summary.props.autogenerated';\n\nexport interface IPageSummaryData {\n title?: string;\n description?: string;\n keywords?: string;\n sharingImageUrl?: string;\n canonicalUrl?: string;\n faviconUrl?: string;\n}\n\n/**\n * Page Summary Input\n */\nexport class PageSummaryInput implements IActionInput {\n public requestContext: IRequestContext;\n\n public config: IDefaultPageSummaryConfig;\n\n constructor(config: IDefaultPageSummaryConfig, requestContext: IRequestContext) {\n this.config = config || {};\n this.requestContext = requestContext;\n }\n\n public getCacheObjectType = (): string => 'PageSummary';\n\n public getCacheKey = (): string => `${buildCacheKeyWithUrlTokens('PageSummary', this.requestContext)}-${this.config.title}`;\n\n public dataCacheType = (): CacheType => 'request';\n}\n\nconst action = async (input: PageSummaryInput, context: IActionContext): Promise => {\n const { config } = input;\n return {\n title: config && config.title,\n description: config && config.description,\n keywords: config && config.keywords,\n sharingImageUrl: config && config.sharingImage && config.sharingImage.src,\n canonicalUrl:\n context.requestContext && context.requestContext.canonicalUrl\n ? removeDomainQspFromUrl(context.requestContext.canonicalUrl, context.requestContext)\n : undefined,\n faviconUrl: config && config.faviconUrl\n };\n};\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/page-summary/default-page-summary',\n action: >action,\n input: (args: ICreateActionContext) => {\n return new PageSummaryInput(args.config, args.requestContext);\n }\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICreateActionContext,\n IGeneric,\n IRequestContext\n} from '@msdyn365-commerce/core';\nimport { Image, ISubList } from '@msdyn365-commerce-modules/data-types';\nimport { buildCacheKeyWithUrlTokens, getList, ListInput } from '@msdyn365-commerce-modules/retail-actions';\nimport { IProductItem } from '@msdyn365-commerce-modules/retail-actions/dist/types/get-list';\n\nimport { IDefaultPageSummaryConfig } from '../default-page-summary/default-page-summary.props.autogenerated';\nimport { IPageSummaryData } from '../IPageSummaryData';\n\n/**\n * List Page Summary Input\n */\nexport class ListPageSummaryInput implements IActionInput {\n public requestContext: IRequestContext;\n\n public config: IDefaultPageSummaryConfig;\n\n constructor(config: IDefaultPageSummaryConfig, requestContext: IRequestContext) {\n this.config = config || {};\n this.requestContext = requestContext;\n }\n\n public getCacheObjectType = (): string => 'ListPageSummary';\n\n public getCacheKey = (): string => buildCacheKeyWithUrlTokens('ListPageSummary', this.requestContext);\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * List item type enum.\n */\nenum ListItemType {\n list = 'list',\n product = 'product'\n}\n\n/**\n * Get the url of sub list.\n * @param listName\n * @param sitePath\n */\nfunction getSubListUrl(listName: string, sitePath: string): string {\n if (!listName) {\n return '';\n }\n\n if (!sitePath) {\n return `/${listName}.l`;\n }\n\n // SitePath has a leading '/'\n return `${sitePath}/${listName}.l`;\n}\n\n/**\n * Get sub list item.\n * @param item\n * @param sitePathOfRequest\n */\nfunction getSubListItem(item: IGeneric, sitePathOfRequest: string): ISubList {\n const imageList: Image[] = getImages(item.fields.content.images);\n\n const sublistHref = getSubListUrl(item.fields._name, sitePathOfRequest);\n return {\n Title: item.fields.content.title,\n Description: item.fields.content.description,\n ShortDescription: item.fields.content.shortDescription,\n BackgroundColor: item.fields.content.backgroundColor,\n ForegroundColor: item.fields.content.foregroundColor,\n Href: sublistHref,\n Images: imageList\n };\n}\n\n/**\n * Get site path.\n * @param inputData\n */\nfunction getSitePath(inputData: ICreateActionContext, IGeneric>): string {\n return inputData && inputData.requestContext && inputData.requestContext.sitePath ? inputData.requestContext.sitePath : '';\n}\n\n/**\n * Get items per page.\n * @param inputData\n */\nfunction getItemsPerPage(inputData: ICreateActionContext, IGeneric>): number {\n if (!inputData || !inputData.config || !inputData.config.itemsPerPage) {\n return 50;\n }\n\n const result = Number(inputData.config.itemsPerPage);\n if (isNaN(result)) {\n return 50;\n }\n\n return result;\n}\n\n/**\n * Get skip count.\n * @param inputData\n */\nfunction getSkipCount(inputData: ICreateActionContext, IGeneric>): number {\n return inputData && inputData.requestContext && inputData.requestContext.query && inputData.requestContext.query.skipCount\n ? Number(inputData.requestContext.query.skipCount)\n : 0;\n}\n\n/**\n * Get images.\n * @param images\n */\nfunction getImages(images: IGeneric[]): Image[] {\n const resultImageList: Image[] = [];\n\n if (!images) {\n return resultImageList;\n }\n\n images.forEach(item => {\n if (item && item.image && item.image.href) {\n // Add image item\n const imageItem: Image = {\n href: item.image.href,\n altText: item.image.altText,\n title: item.image.title,\n width: item.image.width,\n height: item.image.height\n };\n\n resultImageList.push(imageItem);\n }\n });\n\n return resultImageList;\n}\n\n/**\n * Get input list data.\n * @param inputData\n */\nfunction getInputListData(inputData: ICreateActionContext, IGeneric>): IGeneric {\n let listData =\n !inputData || !inputData.requestContext || !inputData.requestContext.pageData ? null : inputData.requestContext.pageData.list;\n if (\n !inputData ||\n !inputData.requestContext ||\n !inputData.requestContext.pageData ||\n !inputData.requestContext.pageData.list ||\n !inputData.requestContext.pageData.list.content ||\n !inputData.requestContext.pageData.list.content.items ||\n !inputData.requestContext.pageData.list.content.title ||\n !inputData.requestContext.pageData.list._id\n ) {\n if (\n !inputData ||\n !inputData.data ||\n !inputData.data.list ||\n !inputData.data.list.content ||\n !inputData.data.list.content.items ||\n !inputData.data.list.content.title ||\n !inputData.data.list._id\n ) {\n console.error('data is not well defined for list action input');\n throw new Error('data is not well defined for list action input');\n }\n\n listData = inputData.data.list;\n }\n return listData;\n}\n\nconst createGetListInput = (inputData: IActionContext): ListInput => {\n const listData: IGeneric = getInputListData(inputData);\n const listItems: (IProductItem[] | ISubList)[] = [];\n let productList: IProductItem[] = [];\n\n const parentImageList: Image[] = getImages(listData.content.images);\n\n const itemsPerPage = getItemsPerPage(inputData);\n const skipCount = getSkipCount(inputData);\n\n // This is the list contains all product and will be used to call getSimpleProducts data action.\n const productItems: IProductItem[] = [];\n const sum = skipCount + itemsPerPage;\n for (let index = skipCount; index < listData.content.items.length && index < sum; index++) {\n const item = listData.content.items[index];\n if (item.type === ListItemType.list) {\n if (!item.fields || !item.fields.content || !item.fields.content.title) {\n console.error(`sublist item fields, content or title missing in list ${listData._id}`);\n continue;\n }\n\n // If any elements in product list, then copy it and add to list items\n if (productList.length > 0) {\n const clonedList = [...productList];\n listItems.push(clonedList);\n productList = [];\n }\n\n // Build and add sublist item\n listItems.push(getSubListItem(item, getSitePath(inputData)));\n }\n\n if (item.type === ListItemType.product) {\n if (!item.fields || !item.fields.recordId) {\n console.error(`product item missing recordId in list ${listData._id}`);\n continue;\n }\n\n // Add product item\n const productItem: IProductItem = {\n RecordId: item.fields.recordId,\n CatalogId: item.fields.catalogId || '0'\n };\n\n productList.push(productItem);\n productItems.push(productItem);\n }\n }\n\n // Save the last portion of product items.\n if (productList.length > 0) {\n listItems.push(productList);\n }\n\n return new ListInput(\n listData._id,\n listData.content.title,\n listData.content.description,\n listData.content.shortDescription,\n listData.content.backgroundColor,\n listData.content.foregroundColor,\n parentImageList,\n listItems,\n productItems,\n listData.content.items.length,\n itemsPerPage,\n skipCount\n );\n};\n\nconst action = async (input: ListPageSummaryInput, context: IActionContext): Promise => {\n const { config } = input;\n let listData;\n try {\n listData = await getList(createGetListInput(context), context);\n } catch {\n // Do nothing, if there's an error running the action fall back to values defined from data\n }\n if (listData && listData.Title) {\n return {\n title: listData.Title,\n description: listData.Description\n };\n\n // If the action fails fallback to values defined from data\n } else if (config) {\n return {\n title: config.title,\n description: config.description\n };\n }\n return {};\n};\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/page-summary/list-page-summary',\n action: >action,\n input: (args: ICreateActionContext) => {\n return new ListPageSummaryInput(args.config, args.requestContext);\n }\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n CacheType,\n createObservableDataAction,\n getCatalogId,\n IAction,\n IActionContext,\n IActionInput,\n ICommerceApiSettings,\n ICreateActionContext,\n IRequestContext\n} from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getAttributeValuesAsync, getByIdsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport {\n ArrayExtensions,\n generateCacheKey,\n generateImageUrl,\n getProductUrlSync,\n getSelectedProductIdFromActionInput,\n QueryResultSettingsProxy,\n removeDomainQspFromUrl\n} from '@msdyn365-commerce-modules/retail-actions';\n\nimport { IPageSummaryData } from '../IPageSummaryData';\nimport { IProductPageSummaryConfig } from './product-page-summary.props.autogenerated';\n\n/**\n * Product Page Summary Input.\n */\nexport class ProductPageSummaryInput implements IActionInput {\n public apiSettings: ICommerceApiSettings;\n\n public config: IProductPageSummaryConfig;\n\n public productId: number;\n\n public catalogId?: number;\n\n public constructor(\n config: IProductPageSummaryConfig,\n apiSettings: ICommerceApiSettings,\n productId: number,\n requestContext?: IRequestContext\n ) {\n this.config = config || {};\n this.apiSettings = apiSettings;\n this.productId = productId;\n\n if (requestContext) {\n this.catalogId = getCatalogId(requestContext);\n }\n }\n\n public getCacheObjectType = (): string => 'ProductPageSummary';\n\n public getCacheKey = (): string =>\n generateCacheKey(\n this.apiSettings,\n { key: 'Key', value: 'ProductPageSummary' },\n { key: 'Title', value: this.config.title },\n { key: 'ProductId', value: this.productId },\n { key: 'CatalogId', value: this.catalogId }\n );\n\n public dataCacheType = (): CacheType => 'application';\n}\n\nexport interface IProductPageSummary extends IPageSummaryData {\n price?: number;\n productId?: number;\n productBrand?: string;\n}\n\nconst createInput = (args: ICreateActionContext) => {\n const productId = getSelectedProductIdFromActionInput(args);\n\n if (productId) {\n return new ProductPageSummaryInput(\n args.config,\n args.requestContext.apiSettings,\n +productId,\n args.requestContext\n );\n }\n throw new Error('Unable to create ProductPageSummaryAction input, no productId found on module config or query');\n};\n\n// Checks product attributes for the presence of brand attribute to extract the brand name for product metadata\nconst getProductBrand = async (\n context: IActionContext,\n recordId: number,\n channelId: number,\n catalogId: number\n): Promise => {\n const productAttributes = await getAttributeValuesAsync(\n {\n callerContext: context,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context)\n },\n recordId,\n channelId,\n catalogId\n );\n for (const productAttribute of productAttributes) {\n if (productAttribute.Name === 'Brand') {\n return productAttribute.TextValue;\n }\n }\n return;\n};\n\nconst action = async (input: ProductPageSummaryInput, context: IActionContext): Promise => {\n const { config, productId, apiSettings } = input;\n let simpleProductsData: SimpleProduct[] | undefined;\n try {\n simpleProductsData = ArrayExtensions.validValues(\n await getByIdsAsync(\n {\n callerContext: context,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context)\n },\n apiSettings.channelId,\n [productId],\n null,\n input.catalogId ?? 0\n )\n );\n } catch {\n // Do nothing, if there's an error we fall back to values defined from config\n }\n if (ArrayExtensions.hasElements(simpleProductsData)) {\n const simpleProductData = simpleProductsData[0];\n let productUrl: string | undefined;\n try {\n productUrl = getProductUrlSync(simpleProductData, context);\n const canonicalDomain = context.requestContext.canonicalDomain;\n if (productUrl && canonicalDomain) {\n productUrl = `https://${canonicalDomain}${productUrl}`.toLocaleLowerCase();\n productUrl = removeDomainQspFromUrl(productUrl, context.requestContext);\n } else {\n productUrl = undefined;\n }\n } catch {\n productUrl = undefined;\n }\n let productBrand: string | undefined;\n try {\n productBrand = await getProductBrand(context, productId, apiSettings.channelId, input.catalogId ?? 0);\n } catch {\n productBrand = undefined;\n }\n return {\n title: simpleProductData.Name,\n description: simpleProductData.Description,\n sharingImageUrl: generateImageUrl(simpleProductData.PrimaryImageUrl, apiSettings),\n canonicalUrl: productUrl,\n faviconUrl: config && config.faviconUrl,\n productId: simpleProductData.RecordId,\n price: simpleProductData.AdjustedPrice,\n productBrand\n };\n\n // If the action fails fallback to values defined from config\n } else if (config) {\n return {\n title: config.title,\n description: config.description,\n sharingImageUrl: config.sharingImage && config.sharingImage.src,\n faviconUrl: config && config.faviconUrl\n };\n }\n return {};\n};\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/page-summary/product-page-summary',\n action: >action,\n input: createInput\n});\n","module.exports = React;","module.exports = ReactDOM;"],"names":["binding","modules","dataActions","registerActionId","actionPath","default","prototype","id","Object","keys","forEach","exportName","Action","require","window","__bindings__","_objectSpread","packageDataActions","GetBotFrameworkInput","constructor","getCacheKey","getCacheObjectType","dataCacheType","Msdyn365","action","async","input","ctx","_msdyn365Commerce$sec","ISecretValue","msdyn365Commerce","secretManager","getSecretValue","requestContext","apiSettings","baseUrl","apiToken","value","args","createDataActionHook","actionId","postReaderHook","_inputs","cart","actionContext","_msdyn365","telemetry","cartObject","Array","isArray","addedCartLines","telemetryData","addedProducts","getProductInfoFromCartLinesAsync","error","logEvent","TelemetryEvent","AddToCart","cartId","Id","cartVersion","Version","toString","products","orderId","OrderNumber","preReaderHook","inputs","actionInput","queryParams","addCartLinesParams","cartLines","debug","e","cartLineProductUnits","CartLines","length","CheckOut","simpleProduct","Promise","resolve","productInfo","getProductInfoFromSimpleProduct","productSku","ProductPageView","simpleProducts","product","salesOrder","salesObject","saleLineProductUnits","SalesLines","Purchase","affiliation","ChannelId","revenue","NetAmountWithoutTax","tax","TaxAmount","activeCart","removeCartLineIds","removedCartLineIds","productTransaction","removedCartLines","removedProducts","cartLine","ProductId","indexOf","LineId","some","push","RemoveFromCart","removeCartLinesParams","cartLineIds","undefined","channel","Error","productPromises","i","getByIdAsync","callerContext","RecordId","then","result","productPrice","Price","productQuantity","Quantity","reason","all","recordId","productId","MasterProductId","productName","Name","Description","productChannelId","productChannelName","productCategoryId","productCategoryName","productCurrency","updatedCartLines","updatedProducts","UpdateInCart","updateCartLinesParams","CategoryPageSummaryInput","config","buildCacheKeyWithUrlTokens","this","createObservableDataAction","context","currentCategoryResult","getCurrentCategory","createGetCurrentCategoryInput","inputData","includeRootCategory","CurrentCategoryInput","_unused","currentCategory","categoryUrl","localName","getFriendlyName","locale","NameTranslations","neutralizedName","NeutralizedName","getCategoryUrl","canonicalDomain","toLocaleLowerCase","skipCount","query","skip","Url","URL","urlParams","URLSearchParams","search","set","removeDomainQspFromUrl","_unused2","title","sharingImageUrl","OfflineImage","canonicalUrl","faviconUrl","sharingImage","src","PageSummaryInput","description","keywords","ListItemType","ListPageSummaryInput","getSubListItem","item","sitePathOfRequest","imageList","getImages","fields","content","images","sublistHref","listName","_name","sitePath","Title","ShortDescription","shortDescription","BackgroundColor","backgroundColor","ForegroundColor","foregroundColor","Href","Images","getSitePath","resultImageList","image","href","imageItem","altText","width","height","createGetListInput","listData","pageData","list","items","_id","data","console","getInputListData","listItems","productList","parentImageList","itemsPerPage","Number","isNaN","getItemsPerPage","getSkipCount","productItems","sum","index","type","clonedList","productItem","CatalogId","catalogId","ListInput","getList","ProductPageSummaryInput","generateCacheKey","key","getCatalogId","simpleProductsData","_input$catalogId","ArrayExtensions","validValues","getByIdsAsync","queryResultSettings","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","channelId","hasElements","simpleProductData","productUrl","productBrand","getProductUrlSync","_input$catalogId2","productAttributes","getAttributeValuesAsync","productAttribute","TextValue","getProductBrand","_unused3","generateImageUrl","PrimaryImageUrl","price","AdjustedPrice","getSelectedProductIdFromActionInput","module","exports","React","ReactDOM"],"sourceRoot":""}