ouisys-engine 5.0.41 → 5.0.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- import{__awaiter as r,__generator as c,__assign as i}from"tslib";import{c as o}from"./checkSubscriptionByRockmanIdOnly-BwR1un1L.js";import{a as t}from"./helpers-xPhGBX-B.js";import{searchToObject as e}from"./searchToObject.js";import{t as n}from"./tracker-DaaILhEr.js";import"pacman-client";import"uuid";function s(s){var a,u,l,d,p=s.window,m=s.flow,v=s.action,f=s.args;return r(this,void 0,void 0,(function(){var r,s,h,w,_,k,b;return c(this,(function(c){switch(c.label){case 0:return r=p.pac_analytics.visitor.rockmanId,s=e(p),(h="check-subscription-success-state"===s["current-state"])&&console.log("isMock is true"),[4,t((function(){return h?Promise.resolve({success:!0,rockman_id:r,product_url:"/product",msisdn:"000"}):o({window:p,rockmanId:r})}),60,(function(r){return r.success}),0)];case 1:if(!0===(w=c.sent()).success)return _=w.product_url,m&&v&&n.advancedInFlow(m,v,i(i({},f),{url:w.product_url})),(null===(u=null===(a=null==p?void 0:p.pac_analytics)||void 0===a?void 0:a.visitor)||void 0===u?void 0:u.chainRedirectUrl)?(k=null===(d=null===(l=null==p?void 0:p.pac_analytics)||void 0===l?void 0:l.visitor)||void 0===d?void 0:d.chainRedirectUrl,n.customEvent(m,"redirect","chain-redirect",{redirect_url:k}),p.location.replace(k)):_&&""!==_&&(n.customEvent(m,"redirect","product-redirect",{redirect_url:_}),p.location.replace(_)),[2,_||null];throw(b=new Error("".concat("SubscriptionFailed",":\n").concat(w.message))).type="SubscriptionFailed",b}}))}))}export{s as checkSubscriptionHander};
1
+ import{__awaiter as r,__generator as c,__assign as t}from"tslib";import{a as i}from"./helpers-xPhGBX-B.js";import{searchToObject as o}from"./searchToObject.js";import{t as n}from"./tracker-DaaILhEr.js";import"pacman-client";import"uuid";function e(e){var s,a,u,l,d=e.window,v=e.flow,p=e.action,m=e.args;return r(this,void 0,void 0,(function(){var e,f,h,w,_,k,b,j;return c(this,(function(y){switch(y.label){case 0:return e=d.pac_analytics.visitor.rockmanId,f=o(d),(h="check-subscription-success-state"===f["current-state"])&&console.log("isMock is true"),w=function(){return h?Promise.resolve({success:!0,rockman_id:e,product_url:"/product",msisdn:"000"}):function(t){var i=t.window,o=t.rockmanId;return r(void 0,void 0,void 0,(function(){var r,t,n;return c(this,(function(c){switch(c.label){case 0:return r=i.DEV_BASE_URL||"",t=new URLSearchParams({action:"check-subscription",rockman_id:o}).toString(),n="".concat(r,"/tallyman/v1/?").concat(t),[4,fetch(n)];case 1:return[2,c.sent().json()]}}))}))}({window:d,rockmanId:e})},[4,i(w,60,(function(r){return r.success}),0)];case 1:if(!0===(_=y.sent()).success)return k=_.product_url,v&&p&&n.advancedInFlow(v,p,t(t({},m),{url:_.product_url})),(null===(a=null===(s=null==d?void 0:d.pac_analytics)||void 0===s?void 0:s.visitor)||void 0===a?void 0:a.chainRedirectUrl)?(b=null===(l=null===(u=null==d?void 0:d.pac_analytics)||void 0===u?void 0:u.visitor)||void 0===l?void 0:l.chainRedirectUrl,n.customEvent(v,"redirect","chain-redirect",{redirect_url:b}),d.location.replace(b)):k&&""!==k&&(n.customEvent(v,"redirect","product-redirect",{redirect_url:k}),d.location.replace(k)),[2,k||null];throw(j=new Error("".concat("SubscriptionFailed",":\n").concat(_.message))).type="SubscriptionFailed",j}}))}))}export{e as checkSubscriptionHander};
2
2
  //# sourceMappingURL=checkSubscriptionHander.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkSubscriptionHander.js","sources":["../src/utilities/checkSubscriptionHander.ts"],"sourcesContent":["import { ICheckSubscriptionResult } from '../common-types/ICheckSubscriptionResult';\nimport { IError } from '../common-types/IError';\nimport { checkSubscriptionByRockmanIdOnly } from '../sharedApi/checkSubscriptionByRockmanIdOnly';\nimport { IMockFlowParams } from '../sharedFlowTypes/StrategyTypes';\nimport { loop } from './helpers';\nimport { searchToObject } from './searchToObject';\nimport { tracker } from './tracker';\n\nexport async function checkSubscriptionHander({\n window,\n flow,\n action,\n args\n}: {\n window: Window;\n flow?: string;\n action?: string;\n args?: any;\n}): Promise<string> {\n const { rockmanId } = window.pac_analytics.visitor;\n const search = searchToObject(window) as IMockFlowParams<any>;\n const isMock = search['current-state'] === 'check-subscription-success-state';\n if (isMock) {\n // eslint-disable-next-line no-console\n console.log('isMock is true');\n }\n const check: () => Promise<ICheckSubscriptionResult> = () =>\n isMock\n ? Promise.resolve({\n success: true,\n rockman_id: rockmanId,\n product_url: '/product',\n msisdn: '000'\n })\n : checkSubscriptionByRockmanIdOnly({ window, rockmanId });\n const checkResult: ICheckSubscriptionResult = await loop(check, 60, (r) => r.success, 0);\n\n if (checkResult.success === true) {\n const productUrl = checkResult.product_url;\n if (flow && action) {\n tracker.advancedInFlow(flow, action, {\n ...args,\n url: checkResult.product_url\n });\n }\n if (window?.pac_analytics?.visitor?.chainRedirectUrl) {\n const chainLink = window?.pac_analytics?.visitor?.chainRedirectUrl;\n tracker.customEvent(flow, 'redirect', 'chain-redirect', { redirect_url: chainLink });\n window.location.replace(chainLink);\n } else if (productUrl && productUrl !== '') {\n tracker.customEvent(flow, 'redirect', 'product-redirect', { redirect_url: productUrl });\n window.location.replace(productUrl);\n }\n\n return productUrl || null;\n }\n const error = new Error(`${'SubscriptionFailed'}:\\n${checkResult.message}`) as IError & { type: string };\n error.type = 'SubscriptionFailed';\n throw error;\n}\n"],"names":["checkSubscriptionHander","_a","window","flow","action","args","rockmanId","pac_analytics","visitor","search","searchToObject","isMock","console","log","loop","Promise","resolve","success","rockman_id","product_url","msisdn","checkSubscriptionByRockmanIdOnly","r","checkResult","_f","sent","productUrl","tracker","advancedInFlow","__assign","url","_c","_b","chainRedirectUrl","chainLink","_e","_d","customEvent","redirect_url","location","replace","error","Error","concat","message","type"],"mappings":"gTAQM,SAAgBA,EAAwBC,eAC5CC,EAAMD,EAAAC,OACNC,EAAIF,EAAAE,KACJC,EAAMH,EAAAG,OACNC,EAAIJ,EAAAI,iHAuB0C,OAhBtCC,EAAcJ,EAAOK,cAAcC,kBACrCC,EAASC,EAAeR,IACxBS,EAAqC,qCAA5BF,EAAO,mBAGpBG,QAAQC,IAAI,kBAWgC,CAAA,EAAMC,GATG,WACrD,OAAAH,EACII,QAAQC,QAAQ,CACdC,SAAS,EACTC,WAAYZ,EACZa,YAAa,WACbC,OAAQ,QAEVC,EAAiC,CAAEnB,SAAQI,UAASA,GAPxD,GAQ8D,IAAI,SAACgB,GAAM,OAAAA,EAAEL,UAAS,WAEtF,IAA4B,KAFtBM,EAAwCC,EAA0CC,QAExER,QAiBd,OAhBMS,EAAaH,EAAYJ,YAC3BhB,GAAQC,GACVuB,EAAQC,eAAezB,EAAMC,EAAMyB,EAAAA,EAAA,CAAA,EAC9BxB,GAAI,CACPyB,IAAKP,EAAYJ,gBAGa,QAA9BY,EAAqB,QAArBC,EAAA9B,aAAM,EAANA,EAAQK,qBAAa,IAAAyB,OAAA,EAAAA,EAAExB,eAAO,IAAAuB,OAAA,EAAAA,EAAEE,mBAC5BC,EAA0C,QAA9BC,EAAqB,QAArBC,EAAAlC,aAAM,EAANA,EAAQK,qBAAa,IAAA6B,OAAA,EAAAA,EAAE5B,eAAO,IAAA2B,OAAA,EAAAA,EAAEF,iBAClDN,EAAQU,YAAYlC,EAAM,WAAY,iBAAkB,CAAEmC,aAAcJ,IACxEhC,EAAOqC,SAASC,QAAQN,IACfR,GAA6B,KAAfA,IACvBC,EAAQU,YAAYlC,EAAM,WAAY,mBAAoB,CAAEmC,aAAcZ,IAC1ExB,EAAOqC,SAASC,QAAQd,IAGnB,CAAA,EAAAA,GAAc,MAIvB,MAFMe,EAAQ,IAAIC,MAAM,GAAGC,OAAA,qBAA0B,OAAAA,OAAApB,EAAYqB,WAC3DC,KAAO,qBACPJ,QACP"}
1
+ {"version":3,"file":"checkSubscriptionHander.js","sources":["../src/utilities/checkSubscriptionHander.ts","../src/sharedApi/checkSubscriptionByRockmanIdOnly.ts"],"sourcesContent":["import { ICheckSubscriptionResult } from '../common-types/ICheckSubscriptionResult';\nimport { IError } from '../common-types/IError';\nimport { checkSubscriptionByRockmanIdOnly } from '../sharedApi/checkSubscriptionByRockmanIdOnly';\nimport { IMockFlowParams } from '../sharedFlowTypes/StrategyTypes';\nimport { loop } from './helpers';\nimport { searchToObject } from './searchToObject';\nimport { tracker } from './tracker';\n\nexport async function checkSubscriptionHander({\n window,\n flow,\n action,\n args\n}: {\n window: Window;\n flow?: string;\n action?: string;\n args?: any;\n}): Promise<string> {\n const { rockmanId } = window.pac_analytics.visitor;\n const search = searchToObject(window) as IMockFlowParams<any>;\n const isMock = search['current-state'] === 'check-subscription-success-state';\n if (isMock) {\n // eslint-disable-next-line no-console\n console.log('isMock is true');\n }\n const check: () => Promise<ICheckSubscriptionResult> = () =>\n isMock\n ? Promise.resolve({\n success: true,\n rockman_id: rockmanId,\n product_url: '/product',\n msisdn: '000'\n })\n : checkSubscriptionByRockmanIdOnly({ window, rockmanId });\n const checkResult: ICheckSubscriptionResult = await loop(check, 60, (r) => r.success, 0);\n\n if (checkResult.success === true) {\n const productUrl = checkResult.product_url;\n if (flow && action) {\n tracker.advancedInFlow(flow, action, {\n ...args,\n url: checkResult.product_url\n });\n }\n if (window?.pac_analytics?.visitor?.chainRedirectUrl) {\n const chainLink = window?.pac_analytics?.visitor?.chainRedirectUrl;\n tracker.customEvent(flow, 'redirect', 'chain-redirect', { redirect_url: chainLink });\n window.location.replace(chainLink);\n } else if (productUrl && productUrl !== '') {\n tracker.customEvent(flow, 'redirect', 'product-redirect', { redirect_url: productUrl });\n window.location.replace(productUrl);\n }\n\n return productUrl || null;\n }\n const error = new Error(`${'SubscriptionFailed'}:\\n${checkResult.message}`) as IError & { type: string };\n error.type = 'SubscriptionFailed';\n throw error;\n}\n","import { ICheckSubscriptionResult } from '../common-types/ICheckSubscriptionResult';\n\nconst checkSubscriptionByRockmanIdOnly = async ({\n window,\n rockmanId\n}: {\n window: Window;\n rockmanId: string;\n}): Promise<ICheckSubscriptionResult> => {\n const host = (window as Window).DEV_BASE_URL || '';\n\n const params = {\n action: 'check-subscription',\n rockman_id: rockmanId\n };\n\n const urlParams = new URLSearchParams(params).toString();\n const url = `${host}/tallyman/v1/?${urlParams}`;\n\n const response = await fetch(url);\n return response.json();\n};\n\nexport { checkSubscriptionByRockmanIdOnly };\n"],"names":["checkSubscriptionHander","_a","window","flow","action","args","rockmanId","pac_analytics","visitor","search","searchToObject","isMock","console","log","check","Promise","resolve","success","rockman_id","product_url","msisdn","host","DEV_BASE_URL","urlParams","URLSearchParams","toString","url","concat","fetch","_b","sent","json","checkSubscriptionByRockmanIdOnly","loop","r","checkResult","_f","productUrl","tracker","advancedInFlow","__assign","_c","chainRedirectUrl","chainLink","_e","_d","customEvent","redirect_url","location","replace","error","Error","message","type"],"mappings":"6OAQM,SAAgBA,EAAwBC,eAC5CC,EAAMD,EAAAC,OACNC,EAAIF,EAAAE,KACJC,EAAMH,EAAAG,OACNC,EAAIJ,EAAAI,mHAuB0C,OAhBtCC,EAAcJ,EAAOK,cAAcC,kBACrCC,EAASC,EAAeR,IACxBS,EAAqC,qCAA5BF,EAAO,mBAGpBG,QAAQC,IAAI,kBAERC,EAAiD,WACrD,OAAAH,EACII,QAAQC,QAAQ,CACdC,SAAS,EACTC,WAAYZ,EACZa,YAAa,WACbC,OAAQ,QC9BuB,SAAOnB,OAC9CC,EAAMD,EAAAC,OACNI,EAASL,EAAAK,gHAeQ,OAVXe,EAAQnB,EAAkBoB,cAAgB,GAO1CC,EAAY,IAAIC,gBALP,CACbpB,OAAQ,qBACRc,WAAYZ,IAGgCmB,WACxCC,EAAM,GAAGC,OAAAN,EAAqB,kBAAAM,OAAAJ,GAEnB,CAAA,EAAMK,MAAMF,WAC7B,MAAA,CAAA,EADiBG,EAAgBC,OACjBC,eDcVC,CAAiC,CAAE9B,SAAQI,UAASA,GAPxD,EAQ4C,CAAA,EAAM2B,EAAKnB,EAAO,IAAI,SAACoB,GAAM,OAAAA,EAAEjB,UAAS,WAEtF,IAA4B,KAFtBkB,EAAwCC,EAA0CN,QAExEb,QAiBd,OAhBMoB,EAAaF,EAAYhB,YAC3BhB,GAAQC,GACVkC,EAAQC,eAAepC,EAAMC,EAAMoC,EAAAA,EAAA,CAAA,EAC9BnC,GAAI,CACPqB,IAAKS,EAAYhB,gBAGa,QAA9BsB,EAAqB,QAArBZ,EAAA3B,aAAM,EAANA,EAAQK,qBAAa,IAAAsB,OAAA,EAAAA,EAAErB,eAAO,IAAAiC,OAAA,EAAAA,EAAEC,mBAC5BC,EAA0C,QAA9BC,EAAqB,QAArBC,EAAA3C,aAAM,EAANA,EAAQK,qBAAa,IAAAsC,OAAA,EAAAA,EAAErC,eAAO,IAAAoC,OAAA,EAAAA,EAAEF,iBAClDJ,EAAQQ,YAAY3C,EAAM,WAAY,iBAAkB,CAAE4C,aAAcJ,IACxEzC,EAAO8C,SAASC,QAAQN,IACfN,GAA6B,KAAfA,IACvBC,EAAQQ,YAAY3C,EAAM,WAAY,mBAAoB,CAAE4C,aAAcV,IAC1EnC,EAAO8C,SAASC,QAAQZ,IAGnB,CAAA,EAAAA,GAAc,MAIvB,MAFMa,EAAQ,IAAIC,MAAM,GAAGxB,OAAA,qBAA0B,OAAAA,OAAAQ,EAAYiB,WAC3DC,KAAO,qBACPH,QACP"}
@@ -1,2 +1,2 @@
1
- import{checkSubscriptionHander as r}from"./checkSubscriptionHander.js";import{isCsSafe as t}from"./isCsSafe.js";import{t as i}from"./tracker-DaaILhEr.js";import"tslib";import"./checkSubscriptionByRockmanIdOnly-BwR1un1L.js";import"./helpers-xPhGBX-B.js";import"./searchToObject.js";import"./bupperizeCountry-CEtt0MKz.js";import"pacman-client";import"uuid";var c=function(c){var o=c.window,e=c.trackState,n=c.msisdn;if(void 0!==o){var a=o.pac_analytics.visitor.chainRedirectUrl||null;r({window:o}).then((function(r){a?t({window:o,command:"cs",msisdn:n}).then((function(r){r&&(i.customEvent(e,"redirect","chain-redirect",{redirect_url:a}),o.location.replace(a))})):(i.customEvent(e,"redirect","product-redirect",{redirect_url:r}),o.location.replace(r))})).catch((function(r){throw r}))}};export{c as handleClickChainFlow};
1
+ import{checkSubscriptionHander as r}from"./checkSubscriptionHander.js";import{isCsSafe as t}from"./isCsSafe.js";import{t as i}from"./tracker-DaaILhEr.js";import"tslib";import"./helpers-xPhGBX-B.js";import"./searchToObject.js";import"./bupperizeCountry-CEtt0MKz.js";import"pacman-client";import"uuid";var c=function(c){var e=c.window,o=c.trackState,n=c.msisdn;if(void 0!==e){var a=e.pac_analytics.visitor.chainRedirectUrl||null;r({window:e}).then((function(r){a?t({window:e,command:"cs",msisdn:n}).then((function(r){r&&(i.customEvent(o,"redirect","chain-redirect",{redirect_url:a}),e.location.replace(a))})):(i.customEvent(o,"redirect","product-redirect",{redirect_url:r}),e.location.replace(r))})).catch((function(r){throw r}))}};export{c as handleClickChainFlow};
2
2
  //# sourceMappingURL=handleClickChainFlow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handleClickChainFlow.js","sources":["../src/utilities/handleClickChainFlow.ts"],"sourcesContent":["import { checkSubscriptionHander } from './checkSubscriptionHander';\nimport { isCsSafe } from './isCsSafe';\nimport { tracker } from './tracker';\n\nexport const handleClickChainFlow = ({\n window,\n trackState,\n msisdn\n}: {\n window: Window;\n trackState: string;\n msisdn?: string;\n}) => {\n if (typeof window !== 'undefined') {\n const chainRedirectUrl = window.pac_analytics.visitor.chainRedirectUrl || null;\n checkSubscriptionHander({ window })\n .then((productUrl) => {\n if (chainRedirectUrl) {\n isCsSafe({\n window,\n command: 'cs',\n msisdn\n }).then((isSafe) => {\n if (isSafe) {\n tracker.customEvent(trackState, 'redirect', 'chain-redirect', { redirect_url: chainRedirectUrl });\n window.location.replace(chainRedirectUrl);\n }\n });\n } else {\n tracker.customEvent(trackState, 'redirect', 'product-redirect', { redirect_url: productUrl });\n window.location.replace(productUrl);\n }\n })\n .catch((err) => {\n throw err;\n });\n }\n};\n"],"names":["handleClickChainFlow","_a","window","trackState","msisdn","chainRedirectUrl_1","pac_analytics","visitor","chainRedirectUrl","checkSubscriptionHander","then","productUrl","isCsSafe","command","isSafe","tracker","customEvent","redirect_url","location","replace","catch","err"],"mappings":"mWAIO,IAAMA,EAAuB,SAACC,GACnC,IAAAC,WACAC,EAAUF,EAAAE,WACVC,EAAMH,EAAAG,OAMN,QAAsB,IAAXF,EAAwB,CACjC,IAAMG,EAAmBH,EAAOI,cAAcC,QAAQC,kBAAoB,KAC1EC,EAAwB,CAAEP,OAAMA,IAC7BQ,MAAK,SAACC,GACDN,EACFO,EAAS,CACPV,OAAMA,EACNW,QAAS,KACTT,OAAMA,IACLM,MAAK,SAACI,GACHA,IACFC,EAAQC,YAAYb,EAAY,WAAY,iBAAkB,CAAEc,aAAcZ,IAC9EH,EAAOgB,SAASC,QAAQd,GAE5B,KAEAU,EAAQC,YAAYb,EAAY,WAAY,mBAAoB,CAAEc,aAAcN,IAChFT,EAAOgB,SAASC,QAAQR,GAE5B,IACCS,OAAM,SAACC,GACN,MAAMA,CACR,GACH,CACH"}
1
+ {"version":3,"file":"handleClickChainFlow.js","sources":["../src/utilities/handleClickChainFlow.ts"],"sourcesContent":["import { checkSubscriptionHander } from './checkSubscriptionHander';\nimport { isCsSafe } from './isCsSafe';\nimport { tracker } from './tracker';\n\nexport const handleClickChainFlow = ({\n window,\n trackState,\n msisdn\n}: {\n window: Window;\n trackState: string;\n msisdn?: string;\n}) => {\n if (typeof window !== 'undefined') {\n const chainRedirectUrl = window.pac_analytics.visitor.chainRedirectUrl || null;\n checkSubscriptionHander({ window })\n .then((productUrl) => {\n if (chainRedirectUrl) {\n isCsSafe({\n window,\n command: 'cs',\n msisdn\n }).then((isSafe) => {\n if (isSafe) {\n tracker.customEvent(trackState, 'redirect', 'chain-redirect', { redirect_url: chainRedirectUrl });\n window.location.replace(chainRedirectUrl);\n }\n });\n } else {\n tracker.customEvent(trackState, 'redirect', 'product-redirect', { redirect_url: productUrl });\n window.location.replace(productUrl);\n }\n })\n .catch((err) => {\n throw err;\n });\n }\n};\n"],"names":["handleClickChainFlow","_a","window","trackState","msisdn","chainRedirectUrl_1","pac_analytics","visitor","chainRedirectUrl","checkSubscriptionHander","then","productUrl","isCsSafe","command","isSafe","tracker","customEvent","redirect_url","location","replace","catch","err"],"mappings":"4SAIO,IAAMA,EAAuB,SAACC,GACnC,IAAAC,WACAC,EAAUF,EAAAE,WACVC,EAAMH,EAAAG,OAMN,QAAsB,IAAXF,EAAwB,CACjC,IAAMG,EAAmBH,EAAOI,cAAcC,QAAQC,kBAAoB,KAC1EC,EAAwB,CAAEP,OAAMA,IAC7BQ,MAAK,SAACC,GACDN,EACFO,EAAS,CACPV,OAAMA,EACNW,QAAS,KACTT,OAAMA,IACLM,MAAK,SAACI,GACHA,IACFC,EAAQC,YAAYb,EAAY,WAAY,iBAAkB,CAAEc,aAAcZ,IAC9EH,EAAOgB,SAASC,QAAQd,GAE5B,KAEAU,EAAQC,YAAYb,EAAY,WAAY,mBAAoB,CAAEc,aAAcN,IAChFT,EAAOgB,SAASC,QAAQR,GAE5B,IACCS,OAAM,SAACC,GACN,MAAMA,CACR,GACH,CACH"}
package/dist/moFlow.js CHANGED
@@ -1,2 +1,2 @@
1
- import{__awaiter as t,__generator as r,__read as e,__assign as n}from"tslib";import{createAsyncThunk as o,createSlice as a}from"@reduxjs/toolkit";import{S as c,N as s,L as i,F as u}from"./RemoteDataState-lcf8PfJd.js";import{searchToObject as d}from"./searchToObject.js";import{s as l}from"./storeMsisdn-Cjq8_qYH.js";import{t as m}from"./tracker-DaaILhEr.js";import{c as f}from"./checkSubscriptionByRockmanIdOnly-BwR1un1L.js";import{a as v}from"./helpers-xPhGBX-B.js";import"pacman-client";import"uuid";var p=function(t){return t((function(t){return t.moFlow.currentState}))};function y(t){var r=t.msisdnEntry;return function(t){return t.type,r(t.result)}}var S=function(n){var o=n.window,a=n.slug,c=n.country,s=n.msisdn,i=n.device,u=n.offer,d=n.rockmanId,l=n.extraParamsQs;return t(void 0,void 0,void 0,(function(){var t,n,m,f,v,p,y;return r(this,(function(r){switch(r.label){case 0:return o.api_ajax_url?[4,fetch(o.api_ajax_url).then((function(t){return t.json()}))]:[3,2];case 1:return n=r.sent(),[3,3];case 2:n=null,r.label=3;case 3:return t=n,m={action:"trigger-message",slug:a,country:c,msisdn:s,device:i,offerId:u,rockman_id:d,page:encodeURIComponent(null===(y=null==o?void 0:o.location)||void 0===y?void 0:y.href),sam_g_token:o.reCaptchaToken||"",antifraud_id:o.antifraud_id||"",language_code:o.languageCode||"",partner_form_action:(null==t?void 0:t.form_action)?encodeURIComponent(null==t?void 0:t.form_action):""},f=Object.entries(m).filter((function(t){var r=e(t,2);return r[0],r[1]})).map((function(t){var r=e(t,2),n=r[0],o=r[1];return"".concat(n,"=").concat(o)})).join("&"),v=o.DEV_BASE_URL||"",p="".concat(v,"/tallyman/v1/?").concat(f,"&").concat(l),[2,fetch(p).then((function(t){return t.json()}))]}}))}))};function w(e,o,a,c){var s,i;return t(this,void 0,void 0,(function(){var t;return r(this,(function(r){return t=n(n({},o||{}),{offer:null===(i=null===(s=e.pac_analytics)||void 0===s?void 0:s.visitor)||void 0===i?void 0:i.offer}),[2,h(e,t,a,c)]}))}))}function h(e,o,a,c){var s;return t(this,void 0,void 0,(function(){var t,i,u,d,l,m,f,v,p,y,w;return r(this,(function(r){switch(r.label){case 0:return t=o.slug,i=o.country,u=o.device,d=o.offer,l=e.location.search.substr(1)||"",m=c?"&".concat(Object.keys(c).map((function(t){return"".concat(t,"=").concat(c[t])})).join("&")):"",f=(null===(s=a.match(/\d+/gi))||void 0===s?void 0:s.join(""))||"",v=e.pac_analytics.visitor.rockmanId,[4,S({window:e,slug:t,country:i,msisdn:f,device:u,offer:d,rockmanId:v,search:l,extraParamsQs:m})];case 1:if(!1===(p=r.sent()).success)throw y="ALREADY SUBSCRIBED"===p.message?"AlreadySubscribed":"InvalidMSISDN",(w=new Error("".concat(y,":\n").concat(p.message))).type=y,w.productUrl=p.product_url?p.product_url:"",console.error(w),w;return[2,n(n({},p),{keyword:p.displayKeyword})]}}))}))}var b={currentState:{type:"MSISDNEntry",result:c({keyword:"TEST OK",shortcode:"777"})}},I={currentState:{type:"MSISDNEntry",result:u({errorType:"InvalidMSISDN",error:"Invalid Mobile Number"})}},_={currentState:{type:"MSISDNEntry",result:s()}},g=function(t){var r=d(t);if(!r["mock-flow"])return _;switch(r["current-state"]){case"msisdn-entry-failure-state":return I;case"msisdn-entry-success-state":return b;default:return console.error("Mock Flow not supported"),_}}(window),k=o("moFlow/submitMSISDNAction",(function(e,o){var a=e.window,s=e.msisdn,i=e.extraParams,u=o.getState,d=o.rejectWithValue;return t(void 0,void 0,void 0,(function(){var e,o,p,y,S,h,b,I;return r(this,(function(_){switch(_.label){case 0:if(e=u(),!(null===(I=null===(b=null===(h=null==e?void 0:e.strategy)||void 0===h?void 0:h.currentState)||void 0===b?void 0:b.data)||void 0===I?void 0:I.config))return[2,d({errorType:"UnexpectedState"})];o=e.strategy.currentState.data.config,_.label=1;case 1:return _.trys.push([1,5,,6]),m.advancedInFlow("tallyman.v1-mo","msisdn-submitted",{msisdn:s}),[4,w(a,o,s,i)];case 2:return p=_.sent(),m.advancedInFlow("tallyman.v1-mo","msisdn-submission-success",{msisdn:s}),i&&i.storeMsisdn&&"true"===i.storeMsisdn?[4,l(s).then((function(t){t&&t.data&&t.data.success?m.customEvent("Flow","advance-auto","msisdn-stored-success"):m.customEvent("Flow","advance-auto","msisdn-stored-failed")})).catch((function(t){m.customEvent("Flow","advance-auto","msisdn-stored-error",t)}))]:[3,4];case 3:_.sent(),_.label=4;case 4:return function(e){return t(this,void 0,void 0,(function(){var t,n,o;return r(this,(function(r){switch(r.label){case 0:return t=e.pac_analytics.visitor.rockmanId,[4,v((function(){return f({window:e,rockmanId:t})}),60,(function(t){return t.success}),0)];case 1:if(!0===(n=r.sent()).success&&n.product_url&&""!==n.product_url)return e.location.href=n.product_url,[2,n.product_url];throw(o=new Error("".concat("SubscriptionFailed",":\n").concat(n.message))).type="SubscriptionFailed",o}}))}))}(a).then((function(t){m.advancedInFlow("tallyman.v1-mo","sale",{msisdn:s}),setTimeout((function(){a.location.href=t}),1e3)})),[2,{type:"MSISDNEntry",result:c(n({},p))}];case 5:switch(y=_.sent(),console.warn(y),S=void 0,y.type){case"AlreadySubscribed":S="AlreadySubscribed";break;case"InvalidMSISDN":S="InvalidMSISDN";break;default:S="UnknownError"}return m.recedeInFlow("tallyman.v1-mo","msisdn-submission-failure",{msisdn:s,errorType:S||"UnknownError"}),[2,d({errorType:S,productUrl:y.productUrl})];case 6:return[2]}}))}))})),E=a({name:"moFlow",initialState:g,reducers:{backToStartAction:function(t){m.recedeInFlow("tallyman.v1-mo","mo-state","requested to change phone number"),t.currentState={type:"MSISDNEntry",result:s()}}},extraReducers:function(t){t.addCase(k.pending,(function(t){t.currentState={type:"MSISDNEntry",result:i()}})).addCase(k.fulfilled,(function(t,r){t.currentState=r.payload})).addCase(k.rejected,(function(t,r){t.currentState={type:"MSISDNEntry",result:u(r.payload)}}))}}),j=E.reducer,M=E.actions.backToStartAction;export{M as backToStartAction,y as moFlowMatch,j as moFlowReducer,k as submitMSISDNAction,p as useMoFlowState};
1
+ import{__awaiter as t,__generator as e,__read as r,__assign as n}from"tslib";import{createAsyncThunk as o,createSlice as a}from"@reduxjs/toolkit";import{S as s,N as c,L as i,F as u}from"./RemoteDataState-lcf8PfJd.js";import{searchToObject as d}from"./searchToObject.js";import{s as l}from"./storeMsisdn-Cjq8_qYH.js";import{t as m}from"./tracker-DaaILhEr.js";import"pacman-client";import"uuid";var f=function(t){return t((function(t){return t.moFlow.currentState}))};function v(t){var e=t.msisdnEntry;return function(t){return t.type,e(t.result)}}var p=function(n){var o=n.window,a=n.slug,s=n.country,c=n.msisdn,i=n.device,u=n.offer,d=n.rockmanId,l=n.extraParamsQs;return t(void 0,void 0,void 0,(function(){var t,n,m,f,v,p,y;return e(this,(function(e){switch(e.label){case 0:return o.api_ajax_url?[4,fetch(o.api_ajax_url).then((function(t){return t.json()}))]:[3,2];case 1:return n=e.sent(),[3,3];case 2:n=null,e.label=3;case 3:return t=n,m={action:"trigger-message",slug:a,country:s,msisdn:c,device:i,offerId:u,rockman_id:d,page:encodeURIComponent(null===(y=null==o?void 0:o.location)||void 0===y?void 0:y.href),sam_g_token:o.reCaptchaToken||"",antifraud_id:o.antifraud_id||"",language_code:o.languageCode||"",partner_form_action:(null==t?void 0:t.form_action)?encodeURIComponent(null==t?void 0:t.form_action):""},f=Object.entries(m).filter((function(t){var e=r(t,2);return e[0],e[1]})).map((function(t){var e=r(t,2),n=e[0],o=e[1];return"".concat(n,"=").concat(o)})).join("&"),v=o.DEV_BASE_URL||"",p="".concat(v,"/tallyman/v1/?").concat(f,"&").concat(l),[2,fetch(p).then((function(t){return t.json()}))]}}))}))};function y(r,o,a,s){var c,i;return t(this,void 0,void 0,(function(){var t;return e(this,(function(e){return t=n(n({},o||{}),{offer:null===(i=null===(c=r.pac_analytics)||void 0===c?void 0:c.visitor)||void 0===i?void 0:i.offer}),[2,S(r,t,a,s)]}))}))}function S(r,o,a,s){var c;return t(this,void 0,void 0,(function(){var t,i,u,d,l,m,f,v,y,S,w;return e(this,(function(e){switch(e.label){case 0:return t=o.slug,i=o.country,u=o.device,d=o.offer,l=r.location.search.substr(1)||"",m=s?"&".concat(Object.keys(s).map((function(t){return"".concat(t,"=").concat(s[t])})).join("&")):"",f=(null===(c=a.match(/\d+/gi))||void 0===c?void 0:c.join(""))||"",v=r.pac_analytics.visitor.rockmanId,[4,p({window:r,slug:t,country:i,msisdn:f,device:u,offer:d,rockmanId:v,search:l,extraParamsQs:m})];case 1:if(!1===(y=e.sent()).success)throw S="ALREADY SUBSCRIBED"===y.message?"AlreadySubscribed":"InvalidMSISDN",(w=new Error("".concat(S,":\n").concat(y.message))).type=S,w.productUrl=y.product_url?y.product_url:"",console.error(w),w;return[2,n(n({},y),{keyword:y.displayKeyword})]}}))}))}var w={currentState:{type:"MSISDNEntry",result:s({keyword:"TEST OK",shortcode:"777"})}},h={currentState:{type:"MSISDNEntry",result:u({errorType:"InvalidMSISDN",error:"Invalid Mobile Number"})}},b={currentState:{type:"MSISDNEntry",result:c()}},I=function(t){var e=d(t);if(!e["mock-flow"])return b;switch(e["current-state"]){case"msisdn-entry-failure-state":return h;case"msisdn-entry-success-state":return w;default:return console.error("Mock Flow not supported"),b}}(window),g=o("moFlow/submitMSISDNAction",(function(r,o){var a=r.window,c=r.msisdn,i=r.extraParams,u=o.getState,d=o.rejectWithValue;return t(void 0,void 0,void 0,(function(){var t,r,o,f,v,p,S,w;return e(this,(function(e){switch(e.label){case 0:if(t=u(),!(null===(w=null===(S=null===(p=null==t?void 0:t.strategy)||void 0===p?void 0:p.currentState)||void 0===S?void 0:S.data)||void 0===w?void 0:w.config))return[2,d({errorType:"UnexpectedState"})];r=t.strategy.currentState.data.config,e.label=1;case 1:return e.trys.push([1,5,,6]),m.advancedInFlow("tallyman.v1-mo","msisdn-submitted",{msisdn:c}),[4,y(a,r,c,i)];case 2:return o=e.sent(),m.advancedInFlow("tallyman.v1-mo","msisdn-submission-success",{msisdn:c}),i&&i.storeMsisdn&&"true"===i.storeMsisdn?[4,l(c).then((function(t){t&&t.data&&t.data.success?m.customEvent("Flow","advance-auto","msisdn-stored-success"):m.customEvent("Flow","advance-auto","msisdn-stored-failed")})).catch((function(t){m.customEvent("Flow","advance-auto","msisdn-stored-error",t)}))]:[3,4];case 3:e.sent(),e.label=4;case 4:return[2,{type:"MSISDNEntry",result:s(n({},o))}];case 5:switch(f=e.sent(),console.warn(f),v=void 0,f.type){case"AlreadySubscribed":v="AlreadySubscribed";break;case"InvalidMSISDN":v="InvalidMSISDN";break;default:v="UnknownError"}return m.recedeInFlow("tallyman.v1-mo","msisdn-submission-failure",{msisdn:c,errorType:v||"UnknownError"}),[2,d({errorType:v,productUrl:f.productUrl})];case 6:return[2]}}))}))})),_=a({name:"moFlow",initialState:I,reducers:{backToStartAction:function(t){m.recedeInFlow("tallyman.v1-mo","mo-state","requested to change phone number"),t.currentState={type:"MSISDNEntry",result:c()}}},extraReducers:function(t){t.addCase(g.pending,(function(t){t.currentState={type:"MSISDNEntry",result:i()}})).addCase(g.fulfilled,(function(t,e){t.currentState=e.payload})).addCase(g.rejected,(function(t,e){t.currentState={type:"MSISDNEntry",result:u(e.payload)}}))}}),k=_.reducer,E=_.actions.backToStartAction;export{E as backToStartAction,v as moFlowMatch,k as moFlowReducer,g as submitMSISDNAction,f as useMoFlowState};
2
2
  //# sourceMappingURL=moFlow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"moFlow.js","sources":["../src/flows/moFlow/hooks/useMoFlowState.ts","../src/flows/moFlow/match.ts","../src/flows/moFlow/api.ts","../src/flows/moFlow/main.ts","../src/flows/moFlow/moFlowSlice.ts"],"sourcesContent":["import { useSelector as IuseSelector } from 'react-redux';\nimport { RootState } from '../../../sharedFlowTypes/StrategyTypes';\n\nexport const useMoFlowState = (useSelector: typeof IuseSelector) => {\n const currentState = useSelector((state: RootState) => state.moFlow.currentState);\n return currentState;\n};\n","import * as RDS from '../../common-types/RemoteDataState';\nimport { MoFlowCurrentState, MSISDNEntryFailure, MSISDNEntrySuccess } from '../../sharedFlowTypes/MoTypes';\n\nfunction moFlowMatch<R>({\n msisdnEntry\n}: {\n msisdnEntry: (rds: RDS.RemoteDataState<MSISDNEntryFailure, MSISDNEntrySuccess>) => R;\n}): (state: MoFlowCurrentState) => R {\n return (state) => {\n switch (state.type) {\n case 'MSISDNEntry':\n return msisdnEntry(state.result);\n default:\n // TODO - this should be an error or something\n return msisdnEntry(state.result);\n }\n };\n}\n\nexport { moFlowMatch };\n","import { IGoogleReCaptcha, IMSISDNSubmissionResult } from '../../sharedFlowTypes/MoTypes';\n\nconst getGoogleCaptcha = async (\n window: Window,\n country: string,\n slug: string,\n device: string,\n domain: string\n): Promise<IGoogleReCaptcha> => {\n const host = (window as Window).DEV_BASE_URL || '';\n\n return fetch(\n `${host}/tallyman/helper/?action=google-captcha-v3-config&country=${country}&slug=${slug}&device=${device}&domain=${domain}`\n ).then((x) => x.json());\n};\n\nconst triggerMessage = async ({\n window,\n slug,\n country,\n msisdn,\n device,\n offer,\n rockmanId,\n extraParamsQs\n}: {\n window: Window;\n slug: string;\n country: string;\n msisdn: string;\n device: string;\n offer: string;\n rockmanId: string;\n search: string;\n extraParamsQs: string;\n}): Promise<IMSISDNSubmissionResult> => {\n // introduced https://www.notion.so/sammedia/CH-Agency-Bodkinco-Integration-ea1600ad175f451a9d351b6763ad7992\n const partnerAjaxResopnse: {\n form_action: string;\n } = window.api_ajax_url ? await fetch(window.api_ajax_url).then((x) => x.json()) : null;\n\n const params = {\n action: 'trigger-message',\n slug,\n country,\n msisdn,\n device,\n offerId: offer,\n rockman_id: rockmanId,\n page: encodeURIComponent(window?.location?.href),\n sam_g_token: window.reCaptchaToken || '',\n antifraud_id: window.antifraud_id || '',\n language_code: window.languageCode || '',\n partner_form_action: partnerAjaxResopnse?.form_action ? encodeURIComponent(partnerAjaxResopnse?.form_action) : ''\n };\n\n const queryString = Object.entries(params)\n .filter(([_, value]) => value)\n .map(([key, value]) => `${key}=${value}`)\n .join('&');\n\n const host = (window as Window).DEV_BASE_URL || '';\n const url = `${host}/tallyman/v1/?${queryString}&${extraParamsQs}`;\n\n return fetch(url).then((x) => x.json());\n};\n\nexport { getGoogleCaptcha, triggerMessage };\n","import { ICheckSubscriptionResult } from '../../common-types/ICheckSubscriptionResult';\nimport { IError } from '../../common-types/IError';\nimport { IConfig } from '../../common-types/Strategy';\nimport { checkSubscriptionByRockmanIdOnly } from '../../sharedApi/checkSubscriptionByRockmanIdOnly';\nimport { IGoogleReCaptcha, IKeywordShortcode, IMSISDNSubmissionResult } from '../../sharedFlowTypes/MoTypes';\nimport { loop } from '../../utilities/helpers';\nimport loadScriptSrc from '../../utilities/loadScriptSrc';\nimport { getGoogleCaptcha, triggerMessage } from './api';\n\nexport default async function submitMSISDN(\n window: Window,\n maybeConfig: IConfig,\n internationalMSISDN: string,\n extraParams?: { [key: string]: string }\n): Promise<IKeywordShortcode> {\n const config: any = { ...(maybeConfig || {}), offer: window.pac_analytics?.visitor?.offer };\n return submitMSISDNWithConfig(window, config, internationalMSISDN, extraParams);\n}\n\nexport const getGoogleReCaptchaConfig = async ({\n window,\n slug,\n country,\n device\n}: IConfig & { window: Window }): Promise<IGoogleReCaptcha> => {\n const domain = window.location.hostname;\n const result: IGoogleReCaptcha = await getGoogleCaptcha(window, country, slug, device, domain);\n if (result.success === true) {\n const srcUrl = `https://www.google.com/recaptcha/api.js?render=${result.site_key}`;\n loadScriptSrc({ url: srcUrl, key: result.site_key, isRecaptcha: true });\n }\n return result;\n};\n\nexport async function submitMSISDNWithConfig(\n window: Window,\n config: IConfig,\n internationalMSISDN: string,\n extraParams?: { [key: string]: string }\n): Promise<IKeywordShortcode> {\n const { slug, country, device, offer } = config;\n const search = window.location.search.substr(1) || '';\n const extraParamsQs = !extraParams\n ? ''\n : `&${Object.keys(extraParams)\n .map((k) => `${k}=${extraParams[k]}`)\n .join('&')}`;\n const msisdn = internationalMSISDN.match(/\\d+/gi)?.join('') || '';\n const { rockmanId } = window.pac_analytics.visitor;\n\n const result: IMSISDNSubmissionResult = await triggerMessage({\n window,\n slug,\n country,\n msisdn,\n device,\n offer,\n rockmanId,\n search,\n extraParamsQs\n });\n\n if (result.success === false) {\n const type = result.message === 'ALREADY SUBSCRIBED' ? 'AlreadySubscribed' : 'InvalidMSISDN';\n const error = new Error(`${type}:\\n${result.message}`) as IError & { type: string; productUrl: string };\n error.type = type;\n error.productUrl = result.product_url ? result.product_url : '';\n\n console.error(error);\n throw error;\n } else {\n return { ...result, keyword: result.displayKeyword }; // based on discussion with Chanaka to avoid confusion in set up on bupper. Click2sms and mo will use display keyword\n }\n}\n\nexport async function moCheckSubscription(window: Window): Promise<string> {\n const { rockmanId } = window.pac_analytics.visitor;\n const check: () => Promise<ICheckSubscriptionResult> = () => checkSubscriptionByRockmanIdOnly({ window, rockmanId });\n\n const checkResult: ICheckSubscriptionResult = await loop(check, 60, (r) => r.success, 0);\n\n if (checkResult.success === true && checkResult.product_url && checkResult.product_url !== '') {\n window.location.href = checkResult.product_url;\n return checkResult.product_url;\n }\n const error = new Error(`${'SubscriptionFailed'}:\\n${checkResult.message}`) as IError & { type: string };\n error.type = 'SubscriptionFailed';\n throw error;\n}\n\n// export const formatSMSLink = (keywordAndShortcode: IKeywordShortcode) =>\n// !!window.pac_analytics.visitor['x-requested-with'] &&\n// window.pac_analytics.visitor['x-requested-with'] !== null &&\n// window.pac_analytics.visitor['x-requested-with'].indexOf('com.facebook') !== -1\n// ? `sms://${keywordAndShortcode.shortcode}?body=${keywordAndShortcode.keyword}`\n// : typeof navigator !== 'undefined' && (/iPhone/i.test(navigator.userAgent) || /Mac OS/i.test(navigator.userAgent))\n// ? `sms:${keywordAndShortcode.shortcode}&body=${keywordAndShortcode.keyword}`\n// : `sms:${keywordAndShortcode.shortcode}?body=${keywordAndShortcode.keyword}`;\n","import { createAsyncThunk, createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { IHash } from '../../common-types/IHash';\nimport * as RDS from '../../common-types/RemoteDataState';\nimport {\n MSISDNEntryErrorTypes,\n MSISDNEntryFailure,\n MSISDNEntryState,\n MSISDNEntrySuccess\n} from '../../sharedFlowTypes/MoTypes';\nimport { IMockFlowParams, RootState } from '../../sharedFlowTypes/StrategyTypes';\nimport { searchToObject } from '../../utilities/searchToObject';\nimport { storeMsisdn } from '../../utilities/storeMsisdn';\nimport { tracker } from '../../utilities/tracker';\nimport submitMSISDN, { moCheckSubscription } from './main';\n\nexport const mockedMSISDNEntrySuccess: MoFlowState = {\n currentState: {\n type: 'MSISDNEntry',\n result: RDS.Success<MSISDNEntryFailure, MSISDNEntrySuccess>({\n keyword: 'TEST OK',\n shortcode: '777'\n })\n }\n};\n\nexport const mockedMSISDNEntryFailure: MoFlowState = {\n currentState: {\n type: 'MSISDNEntry',\n result: RDS.Failure<MSISDNEntryFailure, MSISDNEntrySuccess>({\n errorType: 'InvalidMSISDN',\n error: 'Invalid Mobile Number'\n })\n }\n};\nexport interface MoFlowState {\n currentState: {\n type: 'MSISDNEntry';\n result: RDS.RemoteDataState<any, any>; // Replace any with your specific error and data types\n };\n}\n\nconst defaultInitialState: MoFlowState = {\n currentState: {\n type: 'MSISDNEntry',\n result: RDS.NothingYet()\n }\n};\n\nconst setInitialState = (window: Window) => {\n const search = searchToObject(window) as IMockFlowParams<any>;\n if (search['mock-flow']) {\n switch (search['current-state']) {\n case 'msisdn-entry-failure-state':\n return mockedMSISDNEntryFailure;\n case 'msisdn-entry-success-state':\n return mockedMSISDNEntrySuccess;\n default:\n console.error('Mock Flow not supported');\n return defaultInitialState;\n }\n } else {\n return defaultInitialState;\n }\n};\n\nconst initialState = setInitialState(window);\n\ninterface SubmitMSISDNArgs {\n window: Window;\n msisdn: string;\n extraParams?: IHash;\n}\n/**\n * submitMSISDNAction\n * @returns {type: ' 'pinFlow/submitMSISDNAction', payload: {type: PossibleTypes, result: MSISDNEntryState}}\n \n * Calls trigger-message api that returns a short code and key word\n * Sets completed stated\n */\nexport const submitMSISDNAction = createAsyncThunk<\n MSISDNEntryState,\n SubmitMSISDNArgs,\n {\n rejectValue: MSISDNEntryFailure;\n }\n>('moFlow/submitMSISDNAction', async ({ window, msisdn, extraParams }, { getState, rejectWithValue }) => {\n const state: RootState = getState();\n if (!state?.strategy?.currentState?.data?.config) {\n return rejectWithValue({\n errorType: 'UnexpectedState'\n });\n }\n const { config } = state.strategy.currentState.data;\n\n try {\n // Start Trigger Message\n tracker.advancedInFlow('tallyman.v1-mo', 'msisdn-submitted', { msisdn });\n const keywordAndShortcode = await submitMSISDN(window, config, msisdn, extraParams);\n tracker.advancedInFlow('tallyman.v1-mo', 'msisdn-submission-success', { msisdn });\n // End Trigger Message\n\n // Start Store Msisdn\n // if storeMsisdn is true, encrypt msisdn and save it in cookie, localStorage, and zürch\n if (extraParams && extraParams.storeMsisdn && extraParams.storeMsisdn === 'true') {\n await storeMsisdn(msisdn)\n .then((data: any) => {\n if (data && data.data && data.data.success) {\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-stored-success');\n } else {\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-stored-failed');\n }\n })\n .catch((error) => {\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-stored-error', error);\n });\n }\n // End Store Msisdn\n\n // Check For Subscription by rockman id and redirect to product url\n moCheckSubscription(window).then((product_url) => {\n tracker.advancedInFlow('tallyman.v1-mo', 'sale', { msisdn });\n setTimeout(() => {\n window.location.href = product_url;\n }, 1000);\n });\n\n return {\n type: 'MSISDNEntry',\n result: RDS.Success<MSISDNEntryFailure, MSISDNEntrySuccess>({ ...keywordAndShortcode })\n };\n } catch (ex) {\n console.warn(ex);\n let errorType: MSISDNEntryErrorTypes;\n switch (ex.type) {\n case 'AlreadySubscribed':\n errorType = 'AlreadySubscribed';\n break;\n case 'InvalidMSISDN':\n errorType = 'InvalidMSISDN';\n break;\n default:\n errorType = 'UnknownError';\n }\n\n tracker.recedeInFlow('tallyman.v1-mo', 'msisdn-submission-failure', {\n msisdn,\n errorType: errorType || 'UnknownError'\n });\n\n return rejectWithValue({\n errorType,\n productUrl: ex.productUrl\n });\n }\n});\n\nconst moFlowSlice = createSlice({\n name: 'moFlow',\n initialState,\n reducers: {\n backToStartAction(state) {\n tracker.recedeInFlow('tallyman.v1-mo', 'mo-state', 'requested to change phone number');\n\n // TODO GO BACK TO IDENTIFY BY MSISDN BASED ON STRATEGY\n state.currentState = { type: 'MSISDNEntry', result: RDS.NothingYet() };\n }\n },\n extraReducers: (builder) => {\n builder\n .addCase(submitMSISDNAction.pending, (state) => {\n state.currentState = { type: 'MSISDNEntry', result: RDS.Loading() };\n })\n .addCase(submitMSISDNAction.fulfilled, (state, action: PayloadAction<MSISDNEntryState>) => {\n state.currentState = action.payload;\n })\n .addCase(submitMSISDNAction.rejected, (state, action: PayloadAction<MSISDNEntryFailure>) => {\n state.currentState = {\n type: 'MSISDNEntry',\n result: RDS.Failure(action.payload)\n };\n });\n }\n});\n\n// Export reducers and actions\nexport const { reducer: moFlowReducer, actions: moFlowActions } = moFlowSlice;\nexport const { backToStartAction } = moFlowActions;\n\n// If you have selectors or thunks related to this slice, export them as named exports as well\nexport const selectMoFlowState = (state: any) => state.moFlow;\n"],"names":["useMoFlowState","useSelector","state","moFlow","currentState","moFlowMatch","_a","msisdnEntry","type","result","triggerMessage","window","slug","country","msisdn","device","offer","rockmanId","extraParamsQs","api_ajax_url","fetch","then","x","json","_b","_d","partnerAjaxResopnse","params","action","offerId","rockman_id","page","encodeURIComponent","_c","location","href","sam_g_token","reCaptchaToken","antifraud_id","language_code","languageCode","partner_form_action","form_action","queryString","Object","entries","filter","__read","map","key","value","concat","join","host","DEV_BASE_URL","url","submitMSISDN","maybeConfig","internationalMSISDN","extraParams","config","pac_analytics","visitor","submitMSISDNWithConfig","search","substr","keys","k","match","sent","success","message","error","Error","productUrl","product_url","console","__assign","keyword","displayKeyword","mockedMSISDNEntrySuccess","RDS.Success","shortcode","mockedMSISDNEntryFailure","RDS.Failure","errorType","defaultInitialState","RDS.NothingYet","initialState","searchToObject","setInitialState","submitMSISDNAction","createAsyncThunk","getState","rejectWithValue","_e","strategy","data","tracker","advancedInFlow","keywordAndShortcode","_f","storeMsisdn","customEvent","catch","loop","checkSubscriptionByRockmanIdOnly","r","checkResult","moCheckSubscription","setTimeout","warn","ex_1","recedeInFlow","moFlowSlice","createSlice","name","reducers","backToStartAction","extraReducers","builder","addCase","pending","RDS.Loading","fulfilled","payload","rejected","moFlowReducer","reducer","actions"],"mappings":"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"}
