{"version":3,"sources":["webpack://casperEventHub/webpack/bootstrap","webpack://casperEventHub/./src/predicates.ts","webpack://casperEventHub/./src/store.ts","webpack://casperEventHub/./src/rule.ts","webpack://casperEventHub/./src/debugMode.ts","webpack://casperEventHub/./src/session-time.ts","webpack://casperEventHub/./src/xpMismatches.ts","webpack://casperEventHub/./src/salesForceAudience.ts","webpack://casperEventHub/./src/salesforceAudiencePerso.ts","webpack://casperEventHub/./src/experience.ts","webpack://casperEventHub/./src/index.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","installedModules","9","__webpack_require__","exports","module","l","e","promises","installedChunkData","promise","Promise","resolve","reject","onScriptComplete","script","document","createElement","charset","timeout","nc","setAttribute","src","p","jsonpScriptSrc","error","Error","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","undefined","setTimeout","head","appendChild","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","jsonpArray","window","oldJsonpFunction","slice","s","isPredicate","isObject","proto","isString","isEqual","expected","evaluate","condition","Array","possibility","buildPredicates","exclude","conditions","possibilities","parseCondition","res","childConditionValue","allOf","oneOf","noneOf","any","regex","isGreaterThanOrEqual","isLessThanOrEqual","olderThan","duration","day","units","days","months","weeks","years","Date","SubConditionIsFalse","urlParamsStorageNamespace","journeySessionStorageNamespace","initStore","pathname","pages","readFromStorage","currentParams","readParams","JSON","storeEntryQueryParams","pageName","time","url","getStableHomePath","saveToStorage","experiences","initDebug","ExperienceStore","this","param","experience","setTriggered","setMismatched","save","path","storage","queryParams","parseQueryString","queryString","pair","namespace","Rule","addPredicates","primitiveConditions","functionConditions","validate","predicates","every","isValid","predicate","logDebug","debugMode","SessionTime","getInstance","addTimeEllapsedCallback","timeEllapsedCallback","removeTimeEllapsedCallback","timeEllapsedCallbacks","indexOf","startTimer","onTimePassed","checkCallbacksOnInterval","casperMismatchEvent","XpMismatches","getState","lastXpName","onXpMismatches","off","boundListener","SalesForceAudience","SalesForceAudiencePerso","then","result","body","recover","Experience","doEval","eventData","tests","userRule","user","basketTotal","totals","basket","products","journey","salesForceAudience","salesForceAudiencePerso","urlParameters","urlParams","dateRange","date","standingOrdersInstance","standingOrders","subscriptionsInstance","subscriptions","xpMistmatchesInstance","xpName","onceRuleInstance","args","arguments","f","isSimpleUserExperience","hasSimpleUserPredicate","unsubscribe","resolvedEventData","trackCasper","experience_name","store","experience_rule","currentRule","join","experience_match","event_raised_by","dispatchXpMismatch","casperEvent","mismatches","xpMistmatches","XpMismatchesRule","standingOrdersContains","orders","StandingOrdersRule","subscriptionsContains","subscriptionsConditions","SubscriptionsRule","isInDateRange","dates","DateRangeRule","urlParameterIs","UrlParametersRule","salesForceAudienceIs","segments","salesForceAudiencePersoIs","visitorIs","UserRule","isSimpleUserPredicate","basketTotalIs","BasketTotalRule","basketContains","BasketRule","visits","pagesUrls","addExpectedJourney","importJourney","since","addExpectedTime","once","onceRule","executeOnMatch","executeOnMismatch","JourneyRule"],"mappings":"kCACE,SAASA,EAAqBC,GAQ7B,IAPA,IAMIC,EAAUC,EANVC,EAAWH,EAAK,GAChBI,EAAcJ,EAAK,GAKAK,EAAI,EAAGC,EAAW,GACpCD,EAAIF,EAASI,OAAQF,IACzBH,EAAUC,EAASE,GAChBG,OAAOC,UAAUC,eAAeC,KAAKC,EAAiBV,IAAYU,EAAgBV,IACpFI,EAASO,KAAKD,EAAgBV,GAAS,IAExCU,EAAgBV,GAAW,EAE5B,IAAID,KAAYG,EACZI,OAAOC,UAAUC,eAAeC,KAAKP,EAAaH,KACpDa,EAAQb,GAAYG,EAAYH,IAKlC,IAFGc,GAAqBA,EAAoBf,GAEtCM,EAASC,QACdD,EAASU,OAATV,GAOF,IAAIW,EAAmB,GAKnBL,EAAkB,CACrBM,EAAG,GAWJ,SAASC,EAAoBlB,GAG5B,GAAGgB,EAAiBhB,GACnB,OAAOgB,EAAiBhB,GAAUmB,QAGnC,IAAIC,EAASJ,EAAiBhB,GAAY,CACzCI,EAAGJ,EACHqB,GAAG,EACHF,QAAS,IAUV,OANAN,EAAQb,GAAUU,KAAKU,EAAOD,QAASC,EAAQA,EAAOD,QAASD,GAG/DE,EAAOC,GAAI,EAGJD,EAAOD,QAKfD,EAAoBI,EAAI,SAAuBrB,GAC9C,IAAIsB,EAAW,GAKXC,EAAqBb,EAAgBV,GACzC,GAA0B,IAAvBuB,EAGF,GAAGA,EACFD,EAASX,KAAKY,EAAmB,QAC3B,CAEN,IAAIC,EAAU,IAAIC,SAAQ,SAASC,EAASC,GAC3CJ,EAAqBb,EAAgBV,GAAW,CAAC0B,EAASC,MAE3DL,EAASX,KAAKY,EAAmB,GAAKC,GAGtC,IACII,EADAC,EAASC,SAASC,cAAc,UAGpCF,EAAOG,QAAU,QACjBH,EAAOI,QAAU,IACbhB,EAAoBiB,IACvBL,EAAOM,aAAa,QAASlB,EAAoBiB,IAElDL,EAAOO,IA1DV,SAAwBpC,GACvB,OAAOiB,EAAoBoB,EAAI,IAAM,CAAC,EAAI,SAAS,EAAI,cAAc,EAAI,YAAY,EAAI,UAAU,EAAI,OAAO,EAAI,iBAAiB,EAAI,gBAAgB,EAAI,gBAAgB,EAAI,QAAQrC,IAAUA,GAAW,MAyD7LsC,CAAetC,GAG5B,IAAIuC,EAAQ,IAAIC,MAChBZ,EAAmB,SAAUa,GAE5BZ,EAAOa,QAAUb,EAAOc,OAAS,KACjCC,aAAaX,GACb,IAAIY,EAAQnC,EAAgBV,GAC5B,GAAa,IAAV6C,EAAa,CACf,GAAGA,EAAO,CACT,IAAIC,EAAYL,IAAyB,SAAfA,EAAMM,KAAkB,UAAYN,EAAMM,MAChEC,EAAUP,GAASA,EAAMQ,QAAUR,EAAMQ,OAAOb,IACpDG,EAAMW,QAAU,iBAAmBlD,EAAU,cAAgB8C,EAAY,KAAOE,EAAU,IAC1FT,EAAMY,KAAO,iBACbZ,EAAMQ,KAAOD,EACbP,EAAMa,QAAUJ,EAChBH,EAAM,GAAGN,GAEV7B,EAAgBV,QAAWqD,IAG7B,IAAIpB,EAAUqB,YAAW,WACxB1B,EAAiB,CAAEmB,KAAM,UAAWE,OAAQpB,MAC1C,MACHA,EAAOa,QAAUb,EAAOc,OAASf,EACjCE,SAASyB,KAAKC,YAAY3B,GAG5B,OAAOJ,QAAQgC,IAAInC,IAIpBL,EAAoByC,EAAI9C,EAGxBK,EAAoB0C,EAAI5C,EAGxBE,EAAoB2C,EAAI,SAAS1C,EAASiC,EAAMU,GAC3C5C,EAAoB6C,EAAE5C,EAASiC,IAClC7C,OAAOyD,eAAe7C,EAASiC,EAAM,CAAEa,YAAY,EAAMC,IAAKJ,KAKhE5C,EAAoBiD,EAAI,SAAShD,GACX,oBAAXiD,QAA0BA,OAAOC,aAC1C9D,OAAOyD,eAAe7C,EAASiD,OAAOC,YAAa,CAAEC,MAAO,WAE7D/D,OAAOyD,eAAe7C,EAAS,aAAc,CAAEmD,OAAO,KAQvDpD,EAAoBqD,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQpD,EAAoBoD,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKnE,OAAOoE,OAAO,MAGvB,GAFAzD,EAAoBiD,EAAEO,GACtBnE,OAAOyD,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOpD,EAAoB2C,EAAEa,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRxD,EAAoB4D,EAAI,SAAS1D,GAChC,IAAI0C,EAAS1C,GAAUA,EAAOqD,WAC7B,WAAwB,OAAOrD,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAF,EAAoB2C,EAAEC,EAAQ,IAAKA,GAC5BA,GAIR5C,EAAoB6C,EAAI,SAASgB,EAAQC,GAAY,OAAOzE,OAAOC,UAAUC,eAAeC,KAAKqE,EAAQC,IAGzG9D,EAAoBoB,EAAI,0CAGxBpB,EAAoB+D,GAAK,SAASC,GAA2B,MAApBC,QAAQ3C,MAAM0C,GAAYA,GAEnE,IAAIE,EAAaC,OAAmC,2BAAIA,OAAmC,4BAAK,GAC5FC,EAAmBF,EAAWxE,KAAKiE,KAAKO,GAC5CA,EAAWxE,KAAOd,EAClBsF,EAAaA,EAAWG,QACxB,IAAI,IAAInF,EAAI,EAAGA,EAAIgF,EAAW9E,OAAQF,IAAKN,EAAqBsF,EAAWhF,IAC3E,IAAIU,EAAsBwE,EAI1B,OAAOpE,EAAoBA,EAAoBsE,EAAI,G,wqCC1L9C,SAASC,EAAYnB,GAC1B,yBAAcA,EAGT,SAASoB,EAASpB,GACvB,KACIA,qBAA6C,iBAAVA,GADvC,OAC6DA,GAE3D,SAEF,IAAMqB,EAAQpF,sBAAd,GACA,OAAOoF,IAAUpF,OAAVoF,WAAP,OAAqCA,EAGhC,SAASC,EAAStB,GACvB,MACmB,iBAAVA,GADT,oBAEE/D,kCAIJ,SAASsF,EAAQC,GACf,OAAO,mBAAwBA,IAAxB,G,sXAGF,IA0CMC,EAAW,SAAC,EAAD,GAItB,OAAIN,EAAJ,GACSO,EAAUC,mBAA2C,CAA5D,IACSA,cAAJ,GACEC,EAAA,MAAiB,mBAAeL,KAAf,MAEjBA,KAAP,IAISM,EAAkB,SAAC,EAAD,KAK7B,YADgD,IADhDC,OAAU,GAEH,YACL,OAAIA,GAAJ,IAAeC,SACb,IAAOC,SAEFD,EAAA,IAAqB,mBAC1BC,EAAA,MAAmB,YACjB,IACE,OAnEoB,SAAjBC,EAAkB,EAAD,KAK5B,QADc,IADdC,MAAiB,IAEbf,MAA0BG,EAA9B,GAEE,OADAY,OAAST,EAASC,EAAlBQ,IACA,EAEF,cAAuBjG,YAAvB,kBAA+C,CAA1C,IAAMyE,EAAQ,EAAd,GACH,YAAKkB,EAAD,GACF,MAAM,IAAN,EAEF,IAAMO,EAAkCT,EAAxC,GAGA,GAAIN,EAAJ,GAAmC,CACjC,IAAIA,EAAUQ,EAAd,IAQE,MAAM,IAAN,EARwD,OACxD,EAAAM,GAAA,aACKD,EAAe,EAEfL,EAHL,UAUFM,OACET,EAAS,EAENG,EAHLM,KAOF,QAAIA,EAAIA,SAAJA,GACF,MAAM,IAAN,EAGJ,SA4BeD,CAAeP,EAAf,UAA6C,wBACpD,MAAO1E,GAIP,OAHMA,aAAN,GACE6D,gBAEF,UARC,EAAP,IAiBG,SAASuB,IAA4C,2BAAnCL,EAAmC,yBAAnCA,EAAmC,gBAC1D,OAAOF,EAAgB,QAAvB,GAGK,SAASQ,IAA4C,2BAAnCN,EAAmC,yBAAnCA,EAAmC,gBAC1D,OAAOF,EAAgB,OAAvB,GAGK,SAASS,IAA6C,2BAAnCP,EAAmC,yBAAnCA,EAAmC,gBAC3D,OAAOF,EAAgB,OAAQE,GAA/B,GAGK,SAASQ,IACd,OAAO,mBACLP,EAAA,MAAmB,yBAGhB,SAASQ,EAAMhB,GACpB,OAAO,mBACLQ,EAAA,MAAmB,mBAAiBR,OAAjB,OAGhB,SAASiB,EAAqBjB,GACnC,OAAO,mBACLQ,EAAA,MAAmB,mBAAiBJ,GAAjB,MAGhB,SAASc,EAAkBlB,GAChC,OAAO,mBACLQ,EAAA,MAAmB,mBAAiBJ,GAAjB,MAGhB,SAASe,EAAUC,EAAnB,GACL,IAAMC,EAAM,MACNC,EAAkB,CACtBC,KADsB,EAEtBC,OAAQH,WACRI,MAHsB,EAGfJ,EACPK,MAAa,IAANL,GAET,QAAI5G,0BACF,MAAM,IAAIkC,MACR,6EAGElC,oBAJJ,MAOF,OAAO,mBACL+F,EAAA,MACE,mBACEmB,WACA,IAAIA,KAAKvB,GAAT,UAA4CkB,KAF9C,MAMN,IAAaM,EAAb,Y,QAAA,yD,EAAA,G,EAAA,G,sEAAA,c,+nBCzKO,IAGP,EACO,EACA,EALMC,EAAN,2BAEMC,EAAN,yBAKA,SAASC,IACdC,EAAWzC,yBAAXyC,SACAC,EAAQC,EAAgBJ,EAAxBG,IA2FK,WAEL,UADsB1C,8BAAtB,GAC4B,CAC1B,IAAM4C,EAAgBC,IACtB7C,gCAEE8C,eAFF9C,KA9FF+C,GAgFAL,OAAW,CACTM,SACEhD,OAAOA,mBAAPA,wCAFO,SAITiD,KAJS,EAKTC,IAAKC,EAAkBV,KAEzBW,EAAcb,EAAda,GArFAC,EAAcV,EAXhB,6BAWEU,IAIAnI,wBACE,mBAAUmI,iBAAV,KAEFC,c,IASmBC,E,WAOnB,gBAEE,GAFiD,oBANhC,GAMgC,qBAL/B,GAK+B,mEAFjCJ,EAAkBV,IAGlCe,KAAA,iBAAkBC,OAAlB,EAAkBA,EAAlB,WACIJ,EAAJ,GAAuB,CACrB,IAAMK,EAAaL,EAAnB,GACIK,YAAuBF,KAA3B,SACEA,KAAA,KAAYE,EAAZ,KACAF,KAAA,UAAiBE,EAFsB,UAKvCA,iBAEAF,KAAA,YAGFA,KAAA,OACAA,KAAA,O,2BAGGG,aAAP,WACEH,KAAA,aACAA,KAAA,cACAA,KAAA,Q,EAEKI,cAAP,WACEJ,KAAA,cACAA,KAAA,Q,EAEMK,KAAR,WACER,EAAYG,KAAZH,WACAD,EA/DJ,6BA+DIA,I,KAIG,SAASD,EAAkBW,GAKhC,MAHA,OADAA,EAAOA,0BAAkCA,SAAlCA,GAAmDA,SAA1DA,IACIA,aACFA,EAAOA,WAAPA,IAGAA,GACCA,YAAiBA,yBAAjBA,WAFH,IAMF,SAASnB,EAAgB,EAAzB,GAIE,IAAMoB,EAAU/D,8BAAhB,GACA,OAAO+D,EACFjB,WADS,GAAd,EA2BK,SAASD,IACd,QAAI7C,uBACF,SAEF,IAAMgE,EAAcC,EAAiBjE,gBAArC,QACA,WAAIA,qBAEF,KADmBiE,EAAiBjE,gBAApC,MACA,GAEA,EAIJ,SAASiE,EAAiBC,GACxB,aAAIA,EAA4B,GACzBA,EAAA,yBAGA,mBAAOjH,QAAP,QAHA,QAIG,cAAe,QACAkH,MADA,oBACd5E,EADc,KACTN,EADS,KAErB,yBAAwBA,IAAxB,QANJ,IAcK,SAASmE,EAAcgB,EAAvB,GACLpE,gCAAyC8C,eAAzC9C,M,2PC7ImBqE,E,oCACiB,I,iJAE7BC,cAAP,YAAmD,MAC3CC,EAAkCvD,EAAA,QACtC,mBACGX,gBAAuBnF,eAAxB,QACAqF,YAFF,MAIIiE,EAAkCxD,SAAxC,KACIuD,EAAJ,QACEf,KAAA,gBAAqBnC,iBAArB,KAEF,EAAAmC,KAAA,6B,EAEQiB,SAAV,YAA0D,WACxD,OAAOjB,KAAKkB,WAAWC,OAAM,YAC3B,IAAMC,EAAUC,EAAhB,GAOA,OANA,WACE,qCACE/B,eADF,mBAGE8B,EAJJ,YAMA,M,EAMME,SAAV,YACEC,KAAajF,YAAY,kBAAzBiF,I,iCAJF,WACE,OAAOvB,KAAKkB,WAAWzJ,OAAvB,O,8DChCJ,+EAEW8J,GAAJ,EAEA,SAASzB,IACCT,cACf,cACEkC,Q,4WCLiBC,E,WAgBnB,aAAc,WACZ,GADY,+BAL6C,IAK7C,eAJI,GAIJ,2EAFqB,MAG5BA,EAAL,mBACE,MAAM,IAAI5H,MAAV,oDAEFoG,KAAA,aACAxD,wCAAwC,WACtC0C,IAAMA,WAANA,QAA+B,EAA/BA,mBACAU,YAAc,EAAD,EAAbA,Q,EAtBU6B,YAAd,WAME,OALKD,EAAL,WACEA,wBACAA,WAAuB,IAAvBA,EACAA,yBAEKA,EAAP,U,iCAwBKE,wBAAP,YAGEC,aACA3B,KAAA,+B,EAGK4B,2BAAP,YAGE5B,KAAA,6BACEA,KAAK6B,sBAAsBC,QAD7B,O,EAMKC,WAAP,WACO/B,KAAL,yBACEA,KAAA,2BAEFA,KAAA,MAAaxD,mBAAb,O,EAGMwF,aAAR,WAAuB,WACrBhC,KAAA,+BAAmC,YAE/B2B,WACAA,QAA6B,EAF/B,qBAIEA,aACAA,kB,EAKEM,yBAAR,WAAmC,WACjCjC,KAAA,wBAA+BxD,OAAA,aAC7B,kBAAM,EAAN,iBACAwD,KAFF,2B,sCAxCF,WACE,OAAOxD,yBAA2BwD,KAAlC,W,kCA5BiBwB,E,qBAAAA,E,sBAUmB,I,weCPjC,IAAMU,EAAN,mBAEcC,E,oBAKnB,gBAGE,MAGA,GAHA,IACA,sBADA,uCANkC,MAMlC,kDAJuD,MAMvD,aACA,IAAIjB,SACF,MAAM,IAAItH,MACR,kEACEsH,SAFJ,YAKF,IAAKnE,YAASmE,EAAd,IACE,MAAM,IAAItH,MAAV,qEAKF,GADA,YAAiBsH,EAAjB,GACIrB,IAAY,EAAZA,YAA+BA,IAAY,EAAZA,WAAnC,WACE,WACE,eACE,EADF,UADF,qDAKA,aAAkB,EAAlB,cACK,CACL,WACE,eACE,EADF,UADF,sEAKA,IACE,gBAAqB,wBAArB,IACA3G,0BACEgJ,EAAsB,EADxBhJ,UAEE,EAFFA,eAIA,MAAOT,KAlCX,S,2GAuCK2J,SAAP,WACE,IAAMzE,EAAuB,CAC3ByD,QAASpB,KAAKiB,SAAU,CAACjB,KAAhB,cAKX,OAHA,OAAIA,KAAKqC,aACP1E,SAAaqC,KAAbrC,YAEF,G,EAEM2E,eAAR,YACEtC,KAAA,WAAmBnG,EAAnB,OACAmG,KAAA,SACE,eACEA,KADF,UADF,gDAKAA,KAAA,Y,EAEKuC,IAAP,WACE,OAAIvC,KAAKwC,eACPtJ,6BACEgJ,EAAsBlC,KADxB9G,UAEE8G,KAFF9G,gB,GAnEoC2H,M,6iBCHrB4B,E,yKACVL,SAAP,WAII,OAAOvJ,gBAHmB,CACtBuI,SAAS,K,GAH2BP,K,uGCA3B6B,E,yKACVN,SAAP,WAII,OAAOvJ,gBAHmB,CACtBuI,SAAS,K,GAHgCP,K,OCgF9C,kBACJ,OAAF,EACQ8B,EAAOA,EAAH,GAAX,GAEG,GAAWlH,EAAf,OACKA,EAAI5C,gBAAR4C,IAEMkH,EAAOlH,OAAH,GAAX,GAqgBM,cAtDA,cACN,IAAImH,EAASC,IACb,GAAID,GAAUA,EAAd,KACC,OAAOA,OAAP,GAZK,gBACN,IAAIA,EAASC,IACb,OAAID,GAAUA,EAAd,KACQA,OAAP,GAEMD,EAAP,GAYM,gBACN,IACC,IAAIC,EAASC,IACZ,SACD,OAAOC,EAAP,GAED,OAAIF,GAAUA,EAAd,KACQA,YAAY,EAAnB,GAED,E,4HAniBoBG,E,WAkBnB,gBAAmD,qZAJF,MAIE,iCAHlB,GAGkB,qBAFpB,IAEoB,wBAsasB,0BAtatB,2BAwayB,0BAva1E/C,KAAA,MAAa,IAAI,EAAJ,IAAb,G,2BAEYgD,O,SACZC,G,IAC0C,WAC1C,OAAO,IAAIpK,SAsBR,EAtBI,cACL,oBAAyBE,OAAzB,SACA,IAAMmK,EAAN,GAF4C,wBAGxC,EAHwC,cAInB,EAJmB,0CAKtCC,EALsC,uBAMRA,EANQ,4BAMhC/B,EANgC,UAMvBgC,EANuB,OAOxC,WAAc,yBAA2BhC,EAAzC,YACA,gCACA8B,UACAD,qBAVwC,mCAaxC,EAbwC,qBAchB,EAdgB,iDAetCI,EAfsC,uBAgBNA,EAhBM,4BAgBhCjC,EAhBgC,UAgBvBkC,EAhBuB,SAiBxC,WAAc,6BAA+BlC,EAA7C,YACA,oCACA8B,UACAD,uBApBwC,mCAuBxC,EAvBwC,gBAwBrB,EAxBqB,4CAyBtCM,EAzBsC,uBA0BJA,EA1BI,4BA0BhCnC,EA1BgC,UA0BvBoC,EA1BuB,WA2BxC,WAAc,8BAAgCpC,EAA9C,YACA,qCACA8B,UACAD,yBA9BwC,mCAiCxC,EAjCwC,iBAkCpB,EAlCoB,wBAmCtCQ,EAnCsC,qBAoCbA,EApCa,WAoChCrC,EApCgC,UAoCvBlC,EApCuB,QAqCxC,WAAc,4BAA8BkC,EAA5C,YACA,6BACA8B,UACAD,iBAxCwC,mCA2CxC,EA3CwC,oBA4C1C,IAAMS,EAAqB,EAA3B,mBA5C0C,wBA6CtCA,EA7CsC,uBA8CdA,EA9Cc,4BA8ChCtC,EA9CgC,UA+CxC,WACE,oCAAsCA,EADxC,YAGA,2CACA8B,oBAnDwC,mCAsDxC,EAtDwC,yBAuD1C,IAAMS,EAA0B,EAAhC,wBAvD0C,wBAwDtCA,EAxDsC,uBAyDdA,EAzDc,4BAyDhCvC,EAzDgC,UA0DxC,WACE,yCAA2CA,EAD7C,YAGA,gDACA8B,oBA9DwC,mCAiExC,EAjEwC,uBAkEd,EAlEc,8BAmEtCU,EAnEsC,qBAoETA,EApES,WAoEhCxC,EApEgC,UAoEvByC,EApEuB,YAqExC,WAAc,8BAAgCzC,EAA9C,YACA,qCACA8B,UACAD,qBAxEwC,mCA2ExC,EA3EwC,mBA4ElB,EA5EkB,0BA6EtCa,EA7EsC,qBA8EdA,EA9Ec,WA8EhC1C,EA9EgC,UA8EvB2C,EA9EuB,OA+ExC,WAAc,6BAA+B3C,EAA7C,YACA,oCACA8B,UACAD,gBAlFwC,mCAqFxC,EArFwC,wBAsFL,EAtFK,oDAuFtCe,EAvFsC,uBA2F9BA,EA3F8B,4BAyFtC5C,EAzFsC,UA0FtC6C,EA1FsC,iBA4FxC,WACE,sCAAwC7C,EAD1C,YAGA,6CACA8B,UACAD,+BAjGwC,mCAoGxC,EApGwC,uBAqGN,EArGM,mDAsGtCiB,EAtGsC,uBA0G9BA,EA1G8B,4BAwGtC9C,EAxGsC,UAyGtC+C,EAzGsC,gBA2GxC,WACE,qCAAuC/C,EADzC,YAGA,4CACA8B,UACAD,8BAhHwC,mCAmHxC,EAnHwC,uBAoHN,EApHM,8BAqHtCmB,EArHsC,qBAsHZA,EAtHY,WAsHhChD,EAtHgC,UAsHvBiD,EAtHuB,SAuHxC,WAAc,0BAA4BjD,EAA1C,YACA,oCACA8B,UACAD,kBA1HwC,mCA6HxC,EA7HwC,kBA8HX,EA9HW,4BA+HdqB,EA/Hc,WA+HlClD,EA/HkC,UA+HzBiD,EA/HyB,SAgI1C,WAAc,oBAAsBjD,EAApC,YACA,2BACA8B,UACAD,iBAnI0C,WAqIxCC,EAAJ,SACED,WAAqBC,EAAA,OAAY,yBAEnC,yBACApK,0CAlHE,WACF,IAAC,IAAIyL,EAAJ,GAAehN,EAApB,EAA2B,EAAIiN,UAA/B,OAAiDjN,IAChDgN,KAAUC,UAAVD,GAEG,IACG,OAAC,gBAAgBE,aAAvB,IACC,SACK,OAACxB,eAAP,O,kCARI,O,EAsHGyB,uBAAR,WACE,OACE1E,KAAK2E,yBACJ3E,KADD,cAECA,KAFD,SAGCA,KAHD,UAICA,KAJD,qBAKCA,KALD,0BAMCA,KAND,gBAOCA,KAPD,YAQCA,KARD,iBASCA,KAVH,e,EAaW9C,S,eAAqD,gBAChE,OAAI,qBACF,sBAEF,IAAM+F,EAA6C,CACjD2B,YAAa,uBALiD,OApG7D,EAoG6D,cAO5D,OACF,yBADE,EAE8B,SAF9B,sBAGEC,EAHF,UASI,SAAC,EAAD,QAAC,EAAL,YACE,sBAEF,mBACA,uBACA,WACE,uBAAyBA,WAD3B,kBAGK,IAAIA,aAKT,sBACA,wBACA,uBACA,WACE,uBAAyBA,WAD3B,mBAhC4D,WAoCxD,iBAxIL,EAoG6D,0BAnG5D,GAASpJ,EAAT,KAAsBA,OAAtB,GAAyCkH,EAAhD,G,kCADM,S,EA+IGmC,YAAR,YACEtI,qBAAuBA,sBAAvBA,GACAA,0BAA0B,CACxB3C,MADwB,oBAExBkL,gBAAiB/E,KAAKgF,MAFE,KAGxBC,gBAAiBjF,KAAKkF,YAAYC,KAHV,OAIxBC,iBAJwB,EAKxBC,gBAAiB,Y,EAIbC,mBAAR,WACE,IAAMC,EAAcrM,qBAApB,SACAqM,YAAsBrD,sBAAsBlC,KAAKgF,MAAjDO,YACEA,EAAD,OAAkCvF,KAAKgF,MAAvC,KACD9L,2B,EAGKsM,WAAP,WAAmD,kCAA9BtE,EAA8B,yBAA9BA,EAA8B,gBAWjD,OAVAlB,KAAA,cAAqB,6CAEd,YACL,IAAMyF,EAAgB,IAAIC,EAAJ,SACpB,kBAAgD,EAAhD,aADF,GAKA,OADAD,mBACA,KAEF,M,EAGKE,uBAAP,WAA2D,2BAA1BC,EAA0B,yBAA1BA,EAA0B,gBAQzD,OAPA5F,KAAA,eAAsB,mCAEf,YACL,IAAMiE,EAAiB,IAAI4B,EAA3B,QAEA,OADA5B,mBACA,KAEF,M,EAGK6B,sBAAP,WAA2E,2BAA3CC,EAA2C,yBAA3CA,EAA2C,gBAQzE,OAPA/F,KAAA,cAAqB,mCAEd,YACL,IAAMmE,EAAgB,IAAI6B,EAA1B,QAEA,OADA7B,mBACA,KAEF,M,EAGK8B,cAAP,WAAiD,2BAAzBC,EAAyB,yBAAzBA,EAAyB,gBAQ/C,OAPAlG,KAAA,UAAiB,mCAEV,YACL,IAAM8D,EAAY,IAAIqC,EAAtB,QAEA,OADArC,mBACA,KAEF,M,EAGKsC,eAAP,WAAsD,2BAA7BvC,EAA6B,yBAA7BA,EAA6B,gBAQpD,OAPA7D,KAAA,cAAqB,kCAEd,YACL,IAAM4D,EAAgB,IAAIyC,EAA1B,QAEA,OADAzC,mBACA,KAEF,M,EAGK0C,qBAAP,WACEtG,KAAA,mBAA0B,IAA1B,EADyD,2BAA5BuG,EAA4B,yBAA5BA,EAA4B,gBAGzD,OADAvG,KAAA,oCACA,M,EAGKwG,0BAAP,WACExG,KAAA,wBAA+B,IAA/B,EAD8D,2BAA5BuG,EAA4B,yBAA5BA,EAA4B,gBAG9D,OADAvG,KAAA,yCACA,M,EAGKyG,UAAP,WAAkD,kCAA9BvF,EAA8B,yBAA9BA,EAA8B,gBAchD,OAbAlB,KAAA,KAAY,mCACV,YACE,IAAMoD,EAAO,IAAIsD,EAAJ,SACX,kBAAgD,EAAhD,cAOF,OALAtD,mBACI,wBAAJ,KACE,6BAGF,KAGJ,M,EAEMuD,sBAAR,YACE,OACEzF,cACArE,YAASqE,EADTA,SAEAxJ,YAAYwJ,EAAZxJ,iBAHF,IAISwJ,KAAP,Q,EAGG0F,cAAP,WAAsD,kCAA9B1F,EAA8B,yBAA9BA,EAA8B,gBAUpD,OATAlB,KAAA,YAAmB,mCAEZ,YACL,IAAMqD,EAAc,IAAIwD,EAAJ,SAClB,kBAAgD,EAAhD,cAGF,OADAxD,mBACA,KAEF,M,EAEKyD,eAAP,WAAuD,kCAA9B5F,EAA8B,yBAA9BA,EAA8B,gBAUrD,OATAlB,KAAA,OAAc,mCACZ,YACE,IAAMuD,EAAS,IAAIwD,EAAJ,SACb,kBAAgD,EAAhD,cAGF,OADAxD,mBACA,KAGJ,M,EAEKyD,OAAP,WAA4C,2BAA3BC,EAA2B,yBAA3BA,EAA2B,gBAC1C,IAAMC,EAAqB,SAACzD,GAAD,OACzBA,qBADyB,IAa3B,OAVIzD,KAAJ,QACEA,KAAA,gBAAsC,YACpC1D,kBAGF0D,KAAA,QAAemH,IAAA,MAAqB,YAElC,OADAD,KACA,KAGJ,M,EAEKE,MAAP,YAAoC,WAC5BC,EAAkB,SAAC5D,GAAD,OACtBA,oBAAiC,gBADX,KAcxB,OAXIzD,KAAJ,QACEA,KAAA,QAAeA,KAAKyD,QAAQd,MAAK,YAE/B,OADA0E,KACA,KAGFrH,KAAA,QAAemH,IAAA,MAAqB,YAElC,OADAE,KACA,KAGJ,M,EAEKC,KAAP,WAAoB,WAOlB,OANAtH,KAAA,SAAgB,mCACd,YAEE,OADa,IAAIuH,EAAJ,QAAqB,QAAlC,SAIJ,M,EAEKC,eAAP,YAIE,OADAxH,KAAA,gBACA,M,EAEKyH,kBAAP,YAIE,OADAzH,KAAA,mBACA,M,EAEW4E,Y,eAA6B,mCACpC,EADoC,qBAE9B,EAF8B,yBAErC,eACM,EAAP,kBAHsC,mCAKpC,EALoC,cAM9B,EAN8B,kBAMrC,eACM,EAAP,WAPsC,mCASpC,EAToC,gBAU9B,EAV8B,oBAUrC,eACM,EAAP,aAXsC,mCAapC,EAboC,6BAclC,SAC6B,EAD7B,qBAEFnB,eACO,EAAP,cAjBoC,YAmBpC,MAAM,IAAI7J,MAAV,SAnBoC,oCAsBpC,EAtBoC,uBAuBI,EAvBJ,2BAwBtC6L,eACO,EAAP,gC,sCAQGnE,SAAP,YACEC,KACEjF,YACE,4BAA8B0D,KAAKgF,MAAnC,WAFJzD,I,KAwBJ,SAAS4F,IACP,OAAO,mCACL,mBAAiB,IAAIO,EAArB,WC5eJ1I,cAEAwC","file":"main.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t};\n\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t9: 0\n \t};\n\n\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"\" + ({\"0\":\"Basket\",\"1\":\"BasketTotal\",\"2\":\"DateRange\",\"3\":\"Journey\",\"4\":\"Once\",\"5\":\"StandingOrders\",\"6\":\"Subscriptions\",\"7\":\"UrlParameters\",\"8\":\"User\"}[chunkId]||chunkId) + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/shared_res/agility/casper/eventHub/v1/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonpcasperEventHub\"] = window[\"webpackJsonpcasperEventHub\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 6);\n","import {\n  ArrayTestMethods,\n  DurationUnit,\n  IUnknownObject,\n  Possibilities,\n  Predicate,\n  Conditions,\n  Condition,\n  Possibility,\n} from './types'\n\nexport function isPredicate(value: Condition): value is Predicate {\n  return typeof value === 'function'\n}\n\nexport function isObject(value: Condition): value is IUnknownObject {\n  if (\n    !(value instanceof Object || (typeof value === 'object' && value !== null))\n  ) {\n    return false\n  }\n  const proto = Object.getPrototypeOf(value) as IUnknownObject\n  return proto === Object.prototype || proto === null\n}\n\nexport function isString(value: Condition): value is string {\n  return (\n    typeof value === 'string' ||\n    Object.prototype.toString.call(value) === '[object String]'\n  )\n}\n\nfunction isEqual(expected: Condition): (value: Possibility) => boolean {\n  return (value: Possibility) => expected === value\n}\n\nexport const parseCondition = (\n  condition: Condition,\n  possibility: Possibility,\n  res: boolean[] = []\n): boolean[] => {\n  if (isPredicate(condition) || isString(condition)) {\n    res.push(evaluate(condition, possibility))\n    return res\n  }\n  for (const property of Object.keys(condition)) {\n    if ((possibility as IUnknownObject)[property] === undefined) {\n      throw new SubConditionIsFalse()\n    }\n    const childConditionValue: Condition = (condition as IUnknownObject)[\n      property\n    ]!\n    if (isObject(childConditionValue)) {\n      if (isObject((possibility as IUnknownObject)[property]!)) {\n        res.push(\n          ...parseCondition(\n            childConditionValue,\n            (possibility as IUnknownObject)[property]!\n          )\n        )\n      } else {\n        throw new SubConditionIsFalse()\n      }\n    } else {\n      res.push(\n        evaluate(\n          childConditionValue,\n          (possibility as IUnknownObject)[property]!\n        )\n      )\n    }\n    if (res[res.length - 1] === false) {\n      throw new SubConditionIsFalse()\n    }\n  }\n  return res\n}\n\nexport const evaluate = (\n  condition: Condition,\n  possibility: Possibility\n): boolean => {\n  if (isPredicate(condition)) {\n    return condition(Array.isArray(possibility) ? possibility : [possibility])\n  } else if (Array.isArray(possibility)) {\n    return possibility.some((valueItem) => isEqual(condition)(valueItem))\n  } else {\n    return isEqual(condition)(possibility)\n  }\n}\n\nexport const buildPredicates = (\n  testName: ArrayTestMethods,\n  conditions: Conditions,\n  exclude = false\n): ((possibilities: Possibilities) => boolean) => {\n  return (possibilities: Possibilities): boolean => {\n    if (exclude && conditions.length === 0) {\n      return possibilities.length === 0\n    }\n    return conditions[testName]((condition: Condition) =>\n      possibilities.some((possibility) => {\n        try {\n          return parseCondition(condition, possibility).every((test) => test)\n        } catch (e) {\n          if (!(e instanceof SubConditionIsFalse)) {\n            console.log(e)\n          }\n          return false\n        }\n      })\n    )\n      ? !exclude\n      : exclude\n  }\n}\n\nexport function allOf(...conditions: Conditions): Predicate {\n  return buildPredicates('every', conditions)\n}\n\nexport function oneOf(...conditions: Conditions): Predicate {\n  return buildPredicates('some', conditions)\n}\n\nexport function noneOf(...conditions: Conditions): Predicate {\n  return buildPredicates('some', conditions, true)\n}\n\nexport function any(): Predicate {\n  return (possibilities: Possibilities): boolean =>\n    possibilities.some((possibility) => possibility)\n}\n\nexport function regex(expected: RegExp): Predicate {\n  return (possibilities: Possibilities): boolean =>\n    possibilities.some((possibility) => expected.test(possibility as string))\n}\n\nexport function isGreaterThanOrEqual(expected: number): Predicate {\n  return (possibilities: Possibilities): boolean =>\n    possibilities.some((possibility) => possibility >= expected)\n}\n\nexport function isLessThanOrEqual(expected: number): Predicate {\n  return (possibilities: Possibilities): boolean =>\n    possibilities.some((possibility) => possibility <= expected)\n}\n\nexport function olderThan(duration: number, unit: DurationUnit): Predicate {\n  const day = 1000 * 3600 * 24\n  const units: TimeUnit = {\n    days: day,\n    months: day * 30.4167,\n    weeks: day * 7,\n    years: day * 365,\n  }\n  if (Object.keys(units).indexOf(unit) === -1) {\n    throw new Error(\n      'Casper Event Hub - predicate error - olderThan - unit ' +\n        unit +\n        ' is not one of ' +\n        Object.keys(units).join(',')\n    )\n  }\n  return (possibilities: Possibilities): boolean =>\n    possibilities.some(\n      (possibility) =>\n        Date.now() >\n        new Date(possibility as string).getTime() + units[unit] * duration\n    )\n}\n\nexport class SubConditionIsFalse extends Error {}\ninterface TimeUnit {\n  days: number\n  months: number\n  weeks: number\n  years: number\n}\n","import { initDebug } from './debugMode'\nimport { IJourneyPage } from './journey'\nimport { IUnknownObject, StorageData, ParamExperience } from './types'\n\nexport const urlParamsStorageNamespace = 'casperEventHub-urlParams'\nconst experiencesSessionStorageNamespace = 'casperEventHub-experiences'\nexport const journeySessionStorageNamespace = 'casperEventHub-journey'\nlet pathname: string\nexport let pages: IJourneyPage[]\nexport let experiences: IExperiences\n\nexport function initStore(): void {\n  pathname = window.document.location.pathname\n  pages = readFromStorage(journeySessionStorageNamespace, []) as IJourneyPage[]\n  storeEntryQueryParams()\n  storeJourneyPage()\n  experiences = readFromStorage(\n    experiencesSessionStorageNamespace,\n    {}\n  ) as IExperiences\n  Object.keys(experiences).forEach(\n    (key) => (experiences[key].mismatched = false)\n  )\n  initDebug()\n}\n\nexport function clearStore(): void {\n  window.sessionStorage.removeItem(journeySessionStorageNamespace)\n  window.sessionStorage.removeItem(urlParamsStorageNamespace)\n  window.sessionStorage.removeItem(experiencesSessionStorageNamespace)\n}\n\nexport default class ExperienceStore {\n  public triggered = false\n  public mismatched = false\n  public name: string\n  public noTracking: boolean  \n  private pageUrl = getStableHomePath(pathname)\n\n  constructor(name: string, param?: ParamExperience) {\n    this.noTracking = param?.noTracking as boolean\n    if (experiences[name]) {\n      const experience = experiences[name]\n      if (experience.pageUrl === this.pageUrl) {\n        this.name = experience.name\n        this.triggered = experience.triggered\n        // mismatched must remain at the per pageview level and class\n        // prop won't be saved in experiences until next evaluate()\n        experience.mismatched = false\n      } else {\n        this.name = name\n      }\n    } else {\n      this.name = name\n      this.save()\n    }\n  }\n  public setTriggered(): void {\n    this.triggered = true\n    this.mismatched = false\n    this.save()\n  }\n  public setMismatched(): void {\n    this.mismatched = true\n    this.save()\n  }\n  private save() {\n    experiences[this.name] = this\n    saveToStorage(experiencesSessionStorageNamespace, experiences)\n  }\n}\n\nexport function getStableHomePath(path: string): string {\n  path = path.substr(0, 7) === '/mosaic' ? path.substr(8) : path.substr(1)\n  if (path.substr(-1) === '/') {\n    path = path.slice(0, -1)\n  }\n  return (\n    path +\n    (path.length === (path.substr(0, 4) === 'pro/' ? 9 : 5) ? '/home' : '')\n  )\n}\n\nfunction readFromStorage(\n  namespace: string,\n  defaultValue: IJourneyPage[] | IExperiences\n): IJourneyPage[] | IExperiences {\n  const storage = window.sessionStorage.getItem(namespace)\n  return storage\n    ? (JSON.parse(storage) as IJourneyPage[] | IExperiences)\n    : defaultValue\n}\n\nfunction storeJourneyPage() {\n  pages.push({\n    pageName:\n      window[window.config.padl.namespace].dataLayer.page.page.pageInfo\n        .pageName,\n    time: 0,\n    url: getStableHomePath(pathname),\n  } as IJourneyPage)\n  saveToStorage(journeySessionStorageNamespace, pages)\n}\n\nexport function storeEntryQueryParams(): void {\n  const sessionParams = window.sessionStorage.getItem(urlParamsStorageNamespace)\n  if (sessionParams === null) {\n    const currentParams = readParams()\n    window.sessionStorage.setItem(\n      urlParamsStorageNamespace,\n      JSON.stringify(currentParams)\n    )\n  }\n}\n\nexport function readParams(): IUnknownObject {\n  if (window.location.search === '') {\n    return {}\n  }\n  const queryParams = parseQueryString(window.location.search)\n  if (window.location.hash !== '') {\n    const hashParams = parseQueryString(window.location.hash)\n    return { ...hashParams, ...queryParams }\n  } else {\n    return queryParams\n  }\n}\n\nfunction parseQueryString(queryString: string | undefined): IUnknownObject {\n  if (queryString == null) return {}\n  return queryString\n    .slice(1)\n    .split('&')\n    .map((p) => p.split('='))\n    .reduce((obj, pair) => {\n      const [key, value] = pair.map(decodeURIComponent)\n      return { ...obj, [key]: value ? value : true }\n    }, {})\n}\n\nexport interface IExperiences {\n  [name: string]: ExperienceStore\n}\n\nexport function saveToStorage(namespace: string, data: StorageData): void {\n  window.sessionStorage.setItem(namespace, JSON.stringify(data))\n}\n","import { debugMode } from './debugMode'\nimport { allOf, isObject, isPredicate, isString } from './predicates'\nimport { Conditions, Predicate, Possibilities } from './types'\n\nexport default class Rule {\n  protected predicates: Predicate[] = []\n\n  public addPredicates(conditions: Conditions): void {\n    const primitiveConditions: Conditions = conditions.filter(\n      (predicate) =>\n        (isObject(predicate) && Object.keys(predicate).length) ||\n        isString(predicate)\n    )\n    const functionConditions: Predicate[] = conditions.filter(isPredicate)\n    if (primitiveConditions.length) {\n      this.predicates.push(allOf(...primitiveConditions))\n    }\n    this.predicates.push(...functionConditions)\n  }\n  protected validate(possibilities: Possibilities): boolean {\n    return this.predicates.every((predicate: Predicate) => {\n      const isValid = predicate(possibilities)\n      this.logDebug(\n        'Rule.validate() - possibilities : ' +\n          JSON.stringify(possibilities) +\n          ' - isValid : ' +\n          isValid.toString()\n      )\n      return isValid\n    })\n  }\n  get hasPredicates(): boolean {\n    return this.predicates.length > 0\n  }\n  protected logDebug(message: string): void {\n    debugMode && console.log('Casper Debug - ' + message)\n  }\n}\n\nexport interface IRule {\n  off?: () => Promise<void> | void\n  getState: () => Promise<IRuleState> | IRuleState\n}\n\nexport interface IRuleState {\n  isValid: boolean\n}\n","import { readParams } from './store'\n\nexport let debugMode = false\n\nexport function initDebug(): void {\n  const params = readParams()\n  if (params.debugCasper) {\n    debugMode = true\n  }\n}\n","import { journeySessionStorageNamespace, pages, saveToStorage } from './store'\n\nexport default class SessionTime {\n  public static getInstance(): SessionTime {\n    if (!SessionTime.instance) {\n      SessionTime.allowInstanciation = true\n      SessionTime.instance = new SessionTime()\n      SessionTime.allowInstanciation = false\n    }\n    return SessionTime.instance\n  }\n  protected static instance: SessionTime\n  protected static allowInstanciation = false\n  protected timeEllapsedCallbacks: ITimeEllapsedCallback[] = []\n  protected start = 0\n  protected checkCallbackIntervalId?: number\n  private checkCallbacksIntervalMs = 1000\n\n  constructor() {\n    if (!SessionTime.allowInstanciation) {\n      throw new Error(\"can't use Singleton constructor, use getInstance\")\n    }\n    this.startTimer()\n    window.addEventListener('beforeunload', () => {\n      pages[pages.length - 1].time = this.timeInMilliseconds\n      saveToStorage(journeySessionStorageNamespace, pages)\n    })\n  }\n\n  get timeInMilliseconds(): number {\n    return window.performance.now() - this.start\n  }\n\n  public addTimeEllapsedCallback(\n    timeEllapsedCallback: ITimeEllapsedCallback\n  ): void {\n    timeEllapsedCallback.pending = true\n    this.timeEllapsedCallbacks.push(timeEllapsedCallback)\n  }\n\n  public removeTimeEllapsedCallback(\n    timeEllapsedCallback: ITimeEllapsedCallback\n  ): void {\n    this.timeEllapsedCallbacks.splice(\n      this.timeEllapsedCallbacks.indexOf(timeEllapsedCallback),\n      1\n    )\n  }\n\n  public startTimer(): void {\n    if (!this.checkCallbackIntervalId) {\n      this.checkCallbacksOnInterval()\n    }\n    this.start = window.performance.now()\n  }\n\n  private onTimePassed() {\n    this.timeEllapsedCallbacks.forEach((timeEllapsedCallback) => {\n      if (\n        timeEllapsedCallback.pending &&\n        timeEllapsedCallback.time <= this.timeInMilliseconds\n      ) {\n        timeEllapsedCallback.callback()\n        timeEllapsedCallback.pending = false\n      }\n    })\n  }\n\n  private checkCallbacksOnInterval() {\n    this.checkCallbackIntervalId = window.setInterval(\n      () => this.onTimePassed(),\n      this.checkCallbacksIntervalMs\n    )\n  }\n}\n\nexport interface ITimeEllapsedCallback {\n  callback: () => void\n  time: number\n  pending?: boolean\n}\n","import Rule from './rule'\nimport { ITargetingRulesEvaluationResult } from './experience'\nimport { Possibilities, Conditions } from './types'\nimport { isString } from './predicates'\nimport { experiences } from './store'\nexport const casperMismatchEvent = 'casper-mismatch-'\n\nexport default class XpMismatches extends Rule {\n  private callback: () => void\n  private lastXpName: string | null = null\n  private xpToWatch: string\n  private boundListener: ((event: Event) => void) | null = null\n  constructor(\n    callback: () => Promise<ITargetingRulesEvaluationResult>,\n    predicates: Conditions\n  ) {\n    super()\n    this.callback = callback\n    if (predicates.length !== 1) {\n      throw new Error(\n        'Error - Casper - xpHasMismatched requires 1 argument but found ' +\n          predicates.length.toString()\n      )\n    }\n    if (!isString(predicates[0])) {\n      throw new Error(\n        'Error - Casper - xpHasMismatched requires argument of type string'\n      )\n    }\n    this.xpToWatch = predicates[0]\n    if (experiences[this.xpToWatch] && experiences[this.xpToWatch].mismatched) {\n      this.logDebug(\n        'mismatches(\"' +\n          this.xpToWatch +\n          '\") the targeted Experience has already mismatched'\n      )\n      this.lastXpName = this.xpToWatch\n    } else {\n      this.logDebug(\n        'mismatches(\"' +\n          this.xpToWatch +\n          '\") - the targeted Experience hasn\\'t already mismatched, listening'\n      )\n      try {\n        this.boundListener = this.onXpMismatches.bind(this)\n        document.addEventListener(\n          casperMismatchEvent + this.xpToWatch,\n          this.boundListener\n        )\n      } catch (e) {\n        // prevent error\n      }\n    }\n  }\n  public getState(): XpMismatchState {\n    const res: XpMismatchState = {\n      isValid: this.validate(([this.lastXpName] as unknown) as Possibilities),\n    }\n    if (this.lastXpName !== null) {\n      res.xpName = this.lastXpName\n    }\n    return res\n  }\n  private onXpMismatches(event: Event): void {\n    this.lastXpName = (event as XPEvent).xpName\n    this.logDebug(\n      'mismatches(\"' +\n        this.xpToWatch +\n        '\") - the targeted Experience just mismatched'\n    )\n    this.callback()\n  }\n  public off(): void {\n    if (this.boundListener !== null) {\n      document.removeEventListener(\n        casperMismatchEvent + this.xpToWatch,\n        this.boundListener\n      )\n    }\n  }\n}\n\ninterface XpMismatchState {\n  isValid: boolean\n  xpName?: string\n}\n\nexport interface XPEvent extends Event {\n  xpName: string\n}\n","// This rule is deprecated so will always return mismatch\n\nimport Rule, { IRule, IRuleState } from './rule'\n\nexport default class SalesForceAudience extends Rule implements IRule {\n    public getState(): Promise<IRuleState> {\n        const state: IRuleState = {\n            isValid: false\n        }\n        return Promise.resolve(state)\n    }\n}","// This rule is deprecated so will always return mismatch\n\nimport Rule, { IRuleState, IRule } from './rule'\n\nexport default class SalesForceAudiencePerso extends Rule implements IRule {\n    public getState(): Promise<IRuleState> {\n        const state: IRuleState = {\n            isValid: false\n        }\n        return Promise.resolve(state)\n    }\n}","import Basket from './basket'\nimport BasketTotal, { IBasketTotals } from './basketTotal'\nimport User from './user'\nimport { IProduct } from './eCapi'\nimport Journey, { IJourneyPage } from './journey'\nimport SalesForceAudience from './salesForceAudience'\nimport ExperienceStore from './store'\nimport {\n  IUnknownObject,\n  CustomerDetails,\n  Conditions,\n  ActiveExperiments,\n  ParamExperience\n} from './types' \nimport UrlParameters from './urlParameters'\nimport DateRange from './dateRange'\nimport StandingOrders, { IStandingOrder } from './standingOrders'\nimport XpMismatches, { XPEvent, casperMismatchEvent } from './xpMismatches'\nimport SalesForceAudiencePerso from './salesforceAudiencePerso'\nimport { isObject } from './predicates'\nimport { debugMode } from './debugMode'\nimport Subscriptions, { MergedSubscriptions } from './subscriptions'\nimport Once from './once'\n\nexport default class Experience {\n  public store: ExperienceStore\n  public journey?: Promise<Journey> // visits // includes since?\n  public user?: Promise<User> // visitorIs - \n  public basketTotal?: Promise<BasketTotal> // basketTotalIs\n  public basket?: Promise<Basket> // basketContains\n  public salesForceAudience?: Promise<SalesForceAudience> // salesForceAudienceIs\n  public salesForceAudiencePerso?: Promise<SalesForceAudiencePerso>\n  public urlParameters?: Promise<UrlParameters> // urlParameterIs\n  public dateRange?: Promise<DateRange> // isInDateRange\n  public standingOrders?: Promise<StandingOrders> // standingOrdersContains\n  public subscriptions?: Promise<Subscriptions> // subscriptionsContains\n  public xpMistmatches?: Promise<XpMismatches> // mismatches\n  public onceRule?: Promise<Once> // once\n  private currentEvalReject: (() => void) | null = null\n  private hasSimpleUserPredicate = false\n  public currentRule: string[] = [] \n\n  constructor(name: string, param?: ParamExperience) {\n    this.store = new ExperienceStore(name, param)\n  }\n  private async doEval(\n    eventData: ITargetingRulesEvaluationResult\n  ): Promise<ITargetingRulesEvaluationResult> {\n    return new Promise(async (resolve, reject) => {\n      this.currentEvalReject = reject.bind(Promise)\n      const tests = []\n      if (this.user) {\n        const userRule = await this.user\n        if (userRule.hasPredicates) {\n          const { isValid, user } = await userRule.getState()\n          this.logDebug('visitorIs - isValid : ' + isValid.toString())\n          this.currentRule.push('visitorIs')\n          tests.push(isValid)\n          eventData.user = user\n        }\n      }\n      if (this.basketTotal) {\n        const basketTotal = await this.basketTotal\n        if (basketTotal.hasPredicates) {\n          const { isValid, totals } = await basketTotal.getState()\n          this.logDebug('basketTotalIs - isValid : ' + isValid.toString())\n          this.currentRule.push('basketTotalIs')\n          tests.push(isValid)\n          eventData.totals = totals\n        }\n      }\n      if (this.basket) {\n        const basket = await this.basket\n        if (basket.hasPredicates) {\n          const { isValid, products } = await basket.getState()\n          this.logDebug('basketContains - isValid : ' + isValid.toString())\n          this.currentRule.push('basketContains')\n          tests.push(isValid)\n          eventData.products = products\n        }\n      }\n      if (this.journey) {\n        const journey = await this.journey\n        if (journey.hasPredicates) {\n          const { isValid, pages } = journey.getState()\n          this.logDebug('visits/since - isValid : ' + isValid.toString())\n          this.currentRule.push('visits')\n          tests.push(isValid)\n          eventData.pages = pages\n        }\n      }\n      if (this.salesForceAudience) {\n        const salesForceAudience = this.salesForceAudience\n        if (salesForceAudience.hasPredicates) {\n          const { isValid } = await salesForceAudience.getState()\n          this.logDebug(\n            'salesForceAudienceIs - isValid : ' + isValid.toString()\n          )\n          this.currentRule.push('salesForceAudienceIs')\n          tests.push(isValid)\n        }\n      }\n      if (this.salesForceAudiencePerso) {\n        const salesForceAudiencePerso = this.salesForceAudiencePerso\n        if (salesForceAudiencePerso.hasPredicates) {\n          const { isValid } = await salesForceAudiencePerso.getState()\n          this.logDebug(\n            'salesForceAudiencePersoIs - isValid : ' + isValid.toString()\n          )\n          this.currentRule.push('salesForceAudiencePersoIs')\n          tests.push(isValid)\n        }\n      }\n      if (this.urlParameters) {\n        const urlParameters = await this.urlParameters\n        if (urlParameters.hasPredicates) {\n          const { isValid, urlParams } = urlParameters.getState()\n          this.logDebug('urlParameterIs - isValid : ' + isValid.toString())\n          this.currentRule.push('urlParameterIs')\n          tests.push(isValid)\n          eventData.urlParams = urlParams\n        }\n      }\n      if (this.dateRange) {\n        const dateRange = await this.dateRange\n        if (dateRange.hasPredicates) {\n          const { isValid, date } = dateRange.getState()\n          this.logDebug('isInDateRange - isValid : ' + isValid.toString())\n          this.currentRule.push('isInDateRange')\n          tests.push(isValid)\n          eventData.date = date\n        }\n      }\n      if (this.standingOrders) {\n        const standingOrdersInstance = await this.standingOrders\n        if (standingOrdersInstance.hasPredicates) {\n          const {\n            isValid,\n            standingOrders,\n          } = await standingOrdersInstance.getState()\n          this.logDebug(\n            'standingOrdersContains - isValid : ' + isValid.toString()\n          )\n          this.currentRule.push('standingOrdersContains')\n          tests.push(isValid)\n          eventData.standingOrders = standingOrders\n        }\n      }\n      if (this.subscriptions) {\n        const subscriptionsInstance = await this.subscriptions\n        if (subscriptionsInstance.hasPredicates) {\n          const {\n            isValid,\n            subscriptions,\n          } = await subscriptionsInstance.getState()\n          this.logDebug(\n            'subscriptionsContains - isValid : ' + isValid.toString()\n          )\n          this.currentRule.push('subscriptionsContains')\n          tests.push(isValid)\n          eventData.subscriptions = subscriptions\n        }\n      }\n      if (this.xpMistmatches) {\n        const xpMistmatchesInstance = await this.xpMistmatches\n        if (xpMistmatchesInstance.hasPredicates) {\n          const { isValid, xpName } = xpMistmatchesInstance.getState()\n          this.logDebug('mismtaches - isValid : ' + isValid.toString())\n          this.currentRule.push('xpMistmatches')\n          tests.push(isValid)\n          eventData.xpName = xpName\n        }\n      }\n      if (this.onceRule) {\n        const onceRuleInstance = await this.onceRule\n        const { isValid, xpName } = onceRuleInstance.getState()\n        this.logDebug('once - isValid : ' + isValid.toString())\n        this.currentRule.push('once')\n        tests.push(isValid)\n        eventData.xpName = xpName\n      }\n      if (tests.length) {\n        eventData.allValid = tests.every((test) => test)\n      }\n      this.currentEvalReject = null\n      resolve(eventData)\n    })\n  }\n  private isSimpleUserExperience(): boolean {\n    return (\n      this.hasSimpleUserPredicate &&\n      !this.basketTotal &&\n      !this.basket &&\n      !this.journey && // includes since\n      !this.salesForceAudience &&\n      !this.salesForceAudiencePerso &&\n      !this.urlParameters &&\n      !this.dateRange &&\n      !this.standingOrders &&\n      !this.xpMistmatches\n    )\n  }\n  public async evaluate(): Promise<ITargetingRulesEvaluationResult> {\n    if (this.currentEvalReject !== null) {\n      this.currentEvalReject()\n    }\n    const eventData: ITargetingRulesEvaluationResult = {\n      unsubscribe: this.unsubscribe.bind(this),\n    }\n    try {\n      this.logDebug('evaluate()')\n      const resolvedEventData = await this.doEval(eventData)\n      if (resolvedEventData.allValid) {\n        /*\n        * https://dsu-confluence.nestle.biz/x/vhcNDw && DIGEX-10165 && DIGEX-12220\n        Page builder loader has it's own event. So, with this check duplicate event is not being triggered\n        * exclude object push to gtm if personalisation is triggerred from Page builder\n        */\n        if (!this.store?.noTracking) {\n          this.trackCasper('true')\n        }\n        this.matchCallback(resolvedEventData)\n        this.store.setTriggered()\n        this.logDebug(\n          'doEval() allValid : ' + resolvedEventData.allValid.toString()\n        )\n      } else if (resolvedEventData.allValid !== undefined) {\n        // DIGEX-12960 - don't push experience_match: false\n        // if (!this.store?.noTracking) {\n        //   this.trackCasper('false')\n        // }\n        this.mismatchCallback(resolvedEventData)\n        this.store.setMismatched()\n        this.dispatchXpMismatch()\n        this.logDebug(\n          'doEval() allValid : ' + resolvedEventData.allValid.toString()\n        )\n      }\n    } catch {\n      return eventData\n    }\n\n    return eventData\n  }\n\n  private trackCasper(match: string){\n    window.gtmDataObject = window.gtmDataObject || []\n    window.gtmDataObject.push({\n      event: 'casper_experience',\n      experience_name: this.store.name,\n      experience_rule: this.currentRule.join(' | '),\n      experience_match: match,\n      event_raised_by: 'casper',\n    })\n  }\n\n  private dispatchXpMismatch() {\n    const casperEvent = document.createEvent('Event')\n    casperEvent.initEvent(casperMismatchEvent + this.store.name, true, true)\n    ;(casperEvent as XPEvent).xpName = this.store.name\n    document.dispatchEvent(casperEvent)\n  }\n\n  public mismatches(...predicates: Conditions): this {\n    this.xpMistmatches = import(\n      /* webpackChunkName: \"XpMismatches\" */ './xpMismatches'\n    ).then((XpMismatchesRule) => {\n      const xpMistmatches = new XpMismatchesRule.default(\n        (): Promise<ITargetingRulesEvaluationResult> => this.evaluate(),\n        predicates\n      )\n      xpMistmatches.addPredicates(predicates)\n      return xpMistmatches\n    })\n    return this\n  }\n\n  public standingOrdersContains(...orders: Conditions): this {\n    this.standingOrders = import(\n      /* webpackChunkName: \"StandingOrders\" */ './standingOrders'\n    ).then((StandingOrdersRule) => {\n      const standingOrders = new StandingOrdersRule.default()\n      standingOrders.addPredicates(orders)\n      return standingOrders\n    })\n    return this\n  }\n\n  public subscriptionsContains(...subscriptionsConditions: Conditions): this {\n    this.subscriptions = import(\n      /* webpackChunkName: \"Subscriptions\" */ './subscriptions'\n    ).then((SubscriptionsRule) => {\n      const subscriptions = new SubscriptionsRule.default()\n      subscriptions.addPredicates(subscriptionsConditions)\n      return subscriptions\n    })\n    return this\n  }\n\n  public isInDateRange(...dates: Conditions): this {\n    this.dateRange = import(\n      /* webpackChunkName: \"DateRange\" */ './dateRange'\n    ).then((DateRangeRule) => {\n      const dateRange = new DateRangeRule.default()\n      dateRange.addPredicates(dates)\n      return dateRange\n    })\n    return this\n  }\n\n  public urlParameterIs(...urlParams: Conditions): this {\n    this.urlParameters = import(\n      /* webpackChunkName: \"UrlParameters\" */ './urlParameters'\n    ).then((UrlParametersRule) => {\n      const urlParameters = new UrlParametersRule.default()\n      urlParameters.addPredicates(urlParams)\n      return urlParameters\n    })\n    return this\n  }\n\n  public salesForceAudienceIs(...segments: Conditions): this {\n    this.salesForceAudience = new SalesForceAudience()\n    this.salesForceAudience.addPredicates(segments)\n    return this\n  }\n\n  public salesForceAudiencePersoIs(...segments: Conditions): this {\n    this.salesForceAudiencePerso = new SalesForceAudiencePerso()\n    this.salesForceAudiencePerso.addPredicates(segments)\n    return this\n  }\n  \n  public visitorIs(...predicates: Conditions): this {\n    this.user = import(/* webpackChunkName: \"User\" */ './user').then(\n      (UserRule) => {\n        const user = new UserRule.default(\n          (): Promise<ITargetingRulesEvaluationResult> => this.evaluate()\n        )\n        user.addPredicates(predicates)\n        if (this.isSimpleUserPredicate(predicates)) {\n          this.hasSimpleUserPredicate = true\n        }\n\n        return user\n      }\n    )\n    return this\n  }\n  private isSimpleUserPredicate(predicates: Conditions): boolean {\n    return (\n      predicates.length === 1 &&\n      isObject(predicates[0]) &&\n      Object.keys(predicates[0]).length === 1 &&\n      typeof predicates[0].status !== 'undefined'\n    )\n  }\n  public basketTotalIs(...predicates: Conditions): this {\n    this.basketTotal = import(\n      /* webpackChunkName: \"BasketTotal\" */ './basketTotal'\n    ).then((BasketTotalRule) => {\n      const basketTotal = new BasketTotalRule.default(\n        (): Promise<ITargetingRulesEvaluationResult> => this.evaluate()\n      )\n      basketTotal.addPredicates(predicates)\n      return basketTotal\n    })\n    return this\n  }\n  public basketContains(...predicates: Conditions): this {\n    this.basket = import(/* webpackChunkName: \"Basket\" */ './basket').then(\n      (BasketRule) => {\n        const basket = new BasketRule.default(\n          (): Promise<ITargetingRulesEvaluationResult> => this.evaluate()\n        )\n        basket.addPredicates(predicates)\n        return basket\n      }\n    )\n    return this\n  }\n  public visits(...pagesUrls: string[]): this {\n    const addExpectedJourney = (journey: Journey) =>\n      journey.addExpectedJourney(pagesUrls)\n\n    if (this.journey) {\n      this.journey.then(addExpectedJourney, (e): void => {\n        console.log(e)\n      })\n    } else {\n      this.journey = importJourney().then((journey) => {\n        addExpectedJourney(journey)\n        return journey\n      })\n    }\n    return this\n  }\n  public since(seconds: number): this {\n    const addExpectedTime = (journey: Journey) =>\n      journey.addExpectedTime(seconds, this.evaluate.bind(this))\n\n    if (this.journey) {\n      this.journey = this.journey.then((journey) => {\n        addExpectedTime(journey)\n        return journey\n      })\n    } else {\n      this.journey = importJourney().then((journey) => {\n        addExpectedTime(journey)\n        return journey\n      })\n    }\n    return this\n  }\n  public once(): this {\n    this.onceRule = import(/* webpackChunkName: \"Once\" */ './once').then(\n      (onceRule) => {\n        const once = new onceRule.default(this.store.name)\n        return once\n      }\n    )\n    return this\n  }\n  public executeOnMatch(\n    callback: (args: ITargetingRulesEvaluationResult) => void\n  ): this {\n    this.matchCallback = callback\n    return this\n  }\n  public executeOnMismatch(\n    callback: (args?: ITargetingRulesEvaluationResult) => void\n  ): this {\n    this.mismatchCallback = callback\n    return this\n  }\n  public async unsubscribe(): Promise<void> {\n    if (this.basketTotal) {\n      ;(await this.basketTotal).off()\n      delete this.basketTotal\n    }\n    if (this.user) {\n      ;(await this.user).off()\n      delete this.user\n    }\n    if (this.basket) {\n      ;(await this.basket).off()\n      delete this.basket\n    }\n    if (this.journey) {\n      try {\n        const journey: Journey = await this.journey\n        journey.off()\n        delete this.journey\n      } catch (e) {\n        throw new Error(e)\n      }\n    }\n    if (this.xpMistmatches) {\n      const xpMistmatches: XpMismatches = await this.xpMistmatches\n      xpMistmatches.off()\n      delete this.xpMistmatches\n    }\n  }\n\n  private matchCallback: (args: ITargetingRulesEvaluationResult) => void = () => null\n\n  private mismatchCallback: (args: ITargetingRulesEvaluationResult) => void = () => null\n\n  public logDebug(message: string): void {\n    debugMode &&\n      console.log(\n        'Casper Debug - XP Name : ' + this.store.name + ' - ' + message\n      )\n  }\n}\n\nexport interface ITargetingRulesEvaluationResult {\n  allValid?: boolean\n  date?: Date | undefined\n  unsubscribe: () => void\n  user?: CustomerDetails\n  totals?: IBasketTotals\n  products?: IProduct[]\n  pages?: IJourneyPage[]\n  segments?: string[]\n  persoSegments?: string[]\n  urlParams?: IUnknownObject\n  experiments?: ActiveExperiments\n  standingOrders?: IStandingOrder[]\n  subscriptions?: MergedSubscriptions[]\n  xpName?: string\n}\n\nfunction importJourney() {\n  return import(/* webpackChunkName: \"Journey\" */ './journey').then(\n    (JourneyRule) => new JourneyRule.default()\n  )\n}\n","import { initStore } from './store'\nimport SessionTime from './session-time'\n\ninitStore()\n\nSessionTime.getInstance()\n\nexport {\n  allOf,\n  oneOf,\n  any,\n  isGreaterThanOrEqual,\n  isLessThanOrEqual,\n  noneOf,\n  olderThan,\n  regex,\n} from './predicates'\n\nexport { default as Experience } from './experience'\n"],"sourceRoot":""}