1
+ {"version":3,"file":"moFlow.js","sources":["../src/flows/moFlow/hooks/useMoFlowState.ts","../src/flows/moFlow/match.ts","../src/flows/moFlow/api.ts","../src/flows/moFlow/main.ts","../src/flows/moFlow/moFlowSlice.ts"],"sourcesContent":["import { useSelector as IuseSelector } from 'react-redux';\nimport { RootState } from '../../../sharedFlowTypes/StrategyTypes';\n\nexport const useMoFlowState = (useSelector: typeof IuseSelector) => {\n const currentState = useSelector((state: RootState) => state.moFlow.currentState);\n return currentState;\n};\n","import * as RDS from '../../common-types/RemoteDataState';\nimport { MoFlowCurrentState, MSISDNEntryFailure, MSISDNEntrySuccess } from '../../sharedFlowTypes/MoTypes';\n\nfunction moFlowMatch<R>({\n msisdnEntry\n}: {\n msisdnEntry: (rds: RDS.RemoteDataState<MSISDNEntryFailure, MSISDNEntrySuccess>) => R;\n}): (state: MoFlowCurrentState) => R {\n return (state) => {\n switch (state.type) {\n case 'MSISDNEntry':\n return msisdnEntry(state.result);\n default:\n // TODO - this should be an error or something\n return msisdnEntry(state.result);\n }\n };\n}\n\nexport { moFlowMatch };\n","import { IGoogleReCaptcha, IMSISDNSubmissionResult } from '../../sharedFlowTypes/MoTypes';\n\nconst getGoogleCaptcha = async (\n window: Window,\n country: string,\n slug: string,\n device: string,\n domain: string\n): Promise<IGoogleReCaptcha> => {\n const host = (window as Window).DEV_BASE_URL || '';\n\n return fetch(\n `${host}/tallyman/helper/?action=google-captcha-v3-config&country=${country}&slug=${slug}&device=${device}&domain=${domain}`\n ).then((x) => x.json());\n};\n\nconst triggerMessage = async ({\n window,\n slug,\n country,\n msisdn,\n device,\n offer,\n rockmanId,\n extraParamsQs\n}: {\n window: Window;\n slug: string;\n country: string;\n msisdn: string;\n device: string;\n offer: string;\n rockmanId: string;\n search: string;\n extraParamsQs: string;\n}): Promise<IMSISDNSubmissionResult> => {\n // introduced https://www.notion.so/sammedia/CH-Agency-Bodkinco-Integration-ea1600ad175f451a9d351b6763ad7992\n const partnerAjaxResopnse: {\n form_action: string;\n } = window.api_ajax_url ? await fetch(window.api_ajax_url).then((x) => x.json()) : null;\n\n const params = {\n action: 'trigger-message',\n slug,\n country,\n msisdn,\n device,\n offerId: offer,\n rockman_id: rockmanId,\n page: encodeURIComponent(window?.location?.href),\n sam_g_token: window.reCaptchaToken || '',\n antifraud_id: window.antifraud_id || '',\n language_code: window.languageCode || '',\n partner_form_action: partnerAjaxResopnse?.form_action ? encodeURIComponent(partnerAjaxResopnse?.form_action) : ''\n };\n\n const queryString = Object.entries(params)\n .filter(([_, value]) => value)\n .map(([key, value]) => `${key}=${value}`)\n .join('&');\n\n const host = (window as Window).DEV_BASE_URL || '';\n const url = `${host}/tallyman/v1/?${queryString}&${extraParamsQs}`;\n\n return fetch(url).then((x) => x.json());\n};\n\nexport { getGoogleCaptcha, triggerMessage };\n","import { ICheckSubscriptionResult } from '../../common-types/ICheckSubscriptionResult';\nimport { IError } from '../../common-types/IError';\nimport { IConfig } from '../../common-types/Strategy';\nimport { checkSubscriptionByRockmanIdOnly } from '../../sharedApi/checkSubscriptionByRockmanIdOnly';\nimport { IGoogleReCaptcha, IKeywordShortcode, IMSISDNSubmissionResult } from '../../sharedFlowTypes/MoTypes';\nimport { loop } from '../../utilities/helpers';\nimport loadScriptSrc from '../../utilities/loadScriptSrc';\nimport { getGoogleCaptcha, triggerMessage } from './api';\n\nexport default async function submitMSISDN(\n window: Window,\n maybeConfig: IConfig,\n internationalMSISDN: string,\n extraParams?: { [key: string]: string }\n): Promise<IKeywordShortcode> {\n const config: any = { ...(maybeConfig || {}), offer: window.pac_analytics?.visitor?.offer };\n return submitMSISDNWithConfig(window, config, internationalMSISDN, extraParams);\n}\n\nexport const getGoogleReCaptchaConfig = async ({\n window,\n slug,\n country,\n device\n}: IConfig & { window: Window }): Promise<IGoogleReCaptcha> => {\n const domain = window.location.hostname;\n const result: IGoogleReCaptcha = await getGoogleCaptcha(window, country, slug, device, domain);\n if (result.success === true) {\n const srcUrl = `https://www.google.com/recaptcha/api.js?render=${result.site_key}`;\n loadScriptSrc({ url: srcUrl, key: result.site_key, isRecaptcha: true });\n }\n return result;\n};\n\nexport async function submitMSISDNWithConfig(\n window: Window,\n config: IConfig,\n internationalMSISDN: string,\n extraParams?: { [key: string]: string }\n): Promise<IKeywordShortcode> {\n const { slug, country, device, offer } = config;\n const search = window.location.search.substr(1) || '';\n const extraParamsQs = !extraParams\n ? ''\n : `&${Object.keys(extraParams)\n .map((k) => `${k}=${extraParams[k]}`)\n .join('&')}`;\n const msisdn = internationalMSISDN.match(/\\d+/gi)?.join('') || '';\n const { rockmanId } = window.pac_analytics.visitor;\n\n const result: IMSISDNSubmissionResult = await triggerMessage({\n window,\n slug,\n country,\n msisdn,\n device,\n offer,\n rockmanId,\n search,\n extraParamsQs\n });\n\n if (result.success === false) {\n const type = result.message === 'ALREADY SUBSCRIBED' ? 'AlreadySubscribed' : 'InvalidMSISDN';\n const error = new Error(`${type}:\\n${result.message}`) as IError & { type: string; productUrl: string };\n error.type = type;\n error.productUrl = result.product_url ? result.product_url : '';\n\n console.error(error);\n throw error;\n } else {\n return { ...result, keyword: result.displayKeyword }; // based on discussion with Chanaka to avoid confusion in set up on bupper. Click2sms and mo will use display keyword\n }\n}\n\nexport async function moCheckSubscription(window: Window): Promise<string> {\n const { rockmanId } = window.pac_analytics.visitor;\n const check: () => Promise<ICheckSubscriptionResult> = () => checkSubscriptionByRockmanIdOnly({ window, rockmanId });\n\n const checkResult: ICheckSubscriptionResult = await loop(check, 60, (r) => r.success, 0);\n\n if (checkResult.success === true && checkResult.product_url && checkResult.product_url !== '') {\n window.location.href = checkResult.product_url;\n return checkResult.product_url;\n }\n const error = new Error(`${'SubscriptionFailed'}:\\n${checkResult.message}`) as IError & { type: string };\n error.type = 'SubscriptionFailed';\n throw error;\n}\n\n// export const formatSMSLink = (keywordAndShortcode: IKeywordShortcode) =>\n// !!window.pac_analytics.visitor['x-requested-with'] &&\n// window.pac_analytics.visitor['x-requested-with'] !== null &&\n// window.pac_analytics.visitor['x-requested-with'].indexOf('com.facebook') !== -1\n// ? `sms://${keywordAndShortcode.shortcode}?body=${keywordAndShortcode.keyword}`\n// : typeof navigator !== 'undefined' && (/iPhone/i.test(navigator.userAgent) || /Mac OS/i.test(navigator.userAgent))\n// ? `sms:${keywordAndShortcode.shortcode}&body=${keywordAndShortcode.keyword}`\n// : `sms:${keywordAndShortcode.shortcode}?body=${keywordAndShortcode.keyword}`;\n","import { createAsyncThunk, createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { IHash } from '../../common-types/IHash';\nimport * as RDS from '../../common-types/RemoteDataState';\nimport {\n MSISDNEntryErrorTypes,\n MSISDNEntryFailure,\n MSISDNEntryState,\n MSISDNEntrySuccess\n} from '../../sharedFlowTypes/MoTypes';\nimport { IMockFlowParams, RootState } from '../../sharedFlowTypes/StrategyTypes';\nimport { searchToObject } from '../../utilities/searchToObject';\nimport { storeMsisdn } from '../../utilities/storeMsisdn';\nimport { tracker } from '../../utilities/tracker';\nimport submitMSISDN from './main';\n\nexport const mockedMSISDNEntrySuccess: MoFlowState = {\n currentState: {\n type: 'MSISDNEntry',\n result: RDS.Success<MSISDNEntryFailure, MSISDNEntrySuccess>({\n keyword: 'TEST OK',\n shortcode: '777'\n })\n }\n};\n\nexport const mockedMSISDNEntryFailure: MoFlowState = {\n currentState: {\n type: 'MSISDNEntry',\n result: RDS.Failure<MSISDNEntryFailure, MSISDNEntrySuccess>({\n errorType: 'InvalidMSISDN',\n error: 'Invalid Mobile Number'\n })\n }\n};\nexport interface MoFlowState {\n currentState: {\n type: 'MSISDNEntry';\n result: RDS.RemoteDataState<any, any>; // Replace any with your specific error and data types\n };\n}\n\nconst defaultInitialState: MoFlowState = {\n currentState: {\n type: 'MSISDNEntry',\n result: RDS.NothingYet()\n }\n};\n\nconst setInitialState = (window: Window) => {\n const search = searchToObject(window) as IMockFlowParams<any>;\n if (search['mock-flow']) {\n switch (search['current-state']) {\n case 'msisdn-entry-failure-state':\n return mockedMSISDNEntryFailure;\n case 'msisdn-entry-success-state':\n return mockedMSISDNEntrySuccess;\n default:\n console.error('Mock Flow not supported');\n return defaultInitialState;\n }\n } else {\n return defaultInitialState;\n }\n};\n\nconst initialState = setInitialState(window);\n\ninterface SubmitMSISDNArgs {\n window: Window;\n msisdn: string;\n extraParams?: IHash;\n}\n/**\n * submitMSISDNAction\n * @returns {type: ' 'pinFlow/submitMSISDNAction', payload: {type: PossibleTypes, result: MSISDNEntryState}}\n \n * Calls trigger-message api that returns a short code and key word\n * Sets completed stated\n */\nexport const submitMSISDNAction = createAsyncThunk<\n MSISDNEntryState,\n SubmitMSISDNArgs,\n {\n rejectValue: MSISDNEntryFailure;\n }\n>('moFlow/submitMSISDNAction', async ({ window, msisdn, extraParams }, { getState, rejectWithValue }) => {\n const state: RootState = getState();\n if (!state?.strategy?.currentState?.data?.config) {\n return rejectWithValue({\n errorType: 'UnexpectedState'\n });\n }\n const { config } = state.strategy.currentState.data;\n\n try {\n // Start Trigger Message\n tracker.advancedInFlow('tallyman.v1-mo', 'msisdn-submitted', { msisdn });\n const keywordAndShortcode = await submitMSISDN(window, config, msisdn, extraParams);\n tracker.advancedInFlow('tallyman.v1-mo', 'msisdn-submission-success', { msisdn });\n // End Trigger Message\n\n // Start Store Msisdn\n // if storeMsisdn is true, encrypt msisdn and save it in cookie, localStorage, and zürch\n if (extraParams && extraParams.storeMsisdn && extraParams.storeMsisdn === 'true') {\n await storeMsisdn(msisdn)\n .then((data: any) => {\n if (data && data.data && data.data.success) {\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-stored-success');\n } else {\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-stored-failed');\n }\n })\n .catch((error) => {\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-stored-error', error);\n });\n }\n // End Store Msisdn\n\n return {\n type: 'MSISDNEntry',\n result: RDS.Success<MSISDNEntryFailure, MSISDNEntrySuccess>({ ...keywordAndShortcode })\n };\n } catch (ex) {\n console.warn(ex);\n let errorType: MSISDNEntryErrorTypes;\n switch (ex.type) {\n case 'AlreadySubscribed':\n errorType = 'AlreadySubscribed';\n break;\n case 'InvalidMSISDN':\n errorType = 'InvalidMSISDN';\n break;\n default:\n errorType = 'UnknownError';\n }\n\n tracker.recedeInFlow('tallyman.v1-mo', 'msisdn-submission-failure', {\n msisdn,\n errorType: errorType || 'UnknownError'\n });\n\n return rejectWithValue({\n errorType,\n productUrl: ex.productUrl\n });\n }\n});\n\nconst moFlowSlice = createSlice({\n name: 'moFlow',\n initialState,\n reducers: {\n backToStartAction(state) {\n tracker.recedeInFlow('tallyman.v1-mo', 'mo-state', 'requested to change phone number');\n\n // TODO GO BACK TO IDENTIFY BY MSISDN BASED ON STRATEGY\n state.currentState = { type: 'MSISDNEntry', result: RDS.NothingYet() };\n }\n },\n extraReducers: (builder) => {\n builder\n .addCase(submitMSISDNAction.pending, (state) => {\n state.currentState = { type: 'MSISDNEntry', result: RDS.Loading() };\n })\n .addCase(submitMSISDNAction.fulfilled, (state, action: PayloadAction<MSISDNEntryState>) => {\n state.currentState = action.payload;\n })\n .addCase(submitMSISDNAction.rejected, (state, action: PayloadAction<MSISDNEntryFailure>) => {\n state.currentState = {\n type: 'MSISDNEntry',\n result: RDS.Failure(action.payload)\n };\n });\n }\n});\n\n// Export reducers and actions\nexport const { reducer: moFlowReducer, actions: moFlowActions } = moFlowSlice;\nexport const { backToStartAction } = moFlowActions;\n\n// If you have selectors or thunks related to this slice, export them as named exports as well\nexport const selectMoFlowState = (state: any) => state.moFlow;\n"],"names":["useMoFlowState","useSelector","state","moFlow","currentState","moFlowMatch","_a","msisdnEntry","type","result","triggerMessage","window","slug","country","msisdn","device","offer","rockmanId","extraParamsQs","api_ajax_url","fetch","then","x","json","_b","_d","partnerAjaxResopnse","params","action","offerId","rockman_id","page","encodeURIComponent","_c","location","href","sam_g_token","reCaptchaToken","antifraud_id","language_code","languageCode","partner_form_action","form_action","queryString","Object","entries","filter","__read","map","key","value","concat","join","host","DEV_BASE_URL","url","submitMSISDN","maybeConfig","internationalMSISDN","extraParams","config","pac_analytics","visitor","submitMSISDNWithConfig","search","substr","keys","k","match","sent","success","message","error","Error","productUrl","product_url","console","__assign","keyword","displayKeyword","mockedMSISDNEntrySuccess","RDS.Success","shortcode","mockedMSISDNEntryFailure","RDS.Failure","errorType","defaultInitialState","RDS.NothingYet","initialState","searchToObject","setInitialState","submitMSISDNAction","createAsyncThunk","getState","rejectWithValue","_e","strategy","data","tracker","advancedInFlow","keywordAndShortcode","_f","storeMsisdn","customEvent","catch","warn","ex_1","recedeInFlow","moFlowSlice","createSlice","name","reducers","backToStartAction","extraReducers","builder","addCase","pending","RDS.Loading","fulfilled","payload","rejected","moFlowReducer","reducer","actions"],"mappings":"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"}
package/dist/pinFlow.js CHANGED
@@ -1,2 +1,2 @@
1
- import{__awaiter as e,__generator as t,__read as r,__assign as n}from"tslib";import{createAsyncThunk as a,createSlice as i}from"@reduxjs/toolkit";import{N as o,S as s,L as c,F as u}from"./RemoteDataState-lcf8PfJd.js";import{c as d,P as l}from"./strategySlice-C7LOOrGS.js";import{searchToObject as p}from"./searchToObject.js";import{s as v}from"./storeMsisdn-Cjq8_qYH.js";import{t as f}from"./tracker-DaaILhEr.js";import{b as m}from"./bupperizeCountry-CEtt0MKz.js";import{l as y,r as S,a as w}from"./helpers-xPhGBX-B.js";import{l as g}from"./loadScriptInnerHtml-BzQm-AFb.js";import"./getConfig.js";import"./tryGetIPRangeName-QW-9NgzE.js";import"pacman-client";import"uuid";var I=function(e){return e((function(e){return e.pinFlow.currentState}))};function h(e){var t=e.msisdnEntry,r=e.pinEntry;return function(e){switch(e.type){case"MSISDNEntry":return t(e.result);case"PINEntry":return r(e.result,e.data);default:throw new Error("Invalid State")}}}var b=function(e){return"be"===e?"undefined"!=typeof window&&!0===window.shouldBlock?"&is-clean-traffic=false":"&is-clean-traffic=true":""},_=function(n){var a=n.window,i=n.country,o=n.slug,s=n.device,c=n.offer,u=n.msisdn,d=n.rockmanId,l=n.extraParams,p=n.search,v=n.uniqid,f=n.evinaTid;return e(void 0,void 0,void 0,(function(){var e,n,m,y,S,w,g;return t(this,(function(t){return e=b(i),n="&".concat(Object.keys(l).map((function(e){return l[e]?"".concat(e,"=").concat(l[e]):""})).filter(Boolean).join("&")),m={action:"trigger-pin",country:i,slug:o,device:s,offerId:c,msisdn:u,rockman_id:d,sam_evina_tid:f,page:encodeURIComponent(null===(g=null==a?void 0:a.location)||void 0===g?void 0:g.href),language_code:a.languageCode||"",antifraud_id:a.antifraud_id||"",partner_transaction_id:a.partner_transaction_id||"",partner_timestamp:a.partner_timestamp||"",partner_cid:a.partner_cid||"",uniqid:v||""},y=Object.entries(m).filter((function(e){var t=r(e,2);return t[0],t[1]})).map((function(e){var t=r(e,2),n=t[0],a=t[1];return"".concat(n,"=").concat(a)})).join("&"),S=a.DEV_BASE_URL||"",w="".concat(S,"/tallyman/v1/?").concat(y).concat(e).concat(n).concat(p?"&".concat(p):""),[2,fetch(w).then((function(e){return e.json()}))]}))}))},E=function(n){var a=n.window,i=n.country,o=n.slug,s=n.device,c=n.offer,u=n.rockmanId,d=n.pin,l=n.extraParams,p=n.uniqid,v=n.evinaTid;return e(void 0,void 0,void 0,(function(){var e,n,f,y,S,w,g;return t(this,(function(t){return e=b(i),n="&".concat(Object.keys(l).map((function(e){return"".concat(e,"=").concat(l[e])})).join("&")),f={action:"verify-pin",country:m(i),slug:o,device:s,offerId:c,rockman_id:u,pin:d,page:encodeURIComponent(null===(g=null==a?void 0:a.location)||void 0===g?void 0:g.href),language_code:a.languageCode||"",antifraud_id:a.antifraud_id||"",ClickID:a.antifraud_click_id||"",partner_cid:a.partner_cid||"",sam_evina_tid:v,uniqid:p},y=Object.entries(f).filter((function(e){var t=r(e,2);return t[0],t[1]})).map((function(e){var t=r(e,2),n=t[0],a=t[1];return"".concat(n,"=").concat(a)})).join("&"),S=a.DEV_BASE_URL||"",w="".concat(S,"/tallyman/v1/?").concat(y).concat(e).concat(n),[2,fetch(w).then((function(e){return e.json()}))]}))}))},k=function(r){var a=r.window,i=r.country,o=r.slug,s=r.device,c=r.offer,u=r.rockmanId,d=r.operator,l=r.uniqid;return e(void 0,void 0,void 0,(function(){var e,r,p,v,f;return t(this,(function(t){return e=a.location.href,r=a.pac_analytics.visitor.ip,p=new URLSearchParams(n(n({action:"mcp-shield",country:i,slug:o,device:s,offerId:c.toString(),rockman_id:u,client_lpu:e},d&&{operator:d}),l&&{uniqid:l})),r&&p.append("client_ip",r),v=a.DEV_BASE_URL||"",f="".concat(v,"/tallyman/v1/?").concat(p.toString()),[2,fetch(f).then((function(e){return e.json()}))]}))}))};function N(r,a,i,o){return e(this,void 0,void 0,(function(){var e;return t(this,(function(t){return!0===(e=n({offer:r.pac_analytics.visitor.offer},a||{})).automaticallySubmitAllOperators&&e.operators&&e.operators.length>0?[2,D(r,e,i,e.operators,o)]:[2,P(r,e,i,o)]}))}))}var U="";function P(r,a,i,o){return e(this,void 0,void 0,(function(){var e,s,c,u,d,l,v,f,m,y,S,w,I,h,b,E,N,P;return t(this,(function(t){switch(t.label){case 0:if(!i)throw(e=new Error("Error in submitMSISDN() trigger-pin action")).type="InvalidMSISDN",e;return s=o||{},c=!1,"true"===(null==(u=p(r))?void 0:u.success)&&"1"===u["msisdn-alias"]&&(s["skip-validation"]="1"),"1"===s["skip-validation"]&&(c=!0),d=c?i:i.match(/\d+/gi).join(""),l=r.pac_analytics.visitor.rockmanId,v=a.slug,f=a.country,m=a.device,y=a.offer,S=-1===r.location.search.indexOf("redirect-back=1")&&r.location.search.substr(1)||"",w=U&&""!==U?"&mcpUniqid=".concat(U):"",I=void 0!==r&&r.tid?r.tid:"",[4,_({window:r,country:f,slug:v,device:m,offer:y,msisdn:d,rockmanId:l,extraParams:s,search:S,uniqid:w,evinaTid:I})];case 1:if(!1!==(h=t.sent()).success)return[3,2];switch((b=new Error("Error in submitMSISDN() trigger-pin action:\n".concat(h.message))).message=h.message,!0){case h.message.includes("ALREADY SUBSCRIBED"):b.type="AlreadySubscribed";break;case h.message.includes("invalid"):b.type="InvalidMSISDN";break;default:b.type=null}throw b.productUrl=h.product_url?h.product_url:"",console.error(b),b;case 2:if(r.operator=h.operator,E={kw:{kw_viva:"kw_viva"},k2:{k2_viva:"k2_viva"},bh:{bh_viva:"bh_viva"}},!(f&&h.operator&&(E[f.toLowerCase()]&&E[f.toLowerCase()][h.operator.toLowerCase()]||"iq"===f.toLowerCase()))||r.isCallBlockApi||r.Empello)return[3,6];t.label=3;case 3:return t.trys.push([3,5,,6]),[4,k({window:r,country:f,slug:v,device:m,offer:y,rockmanId:l,operator:h.operator,uniqid:w})];case 4:return!1===(N=t.sent()).success?console.warn(N.message):(g(N.source),U=N.uniqid),[3,6];case 5:return P=t.sent(),console.warn(P),[3,6];case 6:return h.javascript&&g(h.javascript),[2,n({type:"SingleMSISDNSubmissionResult",pin:h.pin,uniqidResult:U,operator:h.operator,redirectUrl:null==h?void 0:h.redirect_to_url},(null==h?void 0:h.userType)?{userType:null==h?void 0:h.userType}:{})]}}))}))}function D(r,a,i,o,s){return e(this,void 0,void 0,(function(){var c,u,d=this;return t(this,(function(l){switch(l.label){case 0:return[4,Promise.all(o.map((function(o){return e(d,void 0,void 0,(function(){var e,c;return t(this,(function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,P(r,a,i,n(n({},s),{operator:o}))];case 1:return e=t.sent(),[2,S(n(n({},e),{operator:o}))];case 2:return c=t.sent(),[2,y(c)];case 3:return[2]}}))}))})))];case 1:if(c=l.sent(),u=c.find((function(e){var t;return"left"===e.type&&"AlreadySubscribed"===(null===(t=e.value)||void 0===t?void 0:t.type)})),c.every((function(e){return"left"===e.type})))throw c[0].value;if(u)throw u.value;return[2,{type:"MultiOperatorMSISDNSubmissionResult"}]}}))}))}function M(n,a,i,o){return e(this,void 0,void 0,(function(){var s,c,u,d,l,v,f,y,S,g,I,h,b,_,k,N;return t(this,(function(P){switch(P.label){case 0:if(n.hostCountry&&n.hostSlug&&(i.country=n.hostCountry,i.slug=n.hostSlug),s=i.slug,c=i.country,u=i.device,d=n.pac_analytics.visitor.offer,l=o||{},"true"===(null==(v=p(n))?void 0:v.success)&&"1"===v["msisdn-alias"]&&(l["skip-validation"]="1"),f=n.pac_analytics.visitor.rockmanId,!a)throw(y=new Error("Error in submitMSISDN() verify-pin action:\n Pin Cannot Be Empty")).type="InvalidPIN",y;return S=""!==U?"&mcpUniqid=".concat(U):"",g=void 0!==n&&n.tid?n.tid:"",[4,E({window:n,country:c,slug:s,device:u,offer:d,rockmanId:f,pin:a,extraParams:l,uniqid:S,evinaTid:g})];case 1:if(!1!==(I=P.sent()).success)return[3,2];throw h={"pin does not match":"InvalidPIN","mcp blocked":"SessionBlocked",expired_pin:"ExpiredPIN",insufficient_balance:"InsufficientBalance"}[I.message],(k=new Error("Error in submitMSISDN() verify-pin action:\n".concat(h))).type=h||"InvalidPIN",k.message=I.message,console.error(k),k;case 2:return!0!==I.async?[3,4]:I.product_url&&""!==I.product_url&&"es"===(null==c?void 0:c.toLowerCase())?[2,{gatewayRedirectUrl:I.product_url}]:(b=function(){return function(n){var a=n.window,i=n.country,o=n.slug,s=n.device,c=n.offer,u=n.rockmanId;return e(void 0,void 0,void 0,(function(){var e,n,d,l;return t(this,(function(t){return e={action:"check-subscription",country:m(i),slug:o,device:s,offerId:c,rockman_id:u},n=Object.entries(e).filter((function(e){var t=r(e,2);return t[0],null!=t[1]})).map((function(e){var t=r(e,2),n=t[0],a=t[1];return"".concat(n,"=").concat(encodeURIComponent(a))})).join("&"),d=a.DEV_BASE_URL||"",l="".concat(d,"/tallyman/v1/?").concat(n),[2,fetch(l).then((function(e){return e.json()}))]}))}))}({window:n,country:c,slug:s,device:u,offer:d,rockmanId:f,extraParams:o})},[4,w(b,100,(function(e){return e.success||"invalid_pin"===e.message}),0)]);case 3:if(!0===(_=P.sent()).success)return N="ALREADY SUBSCRIBED"===I.message,[2,{productUrl:_.product_url||null,isAlreadySubscribed:N}];throw(k=new Error("Error in submitMSISDN() verify-pin action:\n".concat(_.message))).type="InvalidPIN",k.message=_.message,k;case 4:return N="ALREADY SUBSCRIBED"===I.message,[2,{productUrl:I.product_url||null,isAlreadySubscribed:N}]}}))}))}var j={currentState:{type:"PINEntry",result:o(),data:{actualPIN:"",msisdn:"",operator:"",pinMaxLength:4}}},A={currentState:{type:"PINEntry",result:s({finalUrl:"/product"}),data:{actualPIN:"",msisdn:"",operator:"",pinMaxLength:4}}},C={currentState:{type:"MSISDNEntry",result:u({errorType:"InvalidMSISDN",error:"Invalid Mobile Number"})}},R={currentState:{type:"MSISDNEntry",result:o()}},F=function(e){var t=p(e),r=new Event("onPinPage");if(!t["mock-flow"])return R;switch(t["current-state"]){case"msisdn-failure-state":return C;case"pin-state":return null==e||e.dispatchEvent(r),j;case"completed-state":return A;default:return console.error("Mock Flow not supported"),R}}(window),T=a("pinFlow/submitMSISDNAction",(function(r,a){var i=r.window,s=r.msisdn,c=r.extraParams,u=a.getState,p=a.dispatch,m=a.rejectWithValue;return e(void 0,void 0,void 0,(function(){var e,r,a,y,S,w,g,I,h,b,_,E,k,U,P;return t(this,(function(t){switch(t.label){case 0:if(e=u(),!(null===(U=null===(k=null===(E=null==e?void 0:e.strategy)||void 0===E?void 0:E.currentState)||void 0===k?void 0:k.data)||void 0===U?void 0:U.config))return[2,m({errorType:"UnexpectedState"})];r=e.strategy.currentState.data,a=r.config,y=r.isHeaderEnrichmentSuccess,S=null===(P=e.pinFlow)||void 0===P?void 0:P.currentState,t.label=1;case 1:return t.trys.push([1,5,,6]),"ps"===(null==a?void 0:a.country.toLowerCase())&&(null==a?void 0:a.slug.includes("shemaroo"))&&"+970"===L(null==a?void 0:a.country,s)&&(s=s.replace("970","972")),f.advancedInFlow("tallyman.v1-pin","msisdn-submitted",{msisdn:s}),[4,N(i,a,s)];case 2:return w=t.sent(),f.advancedInFlow("tallyman.v1-pin","msisdn-submission-success",{msisdn:s}),"SingleMSISDNSubmissionResult"===w.type&&w.redirectUrl&&(f.advancedInFlow("tallyman.v1-pin","msisdn-submission-success",{msisdn:s}),f.customEvent("Flow","advance-auto","msisdn-redirect",{redirectUrl:w.redirectUrl}),i.location.href=w.redirectUrl),c&&c.storeMsisdn&&"true"===c.storeMsisdn?[4,v(s).then((function(e){e&&e.data&&e.data.success?f.customEvent("Flow","advance-auto","msisdn-stored-success"):f.customEvent("Flow","advance-auto","msisdn-stored-failed")})).catch((function(e){f.customEvent("Flow","advance-auto","msisdn-stored-error",e)}))]:[3,4];case 3:t.sent(),t.label=4;case 4:return g="SingleMSISDNSubmissionResult"===w.type?w.operator:"",I={SA_MOBILY:6,SA_STC:4,SA_ZAIN:4},h=new Event("onPinPage"),null==i||i.dispatchEvent(h),[2,n(n({},S),{type:"PINEntry",result:o(),data:n({actualPIN:"SingleMSISDNSubmissionResult"===w.type?w.pin:null,msisdn:s,operator:g,pinMaxLength:""!==g&&I[g]?I[g]:null,isHeaderEnrichmentSuccess:y},"SingleMSISDNSubmissionResult"===w.type&&(null==w?void 0:w.userType)?{userType:w.userType}:{})})];case 5:switch(b=t.sent(),console.warn(b),_=void 0,b.type){case"AlreadySubscribed":_="AlreadySubscribed";break;case"InvalidMSISDN":_="InvalidMSISDN";break;default:_="UnknownError"}return f.recedeInFlow("tallyman.v1-pin","msisdn-submission-failure",{msisdn:s,errorType:_,error:b.toString(),message:b.message,productUrl:b.productUrl}),y&&p(d({type:l.PIN,data:{isHeaderEnrichmentSuccess:y}})),[2,m({errorType:_,error:b.toString(),message:b.message,productUrl:b.productUrl})];case 6:return[2]}}))}))})),B=a("pinFlow/submitPinAction",(function(r,a){var i=r.window,o=r.msisdn,c=r.pin,u=r.extraParams,d=a.getState,l=a.rejectWithValue;return e(void 0,void 0,void 0,(function(){var e,r,a,p,m,y,S,w,g,I;return t(this,(function(t){switch(t.label){case 0:if(e=d(),!(null===(g=null===(w=null===(S=null==e?void 0:e.strategy)||void 0===S?void 0:S.currentState)||void 0===w?void 0:w.data)||void 0===g?void 0:g.config))return[2,l({errorType:"UnexpectedState"})];r=e.strategy.currentState.data.config,a=null===(I=e.pinFlow)||void 0===I?void 0:I.currentState,t.label=1;case 1:return t.trys.push([1,5,,6]),f.advancedInFlow("tallyman.v1-pin","pin-submitted",{msisdn:o,pin:c}),[4,M(i,c,r,u)];case 2:return p=t.sent(),f.advancedInFlow("tallyman.v1-pin","pin-submission-success",{msisdn:o,pin:c,finalUrl:p.productUrl}),p.gatewayRedirectUrl&&""!==p.gatewayRedirectUrl&&(f.advancedInFlow("tallyman.v1-pin","gateway-redirect",{msisdn:o,pin:c,gatewayRedirectUrl:p.gatewayRedirectUrl}),i.location.href=p.gatewayRedirectUrl),u&&u.storeMsisdn&&"true"===u.storeMsisdn?[4,v(o).then((function(e){e&&e.data&&e.data.success?f.customEvent("Flow","advance-auto","msisdn-stored-success"):f.customEvent("Flow","advance-auto","msisdn-stored-failed")})).catch((function(e){f.customEvent("Flow","advance-auto","msisdn-stored-error",e)}))]:[3,4];case 3:t.sent(),t.label=4;case 4:return[2,n(n({},a),{type:"PINEntry",result:s({finalUrl:p.productUrl,isAlreadySubscribed:p.isAlreadySubscribed||!1})})];case 5:switch(m=t.sent(),console.warn(m),y=void 0,m.type){case"AlreadySubscribed":y="AlreadySubscribed";break;case"InvalidPIN":y="InvalidPIN";break;case"SessionBlocked":y="SessionBlocked";break;case"ExpiredPIN":y="ExpiredPIN";break;case"InsufficientBalance":y="InsufficientBalance";break;default:y="UnknownError"}return f.recedeInFlow("tallyman.v1-pin","pin-submission-failure",{msisdn:o,pin:c,errorType:y,error:m.toString(),message:m.message,productUrl:m.productUrl}),setTimeout((function(){m.productUrl&&(i.location.href=m.productUrl)}),0),[2,l({errorType:y,error:m.toString(),message:m.message,productUrl:m.productUrl})];case 6:return[2]}}))}))})),x={PS:"970"},L=function(e,t){if(!e||!t)return"";var r=e.toUpperCase(),n=x[r];return n?"+".concat(n):(console.error("Country code not found for",e),"")},q=i({name:"pinFlow",initialState:F,reducers:{backToStartAction:function(e){f.recedeInFlow("tallyman.v1-pin","pin-state","requested to change phone number"),e.currentState={type:"MSISDNEntry",result:o()}}},extraReducers:function(e){e.addCase(T.pending,(function(e){e.currentState={type:"MSISDNEntry",result:c(),data:e.currentState.data}})).addCase(T.fulfilled,(function(e,t){e.currentState=t.payload})).addCase(T.rejected,(function(e,t){e.currentState={type:"MSISDNEntry",result:u(t.payload),data:e.currentState.data}})).addCase(B.pending,(function(e){e.currentState={type:"PINEntry",result:c(),data:e.currentState.data}})).addCase(B.fulfilled,(function(e,t){e.currentState=t.payload})).addCase(B.rejected,(function(e,t){e.currentState={type:"PINEntry",result:u(t.payload),data:e.currentState.data}}))}}),O=q.reducer,V=q.actions.backToStartAction;export{V as backToStartAction,h as pinFlowMatch,O as pinFlowReducer,T as submitMSISDNAction,B as submitPinAction,I as usePinFlowState};
1
+ import{__awaiter as e,__generator as t,__read as r,__assign as n}from"tslib";import{createAsyncThunk as a,createSlice as i}from"@reduxjs/toolkit";import{N as o,S as s,L as c,F as u}from"./RemoteDataState-lcf8PfJd.js";import{c as d,P as l}from"./strategySlice-BGKBSWuf.js";import{searchToObject as p}from"./searchToObject.js";import{s as v}from"./storeMsisdn-Cjq8_qYH.js";import{t as f}from"./tracker-DaaILhEr.js";import{b as m}from"./bupperizeCountry-CEtt0MKz.js";import{l as y,r as S,a as w}from"./helpers-xPhGBX-B.js";import{l as g}from"./loadScriptInnerHtml-BzQm-AFb.js";import"./getConfig.js";import"./tryGetIPRangeName-QW-9NgzE.js";import"pacman-client";import"uuid";var I=function(e){return e((function(e){return e.pinFlow.currentState}))};function h(e){var t=e.msisdnEntry,r=e.pinEntry;return function(e){switch(e.type){case"MSISDNEntry":return t(e.result);case"PINEntry":return r(e.result,e.data);default:throw new Error("Invalid State")}}}var b=function(e){return"be"===e?"undefined"!=typeof window&&!0===window.shouldBlock?"&is-clean-traffic=false":"&is-clean-traffic=true":""},_=function(n){var a=n.window,i=n.country,o=n.slug,s=n.device,c=n.offer,u=n.msisdn,d=n.rockmanId,l=n.extraParams,p=n.search,v=n.uniqid,f=n.evinaTid;return e(void 0,void 0,void 0,(function(){var e,n,m,y,S,w,g;return t(this,(function(t){return e=b(i),n="&".concat(Object.keys(l).map((function(e){return l[e]?"".concat(e,"=").concat(l[e]):""})).filter(Boolean).join("&")),m={action:"trigger-pin",country:i,slug:o,device:s,offerId:c,msisdn:u,rockman_id:d,sam_evina_tid:f,page:encodeURIComponent(null===(g=null==a?void 0:a.location)||void 0===g?void 0:g.href),language_code:a.languageCode||"",antifraud_id:a.antifraud_id||"",partner_transaction_id:a.partner_transaction_id||"",partner_timestamp:a.partner_timestamp||"",partner_cid:a.partner_cid||"",uniqid:v||""},y=Object.entries(m).filter((function(e){var t=r(e,2);return t[0],t[1]})).map((function(e){var t=r(e,2),n=t[0],a=t[1];return"".concat(n,"=").concat(a)})).join("&"),S=a.DEV_BASE_URL||"",w="".concat(S,"/tallyman/v1/?").concat(y).concat(e).concat(n).concat(p?"&".concat(p):""),[2,fetch(w).then((function(e){return e.json()}))]}))}))},E=function(n){var a=n.window,i=n.country,o=n.slug,s=n.device,c=n.offer,u=n.rockmanId,d=n.pin,l=n.extraParams,p=n.uniqid,v=n.evinaTid;return e(void 0,void 0,void 0,(function(){var e,n,f,y,S,w,g;return t(this,(function(t){return e=b(i),n="&".concat(Object.keys(l).map((function(e){return"".concat(e,"=").concat(l[e])})).join("&")),f={action:"verify-pin",country:m(i),slug:o,device:s,offerId:c,rockman_id:u,pin:d,page:encodeURIComponent(null===(g=null==a?void 0:a.location)||void 0===g?void 0:g.href),language_code:a.languageCode||"",antifraud_id:a.antifraud_id||"",ClickID:a.antifraud_click_id||"",partner_cid:a.partner_cid||"",sam_evina_tid:v,uniqid:p},y=Object.entries(f).filter((function(e){var t=r(e,2);return t[0],t[1]})).map((function(e){var t=r(e,2),n=t[0],a=t[1];return"".concat(n,"=").concat(a)})).join("&"),S=a.DEV_BASE_URL||"",w="".concat(S,"/tallyman/v1/?").concat(y).concat(e).concat(n),[2,fetch(w).then((function(e){return e.json()}))]}))}))},k=function(r){var a=r.window,i=r.country,o=r.slug,s=r.device,c=r.offer,u=r.rockmanId,d=r.operator,l=r.uniqid;return e(void 0,void 0,void 0,(function(){var e,r,p,v,f;return t(this,(function(t){return e=a.location.href,r=a.pac_analytics.visitor.ip,p=new URLSearchParams(n(n({action:"mcp-shield",country:i,slug:o,device:s,offerId:c.toString(),rockman_id:u,client_lpu:e},d&&{operator:d}),l&&{uniqid:l})),r&&p.append("client_ip",r),v=a.DEV_BASE_URL||"",f="".concat(v,"/tallyman/v1/?").concat(p.toString()),[2,fetch(f).then((function(e){return e.json()}))]}))}))};function N(r,a,i,o){return e(this,void 0,void 0,(function(){var e;return t(this,(function(t){return!0===(e=n({offer:r.pac_analytics.visitor.offer},a||{})).automaticallySubmitAllOperators&&e.operators&&e.operators.length>0?[2,D(r,e,i,e.operators,o)]:[2,P(r,e,i,o)]}))}))}var U="";function P(r,a,i,o){return e(this,void 0,void 0,(function(){var e,s,c,u,d,l,v,f,m,y,S,w,I,h,b,E,N,P;return t(this,(function(t){switch(t.label){case 0:if(!i)throw(e=new Error("Error in submitMSISDN() trigger-pin action")).type="InvalidMSISDN",e;return s=o||{},c=!1,"true"===(null==(u=p(r))?void 0:u.success)&&"1"===u["msisdn-alias"]&&(s["skip-validation"]="1"),"1"===s["skip-validation"]&&(c=!0),d=c?i:i.match(/\d+/gi).join(""),l=r.pac_analytics.visitor.rockmanId,v=a.slug,f=a.country,m=a.device,y=a.offer,S=-1===r.location.search.indexOf("redirect-back=1")&&r.location.search.substr(1)||"",w=U&&""!==U?"&mcpUniqid=".concat(U):"",I=void 0!==r&&r.tid?r.tid:"",[4,_({window:r,country:f,slug:v,device:m,offer:y,msisdn:d,rockmanId:l,extraParams:s,search:S,uniqid:w,evinaTid:I})];case 1:if(!1!==(h=t.sent()).success)return[3,2];switch((b=new Error("Error in submitMSISDN() trigger-pin action:\n".concat(h.message))).message=h.message,!0){case h.message.includes("ALREADY SUBSCRIBED"):b.type="AlreadySubscribed";break;case h.message.includes("invalid"):b.type="InvalidMSISDN";break;default:b.type=null}throw b.productUrl=h.product_url?h.product_url:"",console.error(b),b;case 2:if(r.operator=h.operator,E={kw:{kw_viva:"kw_viva"},k2:{k2_viva:"k2_viva"},bh:{bh_viva:"bh_viva"}},!(f&&h.operator&&(E[f.toLowerCase()]&&E[f.toLowerCase()][h.operator.toLowerCase()]||"iq"===f.toLowerCase()))||r.isCallBlockApi||r.Empello)return[3,6];t.label=3;case 3:return t.trys.push([3,5,,6]),[4,k({window:r,country:f,slug:v,device:m,offer:y,rockmanId:l,operator:h.operator,uniqid:w})];case 4:return!1===(N=t.sent()).success?console.warn(N.message):(g(N.source),U=N.uniqid),[3,6];case 5:return P=t.sent(),console.warn(P),[3,6];case 6:return h.javascript&&g(h.javascript),[2,n({type:"SingleMSISDNSubmissionResult",pin:h.pin,uniqidResult:U,operator:h.operator,redirectUrl:null==h?void 0:h.redirect_to_url},(null==h?void 0:h.userType)?{userType:null==h?void 0:h.userType}:{})]}}))}))}function D(r,a,i,o,s){return e(this,void 0,void 0,(function(){var c,u,d=this;return t(this,(function(l){switch(l.label){case 0:return[4,Promise.all(o.map((function(o){return e(d,void 0,void 0,(function(){var e,c;return t(this,(function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,P(r,a,i,n(n({},s),{operator:o}))];case 1:return e=t.sent(),[2,S(n(n({},e),{operator:o}))];case 2:return c=t.sent(),[2,y(c)];case 3:return[2]}}))}))})))];case 1:if(c=l.sent(),u=c.find((function(e){var t;return"left"===e.type&&"AlreadySubscribed"===(null===(t=e.value)||void 0===t?void 0:t.type)})),c.every((function(e){return"left"===e.type})))throw c[0].value;if(u)throw u.value;return[2,{type:"MultiOperatorMSISDNSubmissionResult"}]}}))}))}function M(n,a,i,o){return e(this,void 0,void 0,(function(){var s,c,u,d,l,v,f,y,S,g,I,h,b,_,k,N;return t(this,(function(P){switch(P.label){case 0:if(n.hostCountry&&n.hostSlug&&(i.country=n.hostCountry,i.slug=n.hostSlug),s=i.slug,c=i.country,u=i.device,d=n.pac_analytics.visitor.offer,l=o||{},"true"===(null==(v=p(n))?void 0:v.success)&&"1"===v["msisdn-alias"]&&(l["skip-validation"]="1"),f=n.pac_analytics.visitor.rockmanId,!a)throw(y=new Error("Error in submitMSISDN() verify-pin action:\n Pin Cannot Be Empty")).type="InvalidPIN",y;return S=""!==U?"&mcpUniqid=".concat(U):"",g=void 0!==n&&n.tid?n.tid:"",[4,E({window:n,country:c,slug:s,device:u,offer:d,rockmanId:f,pin:a,extraParams:l,uniqid:S,evinaTid:g})];case 1:if(!1!==(I=P.sent()).success)return[3,2];throw h={"pin does not match":"InvalidPIN","mcp blocked":"SessionBlocked",expired_pin:"ExpiredPIN",insufficient_balance:"InsufficientBalance"}[I.message],(k=new Error("Error in submitMSISDN() verify-pin action:\n".concat(h))).type=h||"InvalidPIN",k.message=I.message,console.error(k),k;case 2:return!0!==I.async?[3,4]:I.product_url&&""!==I.product_url&&"es"===(null==c?void 0:c.toLowerCase())?[2,{gatewayRedirectUrl:I.product_url}]:(b=function(){return function(n){var a=n.window,i=n.country,o=n.slug,s=n.device,c=n.offer,u=n.rockmanId;return e(void 0,void 0,void 0,(function(){var e,n,d,l;return t(this,(function(t){return e={action:"check-subscription",country:m(i),slug:o,device:s,offerId:c,rockman_id:u},n=Object.entries(e).filter((function(e){var t=r(e,2);return t[0],null!=t[1]})).map((function(e){var t=r(e,2),n=t[0],a=t[1];return"".concat(n,"=").concat(encodeURIComponent(a))})).join("&"),d=a.DEV_BASE_URL||"",l="".concat(d,"/tallyman/v1/?").concat(n),[2,fetch(l).then((function(e){return e.json()}))]}))}))}({window:n,country:c,slug:s,device:u,offer:d,rockmanId:f,extraParams:o})},[4,w(b,100,(function(e){return e.success||"invalid_pin"===e.message}),0)]);case 3:if(!0===(_=P.sent()).success)return N="ALREADY SUBSCRIBED"===I.message,[2,{productUrl:_.product_url||null,isAlreadySubscribed:N}];throw(k=new Error("Error in submitMSISDN() verify-pin action:\n".concat(_.message))).type="InvalidPIN",k.message=_.message,k;case 4:return N="ALREADY SUBSCRIBED"===I.message,[2,{productUrl:I.product_url||null,isAlreadySubscribed:N}]}}))}))}var j={currentState:{type:"PINEntry",result:o(),data:{actualPIN:"",msisdn:"",operator:"",pinMaxLength:4}}},A={currentState:{type:"PINEntry",result:s({finalUrl:"/product"}),data:{actualPIN:"",msisdn:"",operator:"",pinMaxLength:4}}},C={currentState:{type:"MSISDNEntry",result:u({errorType:"InvalidMSISDN",error:"Invalid Mobile Number"})}},R={currentState:{type:"MSISDNEntry",result:o()}},F=function(e){var t=p(e),r=new Event("onPinPage");if(!t["mock-flow"])return R;switch(t["current-state"]){case"msisdn-failure-state":return C;case"pin-state":return null==e||e.dispatchEvent(r),j;case"completed-state":return A;default:return console.error("Mock Flow not supported"),R}}(window),T=a("pinFlow/submitMSISDNAction",(function(r,a){var i=r.window,s=r.msisdn,c=r.extraParams,u=a.getState,p=a.dispatch,m=a.rejectWithValue;return e(void 0,void 0,void 0,(function(){var e,r,a,y,S,w,g,I,h,b,_,E,k,U,P;return t(this,(function(t){switch(t.label){case 0:if(e=u(),!(null===(U=null===(k=null===(E=null==e?void 0:e.strategy)||void 0===E?void 0:E.currentState)||void 0===k?void 0:k.data)||void 0===U?void 0:U.config))return[2,m({errorType:"UnexpectedState"})];r=e.strategy.currentState.data,a=r.config,y=r.isHeaderEnrichmentSuccess,S=null===(P=e.pinFlow)||void 0===P?void 0:P.currentState,t.label=1;case 1:return t.trys.push([1,5,,6]),"ps"===(null==a?void 0:a.country.toLowerCase())&&(null==a?void 0:a.slug.includes("shemaroo"))&&"+970"===L(null==a?void 0:a.country,s)&&(s=s.replace("970","972")),f.advancedInFlow("tallyman.v1-pin","msisdn-submitted",{msisdn:s}),[4,N(i,a,s)];case 2:return w=t.sent(),f.advancedInFlow("tallyman.v1-pin","msisdn-submission-success",{msisdn:s}),"SingleMSISDNSubmissionResult"===w.type&&w.redirectUrl&&(f.advancedInFlow("tallyman.v1-pin","msisdn-submission-success",{msisdn:s}),f.customEvent("Flow","advance-auto","msisdn-redirect",{redirectUrl:w.redirectUrl}),i.location.href=w.redirectUrl),c&&c.storeMsisdn&&"true"===c.storeMsisdn?[4,v(s).then((function(e){e&&e.data&&e.data.success?f.customEvent("Flow","advance-auto","msisdn-stored-success"):f.customEvent("Flow","advance-auto","msisdn-stored-failed")})).catch((function(e){f.customEvent("Flow","advance-auto","msisdn-stored-error",e)}))]:[3,4];case 3:t.sent(),t.label=4;case 4:return g="SingleMSISDNSubmissionResult"===w.type?w.operator:"",I={SA_MOBILY:6,SA_STC:4,SA_ZAIN:4},h=new Event("onPinPage"),null==i||i.dispatchEvent(h),[2,n(n({},S),{type:"PINEntry",result:o(),data:n({actualPIN:"SingleMSISDNSubmissionResult"===w.type?w.pin:null,msisdn:s,operator:g,pinMaxLength:""!==g&&I[g]?I[g]:null,isHeaderEnrichmentSuccess:y},"SingleMSISDNSubmissionResult"===w.type&&(null==w?void 0:w.userType)?{userType:w.userType}:{})})];case 5:switch(b=t.sent(),console.warn(b),_=void 0,b.type){case"AlreadySubscribed":_="AlreadySubscribed";break;case"InvalidMSISDN":_="InvalidMSISDN";break;default:_="UnknownError"}return f.recedeInFlow("tallyman.v1-pin","msisdn-submission-failure",{msisdn:s,errorType:_,error:b.toString(),message:b.message,productUrl:b.productUrl}),y&&p(d({type:l.PIN,data:{isHeaderEnrichmentSuccess:y}})),[2,m({errorType:_,error:b.toString(),message:b.message,productUrl:b.productUrl})];case 6:return[2]}}))}))})),B=a("pinFlow/submitPinAction",(function(r,a){var i=r.window,o=r.msisdn,c=r.pin,u=r.extraParams,d=a.getState,l=a.rejectWithValue;return e(void 0,void 0,void 0,(function(){var e,r,a,p,m,y,S,w,g,I;return t(this,(function(t){switch(t.label){case 0:if(e=d(),!(null===(g=null===(w=null===(S=null==e?void 0:e.strategy)||void 0===S?void 0:S.currentState)||void 0===w?void 0:w.data)||void 0===g?void 0:g.config))return[2,l({errorType:"UnexpectedState"})];r=e.strategy.currentState.data.config,a=null===(I=e.pinFlow)||void 0===I?void 0:I.currentState,t.label=1;case 1:return t.trys.push([1,5,,6]),f.advancedInFlow("tallyman.v1-pin","pin-submitted",{msisdn:o,pin:c}),[4,M(i,c,r,u)];case 2:return p=t.sent(),f.advancedInFlow("tallyman.v1-pin","pin-submission-success",{msisdn:o,pin:c,finalUrl:p.productUrl}),p.gatewayRedirectUrl&&""!==p.gatewayRedirectUrl&&(f.advancedInFlow("tallyman.v1-pin","gateway-redirect",{msisdn:o,pin:c,gatewayRedirectUrl:p.gatewayRedirectUrl}),i.location.href=p.gatewayRedirectUrl),u&&u.storeMsisdn&&"true"===u.storeMsisdn?[4,v(o).then((function(e){e&&e.data&&e.data.success?f.customEvent("Flow","advance-auto","msisdn-stored-success"):f.customEvent("Flow","advance-auto","msisdn-stored-failed")})).catch((function(e){f.customEvent("Flow","advance-auto","msisdn-stored-error",e)}))]:[3,4];case 3:t.sent(),t.label=4;case 4:return[2,n(n({},a),{type:"PINEntry",result:s({finalUrl:p.productUrl,isAlreadySubscribed:p.isAlreadySubscribed||!1})})];case 5:switch(m=t.sent(),console.warn(m),y=void 0,m.type){case"AlreadySubscribed":y="AlreadySubscribed";break;case"InvalidPIN":y="InvalidPIN";break;case"SessionBlocked":y="SessionBlocked";break;case"ExpiredPIN":y="ExpiredPIN";break;case"InsufficientBalance":y="InsufficientBalance";break;default:y="UnknownError"}return f.recedeInFlow("tallyman.v1-pin","pin-submission-failure",{msisdn:o,pin:c,errorType:y,error:m.toString(),message:m.message,productUrl:m.productUrl}),setTimeout((function(){m.productUrl&&(i.location.href=m.productUrl)}),0),[2,l({errorType:y,error:m.toString(),message:m.message,productUrl:m.productUrl})];case 6:return[2]}}))}))})),x={PS:"970"},L=function(e,t){if(!e||!t)return"";var r=e.toUpperCase(),n=x[r];return n?"+".concat(n):(console.error("Country code not found for",e),"")},q=i({name:"pinFlow",initialState:F,reducers:{backToStartAction:function(e){f.recedeInFlow("tallyman.v1-pin","pin-state","requested to change phone number"),e.currentState={type:"MSISDNEntry",result:o()}}},extraReducers:function(e){e.addCase(T.pending,(function(e){e.currentState={type:"MSISDNEntry",result:c(),data:e.currentState.data}})).addCase(T.fulfilled,(function(e,t){e.currentState=t.payload})).addCase(T.rejected,(function(e,t){e.currentState={type:"MSISDNEntry",result:u(t.payload),data:e.currentState.data}})).addCase(B.pending,(function(e){e.currentState={type:"PINEntry",result:c(),data:e.currentState.data}})).addCase(B.fulfilled,(function(e,t){e.currentState=t.payload})).addCase(B.rejected,(function(e,t){e.currentState={type:"PINEntry",result:u(t.payload),data:e.currentState.data}}))}}),O=q.reducer,V=q.actions.backToStartAction;export{V as backToStartAction,h as pinFlowMatch,O as pinFlowReducer,T as submitMSISDNAction,B as submitPinAction,I as usePinFlowState};
2
2
  //# sourceMappingURL=pinFlow.js.map
package/dist/strategy.js CHANGED
@@ -1,2 +1,2 @@
1
- export{R as RDS}from"./RemoteDataState-lcf8PfJd.js";import{P as t}from"./strategySlice-C7LOOrGS.js";export{i as identifyStrategy,a as selectOperatorAction,b as strategyReducer,s as submitMSISDNAction}from"./strategySlice-C7LOOrGS.js";import"tslib";import"@reduxjs/toolkit";import"./searchToObject.js";import"./getConfig.js";import"./tryGetIPRangeName-QW-9NgzE.js";import"./tracker-DaaILhEr.js";import"pacman-client";import"uuid";var e=function(t){return t((function(t){return t.strategy.currentState}))};function r(e){var r=e.identifyInitialState,o=e.identifyFlowByOperatorSelect,a=e.identifyFlowByMsisdn,s=e.pinFlow,i=e.moFlow,n=e.moRedirFlow,c=e.oneClickFlow,u=e.click2smsFlow,l=e.ussdFlow,p=e.creditCardFlow;return function(e){switch(e.type){case t.IDENTIFY_STRATEGY:return r();case t.IDENTIFY_FLOW_BY_OPERATOR_SELECT:return o();case t.IDENTIFY_FLOW_BY_MSISDN:return a(e.result);case t.PIN:return s();case t.MO:return i();case t.MO_REDIR:return n();case t.ONE_CLICK:return c();case t.CLICK2SMS:return u();case t.USSD:return l();case t.CREDIT_CARD:return p();default:throw new Error("Unexpected state type: ".concat(e.type))}}}export{t as PossibleTypes,r as strategy,e as useStrategyState};
1
+ export{R as RDS}from"./RemoteDataState-lcf8PfJd.js";import{P as t}from"./strategySlice-BGKBSWuf.js";export{i as identifyStrategy,a as selectOperatorAction,b as strategyReducer,s as submitMSISDNAction}from"./strategySlice-BGKBSWuf.js";import"tslib";import"@reduxjs/toolkit";import"./searchToObject.js";import"./getConfig.js";import"./tryGetIPRangeName-QW-9NgzE.js";import"./tracker-DaaILhEr.js";import"pacman-client";import"uuid";var e=function(t){return t((function(t){return t.strategy.currentState}))};function r(e){var r=e.identifyInitialState,o=e.identifyFlowByOperatorSelect,a=e.identifyFlowByMsisdn,s=e.pinFlow,i=e.moFlow,n=e.moRedirFlow,c=e.oneClickFlow,u=e.click2smsFlow,l=e.ussdFlow,p=e.creditCardFlow;return function(e){switch(e.type){case t.IDENTIFY_STRATEGY:return r();case t.IDENTIFY_FLOW_BY_OPERATOR_SELECT:return o();case t.IDENTIFY_FLOW_BY_MSISDN:return a(e.result);case t.PIN:return s();case t.MO:return i();case t.MO_REDIR:return n();case t.ONE_CLICK:return c();case t.CLICK2SMS:return u();case t.USSD:return l();case t.CREDIT_CARD:return p();default:throw new Error("Unexpected state type: ".concat(e.type))}}}export{t as PossibleTypes,r as strategy,e as useStrategyState};
2
2
  //# sourceMappingURL=strategy.js.map
@@ -0,0 +1,2 @@
1
+ import{__awaiter as e,__generator as t,__assign as n}from"tslib";import{createAsyncThunk as o,createSlice as r}from"@reduxjs/toolkit";import{N as i,S as s,L as a,F as d}from"./RemoteDataState-lcf8PfJd.js";import{searchToObject as l}from"./searchToObject.js";import{getConfig as u}from"./getConfig.js";import{t as c}from"./tryGetIPRangeName-QW-9NgzE.js";import{t as f}from"./tracker-DaaILhEr.js";var p;!function(e){e.IDENTIFY_STRATEGY="IDENTIFY_STRATEGY",e.IDENTIFY_FLOW_BY_MSISDN="IDENTIFY_FLOW_BY_MSISDN",e.IDENTIFY_FLOW_BY_OPERATOR_SELECT="IDENTIFY_FLOW_BY_OPERATOR_SELECT",e.PIN="PIN",e.MO="MO",e.MO_REDIR="MO_REDIR",e.ONE_CLICK="ONE_CLICK",e.CLICK2SMS="CLICK2SMS",e.USSD="USSD",e.TPAY_HE="TPAY_HE",e.CREDIT_CARD="CREDIT_CARD"}(p||(p={}));var v={AE:"971",BH:"973",CI:"225",SN:"221",KW:"965",AT:"43",CZ:"420",OM:"968",PK:"92",PE:"51"},w=function(e,t){var n=v[t.toUpperCase()];if(!n)throw new Error("Phone code not found for country code: ".concat(t));var o=e.replace(/\D/g,"");return o.startsWith(n)?"".concat(o):"".concat(n).concat(o)},m=function(n){var o=n.window,r=n.slug,i=n.country,s=n.msisdn,a=n.device,d=n.offer,l=n.rockmanId;return e(void 0,void 0,void 0,(function(){var e,n,u,c,f;return t(this,(function(t){switch(t.label){case 0:return e=o.languageCode?"&language_code=".concat(o.languageCode):"",n=encodeURIComponent(o.location.href),u=o.DEV_BASE_URL||"",c=new URLSearchParams({action:"identify",slug:r,country:i,msisdn:s,device:a,offerId:d,rockman_id:l,page:n,language_code:e}).toString(),f="".concat(u,"/tallyman/v1/?").concat(c),[4,fetch(f)];case 1:return[2,t.sent().json()]}}))}))};function g(o){var r,i,s,a,d=o.window,l=o.internationalMSISDN,u=o.configs;return e(this,void 0,void 0,(function(){var o,c,f,p,v,w,g,I,C,y,E=this;return t(this,(function(S){switch(S.label){case 0:if(!l)throw(y=new Error("Error in submitMSISDN() identify action")).type="SEInvalidMSISDN",y;return o=(null===(r=l.match(/\d+/gi))||void 0===r?void 0:r.join(""))||"",c=null===(i=null==u?void 0:u.strategyConfigs)||void 0===i?void 0:i.default,f=c.flowConfig,p=null===(s=null==u?void 0:u.strategyConfigs)||void 0===s?void 0:s.operators,v=function(){return e(E,void 0,void 0,(function(){var e,n,r,i,s;return t(this,(function(t){switch(t.label){case 0:return e=f.slug,n=f.country,r=f.device,i=d.pac_analytics.visitor.rockmanId,s=d.pac_analytics.visitor.offer,[4,m({window:d,slug:e,country:n,msisdn:o,device:r,offer:s,rockmanId:i})];case 1:return[2,t.sent()]}}))}))},[4,v()];case 1:if(w=S.sent(),g=p[w.operator]?p[w.operator]:null,I=!1===w.success&&"Operator could not be found for the given MSISDN"===w.message,C=!1===w.success&&-1!==(null===(a=w.message)||void 0===a?void 0:a.indexOf("HLR did not find the operator for given MSISDN")),I||C)throw(y=new Error("Error in submitMSISDN() identify action")).type="FlowDetectFailed",y.msisdn=o,y;if(null!==g)return[2,n({operator:w.operator,default:c},g)];if(null===g)return[2,n({operator:w.operator},c)];throw(y=new Error("Error in submitMSISDN() identify action")).type="SEInvalidMSISDN",y}}))}))}function I(e){var t,o,r=e.configs,i=e.operator,s=null===(t=null==r?void 0:r.strategyConfigs)||void 0===t?void 0:t.default,a=null===(o=null==r?void 0:r.strategyConfigs)||void 0===o?void 0:o.operators;return n({operator:null==i?void 0:i.toUpperCase(),default:s},a[null==i?void 0:i.toUpperCase()])}function C(n){var o=n.window,r=n.configs;return e(this,void 0,void 0,(function(){var e;return t(this,(function(t){switch(t.label){case 0:return[4,c(o.pac_analytics.visitor)];case 1:return e=t.sent(),[2,I({configs:r,operator:e?e.toUpperCase():""})]}}))}))}var y=o("strategy/submitMSISDNAction",(function(n,o){var r=n.window,i=n.msisdn,s=o.rejectWithValue;return e(void 0,void 0,void 0,(function(){var e,n,o,a,d;return t(this,(function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),e=u(),n=e.strategy,[4,g({window:r,internationalMSISDN:i,configs:e})];case 1:switch(o=t.sent(),n){case"pin-mo-redir-ask-mobile-number":return[2,_(o,i)];case"pin-mo-ask-mobile-number":return[2,E(o,i)];case"pin-combo-ask-mobile-number":return[2,S(o,i)];case"mo-redir-mo-click2sms-one-click-detect-operator-by-ip-or-msisdn":return[2,h(o,i)];case"pin-mo-mo-redir-ask-mobile-number":return[2,O(o,i)];case"pin-click2sms-ask-mobile-number":return[2,R(o,i)];default:return[2,s("Unknown strategy")]}case 2:switch(a=t.sent(),d=void 0,a.type){case"SEAlreadySubscribed":d="AlreadySubscribed";break;case"SEInvalidMSISDN":d="InvalidMSISDN";break;default:d="UnknownError"}return[2,s({errorType:d,error:a,productUrl:a.productUrl})];case 3:return[2]}}))}))})),E=function(e,t){switch(e.flow){case"pin":return f.sendOptInFlowEvent("Pin"),{type:p.PIN,result:i(),data:n({config:e.flowConfig,msisdn:t},e.operator&&{operator:e.operator})};case"mo":return f.sendOptInFlowEvent("Msisdn to sms"),{type:p.MO,result:i(),data:n({config:e.flowConfig,msisdn:t},e.operator&&{operator:e.operator})};default:return f.sendOptInFlowEvent("Pin"),{type:p.PIN,result:i(),data:n({config:e.flowConfig},e.operator&&{operator:e.operator})}}},S=function(e,t){return"pin"===e.flow?(f.sendOptInFlowEvent("Pin"),{type:p.PIN,result:i(),data:n({config:e.flowConfig,msisdn:t},e.operator&&{operator:e.operator})}):(f.sendOptInFlowEvent("Pin"),{type:p.PIN,result:i(),data:n({config:e.flowConfig},e.operator&&{operator:e.operator})})},_=function(e,t){switch(e.flow){case"pin":return f.sendOptInFlowEvent("Pin"),{type:p.PIN,result:i(),data:{config:e.flowConfig,msisdn:t}};case"moRedir":return f.sendOptInFlowEvent("Redirect"),{type:p.MO_REDIR,result:i(),data:{config:e.flowConfig}};default:return f.sendOptInFlowEvent("Pin"),{type:p.PIN,result:i(),data:{config:e.flowConfig}}}},O=function(e,t){switch(e.flow){case"pin":return f.sendOptInFlowEvent("Pin"),{type:p.PIN,result:i(),data:{config:e.flowConfig,msisdn:t}};case"moRedir":return f.sendOptInFlowEvent("Redirect"),{type:p.MO_REDIR,result:i(),data:{config:e.flowConfig,msisdn:t}};case"mo":return f.sendOptInFlowEvent("Msisdn to sms"),{type:p.MO,result:i(),data:{config:e.flowConfig,msisdn:t}};default:return f.sendOptInFlowEvent("Pin"),{type:p.PIN,result:i(),data:{config:e.flowConfig}}}},h=function(e,t){switch(e.flowOnWifi){case"moRedir":return f.sendOptInFlowEvent("Redirect"),{type:p.MO_REDIR,result:i(),data:{config:e.flowConfig,msisdn:t}};case"mo":return f.sendOptInFlowEvent("Msisdn to sms"),{type:p.MO,result:i(),data:{config:e.flowConfig,msisdn:t}};default:return f.sendOptInFlowEvent("Redirect"),{type:p.MO_REDIR,result:i(),data:{config:e.flowConfig,rockman_id:e.rockman_id}}}},R=function(e,t){switch(e.flow){case"pin":return f.sendOptInFlowEvent("Pin"),{type:p.PIN,result:i(),data:{config:e.flowConfig,msisdn:t}};case"click2sms":return f.sendOptInFlowEvent("Click to sms"),{type:p.CLICK2SMS,result:i(),data:{config:e.flowConfig,msisdn:t}};default:return f.sendOptInFlowEvent("Pin"),{type:p.CLICK2SMS,result:i(),data:{config:e.flowConfig}}}},D=function(){var e=function(e){var t,n=e.configs,o=null===(t=null==n?void 0:n.strategyConfigs)||void 0===t?void 0:t.operators;return Object.keys(o)}({configs:u()});return{type:p.IDENTIFY_FLOW_BY_OPERATOR_SELECT,result:i(),data:{operators:e}}},F=o("strategy/selectOperatorAction",(function(o,r){var s=o.operator,a=r.rejectWithValue;return e(void 0,void 0,void 0,(function(){var e,o;return t(this,(function(t){try{switch(e=u(),(o=I({configs:e,operator:s})).flow){case"pin":return f.sendOptInFlowEvent("Pin"),[2,{type:p.PIN,result:{config:o.flowConfig,operator:s}}];case"mo":return f.sendOptInFlowEvent("Msisdn to sms"),[2,{type:p.MO,result:{config:o.flowConfig,operator:s}}];case"click2sms":return f.sendOptInFlowEvent("Click to sms"),[2,{type:p.CLICK2SMS,result:{config:n({operators:[s]},o.flowConfig),operator:s}}];case"oneClick":return f.sendOptInFlowEvent("3G click"),[2,{type:p.ONE_CLICK,result:{config:o.flowConfig,operator:s,autoRedirect:!0}}];default:return f.sendOptInFlowEvent("Pin"),[2,{type:p.PIN,result:i()}]}}catch(e){return"UnkownError",[2,a({errorType:"UnkownError",error:e.toString()})]}return[2]}))}))})),N={mo:"Msisdn to sms",pin:"Pin",oneClick:"3G click",moRedir:"Redirect",click2sms:"Click to sms",ussd:"Msisdn to sms"},k={mo:p.MO,pin:p.PIN,oneClick:p.ONE_CLICK,moRedir:p.MO_REDIR,click2sms:p.CLICK2SMS,ussd:p.USSD,creditCard:p.CREDIT_CARD},M={mo:"Msisdn to sms",pin:"Pin",oneClick:"3G click",moRedir:"Redirect",click2sms:"Click to sms",ussd:"Msisdn to sms"},b={mo:p.MO,pin:p.PIN,oneClick:p.ONE_CLICK,moRedir:p.MO_REDIR,click2sms:p.CLICK2SMS,ussd:p.USSD,creditCard:p.CREDIT_CARD},P=function(e,t,n){return void 0===n&&(n=null),{type:p.IDENTIFY_FLOW_BY_MSISDN,result:i(),data:{config:t,msisdn:e,operator:n}}},T=function(n){var o=n.window;return e(void 0,void 0,void 0,(function(){var e,n,r,i,a,d,l,c,v,m,g,C,y,E,S,_;return t(this,(function(t){e=u().strategyConfigs,n=null===(m=null==e?void 0:e.default)||void 0===m?void 0:m.flowConfig;try{r=null===(C=null===(g=null==o?void 0:o.pac_analytics)||void 0===g?void 0:g.visitor)||void 0===C?void 0:C.page,i=null===(E=null===(y=null==o?void 0:o.pac_analytics)||void 0===y?void 0:y.visitor)||void 0===E?void 0:E.heMsisdn,a=null===(_=null===(S=null==o?void 0:o.pac_analytics)||void 0===S?void 0:S.visitor)||void 0===_?void 0:_.country,i&&a&&(i=w(i,a)),d=!1,l=!1,c=[],v=setTimeout((function(){var t;if(!1===d)return l=!0,f.customEvent("Flow","recede-auto","msisdn-detection-failure",{errorType:"3 second timer expired"}),o.isPrelanderClicked=!0,{type:p.PIN,result:s({}),data:{config:null===(t=null==e?void 0:e.default)||void 0===t?void 0:t.flowConfig}}}),3e3),o.addEventListener("he-success",(function(e){var t,o=e.detail;if(o.msisdn&&(i=w(o.msisdn,a)),!c.includes(r)){f.customEvent("Flow","advance-auto","msisdn-detected",{msisdn:t,operator:null==o?void 0:o.operator_code});s=I({configs:u(),operator:null==o?void 0:o.operator_code});return L(s,t,!0)}if(!1===l){d=!0,clearTimeout(v),f.customEvent("Flow","advance-auto","msisdn-detected",{msisdn:t});var s=I({configs:u(),operator:null==o?void 0:o.operator_code});return L(s,t,!0)}return P(i,n)})),o.addEventListener("he-fail",(function(){return P(null,n)}))}catch(e){return console.error("Error in header enrichment:",e),[2,P(null,n)]}return[2]}))}))},L=function(e,t,o){var r="Pin";switch(e.flow){case"pin":r="Pin";break;case"mo":r="Msisdn to sms";break;case"moRedir":r="Redirect"}return f.sendOptInFlowEvent(r),{type:e.flow,result:n({config:e.flowConfig,msisdn:t,isHeaderEnrichmentSuccess:o,rockman_id:e.rockman_id},e.operator&&{operator:e.operator})}},Y={currentState:{type:p.IDENTIFY_STRATEGY,result:i(),data:void 0}},A=function(){var e=l(window);if(void 0!==e["mock-flow"])switch(void 0!==e.operator&&(window.operator=e.operator),e["mock-flow"]){case"pin":return{type:p.PIN,result:s({})};case"mo":return{type:p.MO,result:s({})};case"moredir":return{type:p.MO_REDIR,result:s({})};case"oneclick":return{type:p.ONE_CLICK,result:s({}),data:{subscription_url:e["subscription-url"]}};case"click2sms":return{type:p.CLICK2SMS,result:s({})};case"ussd":return{type:p.USSD,result:s({})};case"creditcard":return{type:p.CREDIT_CARD,result:s({})};default:throw new Error("(mockStrategyStateByUrlParam) Strategy Mock Flow not supported")}},U=o("strategy/identifyStrategy",(function(){return e(void 0,void 0,void 0,(function(){var n,o,r,a,d,c,v,m,g,y,E,S,_;return t(this,(function(O){switch(O.label){case 0:return n=u(),o=n.strategy,r=n.strategyConfigs,void 0!==(a=l(window))["mock-flow"]?[2,A()]:a["show-pin-entry"]&&"1"===a["show-pin-entry"]||a["show-thank-you"]&&"1"===a["show-thank-you"]?(d=I({configs:n,operator:a.operator}),[2,{type:p.PIN,result:s({}),data:{config:(null==d?void 0:d.flowConfig)||(null===(c=null==r?void 0:r.default)||void 0===c?void 0:c.flowConfig)}}]):o.includes("ask-operator")?[2,D()]:o.includes("detect-operator-by-ip")?[2,e(void 0,void 0,void 0,(function(){var e,n,o,r,s,a;return t(this,(function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),e=u(),[4,C({window:window,configs:e})];case 1:return n=t.sent(),o=function(e){return N[e]},r=n.flow,s=o(r),f.sendOptInFlowEvent(s),[2,{type:k[r],result:i(),data:{config:n.flowConfig,operator:n.operator}}];case 2:return a=t.sent(),console.error("error",a),[3,3];case 3:return[2]}}))}))]:(null==o?void 0:o.includes("ask-mobile-number"))?[2,{type:p.IDENTIFY_FLOW_BY_MSISDN,result:i()}]:(null==o?void 0:o.includes("header-enrichment"))&&"header-enrichment-script"!==o?[4,e(void 0,void 0,void 0,(function(){var n,o,r,s,a,d,c,p,v,m,g,C,y;return t(this,(function(E){switch(E.label){case 0:n=u(),o=null==n?void 0:n.strategyConfigs.default,r=o.flow,E.label=1;case 1:return E.trys.push([1,5,,6]),(null==(s=l(window))?void 0:s.operator)?(a=(null==s?void 0:s.msisdn)&&""!==(null==s?void 0:s.msisdn),d=null,c=null,[4,I({operator:null==s?void 0:s.operator,configs:n})]):[2,{type:b[r],result:i(),data:{config:null==o?void 0:o.flowConfig}}];case 2:return p=E.sent(),v=function(e){return M[e]},m=p.flow,g=v(m),f.sendOptInFlowEvent(g),"oneClick"!==m?[3,4]:[4,e(void 0,void 0,void 0,(function(){var e,n,o,r,i,s,a,d,u;return t(this,(function(t){if("undefined"==typeof window)throw new Error("This function can only be run in a browser environment.");if("false"===(e=l(window)).success)throw new Error("Error in getRedirectUrl() identify-user action:\n".concat(e.message||"NotOn3g"));if(!(n=e.subscription_url||e.redirect_url))throw new Error("No URL provided for redirection");return o=window.atob(n),r=new URL(o),i=new URLSearchParams(r.search),s=i.get("msisdn")||e.msisdn,a=i.get("operator")||e.operator,s&&(s=w(s,null===(u=null===(d=null===window||void 0===window?void 0:window.pac_analytics)||void 0===d?void 0:d.visitor)||void 0===u?void 0:u.country)),[2,{msisdn:s||"",operator:a||"",subscription_url:e.subscription_url?o:void 0,redirect_url:e.redirect_url?o:void 0}]}))}))];case 3:""!==(null==(C=E.sent())?void 0:C.msisdn)&&f.customEvent("Flow","advance-auto","msisdn-detected",{msisdn:null==C?void 0:C.msisdn}),d=(null==C?void 0:C.subscription_url)||null,c=(null==C?void 0:C.redirect_url)||null,E.label=4;case 4:return[2,{type:b[m],result:i(),data:{config:p.flowConfig,operator:p.operator,subscription_url:d||null,redirect_url:c||null,isHeaderEnrichmentSuccess:a}}];case 5:return y=E.sent(),console.error("error",y),[2,{type:b[r],result:i(),data:{config:null==o?void 0:o.flowConfig}}];case 6:return[2]}}))}))]:[3,2];case 1:return[2,O.sent()];case 2:switch(o){case"header-enrichment-script":return[2,T({window:window})];case"pin":return f.sendOptInFlowEvent("Pin"),[2,{type:p.PIN,result:s({}),data:{config:null===(v=null==r?void 0:r.default)||void 0===v?void 0:v.flowConfig}}];case"mo":return f.sendOptInFlowEvent("Msisdn to sms"),[2,{type:p.MO,result:s({}),data:{config:null===(m=null==r?void 0:r.default)||void 0===m?void 0:m.flowConfig}}];case"mo-redir":return[2,{type:p.MO_REDIR,result:s({}),data:{config:null===(g=null==r?void 0:r.default)||void 0===g?void 0:g.flowConfig}}];case"one-click":return f.sendOptInFlowEvent("Redirect"),[2,{type:p.ONE_CLICK,result:s({}),data:{config:null===(y=null==r?void 0:r.default)||void 0===y?void 0:y.flowConfig}}];case"click2sms":return f.sendOptInFlowEvent("Click to sms"),[2,{type:p.CLICK2SMS,result:s({}),data:{config:null===(E=null==r?void 0:r.default)||void 0===E?void 0:E.flowConfig}}];case"ussd":return f.sendOptInFlowEvent("USSD"),[2,{type:p.USSD,result:s({}),data:{config:null===(S=null==r?void 0:r.default)||void 0===S?void 0:S.flowConfig}}];case"credit-card":return f.sendOptInFlowEvent("Credit card"),[2,{type:p.CREDIT_CARD,result:s({}),data:{config:null===(_=null==r?void 0:r.default)||void 0===_?void 0:_.flowConfig}}];default:throw new Error("Strategy not supported")}}}))}))})),K=o("strategy/setStrategyExtraData",(function(n){var o=n.type,r=n.data;return e(void 0,void 0,void 0,(function(){return t(this,(function(e){return[2,{type:o,result:i(),data:r}]}))}))})),W=r({name:"strategy",initialState:Y,reducers:{},extraReducers:function(e){e.addCase(U.pending,(function(e){e.currentState={type:p.IDENTIFY_STRATEGY,result:a()}})).addCase(U.fulfilled,(function(e,t){e.currentState=t.payload})).addCase(U.rejected,(function(e,t){e.currentState={type:p.IDENTIFY_STRATEGY,result:d(t.error.message)}})).addCase(y.pending,(function(e){e.currentState={type:p.IDENTIFY_FLOW_BY_MSISDN,result:a()}})).addCase(y.fulfilled,(function(e,t){e.currentState=t.payload})).addCase(y.rejected,(function(e,t){e.currentState={type:p.IDENTIFY_FLOW_BY_MSISDN,result:d(t.payload)}})).addCase(K.fulfilled,(function(e,t){e.currentState=t.payload})).addCase(F.pending,(function(e){e.currentState={type:p.IDENTIFY_FLOW_BY_OPERATOR_SELECT,result:a()}})).addCase(F.fulfilled,(function(e,t){e.currentState=t.payload})).addCase(F.rejected,(function(e,t){e.currentState={type:p.IDENTIFY_FLOW_BY_OPERATOR_SELECT,result:d(t.payload)}}))}}).reducer;export{p as P,F as a,W as b,K as c,U as i,y as s};
2
+ //# sourceMappingURL=strategySlice-BGKBSWuf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategySlice-BGKBSWuf.js","sources":["../src/sharedFlowTypes/StrategyTypes.ts","../src/utilities/formatNumberToE164.ts","../src/flows/strategy/api.ts","../src/flows/strategy/main.ts","../src/flows/strategy/strategies/askMobileNumber.ts","../src/flows/strategy/strategies/askOperator.ts","../src/flows/strategy/strategies/detectOperatorByIp.ts","../src/flows/strategy/strategies/headerEnrichment.ts","../src/flows/strategy/strategies/injectHeaderEnrichmentScript.ts","../src/flows/strategy/strategySlice.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable camelcase */\nimport * as RDS from '../common-types/RemoteDataState';\nimport { Click2smsFlowState } from './Click2smsTypes';\nimport { CreditCardFlowState } from './CreditCardTypes';\nimport { MoRedirFlowState } from './MoRedirTypes';\nimport { MoFlowState } from './MoTypes';\nimport { OneClickFlowState } from './OneClickTypes';\nimport { PinFlowState } from './PinTypes';\nimport { UssdFlowState } from './UssdTypes';\n\nexport type IIdentifyResult = {\n operator: string;\n flow?: string;\n success: boolean;\n rockman_id?: string;\n message?: string;\n};\n\nexport interface HEResult {\n msisdn: string;\n operator: string;\n subscription_url?: string;\n redirect_url?: string;\n}\n\nexport type ConfigDetails = {\n host: string;\n slug: string;\n country: string;\n device?: 'smart' | 'feature';\n queryString?: Array<[string, string]>;\n automaticallySubmitAllOperators?: boolean;\n operators?: string[];\n service: string;\n offer?: string;\n};\n\nexport type IConfig = {\n offer?: string;\n slug?: string;\n country?: string;\n host?: string;\n device?: 'smart' | 'feature';\n automaticallySubmitAllOperators?: boolean;\n operators?: string[];\n service?: string;\n serviceId?: string;\n queryString?: any;\n apiAction?: any;\n};\n\nexport type ISupportedFlows = 'pin' | 'mo' | 'oneClick' | 'click2sms' | 'moRedir' | 'ussd' | 'creditCard';\nexport type IFlow = {\n flow: ISupportedFlows;\n flowOnWifi?: ISupportedFlows;\n operator?: string;\n flowConfig: ConfigDetails;\n default?: IFlow;\n rockman_id?: string;\n};\n\nexport type StrategyConfig = {\n operators: {\n [key: string]: IFlow;\n };\n default: IFlow;\n isUseMsisdnPrefix?: boolean;\n};\n// export type IStrategy = IPinStrategy | IMoStrategy;\n\nexport type IStrategy = {\n strategy: IStrategyNames;\n country: string;\n strategyConfigs: StrategyConfig;\n};\n\nexport type IStrategyNames =\n | 'pin'\n | 'mo'\n | 'mo-redir'\n | 'click2sms'\n | 'one-click'\n | 'ussd'\n | 'tpay-he'\n | 'credit-card'\n | 'tallyman-one-click'\n | 'pin-mo-ask-operator'\n | 'pin-mo-ask-mobile-number'\n | 'pin-one-click-ask-operator'\n | 'pin-one-click-detect-operator-by-ip'\n | 'one-click-mo-pin-detect-operator-by-ip-or-msisdn'\n | 'pin-click2sms-ask-operator'\n | 'mo-redir-one-click-detect-operator-by-ip'\n | 'pin-mo-redir-ask-mobile-number'\n | 'pin-click2sms-ask-mobile-number'\n | 'mo-one-click-detect-operator-by-ip'\n | 'click2sms-one-click-detect-operator-by-ip'\n | 'pin-header-enrichment'\n | 'pin-msisdn-fowarding-pin-header-enrichment'\n | 'he-pin-mo-redir-header-enrichment'\n | 'he-pin-one-click-header-enrichment'\n | 'he-pin-one-click-ask-operator'\n | 'click2sms-one-click-ask-operator'\n | 'pin-mo-detect-operator-by-ip'\n | 'he-mo-redir-one-click-header-enrichment'\n | 'pin-combo-ask-mobile-number'\n | 'header-enrichment-script'\n | 'mo-redir-mo-click2sms-one-click-detect-operator-by-ip-or-msisdn'\n | 'pin-mo-mo-redir-ask-mobile-number';\n\nexport interface IHash {\n [key: string]: string;\n}\n\nexport type IDENTIFYMSISDNEntryErrorTypes = 'AlreadySubscribed' | 'UnknownError' | 'InvalidMSISDN';\n\nexport type IDENTIFYMSISDNEntryFailure = {\n errorType: IDENTIFYMSISDNEntryErrorTypes;\n error: unknown;\n};\n\nexport type IdentifyFlowOptionsResult = {\n config: IConfig;\n nextAction?: unknown;\n msisdn?: string;\n operator?: string;\n subscription_url?: string;\n redirect_url?: string;\n rockman_id?: string;\n isHeaderEnrichmentSuccess?: boolean;\n autoRedirect?: boolean;\n isUseMsisdnPrefix?: boolean;\n};\n\nexport type IDENTIFYMSISDNEntrySuccess = {};\nexport type OPERATORSelectFailure = {};\nexport type OPERATORSelectSuccess = IdentifyFlowOptionsResult;\n\nexport type IDETECTYOPERATOBYIPFailure = {};\nexport type IDETECTYOPERATOBYIPSuccess = IdentifyFlowOptionsResult;\n\nexport type IDENTIFY_OPERATOR_MSISDNEntrySuccess = IdentifyFlowOptionsResult;\n\nexport type IDENTIFY_FLOW_HESuccess = IdentifyFlowOptionsResult;\n\nexport type OPERATORSelectFlowIdentifyFailure = {};\nexport type OPERATORSelectFlowIdentifySuccess = {\n operators: Array<string>;\n msisdn?: string;\n nextAction: 'selectOperator';\n};\nexport type IDENTIFYFailure = {};\n\nexport type IDENTIFYSuccess = {};\n\nexport type IOperatorSelectFlowIdentifyPayload = {\n type: 'IDENTIFY_FLOW_BY_OPERATOR_SELECT';\n result: RDS.RemoteDataState<OPERATORSelectFlowIdentifyFailure, OPERATORSelectFlowIdentifySuccess>;\n};\n\n// export type IIdentifyByIPPayload= {\n// type:\"IDENTIFY_FLOW_BY_IP\"\n// result: RDS.RemoteDataState<IDENTIFYBYIPFailure, IDENTIFYBYIPSuccess>;\n// }\n\nexport type IDetectOperatorByIpPayload = {\n type: 'DETECT_OPERATOR_BY_IP';\n result: RDS.RemoteDataState<IDETECTYOPERATOBYIPFailure, IDETECTYOPERATOBYIPSuccess>;\n};\n\nexport enum PossibleTypes {\n IDENTIFY_STRATEGY = 'IDENTIFY_STRATEGY',\n IDENTIFY_FLOW_BY_MSISDN = 'IDENTIFY_FLOW_BY_MSISDN',\n IDENTIFY_FLOW_BY_OPERATOR_SELECT = 'IDENTIFY_FLOW_BY_OPERATOR_SELECT',\n PIN = 'PIN',\n MO = 'MO',\n MO_REDIR = 'MO_REDIR',\n ONE_CLICK = 'ONE_CLICK',\n CLICK2SMS = 'CLICK2SMS',\n USSD = 'USSD',\n TPAY_HE = 'TPAY_HE',\n CREDIT_CARD = 'CREDIT_CARD'\n}\n\nexport type IOperatorSelectPayload = {\n type: PossibleTypes;\n result: OPERATORSelectSuccess;\n};\n\nexport type ISubmitMsisdnPayload = {\n type: PossibleTypes;\n result: IDENTIFY_OPERATOR_MSISDNEntrySuccess;\n};\n\nexport type IIdentifyFlowByIpOperatorPayload = {\n type: PossibleTypes;\n result: IDENTIFY_OPERATOR_MSISDNEntrySuccess;\n};\n\nexport type IIdentifyFlowByHePayload = {\n type: PossibleTypes;\n result: IDENTIFY_FLOW_HESuccess;\n};\n\nexport type IIdentfyFlowByMsisdnNextAction = 'submitMSISDNAction' | 'loadOc2sms';\nexport type IIdentfyFlowByOperatorNextAction = 'submitMSISDNAction' | 'loadOc2sms';\nexport type IIdentfyFlowByIPOperatorNextAction = 'getRedirectUrlAction' | 'submitMSISDNAction';\n\nexport type IIdenyifyFlowByMsisdnSumbitNextData = {\n nextAction: IIdentfyFlowByMsisdnNextAction;\n msisdn?: string;\n operator?: string;\n};\n\nexport type IIdenyifyFlowByMsisdnPayload = {\n type: 'IDENTIFY_FLOW_BY_MSISDN';\n result: RDS.RemoteDataState<IDENTIFYMSISDNEntryFailure, IDENTIFYMSISDNEntrySuccess>;\n data: IIdenyifyFlowByMsisdnSumbitNextData;\n};\n\nexport type IIdenyifyStrategyPayload = {\n type: 'IDENTIFY_FLOW_BY_MSISDN';\n result: RDS.RemoteDataState<IDENTIFYMSISDNEntryFailure, IDENTIFYMSISDNEntrySuccess>;\n data: IIdenyifyFlowByMsisdnSumbitNextData;\n};\n\nexport type IStrategyCurrentState =\n | {\n type: 'IDENTIFY_STRATEGY';\n result: RDS.RemoteDataState<IDENTIFYFailure, IDENTIFYSuccess>;\n }\n | {\n type: 'IDENTIFY_FLOW_BY_OPERATOR_SELECT';\n result: OPERATORSelectFlowIdentifySuccess;\n }\n | {\n type: 'DETECT_OPERATOR_BY_IP';\n result: RDS.RemoteDataState<IDETECTYOPERATOBYIPFailure, IDETECTYOPERATOBYIPSuccess>;\n }\n | {\n type: 'HE_IDENTIFY';\n result: RDS.RemoteDataState<IDENTIFYFailure, IDENTIFYSuccess>;\n }\n | {\n type: 'OPERATOR_SELECT';\n result: RDS.RemoteDataState<OPERATORSelectFailure, OPERATORSelectSuccess>;\n config: IConfig;\n }\n | {\n type: 'IDENTIFY_FLOW_BY_MSISDN';\n result: RDS.RemoteDataState<IDENTIFYMSISDNEntryFailure, IDENTIFYMSISDNEntrySuccess>;\n nextData: IIdenyifyFlowByMsisdnSumbitNextData;\n }\n | {\n type: 'PIN';\n result: IdentifyFlowOptionsResult;\n }\n | {\n type: 'MO';\n result: IdentifyFlowOptionsResult;\n }\n | {\n type: 'USSD';\n result: IdentifyFlowOptionsResult;\n }\n | {\n type: 'MO_REDIR';\n result: IdentifyFlowOptionsResult;\n }\n | {\n type: 'ONE_CLICK';\n result: IdentifyFlowOptionsResult;\n }\n | {\n type: 'CLICK2SMS';\n result: IdentifyFlowOptionsResult;\n }\n | {\n type: 'TPAY_HE';\n result: IdentifyFlowOptionsResult;\n }\n | {\n type: 'CREDIT_CARD';\n result: IdentifyFlowOptionsResult;\n };\n\nexport type IStrategyIDentifyUserResult =\n | {\n success: 'true';\n rockman_id: string;\n msisdn: string;\n operator?: string;\n subscription_url?: string;\n redirect_url?: string;\n 'redirect-back'?: string;\n 'msisdn-alias'?: string;\n }\n | {\n success: 'false';\n rockman_id: string;\n message: string;\n 'redirect-back'?: string;\n };\n\nexport type IMockFlows = 'pin' | 'mo' | 'oneclick' | 'click2sms' | 'moredir' | 'ussd' | 'tpay' | 'creditcard';\n\nexport interface IMockFlowParams<T> {\n 'mock-flow': IMockFlows;\n 'current-state': T;\n 'show-pin-entry': '1' | '0';\n 'show-thank-you': '1' | '0';\n operator: string;\n msisdn?: string;\n 'subscription-url'?: string;\n}\n\nexport interface IScriptHeaderEnrichmentSuccess extends CustomEvent {\n detail: {\n msisdn: string;\n operator_code: string;\n };\n}\n\nexport interface ExtraStrategyData {\n isHeaderEnrichmentSuccess?: boolean;\n config?: ConfigDetails;\n msisdn?: string;\n rockman_id?: string;\n operator?: string;\n subscription_url?: string;\n redirect_url?: string;\n operators?: string[];\n}\nexport interface StrategyState {\n currentState: StrategyCurrentState;\n}\n\nexport interface StrategyCurrentState {\n type: PossibleTypes;\n result: RDS.RemoteDataState<any, any>;\n data?: ExtraStrategyData;\n}\n\nexport type IMockPinFlowStates = 'msisdn-state' | 'pin-state' | 'completed-state' | 'msisdn-failure-state';\n\nexport interface RootState {\n strategy?: StrategyState;\n pinFlow?: PinFlowState;\n moFlow?: MoFlowState;\n moRedirFlow?: MoRedirFlowState;\n click2smsFlow?: Click2smsFlowState;\n oneClickFlow?: OneClickFlowState;\n ussdFlow?: UssdFlowState;\n creditCardFlow?: CreditCardFlowState;\n}\n","const countryToPhoneCode: Record<string, string> = {\n AE: '971', // United Arab Emirates\n BH: '973', // Bahrain\n CI: '225', // Côte d'Ivoire (Ivory Coast)\n SN: '221', // Senegal\n KW: '965', // Kuwait\n AT: '43', // Austria\n CZ: '420', // Czech Republic\n OM: '968', // Oman\n PK: '92', // Pakistan\n PE: '51' // Peru\n};\n\n/**\n * Formats a phone number to E.164 format.\n *\n * @param {string} number - The phone number to format.\n * @param {string} isoCountryCode - The ISO country code of the phone number.\n * @return {string} The formatted phone number in E.164 format.\n */\nexport const formatNumberToE164 = (number: string, isoCountryCode: string) => {\n const phoneCode = countryToPhoneCode[isoCountryCode.toUpperCase()];\n if (!phoneCode) {\n throw new Error(`Phone code not found for country code: ${isoCountryCode}`);\n }\n\n const cleanNumber = number.replace(/\\D/g, '');\n if (!cleanNumber.startsWith(phoneCode)) {\n return `${phoneCode}${cleanNumber}`;\n }\n return `${cleanNumber}`;\n};\n","import { IIdentifyResult, IStrategyIDentifyUserResult } from '../../sharedFlowTypes/StrategyTypes';\nimport { bupperizeCountry } from '../../utilities/bupperizeCountry';\n\nconst fetchJsonp: <T>({ window, _url }: { window: Window; _url: string }) => Promise<T> = ({\n window,\n _url\n}: {\n window: Window;\n _url: string;\n}) => {\n let url = _url;\n const ouisys_callback_function = `ouisys_callback_function${Math.floor(Math.random() * 10000)}`;\n return new Promise((resolve, reject) => {\n (window as any)[ouisys_callback_function] = (arg: any) => {\n resolve(arg);\n };\n\n url += url.indexOf('?') === -1 ? '?' : '&';\n url += `jsonp=${ouisys_callback_function}`;\n const script = document.createElement('script');\n script.src = url;\n script.id = ouisys_callback_function;\n document.body.appendChild(script);\n\n // Caught if got 404/500\n script.onerror = () => {\n reject(new Error(`JSONP request to ${_url} failed`));\n };\n });\n};\nconst identify = async ({\n window,\n slug,\n country,\n msisdn,\n device,\n offer,\n rockmanId\n}: {\n window: Window;\n slug: string;\n country: string;\n msisdn: string;\n device: string;\n offer: string;\n rockmanId: string;\n}): Promise<IIdentifyResult> => {\n const languageCode = window.languageCode ? `&language_code=${window.languageCode}` : '';\n const locationHref = encodeURIComponent(window.location.href);\n\n const host = (window as Window).DEV_BASE_URL || '';\n\n const params = {\n action: 'identify',\n slug,\n country,\n msisdn,\n device,\n offerId: offer,\n rockman_id: rockmanId,\n page: locationHref,\n language_code: languageCode\n };\n\n const urlParams = new URLSearchParams(params).toString();\n const url = `${host}/tallyman/v1/?${urlParams}`;\n\n const response = await fetch(url);\n return response.json();\n};\n\nconst identifyUserGetSubscriptionUrl = async ({\n window,\n country,\n slug,\n device,\n offer,\n rockmanId,\n extraParamsQs = '',\n search = ''\n}: {\n window: Window;\n country: string;\n slug: string;\n device: string;\n offer: string;\n rockmanId: string;\n extraParamsQs?: string;\n search?: string;\n}): Promise<IStrategyIDentifyUserResult> => {\n const xaid = window.pac_analytics.visitor.xaid || '';\n const locationHref = encodeURIComponent(window.location.href);\n const pixelUrl = encodeURIComponent(\n `http://${window.location.host}/pixels?xcid=${window.location.pathname.replace(\n '/',\n ''\n )}&xaid=${xaid}&country=${bupperizeCountry(country)}`\n );\n\n const params = {\n action: 'identify-user',\n country: bupperizeCountry(country),\n slug,\n device,\n offerId: offer,\n page: locationHref,\n pixel_url: pixelUrl,\n rockman_id: rockmanId,\n extraParamsQs,\n search\n };\n\n const urlParams = new URLSearchParams(params).toString();\n const host = window.DEV_BASE_URL || '';\n const url = `${host}/tallyman/v1/?${urlParams}`;\n\n const response = await fetchJsonp<IStrategyIDentifyUserResult>({\n window,\n _url: url\n });\n return response;\n};\n\nexport { identify, identifyUserGetSubscriptionUrl };\n","import { IError } from '../../common-types/IError';\nimport { IStrategy } from '../../common-types/Strategy';\nimport tryGetIPRangeName from '../../ips/tryGetIPRangeName';\nimport { HEResult, IConfig, IFlow, IIdentifyResult } from '../../sharedFlowTypes/StrategyTypes';\nimport { formatNumberToE164 } from '../../utilities/formatNumberToE164';\nimport { searchToObject } from '../../utilities/searchToObject';\nimport { identify } from './api';\n\nexport async function determineFlowByMsidn({\n window,\n internationalMSISDN,\n configs\n}: {\n window: Window;\n internationalMSISDN: string;\n configs: IStrategy;\n}): Promise<IFlow> {\n if (!internationalMSISDN) {\n const submissionError = new Error(`Error in submitMSISDN() identify action`) as IError;\n submissionError.type = 'SEInvalidMSISDN';\n throw submissionError;\n }\n const msisdn = internationalMSISDN.match(/\\d+/gi)?.join('') || ''; // tallyman API expects international msisdn without unknown special character\n const defaultFlowConfig = configs?.strategyConfigs?.default;\n const config = defaultFlowConfig.flowConfig;\n const operatorsConfig = configs?.strategyConfigs?.operators;\n\n const indentifyFlow = async (): Promise<IIdentifyResult> => {\n const { slug, country, device } = config;\n const { rockmanId } = window.pac_analytics.visitor;\n const { offer } = window.pac_analytics.visitor;\n const flowOperatorResult: IIdentifyResult = await identify({\n window,\n slug,\n country,\n msisdn,\n device,\n offer,\n rockmanId\n });\n return flowOperatorResult;\n };\n const theResult = await indentifyFlow();\n\n const flow = operatorsConfig[theResult.operator] ? operatorsConfig[theResult.operator] : null;\n const cannotDetect =\n theResult.success === false && theResult.message === 'Operator could not be found for the given MSISDN';\n const hlrError =\n theResult.success === false && theResult.message?.indexOf('HLR did not find the operator for given MSISDN') !== -1;\n\n if (cannotDetect || hlrError) {\n const submissionError = new Error(`Error in submitMSISDN() identify action`) as IError & { msisdn: string };\n submissionError.type = 'FlowDetectFailed';\n submissionError.msisdn = msisdn;\n throw submissionError;\n } else if (flow !== null) {\n const flowObj = { operator: theResult.operator, default: defaultFlowConfig, ...flow };\n // @ts-ignore\n return flowObj;\n } else if (flow === null) {\n const flowObj = { operator: theResult.operator, ...defaultFlowConfig };\n // @ts-ignore\n return flowObj;\n } else {\n const submissionError = new Error(`Error in submitMSISDN() identify action`) as IError;\n submissionError.type = 'SEInvalidMSISDN';\n throw submissionError;\n }\n}\n\nexport function determineFlowByOperator({ configs, operator }: { configs: IStrategy; operator: string }): IFlow {\n const defaultFlowConfig = configs?.strategyConfigs?.default;\n const operatorsConfig = configs?.strategyConfigs?.operators;\n\n const flowObj = {\n operator: operator?.toUpperCase(),\n default: defaultFlowConfig,\n ...operatorsConfig[operator?.toUpperCase()]\n };\n // @ts-ignore\n return flowObj;\n}\n\nexport async function determineFlowByOperatorFromIp({\n window,\n configs\n}: {\n window: Window;\n configs: IStrategy;\n}): Promise<IFlow> {\n const operator = await tryGetIPRangeName(window.pac_analytics.visitor);\n const flowObj = determineFlowByOperator({\n configs,\n operator: operator ? operator.toUpperCase() : ''\n });\n return flowObj;\n}\n\nexport function getOperators({ configs }: { configs: IStrategy }): Array<string> {\n const operatorsConfig = configs?.strategyConfigs?.operators;\n const operators = Object.keys(operatorsConfig);\n return operators;\n}\n\nexport const getHeaderEnrichmentResult = async (): Promise<HEResult> => {\n if (typeof window === 'undefined') {\n throw new Error('This function can only be run in a browser environment.');\n }\n\n const searchObj = searchToObject(window) as any; // Assumes the implementation of searchToObject\n if (searchObj.success === 'false') {\n throw new Error(`Error in getRedirectUrl() identify-user action:\\n${searchObj.message || 'NotOn3g'}`);\n }\n const url = searchObj.subscription_url || searchObj.redirect_url;\n if (!url) {\n throw new Error('No URL provided for redirection');\n }\n\n const decodedUrl = window.atob(url);\n const newUrl = new URL(decodedUrl);\n const urlParams = new URLSearchParams(newUrl.search);\n\n let msisdn = urlParams.get('msisdn') || searchObj.msisdn;\n const operator = urlParams.get('operator') || searchObj.operator;\n\n if (msisdn) {\n msisdn = formatNumberToE164(msisdn, window?.pac_analytics?.visitor?.country);\n }\n\n return {\n msisdn: msisdn || '',\n operator: operator || '',\n subscription_url: searchObj.subscription_url ? decodedUrl : undefined,\n redirect_url: searchObj.redirect_url ? decodedUrl : undefined\n };\n};\n\nexport const subscribe: (_url: string) => Promise<string> = async (_url: string) =>\n // const result:ISubscribeResult = await fetch(url + \"&operator=kw_viva\").then((x)=>x.json())\n\n // if(false === result.success){\n // const subscribeError = new Error(`Error in subscribe() one-click-subscribe action:\\n${result.message}`) as IError & {type:string;}\n // subscribeError['type'] = \"SubscriptionError\";\n // throw subscribeError\n // }else{\n '/product';\n// }\n\nexport function mockConfig({ configs, flow }: { configs: IStrategy; flow: string }): IConfig {\n const defaultFlowConfig = configs?.strategyConfigs?.default;\n const operatorsConfig = configs?.strategyConfigs?.operators;\n const opArr = Object.keys(operatorsConfig);\n const r = opArr.filter((o) => operatorsConfig[o].flow === flow);\n const operator = r[0];\n const flowObj = { offer: '1', operator, default: defaultFlowConfig, ...operatorsConfig[operator] };\n\n return flowObj;\n}\n\n// export const mockedPinFlow: StrategyState = {\n// currentState: {\n// type: PossibleTypes.PIN,\n// result: RDS.NothingYet(),\n// data: {\n// config: mockConfig('pin')\n// }\n// }\n// };\n\n// export const mockedMoFlow: StrategyState = {\n// currentState: {\n// type: PossibleTypes.MO,\n// result: RDS.NothingYet(),\n// data: {\n// config: mockConfig('mo')\n// }\n// }\n// };\n\n// export const mockedUssdFlow: StrategyState = {\n// currentState: {\n// type: PossibleTypes.USSD,\n// result: RDS.NothingYet(),\n// data: {\n// config: mockConfig('ussd')\n// }\n// }\n// };\n\n// export const mockedMoRdirFlow: StrategyState = {\n// currentState: {\n// type: PossibleTypes.MO_REDIR,\n// result: RDS.NothingYet(),\n// data: {\n// config: mockConfig('moRedir')\n// }\n// }\n// };\n\n// export const mockedClick2smsFlow: StrategyState = {\n// currentState: {\n// type: PossibleTypes.CLICK2SMS,\n// result: RDS.NothingYet(),\n// data: {\n// config: mockConfig('click2sms')\n// }\n// }\n// };\n\n// export const mockedOneClickFlow: StrategyState = {\n// currentState: {\n// type: PossibleTypes.ONE_CLICK,\n// result: RDS.NothingYet(),\n// data: {\n// config: mockConfig('oneClick')\n// }\n// }\n// };\n\n// export const mockedCreditCardFlow: StrategyState = {\n// currentState: {\n// type: PossibleTypes.CREDIT_CARD,\n// result: RDS.NothingYet(),\n// data: {\n// config: mockConfig('creditCard')\n// }\n// }\n// };\n// export const mockedMOFlow : State = { type: \"MO\", result:moFlow(mockTracker, mockConfig(\"mo\"))}\n// export const mockedOneClickFlow : State = { type: \"ONECLICK\", result:oneClickFlow(mockTracker, mockConfig(\"oneClick\"), {\"testextraparams\":\"1\"})}\n// export const mockedClick2smsFlow : State = { type: \"CLICK2SMS\", result:click2smsFlow(mockTracker, mockConfig(\"click2sms\"))}\n// export const mockedMORedirFlow : State = { type: \"MOREDIR\", result:moRedirFlow(mockTracker, mockConfig(\"moRedir\"))}\n","import { createAsyncThunk } from '@reduxjs/toolkit';\nimport * as RDS from '../../../common-types/RemoteDataState';\nimport { getConfig } from '../../../utilities/getConfig';\nimport { tracker } from '../../../utilities/tracker';\n\nimport {\n IDENTIFYMSISDNEntryErrorTypes,\n IFlow,\n PossibleTypes,\n StrategyCurrentState\n} from '../../../sharedFlowTypes/StrategyTypes';\nimport { determineFlowByMsidn } from '../main';\n\nexport const askMobileNumber = (): StrategyCurrentState => ({\n type: PossibleTypes.IDENTIFY_FLOW_BY_MSISDN,\n result: RDS.NothingYet()\n});\n\nexport const submitMSISDNAction = createAsyncThunk(\n 'strategy/submitMSISDNAction',\n async (\n {\n window,\n msisdn\n }: {\n window: Window;\n msisdn: string;\n isHeSuccess?: boolean;\n },\n { rejectWithValue }\n ) => {\n try {\n const configs = getConfig();\n const { strategy } = configs;\n const flowObj = await determineFlowByMsidn({ window, internationalMSISDN: msisdn, configs });\n\n switch (strategy) {\n case 'pin-mo-redir-ask-mobile-number':\n return pinMoRedirAskMobileNumber(flowObj, msisdn);\n case 'pin-mo-ask-mobile-number':\n return pinMoAskMobileNumber(flowObj, msisdn);\n case 'pin-combo-ask-mobile-number':\n return pinComboAskMobileNumber(flowObj, msisdn);\n case 'mo-redir-mo-click2sms-one-click-detect-operator-by-ip-or-msisdn':\n return moRedirMoClick2smsOneClickDetectOperatorByIpOrMsisdn(flowObj, msisdn);\n case 'pin-mo-mo-redir-ask-mobile-number':\n return pinMoMoRedirAskMobileNumber(flowObj, msisdn);\n case 'pin-click2sms-ask-mobile-number':\n return pinClick2smsAskMobileNumber(flowObj, msisdn);\n default:\n return rejectWithValue('Unknown strategy');\n }\n } catch (ex) {\n let errorType: IDENTIFYMSISDNEntryErrorTypes;\n switch (ex.type) {\n case 'SEAlreadySubscribed':\n errorType = 'AlreadySubscribed';\n break;\n case 'SEInvalidMSISDN':\n errorType = 'InvalidMSISDN';\n break;\n default:\n errorType = 'UnknownError';\n }\n return rejectWithValue({\n errorType,\n error: ex,\n productUrl: ex.productUrl\n });\n }\n }\n);\n\nexport const headerEnrichmentScript = (flowObj: IFlow, msisdn: string, isHeaderEnrichmentSuccess: boolean) => {\n switch (flowObj.flow) {\n case 'pin':\n tracker.sendOptInFlowEvent('Pin');\n return {\n type: PossibleTypes.PIN,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn,\n isHeaderEnrichmentSuccess,\n ...(flowObj.operator && { operator: flowObj.operator })\n }\n };\n\n case 'mo':\n tracker.sendOptInFlowEvent('Msisdn to sms');\n return {\n type: PossibleTypes.MO,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn,\n isHeaderEnrichmentSuccess,\n ...(flowObj.operator && { operator: flowObj.operator })\n }\n };\n\n case 'moRedir':\n tracker.sendOptInFlowEvent('Redirect');\n return {\n type: PossibleTypes.MO_REDIR,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn,\n isHeaderEnrichmentSuccess\n }\n };\n\n default:\n tracker.sendOptInFlowEvent('Pin');\n return {\n type: PossibleTypes.PIN,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n ...(flowObj.operator && { operator: flowObj.operator })\n }\n };\n }\n};\n\nexport const pinMoAskMobileNumber = (flowObj: IFlow, msisdn: string) => {\n switch (flowObj.flow) {\n case 'pin':\n tracker.sendOptInFlowEvent('Pin');\n return {\n type: PossibleTypes.PIN,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn,\n ...(flowObj.operator && { operator: flowObj.operator })\n }\n };\n\n case 'mo':\n tracker.sendOptInFlowEvent('Msisdn to sms');\n return {\n type: PossibleTypes.MO,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn,\n ...(flowObj.operator && { operator: flowObj.operator })\n }\n };\n default:\n tracker.sendOptInFlowEvent('Pin');\n return {\n type: PossibleTypes.PIN,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n ...(flowObj.operator && { operator: flowObj.operator })\n }\n };\n }\n};\n\nexport const pinComboAskMobileNumber = (flowObj: IFlow, msisdn: string) => {\n switch (flowObj.flow) {\n case 'pin':\n tracker.sendOptInFlowEvent('Pin');\n return {\n type: PossibleTypes.PIN,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn,\n ...(flowObj.operator && { operator: flowObj.operator })\n }\n };\n default:\n tracker.sendOptInFlowEvent('Pin');\n return {\n type: PossibleTypes.PIN,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n ...(flowObj.operator && { operator: flowObj.operator })\n }\n };\n }\n};\n\nconst pinMoRedirAskMobileNumber = (flowObj: IFlow, msisdn: string): StrategyCurrentState => {\n switch (flowObj.flow) {\n case 'pin':\n tracker.sendOptInFlowEvent('Pin');\n return {\n type: PossibleTypes.PIN,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn\n }\n };\n case 'moRedir':\n tracker.sendOptInFlowEvent('Redirect');\n return {\n type: PossibleTypes.MO_REDIR,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig\n }\n };\n default:\n tracker.sendOptInFlowEvent('Pin');\n return {\n type: PossibleTypes.PIN,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig\n }\n };\n }\n};\n\nconst pinMoMoRedirAskMobileNumber = (flowObj: IFlow, msisdn: string): StrategyCurrentState => {\n switch (flowObj.flow) {\n case 'pin':\n tracker.sendOptInFlowEvent('Pin');\n return {\n type: PossibleTypes.PIN,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn\n }\n };\n case 'moRedir':\n tracker.sendOptInFlowEvent('Redirect');\n\n return {\n type: PossibleTypes.MO_REDIR,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn\n }\n };\n case 'mo':\n tracker.sendOptInFlowEvent('Msisdn to sms');\n return {\n type: PossibleTypes.MO,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn\n }\n };\n default:\n tracker.sendOptInFlowEvent('Pin');\n return {\n type: PossibleTypes.PIN,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig\n }\n };\n }\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars-experimental\nconst oneClickMoPinDetectOperatorByIpOrMsisdn = (flowObj: IFlow, msisdn: string): StrategyCurrentState => {\n switch (flowObj.flow) {\n case 'oneClick':\n tracker.sendOptInFlowEvent('3G click');\n return {\n type: PossibleTypes.ONE_CLICK,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn\n }\n };\n\n case 'mo':\n tracker.sendOptInFlowEvent('Msisdn to sms');\n return {\n type: PossibleTypes.MO,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn\n }\n };\n\n default:\n tracker.sendOptInFlowEvent('Pin');\n return {\n type: PossibleTypes.PIN,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n rockman_id: flowObj.rockman_id\n }\n };\n }\n};\n\nexport const moRedirMoClick2smsOneClickDetectOperatorByIpOrMsisdn = (\n flowObj: IFlow,\n msisdn: string\n): StrategyCurrentState => {\n switch (flowObj.flowOnWifi) {\n case 'moRedir':\n tracker.sendOptInFlowEvent('Redirect');\n return {\n type: PossibleTypes.MO_REDIR,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn\n }\n };\n case 'mo':\n tracker.sendOptInFlowEvent('Msisdn to sms');\n return {\n type: PossibleTypes.MO,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn\n }\n };\n default:\n tracker.sendOptInFlowEvent('Redirect');\n return {\n type: PossibleTypes.MO_REDIR,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n rockman_id: flowObj.rockman_id\n }\n };\n }\n};\nexport const pinClick2smsAskMobileNumber = (flowObj: IFlow, msisdn: string): StrategyCurrentState => {\n switch (flowObj.flow) {\n case 'pin':\n tracker.sendOptInFlowEvent('Pin');\n return {\n type: PossibleTypes.PIN,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn\n }\n };\n case 'click2sms':\n tracker.sendOptInFlowEvent('Click to sms');\n return {\n type: PossibleTypes.CLICK2SMS,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn\n }\n };\n\n default:\n tracker.sendOptInFlowEvent('Pin');\n return {\n type: PossibleTypes.CLICK2SMS,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig\n }\n };\n }\n};\n","import { createAsyncThunk } from '@reduxjs/toolkit';\nimport * as RDS from '../../../common-types/RemoteDataState';\n\nimport { PossibleTypes, StrategyCurrentState } from '../../../sharedFlowTypes/StrategyTypes';\nimport { getConfig } from '../../../utilities/getConfig';\nimport { tracker } from '../../../utilities/tracker';\nimport { determineFlowByOperator, getOperators } from '../main';\n\nexport const askOperator = (): StrategyCurrentState => {\n const configs = getConfig();\n const operators = getOperators({ configs });\n return {\n type: PossibleTypes.IDENTIFY_FLOW_BY_OPERATOR_SELECT,\n result: RDS.NothingYet(),\n data: {\n operators\n }\n };\n};\n\nexport const selectOperatorAction = createAsyncThunk(\n 'strategy/selectOperatorAction',\n async (\n {\n operator\n }: {\n operator: string;\n },\n { rejectWithValue }\n ) => {\n try {\n const configs = getConfig();\n\n const flowObj = determineFlowByOperator({\n configs,\n operator\n });\n\n switch (flowObj.flow) {\n case 'pin':\n tracker.sendOptInFlowEvent('Pin');\n return {\n type: PossibleTypes.PIN,\n result: {\n config: flowObj.flowConfig,\n operator\n }\n };\n case 'mo':\n tracker.sendOptInFlowEvent('Msisdn to sms');\n return {\n type: PossibleTypes.MO,\n result: {\n config: flowObj.flowConfig,\n operator\n }\n };\n case 'click2sms':\n tracker.sendOptInFlowEvent('Click to sms');\n return {\n type: PossibleTypes.CLICK2SMS,\n result: {\n config: {\n operators: [operator],\n ...flowObj.flowConfig\n },\n operator\n }\n };\n case 'oneClick':\n tracker.sendOptInFlowEvent('3G click');\n return {\n type: PossibleTypes.ONE_CLICK,\n result: {\n config: flowObj.flowConfig,\n operator,\n autoRedirect: true\n }\n };\n default:\n tracker.sendOptInFlowEvent('Pin');\n\n return {\n type: PossibleTypes.PIN,\n result: RDS.NothingYet()\n };\n }\n } catch (ex) {\n const errorType = 'UnkownError';\n return rejectWithValue({\n errorType,\n error: ex.toString()\n });\n }\n }\n);\n","import * as RDS from '../../../common-types/RemoteDataState';\n\nimport { IOptInFlowName } from '../../../common-types/IOptInFlowName';\nimport { ISupportedFlows, PossibleTypes } from '../../../sharedFlowTypes/StrategyTypes';\nimport { getConfig } from '../../../utilities/getConfig';\nimport { tracker } from '../../../utilities/tracker';\nimport { determineFlowByOperatorFromIp } from '../main';\n\n// @ts-ignore\nconst trackerEventMapping: Record<ISupportedFlows, IOptInFlowName> = {\n mo: 'Msisdn to sms',\n pin: 'Pin',\n oneClick: '3G click',\n moRedir: 'Redirect',\n click2sms: 'Click to sms',\n ussd: 'Msisdn to sms'\n};\n\nconst flowMapping: Record<ISupportedFlows, PossibleTypes> = {\n mo: PossibleTypes.MO,\n pin: PossibleTypes.PIN,\n oneClick: PossibleTypes.ONE_CLICK,\n moRedir: PossibleTypes.MO_REDIR,\n click2sms: PossibleTypes.CLICK2SMS,\n ussd: PossibleTypes.USSD,\n creditCard: PossibleTypes.CREDIT_CARD\n};\nconst detectOperatorByIp = async () => {\n try {\n const configs = getConfig();\n\n const flowObj = await determineFlowByOperatorFromIp({\n window,\n configs\n });\n const getTrackerEventName = (flowType: ISupportedFlows) => trackerEventMapping[flowType];\n\n const flowType = flowObj.flow;\n const event = getTrackerEventName(flowType);\n\n tracker.sendOptInFlowEvent(event);\n\n return {\n type: flowMapping[flowType],\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n operator: flowObj.operator\n }\n };\n } catch (ex) {\n console.error('error', ex);\n }\n};\n\nexport { detectOperatorByIp };\n","import * as RDS from '../../../common-types/RemoteDataState';\n\nimport { IOptInFlowName } from '../../../common-types/IOptInFlowName';\nimport { ISupportedFlows, PossibleTypes } from '../../../sharedFlowTypes/StrategyTypes';\nimport { getConfig } from '../../../utilities/getConfig';\nimport { searchToObject } from '../../../utilities/searchToObject';\nimport { tracker } from '../../../utilities/tracker';\nimport { determineFlowByOperator, getHeaderEnrichmentResult } from '../main';\n\n// @ts-ignore\nconst trackerEventMapping: Record<ISupportedFlows, IOptInFlowName> = {\n mo: 'Msisdn to sms',\n pin: 'Pin',\n oneClick: '3G click',\n moRedir: 'Redirect',\n click2sms: 'Click to sms',\n ussd: 'Msisdn to sms'\n};\n\nconst flowMapping: Record<ISupportedFlows, PossibleTypes> = {\n mo: PossibleTypes.MO,\n pin: PossibleTypes.PIN,\n oneClick: PossibleTypes.ONE_CLICK,\n moRedir: PossibleTypes.MO_REDIR,\n click2sms: PossibleTypes.CLICK2SMS,\n ussd: PossibleTypes.USSD,\n creditCard: PossibleTypes.CREDIT_CARD\n};\nconst handleHeaderEnrichment = async () => {\n const configs = getConfig();\n const defaultConfig = configs?.strategyConfigs.default;\n const defaultFlowType = defaultConfig.flow as ISupportedFlows;\n\n try {\n const search = searchToObject(window) as { operator: string; msisdn: string };\n\n if (!search?.operator) {\n return {\n type: flowMapping[defaultFlowType],\n result: RDS.NothingYet(),\n data: {\n config: defaultConfig?.flowConfig\n }\n };\n }\n\n const isHeaderEnrichmentSuccess = search?.msisdn && search?.msisdn !== '';\n let subscription_url = null;\n let redirect_url = null;\n const flowObj = await determineFlowByOperator({\n operator: search?.operator,\n configs\n });\n const getTrackerEventName = (flowType: ISupportedFlows) => trackerEventMapping[flowType];\n const flowType = flowObj.flow;\n const event = getTrackerEventName(flowType);\n\n tracker.sendOptInFlowEvent(event);\n\n if (flowType === 'oneClick') {\n const heResult = await getHeaderEnrichmentResult();\n if (heResult?.msisdn !== '') {\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-detected', { msisdn: heResult?.msisdn });\n }\n subscription_url = heResult?.subscription_url || null;\n redirect_url = heResult?.redirect_url || null;\n }\n\n return {\n type: flowMapping[flowType],\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n operator: flowObj.operator,\n subscription_url: subscription_url || null,\n redirect_url: redirect_url || null,\n isHeaderEnrichmentSuccess\n }\n };\n } catch (ex) {\n console.error('error', ex);\n return {\n type: flowMapping[defaultFlowType],\n result: RDS.NothingYet(),\n data: {\n config: defaultConfig?.flowConfig\n }\n };\n }\n};\n\nexport { handleHeaderEnrichment };\n","import { IOptInFlowName } from '../../../common-types/IOptInFlowName';\nimport * as RDS from '../../../common-types/RemoteDataState';\nimport { IConfig, IFlow, IScriptHeaderEnrichmentSuccess, PossibleTypes } from '../../../sharedFlowTypes/StrategyTypes';\nimport { formatNumberToE164 } from '../../../utilities/formatNumberToE164';\nimport { getConfig } from '../../../utilities/getConfig';\nimport { tracker } from '../../../utilities/tracker';\nimport { determineFlowByOperator } from '../main';\n\n/**\n * Creates a response object with the given parameters.\n *\n * @param {string} msisdn - The MSISDN (Mobile Station International Subscriber Directory Number).\n * @param {IConfig} config - The configuration object.\n * @param {string | null} operator - The operator (default: null).\n * @return {object} The response that sets the state.\n */\nconst createResponseObject = (msisdn: string, config: IConfig, operator: string | null = null) => ({\n type: PossibleTypes.IDENTIFY_FLOW_BY_MSISDN,\n result: RDS.NothingYet(),\n data: {\n config,\n msisdn,\n operator\n }\n});\n\n/**\n * Injects header enrichment script based on the provided window object.\n *\n * @param {Window} window - The window object containing analytics visitor details.\n * @return {Promise} A promise that resolves based on specific events or timeouts.\n */\nconst injectHeaderEnrichmentScript = async ({ window }: { window: Window }) => {\n const { strategyConfigs } = getConfig();\n const config = strategyConfigs?.default?.flowConfig;\n\n try {\n const page = window?.pac_analytics?.visitor?.page;\n let heMsisdn = window?.pac_analytics?.visitor?.heMsisdn;\n const country = window?.pac_analytics?.visitor?.country;\n\n if (heMsisdn && country) {\n heMsisdn = formatNumberToE164(heMsisdn, country);\n }\n\n // START ABTEST\n let msisdnDetected = false;\n let timerExpired = false;\n\n const abTestPages: any = [];\n\n const timerId: string | number | NodeJS.Timeout = setTimeout(() => {\n if (msisdnDetected === false) {\n timerExpired = true;\n tracker.customEvent('Flow', 'recede-auto', 'msisdn-detection-failure', {\n errorType: '3 second timer expired'\n });\n\n window.isPrelanderClicked = true;\n\n return {\n type: PossibleTypes.PIN,\n result: RDS.Success({}),\n data: {\n config: strategyConfigs?.default?.flowConfig\n }\n };\n }\n }, 3000);\n\n // END ABTEST\n\n // Set up a promise for the 'he-success' event\n window.addEventListener('he-success', (event: IScriptHeaderEnrichmentSuccess) => {\n const { detail } = event as IScriptHeaderEnrichmentSuccess;\n let msisdn;\n if (detail.msisdn) {\n heMsisdn = formatNumberToE164(detail.msisdn, country);\n }\n // ABTEST: ae-video-beyondvr-he-test\n if (abTestPages.includes(page)) {\n if (timerExpired === false) {\n msisdnDetected = true;\n clearTimeout(timerId);\n\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-detected', {\n msisdn\n });\n const flowObj = determineFlowByOperator({\n configs: getConfig(),\n operator: detail?.operator_code\n });\n return headerEnrichmentScript(flowObj, msisdn, true);\n }\n // END ABTEST\n } else {\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-detected', {\n msisdn,\n operator: detail?.operator_code\n });\n const flowObj = determineFlowByOperator({\n configs: getConfig(),\n operator: detail?.operator_code\n });\n return headerEnrichmentScript(flowObj, msisdn, true);\n }\n return createResponseObject(heMsisdn, config);\n });\n\n // Set up a promise for the 'he-fail' event\n window.addEventListener('he-fail', () => createResponseObject(null, config));\n\n // Promise.race to handle whichever comes first\n // return Promise.race([loadScriptPromise, heSuccessPromise, heFailurePromise, timeoutPromise]);\n } catch (err) {\n console.error('Error in header enrichment:', err);\n return createResponseObject(null, config);\n }\n};\n\nconst headerEnrichmentScript = (flowObj: IFlow, msisdn: string, isHeaderEnrichmentSuccess: boolean) => {\n // eslint-disable-next-line no-console\n const preparePayload = (type: string) => ({\n type,\n result: {\n config: flowObj.flowConfig,\n msisdn,\n isHeaderEnrichmentSuccess,\n rockman_id: flowObj.rockman_id,\n ...(flowObj.operator && { operator: flowObj.operator })\n }\n });\n\n // Determine the event name and additional data based on flow type\n let eventName: IOptInFlowName = 'Pin'; // default event name\n switch (flowObj.flow) {\n case 'pin':\n eventName = 'Pin';\n break;\n case 'mo':\n eventName = 'Msisdn to sms';\n break;\n case 'moRedir':\n eventName = 'Redirect';\n break;\n default:\n break;\n }\n\n tracker.sendOptInFlowEvent(eventName);\n return preparePayload(flowObj.flow);\n};\n\nexport { injectHeaderEnrichmentScript };\n","import { createAsyncThunk, createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport * as RDS from '../../common-types/RemoteDataState';\nimport { searchToObject } from '../../utilities/searchToObject';\n\nimport {\n IMockFlowParams,\n IMockPinFlowStates,\n PossibleTypes,\n RootState,\n StrategyCurrentState,\n StrategyState\n} from '../../sharedFlowTypes/StrategyTypes';\nimport { getConfig } from '../../utilities/getConfig';\nimport { determineFlowByOperator } from './main';\nimport { askMobileNumber, submitMSISDNAction } from './strategies/askMobileNumber';\nimport { askOperator, selectOperatorAction } from './strategies/askOperator';\n\nimport { tracker } from '../../utilities/tracker';\nimport { detectOperatorByIp } from './strategies/detectOperatorByIp';\nimport { handleHeaderEnrichment } from './strategies/headerEnrichment';\nimport { injectHeaderEnrichmentScript } from './strategies/injectHeaderEnrichmentScript';\n\nconst initialState: StrategyState = {\n currentState: {\n type: PossibleTypes.IDENTIFY_STRATEGY,\n result: RDS.NothingYet(),\n data: undefined\n }\n};\n\nconst mockStrategyStateByUrlParam = (): StrategyCurrentState => {\n const search = searchToObject(window) as IMockFlowParams<any>;\n\n if (search['mock-flow'] !== undefined) {\n if (search.operator !== undefined) {\n window.operator = search.operator;\n }\n\n switch (search['mock-flow']) {\n case 'pin':\n return {\n type: PossibleTypes.PIN,\n result: RDS.Success({})\n };\n\n case 'mo':\n return {\n type: PossibleTypes.MO,\n result: RDS.Success({})\n };\n case 'moredir':\n return {\n type: PossibleTypes.MO_REDIR,\n result: RDS.Success({})\n };\n case 'oneclick':\n return {\n type: PossibleTypes.ONE_CLICK,\n result: RDS.Success({}),\n data: {\n subscription_url: search['subscription-url']\n }\n };\n case 'click2sms':\n return {\n type: PossibleTypes.CLICK2SMS,\n result: RDS.Success({})\n };\n case 'ussd':\n return {\n type: PossibleTypes.USSD,\n result: RDS.Success({})\n };\n case 'creditcard':\n return {\n type: PossibleTypes.CREDIT_CARD,\n result: RDS.Success({})\n };\n default:\n throw new Error('(mockStrategyStateByUrlParam) Strategy Mock Flow not supported');\n }\n }\n};\n\n/**\n * Identify Strategy\n * @returns {type: 'strategy/identifyStrategy', payload: {type: PossibleTypes.MO, result: IdentifyFlowOptionsResult}}\n * - Add type\n * - Makes a decision on which strategy to use in order to identify the flow\n * - Strategy could be asking user's phone number, selecting an operator etc\n * - all with the intension of getting the flow and its configuration\n * - Flows are usually tied to an operator in the pages config.json\n * - But they could also be single flows\n *\n */\n\nexport const identifyStrategy = createAsyncThunk('strategy/identifyStrategy', async () => {\n const configs = getConfig();\n const { strategy, strategyConfigs } = configs;\n // const { isUseMsisdnPrefix } = strategyConfigs;\n const search = searchToObject(window) as IMockFlowParams<IMockPinFlowStates>;\n if (search['mock-flow'] !== undefined) {\n return mockStrategyStateByUrlParam();\n }\n if (\n (search['show-pin-entry'] && search['show-pin-entry'] === '1') ||\n (search['show-thank-you'] && search['show-thank-you'] === '1')\n ) {\n const flowObj = determineFlowByOperator({\n configs,\n operator: search.operator\n });\n const strategyResult: StrategyCurrentState = {\n type: PossibleTypes.PIN,\n result: RDS.Success({}),\n data: {\n config: flowObj?.flowConfig || strategyConfigs?.default?.flowConfig\n }\n };\n return strategyResult;\n }\n\n if (strategy.includes('ask-operator')) {\n return askOperator();\n }\n if (strategy.includes('detect-operator-by-ip')) {\n return detectOperatorByIp();\n }\n if (strategy?.includes('ask-mobile-number')) {\n return askMobileNumber();\n }\n\n if (strategy?.includes('header-enrichment') && strategy !== 'header-enrichment-script') {\n const n = await handleHeaderEnrichment();\n // @ts-ignore\n return n;\n }\n\n switch (strategy) {\n // REOVING THIS AS IT INJECTS UNUSED CODE\n case 'header-enrichment-script':\n // eslint-disable-next-line no-return-await\n return injectHeaderEnrichmentScript({\n window\n });\n case 'pin': {\n tracker.sendOptInFlowEvent('Pin');\n return {\n type: PossibleTypes.PIN,\n result: RDS.Success({}),\n data: {\n config: strategyConfigs?.default?.flowConfig\n }\n };\n }\n case 'mo':\n tracker.sendOptInFlowEvent('Msisdn to sms');\n return {\n type: PossibleTypes.MO,\n result: RDS.Success({}),\n data: {\n config: strategyConfigs?.default?.flowConfig\n }\n };\n case 'mo-redir':\n return {\n type: PossibleTypes.MO_REDIR,\n result: RDS.Success({}),\n data: {\n config: strategyConfigs?.default?.flowConfig\n }\n };\n case 'one-click':\n tracker.sendOptInFlowEvent('Redirect');\n return {\n type: PossibleTypes.ONE_CLICK,\n result: RDS.Success({}),\n data: {\n config: strategyConfigs?.default?.flowConfig\n }\n };\n case 'click2sms':\n tracker.sendOptInFlowEvent('Click to sms');\n return {\n type: PossibleTypes.CLICK2SMS,\n result: RDS.Success({}),\n data: {\n config: strategyConfigs?.default?.flowConfig\n }\n };\n case 'ussd':\n tracker.sendOptInFlowEvent('USSD');\n return {\n type: PossibleTypes.USSD,\n result: RDS.Success({}),\n data: {\n config: strategyConfigs?.default?.flowConfig\n }\n };\n case 'credit-card':\n // @ts-ignore\n tracker.sendOptInFlowEvent('Credit card');\n return {\n type: PossibleTypes.CREDIT_CARD,\n result: RDS.Success({}),\n data: {\n config: strategyConfigs?.default?.flowConfig\n }\n };\n default:\n throw new Error('Strategy not supported');\n }\n});\n\nexport const setStrategyExtraData = createAsyncThunk(\n 'strategy/setStrategyExtraData',\n async ({ type, data }: { type: PossibleTypes; data: any }) => ({\n type,\n result: RDS.NothingYet(),\n data\n })\n);\n\nexport const strategySlice = createSlice({\n name: 'strategy',\n initialState,\n reducers: {\n // Define synchronous reducers as needed\n },\n extraReducers: (builder) => {\n // @ts-ignore\n builder\n .addCase(identifyStrategy.pending, (state) => {\n state.currentState = {\n type: PossibleTypes.IDENTIFY_STRATEGY,\n result: RDS.Loading()\n };\n })\n // @ts-ignore\n .addCase(identifyStrategy.fulfilled, (state, action: PayloadAction<StrategyCurrentState>) => {\n state.currentState = action.payload;\n })\n .addCase(identifyStrategy.rejected, (state, action) => {\n state.currentState = {\n type: PossibleTypes.IDENTIFY_STRATEGY,\n result: RDS.Failure(action.error.message)\n };\n })\n .addCase(submitMSISDNAction.pending, (state) => {\n state.currentState = {\n type: PossibleTypes.IDENTIFY_FLOW_BY_MSISDN,\n result: RDS.Loading()\n };\n })\n .addCase(submitMSISDNAction.fulfilled, (state, action: PayloadAction<StrategyCurrentState>) => {\n state.currentState = action.payload;\n })\n .addCase(submitMSISDNAction.rejected, (state, action) => {\n state.currentState = {\n type: PossibleTypes.IDENTIFY_FLOW_BY_MSISDN,\n result: RDS.Failure(action.payload)\n };\n })\n .addCase(setStrategyExtraData.fulfilled, (state, action) => {\n state.currentState = action.payload;\n })\n .addCase(selectOperatorAction.pending, (state) => {\n state.currentState = {\n type: PossibleTypes.IDENTIFY_FLOW_BY_OPERATOR_SELECT,\n result: RDS.Loading()\n };\n })\n .addCase(selectOperatorAction.fulfilled, (state, action: PayloadAction<any>) => {\n state.currentState = action.payload;\n })\n .addCase(selectOperatorAction.rejected, (state, action) => {\n state.currentState = {\n type: PossibleTypes.IDENTIFY_FLOW_BY_OPERATOR_SELECT,\n result: RDS.Failure(action.payload)\n };\n });\n }\n});\n\nexport const selectStrategyState = (state: RootState) => state.strategy;\nexport const strategyReducer = strategySlice.reducer;\n"],"names":["PossibleTypes","countryToPhoneCode","AE","BH","CI","SN","KW","AT","CZ","OM","PK","PE","formatNumberToE164","number","isoCountryCode","phoneCode","toUpperCase","Error","cleanNumber","replace","startsWith","concat","identify","_a","window","slug","country","msisdn","device","offer","rockmanId","languageCode","locationHref","encodeURIComponent","location","href","host","DEV_BASE_URL","urlParams","URLSearchParams","action","offerId","rockman_id","page","language_code","toString","url","fetch","_b","sent","json","determineFlowByMsidn","internationalMSISDN","configs","submissionError","type","match","join","defaultFlowConfig","_c","strategyConfigs","default","config","flowConfig","operatorsConfig","_d","operators","indentifyFlow","__awaiter","_this","pac_analytics","visitor","theResult","_f","flow","operator","cannotDetect","success","message","hlrError","_e","indexOf","__assign","determineFlowByOperator","determineFlowByOperatorFromIp","tryGetIPRangeName","submitMSISDNAction","createAsyncThunk","rejectWithValue","getConfig","strategy","flowObj","pinMoRedirAskMobileNumber","pinMoAskMobileNumber","pinComboAskMobileNumber","moRedirMoClick2smsOneClickDetectOperatorByIpOrMsisdn","pinMoMoRedirAskMobileNumber","pinClick2smsAskMobileNumber","errorType","ex_1","error","productUrl","tracker","sendOptInFlowEvent","PIN","result","RDS.NothingYet","data","MO","MO_REDIR","flowOnWifi","CLICK2SMS","askOperator","Object","keys","getOperators","IDENTIFY_FLOW_BY_OPERATOR_SELECT","selectOperatorAction","ONE_CLICK","autoRedirect","ex","trackerEventMapping","mo","pin","oneClick","moRedir","click2sms","ussd","flowMapping","USSD","creditCard","CREDIT_CARD","createResponseObject","IDENTIFY_FLOW_BY_MSISDN","injectHeaderEnrichmentScript","page_1","heMsisdn_1","heMsisdn","country_1","_h","_g","msisdnDetected_1","timerExpired_1","abTestPages_1","timerId_1","setTimeout","customEvent","isPrelanderClicked","RDS.Success","addEventListener","event","detail","includes","operator_code","headerEnrichmentScript","clearTimeout","err","console","isHeaderEnrichmentSuccess","eventName","initialState","currentState","IDENTIFY_STRATEGY","undefined","mockStrategyStateByUrlParam","search","searchToObject","subscription_url","identifyStrategy","getTrackerEventName","flowType","event_1","defaultConfig","defaultFlowType","redirect_url","searchObj","decodedUrl","atob","newUrl","URL","get","heResult","_j","setStrategyExtraData","strategyReducer","createSlice","name","reducers","extraReducers","builder","addCase","pending","state","RDS.Loading","fulfilled","payload","rejected","RDS.Failure","reducer"],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ declare type ConfigDetails = {
2
+ host: string;
3
+ slug: string;
4
+ country: string;
5
+ device?: 'smart' | 'feature';
6
+ queryString?: Array<[string, string]>;
7
+ automaticallySubmitAllOperators?: boolean;
8
+ operators?: string[];
9
+ service: string;
10
+ offer?: string;
11
+ };
12
+ declare type ISupportedFlows = 'pin' | 'mo' | 'oneClick' | 'click2sms' | 'moRedir' | 'ussd' | 'tpayHe' | 'creditCard';
13
+ declare type IFlow = {
14
+ flow: ISupportedFlows;
15
+ flowOnWifi?: ISupportedFlows;
16
+ operator?: string;
17
+ flowConfig: ConfigDetails;
18
+ default?: IFlow;
19
+ rockman_id?: string;
20
+ };
21
+ declare type StrategyConfig = {
22
+ operators: {
23
+ [key: string]: IFlow;
24
+ };
25
+ default: IFlow;
26
+ isUseMsisdnPrefix?: boolean;
27
+ };
28
+ declare type IStrategy = {
29
+ strategy: IStrategyNames;
30
+ country: string;
31
+ strategyConfigs: StrategyConfig;
32
+ };
33
+ declare type IStrategyNames = 'pin' | 'mo' | 'mo-redir' | 'click2sms' | 'one-click' | 'ussd' | 'tpay-he' | 'credit-card' | 'tallyman-one-click' | 'pin-mo-ask-operator' | 'pin-mo-ask-mobile-number' | 'pin-one-click-ask-operator' | 'pin-one-click-detect-operator-by-ip' | 'one-click-mo-pin-detect-operator-by-ip-or-msisdn' | 'pin-click2sms-ask-operator' | 'mo-redir-one-click-detect-operator-by-ip' | 'pin-mo-redir-ask-mobile-number' | 'pin-click2sms-ask-mobile-number' | 'mo-one-click-detect-operator-by-ip' | 'click2sms-one-click-detect-operator-by-ip' | 'pin-header-enrichment' | 'pin-msisdn-fowarding-pin-header-enrichment' | 'he-pin-mo-redir-header-enrichment' | 'he-pin-one-click-header-enrichment' | 'he-pin-one-click-ask-operator' | 'click2sms-one-click-ask-operator' | 'pin-mo-detect-operator-by-ip' | 'he-mo-redir-one-click-header-enrichment' | 'pin-combo-ask-mobile-number' | 'header-enrichment-script' | 'mo-redir-mo-click2sms-one-click-detect-operator-by-ip-or-msisdn' | 'pin-mo-mo-redir-ask-mobile-number';
34
+
35
+ export type { ConfigDetails as C, IStrategy as I };
@@ -329,4 +329,4 @@ interface RootState {
329
329
  creditCardFlow?: CreditCardFlowState;
330
330
  }
331
331
 
332
- export { type ILOADOC2SMSSuccess as $, type IIdentifyFlowByHePayload as A, type IIdentfyFlowByMsisdnNextAction as B, type ConfigDetails as C, type IIdentfyFlowByOperatorNextAction as D, type IIdentfyFlowByIPOperatorNextAction as E, type IIdenyifyFlowByMsisdnSumbitNextData as F, type IIdenyifyFlowByMsisdnPayload as G, type HEResult as H, type IDENTIFYMSISDNEntryFailure as I, type IIdenyifyStrategyPayload as J, type IStrategyCurrentState as K, type IStrategyIDentifyUserResult as L, type IMockFlows as M, type IMockFlowParams as N, type OPERATORSelectFailure as O, PossibleTypes as P, type IScriptHeaderEnrichmentSuccess as Q, type ExtraStrategyData as R, type StrategyCurrentState as S, type IMockPinFlowStates as T, type RootState as U, type LOAD_OC2SMSState as V, type Click2smsFlowState as W, type IWithMultiKeywordShortcode as X, type Click2smsFlowCurrentState as Y, type MSISDNEntryErrorTypes as Z, type ILOADOC2SMSFailure as _, type IDENTIFYMSISDNEntrySuccess as a, type ILoadOc2click2smsPayload as a0, type IKeywordShortcode as a1, type IClick2smsConfig as a2, type SingleSubmissionResult as a3, type MultiOperatorSubmissionResult as a4, type ICheckSubscriptionResult as a5, type IFetchResult as a6, type StrategyState as b, type IIdentifyResult as c, type IConfig as d, type ISupportedFlows as e, type IFlow as f, type StrategyConfig as g, type IStrategy as h, type IStrategyNames as i, type IHash as j, type IDENTIFYMSISDNEntryErrorTypes as k, type IdentifyFlowOptionsResult as l, type OPERATORSelectSuccess as m, type IDETECTYOPERATOBYIPFailure as n, type IDETECTYOPERATOBYIPSuccess as o, type IDENTIFY_OPERATOR_MSISDNEntrySuccess as p, type IDENTIFY_FLOW_HESuccess as q, type OPERATORSelectFlowIdentifyFailure as r, type OPERATORSelectFlowIdentifySuccess as s, type IDENTIFYFailure as t, type IDENTIFYSuccess as u, type IOperatorSelectFlowIdentifyPayload as v, type IDetectOperatorByIpPayload as w, type IOperatorSelectPayload as x, type ISubmitMsisdnPayload as y, type IIdentifyFlowByIpOperatorPayload as z };
332
+ export { type ILOADOC2SMSSuccess as $, type IIdentifyFlowByHePayload as A, type IIdentfyFlowByMsisdnNextAction as B, type ConfigDetails as C, type IIdentfyFlowByOperatorNextAction as D, type IIdentfyFlowByIPOperatorNextAction as E, type IIdenyifyFlowByMsisdnSumbitNextData as F, type IIdenyifyFlowByMsisdnPayload as G, type HEResult as H, type IDENTIFYMSISDNEntryFailure as I, type IIdenyifyStrategyPayload as J, type IStrategyCurrentState as K, type IStrategyIDentifyUserResult as L, type IMockFlows as M, type IMockFlowParams as N, type OPERATORSelectFailure as O, PossibleTypes as P, type IScriptHeaderEnrichmentSuccess as Q, type ExtraStrategyData as R, type StrategyCurrentState as S, type IMockPinFlowStates as T, type RootState as U, type LOAD_OC2SMSState as V, type Click2smsFlowState as W, type IWithMultiKeywordShortcode as X, type Click2smsFlowCurrentState as Y, type MSISDNEntryErrorTypes as Z, type ILOADOC2SMSFailure as _, type IDENTIFYMSISDNEntrySuccess as a, type ILoadOc2click2smsPayload as a0, type IKeywordShortcode as a1, type IClick2smsConfig as a2, type SingleSubmissionResult as a3, type MultiOperatorSubmissionResult as a4, type ICheckSubscriptionResult as a5, type IFetchResult as a6, type IConfig as b, type StrategyState as c, type IIdentifyResult as d, type ISupportedFlows as e, type IFlow as f, type StrategyConfig as g, type IStrategy as h, type IStrategyNames as i, type IHash as j, type IDENTIFYMSISDNEntryErrorTypes as k, type IdentifyFlowOptionsResult as l, type OPERATORSelectSuccess as m, type IDETECTYOPERATOBYIPFailure as n, type IDETECTYOPERATOBYIPSuccess as o, type IDENTIFY_OPERATOR_MSISDNEntrySuccess as p, type IDENTIFY_FLOW_HESuccess as q, type OPERATORSelectFlowIdentifyFailure as r, type OPERATORSelectFlowIdentifySuccess as s, type IDENTIFYFailure as t, type IDENTIFYSuccess as u, type IOperatorSelectFlowIdentifyPayload as v, type IDetectOperatorByIpPayload as w, type IOperatorSelectPayload as x, type ISubmitMsisdnPayload as y, type IIdentifyFlowByIpOperatorPayload as z };
@@ -1,5 +1,5 @@
1
- import { V as LOAD_OC2SMSState, W as Click2smsFlowState, j as IHash, X as IWithMultiKeywordShortcode, Y as Click2smsFlowCurrentState } from './StrategyTypes-ByizSvvk.js';
2
- export { a5 as ICheckSubscriptionResult, a2 as IClick2smsConfig, a6 as IFetchResult, a1 as IKeywordShortcode, _ as ILOADOC2SMSFailure, $ as ILOADOC2SMSSuccess, a0 as ILoadOc2click2smsPayload, Z as MSISDNEntryErrorTypes, a4 as MultiOperatorSubmissionResult, a3 as SingleSubmissionResult } from './StrategyTypes-ByizSvvk.js';
1
+ import { V as LOAD_OC2SMSState, W as Click2smsFlowState, j as IHash, X as IWithMultiKeywordShortcode, Y as Click2smsFlowCurrentState } from './StrategyTypes-BiyFn-Lp.js';
2
+ export { a5 as ICheckSubscriptionResult, a2 as IClick2smsConfig, a6 as IFetchResult, a1 as IKeywordShortcode, _ as ILOADOC2SMSFailure, $ as ILOADOC2SMSSuccess, a0 as ILoadOc2click2smsPayload, Z as MSISDNEntryErrorTypes, a4 as MultiOperatorSubmissionResult, a3 as SingleSubmissionResult } from './StrategyTypes-BiyFn-Lp.js';
3
3
  import * as redux from 'redux';
4
4
  import * as _reduxjs_toolkit from '@reduxjs/toolkit';
5
5
  import * as _reduxjs_toolkit_dist_createAsyncThunk from '@reduxjs/toolkit/dist/createAsyncThunk';
@@ -1,36 +1,4 @@
1
- declare type ConfigDetails = {
2
- host: string;
3
- slug: string;
4
- country: string;
5
- device?: 'smart' | 'feature';
6
- queryString?: Array<[string, string]>;
7
- automaticallySubmitAllOperators?: boolean;
8
- operators?: string[];
9
- service: string;
10
- offer?: string;
11
- };
12
- declare type ISupportedFlows = 'pin' | 'mo' | 'oneClick' | 'click2sms' | 'moRedir' | 'ussd' | 'tpayHe' | 'creditCard';
13
- declare type IFlow = {
14
- flow: ISupportedFlows;
15
- flowOnWifi?: ISupportedFlows;
16
- operator?: string;
17
- flowConfig: ConfigDetails;
18
- default?: IFlow;
19
- rockman_id?: string;
20
- };
21
- declare type StrategyConfig = {
22
- operators: {
23
- [key: string]: IFlow;
24
- };
25
- default: IFlow;
26
- isUseMsisdnPrefix?: boolean;
27
- };
28
- declare type IStrategy = {
29
- strategy: IStrategyNames;
30
- country: string;
31
- strategyConfigs: StrategyConfig;
32
- };
33
- declare type IStrategyNames = 'pin' | 'mo' | 'mo-redir' | 'click2sms' | 'one-click' | 'ussd' | 'tpay-he' | 'credit-card' | 'tallyman-one-click' | 'pin-mo-ask-operator' | 'pin-mo-ask-mobile-number' | 'pin-one-click-ask-operator' | 'pin-one-click-detect-operator-by-ip' | 'one-click-mo-pin-detect-operator-by-ip-or-msisdn' | 'pin-click2sms-ask-operator' | 'mo-redir-one-click-detect-operator-by-ip' | 'pin-mo-redir-ask-mobile-number' | 'pin-click2sms-ask-mobile-number' | 'mo-one-click-detect-operator-by-ip' | 'click2sms-one-click-detect-operator-by-ip' | 'pin-header-enrichment' | 'pin-msisdn-fowarding-pin-header-enrichment' | 'he-pin-mo-redir-header-enrichment' | 'he-pin-one-click-header-enrichment' | 'he-pin-one-click-ask-operator' | 'click2sms-one-click-ask-operator' | 'pin-mo-detect-operator-by-ip' | 'he-mo-redir-one-click-header-enrichment' | 'pin-combo-ask-mobile-number' | 'header-enrichment-script' | 'mo-redir-mo-click2sms-one-click-detect-operator-by-ip-or-msisdn' | 'pin-mo-mo-redir-ask-mobile-number';
1
+ import { I as IStrategy } from './Strategy-CSis_Epd.js';
34
2
 
35
3
  declare function setConfig(userConfig: IStrategy): void;
36
4
  declare function getConfig(): IStrategy;
@@ -1,11 +1,12 @@
1
1
  import { R as RemoteDataState } from './RemoteDataState-D1aFrz8W.js';
2
2
  export { a as RDS } from './RemoteDataState-D1aFrz8W.js';
3
- import { S as StrategyCurrentState, I as IDENTIFYMSISDNEntryFailure, a as IDENTIFYMSISDNEntrySuccess, P as PossibleTypes, C as ConfigDetails, b as StrategyState } from './StrategyTypes-ByizSvvk.js';
4
- export { R as ExtraStrategyData, H as HEResult, d as IConfig, t as IDENTIFYFailure, k as IDENTIFYMSISDNEntryErrorTypes, u as IDENTIFYSuccess, q as IDENTIFY_FLOW_HESuccess, p as IDENTIFY_OPERATOR_MSISDNEntrySuccess, n as IDETECTYOPERATOBYIPFailure, o as IDETECTYOPERATOBYIPSuccess, w as IDetectOperatorByIpPayload, f as IFlow, j as IHash, E as IIdentfyFlowByIPOperatorNextAction, B as IIdentfyFlowByMsisdnNextAction, D as IIdentfyFlowByOperatorNextAction, A as IIdentifyFlowByHePayload, z as IIdentifyFlowByIpOperatorPayload, c as IIdentifyResult, G as IIdenyifyFlowByMsisdnPayload, F as IIdenyifyFlowByMsisdnSumbitNextData, J as IIdenyifyStrategyPayload, N as IMockFlowParams, M as IMockFlows, T as IMockPinFlowStates, v as IOperatorSelectFlowIdentifyPayload, x as IOperatorSelectPayload, Q as IScriptHeaderEnrichmentSuccess, h as IStrategy, K as IStrategyCurrentState, L as IStrategyIDentifyUserResult, i as IStrategyNames, y as ISubmitMsisdnPayload, e as ISupportedFlows, l as IdentifyFlowOptionsResult, O as OPERATORSelectFailure, r as OPERATORSelectFlowIdentifyFailure, s as OPERATORSelectFlowIdentifySuccess, m as OPERATORSelectSuccess, U as RootState, g as StrategyConfig } from './StrategyTypes-ByizSvvk.js';
3
+ import { S as StrategyCurrentState, I as IDENTIFYMSISDNEntryFailure, a as IDENTIFYMSISDNEntrySuccess, P as PossibleTypes, C as ConfigDetails, b as IConfig, c as StrategyState } from './StrategyTypes-BiyFn-Lp.js';
4
+ export { R as ExtraStrategyData, H as HEResult, t as IDENTIFYFailure, k as IDENTIFYMSISDNEntryErrorTypes, u as IDENTIFYSuccess, q as IDENTIFY_FLOW_HESuccess, p as IDENTIFY_OPERATOR_MSISDNEntrySuccess, n as IDETECTYOPERATOBYIPFailure, o as IDETECTYOPERATOBYIPSuccess, w as IDetectOperatorByIpPayload, f as IFlow, j as IHash, E as IIdentfyFlowByIPOperatorNextAction, B as IIdentfyFlowByMsisdnNextAction, D as IIdentfyFlowByOperatorNextAction, A as IIdentifyFlowByHePayload, z as IIdentifyFlowByIpOperatorPayload, d as IIdentifyResult, G as IIdenyifyFlowByMsisdnPayload, F as IIdenyifyFlowByMsisdnSumbitNextData, J as IIdenyifyStrategyPayload, N as IMockFlowParams, M as IMockFlows, T as IMockPinFlowStates, v as IOperatorSelectFlowIdentifyPayload, x as IOperatorSelectPayload, Q as IScriptHeaderEnrichmentSuccess, h as IStrategy, K as IStrategyCurrentState, L as IStrategyIDentifyUserResult, i as IStrategyNames, y as ISubmitMsisdnPayload, e as ISupportedFlows, l as IdentifyFlowOptionsResult, O as OPERATORSelectFailure, r as OPERATORSelectFlowIdentifyFailure, s as OPERATORSelectFlowIdentifySuccess, m as OPERATORSelectSuccess, U as RootState, g as StrategyConfig } from './StrategyTypes-BiyFn-Lp.js';
5
5
  import { useSelector } from 'react-redux';
6
6
  import * as _reduxjs_toolkit from '@reduxjs/toolkit';
7
7
  import * as _reduxjs_toolkit_dist_createAsyncThunk from '@reduxjs/toolkit/dist/createAsyncThunk';
8
8
  import * as redux from 'redux';
9
+ import { C as ConfigDetails$1 } from './Strategy-CSis_Epd.js';
9
10
  import './CreditCardTypes-B-IT-l6I.js';
10
11
  import './MoRedirTypes-4tEJjT1g.js';
11
12
  import './MoTypes-D-UK92gs.js';
@@ -80,7 +81,25 @@ declare const identifyStrategy: _reduxjs_toolkit.AsyncThunk<StrategyCurrentState
80
81
  config: ConfigDetails;
81
82
  operator: string;
82
83
  };
84
+ } | {
85
+ type: PossibleTypes;
86
+ result: RemoteDataState<unknown, unknown>;
87
+ data: {
88
+ config: ConfigDetails$1;
89
+ operator?: undefined;
90
+ subscription_url?: undefined;
91
+ redirect_url?: undefined;
92
+ isHeaderEnrichmentSuccess?: undefined;
93
+ };
94
+ } | {
95
+ type: PossibleTypes;
96
+ result: RemoteDataState<unknown, unknown>;
97
+ data: {
98
+ config: IConfig;
99
+ msisdn: string;
100
+ operator: string;
101
+ };
83
102
  }, void, _reduxjs_toolkit_dist_createAsyncThunk.AsyncThunkConfig>;
84
103
  declare const strategyReducer: redux.Reducer<StrategyState, redux.UnknownAction, StrategyState>;
85
104
 
86
- export { ConfigDetails, IDENTIFYMSISDNEntryFailure, IDENTIFYMSISDNEntrySuccess, PossibleTypes, StrategyCurrentState, StrategyState, identifyStrategy, selectOperatorAction, strategy, strategyReducer, submitMSISDNAction, useStrategyState };
105
+ export { ConfigDetails, IConfig, IDENTIFYMSISDNEntryFailure, IDENTIFYMSISDNEntrySuccess, PossibleTypes, StrategyCurrentState, StrategyState, identifyStrategy, selectOperatorAction, strategy, strategyReducer, submitMSISDNAction, useStrategyState };
package/dist/ussdFlow.js CHANGED
@@ -1,2 +1,2 @@
1
- import{__awaiter as t,__generator as r,__assign as e,__read as n}from"tslib";import{createAsyncThunk as s,createSlice as a}from"@reduxjs/toolkit";import{S as o,N as c,L as i,F as u}from"./RemoteDataState-lcf8PfJd.js";import{checkSubscriptionHander as d}from"./checkSubscriptionHander.js";import{searchToObject as l}from"./searchToObject.js";import{s as m}from"./storeMsisdn-Cjq8_qYH.js";import{t as f}from"./tracker-DaaILhEr.js";import"./checkSubscriptionByRockmanIdOnly-BwR1un1L.js";import"./helpers-xPhGBX-B.js";import"pacman-client";import"uuid";var S=function(t){return t((function(t){return t.ussdFlow.currentState}))};function p(t){var r=t.msisdnEntry;return function(t){return t.type,r(t.result)}}var v=function(s,a,o,c,i,u,d,l,m){return t(void 0,void 0,void 0,(function(){var t,f,S;return r(this,(function(r){return t=new URLSearchParams(e({action:"ussd",slug:a,country:o,msisdn:c,device:i,offerId:u.toString(),rockman_id:d},l&&{search:l})),m&&m.split("&").forEach((function(r){var e=n(r.split("="),2),s=e[0],a=e[1];s&&t.append(s,a)})),f=s.DEV_BASE_URL||"",S="".concat(f,"/tallyman/v1/?").concat(t.toString()),[2,fetch(S).then((function(t){return t.json()}))]}))}))};function y(n,s,a,o){return t(this,void 0,void 0,(function(){var t;return r(this,(function(r){return t=e({offer:n.pac_analytics.visitor.offer},s||{}),[2,w(n,t,a,o)]}))}))}function w(e,n,s,a){return t(this,void 0,void 0,(function(){var t,o,c,i,u,d,l,m,f,S,p;return r(this,(function(r){switch(r.label){case 0:return t=n.slug,o=n.country,c=n.device,i=n.offer,u=e.location.search.substr(1)||"",d=a?"&".concat(Object.keys(a).map((function(t){return"".concat(t,"=").concat(a[t])})).join("&")):"",l=s.match(/\d+/gi).join(""),m=e.pac_analytics.visitor.rockmanId,[4,v(e,t,o,l,c,i,m,u,d)];case 1:if(!1===(f=r.sent()).success)throw S="ALREADY SUBSCRIBED"===f.message?"AlreadySubscribed":"InvalidMSISDN",(p=new Error("".concat(S,":\n").concat(f.message))).type=S,console.error(p),p;return[2,f]}}))}))}var h={currentState:{type:"MSISDNEntry",result:o({keyword:"TEST OK",shortcode:"777"})}},b={currentState:{type:"MSISDNEntry",result:u({errorType:"InvalidMSISDN",error:"Invalid Mobile Number"})}},I={currentState:{type:"MSISDNEntry",result:c()}},E=function(t){var r=l(t);if(!r["mock-flow"])return I;switch(r["current-state"]){case"msisdn-entry-failure-state":return b;case"msisdn-entry-success-state":return h;default:return console.error("Mock Flow not supported"),I}}(window),k=s("ussdFlow/submitMSISDNAction",(function(n,s){var a=n.window,c=n.msisdn,i=n.extraParams,u=s.getState,l=s.rejectWithValue;return t(void 0,void 0,void 0,(function(){var t,n,s,S,p;return r(this,(function(r){switch(r.label){case 0:t=u(),n=t.strategy.currentState.data.config,r.label=1;case 1:return r.trys.push([1,5,,6]),f.advancedInFlow("tallyman.v1-ussd","msisdn-submitted",{msisdn:c}),[4,y(a,n,c,i)];case 2:return s=r.sent(),f.advancedInFlow("tallyman.v1-ussd","msisdn-submission-success",{msisdn:c}),i&&i.storeMsisdn&&"true"===i.storeMsisdn?[4,m(c).then((function(t){t&&t.data&&t.data.success?f.customEvent("Flow","advance-auto","msisdn-stored-success"):f.customEvent("Flow","advance-auto","msisdn-stored-failed")})).catch((function(t){f.customEvent("Flow","advance-auto","msisdn-stored-error",t)}))]:[3,4];case 3:r.sent(),r.label=4;case 4:return d({window:a,flow:"tallyman.v1-ussd",action:"sale",args:{msisdn:c}}),[2,{type:"MSISDNEntry",result:o(e({},s))}];case 5:switch(S=r.sent(),console.warn(S),p=void 0,S.type){case"AlreadySubscribed":p="AlreadySubscribed";break;case"InvalidMSISDN":p="InvalidMSISDN";break;default:p="UnknownError"}return f.recedeInFlow("tallyman.v1-ussd","msisdn-submission-failure",{msisdn:c,errorType:p||"UnknownError"}),[2,l({errorType:p,productUrl:S.productUrl})];case 6:return[2]}}))}))})),M=a({name:"ussdFlow",initialState:E,reducers:{backToStartAction:function(t){f.recedeInFlow("tallyman.v1-ussd","ussd-state","requested to change phone number"),t.currentState={type:"MSISDNEntry",result:c()}}},extraReducers:function(t){t.addCase(k.pending,(function(t){t.currentState={type:"MSISDNEntry",result:i()}})).addCase(k.fulfilled,(function(t,r){t.currentState=r.payload})).addCase(k.rejected,(function(t,r){t.currentState={type:"MSISDNEntry",result:u(r.payload)}}))}}),D=M.reducer,j=M.actions.backToStartAction;export{j as backToStartAction,k as submitMSISDNAction,S as useUssdFlowState,p as ussdFlowMatch,D as ussdFlowReducer};
1
+ import{__awaiter as t,__generator as r,__assign as e,__read as n}from"tslib";import{createAsyncThunk as s,createSlice as a}from"@reduxjs/toolkit";import{S as o,N as c,L as i,F as u}from"./RemoteDataState-lcf8PfJd.js";import{checkSubscriptionHander as d}from"./checkSubscriptionHander.js";import{searchToObject as l}from"./searchToObject.js";import{s as m}from"./storeMsisdn-Cjq8_qYH.js";import{t as f}from"./tracker-DaaILhEr.js";import"./helpers-xPhGBX-B.js";import"pacman-client";import"uuid";var S=function(t){return t((function(t){return t.ussdFlow.currentState}))};function v(t){var r=t.msisdnEntry;return function(t){return t.type,r(t.result)}}var p=function(s,a,o,c,i,u,d,l,m){return t(void 0,void 0,void 0,(function(){var t,f,S;return r(this,(function(r){return t=new URLSearchParams(e({action:"ussd",slug:a,country:o,msisdn:c,device:i,offerId:u.toString(),rockman_id:d},l&&{search:l})),m&&m.split("&").forEach((function(r){var e=n(r.split("="),2),s=e[0],a=e[1];s&&t.append(s,a)})),f=s.DEV_BASE_URL||"",S="".concat(f,"/tallyman/v1/?").concat(t.toString()),[2,fetch(S).then((function(t){return t.json()}))]}))}))};function y(n,s,a,o){return t(this,void 0,void 0,(function(){var t;return r(this,(function(r){return t=e({offer:n.pac_analytics.visitor.offer},s||{}),[2,w(n,t,a,o)]}))}))}function w(e,n,s,a){return t(this,void 0,void 0,(function(){var t,o,c,i,u,d,l,m,f,S,v;return r(this,(function(r){switch(r.label){case 0:return t=n.slug,o=n.country,c=n.device,i=n.offer,u=e.location.search.substr(1)||"",d=a?"&".concat(Object.keys(a).map((function(t){return"".concat(t,"=").concat(a[t])})).join("&")):"",l=s.match(/\d+/gi).join(""),m=e.pac_analytics.visitor.rockmanId,[4,p(e,t,o,l,c,i,m,u,d)];case 1:if(!1===(f=r.sent()).success)throw S="ALREADY SUBSCRIBED"===f.message?"AlreadySubscribed":"InvalidMSISDN",(v=new Error("".concat(S,":\n").concat(f.message))).type=S,console.error(v),v;return[2,f]}}))}))}var h={currentState:{type:"MSISDNEntry",result:o({keyword:"TEST OK",shortcode:"777"})}},b={currentState:{type:"MSISDNEntry",result:u({errorType:"InvalidMSISDN",error:"Invalid Mobile Number"})}},I={currentState:{type:"MSISDNEntry",result:c()}},E=function(t){var r=l(t);if(!r["mock-flow"])return I;switch(r["current-state"]){case"msisdn-entry-failure-state":return b;case"msisdn-entry-success-state":return h;default:return console.error("Mock Flow not supported"),I}}(window),M=s("ussdFlow/submitMSISDNAction",(function(n,s){var a=n.window,c=n.msisdn,i=n.extraParams,u=s.getState,l=s.rejectWithValue;return t(void 0,void 0,void 0,(function(){var t,n,s,S,v;return r(this,(function(r){switch(r.label){case 0:t=u(),n=t.strategy.currentState.data.config,r.label=1;case 1:return r.trys.push([1,5,,6]),f.advancedInFlow("tallyman.v1-ussd","msisdn-submitted",{msisdn:c}),[4,y(a,n,c,i)];case 2:return s=r.sent(),f.advancedInFlow("tallyman.v1-ussd","msisdn-submission-success",{msisdn:c}),i&&i.storeMsisdn&&"true"===i.storeMsisdn?[4,m(c).then((function(t){t&&t.data&&t.data.success?f.customEvent("Flow","advance-auto","msisdn-stored-success"):f.customEvent("Flow","advance-auto","msisdn-stored-failed")})).catch((function(t){f.customEvent("Flow","advance-auto","msisdn-stored-error",t)}))]:[3,4];case 3:r.sent(),r.label=4;case 4:return d({window:a,flow:"tallyman.v1-ussd",action:"sale",args:{msisdn:c}}),[2,{type:"MSISDNEntry",result:o(e({},s))}];case 5:switch(S=r.sent(),console.warn(S),v=void 0,S.type){case"AlreadySubscribed":v="AlreadySubscribed";break;case"InvalidMSISDN":v="InvalidMSISDN";break;default:v="UnknownError"}return f.recedeInFlow("tallyman.v1-ussd","msisdn-submission-failure",{msisdn:c,errorType:v||"UnknownError"}),[2,l({errorType:v,productUrl:S.productUrl})];case 6:return[2]}}))}))})),D=a({name:"ussdFlow",initialState:E,reducers:{backToStartAction:function(t){f.recedeInFlow("tallyman.v1-ussd","ussd-state","requested to change phone number"),t.currentState={type:"MSISDNEntry",result:c()}}},extraReducers:function(t){t.addCase(M.pending,(function(t){t.currentState={type:"MSISDNEntry",result:i()}})).addCase(M.fulfilled,(function(t,r){t.currentState=r.payload})).addCase(M.rejected,(function(t,r){t.currentState={type:"MSISDNEntry",result:u(r.payload)}}))}}),k=D.reducer,j=D.actions.backToStartAction;export{j as backToStartAction,M as submitMSISDNAction,S as useUssdFlowState,v as ussdFlowMatch,k as ussdFlowReducer};
2
2
  //# sourceMappingURL=ussdFlow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ussdFlow.js","sources":["../src/flows/ussdFlow/hooks/useUssdFlowState.ts","../src/flows/ussdFlow/match.ts","../src/flows/ussdFlow/api.ts","../src/flows/ussdFlow/main.ts","../src/flows/ussdFlow/ussdFlowSlice.ts"],"sourcesContent":["import { useSelector as IuseSelector } from 'react-redux';\nimport { RootState } from '../../../sharedFlowTypes/StrategyTypes';\n\nexport const useUssdFlowState = (useSelector: typeof IuseSelector) => {\n const currentState = useSelector((state: RootState) => state.ussdFlow.currentState);\n return currentState;\n};\n","import * as RDS from '../../common-types/RemoteDataState';\nimport { MSISDNEntryFailure, MSISDNEntrySuccess, UssdFlowCurrentState } from '../../sharedFlowTypes/UssdTypes';\n\nfunction ussdFlowMatch<R>({\n msisdnEntry\n}: {\n msisdnEntry: (rds: RDS.RemoteDataState<MSISDNEntryFailure, MSISDNEntrySuccess>) => R;\n}): (state: UssdFlowCurrentState) => R {\n return (state) => {\n switch (state.type) {\n case 'MSISDNEntry':\n return msisdnEntry(state.result);\n default:\n // TODO - this should be an error or something\n return msisdnEntry(state.result);\n }\n };\n}\n\nexport { ussdFlowMatch };\n","import { IMSISDNSubmissionResult } from '../../sharedFlowTypes/UssdTypes';\n\nconst ussd = async (\n window: Window,\n slug: string,\n country: string,\n msisdn: string,\n device: string,\n offer: string,\n rockmanId: string,\n search: string,\n extraParamsQs: string\n): Promise<IMSISDNSubmissionResult> => {\n const params = new URLSearchParams({\n action: 'ussd',\n slug,\n country,\n msisdn,\n device,\n offerId: offer.toString(),\n rockman_id: rockmanId,\n ...(search && { search })\n });\n\n if (extraParamsQs) {\n extraParamsQs.split('&').forEach((param) => {\n const [key, value] = param.split('=');\n if (key) params.append(key, value);\n });\n }\n const host = (window as Window).DEV_BASE_URL || '';\n const url = `${host}/tallyman/v1/?${params.toString()}`;\n return fetch(url).then((response) => response.json());\n};\n\nexport { ussd };\n","import { IError } from '../../common-types/IError';\nimport { IConfig } from '../../sharedFlowTypes/StrategyTypes';\nimport { IKeywordShortcode, IMSISDNSubmissionResult } from '../../sharedFlowTypes/UssdTypes';\nimport { ussd } from './api';\n\nexport default async function submitMSISDN(\n window: Window,\n maybeConfig: IConfig,\n internationalMSISDN: string,\n extraParams?: { [key: string]: string }\n): Promise<IKeywordShortcode> {\n const config: IConfig = { offer: window.pac_analytics.visitor.offer, ...(maybeConfig || {}) };\n return submitMSISDNWithConfig(window, config, internationalMSISDN, extraParams);\n}\n\nexport async function submitMSISDNWithConfig(\n window: Window,\n config: IConfig,\n internationalMSISDN: string,\n extraParams?: { [key: string]: string }\n): Promise<IKeywordShortcode> {\n const { slug, country, device, offer } = config;\n const search = window.location.search.substr(1) || '';\n const extraParamsQs = !extraParams\n ? ''\n : `&${Object.keys(extraParams)\n .map((k) => `${k}=${extraParams[k]}`)\n .join('&')}`;\n const msisdn = internationalMSISDN.match(/\\d+/gi).join('');\n const { rockmanId } = window.pac_analytics.visitor;\n const result: IMSISDNSubmissionResult = await ussd(\n window,\n slug,\n country,\n msisdn,\n device,\n offer,\n rockmanId,\n search,\n extraParamsQs\n );\n\n if (result.success === false) {\n const type = result.message === 'ALREADY SUBSCRIBED' ? 'AlreadySubscribed' : 'InvalidMSISDN';\n const error = new Error(`${type}:\\n${result.message}`) as IError & { type: string };\n error.type = type;\n console.error(error);\n throw error;\n } else {\n return result;\n }\n}\n\nexport const formatSMSLink = (keywordAndShortcode: IKeywordShortcode) =>\n // @ts-ignore\n // eslint-disable-next-line no-nested-ternary\n !!window.pac_analytics.visitor['x-requested-with'] &&\n // @ts-ignore\n window.pac_analytics.visitor['x-requested-with'] !== null &&\n // @ts-ignore\n window.pac_analytics.visitor['x-requested-with'].indexOf('com.facebook') !== -1\n ? `sms://${keywordAndShortcode.shortcode}?body=${keywordAndShortcode.keyword}`\n : typeof navigator !== 'undefined' && (/iPhone/i.test(navigator.userAgent) || /Mac OS/i.test(navigator.userAgent))\n ? `sms:${keywordAndShortcode.shortcode}&body=${keywordAndShortcode.keyword}`\n : `sms:${keywordAndShortcode.shortcode}?body=${keywordAndShortcode.keyword}`;\n","import { createAsyncThunk, createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { IHash } from '../../common-types/IHash';\nimport * as RDS from '../../common-types/RemoteDataState';\nimport { IMockFlowParams, RootState } from '../../sharedFlowTypes/StrategyTypes';\nimport {\n MSISDNEntryErrorTypes,\n MSISDNEntryFailure,\n MSISDNEntryState,\n MSISDNEntrySuccess,\n UssdFlowState\n} from '../../sharedFlowTypes/UssdTypes';\nimport { checkSubscriptionHander } from '../../utilities/checkSubscriptionHander';\nimport { searchToObject } from '../../utilities/searchToObject';\nimport { storeMsisdn } from '../../utilities/storeMsisdn';\nimport { tracker } from '../../utilities/tracker';\nimport submitMSISDN from './main';\n\nconst mockedMSISDNEntrySuccess: UssdFlowState = {\n currentState: {\n type: 'MSISDNEntry',\n result: RDS.Success<MSISDNEntryFailure, MSISDNEntrySuccess>({\n keyword: 'TEST OK',\n shortcode: '777'\n })\n }\n};\n\nconst mockedMSISDNEntryFailure: UssdFlowState = {\n currentState: {\n type: 'MSISDNEntry',\n result: RDS.Failure<MSISDNEntryFailure, MSISDNEntrySuccess>({\n errorType: 'InvalidMSISDN',\n error: 'Invalid Mobile Number'\n })\n }\n};\n\nconst defaultInitialState: UssdFlowState = {\n currentState: {\n type: 'MSISDNEntry',\n result: RDS.NothingYet()\n }\n};\n\nconst setInitialState = (window: Window) => {\n const search = searchToObject(window) as IMockFlowParams<any>;\n if (search['mock-flow']) {\n switch (search['current-state']) {\n case 'msisdn-entry-failure-state':\n return mockedMSISDNEntryFailure;\n case 'msisdn-entry-success-state':\n return mockedMSISDNEntrySuccess;\n default:\n console.error('Mock Flow not supported');\n return defaultInitialState;\n }\n } else {\n return defaultInitialState;\n }\n};\n\nconst initialState = setInitialState(window);\n\ninterface SubmitMSISDNArgs {\n window: Window;\n msisdn: string;\n extraParams?: IHash;\n}\n/**\n * submitMSISDNAction\n * @returns {type: ' 'pinFlow/submitMSISDNAction', payload: {type: PossibleTypes, result: MSISDNEntryState}}\n \n * Calls ussd api that open ussd prompt on mobile\n *\n */\nexport const submitMSISDNAction = createAsyncThunk<\n MSISDNEntryState,\n SubmitMSISDNArgs,\n {\n rejectValue: MSISDNEntryFailure;\n }\n>('ussdFlow/submitMSISDNAction', async ({ window, msisdn, extraParams }, { getState, rejectWithValue }) => {\n const state: RootState = getState();\n\n const { config } = state.strategy.currentState.data;\n\n try {\n // Start Ussd Api Call\n tracker.advancedInFlow('tallyman.v1-ussd', 'msisdn-submitted', { msisdn });\n const keywordAndShortcode = await submitMSISDN(window, config, msisdn, extraParams);\n tracker.advancedInFlow('tallyman.v1-ussd', 'msisdn-submission-success', { msisdn });\n // End Ussd Api Call\n\n // Start Store Msisdn\n // if storeMsisdn is true, encrypt msisdn and save it in cookie, localStorage, and zürch\n if (extraParams && extraParams.storeMsisdn && extraParams.storeMsisdn === 'true') {\n await storeMsisdn(msisdn)\n .then((data: any) => {\n if (data && data.data && data.data.success) {\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-stored-success');\n } else {\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-stored-failed');\n }\n })\n .catch((error) => {\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-stored-error', error);\n });\n }\n // End Store Msisdn\n\n // Check For Subscription by rockman id and redirect to product url\n checkSubscriptionHander({\n window,\n flow: 'tallyman.v1-ussd',\n action: 'sale',\n args: {\n msisdn\n }\n });\n\n return {\n type: 'MSISDNEntry',\n result: RDS.Success<MSISDNEntryFailure, MSISDNEntrySuccess>({ ...keywordAndShortcode })\n };\n } catch (ex) {\n console.warn(ex);\n let errorType: MSISDNEntryErrorTypes;\n switch (ex.type) {\n case 'AlreadySubscribed':\n errorType = 'AlreadySubscribed';\n break;\n case 'InvalidMSISDN':\n errorType = 'InvalidMSISDN';\n break;\n default:\n errorType = 'UnknownError';\n }\n\n tracker.recedeInFlow('tallyman.v1-ussd', 'msisdn-submission-failure', {\n msisdn,\n errorType: errorType || 'UnknownError'\n });\n\n return rejectWithValue({\n errorType,\n productUrl: ex.productUrl\n });\n }\n});\n\nconst ussdFlowSlice = createSlice({\n name: 'ussdFlow',\n initialState,\n reducers: {\n backToStartAction(state) {\n tracker.recedeInFlow('tallyman.v1-ussd', 'ussd-state', 'requested to change phone number');\n\n // TODO GO BACK TO IDENTIFY BY MSISDN BASED ON STRATEGY\n state.currentState = { type: 'MSISDNEntry', result: RDS.NothingYet() };\n }\n },\n extraReducers: (builder) => {\n builder\n .addCase(submitMSISDNAction.pending, (state) => {\n state.currentState = { type: 'MSISDNEntry', result: RDS.Loading() };\n })\n .addCase(submitMSISDNAction.fulfilled, (state, action: PayloadAction<MSISDNEntryState>) => {\n state.currentState = action.payload;\n })\n .addCase(submitMSISDNAction.rejected, (state, action: PayloadAction<MSISDNEntryFailure>) => {\n state.currentState = {\n type: 'MSISDNEntry',\n result: RDS.Failure(action.payload)\n };\n });\n }\n});\n\n// Export reducers and actions\nexport const { reducer: ussdFlowReducer, actions: ussdFlowActions } = ussdFlowSlice;\nexport const { backToStartAction } = ussdFlowActions;\n\n// If you have selectors or thunks related to this slice, export them as named exports as well\nexport const selectUssdFlowState = (state: any) => state.ussdFlow;\n"],"names":["useUssdFlowState","useSelector","state","ussdFlow","currentState","ussdFlowMatch","_a","msisdnEntry","type","result","ussd","window","slug","country","msisdn","device","offer","rockmanId","search","extraParamsQs","__awaiter","params","URLSearchParams","action","offerId","toString","rockman_id","split","forEach","param","__read","key","value","append","host","DEV_BASE_URL","url","concat","fetch","then","response","json","submitMSISDN","maybeConfig","internationalMSISDN","extraParams","config","pac_analytics","visitor","submitMSISDNWithConfig","location","substr","Object","keys","map","k","join","match","sent","success","message","error","Error","console","mockedMSISDNEntrySuccess","RDS.Success","keyword","shortcode","mockedMSISDNEntryFailure","RDS.Failure","errorType","defaultInitialState","RDS.NothingYet","initialState","searchToObject","setInitialState","submitMSISDNAction","createAsyncThunk","_b","getState","rejectWithValue","strategy","data","tracker","advancedInFlow","keywordAndShortcode","_c","storeMsisdn","customEvent","catch","checkSubscriptionHander","flow","args","__assign","warn","ex_1","recedeInFlow","productUrl","ussdFlowSlice","createSlice","name","reducers","backToStartAction","extraReducers","builder","addCase","pending","RDS.Loading","fulfilled","payload","rejected","ussdFlowReducer","reducer","actions"],"mappings":"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"}
1
+ {"version":3,"file":"ussdFlow.js","sources":["../src/flows/ussdFlow/hooks/useUssdFlowState.ts","../src/flows/ussdFlow/match.ts","../src/flows/ussdFlow/api.ts","../src/flows/ussdFlow/main.ts","../src/flows/ussdFlow/ussdFlowSlice.ts"],"sourcesContent":["import { useSelector as IuseSelector } from 'react-redux';\nimport { RootState } from '../../../sharedFlowTypes/StrategyTypes';\n\nexport const useUssdFlowState = (useSelector: typeof IuseSelector) => {\n const currentState = useSelector((state: RootState) => state.ussdFlow.currentState);\n return currentState;\n};\n","import * as RDS from '../../common-types/RemoteDataState';\nimport { MSISDNEntryFailure, MSISDNEntrySuccess, UssdFlowCurrentState } from '../../sharedFlowTypes/UssdTypes';\n\nfunction ussdFlowMatch<R>({\n msisdnEntry\n}: {\n msisdnEntry: (rds: RDS.RemoteDataState<MSISDNEntryFailure, MSISDNEntrySuccess>) => R;\n}): (state: UssdFlowCurrentState) => R {\n return (state) => {\n switch (state.type) {\n case 'MSISDNEntry':\n return msisdnEntry(state.result);\n default:\n // TODO - this should be an error or something\n return msisdnEntry(state.result);\n }\n };\n}\n\nexport { ussdFlowMatch };\n","import { IMSISDNSubmissionResult } from '../../sharedFlowTypes/UssdTypes';\n\nconst ussd = async (\n window: Window,\n slug: string,\n country: string,\n msisdn: string,\n device: string,\n offer: string,\n rockmanId: string,\n search: string,\n extraParamsQs: string\n): Promise<IMSISDNSubmissionResult> => {\n const params = new URLSearchParams({\n action: 'ussd',\n slug,\n country,\n msisdn,\n device,\n offerId: offer.toString(),\n rockman_id: rockmanId,\n ...(search && { search })\n });\n\n if (extraParamsQs) {\n extraParamsQs.split('&').forEach((param) => {\n const [key, value] = param.split('=');\n if (key) params.append(key, value);\n });\n }\n const host = (window as Window).DEV_BASE_URL || '';\n const url = `${host}/tallyman/v1/?${params.toString()}`;\n return fetch(url).then((response) => response.json());\n};\n\nexport { ussd };\n","import { IError } from '../../common-types/IError';\nimport { IConfig } from '../../sharedFlowTypes/StrategyTypes';\nimport { IKeywordShortcode, IMSISDNSubmissionResult } from '../../sharedFlowTypes/UssdTypes';\nimport { ussd } from './api';\n\nexport default async function submitMSISDN(\n window: Window,\n maybeConfig: IConfig,\n internationalMSISDN: string,\n extraParams?: { [key: string]: string }\n): Promise<IKeywordShortcode> {\n const config: IConfig = { offer: window.pac_analytics.visitor.offer, ...(maybeConfig || {}) };\n return submitMSISDNWithConfig(window, config, internationalMSISDN, extraParams);\n}\n\nexport async function submitMSISDNWithConfig(\n window: Window,\n config: IConfig,\n internationalMSISDN: string,\n extraParams?: { [key: string]: string }\n): Promise<IKeywordShortcode> {\n const { slug, country, device, offer } = config;\n const search = window.location.search.substr(1) || '';\n const extraParamsQs = !extraParams\n ? ''\n : `&${Object.keys(extraParams)\n .map((k) => `${k}=${extraParams[k]}`)\n .join('&')}`;\n const msisdn = internationalMSISDN.match(/\\d+/gi).join('');\n const { rockmanId } = window.pac_analytics.visitor;\n const result: IMSISDNSubmissionResult = await ussd(\n window,\n slug,\n country,\n msisdn,\n device,\n offer,\n rockmanId,\n search,\n extraParamsQs\n );\n\n if (result.success === false) {\n const type = result.message === 'ALREADY SUBSCRIBED' ? 'AlreadySubscribed' : 'InvalidMSISDN';\n const error = new Error(`${type}:\\n${result.message}`) as IError & { type: string };\n error.type = type;\n console.error(error);\n throw error;\n } else {\n return result;\n }\n}\n\nexport const formatSMSLink = (keywordAndShortcode: IKeywordShortcode) =>\n // @ts-ignore\n // eslint-disable-next-line no-nested-ternary\n !!window.pac_analytics.visitor['x-requested-with'] &&\n // @ts-ignore\n window.pac_analytics.visitor['x-requested-with'] !== null &&\n // @ts-ignore\n window.pac_analytics.visitor['x-requested-with'].indexOf('com.facebook') !== -1\n ? `sms://${keywordAndShortcode.shortcode}?body=${keywordAndShortcode.keyword}`\n : typeof navigator !== 'undefined' && (/iPhone/i.test(navigator.userAgent) || /Mac OS/i.test(navigator.userAgent))\n ? `sms:${keywordAndShortcode.shortcode}&body=${keywordAndShortcode.keyword}`\n : `sms:${keywordAndShortcode.shortcode}?body=${keywordAndShortcode.keyword}`;\n","import { createAsyncThunk, createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { IHash } from '../../common-types/IHash';\nimport * as RDS from '../../common-types/RemoteDataState';\nimport { IMockFlowParams, RootState } from '../../sharedFlowTypes/StrategyTypes';\nimport {\n MSISDNEntryErrorTypes,\n MSISDNEntryFailure,\n MSISDNEntryState,\n MSISDNEntrySuccess,\n UssdFlowState\n} from '../../sharedFlowTypes/UssdTypes';\nimport { checkSubscriptionHander } from '../../utilities/checkSubscriptionHander';\nimport { searchToObject } from '../../utilities/searchToObject';\nimport { storeMsisdn } from '../../utilities/storeMsisdn';\nimport { tracker } from '../../utilities/tracker';\nimport submitMSISDN from './main';\n\nconst mockedMSISDNEntrySuccess: UssdFlowState = {\n currentState: {\n type: 'MSISDNEntry',\n result: RDS.Success<MSISDNEntryFailure, MSISDNEntrySuccess>({\n keyword: 'TEST OK',\n shortcode: '777'\n })\n }\n};\n\nconst mockedMSISDNEntryFailure: UssdFlowState = {\n currentState: {\n type: 'MSISDNEntry',\n result: RDS.Failure<MSISDNEntryFailure, MSISDNEntrySuccess>({\n errorType: 'InvalidMSISDN',\n error: 'Invalid Mobile Number'\n })\n }\n};\n\nconst defaultInitialState: UssdFlowState = {\n currentState: {\n type: 'MSISDNEntry',\n result: RDS.NothingYet()\n }\n};\n\nconst setInitialState = (window: Window) => {\n const search = searchToObject(window) as IMockFlowParams<any>;\n if (search['mock-flow']) {\n switch (search['current-state']) {\n case 'msisdn-entry-failure-state':\n return mockedMSISDNEntryFailure;\n case 'msisdn-entry-success-state':\n return mockedMSISDNEntrySuccess;\n default:\n console.error('Mock Flow not supported');\n return defaultInitialState;\n }\n } else {\n return defaultInitialState;\n }\n};\n\nconst initialState = setInitialState(window);\n\ninterface SubmitMSISDNArgs {\n window: Window;\n msisdn: string;\n extraParams?: IHash;\n}\n/**\n * submitMSISDNAction\n * @returns {type: ' 'pinFlow/submitMSISDNAction', payload: {type: PossibleTypes, result: MSISDNEntryState}}\n \n * Calls ussd api that open ussd prompt on mobile\n *\n */\nexport const submitMSISDNAction = createAsyncThunk<\n MSISDNEntryState,\n SubmitMSISDNArgs,\n {\n rejectValue: MSISDNEntryFailure;\n }\n>('ussdFlow/submitMSISDNAction', async ({ window, msisdn, extraParams }, { getState, rejectWithValue }) => {\n const state: RootState = getState();\n\n const { config } = state.strategy.currentState.data;\n\n try {\n // Start Ussd Api Call\n tracker.advancedInFlow('tallyman.v1-ussd', 'msisdn-submitted', { msisdn });\n const keywordAndShortcode = await submitMSISDN(window, config, msisdn, extraParams);\n tracker.advancedInFlow('tallyman.v1-ussd', 'msisdn-submission-success', { msisdn });\n // End Ussd Api Call\n\n // Start Store Msisdn\n // if storeMsisdn is true, encrypt msisdn and save it in cookie, localStorage, and zürch\n if (extraParams && extraParams.storeMsisdn && extraParams.storeMsisdn === 'true') {\n await storeMsisdn(msisdn)\n .then((data: any) => {\n if (data && data.data && data.data.success) {\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-stored-success');\n } else {\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-stored-failed');\n }\n })\n .catch((error) => {\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-stored-error', error);\n });\n }\n // End Store Msisdn\n\n // Check For Subscription by rockman id and redirect to product url\n checkSubscriptionHander({\n window,\n flow: 'tallyman.v1-ussd',\n action: 'sale',\n args: {\n msisdn\n }\n });\n\n return {\n type: 'MSISDNEntry',\n result: RDS.Success<MSISDNEntryFailure, MSISDNEntrySuccess>({ ...keywordAndShortcode })\n };\n } catch (ex) {\n console.warn(ex);\n let errorType: MSISDNEntryErrorTypes;\n switch (ex.type) {\n case 'AlreadySubscribed':\n errorType = 'AlreadySubscribed';\n break;\n case 'InvalidMSISDN':\n errorType = 'InvalidMSISDN';\n break;\n default:\n errorType = 'UnknownError';\n }\n\n tracker.recedeInFlow('tallyman.v1-ussd', 'msisdn-submission-failure', {\n msisdn,\n errorType: errorType || 'UnknownError'\n });\n\n return rejectWithValue({\n errorType,\n productUrl: ex.productUrl\n });\n }\n});\n\nconst ussdFlowSlice = createSlice({\n name: 'ussdFlow',\n initialState,\n reducers: {\n backToStartAction(state) {\n tracker.recedeInFlow('tallyman.v1-ussd', 'ussd-state', 'requested to change phone number');\n\n // TODO GO BACK TO IDENTIFY BY MSISDN BASED ON STRATEGY\n state.currentState = { type: 'MSISDNEntry', result: RDS.NothingYet() };\n }\n },\n extraReducers: (builder) => {\n builder\n .addCase(submitMSISDNAction.pending, (state) => {\n state.currentState = { type: 'MSISDNEntry', result: RDS.Loading() };\n })\n .addCase(submitMSISDNAction.fulfilled, (state, action: PayloadAction<MSISDNEntryState>) => {\n state.currentState = action.payload;\n })\n .addCase(submitMSISDNAction.rejected, (state, action: PayloadAction<MSISDNEntryFailure>) => {\n state.currentState = {\n type: 'MSISDNEntry',\n result: RDS.Failure(action.payload)\n };\n });\n }\n});\n\n// Export reducers and actions\nexport const { reducer: ussdFlowReducer, actions: ussdFlowActions } = ussdFlowSlice;\nexport const { backToStartAction } = ussdFlowActions;\n\n// If you have selectors or thunks related to this slice, export them as named exports as well\nexport const selectUssdFlowState = (state: any) => state.ussdFlow;\n"],"names":["useUssdFlowState","useSelector","state","ussdFlow","currentState","ussdFlowMatch","_a","msisdnEntry","type","result","ussd","window","slug","country","msisdn","device","offer","rockmanId","search","extraParamsQs","__awaiter","params","URLSearchParams","action","offerId","toString","rockman_id","split","forEach","param","__read","key","value","append","host","DEV_BASE_URL","url","concat","fetch","then","response","json","submitMSISDN","maybeConfig","internationalMSISDN","extraParams","config","pac_analytics","visitor","submitMSISDNWithConfig","location","substr","Object","keys","map","k","join","match","sent","success","message","error","Error","console","mockedMSISDNEntrySuccess","RDS.Success","keyword","shortcode","mockedMSISDNEntryFailure","RDS.Failure","errorType","defaultInitialState","RDS.NothingYet","initialState","searchToObject","setInitialState","submitMSISDNAction","createAsyncThunk","_b","getState","rejectWithValue","strategy","data","tracker","advancedInFlow","keywordAndShortcode","_c","storeMsisdn","customEvent","catch","checkSubscriptionHander","flow","args","__assign","warn","ex_1","recedeInFlow","productUrl","ussdFlowSlice","createSlice","name","reducers","backToStartAction","extraReducers","builder","addCase","pending","RDS.Loading","fulfilled","payload","rejected","ussdFlowReducer","reducer","actions"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ouisys-engine",
3
- "version": "5.0.41",
3
+ "version": "5.0.42",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "directories": "dist dev-tools",
@@ -1,2 +0,0 @@
1
- import{__awaiter as n,__generator as t}from"tslib";var r=function(r){var c=r.window,o=r.rockmanId;return n(void 0,void 0,void 0,(function(){var n,r,a;return t(this,(function(t){switch(t.label){case 0:return n=c.DEV_BASE_URL||"",r=new URLSearchParams({action:"check-subscription",rockman_id:o}).toString(),a="".concat(n,"/tallyman/v1/?").concat(r),[4,fetch(a)];case 1:return[2,t.sent().json()]}}))}))};export{r as c};
2
- //# sourceMappingURL=checkSubscriptionByRockmanIdOnly-BwR1un1L.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"checkSubscriptionByRockmanIdOnly-BwR1un1L.js","sources":["../src/sharedApi/checkSubscriptionByRockmanIdOnly.ts"],"sourcesContent":["import { ICheckSubscriptionResult } from '../common-types/ICheckSubscriptionResult';\n\nconst checkSubscriptionByRockmanIdOnly = async ({\n window,\n rockmanId\n}: {\n window: Window;\n rockmanId: string;\n}): Promise<ICheckSubscriptionResult> => {\n const host = (window as Window).DEV_BASE_URL || '';\n\n const params = {\n action: 'check-subscription',\n rockman_id: rockmanId\n };\n\n const urlParams = new URLSearchParams(params).toString();\n const url = `${host}/tallyman/v1/?${urlParams}`;\n\n const response = await fetch(url);\n return response.json();\n};\n\nexport { checkSubscriptionByRockmanIdOnly };\n"],"names":["checkSubscriptionByRockmanIdOnly","_a","window","rockmanId","host","DEV_BASE_URL","urlParams","URLSearchParams","action","rockman_id","toString","url","concat","fetch","_b","sent","json"],"mappings":"mDAEM,IAAAA,EAAmC,SAAOC,OAC9CC,EAAMD,EAAAC,OACNC,EAASF,EAAAE,gHAeQ,OAVXC,EAAQF,EAAkBG,cAAgB,GAO1CC,EAAY,IAAIC,gBALP,CACbC,OAAQ,qBACRC,WAAYN,IAGgCO,WACxCC,EAAM,GAAGC,OAAAR,EAAqB,kBAAAQ,OAAAN,GAEnB,CAAA,EAAMO,MAAMF,WAC7B,MAAA,CAAA,EADiBG,EAAgBC,OACjBC"}
@@ -1,2 +0,0 @@
1
- import{__awaiter as t,__generator as e,__assign as n}from"tslib";import{createAsyncThunk as r,createSlice as o}from"@reduxjs/toolkit";import{N as i,S as s,L as a,F as l}from"./RemoteDataState-lcf8PfJd.js";import{searchToObject as u}from"./searchToObject.js";import{getConfig as d}from"./getConfig.js";import{t as c}from"./tryGetIPRangeName-QW-9NgzE.js";import{t as f}from"./tracker-DaaILhEr.js";var p;!function(t){t.IDENTIFY_STRATEGY="IDENTIFY_STRATEGY",t.IDENTIFY_FLOW_BY_MSISDN="IDENTIFY_FLOW_BY_MSISDN",t.IDENTIFY_FLOW_BY_OPERATOR_SELECT="IDENTIFY_FLOW_BY_OPERATOR_SELECT",t.PIN="PIN",t.MO="MO",t.MO_REDIR="MO_REDIR",t.ONE_CLICK="ONE_CLICK",t.CLICK2SMS="CLICK2SMS",t.USSD="USSD",t.TPAY_HE="TPAY_HE",t.CREDIT_CARD="CREDIT_CARD"}(p||(p={}));var v=function(n){var r=n.window,o=n.slug,i=n.country,s=n.msisdn,a=n.device,l=n.offer,u=n.rockmanId;return t(void 0,void 0,void 0,(function(){var t,n,d,c,f;return e(this,(function(e){switch(e.label){case 0:return t=r.languageCode?"&language_code=".concat(r.languageCode):"",n=encodeURIComponent(r.location.href),d=r.DEV_BASE_URL||"",c=new URLSearchParams({action:"identify",slug:o,country:i,msisdn:s,device:a,offerId:l,rockman_id:u,page:n,language_code:t}).toString(),f="".concat(d,"/tallyman/v1/?").concat(c),[4,fetch(f)];case 1:return[2,e.sent().json()]}}))}))};function w(r){var o,i,s,a,l=r.window,u=r.internationalMSISDN,d=r.configs;return t(this,void 0,void 0,(function(){var r,c,f,p,w,I,g,m,y,C,E=this;return e(this,(function(S){switch(S.label){case 0:if(!u)throw(C=new Error("Error in submitMSISDN() identify action")).type="SEInvalidMSISDN",C;return r=(null===(o=u.match(/\d+/gi))||void 0===o?void 0:o.join(""))||"",c=null===(i=null==d?void 0:d.strategyConfigs)||void 0===i?void 0:i.default,f=c.flowConfig,p=null===(s=null==d?void 0:d.strategyConfigs)||void 0===s?void 0:s.operators,w=function(){return t(E,void 0,void 0,(function(){var t,n,o,i,s;return e(this,(function(e){switch(e.label){case 0:return t=f.slug,n=f.country,o=f.device,i=l.pac_analytics.visitor.rockmanId,s=l.pac_analytics.visitor.offer,[4,v({window:l,slug:t,country:n,msisdn:r,device:o,offer:s,rockmanId:i})];case 1:return[2,e.sent()]}}))}))},[4,w()];case 1:if(I=S.sent(),g=p[I.operator]?p[I.operator]:null,m=!1===I.success&&"Operator could not be found for the given MSISDN"===I.message,y=!1===I.success&&-1!==(null===(a=I.message)||void 0===a?void 0:a.indexOf("HLR did not find the operator for given MSISDN")),m||y)throw(C=new Error("Error in submitMSISDN() identify action")).type="FlowDetectFailed",C.msisdn=r,C;if(null!==g)return[2,n({operator:I.operator,default:c},g)];if(null===g)return[2,n({operator:I.operator},c)];throw(C=new Error("Error in submitMSISDN() identify action")).type="SEInvalidMSISDN",C}}))}))}function I(t){var e,r,o=t.configs,i=t.operator,s=null===(e=null==o?void 0:o.strategyConfigs)||void 0===e?void 0:e.default,a=null===(r=null==o?void 0:o.strategyConfigs)||void 0===r?void 0:r.operators;return n({operator:null==i?void 0:i.toUpperCase(),default:s},a[null==i?void 0:i.toUpperCase()])}function g(n){var r=n.window,o=n.configs;return t(this,void 0,void 0,(function(){var t;return e(this,(function(e){switch(e.label){case 0:return[4,c(r.pac_analytics.visitor)];case 1:return t=e.sent(),[2,I({configs:o,operator:t?t.toUpperCase():""})]}}))}))}var m=r("strategy/submitMSISDNAction",(function(n,r){var o=n.window,i=n.msisdn,s=r.rejectWithValue;return t(void 0,void 0,void 0,(function(){var t,n,r,a,l;return e(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),t=d(),n=t.strategy,[4,w({window:o,internationalMSISDN:i,configs:t})];case 1:switch(r=e.sent(),n){case"pin-mo-redir-ask-mobile-number":return[2,E(r,i)];case"pin-mo-ask-mobile-number":return[2,y(r,i)];case"pin-combo-ask-mobile-number":return[2,C(r,i)];case"mo-redir-mo-click2sms-one-click-detect-operator-by-ip-or-msisdn":return[2,O(r,i)];case"pin-mo-mo-redir-ask-mobile-number":return[2,S(r,i)];case"pin-click2sms-ask-mobile-number":return[2,_(r,i)];default:return[2,s("Unknown strategy")]}case 2:switch(a=e.sent(),l=void 0,a.type){case"SEAlreadySubscribed":l="AlreadySubscribed";break;case"SEInvalidMSISDN":l="InvalidMSISDN";break;default:l="UnknownError"}return[2,s({errorType:l,error:a,productUrl:a.productUrl})];case 3:return[2]}}))}))})),y=function(t,e){switch(t.flow){case"pin":return f.sendOptInFlowEvent("Pin"),{type:p.PIN,result:i(),data:n({config:t.flowConfig,msisdn:e},t.operator&&{operator:t.operator})};case"mo":return f.sendOptInFlowEvent("Msisdn to sms"),{type:p.MO,result:i(),data:n({config:t.flowConfig,msisdn:e},t.operator&&{operator:t.operator})};default:return f.sendOptInFlowEvent("Pin"),{type:p.PIN,result:i(),data:n({config:t.flowConfig},t.operator&&{operator:t.operator})}}},C=function(t,e){return"pin"===t.flow?(f.sendOptInFlowEvent("Pin"),{type:p.PIN,result:i(),data:n({config:t.flowConfig,msisdn:e},t.operator&&{operator:t.operator})}):(f.sendOptInFlowEvent("Pin"),{type:p.PIN,result:i(),data:n({config:t.flowConfig},t.operator&&{operator:t.operator})})},E=function(t,e){switch(t.flow){case"pin":return f.sendOptInFlowEvent("Pin"),{type:p.PIN,result:i(),data:{config:t.flowConfig,msisdn:e}};case"moRedir":return f.sendOptInFlowEvent("Redirect"),{type:p.MO_REDIR,result:i(),data:{config:t.flowConfig}};default:return f.sendOptInFlowEvent("Pin"),{type:p.PIN,result:i(),data:{config:t.flowConfig}}}},S=function(t,e){switch(t.flow){case"pin":return f.sendOptInFlowEvent("Pin"),{type:p.PIN,result:i(),data:{config:t.flowConfig,msisdn:e}};case"moRedir":return f.sendOptInFlowEvent("Redirect"),{type:p.MO_REDIR,result:i(),data:{config:t.flowConfig,msisdn:e}};case"mo":return f.sendOptInFlowEvent("Msisdn to sms"),{type:p.MO,result:i(),data:{config:t.flowConfig,msisdn:e}};default:return f.sendOptInFlowEvent("Pin"),{type:p.PIN,result:i(),data:{config:t.flowConfig}}}},O=function(t,e){switch(t.flowOnWifi){case"moRedir":return f.sendOptInFlowEvent("Redirect"),{type:p.MO_REDIR,result:i(),data:{config:t.flowConfig,msisdn:e}};case"mo":return f.sendOptInFlowEvent("Msisdn to sms"),{type:p.MO,result:i(),data:{config:t.flowConfig,msisdn:e}};default:return f.sendOptInFlowEvent("Redirect"),{type:p.MO_REDIR,result:i(),data:{config:t.flowConfig,rockman_id:t.rockman_id}}}},_=function(t,e){switch(t.flow){case"pin":return f.sendOptInFlowEvent("Pin"),{type:p.PIN,result:i(),data:{config:t.flowConfig,msisdn:e}};case"click2sms":return f.sendOptInFlowEvent("Click to sms"),{type:p.CLICK2SMS,result:i(),data:{config:t.flowConfig,msisdn:e}};default:return f.sendOptInFlowEvent("Pin"),{type:p.CLICK2SMS,result:i(),data:{config:t.flowConfig}}}},R=function(){var t=function(t){var e,n=t.configs,r=null===(e=null==n?void 0:n.strategyConfigs)||void 0===e?void 0:e.operators;return Object.keys(r)}({configs:d()});return{type:p.IDENTIFY_FLOW_BY_OPERATOR_SELECT,result:i(),data:{operators:t}}},D=r("strategy/selectOperatorAction",(function(r,o){var s=r.operator,a=o.rejectWithValue;return t(void 0,void 0,void 0,(function(){var t,r;return e(this,(function(e){try{switch(t=d(),(r=I({configs:t,operator:s})).flow){case"pin":return f.sendOptInFlowEvent("Pin"),[2,{type:p.PIN,result:{config:r.flowConfig,operator:s}}];case"mo":return f.sendOptInFlowEvent("Msisdn to sms"),[2,{type:p.MO,result:{config:r.flowConfig,operator:s}}];case"click2sms":return f.sendOptInFlowEvent("Click to sms"),[2,{type:p.CLICK2SMS,result:{config:n({operators:[s]},r.flowConfig),operator:s}}];case"oneClick":return f.sendOptInFlowEvent("3G click"),[2,{type:p.ONE_CLICK,result:{config:r.flowConfig,operator:s,autoRedirect:!0}}];default:return f.sendOptInFlowEvent("Pin"),[2,{type:p.PIN,result:i()}]}}catch(t){return"UnkownError",[2,a({errorType:"UnkownError",error:t.toString()})]}return[2]}))}))})),F={mo:"Msisdn to sms",pin:"Pin",oneClick:"3G click",moRedir:"Redirect",click2sms:"Click to sms",ussd:"Msisdn to sms"},N={mo:p.MO,pin:p.PIN,oneClick:p.ONE_CLICK,moRedir:p.MO_REDIR,click2sms:p.CLICK2SMS,ussd:p.USSD,creditCard:p.CREDIT_CARD},h={currentState:{type:p.IDENTIFY_STRATEGY,result:i(),data:void 0}},M=function(){var t=u(window);if(void 0!==t["mock-flow"])switch(void 0!==t.operator&&(window.operator=t.operator),t["mock-flow"]){case"pin":return{type:p.PIN,result:s({})};case"mo":return{type:p.MO,result:s({})};case"moredir":return{type:p.MO_REDIR,result:s({})};case"oneclick":return{type:p.ONE_CLICK,result:s({}),data:{subscription_url:t["subscription-url"]}};case"click2sms":return{type:p.CLICK2SMS,result:s({})};case"ussd":return{type:p.USSD,result:s({})};case"creditcard":return{type:p.CREDIT_CARD,result:s({})};default:throw new Error("(mockStrategyStateByUrlParam) Strategy Mock Flow not supported")}},k=r("strategy/identifyStrategy",(function(){return t(void 0,void 0,void 0,(function(){var n,r,o,a,l,c,v,w,m,y,C,E,S;return e(this,(function(O){if(n=d(),r=n.strategy,o=n.strategyConfigs,void 0!==(a=u(window))["mock-flow"])return[2,M()];if(a["show-pin-entry"]&&"1"===a["show-pin-entry"]||a["show-thank-you"]&&"1"===a["show-thank-you"])return l=I({configs:n,operator:a.operator}),[2,{type:p.PIN,result:s({}),data:{config:(null==l?void 0:l.flowConfig)||(null===(c=null==o?void 0:o.default)||void 0===c?void 0:c.flowConfig)}}];if(r.includes("ask-operator"))return[2,R()];if(r.includes("detect-operator-by-ip"))return[2,t(void 0,void 0,void 0,(function(){var t,n,r,o,s,a;return e(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),t=d(),[4,g({window:window,configs:t})];case 1:return n=e.sent(),r=function(t){return F[t]},o=n.flow,s=r(o),f.sendOptInFlowEvent(s),[2,{type:N[o],result:i(),data:{config:n.flowConfig,operator:n.operator}}];case 2:return a=e.sent(),console.error("error",a),[3,3];case 3:return[2]}}))}))];if(null==r?void 0:r.includes("ask-mobile-number"))return[2,{type:p.IDENTIFY_FLOW_BY_MSISDN,result:i()}];switch(null==r||r.includes("header-enrichment"),r){case"pin":return f.sendOptInFlowEvent("Pin"),[2,{type:p.PIN,result:s({}),data:{config:null===(v=null==o?void 0:o.default)||void 0===v?void 0:v.flowConfig}}];case"mo":return f.sendOptInFlowEvent("Msisdn to sms"),[2,{type:p.MO,result:s({}),data:{config:null===(w=null==o?void 0:o.default)||void 0===w?void 0:w.flowConfig}}];case"mo-redir":return[2,{type:p.MO_REDIR,result:s({}),data:{config:null===(m=null==o?void 0:o.default)||void 0===m?void 0:m.flowConfig}}];case"one-click":return f.sendOptInFlowEvent("Redirect"),[2,{type:p.ONE_CLICK,result:s({}),data:{config:null===(y=null==o?void 0:o.default)||void 0===y?void 0:y.flowConfig}}];case"click2sms":return f.sendOptInFlowEvent("Click to sms"),[2,{type:p.CLICK2SMS,result:s({}),data:{config:null===(C=null==o?void 0:o.default)||void 0===C?void 0:C.flowConfig}}];case"ussd":return f.sendOptInFlowEvent("USSD"),[2,{type:p.USSD,result:s({}),data:{config:null===(E=null==o?void 0:o.default)||void 0===E?void 0:E.flowConfig}}];case"credit-card":return f.sendOptInFlowEvent("Credit card"),[2,{type:p.CREDIT_CARD,result:s({}),data:{config:null===(S=null==o?void 0:o.default)||void 0===S?void 0:S.flowConfig}}];default:throw new Error("Strategy not supported")}}))}))})),T=r("strategy/setStrategyExtraData",(function(n){var r=n.type,o=n.data;return t(void 0,void 0,void 0,(function(){return e(this,(function(t){return[2,{type:r,result:i(),data:o}]}))}))})),P=o({name:"strategy",initialState:h,reducers:{},extraReducers:function(t){t.addCase(k.pending,(function(t){t.currentState={type:p.IDENTIFY_STRATEGY,result:a()}})).addCase(k.fulfilled,(function(t,e){t.currentState=e.payload})).addCase(k.rejected,(function(t,e){t.currentState={type:p.IDENTIFY_STRATEGY,result:l(e.error.message)}})).addCase(m.pending,(function(t){t.currentState={type:p.IDENTIFY_FLOW_BY_MSISDN,result:a()}})).addCase(m.fulfilled,(function(t,e){t.currentState=e.payload})).addCase(m.rejected,(function(t,e){t.currentState={type:p.IDENTIFY_FLOW_BY_MSISDN,result:l(e.payload)}})).addCase(T.fulfilled,(function(t,e){t.currentState=e.payload})).addCase(D.pending,(function(t){t.currentState={type:p.IDENTIFY_FLOW_BY_OPERATOR_SELECT,result:a()}})).addCase(D.fulfilled,(function(t,e){t.currentState=e.payload})).addCase(D.rejected,(function(t,e){t.currentState={type:p.IDENTIFY_FLOW_BY_OPERATOR_SELECT,result:l(e.payload)}}))}}).reducer;export{p as P,D as a,P as b,T as c,k as i,m as s};
2
- //# sourceMappingURL=strategySlice-C7LOOrGS.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"strategySlice-C7LOOrGS.js","sources":["../src/sharedFlowTypes/StrategyTypes.ts","../src/flows/strategy/api.ts","../src/flows/strategy/main.ts","../src/flows/strategy/strategies/askMobileNumber.ts","../src/flows/strategy/strategies/askOperator.ts","../src/flows/strategy/strategies/detectOperatorByIp.ts","../src/flows/strategy/strategySlice.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable camelcase */\nimport * as RDS from '../common-types/RemoteDataState';\nimport { Click2smsFlowState } from './Click2smsTypes';\nimport { CreditCardFlowState } from './CreditCardTypes';\nimport { MoRedirFlowState } from './MoRedirTypes';\nimport { MoFlowState } from './MoTypes';\nimport { OneClickFlowState } from './OneClickTypes';\nimport { PinFlowState } from './PinTypes';\nimport { UssdFlowState } from './UssdTypes';\n\nexport type IIdentifyResult = {\n operator: string;\n flow?: string;\n success: boolean;\n rockman_id?: string;\n message?: string;\n};\n\nexport interface HEResult {\n msisdn: string;\n operator: string;\n subscription_url?: string;\n redirect_url?: string;\n}\n\nexport type ConfigDetails = {\n host: string;\n slug: string;\n country: string;\n device?: 'smart' | 'feature';\n queryString?: Array<[string, string]>;\n automaticallySubmitAllOperators?: boolean;\n operators?: string[];\n service: string;\n offer?: string;\n};\n\nexport type IConfig = {\n offer?: string;\n slug?: string;\n country?: string;\n host?: string;\n device?: 'smart' | 'feature';\n automaticallySubmitAllOperators?: boolean;\n operators?: string[];\n service?: string;\n serviceId?: string;\n queryString?: any;\n apiAction?: any;\n};\n\nexport type ISupportedFlows = 'pin' | 'mo' | 'oneClick' | 'click2sms' | 'moRedir' | 'ussd' | 'creditCard';\nexport type IFlow = {\n flow: ISupportedFlows;\n flowOnWifi?: ISupportedFlows;\n operator?: string;\n flowConfig: ConfigDetails;\n default?: IFlow;\n rockman_id?: string;\n};\n\nexport type StrategyConfig = {\n operators: {\n [key: string]: IFlow;\n };\n default: IFlow;\n isUseMsisdnPrefix?: boolean;\n};\n// export type IStrategy = IPinStrategy | IMoStrategy;\n\nexport type IStrategy = {\n strategy: IStrategyNames;\n country: string;\n strategyConfigs: StrategyConfig;\n};\n\nexport type IStrategyNames =\n | 'pin'\n | 'mo'\n | 'mo-redir'\n | 'click2sms'\n | 'one-click'\n | 'ussd'\n | 'tpay-he'\n | 'credit-card'\n | 'tallyman-one-click'\n | 'pin-mo-ask-operator'\n | 'pin-mo-ask-mobile-number'\n | 'pin-one-click-ask-operator'\n | 'pin-one-click-detect-operator-by-ip'\n | 'one-click-mo-pin-detect-operator-by-ip-or-msisdn'\n | 'pin-click2sms-ask-operator'\n | 'mo-redir-one-click-detect-operator-by-ip'\n | 'pin-mo-redir-ask-mobile-number'\n | 'pin-click2sms-ask-mobile-number'\n | 'mo-one-click-detect-operator-by-ip'\n | 'click2sms-one-click-detect-operator-by-ip'\n | 'pin-header-enrichment'\n | 'pin-msisdn-fowarding-pin-header-enrichment'\n | 'he-pin-mo-redir-header-enrichment'\n | 'he-pin-one-click-header-enrichment'\n | 'he-pin-one-click-ask-operator'\n | 'click2sms-one-click-ask-operator'\n | 'pin-mo-detect-operator-by-ip'\n | 'he-mo-redir-one-click-header-enrichment'\n | 'pin-combo-ask-mobile-number'\n | 'header-enrichment-script'\n | 'mo-redir-mo-click2sms-one-click-detect-operator-by-ip-or-msisdn'\n | 'pin-mo-mo-redir-ask-mobile-number';\n\nexport interface IHash {\n [key: string]: string;\n}\n\nexport type IDENTIFYMSISDNEntryErrorTypes = 'AlreadySubscribed' | 'UnknownError' | 'InvalidMSISDN';\n\nexport type IDENTIFYMSISDNEntryFailure = {\n errorType: IDENTIFYMSISDNEntryErrorTypes;\n error: unknown;\n};\n\nexport type IdentifyFlowOptionsResult = {\n config: IConfig;\n nextAction?: unknown;\n msisdn?: string;\n operator?: string;\n subscription_url?: string;\n redirect_url?: string;\n rockman_id?: string;\n isHeaderEnrichmentSuccess?: boolean;\n autoRedirect?: boolean;\n isUseMsisdnPrefix?: boolean;\n};\n\nexport type IDENTIFYMSISDNEntrySuccess = {};\nexport type OPERATORSelectFailure = {};\nexport type OPERATORSelectSuccess = IdentifyFlowOptionsResult;\n\nexport type IDETECTYOPERATOBYIPFailure = {};\nexport type IDETECTYOPERATOBYIPSuccess = IdentifyFlowOptionsResult;\n\nexport type IDENTIFY_OPERATOR_MSISDNEntrySuccess = IdentifyFlowOptionsResult;\n\nexport type IDENTIFY_FLOW_HESuccess = IdentifyFlowOptionsResult;\n\nexport type OPERATORSelectFlowIdentifyFailure = {};\nexport type OPERATORSelectFlowIdentifySuccess = {\n operators: Array<string>;\n msisdn?: string;\n nextAction: 'selectOperator';\n};\nexport type IDENTIFYFailure = {};\n\nexport type IDENTIFYSuccess = {};\n\nexport type IOperatorSelectFlowIdentifyPayload = {\n type: 'IDENTIFY_FLOW_BY_OPERATOR_SELECT';\n result: RDS.RemoteDataState<OPERATORSelectFlowIdentifyFailure, OPERATORSelectFlowIdentifySuccess>;\n};\n\n// export type IIdentifyByIPPayload= {\n// type:\"IDENTIFY_FLOW_BY_IP\"\n// result: RDS.RemoteDataState<IDENTIFYBYIPFailure, IDENTIFYBYIPSuccess>;\n// }\n\nexport type IDetectOperatorByIpPayload = {\n type: 'DETECT_OPERATOR_BY_IP';\n result: RDS.RemoteDataState<IDETECTYOPERATOBYIPFailure, IDETECTYOPERATOBYIPSuccess>;\n};\n\nexport enum PossibleTypes {\n IDENTIFY_STRATEGY = 'IDENTIFY_STRATEGY',\n IDENTIFY_FLOW_BY_MSISDN = 'IDENTIFY_FLOW_BY_MSISDN',\n IDENTIFY_FLOW_BY_OPERATOR_SELECT = 'IDENTIFY_FLOW_BY_OPERATOR_SELECT',\n PIN = 'PIN',\n MO = 'MO',\n MO_REDIR = 'MO_REDIR',\n ONE_CLICK = 'ONE_CLICK',\n CLICK2SMS = 'CLICK2SMS',\n USSD = 'USSD',\n TPAY_HE = 'TPAY_HE',\n CREDIT_CARD = 'CREDIT_CARD'\n}\n\nexport type IOperatorSelectPayload = {\n type: PossibleTypes;\n result: OPERATORSelectSuccess;\n};\n\nexport type ISubmitMsisdnPayload = {\n type: PossibleTypes;\n result: IDENTIFY_OPERATOR_MSISDNEntrySuccess;\n};\n\nexport type IIdentifyFlowByIpOperatorPayload = {\n type: PossibleTypes;\n result: IDENTIFY_OPERATOR_MSISDNEntrySuccess;\n};\n\nexport type IIdentifyFlowByHePayload = {\n type: PossibleTypes;\n result: IDENTIFY_FLOW_HESuccess;\n};\n\nexport type IIdentfyFlowByMsisdnNextAction = 'submitMSISDNAction' | 'loadOc2sms';\nexport type IIdentfyFlowByOperatorNextAction = 'submitMSISDNAction' | 'loadOc2sms';\nexport type IIdentfyFlowByIPOperatorNextAction = 'getRedirectUrlAction' | 'submitMSISDNAction';\n\nexport type IIdenyifyFlowByMsisdnSumbitNextData = {\n nextAction: IIdentfyFlowByMsisdnNextAction;\n msisdn?: string;\n operator?: string;\n};\n\nexport type IIdenyifyFlowByMsisdnPayload = {\n type: 'IDENTIFY_FLOW_BY_MSISDN';\n result: RDS.RemoteDataState<IDENTIFYMSISDNEntryFailure, IDENTIFYMSISDNEntrySuccess>;\n data: IIdenyifyFlowByMsisdnSumbitNextData;\n};\n\nexport type IIdenyifyStrategyPayload = {\n type: 'IDENTIFY_FLOW_BY_MSISDN';\n result: RDS.RemoteDataState<IDENTIFYMSISDNEntryFailure, IDENTIFYMSISDNEntrySuccess>;\n data: IIdenyifyFlowByMsisdnSumbitNextData;\n};\n\nexport type IStrategyCurrentState =\n | {\n type: 'IDENTIFY_STRATEGY';\n result: RDS.RemoteDataState<IDENTIFYFailure, IDENTIFYSuccess>;\n }\n | {\n type: 'IDENTIFY_FLOW_BY_OPERATOR_SELECT';\n result: OPERATORSelectFlowIdentifySuccess;\n }\n | {\n type: 'DETECT_OPERATOR_BY_IP';\n result: RDS.RemoteDataState<IDETECTYOPERATOBYIPFailure, IDETECTYOPERATOBYIPSuccess>;\n }\n | {\n type: 'HE_IDENTIFY';\n result: RDS.RemoteDataState<IDENTIFYFailure, IDENTIFYSuccess>;\n }\n | {\n type: 'OPERATOR_SELECT';\n result: RDS.RemoteDataState<OPERATORSelectFailure, OPERATORSelectSuccess>;\n config: IConfig;\n }\n | {\n type: 'IDENTIFY_FLOW_BY_MSISDN';\n result: RDS.RemoteDataState<IDENTIFYMSISDNEntryFailure, IDENTIFYMSISDNEntrySuccess>;\n nextData: IIdenyifyFlowByMsisdnSumbitNextData;\n }\n | {\n type: 'PIN';\n result: IdentifyFlowOptionsResult;\n }\n | {\n type: 'MO';\n result: IdentifyFlowOptionsResult;\n }\n | {\n type: 'USSD';\n result: IdentifyFlowOptionsResult;\n }\n | {\n type: 'MO_REDIR';\n result: IdentifyFlowOptionsResult;\n }\n | {\n type: 'ONE_CLICK';\n result: IdentifyFlowOptionsResult;\n }\n | {\n type: 'CLICK2SMS';\n result: IdentifyFlowOptionsResult;\n }\n | {\n type: 'TPAY_HE';\n result: IdentifyFlowOptionsResult;\n }\n | {\n type: 'CREDIT_CARD';\n result: IdentifyFlowOptionsResult;\n };\n\nexport type IStrategyIDentifyUserResult =\n | {\n success: 'true';\n rockman_id: string;\n msisdn: string;\n operator?: string;\n subscription_url?: string;\n redirect_url?: string;\n 'redirect-back'?: string;\n 'msisdn-alias'?: string;\n }\n | {\n success: 'false';\n rockman_id: string;\n message: string;\n 'redirect-back'?: string;\n };\n\nexport type IMockFlows = 'pin' | 'mo' | 'oneclick' | 'click2sms' | 'moredir' | 'ussd' | 'tpay' | 'creditcard';\n\nexport interface IMockFlowParams<T> {\n 'mock-flow': IMockFlows;\n 'current-state': T;\n 'show-pin-entry': '1' | '0';\n 'show-thank-you': '1' | '0';\n operator: string;\n msisdn?: string;\n 'subscription-url'?: string;\n}\n\nexport interface IScriptHeaderEnrichmentSuccess extends CustomEvent {\n detail: {\n msisdn: string;\n operator_code: string;\n };\n}\n\nexport interface ExtraStrategyData {\n isHeaderEnrichmentSuccess?: boolean;\n config?: ConfigDetails;\n msisdn?: string;\n rockman_id?: string;\n operator?: string;\n subscription_url?: string;\n redirect_url?: string;\n operators?: string[];\n}\nexport interface StrategyState {\n currentState: StrategyCurrentState;\n}\n\nexport interface StrategyCurrentState {\n type: PossibleTypes;\n result: RDS.RemoteDataState<any, any>;\n data?: ExtraStrategyData;\n}\n\nexport type IMockPinFlowStates = 'msisdn-state' | 'pin-state' | 'completed-state' | 'msisdn-failure-state';\n\nexport interface RootState {\n strategy?: StrategyState;\n pinFlow?: PinFlowState;\n moFlow?: MoFlowState;\n moRedirFlow?: MoRedirFlowState;\n click2smsFlow?: Click2smsFlowState;\n oneClickFlow?: OneClickFlowState;\n ussdFlow?: UssdFlowState;\n creditCardFlow?: CreditCardFlowState;\n}\n","import { IIdentifyResult, IStrategyIDentifyUserResult } from '../../sharedFlowTypes/StrategyTypes';\nimport { bupperizeCountry } from '../../utilities/bupperizeCountry';\n\nconst fetchJsonp: <T>({ window, _url }: { window: Window; _url: string }) => Promise<T> = ({\n window,\n _url\n}: {\n window: Window;\n _url: string;\n}) => {\n let url = _url;\n const ouisys_callback_function = `ouisys_callback_function${Math.floor(Math.random() * 10000)}`;\n return new Promise((resolve, reject) => {\n (window as any)[ouisys_callback_function] = (arg: any) => {\n resolve(arg);\n };\n\n url += url.indexOf('?') === -1 ? '?' : '&';\n url += `jsonp=${ouisys_callback_function}`;\n const script = document.createElement('script');\n script.src = url;\n script.id = ouisys_callback_function;\n document.body.appendChild(script);\n\n // Caught if got 404/500\n script.onerror = () => {\n reject(new Error(`JSONP request to ${_url} failed`));\n };\n });\n};\nconst identify = async ({\n window,\n slug,\n country,\n msisdn,\n device,\n offer,\n rockmanId\n}: {\n window: Window;\n slug: string;\n country: string;\n msisdn: string;\n device: string;\n offer: string;\n rockmanId: string;\n}): Promise<IIdentifyResult> => {\n const languageCode = window.languageCode ? `&language_code=${window.languageCode}` : '';\n const locationHref = encodeURIComponent(window.location.href);\n\n const host = (window as Window).DEV_BASE_URL || '';\n\n const params = {\n action: 'identify',\n slug,\n country,\n msisdn,\n device,\n offerId: offer,\n rockman_id: rockmanId,\n page: locationHref,\n language_code: languageCode\n };\n\n const urlParams = new URLSearchParams(params).toString();\n const url = `${host}/tallyman/v1/?${urlParams}`;\n\n const response = await fetch(url);\n return response.json();\n};\n\nconst identifyUserGetSubscriptionUrl = async ({\n window,\n country,\n slug,\n device,\n offer,\n rockmanId,\n extraParamsQs = '',\n search = ''\n}: {\n window: Window;\n country: string;\n slug: string;\n device: string;\n offer: string;\n rockmanId: string;\n extraParamsQs?: string;\n search?: string;\n}): Promise<IStrategyIDentifyUserResult> => {\n const xaid = window.pac_analytics.visitor.xaid || '';\n const locationHref = encodeURIComponent(window.location.href);\n const pixelUrl = encodeURIComponent(\n `http://${window.location.host}/pixels?xcid=${window.location.pathname.replace(\n '/',\n ''\n )}&xaid=${xaid}&country=${bupperizeCountry(country)}`\n );\n\n const params = {\n action: 'identify-user',\n country: bupperizeCountry(country),\n slug,\n device,\n offerId: offer,\n page: locationHref,\n pixel_url: pixelUrl,\n rockman_id: rockmanId,\n extraParamsQs,\n search\n };\n\n const urlParams = new URLSearchParams(params).toString();\n const host = window.DEV_BASE_URL || '';\n const url = `${host}/tallyman/v1/?${urlParams}`;\n\n const response = await fetchJsonp<IStrategyIDentifyUserResult>({\n window,\n _url: url\n });\n return response;\n};\n\nexport { identify, identifyUserGetSubscriptionUrl };\n","import { IError } from '../../common-types/IError';\nimport { IStrategy } from '../../common-types/Strategy';\nimport tryGetIPRangeName from '../../ips/tryGetIPRangeName';\nimport { HEResult, IConfig, IFlow, IIdentifyResult } from '../../sharedFlowTypes/StrategyTypes';\nimport { formatNumberToE164 } from '../../utilities/formatNumberToE164';\nimport { searchToObject } from '../../utilities/searchToObject';\nimport { identify } from './api';\n\nexport async function determineFlowByMsidn({\n window,\n internationalMSISDN,\n configs\n}: {\n window: Window;\n internationalMSISDN: string;\n configs: IStrategy;\n}): Promise<IFlow> {\n if (!internationalMSISDN) {\n const submissionError = new Error(`Error in submitMSISDN() identify action`) as IError;\n submissionError.type = 'SEInvalidMSISDN';\n throw submissionError;\n }\n const msisdn = internationalMSISDN.match(/\\d+/gi)?.join('') || ''; // tallyman API expects international msisdn without unknown special character\n const defaultFlowConfig = configs?.strategyConfigs?.default;\n const config = defaultFlowConfig.flowConfig;\n const operatorsConfig = configs?.strategyConfigs?.operators;\n\n const indentifyFlow = async (): Promise<IIdentifyResult> => {\n const { slug, country, device } = config;\n const { rockmanId } = window.pac_analytics.visitor;\n const { offer } = window.pac_analytics.visitor;\n const flowOperatorResult: IIdentifyResult = await identify({\n window,\n slug,\n country,\n msisdn,\n device,\n offer,\n rockmanId\n });\n return flowOperatorResult;\n };\n const theResult = await indentifyFlow();\n\n const flow = operatorsConfig[theResult.operator] ? operatorsConfig[theResult.operator] : null;\n const cannotDetect =\n theResult.success === false && theResult.message === 'Operator could not be found for the given MSISDN';\n const hlrError =\n theResult.success === false && theResult.message?.indexOf('HLR did not find the operator for given MSISDN') !== -1;\n\n if (cannotDetect || hlrError) {\n const submissionError = new Error(`Error in submitMSISDN() identify action`) as IError & { msisdn: string };\n submissionError.type = 'FlowDetectFailed';\n submissionError.msisdn = msisdn;\n throw submissionError;\n } else if (flow !== null) {\n const flowObj = { operator: theResult.operator, default: defaultFlowConfig, ...flow };\n // @ts-ignore\n return flowObj;\n } else if (flow === null) {\n const flowObj = { operator: theResult.operator, ...defaultFlowConfig };\n // @ts-ignore\n return flowObj;\n } else {\n const submissionError = new Error(`Error in submitMSISDN() identify action`) as IError;\n submissionError.type = 'SEInvalidMSISDN';\n throw submissionError;\n }\n}\n\nexport function determineFlowByOperator({ configs, operator }: { configs: IStrategy; operator: string }): IFlow {\n const defaultFlowConfig = configs?.strategyConfigs?.default;\n const operatorsConfig = configs?.strategyConfigs?.operators;\n\n const flowObj = {\n operator: operator?.toUpperCase(),\n default: defaultFlowConfig,\n ...operatorsConfig[operator?.toUpperCase()]\n };\n // @ts-ignore\n return flowObj;\n}\n\nexport async function determineFlowByOperatorFromIp({\n window,\n configs\n}: {\n window: Window;\n configs: IStrategy;\n}): Promise<IFlow> {\n const operator = await tryGetIPRangeName(window.pac_analytics.visitor);\n const flowObj = determineFlowByOperator({\n configs,\n operator: operator ? operator.toUpperCase() : ''\n });\n return flowObj;\n}\n\nexport function getOperators({ configs }: { configs: IStrategy }): Array<string> {\n const operatorsConfig = configs?.strategyConfigs?.operators;\n const operators = Object.keys(operatorsConfig);\n return operators;\n}\n\nexport const getHeaderEnrichmentResult = async (): Promise<HEResult> => {\n if (typeof window === 'undefined') {\n throw new Error('This function can only be run in a browser environment.');\n }\n\n const searchObj = searchToObject(window) as any; // Assumes the implementation of searchToObject\n if (searchObj.success === 'false') {\n throw new Error(`Error in getRedirectUrl() identify-user action:\\n${searchObj.message || 'NotOn3g'}`);\n }\n const url = searchObj.subscription_url || searchObj.redirect_url;\n if (!url) {\n throw new Error('No URL provided for redirection');\n }\n\n const decodedUrl = window.atob(url);\n const newUrl = new URL(decodedUrl);\n const urlParams = new URLSearchParams(newUrl.search);\n\n let msisdn = urlParams.get('msisdn') || searchObj.msisdn;\n const operator = urlParams.get('operator') || searchObj.operator;\n\n if (msisdn) {\n msisdn = formatNumberToE164(msisdn, window?.pac_analytics?.visitor?.country);\n }\n\n return {\n msisdn: msisdn || '',\n operator: operator || '',\n subscription_url: searchObj.subscription_url ? decodedUrl : undefined,\n redirect_url: searchObj.redirect_url ? decodedUrl : undefined\n };\n};\n\nexport const subscribe: (_url: string) => Promise<string> = async (_url: string) =>\n // const result:ISubscribeResult = await fetch(url + \"&operator=kw_viva\").then((x)=>x.json())\n\n // if(false === result.success){\n // const subscribeError = new Error(`Error in subscribe() one-click-subscribe action:\\n${result.message}`) as IError & {type:string;}\n // subscribeError['type'] = \"SubscriptionError\";\n // throw subscribeError\n // }else{\n '/product';\n// }\n\nexport function mockConfig({ configs, flow }: { configs: IStrategy; flow: string }): IConfig {\n const defaultFlowConfig = configs?.strategyConfigs?.default;\n const operatorsConfig = configs?.strategyConfigs?.operators;\n const opArr = Object.keys(operatorsConfig);\n const r = opArr.filter((o) => operatorsConfig[o].flow === flow);\n const operator = r[0];\n const flowObj = { offer: '1', operator, default: defaultFlowConfig, ...operatorsConfig[operator] };\n\n return flowObj;\n}\n\n// export const mockedPinFlow: StrategyState = {\n// currentState: {\n// type: PossibleTypes.PIN,\n// result: RDS.NothingYet(),\n// data: {\n// config: mockConfig('pin')\n// }\n// }\n// };\n\n// export const mockedMoFlow: StrategyState = {\n// currentState: {\n// type: PossibleTypes.MO,\n// result: RDS.NothingYet(),\n// data: {\n// config: mockConfig('mo')\n// }\n// }\n// };\n\n// export const mockedUssdFlow: StrategyState = {\n// currentState: {\n// type: PossibleTypes.USSD,\n// result: RDS.NothingYet(),\n// data: {\n// config: mockConfig('ussd')\n// }\n// }\n// };\n\n// export const mockedMoRdirFlow: StrategyState = {\n// currentState: {\n// type: PossibleTypes.MO_REDIR,\n// result: RDS.NothingYet(),\n// data: {\n// config: mockConfig('moRedir')\n// }\n// }\n// };\n\n// export const mockedClick2smsFlow: StrategyState = {\n// currentState: {\n// type: PossibleTypes.CLICK2SMS,\n// result: RDS.NothingYet(),\n// data: {\n// config: mockConfig('click2sms')\n// }\n// }\n// };\n\n// export const mockedOneClickFlow: StrategyState = {\n// currentState: {\n// type: PossibleTypes.ONE_CLICK,\n// result: RDS.NothingYet(),\n// data: {\n// config: mockConfig('oneClick')\n// }\n// }\n// };\n\n// export const mockedCreditCardFlow: StrategyState = {\n// currentState: {\n// type: PossibleTypes.CREDIT_CARD,\n// result: RDS.NothingYet(),\n// data: {\n// config: mockConfig('creditCard')\n// }\n// }\n// };\n// export const mockedMOFlow : State = { type: \"MO\", result:moFlow(mockTracker, mockConfig(\"mo\"))}\n// export const mockedOneClickFlow : State = { type: \"ONECLICK\", result:oneClickFlow(mockTracker, mockConfig(\"oneClick\"), {\"testextraparams\":\"1\"})}\n// export const mockedClick2smsFlow : State = { type: \"CLICK2SMS\", result:click2smsFlow(mockTracker, mockConfig(\"click2sms\"))}\n// export const mockedMORedirFlow : State = { type: \"MOREDIR\", result:moRedirFlow(mockTracker, mockConfig(\"moRedir\"))}\n","import { createAsyncThunk } from '@reduxjs/toolkit';\nimport * as RDS from '../../../common-types/RemoteDataState';\nimport { getConfig } from '../../../utilities/getConfig';\nimport { tracker } from '../../../utilities/tracker';\n\nimport {\n IDENTIFYMSISDNEntryErrorTypes,\n IFlow,\n PossibleTypes,\n StrategyCurrentState\n} from '../../../sharedFlowTypes/StrategyTypes';\nimport { determineFlowByMsidn } from '../main';\n\nexport const askMobileNumber = (): StrategyCurrentState => ({\n type: PossibleTypes.IDENTIFY_FLOW_BY_MSISDN,\n result: RDS.NothingYet()\n});\n\nexport const submitMSISDNAction = createAsyncThunk(\n 'strategy/submitMSISDNAction',\n async (\n {\n window,\n msisdn\n }: {\n window: Window;\n msisdn: string;\n isHeSuccess?: boolean;\n },\n { rejectWithValue }\n ) => {\n try {\n const configs = getConfig();\n const { strategy } = configs;\n const flowObj = await determineFlowByMsidn({ window, internationalMSISDN: msisdn, configs });\n\n switch (strategy) {\n case 'pin-mo-redir-ask-mobile-number':\n return pinMoRedirAskMobileNumber(flowObj, msisdn);\n case 'pin-mo-ask-mobile-number':\n return pinMoAskMobileNumber(flowObj, msisdn);\n case 'pin-combo-ask-mobile-number':\n return pinComboAskMobileNumber(flowObj, msisdn);\n case 'mo-redir-mo-click2sms-one-click-detect-operator-by-ip-or-msisdn':\n return moRedirMoClick2smsOneClickDetectOperatorByIpOrMsisdn(flowObj, msisdn);\n case 'pin-mo-mo-redir-ask-mobile-number':\n return pinMoMoRedirAskMobileNumber(flowObj, msisdn);\n case 'pin-click2sms-ask-mobile-number':\n return pinClick2smsAskMobileNumber(flowObj, msisdn);\n default:\n return rejectWithValue('Unknown strategy');\n }\n } catch (ex) {\n let errorType: IDENTIFYMSISDNEntryErrorTypes;\n switch (ex.type) {\n case 'SEAlreadySubscribed':\n errorType = 'AlreadySubscribed';\n break;\n case 'SEInvalidMSISDN':\n errorType = 'InvalidMSISDN';\n break;\n default:\n errorType = 'UnknownError';\n }\n return rejectWithValue({\n errorType,\n error: ex,\n productUrl: ex.productUrl\n });\n }\n }\n);\n\nexport const headerEnrichmentScript = (flowObj: IFlow, msisdn: string, isHeaderEnrichmentSuccess: boolean) => {\n switch (flowObj.flow) {\n case 'pin':\n tracker.sendOptInFlowEvent('Pin');\n return {\n type: PossibleTypes.PIN,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn,\n isHeaderEnrichmentSuccess,\n ...(flowObj.operator && { operator: flowObj.operator })\n }\n };\n\n case 'mo':\n tracker.sendOptInFlowEvent('Msisdn to sms');\n return {\n type: PossibleTypes.MO,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn,\n isHeaderEnrichmentSuccess,\n ...(flowObj.operator && { operator: flowObj.operator })\n }\n };\n\n case 'moRedir':\n tracker.sendOptInFlowEvent('Redirect');\n return {\n type: PossibleTypes.MO_REDIR,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn,\n isHeaderEnrichmentSuccess\n }\n };\n\n default:\n tracker.sendOptInFlowEvent('Pin');\n return {\n type: PossibleTypes.PIN,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n ...(flowObj.operator && { operator: flowObj.operator })\n }\n };\n }\n};\n\nexport const pinMoAskMobileNumber = (flowObj: IFlow, msisdn: string) => {\n switch (flowObj.flow) {\n case 'pin':\n tracker.sendOptInFlowEvent('Pin');\n return {\n type: PossibleTypes.PIN,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn,\n ...(flowObj.operator && { operator: flowObj.operator })\n }\n };\n\n case 'mo':\n tracker.sendOptInFlowEvent('Msisdn to sms');\n return {\n type: PossibleTypes.MO,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn,\n ...(flowObj.operator && { operator: flowObj.operator })\n }\n };\n default:\n tracker.sendOptInFlowEvent('Pin');\n return {\n type: PossibleTypes.PIN,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n ...(flowObj.operator && { operator: flowObj.operator })\n }\n };\n }\n};\n\nexport const pinComboAskMobileNumber = (flowObj: IFlow, msisdn: string) => {\n switch (flowObj.flow) {\n case 'pin':\n tracker.sendOptInFlowEvent('Pin');\n return {\n type: PossibleTypes.PIN,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn,\n ...(flowObj.operator && { operator: flowObj.operator })\n }\n };\n default:\n tracker.sendOptInFlowEvent('Pin');\n return {\n type: PossibleTypes.PIN,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n ...(flowObj.operator && { operator: flowObj.operator })\n }\n };\n }\n};\n\nconst pinMoRedirAskMobileNumber = (flowObj: IFlow, msisdn: string): StrategyCurrentState => {\n switch (flowObj.flow) {\n case 'pin':\n tracker.sendOptInFlowEvent('Pin');\n return {\n type: PossibleTypes.PIN,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn\n }\n };\n case 'moRedir':\n tracker.sendOptInFlowEvent('Redirect');\n return {\n type: PossibleTypes.MO_REDIR,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig\n }\n };\n default:\n tracker.sendOptInFlowEvent('Pin');\n return {\n type: PossibleTypes.PIN,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig\n }\n };\n }\n};\n\nconst pinMoMoRedirAskMobileNumber = (flowObj: IFlow, msisdn: string): StrategyCurrentState => {\n switch (flowObj.flow) {\n case 'pin':\n tracker.sendOptInFlowEvent('Pin');\n return {\n type: PossibleTypes.PIN,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn\n }\n };\n case 'moRedir':\n tracker.sendOptInFlowEvent('Redirect');\n\n return {\n type: PossibleTypes.MO_REDIR,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn\n }\n };\n case 'mo':\n tracker.sendOptInFlowEvent('Msisdn to sms');\n return {\n type: PossibleTypes.MO,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn\n }\n };\n default:\n tracker.sendOptInFlowEvent('Pin');\n return {\n type: PossibleTypes.PIN,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig\n }\n };\n }\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars-experimental\nconst oneClickMoPinDetectOperatorByIpOrMsisdn = (flowObj: IFlow, msisdn: string): StrategyCurrentState => {\n switch (flowObj.flow) {\n case 'oneClick':\n tracker.sendOptInFlowEvent('3G click');\n return {\n type: PossibleTypes.ONE_CLICK,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn\n }\n };\n\n case 'mo':\n tracker.sendOptInFlowEvent('Msisdn to sms');\n return {\n type: PossibleTypes.MO,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn\n }\n };\n\n default:\n tracker.sendOptInFlowEvent('Pin');\n return {\n type: PossibleTypes.PIN,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n rockman_id: flowObj.rockman_id\n }\n };\n }\n};\n\nexport const moRedirMoClick2smsOneClickDetectOperatorByIpOrMsisdn = (\n flowObj: IFlow,\n msisdn: string\n): StrategyCurrentState => {\n switch (flowObj.flowOnWifi) {\n case 'moRedir':\n tracker.sendOptInFlowEvent('Redirect');\n return {\n type: PossibleTypes.MO_REDIR,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn\n }\n };\n case 'mo':\n tracker.sendOptInFlowEvent('Msisdn to sms');\n return {\n type: PossibleTypes.MO,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn\n }\n };\n default:\n tracker.sendOptInFlowEvent('Redirect');\n return {\n type: PossibleTypes.MO_REDIR,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n rockman_id: flowObj.rockman_id\n }\n };\n }\n};\nexport const pinClick2smsAskMobileNumber = (flowObj: IFlow, msisdn: string): StrategyCurrentState => {\n switch (flowObj.flow) {\n case 'pin':\n tracker.sendOptInFlowEvent('Pin');\n return {\n type: PossibleTypes.PIN,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn\n }\n };\n case 'click2sms':\n tracker.sendOptInFlowEvent('Click to sms');\n return {\n type: PossibleTypes.CLICK2SMS,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n msisdn\n }\n };\n\n default:\n tracker.sendOptInFlowEvent('Pin');\n return {\n type: PossibleTypes.CLICK2SMS,\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig\n }\n };\n }\n};\n","import { createAsyncThunk } from '@reduxjs/toolkit';\nimport * as RDS from '../../../common-types/RemoteDataState';\n\nimport { PossibleTypes, StrategyCurrentState } from '../../../sharedFlowTypes/StrategyTypes';\nimport { getConfig } from '../../../utilities/getConfig';\nimport { tracker } from '../../../utilities/tracker';\nimport { determineFlowByOperator, getOperators } from '../main';\n\nexport const askOperator = (): StrategyCurrentState => {\n const configs = getConfig();\n const operators = getOperators({ configs });\n return {\n type: PossibleTypes.IDENTIFY_FLOW_BY_OPERATOR_SELECT,\n result: RDS.NothingYet(),\n data: {\n operators\n }\n };\n};\n\nexport const selectOperatorAction = createAsyncThunk(\n 'strategy/selectOperatorAction',\n async (\n {\n operator\n }: {\n operator: string;\n },\n { rejectWithValue }\n ) => {\n try {\n const configs = getConfig();\n\n const flowObj = determineFlowByOperator({\n configs,\n operator\n });\n\n switch (flowObj.flow) {\n case 'pin':\n tracker.sendOptInFlowEvent('Pin');\n return {\n type: PossibleTypes.PIN,\n result: {\n config: flowObj.flowConfig,\n operator\n }\n };\n case 'mo':\n tracker.sendOptInFlowEvent('Msisdn to sms');\n return {\n type: PossibleTypes.MO,\n result: {\n config: flowObj.flowConfig,\n operator\n }\n };\n case 'click2sms':\n tracker.sendOptInFlowEvent('Click to sms');\n return {\n type: PossibleTypes.CLICK2SMS,\n result: {\n config: {\n operators: [operator],\n ...flowObj.flowConfig\n },\n operator\n }\n };\n case 'oneClick':\n tracker.sendOptInFlowEvent('3G click');\n return {\n type: PossibleTypes.ONE_CLICK,\n result: {\n config: flowObj.flowConfig,\n operator,\n autoRedirect: true\n }\n };\n default:\n tracker.sendOptInFlowEvent('Pin');\n\n return {\n type: PossibleTypes.PIN,\n result: RDS.NothingYet()\n };\n }\n } catch (ex) {\n const errorType = 'UnkownError';\n return rejectWithValue({\n errorType,\n error: ex.toString()\n });\n }\n }\n);\n","import * as RDS from '../../../common-types/RemoteDataState';\n\nimport { IOptInFlowName } from '../../../common-types/IOptInFlowName';\nimport { ISupportedFlows, PossibleTypes } from '../../../sharedFlowTypes/StrategyTypes';\nimport { getConfig } from '../../../utilities/getConfig';\nimport { tracker } from '../../../utilities/tracker';\nimport { determineFlowByOperatorFromIp } from '../main';\n\n// @ts-ignore\nconst trackerEventMapping: Record<ISupportedFlows, IOptInFlowName> = {\n mo: 'Msisdn to sms',\n pin: 'Pin',\n oneClick: '3G click',\n moRedir: 'Redirect',\n click2sms: 'Click to sms',\n ussd: 'Msisdn to sms'\n};\n\nconst flowMapping: Record<ISupportedFlows, PossibleTypes> = {\n mo: PossibleTypes.MO,\n pin: PossibleTypes.PIN,\n oneClick: PossibleTypes.ONE_CLICK,\n moRedir: PossibleTypes.MO_REDIR,\n click2sms: PossibleTypes.CLICK2SMS,\n ussd: PossibleTypes.USSD,\n creditCard: PossibleTypes.CREDIT_CARD\n};\nconst detectOperatorByIp = async () => {\n try {\n const configs = getConfig();\n\n const flowObj = await determineFlowByOperatorFromIp({\n window,\n configs\n });\n const getTrackerEventName = (flowType: ISupportedFlows) => trackerEventMapping[flowType];\n\n const flowType = flowObj.flow;\n const event = getTrackerEventName(flowType);\n\n tracker.sendOptInFlowEvent(event);\n\n return {\n type: flowMapping[flowType],\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n operator: flowObj.operator\n }\n };\n } catch (ex) {\n console.error('error', ex);\n }\n};\n\nexport { detectOperatorByIp };\n","import { createAsyncThunk, createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport * as RDS from '../../common-types/RemoteDataState';\nimport { searchToObject } from '../../utilities/searchToObject';\n\nimport {\n IMockFlowParams,\n IMockPinFlowStates,\n PossibleTypes,\n RootState,\n StrategyCurrentState,\n StrategyState\n} from '../../sharedFlowTypes/StrategyTypes';\nimport { getConfig } from '../../utilities/getConfig';\nimport { determineFlowByOperator } from './main';\nimport { askMobileNumber, submitMSISDNAction } from './strategies/askMobileNumber';\nimport { askOperator, selectOperatorAction } from './strategies/askOperator';\n\nimport { tracker } from '../../utilities/tracker';\nimport { detectOperatorByIp } from './strategies/detectOperatorByIp';\n\nconst initialState: StrategyState = {\n currentState: {\n type: PossibleTypes.IDENTIFY_STRATEGY,\n result: RDS.NothingYet(),\n data: undefined\n }\n};\n\nconst mockStrategyStateByUrlParam = (): StrategyCurrentState => {\n const search = searchToObject(window) as IMockFlowParams<any>;\n\n if (search['mock-flow'] !== undefined) {\n if (search.operator !== undefined) {\n window.operator = search.operator;\n }\n\n switch (search['mock-flow']) {\n case 'pin':\n return {\n type: PossibleTypes.PIN,\n result: RDS.Success({})\n };\n\n case 'mo':\n return {\n type: PossibleTypes.MO,\n result: RDS.Success({})\n };\n case 'moredir':\n return {\n type: PossibleTypes.MO_REDIR,\n result: RDS.Success({})\n };\n case 'oneclick':\n return {\n type: PossibleTypes.ONE_CLICK,\n result: RDS.Success({}),\n data: {\n subscription_url: search['subscription-url']\n }\n };\n case 'click2sms':\n return {\n type: PossibleTypes.CLICK2SMS,\n result: RDS.Success({})\n };\n case 'ussd':\n return {\n type: PossibleTypes.USSD,\n result: RDS.Success({})\n };\n case 'creditcard':\n return {\n type: PossibleTypes.CREDIT_CARD,\n result: RDS.Success({})\n };\n default:\n throw new Error('(mockStrategyStateByUrlParam) Strategy Mock Flow not supported');\n }\n }\n};\n\n/**\n * Identify Strategy\n * @returns {type: 'strategy/identifyStrategy', payload: {type: PossibleTypes.MO, result: IdentifyFlowOptionsResult}}\n * - Add type\n * - Makes a decision on which strategy to use in order to identify the flow\n * - Strategy could be asking user's phone number, selecting an operator etc\n * - all with the intension of getting the flow and its configuration\n * - Flows are usually tied to an operator in the pages config.json\n * - But they could also be single flows\n *\n */\n\nexport const identifyStrategy = createAsyncThunk('strategy/identifyStrategy', async () => {\n const configs = getConfig();\n const { strategy, strategyConfigs } = configs;\n // const { isUseMsisdnPrefix } = strategyConfigs;\n const search = searchToObject(window) as IMockFlowParams<IMockPinFlowStates>;\n if (search['mock-flow'] !== undefined) {\n return mockStrategyStateByUrlParam();\n }\n if (\n (search['show-pin-entry'] && search['show-pin-entry'] === '1') ||\n (search['show-thank-you'] && search['show-thank-you'] === '1')\n ) {\n const flowObj = determineFlowByOperator({\n configs,\n operator: search.operator\n });\n const strategyResult: StrategyCurrentState = {\n type: PossibleTypes.PIN,\n result: RDS.Success({}),\n data: {\n config: flowObj?.flowConfig || strategyConfigs?.default?.flowConfig\n }\n };\n return strategyResult;\n }\n\n if (strategy.includes('ask-operator')) {\n return askOperator();\n }\n if (strategy.includes('detect-operator-by-ip')) {\n return detectOperatorByIp();\n }\n if (strategy?.includes('ask-mobile-number')) {\n return askMobileNumber();\n }\n\n if (strategy?.includes('header-enrichment') && strategy !== 'header-enrichment-script') {\n // const n = await handleHeaderEnrichment();\n // @ts-ignore\n // eslint-disable-next-line no-console\n // console.log('n', n);\n // return n;\n }\n\n switch (strategy) {\n // REOVING THIS AS IT INJECTS UNUSED CODE\n // case 'header-enrichment-script':\n // eslint-disable-next-line no-return-await\n // return injectHeaderEnrichmentScript({\n // window\n // });\n case 'pin': {\n tracker.sendOptInFlowEvent('Pin');\n return {\n type: PossibleTypes.PIN,\n result: RDS.Success({}),\n data: {\n config: strategyConfigs?.default?.flowConfig\n }\n };\n }\n case 'mo':\n tracker.sendOptInFlowEvent('Msisdn to sms');\n return {\n type: PossibleTypes.MO,\n result: RDS.Success({}),\n data: {\n config: strategyConfigs?.default?.flowConfig\n }\n };\n case 'mo-redir':\n return {\n type: PossibleTypes.MO_REDIR,\n result: RDS.Success({}),\n data: {\n config: strategyConfigs?.default?.flowConfig\n }\n };\n case 'one-click':\n tracker.sendOptInFlowEvent('Redirect');\n return {\n type: PossibleTypes.ONE_CLICK,\n result: RDS.Success({}),\n data: {\n config: strategyConfigs?.default?.flowConfig\n }\n };\n case 'click2sms':\n tracker.sendOptInFlowEvent('Click to sms');\n return {\n type: PossibleTypes.CLICK2SMS,\n result: RDS.Success({}),\n data: {\n config: strategyConfigs?.default?.flowConfig\n }\n };\n case 'ussd':\n tracker.sendOptInFlowEvent('USSD');\n return {\n type: PossibleTypes.USSD,\n result: RDS.Success({}),\n data: {\n config: strategyConfigs?.default?.flowConfig\n }\n };\n case 'credit-card':\n // @ts-ignore\n tracker.sendOptInFlowEvent('Credit card');\n return {\n type: PossibleTypes.CREDIT_CARD,\n result: RDS.Success({}),\n data: {\n config: strategyConfigs?.default?.flowConfig\n }\n };\n default:\n throw new Error('Strategy not supported');\n }\n});\n\nexport const setStrategyExtraData = createAsyncThunk(\n 'strategy/setStrategyExtraData',\n async ({ type, data }: { type: PossibleTypes; data: any }) => ({\n type,\n result: RDS.NothingYet(),\n data\n })\n);\n\nexport const strategySlice = createSlice({\n name: 'strategy',\n initialState,\n reducers: {\n // Define synchronous reducers as needed\n },\n extraReducers: (builder) => {\n // @ts-ignore\n builder\n .addCase(identifyStrategy.pending, (state) => {\n state.currentState = {\n type: PossibleTypes.IDENTIFY_STRATEGY,\n result: RDS.Loading()\n };\n })\n // @ts-ignore\n .addCase(identifyStrategy.fulfilled, (state, action: PayloadAction<StrategyCurrentState>) => {\n state.currentState = action.payload;\n })\n .addCase(identifyStrategy.rejected, (state, action) => {\n state.currentState = {\n type: PossibleTypes.IDENTIFY_STRATEGY,\n result: RDS.Failure(action.error.message)\n };\n })\n .addCase(submitMSISDNAction.pending, (state) => {\n state.currentState = {\n type: PossibleTypes.IDENTIFY_FLOW_BY_MSISDN,\n result: RDS.Loading()\n };\n })\n .addCase(submitMSISDNAction.fulfilled, (state, action: PayloadAction<StrategyCurrentState>) => {\n state.currentState = action.payload;\n })\n .addCase(submitMSISDNAction.rejected, (state, action) => {\n state.currentState = {\n type: PossibleTypes.IDENTIFY_FLOW_BY_MSISDN,\n result: RDS.Failure(action.payload)\n };\n })\n .addCase(setStrategyExtraData.fulfilled, (state, action) => {\n state.currentState = action.payload;\n })\n .addCase(selectOperatorAction.pending, (state) => {\n state.currentState = {\n type: PossibleTypes.IDENTIFY_FLOW_BY_OPERATOR_SELECT,\n result: RDS.Loading()\n };\n })\n .addCase(selectOperatorAction.fulfilled, (state, action: PayloadAction<any>) => {\n state.currentState = action.payload;\n })\n .addCase(selectOperatorAction.rejected, (state, action) => {\n state.currentState = {\n type: PossibleTypes.IDENTIFY_FLOW_BY_OPERATOR_SELECT,\n result: RDS.Failure(action.payload)\n };\n });\n }\n});\n\nexport const selectStrategyState = (state: RootState) => state.strategy;\nexport const strategyReducer = strategySlice.reducer;\n"],"names":["PossibleTypes","identify","_a","window","slug","country","msisdn","device","offer","rockmanId","languageCode","concat","locationHref","encodeURIComponent","location","href","host","DEV_BASE_URL","urlParams","URLSearchParams","action","offerId","rockman_id","page","language_code","toString","url","fetch","_b","sent","json","determineFlowByMsidn","internationalMSISDN","configs","submissionError","Error","type","match","join","defaultFlowConfig","_c","strategyConfigs","default","config","flowConfig","operatorsConfig","_d","operators","indentifyFlow","__awaiter","_this","pac_analytics","visitor","theResult","_f","flow","operator","cannotDetect","success","message","hlrError","_e","indexOf","__assign","determineFlowByOperator","toUpperCase","determineFlowByOperatorFromIp","tryGetIPRangeName","submitMSISDNAction","createAsyncThunk","rejectWithValue","getConfig","strategy","flowObj","pinMoRedirAskMobileNumber","pinMoAskMobileNumber","pinComboAskMobileNumber","moRedirMoClick2smsOneClickDetectOperatorByIpOrMsisdn","pinMoMoRedirAskMobileNumber","pinClick2smsAskMobileNumber","errorType","ex_1","error","productUrl","tracker","sendOptInFlowEvent","PIN","result","RDS.NothingYet","data","MO","MO_REDIR","flowOnWifi","CLICK2SMS","askOperator","Object","keys","getOperators","IDENTIFY_FLOW_BY_OPERATOR_SELECT","selectOperatorAction","ONE_CLICK","autoRedirect","ex","trackerEventMapping","mo","pin","oneClick","moRedir","click2sms","ussd","flowMapping","USSD","creditCard","CREDIT_CARD","initialState","currentState","IDENTIFY_STRATEGY","undefined","mockStrategyStateByUrlParam","search","searchToObject","RDS.Success","subscription_url","identifyStrategy","includes","getTrackerEventName","flowType","event_1","console","IDENTIFY_FLOW_BY_MSISDN","_g","_h","setStrategyExtraData","strategyReducer","createSlice","name","reducers","extraReducers","builder","addCase","pending","state","RDS.Loading","fulfilled","payload","rejected","RDS.Failure","reducer"],"mappings":"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"}