ouisys-engine 5.0.85 → 5.0.87

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.
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 i,L as s,F as c,N 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"./cleanSearchParams-Dl7ZDlew.js";import{i as v}from"./strategySlice-DuYLxEUR.js";import"pacman-client";import"uuid";import"./getConfig.js";import"./formatNumberToE164-Bd0VHMHJ.js";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,i=n.country,s=n.msisdn,c=n.device,u=n.offer,d=n.rockmanId,l=n.extraParamsQs,m=n.search;return t(void 0,void 0,void 0,(function(){var t,n,v,p,y,S,h;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=f(m),v={action:"trigger-message",slug:a,country:i,msisdn:s,device:c,offerId:u,rockman_id:d,page:encodeURIComponent(null===(h=null==o?void 0:o.location)||void 0===h?void 0:h.href),sam_g_token:o.reCaptchaToken||"",language_code:o.languageCode||"",partner_form_action:(null==t?void 0:t.form_action)?encodeURIComponent(null==t?void 0:t.form_action):"",antifraud_id:o.antifraud_id||"",antifraud_id_js_code:o.antifraud_id_js_code||"",antifraud_id_js_link:o.antifraud_id_js_link||""},p=Object.entries(v).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("&"),y=o.DEV_BASE_URL||"",S="".concat(y,"/tallyman/v1/?").concat(p).concat(m?"&".concat(m):"","&").concat(l),[2,fetch(S).then((function(t){return t.json()}))]}}))}))};function h(e,o,a,i){var s,c;return t(this,void 0,void 0,(function(){var t;return r(this,(function(r){return t=n(n({},o||{}),{offer:null===(c=null===(s=e.pac_analytics)||void 0===s?void 0:s.visitor)||void 0===c?void 0:c.offer}),[2,w(e,t,a,i)]}))}))}function w(e,o,a,i){var s;return t(this,void 0,void 0,(function(){var t,c,u,d,l,m,f,v,p,y,h;return r(this,(function(r){switch(r.label){case 0:return t=o.slug,c=o.country,u=o.device,d=o.offer,l=e.location.search.substr(1)||"",m=i?"&".concat(Object.keys(i).map((function(t){return"".concat(t,"=").concat(i[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:c,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",(h=new Error("".concat(y,":\n").concat(p.message))).type=y,h.productUrl=p.product_url?p.product_url:"",console.error(h),h;return[2,n(n({},p),{keyword:p.displayKeyword})]}}))}))}var _={currentState:{type:"MSISDNEntry",result:i({keyword:"TEST OK",shortcode:"777"})}},b={currentState:{type:"MSISDNEntry",result:c({errorType:"InvalidMSISDN",error:"Invalid Mobile Number"})}},I={currentState:{type:"MSISDNEntry",result:u()}},g=function(t){var r=d(t);if(!r["mock-flow"])return I;switch(r["current-state"]){case"msisdn-entry-failure-state":return b;case"msisdn-entry-success-state":return _;default:return console.error("Mock Flow not supported"),I}}(window),j=o("moFlow/submitMSISDNAction",(function(e,o){var a=e.window,s=e.msisdn,c=e.extraParams,u=o.getState,d=o.rejectWithValue;return t(void 0,void 0,void 0,(function(){var t,e,o,f,v,p,y,S;return r(this,(function(r){switch(r.label){case 0:if(t=u(),!(null===(S=null===(y=null===(p=null==t?void 0:t.strategy)||void 0===p?void 0:p.currentState)||void 0===y?void 0:y.data)||void 0===S?void 0:S.config))return[2,d({errorType:"UnexpectedState"})];e=t.strategy.currentState.data.config,r.label=1;case 1:return r.trys.push([1,5,,6]),m.advancedInFlow("tallyman.v1-mo","msisdn-submitted",{msisdn:s}),[4,h(a,e,s,c)];case 2:return o=r.sent(),m.advancedInFlow("tallyman.v1-mo","msisdn-submission-success",{msisdn:s}),c&&c.storeMsisdn&&"true"===c.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:r.sent(),r.label=4;case 4:return[2,{type:"MSISDNEntry",result:i(n({},o))}];case 5:switch(f=r.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:s,errorType:v||"UnknownError"}),[2,d({errorType:v,productUrl:f.productUrl})];case 6:return[2]}}))}))})),k=o("moFlow/backToStartAction",(function(e,n){var o=n.dispatch,a=n.rejectWithValue;return t(void 0,void 0,void 0,(function(){return r(this,(function(t){try{m.recedeInFlow("tallyman.v1-mo","mo-state","requested to change phone number"),o(v())}catch(t){return console.warn(t),[2,a({errorType:"UnexpectedState"})]}return[2]}))}))})),E=a({name:"moFlow",initialState:g,reducers:{},extraReducers:function(t){t.addCase(j.pending,(function(t){t.currentState={type:"MSISDNEntry",result:s()}})).addCase(j.fulfilled,(function(t,r){t.currentState=r.payload})).addCase(j.rejected,(function(t,r){t.currentState={type:"MSISDNEntry",result:c(r.payload)}}))}}),M=E.reducer;E.actions;export{k as backToStartAction,y as moFlowMatch,M as moFlowReducer,j as submitMSISDNAction,p as useMoFlowState};
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 i,L as s,F as c,N 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"./cleanSearchParams-Dl7ZDlew.js";import{i as v}from"./strategySlice-CqwKXb6-.js";import"pacman-client";import"uuid";import"./getConfig.js";import"./formatNumberToE164-Bd0VHMHJ.js";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,i=n.country,s=n.msisdn,c=n.device,u=n.offer,d=n.rockmanId,l=n.extraParamsQs,m=n.search;return t(void 0,void 0,void 0,(function(){var t,n,v,p,y,S,h;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=f(m),v={action:"trigger-message",slug:a,country:i,msisdn:s,device:c,offerId:u,rockman_id:d,page:encodeURIComponent(null===(h=null==o?void 0:o.location)||void 0===h?void 0:h.href),sam_g_token:o.reCaptchaToken||"",language_code:o.languageCode||"",partner_form_action:(null==t?void 0:t.form_action)?encodeURIComponent(null==t?void 0:t.form_action):"",antifraud_id:o.antifraud_id||"",antifraud_id_js_code:o.antifraud_id_js_code||"",antifraud_id_js_link:o.antifraud_id_js_link||""},p=Object.entries(v).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("&"),y=o.DEV_BASE_URL||"",S="".concat(y,"/tallyman/v1/?").concat(p).concat(m?"&".concat(m):"","&").concat(l),[2,fetch(S).then((function(t){return t.json()}))]}}))}))};function h(e,o,a,i){var s,c;return t(this,void 0,void 0,(function(){var t;return r(this,(function(r){return t=n(n({},o||{}),{offer:null===(c=null===(s=e.pac_analytics)||void 0===s?void 0:s.visitor)||void 0===c?void 0:c.offer}),[2,w(e,t,a,i)]}))}))}function w(e,o,a,i){var s;return t(this,void 0,void 0,(function(){var t,c,u,d,l,m,f,v,p,y,h;return r(this,(function(r){switch(r.label){case 0:return t=o.slug,c=o.country,u=o.device,d=o.offer,l=e.location.search.substr(1)||"",m=i?"&".concat(Object.keys(i).map((function(t){return"".concat(t,"=").concat(i[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:c,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",(h=new Error("".concat(y,":\n").concat(p.message))).type=y,h.productUrl=p.product_url?p.product_url:"",console.error(h),h;return[2,n(n({},p),{keyword:p.displayKeyword})]}}))}))}var _={currentState:{type:"MSISDNEntry",result:i({keyword:"TEST OK",shortcode:"777"})}},b={currentState:{type:"MSISDNEntry",result:c({errorType:"InvalidMSISDN",error:"Invalid Mobile Number"})}},I={currentState:{type:"MSISDNEntry",result:u()}},g=function(t){var r=d(t);if(!r["mock-flow"])return I;switch(r["current-state"]){case"msisdn-entry-failure-state":return b;case"msisdn-entry-success-state":return _;default:return console.error("Mock Flow not supported"),I}}(window),j=o("moFlow/submitMSISDNAction",(function(e,o){var a=e.window,s=e.msisdn,c=e.extraParams,u=o.getState,d=o.rejectWithValue;return t(void 0,void 0,void 0,(function(){var t,e,o,f,v,p,y,S;return r(this,(function(r){switch(r.label){case 0:if(t=u(),!(null===(S=null===(y=null===(p=null==t?void 0:t.strategy)||void 0===p?void 0:p.currentState)||void 0===y?void 0:y.data)||void 0===S?void 0:S.config))return[2,d({errorType:"UnexpectedState"})];e=t.strategy.currentState.data.config,r.label=1;case 1:return r.trys.push([1,5,,6]),m.advancedInFlow("tallyman.v1-mo","msisdn-submitted",{msisdn:s}),[4,h(a,e,s,c)];case 2:return o=r.sent(),m.advancedInFlow("tallyman.v1-mo","msisdn-submission-success",{msisdn:s}),c&&c.storeMsisdn&&"true"===c.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:r.sent(),r.label=4;case 4:return[2,{type:"MSISDNEntry",result:i(n({},o))}];case 5:switch(f=r.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:s,errorType:v||"UnknownError"}),[2,d({errorType:v,productUrl:f.productUrl})];case 6:return[2]}}))}))})),k=o("moFlow/backToStartAction",(function(e,n){var o=n.dispatch,a=n.rejectWithValue;return t(void 0,void 0,void 0,(function(){return r(this,(function(t){try{m.recedeInFlow("tallyman.v1-mo","mo-state","requested to change phone number"),o(v())}catch(t){return console.warn(t),[2,a({errorType:"UnexpectedState"})]}return[2]}))}))})),E=a({name:"moFlow",initialState:g,reducers:{},extraReducers:function(t){t.addCase(j.pending,(function(t){t.currentState={type:"MSISDNEntry",result:s()}})).addCase(j.fulfilled,(function(t,r){t.currentState=r.payload})).addCase(j.rejected,(function(t,r){t.currentState={type:"MSISDNEntry",result:c(r.payload)}}))}}),M=E.reducer;E.actions;export{k as backToStartAction,y as moFlowMatch,M as moFlowReducer,j as submitMSISDNAction,p as useMoFlowState};
2
2
  //# sourceMappingURL=moFlow.js.map
@@ -1,2 +1,2 @@
1
- import{__awaiter as r,__generator as e,__assign as t}from"tslib";import{createAsyncThunk as n,createSlice as a}from"@reduxjs/toolkit";import{S as o,L as i,F as s,N as c}from"./RemoteDataState-lcf8PfJd.js";import{searchToObject as d}from"./searchToObject.js";import{s as u}from"./storeMsisdn-Cjq8_qYH.js";import{t as l}from"./tracker-DaaILhEr.js";import{t as m,i as f}from"./strategySlice-DuYLxEUR.js";import{c as v}from"./cleanSearchParams-Dl7ZDlew.js";import"pacman-client";import"uuid";import"./getConfig.js";import"./formatNumberToE164-Bd0VHMHJ.js";var p=function(r){return r((function(r){return r.moRedirFlow.currentState}))};function y(r){var e=r.msisdnEntry;return function(r){return r.type,e(r.result)}}var S=function(n){var a=n.window,o=n.slug,i=n.country,s=n.msisdn,c=n.device,d=n.offer,u=n.rockmanId,l=n.ip_range_name,m=n.search,f=n.extraParamsQs,p=n.email,y=n.password;return r(void 0,void 0,void 0,(function(){var r,n,S,w,h,_,g,I;return e(this,(function(e){return m=v(m),r=new URLSearchParams(t(t(t(t(t(t({action:"redirect",slug:o,country:i,device:c,offerId:d.toString(),rockman_id:u,page:encodeURIComponent(a.location.href),antifraud_id:a.antifraud_id||"",antifraud_id_js_code:a.antifraud_id_js_code||"",antifraud_id_js_link:a.antifraud_id_js_link||"",network_type:l?"":"wifi"},(null===(_=null===(h=null===(w=a.pac_analytics)||void 0===w?void 0:w.visitor)||void 0===h?void 0:h.page)||void 0===_?void 0:_.includes("agency"))&&{evinaTi:u}),(null===(I=null===(g=a.pac_analytics)||void 0===g?void 0:g.visitor)||void 0===I?void 0:I.ip)&&{client_ip:a.pac_analytics.visitor.ip}),a.securityProcessId&&{securityProcessId:a.securityProcessId}),a.languageCode&&{language_code:a.languageCode}),p&&y?{email:p,password:y}:{msisdn:s}),f&&{extraParams:f})).toString(),n=a.DEV_BASE_URL||"",S="".concat(n,"/tallyman/v1/?").concat(r).concat(m?"&".concat(m):""),o.includes("za-mtn-beyondvr-r7")?[2,{success:!0,rockman_id:u,redirect_url:S}]:[2,fetch(S).then((function(r){return r.json()}))]}))}))};function w(n,a,o,i){return r(this,void 0,void 0,(function(){var r;return e(this,(function(e){return r=t({offer:n.pac_analytics.visitor.offer},a||{}),[2,h(n,r,o,i)]}))}))}function h(t,n,a,o){return r(this,void 0,void 0,(function(){var r,i,s,c,d,u,l,f,v,p,y,w,h;return e(this,(function(e){switch(e.label){case 0:return r=n.slug,i=n.country,s=n.device,c=n.offer,d=t.location.search.substr(1)||"",u=o?"&".concat(Object.keys(o).map((function(r){return"".concat(r,"=").concat(o[r])})).join("&")):"",l=a.match(/\d+/gi).join(""),f=t.pac_analytics.visitor,v=f.rockmanId,"ci"!==i?[3,2]:[4,m(f)];case 1:return p=e.sent(),[3,3];case 2:p=null,e.label=3;case 3:return[4,S({window:t,slug:r,country:i,msisdn:l,device:s,offer:c,rockmanId:v,ip_range_name:p,search:d,extraParamsQs:u})];case 4:if(!1===(y=e.sent()).success)throw w="ALREADY SUBSCRIBED"===y.message?"AlreadySubscribed":"InvalidMSISDN",(h=new Error("".concat(w,":\n").concat(y.message))).type=w,console.error(h),h;return[2,y.redirect_url]}}))}))}var _={currentState:{type:"MSISDNEntry",result:o({href:"/product"})}},g={currentState:{type:"MSISDNEntry",result:s({errorType:"InvalidMSISDN",error:"Invalid Mobile Number"})}},I={currentState:{type:"MSISDNEntry",result:c()}},b=function(r){var e=d(r);if(!e["mock-flow"])return I;switch(e["current-state"]){case"msisdn-entry-failure-state":return g;case"msisdn-entry-success-state":return _;default:return console.error("Mock Flow not supported"),I}}(window),j=n("moRedirFlow/submitMSISDNAction",(function(t,n){var a=t.window,i=t.msisdn,s=t.extraParams,c=n.getState,d=n.rejectWithValue;return r(void 0,void 0,void 0,(function(){var r,t,n,m,f,v,p,y;return e(this,(function(e){switch(e.label){case 0:if(r=c(),!(null===(y=null===(p=null===(v=null==r?void 0:r.strategy)||void 0===v?void 0:v.currentState)||void 0===p?void 0:p.data)||void 0===y?void 0:y.config))return[2,d({errorType:"UnexpectedState"})];t=r.strategy.currentState.data.config,e.label=1;case 1:return e.trys.push([1,5,,6]),l.advancedInFlow("tallyman.v1-mo-redir","msisdn-submitted",{msisdn:i}),[4,w(a,t,i,s)];case 2:return n=e.sent(),l.advancedInFlow("tallyman.v1-mo-redir","msisdn-submission-success",{msisdn:i}),s&&s.storeMsisdn&&"true"===s.storeMsisdn?[4,u(i).then((function(r){r&&r.data&&r.data.success?l.customEvent("Flow","advance-auto","msisdn-stored-success"):l.customEvent("Flow","advance-auto","msisdn-stored-failed")})).catch((function(r){l.customEvent("Flow","advance-auto","msisdn-stored-error",r)}))]:[3,4];case 3:e.sent(),e.label=4;case 4:return[2,{type:"MSISDNEntry",result:o({href:n})}];case 5:switch(m=e.sent(),console.warn(m),f=void 0,m.type){case"AlreadySubscribed":f="AlreadySubscribed";break;case"InvalidMSISDN":f="InvalidMSISDN";break;default:f="UnknownError"}return l.recedeInFlow("tallyman.v1-mo-redir","msisdn-submission-failure",{msisdn:i,errorType:"UnknownError"}),[2,d({errorType:f,productUrl:m.productUrl})];case 6:return[2]}}))}))})),k=n("moRedirFlow/backToStartAction",(function(t,n){var a=n.dispatch,o=n.rejectWithValue;return r(void 0,void 0,void 0,(function(){return e(this,(function(r){try{l.recedeInFlow("tallyman.v1-mo-redir","mo-redir-state","requested to change phone number"),a(f())}catch(r){return console.warn(r),[2,o({errorType:"UnexpectedState"})]}return[2]}))}))})),E=a({name:"moRedirFlow",initialState:b,reducers:{},extraReducers:function(r){r.addCase(j.pending,(function(r){r.currentState={type:"MSISDNEntry",result:i()}})).addCase(j.fulfilled,(function(r,e){r.currentState=e.payload})).addCase(j.rejected,(function(r,e){r.currentState={type:"MSISDNEntry",result:s(e.payload)}}))}}),M=E.reducer;E.actions;export{k as backToStartAction,y as moRedirFlowMatch,M as moRedirFlowReducer,j as submitMSISDNAction,p as useMoRedirFlowState};
1
+ import{__awaiter as r,__generator as e,__assign as t}from"tslib";import{createAsyncThunk as n,createSlice as a}from"@reduxjs/toolkit";import{S as o,L as i,F as s,N as c}from"./RemoteDataState-lcf8PfJd.js";import{searchToObject as d}from"./searchToObject.js";import{s as u}from"./storeMsisdn-Cjq8_qYH.js";import{t as l}from"./tracker-DaaILhEr.js";import{t as m,i as f}from"./strategySlice-CqwKXb6-.js";import{c as v}from"./cleanSearchParams-Dl7ZDlew.js";import"pacman-client";import"uuid";import"./getConfig.js";import"./formatNumberToE164-Bd0VHMHJ.js";var p=function(r){return r((function(r){return r.moRedirFlow.currentState}))};function y(r){var e=r.msisdnEntry;return function(r){return r.type,e(r.result)}}var S=function(n){var a=n.window,o=n.slug,i=n.country,s=n.msisdn,c=n.device,d=n.offer,u=n.rockmanId,l=n.ip_range_name,m=n.search,f=n.extraParamsQs,p=n.email,y=n.password;return r(void 0,void 0,void 0,(function(){var r,n,S,w,h,_,g,I;return e(this,(function(e){return m=v(m),r=new URLSearchParams(t(t(t(t(t(t({action:"redirect",slug:o,country:i,device:c,offerId:d.toString(),rockman_id:u,page:encodeURIComponent(a.location.href),antifraud_id:a.antifraud_id||"",antifraud_id_js_code:a.antifraud_id_js_code||"",antifraud_id_js_link:a.antifraud_id_js_link||"",network_type:l?"":"wifi"},(null===(_=null===(h=null===(w=a.pac_analytics)||void 0===w?void 0:w.visitor)||void 0===h?void 0:h.page)||void 0===_?void 0:_.includes("agency"))&&{evinaTi:u}),(null===(I=null===(g=a.pac_analytics)||void 0===g?void 0:g.visitor)||void 0===I?void 0:I.ip)&&{client_ip:a.pac_analytics.visitor.ip}),a.securityProcessId&&{securityProcessId:a.securityProcessId}),a.languageCode&&{language_code:a.languageCode}),p&&y?{email:p,password:y}:{msisdn:s}),f&&{extraParams:f})).toString(),n=a.DEV_BASE_URL||"",S="".concat(n,"/tallyman/v1/?").concat(r).concat(m?"&".concat(m):""),o.includes("za-mtn-beyondvr-r7")?[2,{success:!0,rockman_id:u,redirect_url:S}]:[2,fetch(S).then((function(r){return r.json()}))]}))}))};function w(n,a,o,i){return r(this,void 0,void 0,(function(){var r;return e(this,(function(e){return r=t({offer:n.pac_analytics.visitor.offer},a||{}),[2,h(n,r,o,i)]}))}))}function h(t,n,a,o){return r(this,void 0,void 0,(function(){var r,i,s,c,d,u,l,f,v,p,y,w,h;return e(this,(function(e){switch(e.label){case 0:return r=n.slug,i=n.country,s=n.device,c=n.offer,d=t.location.search.substr(1)||"",u=o?"&".concat(Object.keys(o).map((function(r){return"".concat(r,"=").concat(o[r])})).join("&")):"",l=a.match(/\d+/gi).join(""),f=t.pac_analytics.visitor,v=f.rockmanId,"ci"!==i?[3,2]:[4,m(f)];case 1:return p=e.sent(),[3,3];case 2:p=null,e.label=3;case 3:return[4,S({window:t,slug:r,country:i,msisdn:l,device:s,offer:c,rockmanId:v,ip_range_name:p,search:d,extraParamsQs:u})];case 4:if(!1===(y=e.sent()).success)throw w="ALREADY SUBSCRIBED"===y.message?"AlreadySubscribed":"InvalidMSISDN",(h=new Error("".concat(w,":\n").concat(y.message))).type=w,console.error(h),h;return[2,y.redirect_url]}}))}))}var _={currentState:{type:"MSISDNEntry",result:o({href:"/product"})}},g={currentState:{type:"MSISDNEntry",result:s({errorType:"InvalidMSISDN",error:"Invalid Mobile Number"})}},I={currentState:{type:"MSISDNEntry",result:c()}},b=function(r){var e=d(r);if(!e["mock-flow"])return I;switch(e["current-state"]){case"msisdn-entry-failure-state":return g;case"msisdn-entry-success-state":return _;default:return console.error("Mock Flow not supported"),I}}(window),j=n("moRedirFlow/submitMSISDNAction",(function(t,n){var a=t.window,i=t.msisdn,s=t.extraParams,c=n.getState,d=n.rejectWithValue;return r(void 0,void 0,void 0,(function(){var r,t,n,m,f,v,p,y;return e(this,(function(e){switch(e.label){case 0:if(r=c(),!(null===(y=null===(p=null===(v=null==r?void 0:r.strategy)||void 0===v?void 0:v.currentState)||void 0===p?void 0:p.data)||void 0===y?void 0:y.config))return[2,d({errorType:"UnexpectedState"})];t=r.strategy.currentState.data.config,e.label=1;case 1:return e.trys.push([1,5,,6]),l.advancedInFlow("tallyman.v1-mo-redir","msisdn-submitted",{msisdn:i}),[4,w(a,t,i,s)];case 2:return n=e.sent(),l.advancedInFlow("tallyman.v1-mo-redir","msisdn-submission-success",{msisdn:i}),s&&s.storeMsisdn&&"true"===s.storeMsisdn?[4,u(i).then((function(r){r&&r.data&&r.data.success?l.customEvent("Flow","advance-auto","msisdn-stored-success"):l.customEvent("Flow","advance-auto","msisdn-stored-failed")})).catch((function(r){l.customEvent("Flow","advance-auto","msisdn-stored-error",r)}))]:[3,4];case 3:e.sent(),e.label=4;case 4:return[2,{type:"MSISDNEntry",result:o({href:n})}];case 5:switch(m=e.sent(),console.warn(m),f=void 0,m.type){case"AlreadySubscribed":f="AlreadySubscribed";break;case"InvalidMSISDN":f="InvalidMSISDN";break;default:f="UnknownError"}return l.recedeInFlow("tallyman.v1-mo-redir","msisdn-submission-failure",{msisdn:i,errorType:"UnknownError"}),[2,d({errorType:f,productUrl:m.productUrl})];case 6:return[2]}}))}))})),k=n("moRedirFlow/backToStartAction",(function(t,n){var a=n.dispatch,o=n.rejectWithValue;return r(void 0,void 0,void 0,(function(){return e(this,(function(r){try{l.recedeInFlow("tallyman.v1-mo-redir","mo-redir-state","requested to change phone number"),a(f())}catch(r){return console.warn(r),[2,o({errorType:"UnexpectedState"})]}return[2]}))}))})),E=a({name:"moRedirFlow",initialState:b,reducers:{},extraReducers:function(r){r.addCase(j.pending,(function(r){r.currentState={type:"MSISDNEntry",result:i()}})).addCase(j.fulfilled,(function(r,e){r.currentState=e.payload})).addCase(j.rejected,(function(r,e){r.currentState={type:"MSISDNEntry",result:s(e.payload)}}))}}),M=E.reducer;E.actions;export{k as backToStartAction,y as moRedirFlowMatch,M as moRedirFlowReducer,j as submitMSISDNAction,p as useMoRedirFlowState};
2
2
  //# sourceMappingURL=moRedirFlow.js.map
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 i,createSlice as a}from"@reduxjs/toolkit";import{N as o,S as s,L as c,F as u}from"./RemoteDataState-lcf8PfJd.js";import{i as d,c as l,P as p}from"./strategySlice-DuYLxEUR.js";import{searchToObject as v}from"./searchToObject.js";import{s as f}from"./storeMsisdn-Cjq8_qYH.js";import{t as m}from"./tracker-DaaILhEr.js";import{b as y}from"./bupperizeCountry-CEtt0MKz.js";import{l as S,r as w,a as h}from"./helpers-xPhGBX-B.js";import{l as g}from"./loadScriptInnerHtml-DzB_RpFU.js";import{c as I}from"./cleanSearchParams-Dl7ZDlew.js";import"./getConfig.js";import"./formatNumberToE164-Bd0VHMHJ.js";import"pacman-client";import"uuid";var _=function(e){return e((function(e){return e.pinFlow.currentState}))};function b(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 E=function(e){return"be"===e?"undefined"!=typeof window&&!0===window.shouldBlock?"&is-clean-traffic=false":"&is-clean-traffic=true":""},k=function(n){var i=n.window,a=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,h;return t(this,(function(t){return e=E(a),n="&".concat(Object.keys(l).map((function(e){return l[e]?"".concat(e,"=").concat(l[e]):""})).filter(Boolean).join("&")),p=I(p),m={action:"trigger-pin",country:a,slug:o,device:s,offerId:c,msisdn:u,rockman_id:d,sam_evina_tid:f,page:encodeURIComponent(null===(h=null==i?void 0:i.location)||void 0===h?void 0:h.href),language_code:i.languageCode||"",partner_transaction_id:i.partner_transaction_id||"",partner_timestamp:i.partner_timestamp||"",partner_cid:i.partner_cid||"",uniqid:v||"",antifraud_id:i.antifraud_id||"",antifraud_id_js_code:i.antifraud_id_js_code||"",antifraud_id_js_link:i.antifraud_id_js_link||""},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],i=t[1];return"".concat(n,"=").concat(i)})).join("&"),S=i.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()}))]}))}))},N=function(n){var i=n.window,a=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,m,S,w,h;return t(this,(function(t){return e=E(a),n="&".concat(Object.keys(l).map((function(e){return"".concat(e,"=").concat(l[e])})).join("&")),f={action:"verify-pin",country:y(a),slug:o,device:s,offerId:c,rockman_id:u,pin:d,page:encodeURIComponent(null===(h=null==i?void 0:i.location)||void 0===h?void 0:h.href),language_code:i.languageCode||"",ClickID:i.antifraud_click_id||"",partner_cid:i.partner_cid||"",sam_evina_tid:v,uniqid:p,antifraud_id_js_code:i.antifraud_id_js_code||"",antifraud_id_js_link:i.antifraud_id_js_link||""},m=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],i=t[1];return"".concat(n,"=").concat(i)})).join("&"),S=i.DEV_BASE_URL||"",w="".concat(S,"/tallyman/v1/?").concat(m).concat(e).concat(n),[2,fetch(w).then((function(e){return e.json()}))]}))}))},U=function(r){var i=r.window,a=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=i.location.href,r=i.pac_analytics.visitor.ip,p=new URLSearchParams(n(n({action:"mcp-shield",country:a,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=i.DEV_BASE_URL||"",f="".concat(v,"/tallyman/v1/?").concat(p.toString()),[2,fetch(f).then((function(e){return e.json()}))]}))}))};function j(r,i,a,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},i||{})).automaticallySubmitAllOperators&&e.operators&&e.operators.length>0?[2,M(r,e,a,e.operators,o)]:[2,D(r,e,a,o)]}))}))}var P="";function D(r,i,a,o){return e(this,void 0,void 0,(function(){var e,s,c,u,d,l,p,f,m,y,S,w,h,I,_,b,E,N;return t(this,(function(t){switch(t.label){case 0:if(!a)throw(e=new Error("Error in submitMSISDN() trigger-pin action")).type="InvalidMSISDN",e;return s=o||{},c=!1,"true"===(null==(u=v(r))?void 0:u.success)&&"1"===u["msisdn-alias"]&&(s["skip-validation"]="1"),"1"===s["skip-validation"]&&(c=!0),d=c?a:a.match(/\d+/gi).join(""),l=r.pac_analytics.visitor.rockmanId,p=i.slug,f=i.country,m=i.device,y=i.offer,S=r.location.search.substr(1)||"",w=P&&""!==P?"&mcpUniqid=".concat(P):"",h=void 0!==r&&r.tid?r.tid:"",[4,k({window:r,country:f,slug:p,device:m,offer:y,msisdn:d,rockmanId:l,extraParams:s,search:S,uniqid:w,evinaTid:h})];case 1:if(!1!==(I=t.sent()).success)return[3,2];switch((_=new Error("Error in submitMSISDN() trigger-pin action:\n".concat(I.message))).message=I.message,!0){case I.message.includes("ALREADY SUBSCRIBED"):_.type="AlreadySubscribed";break;case I.message.includes("invalid"):_.type="InvalidMSISDN";break;default:_.type=null}throw _.productUrl=I.product_url?I.product_url:"",console.error(_),_;case 2:if(r.operator=I.operator,b={kw:{kw_viva:"kw_viva"},k2:{k2_viva:"k2_viva"},bh:{bh_viva:"bh_viva"}},!(f&&I.operator&&(b[f.toLowerCase()]&&b[f.toLowerCase()][I.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,U({window:r,country:f,slug:p,device:m,offer:y,rockmanId:l,operator:I.operator,uniqid:w})];case 4:return!1===(E=t.sent()).success?console.warn(E.message):(g(E.source),P=E.uniqid),[3,6];case 5:return N=t.sent(),console.warn(N),[3,6];case 6:return I.javascript&&g(I.javascript),[2,n({type:"SingleMSISDNSubmissionResult",pin:I.pin,uniqidResult:P,operator:I.operator,redirectUrl:null==I?void 0:I.redirect_to_url},(null==I?void 0:I.userType)?{userType:null==I?void 0:I.userType}:{})]}}))}))}function M(r,i,a,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,D(r,i,a,n(n({},s),{operator:o}))];case 1:return e=t.sent(),[2,w(n(n({},e),{operator:o}))];case 2:return c=t.sent(),[2,S(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 C(n,i,a,o){return e(this,void 0,void 0,(function(){var s,c,u,d,l,p,f,m,S,w,g,I,_,b,E,k;return t(this,(function(U){switch(U.label){case 0:if(n.hostCountry&&n.hostSlug&&(a.country=n.hostCountry,a.slug=n.hostSlug),s=a.slug,c=a.country,u=a.device,d=n.pac_analytics.visitor.offer,l=o||{},"true"===(null==(p=v(n))?void 0:p.success)&&"1"===p["msisdn-alias"]&&(l["skip-validation"]="1"),f=n.pac_analytics.visitor.rockmanId,!i)throw(m=new Error("Error in submitMSISDN() verify-pin action:\n Pin Cannot Be Empty")).type="InvalidPIN",m;return S=""!==P?"&mcpUniqid=".concat(P):"",w=void 0!==n&&n.tid?n.tid:"",[4,N({window:n,country:c,slug:s,device:u,offer:d,rockmanId:f,pin:i,extraParams:l,uniqid:S,evinaTid:w})];case 1:if(!1!==(g=U.sent()).success)return[3,2];throw I={"pin does not match":"InvalidPIN","mcp blocked":"SessionBlocked",expired_pin:"ExpiredPIN",insufficient_balance:"InsufficientBalance"}[g.message],(E=new Error("Error in submitMSISDN() verify-pin action:\n".concat(I))).type=I||"InvalidPIN",E.message=g.message,console.error(E),E;case 2:return!0!==g.async?[3,4]:g.product_url&&""!==g.product_url&&"es"===(null==c?void 0:c.toLowerCase())?[2,{gatewayRedirectUrl:g.product_url}]:(_=function(){return function(n){var i=n.window,a=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:y(a),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],i=t[1];return"".concat(n,"=").concat(encodeURIComponent(i))})).join("&"),d=i.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,h(_,100,(function(e){return e.success||"invalid_pin"===e.message}),0)]);case 3:if(!0===(b=U.sent()).success)return k="ALREADY SUBSCRIBED"===g.message,[2,{productUrl:b.product_url||null,isAlreadySubscribed:k}];throw(E=new Error("Error in submitMSISDN() verify-pin action:\n".concat(b.message))).type="InvalidPIN",E.message=b.message,E;case 4:return k="ALREADY SUBSCRIBED"===g.message,[2,{productUrl:g.product_url||null,isAlreadySubscribed:k}]}}))}))}var A={currentState:{type:"PINEntry",result:o(),data:{actualPIN:"",msisdn:"",operator:"",pinMaxLength:4}}},R={currentState:{type:"PINEntry",result:s({finalUrl:"/product"}),data:{actualPIN:"",msisdn:"",operator:"",pinMaxLength:4}}},F={currentState:{type:"MSISDNEntry",result:u({errorType:"InvalidMSISDN",error:"Invalid Mobile Number"})}},T={currentState:{type:"MSISDNEntry",result:o()}},B=function(e){var t=v(e),r=new Event("onPinPage"),n=t["show-pin-entry"]&&"1"===t["show-pin-entry"],i=t["show-thank-you"]&&"1"===t["show-thank-you"],a="1"===(null==t?void 0:t.show_custom_error),c={currentState:{type:"MSISDNEntry",result:u({errorType:"SomethingWentWrong",error:null})}},d={currentState:{type:"PINEntry",result:s({finalUrl:(null==t?void 0:t.product_url)||""}),data:{msisdn:(null==t?void 0:t.msisdn)||"",operator:(null==t?void 0:t.operator)||""}}},l={currentState:{type:"PINEntry",result:o(),data:{msisdn:(null==t?void 0:t.msisdn)||"",operator:(null==t?void 0:t.operator)||""}}};if(n)return null==e||e.dispatchEvent(r),l;if(i)return d;if(a)return c;if(!t["mock-flow"])return T;switch(t["current-state"]){case"msisdn-failure-state":return F;case"pin-state":return null==e||e.dispatchEvent(r),A;case"completed-state":return R;default:return console.error("Mock Flow not supported"),T}}(window),x=i("pinFlow/submitMSISDNAction",(function(r,i){var a=r.window,s=r.msisdn,c=r.extraParams,u=i.getState,d=i.dispatch,v=i.rejectWithValue;return e(void 0,void 0,void 0,(function(){var e,r,i,y,S,w,h,g,I,_,b,E,k,N,U;return t(this,(function(t){switch(t.label){case 0:if(e=u(),!(null===(N=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===N?void 0:N.config))return[2,v({errorType:"UnexpectedState"})];r=e.strategy.currentState.data,i=r.config,y=r.isHeaderEnrichmentSuccess,S=null===(U=e.pinFlow)||void 0===U?void 0:U.currentState,t.label=1;case 1:return t.trys.push([1,5,,6]),"ps"===(null==i?void 0:i.country.toLowerCase())&&(null==i?void 0:i.slug.includes("shemaroo"))&&"+970"===V(null==i?void 0:i.country,s)&&(s=s.replace("970","972")),m.advancedInFlow("tallyman.v1-pin","msisdn-submitted",{msisdn:s}),[4,j(a,i,s)];case 2:return w=t.sent(),m.advancedInFlow("tallyman.v1-pin","msisdn-submission-success",{msisdn:s}),"SingleMSISDNSubmissionResult"===w.type&&w.redirectUrl&&(m.advancedInFlow("tallyman.v1-pin","msisdn-submission-success",{msisdn:s}),m.customEvent("Flow","advance-auto","msisdn-redirect",{redirectUrl:w.redirectUrl}),a.location.href=w.redirectUrl),c&&c.storeMsisdn&&"true"===c.storeMsisdn?[4,f(s).then((function(e){e&&e.data&&e.data.success?m.customEvent("Flow","advance-auto","msisdn-stored-success"):m.customEvent("Flow","advance-auto","msisdn-stored-failed")})).catch((function(e){m.customEvent("Flow","advance-auto","msisdn-stored-error",e)}))]:[3,4];case 3:t.sent(),t.label=4;case 4:return h="SingleMSISDNSubmissionResult"===w.type?w.operator:"",g={SA_MOBILY:6,SA_STC:4,SA_ZAIN:4},I=new Event("onPinPage"),null==a||a.dispatchEvent(I),[2,n(n({},S),{type:"PINEntry",result:o(),data:n({actualPIN:"SingleMSISDNSubmissionResult"===w.type?w.pin:null,msisdn:s,operator:h,pinMaxLength:""!==h&&g[h]?g[h]:null,isHeaderEnrichmentSuccess:y},"SingleMSISDNSubmissionResult"===w.type&&(null==w?void 0:w.userType)?{userType:w.userType}:{})})];case 5:switch(_=t.sent(),console.warn(_),b=void 0,_.type){case"AlreadySubscribed":b="AlreadySubscribed";break;case"InvalidMSISDN":b="InvalidMSISDN";break;default:b="UnknownError"}return m.recedeInFlow("tallyman.v1-pin","msisdn-submission-failure",{msisdn:s,errorType:b,error:_.toString(),message:_.message,productUrl:_.productUrl}),y&&d(l({type:p.PIN,data:{isHeaderEnrichmentSuccess:!1,config:i}})),[2,v({errorType:b,error:_.toString(),message:_.message,productUrl:_.productUrl})];case 6:return[2]}}))}))})),L=i("pinFlow/submitPinAction",(function(r,i){var a=r.window,o=r.msisdn,c=r.pin,u=r.extraParams,d=i.getState,l=i.rejectWithValue;return e(void 0,void 0,void 0,(function(){var e,r,i,p,v,y,S,w,h,g;return t(this,(function(t){switch(t.label){case 0:if(e=d(),!(null===(h=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===h?void 0:h.config))return[2,l({errorType:"UnexpectedState"})];r=e.strategy.currentState.data.config,i=null===(g=e.pinFlow)||void 0===g?void 0:g.currentState,t.label=1;case 1:return t.trys.push([1,5,,6]),m.advancedInFlow("tallyman.v1-pin","pin-submitted",{msisdn:o,pin:c}),[4,C(a,c,r,u)];case 2:return p=t.sent(),m.advancedInFlow("tallyman.v1-pin","pin-submission-success",{msisdn:o,pin:c,finalUrl:p.productUrl}),p.gatewayRedirectUrl&&""!==p.gatewayRedirectUrl&&(m.advancedInFlow("tallyman.v1-pin","gateway-redirect",{msisdn:o,pin:c,gatewayRedirectUrl:p.gatewayRedirectUrl}),a.location.href=p.gatewayRedirectUrl),u&&u.storeMsisdn&&"true"===u.storeMsisdn?[4,f(o).then((function(e){e&&e.data&&e.data.success?m.customEvent("Flow","advance-auto","msisdn-stored-success"):m.customEvent("Flow","advance-auto","msisdn-stored-failed")})).catch((function(e){m.customEvent("Flow","advance-auto","msisdn-stored-error",e)}))]:[3,4];case 3:t.sent(),t.label=4;case 4:return[2,n(n({},i),{type:"PINEntry",result:s({finalUrl:p.productUrl,isAlreadySubscribed:p.isAlreadySubscribed||!1})})];case 5:switch(v=t.sent(),console.warn(v),y=void 0,v.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 m.recedeInFlow("tallyman.v1-pin","pin-submission-failure",{msisdn:o,pin:c,errorType:y,error:v.toString(),message:v.message,productUrl:v.productUrl}),setTimeout((function(){v.productUrl&&(a.location.href=v.productUrl)}),0),[2,l({errorType:y,error:v.toString(),message:v.message,productUrl:v.productUrl})];case 6:return[2]}}))}))})),q=i("pinFlow/backToStartAction",(function(r,n){var i=n.dispatch,a=n.rejectWithValue;return e(void 0,void 0,void 0,(function(){return t(this,(function(e){try{m.recedeInFlow("tallyman.v1-pin","pin-state","requested to change phone number"),i(d())}catch(e){return console.warn(e),[2,a({errorType:"UnexpectedState"})]}return[2]}))}))})),O={PS:"970"},V=function(e,t){if(!e||!t)return"";var r=e.toUpperCase(),n=O[r];return n?"+".concat(n):(console.error("Country code not found for",e),"")},W=a({name:"pinFlow",initialState:B,reducers:{},extraReducers:function(e){e.addCase(x.pending,(function(e){e.currentState={type:"MSISDNEntry",result:c(),data:e.currentState.data}})).addCase(x.fulfilled,(function(e,t){e.currentState=t.payload})).addCase(x.rejected,(function(e,t){e.currentState={type:"MSISDNEntry",result:u(t.payload),data:e.currentState.data}})).addCase(L.pending,(function(e){e.currentState={type:"PINEntry",result:c(),data:e.currentState.data}})).addCase(L.fulfilled,(function(e,t){e.currentState=t.payload})).addCase(L.rejected,(function(e,t){e.currentState={type:"PINEntry",result:u(t.payload),data:e.currentState.data}}))}}),H=W.reducer;W.actions;export{q as backToStartAction,b as pinFlowMatch,H as pinFlowReducer,x as submitMSISDNAction,L as submitPinAction,_ as usePinFlowState};
1
+ import{__awaiter as r,__generator as e,__read as t,__assign as n}from"tslib";import{createAsyncThunk as i,createSlice as a}from"@reduxjs/toolkit";import{N as o,S as s,L as c,F as u}from"./RemoteDataState-lcf8PfJd.js";import{i as d,c as l,P as p}from"./strategySlice-CqwKXb6-.js";import{searchToObject as v}from"./searchToObject.js";import{s as f}from"./storeMsisdn-Cjq8_qYH.js";import{t as m}from"./tracker-DaaILhEr.js";import{b as y}from"./bupperizeCountry-CEtt0MKz.js";import{l as S,r as h,a as g}from"./helpers-xPhGBX-B.js";import{l as w}from"./loadScriptInnerHtml-DzB_RpFU.js";import{c as I}from"./cleanSearchParams-Dl7ZDlew.js";import"./getConfig.js";import"./formatNumberToE164-Bd0VHMHJ.js";import"pacman-client";import"uuid";var b=function(r){return r((function(r){return r.pinFlow.currentState}))};function _(r){var e=r.msisdnEntry,t=r.pinEntry;return function(r){switch(r.type){case"MSISDNEntry":return e(r.result);case"PINEntry":return t(r.result,r.data);default:throw new Error("Invalid State")}}}var E=function(r){return"be"===r?"undefined"!=typeof window&&!0===window.shouldBlock?"&is-clean-traffic=false":"&is-clean-traffic=true":""},k=function(n){var i=n.window,a=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 r(void 0,void 0,void 0,(function(){var r,n,m,y,S,h,g;return e(this,(function(e){return r=E(a),n="&".concat(Object.keys(l).map((function(r){return l[r]?"".concat(r,"=").concat(l[r]):""})).filter(Boolean).join("&")),p=I(p),m={action:"trigger-pin",country:a,slug:o,device:s,offerId:c,msisdn:u,rockman_id:d,sam_evina_tid:f,page:encodeURIComponent(null===(g=null==i?void 0:i.location)||void 0===g?void 0:g.href),language_code:i.languageCode||"",partner_transaction_id:i.partner_transaction_id||"",partner_timestamp:i.partner_timestamp||"",partner_cid:i.partner_cid||"",uniqid:v||"",antifraud_id:i.antifraud_id||"",antifraud_id_js_code:i.antifraud_id_js_code||"",antifraud_id_js_link:i.antifraud_id_js_link||""},y=Object.entries(m).filter((function(r){var e=t(r,2);return e[0],e[1]})).map((function(r){var e=t(r,2),n=e[0],i=e[1];return"".concat(n,"=").concat(i)})).join("&"),S=i.DEV_BASE_URL||"",h="".concat(S,"/tallyman/v1/?").concat(y).concat(r).concat(n).concat(p?"&".concat(p):""),[2,fetch(h).then((function(r){return r.json()}))]}))}))},U=function(n){var i=n.window,a=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 r(void 0,void 0,void 0,(function(){var r,n,f,m,S,h,g;return e(this,(function(e){return r=E(a),n="&".concat(Object.keys(l).map((function(r){return"".concat(r,"=").concat(l[r])})).join("&")),f={action:"verify-pin",country:y(a),slug:o,device:s,offerId:c,rockman_id:u,pin:d,page:encodeURIComponent(null===(g=null==i?void 0:i.location)||void 0===g?void 0:g.href),language_code:i.languageCode||"",ClickID:i.antifraud_click_id||"",partner_cid:i.partner_cid||"",sam_evina_tid:v,uniqid:p,antifraud_id_js_code:i.antifraud_id_js_code||"",antifraud_id_js_link:i.antifraud_id_js_link||""},m=Object.entries(f).filter((function(r){var e=t(r,2);return e[0],e[1]})).map((function(r){var e=t(r,2),n=e[0],i=e[1];return"".concat(n,"=").concat(i)})).join("&"),S=i.DEV_BASE_URL||"",h="".concat(S,"/tallyman/v1/?").concat(m).concat(r).concat(n),[2,fetch(h).then((function(r){return r.json()}))]}))}))},N=function(t){var i=t.window,a=t.country,o=t.slug,s=t.device,c=t.offer,u=t.rockmanId,d=t.operator,l=t.uniqid;return r(void 0,void 0,void 0,(function(){var r,t,p,v,f;return e(this,(function(e){return r=i.location.href,t=i.pac_analytics.visitor.ip,p=new URLSearchParams(n(n({action:"mcp-shield",country:a,slug:o,device:s,offerId:c.toString(),rockman_id:u,client_lpu:r},d&&{operator:d}),l&&{uniqid:l})),t&&p.append("client_ip",t),v=i.DEV_BASE_URL||"",f="".concat(v,"/tallyman/v1/?").concat(p.toString()),[2,fetch(f).then((function(r){return r.json()}))]}))}))};function P(t,i,a,o){return r(this,void 0,void 0,(function(){var r;return e(this,(function(e){return!0===(r=n({offer:t.pac_analytics.visitor.offer},i||{})).automaticallySubmitAllOperators&&r.operators&&r.operators.length>0?[2,C(t,r,a,r.operators,o)]:[2,M(t,r,a,o)]}))}))}var j="";function M(t,i,a,o){return r(this,void 0,void 0,(function(){var r,s,c,u,d,l,p,f,m,y,S,h,g,I,b,_,E,U;return e(this,(function(e){switch(e.label){case 0:if(!a)throw(r=new Error("Error in submitMSISDN() trigger-pin action")).type="InvalidMSISDN",r;return s=o||{},c=!1,"true"===(null==(u=v(t))?void 0:u.success)&&"1"===u["msisdn-alias"]&&(s["skip-validation"]="1"),"1"===s["skip-validation"]&&(c=!0),d=c?a:a.match(/\d+/gi).join(""),l=t.pac_analytics.visitor.rockmanId,p=i.slug,f=i.country,m=i.device,y=i.offer,S=t.location.search.substr(1)||"",h=j&&""!==j?"&mcpUniqid=".concat(j):"",g=void 0!==t&&t.tid?t.tid:"",[4,k({window:t,country:f,slug:p,device:m,offer:y,msisdn:d,rockmanId:l,extraParams:s,search:S,uniqid:h,evinaTid:g})];case 1:if(!1!==(I=e.sent()).success)return[3,2];switch((b=new Error("Error in submitMSISDN() trigger-pin action:\n".concat(I.message))).message=I.message,!0){case I.message.includes("ALREADY SUBSCRIBED"):b.type="AlreadySubscribed";break;case I.message.includes("invalid"):b.type="InvalidMSISDN";break;default:b.type=null}throw b.productUrl=I.product_url?I.product_url:"",console.error(b),b;case 2:if(t.operator=I.operator,_={kw:{kw_viva:"kw_viva"},k2:{k2_viva:"k2_viva"},bh:{bh_viva:"bh_viva"}},!(f&&I.operator&&(_[f.toLowerCase()]&&_[f.toLowerCase()][I.operator.toLowerCase()]||"iq"===f.toLowerCase()))||t.isCallBlockApi||t.Empello)return[3,6];e.label=3;case 3:return e.trys.push([3,5,,6]),[4,N({window:t,country:f,slug:p,device:m,offer:y,rockmanId:l,operator:I.operator,uniqid:h})];case 4:return!1===(E=e.sent()).success?console.warn(E.message):(w(E.source),j=E.uniqid),[3,6];case 5:return U=e.sent(),console.warn(U),[3,6];case 6:return I.javascript&&w(I.javascript),[2,n({type:"SingleMSISDNSubmissionResult",pin:I.pin,uniqidResult:j,operator:I.operator,redirectUrl:null==I?void 0:I.redirect_to_url},(null==I?void 0:I.userType)?{userType:null==I?void 0:I.userType}:{})]}}))}))}function C(t,i,a,o,s){return r(this,void 0,void 0,(function(){var c,u,d=this;return e(this,(function(l){switch(l.label){case 0:return[4,Promise.all(o.map((function(o){return r(d,void 0,void 0,(function(){var r,c;return e(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,M(t,i,a,n(n({},s),{operator:o}))];case 1:return r=e.sent(),[2,h(n(n({},r),{operator:o}))];case 2:return c=e.sent(),[2,S(c)];case 3:return[2]}}))}))})))];case 1:if(c=l.sent(),u=c.find((function(r){var e;return"left"===r.type&&"AlreadySubscribed"===(null===(e=r.value)||void 0===e?void 0:e.type)})),c.every((function(r){return"left"===r.type})))throw c[0].value;if(u)throw u.value;return[2,{type:"MultiOperatorMSISDNSubmissionResult"}]}}))}))}function D(n,i,a,o){return r(this,void 0,void 0,(function(){var s,c,u,d,l,p,f,m,S,h,w,I,b,_,E,k;return e(this,(function(N){switch(N.label){case 0:if(n.hostCountry&&n.hostSlug&&(a.country=n.hostCountry,a.slug=n.hostSlug),s=a.slug,c=a.country,u=a.device,d=n.pac_analytics.visitor.offer,l=o||{},"true"===(null==(p=v(n))?void 0:p.success)&&"1"===p["msisdn-alias"]&&(l["skip-validation"]="1"),f=n.pac_analytics.visitor.rockmanId,!i)throw(m=new Error("Error in submitMSISDN() verify-pin action:\n Pin Cannot Be Empty")).type="InvalidPIN",m;return S=""!==j?"&mcpUniqid=".concat(j):"",h=void 0!==n&&n.tid?n.tid:"",[4,U({window:n,country:c,slug:s,device:u,offer:d,rockmanId:f,pin:i,extraParams:l,uniqid:S,evinaTid:h})];case 1:if(!1!==(w=N.sent()).success)return[3,2];throw I={"pin does not match":"InvalidPIN","mcp blocked":"SessionBlocked",expired_pin:"ExpiredPIN",insufficient_balance:"InsufficientBalance"}[w.message],(E=new Error("Error in submitMSISDN() verify-pin action:\n".concat(I))).type=I||"InvalidPIN",E.message=w.message,console.error(E),E;case 2:return!0!==w.async?[3,4]:w.product_url&&""!==w.product_url&&"es"===(null==c?void 0:c.toLowerCase())?[2,{gatewayRedirectUrl:w.product_url}]:(b=function(){return function(n){var i=n.window,a=n.country,o=n.slug,s=n.device,c=n.offer,u=n.rockmanId;return r(void 0,void 0,void 0,(function(){var r,n,d,l;return e(this,(function(e){return r={action:"check-subscription",country:y(a),slug:o,device:s,offerId:c,rockman_id:u},n=Object.entries(r).filter((function(r){var e=t(r,2);return e[0],null!=e[1]})).map((function(r){var e=t(r,2),n=e[0],i=e[1];return"".concat(n,"=").concat(encodeURIComponent(i))})).join("&"),d=i.DEV_BASE_URL||"",l="".concat(d,"/tallyman/v1/?").concat(n),[2,fetch(l).then((function(r){return r.json()}))]}))}))}({window:n,country:c,slug:s,device:u,offer:d,rockmanId:f,extraParams:o})},[4,g(b,100,(function(r){return r.success||"invalid_pin"===r.message}),0)]);case 3:if(!0===(_=N.sent()).success)return k="ALREADY SUBSCRIBED"===w.message,[2,{productUrl:_.product_url||null,isAlreadySubscribed:k}];throw(E=new Error("Error in submitMSISDN() verify-pin action:\n".concat(_.message))).type="InvalidPIN",E.message=_.message,E;case 4:return k="ALREADY SUBSCRIBED"===w.message,[2,{productUrl:w.product_url||null,isAlreadySubscribed:k}]}}))}))}var T={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}}},R={currentState:{type:"MSISDNEntry",result:u({errorType:"InvalidMSISDN",error:"Invalid Mobile Number"})}},F={currentState:{type:"MSISDNEntry",result:o()}},x=function(r){var e=v(r),t=new Event("onPinPage"),n=e["show-pin-entry"]&&"1"===e["show-pin-entry"],i=e["show-thank-you"]&&"1"===e["show-thank-you"],a="1"===(null==e?void 0:e.show_custom_error),c={currentState:{type:"MSISDNEntry",result:u({errorType:"SomethingWentWrong",error:null})}},d={currentState:{type:"PINEntry",result:s({finalUrl:(null==e?void 0:e.product_url)||""}),data:{msisdn:(null==e?void 0:e.msisdn)||"",operator:(null==e?void 0:e.operator)||""}}},l={currentState:{type:"PINEntry",result:o(),data:{msisdn:(null==e?void 0:e.msisdn)||"",operator:(null==e?void 0:e.operator)||""}}};if(n)return null==r||r.dispatchEvent(t),l;if(i)return d;if(a)return c;if(!e["mock-flow"])return F;switch(e["current-state"]){case"msisdn-failure-state":return R;case"pin-state":return null==r||r.dispatchEvent(t),T;case"completed-state":return A;default:return console.error("Mock Flow not supported"),F}}(window),B=i("pinFlow/submitMSISDNAction",(function(t,i){var a=t.window,s=t.msisdn,c=t.extraParams,u=i.getState,d=i.dispatch,v=i.rejectWithValue;return r(void 0,void 0,void 0,(function(){var t,i,y,S,h,g,w,I,b,_,E,k,U,N,j,M,C,D,T,A,R,F,x;return e(this,(function(B){switch(B.label){case 0:if(t=u(),!(null===(D=null===(C=null===(M=null==t?void 0:t.strategy)||void 0===M?void 0:M.currentState)||void 0===C?void 0:C.data)||void 0===D?void 0:D.config))return[2,v({errorType:"UnexpectedState"})];i=t.strategy.currentState.data,y=i.config,S=i.isHeaderEnrichmentSuccess,h=null===(T=t.pinFlow)||void 0===T?void 0:T.currentState,B.label=1;case 1:return B.trys.push([1,8,,9]),"ps"===(null==y?void 0:y.country.toLowerCase())&&(null==y?void 0:y.slug.includes("shemaroo"))&&"+970"===H(null==y?void 0:y.country,s)&&(s=s.replace("970","972")),"tpay"!==(null==(g=null===(R=null===(A=null==a?void 0:a.pac_analytics)||void 0===A?void 0:A.visitor)||void 0===R?void 0:R.genericJsLinkResult)?void 0:g.gateway)?[3,3]:(w={subscriptionPlanId:null==g?void 0:g.subscriptionPlanId,productCatalog:null==g?void 0:g.productCatalog,productSku:null==g?void 0:g.productSku,customerAccountNumber:a.pac_analytics.visitor.rockmanId,msisdn:a.TPay.HeaderEnrichment.msisdn(),operatorCode:a.TPay.HeaderEnrichment.operatorCode()},I=function(t,i,a){return r(void 0,void 0,void 0,(function(){var r,c;return e(this,(function(e){try{return t?i?[2,v({errorType:"AlreadySubscribed",error:r="Subscription already exists",message:r,productUrl:null})]:"0"===a.operationStatusCode?[2,n(n({},h),{type:"PINEntry",result:o(),data:{msisdn:s,operator:"",isHeaderEnrichmentSuccess:S}})]:(c=a.errorMessage,[2,v({errorType:"SubscriptionVerificationFailed",error:c,message:c,productUrl:null})]):[2,v({errorType:"OperationalError",error:t,message:"There was an operational error in the confirmation process",productUrl:null})]}catch(r){return[2,v({errorType:"UnknownError",error:r.toString(),message:r.message,productUrl:null})]}return[2]}))}))},[4,new Promise((function(r,e){var t,n;null===(n=null===(t=null==a?void 0:a.TPay)||void 0===t?void 0:t.HeaderEnrichment)||void 0===n||n.confirm(w,(function(t,n,i){I(t,n,i).then(r).catch(e)}))}))]);case 2:return(b=B.sent())?[2,b]:(null===(x=null===(F=null==a?void 0:a.TPay)||void 0===F?void 0:F.HeaderEnrichment)||void 0===x||x.confirm(w,I),[3,7]);case 3:return m.advancedInFlow("tallyman.v1-pin","msisdn-submitted",{msisdn:s}),[4,P(a,y,s)];case 4:return _=B.sent(),m.advancedInFlow("tallyman.v1-pin","msisdn-submission-success",{msisdn:s}),"SingleMSISDNSubmissionResult"===_.type&&_.redirectUrl&&(m.advancedInFlow("tallyman.v1-pin","msisdn-submission-success",{msisdn:s}),m.customEvent("Flow","advance-auto","msisdn-redirect",{redirectUrl:_.redirectUrl}),a.location.href=_.redirectUrl),c&&c.storeMsisdn&&"true"===c.storeMsisdn?[4,f(s).then((function(r){r&&r.data&&r.data.success?m.customEvent("Flow","advance-auto","msisdn-stored-success"):m.customEvent("Flow","advance-auto","msisdn-stored-failed")})).catch((function(r){m.customEvent("Flow","advance-auto","msisdn-stored-error",r)}))]:[3,6];case 5:B.sent(),B.label=6;case 6:return E="SingleMSISDNSubmissionResult"===_.type?_.operator:"",k={SA_MOBILY:6,SA_STC:4,SA_ZAIN:4},U=new Event("onPinPage"),null==a||a.dispatchEvent(U),[2,n(n({},h),{type:"PINEntry",result:o(),data:n({actualPIN:"SingleMSISDNSubmissionResult"===_.type?_.pin:null,msisdn:s,operator:E,pinMaxLength:""!==E&&k[E]?k[E]:null,isHeaderEnrichmentSuccess:S},"SingleMSISDNSubmissionResult"===_.type&&(null==_?void 0:_.userType)?{userType:_.userType}:{})})];case 7:return[3,9];case 8:switch(N=B.sent(),console.warn(N),j=void 0,N.type){case"AlreadySubscribed":j="AlreadySubscribed";break;case"InvalidMSISDN":j="InvalidMSISDN";break;default:j="UnknownError"}return m.recedeInFlow("tallyman.v1-pin","msisdn-submission-failure",{msisdn:s,errorType:j,error:N.toString(),message:N.message,productUrl:N.productUrl}),S&&d(l({type:p.PIN,data:{isHeaderEnrichmentSuccess:!1,config:y}})),[2,v({errorType:j,error:N.toString(),message:N.message,productUrl:N.productUrl})];case 9:return[2]}}))}))})),L=i("pinFlow/submitPinAction",(function(t,i){var a=t.window,o=t.msisdn,c=t.pin,u=t.extraParams,d=i.getState,l=i.rejectWithValue;return r(void 0,void 0,void 0,(function(){var r,t,i,p,v,y,S,h,g,w;return e(this,(function(e){switch(e.label){case 0:if(r=d(),!(null===(g=null===(h=null===(S=null==r?void 0:r.strategy)||void 0===S?void 0:S.currentState)||void 0===h?void 0:h.data)||void 0===g?void 0:g.config))return[2,l({errorType:"UnexpectedState"})];t=r.strategy.currentState.data.config,i=null===(w=r.pinFlow)||void 0===w?void 0:w.currentState,e.label=1;case 1:return e.trys.push([1,5,,6]),m.advancedInFlow("tallyman.v1-pin","pin-submitted",{msisdn:o,pin:c}),[4,D(a,c,t,u)];case 2:return p=e.sent(),m.advancedInFlow("tallyman.v1-pin","pin-submission-success",{msisdn:o,pin:c,finalUrl:p.productUrl}),p.gatewayRedirectUrl&&""!==p.gatewayRedirectUrl&&(m.advancedInFlow("tallyman.v1-pin","gateway-redirect",{msisdn:o,pin:c,gatewayRedirectUrl:p.gatewayRedirectUrl}),a.location.href=p.gatewayRedirectUrl),u&&u.storeMsisdn&&"true"===u.storeMsisdn?[4,f(o).then((function(r){r&&r.data&&r.data.success?m.customEvent("Flow","advance-auto","msisdn-stored-success"):m.customEvent("Flow","advance-auto","msisdn-stored-failed")})).catch((function(r){m.customEvent("Flow","advance-auto","msisdn-stored-error",r)}))]:[3,4];case 3:e.sent(),e.label=4;case 4:return[2,n(n({},i),{type:"PINEntry",result:s({finalUrl:p.productUrl,isAlreadySubscribed:p.isAlreadySubscribed||!1})})];case 5:switch(v=e.sent(),console.warn(v),y=void 0,v.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 m.recedeInFlow("tallyman.v1-pin","pin-submission-failure",{msisdn:o,pin:c,errorType:y,error:v.toString(),message:v.message,productUrl:v.productUrl}),setTimeout((function(){v.productUrl&&(a.location.href=v.productUrl)}),0),[2,l({errorType:y,error:v.toString(),message:v.message,productUrl:v.productUrl})];case 6:return[2]}}))}))})),q=i("pinFlow/backToStartAction",(function(t,n){var i=n.dispatch,a=n.rejectWithValue;return r(void 0,void 0,void 0,(function(){return e(this,(function(r){try{m.recedeInFlow("tallyman.v1-pin","pin-state","requested to change phone number"),i(d())}catch(r){return console.warn(r),[2,a({errorType:"UnexpectedState"})]}return[2]}))}))})),O={PS:"970"},H=function(r,e){if(!r||!e)return"";var t=r.toUpperCase(),n=O[t];return n?"+".concat(n):(console.error("Country code not found for",r),"")},V=a({name:"pinFlow",initialState:x,reducers:{},extraReducers:function(r){r.addCase(B.pending,(function(r){r.currentState={type:"MSISDNEntry",result:c(),data:r.currentState.data}})).addCase(B.fulfilled,(function(r,e){r.currentState=e.payload})).addCase(B.rejected,(function(r,e){r.currentState={type:"MSISDNEntry",result:u(e.payload),data:r.currentState.data}})).addCase(L.pending,(function(r){r.currentState={type:"PINEntry",result:c(),data:r.currentState.data}})).addCase(L.fulfilled,(function(r,e){r.currentState=e.payload})).addCase(L.rejected,(function(r,e){r.currentState={type:"PINEntry",result:u(e.payload),data:r.currentState.data}}))}}),W=V.reducer;V.actions;export{q as backToStartAction,_ as pinFlowMatch,W as pinFlowReducer,B as submitMSISDNAction,L as submitPinAction,b as usePinFlowState};
2
2
  //# sourceMappingURL=pinFlow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pinFlow.js","sources":["../src/flows/pinFlow/hooks/usePinFlowState.ts","../src/flows/pinFlow/match.ts","../src/sharedApi/checkSubscription.ts","../src/flows/pinFlow/api.ts","../src/flows/pinFlow/main.ts","../src/flows/pinFlow/pinFlowSlice.ts"],"sourcesContent":["import { useSelector as IuseSelector } from 'react-redux';\nimport { RootState } from '../../../sharedFlowTypes/StrategyTypes';\n\nexport const usePinFlowState = (useSelector: typeof IuseSelector) => {\n const currentState = useSelector((state: RootState) => state.pinFlow.currentState);\n return currentState;\n};\n","import * as RDS from '../../common-types/RemoteDataState';\nimport {\n IMsisdnSumbitNextData,\n MSISDNEntryFailure,\n MSISDNEntrySuccess,\n PINEntryFailure,\n PINEntrySuccess,\n PinFlowCurrentState\n} from '../../sharedFlowTypes/PinTypes';\n\nfunction pinFlowMatch<R>({\n msisdnEntry,\n pinEntry\n}: {\n msisdnEntry: (rds: RDS.RemoteDataState<MSISDNEntryFailure, MSISDNEntrySuccess>) => R;\n pinEntry: (rds: RDS.RemoteDataState<PINEntryFailure, PINEntrySuccess>, nextData: IMsisdnSumbitNextData) => R;\n}): (state: PinFlowCurrentState) => R {\n return (state) => {\n switch (state.type) {\n case 'MSISDNEntry':\n return msisdnEntry(state.result);\n case 'PINEntry':\n return pinEntry(state.result, state.data);\n default:\n throw new Error('Invalid State');\n }\n };\n}\n\nexport { pinFlowMatch };\n","import { ICheckSubscriptionResult } from '../common-types/ICheckSubscriptionResult';\nimport { IHash } from '../common-types/IHash';\nimport { bupperizeCountry } from '../utilities/bupperizeCountry';\n\nconst checkSubscription = async ({\n window,\n country,\n slug,\n device,\n offer,\n rockmanId\n}: {\n window: Window;\n country: string;\n slug: string;\n device: string;\n offer: string;\n rockmanId: string;\n extraParams?: IHash; // Marked as optional if currently unused\n}): Promise<ICheckSubscriptionResult> => {\n const params = {\n action: 'check-subscription',\n country: bupperizeCountry(country),\n slug,\n device,\n offerId: offer,\n rockman_id: rockmanId\n };\n\n const queryString = Object.entries(params)\n .filter(([_, value]) => value !== undefined && value !== null)\n .map(([key, value]) => `${key}=${encodeURIComponent(value)}`)\n .join('&');\n\n const host = window.DEV_BASE_URL || '';\n const url = `${host}/tallyman/v1/?${queryString}`;\n return fetch(url).then((response) => response.json());\n};\n\nexport { checkSubscription };\n","import { IHash, IMcpShieldResult, IMSISDNSubmissionResult, IPINSubmissionResult } from '../../sharedFlowTypes/PinTypes';\nimport { bupperizeCountry } from '../../utilities/bupperizeCountry';\nimport { cleanSearchParams } from '../../utilities/cleanSearchParams';\n\nconst checkIsCleanTraffic = (country: string): string => {\n if (country === 'be') {\n if (typeof window !== 'undefined' && window.shouldBlock === true) {\n return '&is-clean-traffic=false';\n }\n return '&is-clean-traffic=true';\n }\n return '';\n};\nconst triggerPin = async ({\n window,\n country,\n slug,\n device,\n offer,\n msisdn,\n rockmanId,\n extraParams,\n search,\n uniqid,\n evinaTid\n}: {\n window?: Window;\n country: string;\n slug: string;\n device: 'smart' | 'feature';\n offer: string;\n msisdn: string;\n rockmanId: string;\n extraParams: IHash;\n search: string;\n uniqid?: string;\n evinaTid?: string;\n}): Promise<IMSISDNSubmissionResult> => {\n const cleanTrafficString = checkIsCleanTraffic(country);\n const extraParamsQs = `&${Object.keys(extraParams)\n .map((k) => (extraParams[k] ? `${k}=${extraParams[k]}` : ''))\n .filter(Boolean)\n .join('&')}`;\n\n // Remove conflicting params from url\n search = cleanSearchParams(search);\n\n // Base parameters object\n const params = {\n action: 'trigger-pin',\n country,\n slug,\n device,\n offerId: offer,\n msisdn,\n rockman_id: rockmanId,\n sam_evina_tid: evinaTid,\n page: encodeURIComponent(window?.location?.href),\n language_code: window.languageCode || '',\n partner_transaction_id: window.partner_transaction_id || '',\n partner_timestamp: window.partner_timestamp || '',\n partner_cid: window.partner_cid || '',\n uniqid: uniqid || '',\n\n antifraud_id: window.antifraud_id || '',\n // More specific antifraud IDs will eventuallly replace antifraud_id\n // https://www.notion.so/sammedia/KW-Agency-Globocom-KW-ENTERTAINMENT-STORE-GAMESOLUTELY-GLING-Landing-Page-Test-a9841b14218b42709ffb1a2d41428275?d=f2a8d09b1e8c4fd4bdab69ab5dda1f25\n antifraud_id_js_code: window.antifraud_id_js_code || '',\n antifraud_id_js_link: window.antifraud_id_js_link || ''\n };\n\n // Convert params object to query string\n const queryString = Object.entries(params)\n .filter(([_, value]) => value)\n .map(([key, value]) => `${key}=${value}`)\n .join('&');\n const host = window.DEV_BASE_URL || '';\n const url = `${host}/tallyman/v1/?${queryString}${cleanTrafficString}${extraParamsQs}${search ? `&${search}` : ''}`;\n\n return fetch(url).then((x) => x.json());\n};\n\nconst verifyPin = async ({\n window,\n country,\n slug,\n device,\n offer,\n rockmanId,\n pin,\n extraParams,\n uniqid,\n evinaTid\n}: {\n window: Window;\n country: string;\n slug: string;\n device: string;\n offer: string;\n rockmanId: string;\n pin: string;\n extraParams: IHash;\n uniqid: string;\n evinaTid: string;\n}): Promise<IPINSubmissionResult> => {\n const cleanTrafficString = checkIsCleanTraffic(country);\n const extraParamsQs = `&${Object.keys(extraParams)\n .map((k) => `${k}=${extraParams[k]}`)\n .join('&')}`;\n\n // Base parameters object\n const params = {\n action: 'verify-pin',\n country: bupperizeCountry(country),\n slug,\n device,\n offerId: offer,\n rockman_id: rockmanId,\n pin,\n page: encodeURIComponent(window?.location?.href),\n language_code: window.languageCode || '',\n ClickID: window.antifraud_click_id || '',\n partner_cid: window.partner_cid || '',\n sam_evina_tid: evinaTid,\n uniqid,\n // More specific antifraud IDs will eventuallly replace antifraud_id\n // https://www.notion.so/sammedia/KW-Agency-Globocom-KW-ENTERTAINMENT-STORE-GAMESOLUTELY-GLING-Landing-Page-Test-a9841b14218b42709ffb1a2d41428275?d=f2a8d09b1e8c4fd4bdab69ab5dda1f25\n antifraud_id_js_code: window.antifraud_id_js_code || '',\n antifraud_id_js_link: window.antifraud_id_js_link || ''\n };\n\n // Convert params object to query string\n const queryString = Object.entries(params)\n .filter(([_, value]) => value)\n .map(([key, value]) => `${key}=${value}`)\n .join('&');\n\n const host = window.DEV_BASE_URL || '';\n const url = `${host}/tallyman/v1/?${queryString}${cleanTrafficString}${extraParamsQs}`;\n\n return fetch(url).then((x) => x.json());\n};\n\nconst mcpShield = async ({\n window,\n country,\n slug,\n device,\n offer,\n rockmanId,\n operator,\n uniqid\n}: {\n window: Window;\n country: string;\n slug: string;\n device: string;\n offer: string;\n rockmanId: string;\n operator?: string;\n uniqid?: string;\n}): Promise<IMcpShieldResult> => {\n const pageUrl = window.location.href;\n const ipAdd = window.pac_analytics.visitor.ip;\n\n const params = new URLSearchParams({\n action: 'mcp-shield',\n country,\n slug,\n device,\n offerId: offer.toString(),\n rockman_id: rockmanId,\n client_lpu: pageUrl,\n ...(operator && { operator }),\n ...(uniqid && { uniqid })\n });\n\n // Conditionally add client_ip if it exists\n if (ipAdd) {\n params.append('client_ip', ipAdd);\n }\n\n const host = window.DEV_BASE_URL || '';\n const url = `${host}/tallyman/v1/?${params.toString()}`;\n\n return fetch(url).then((x) => x.json());\n};\n\nexport { triggerPin, verifyPin, mcpShield };\n","import { ICheckSubscriptionResult } from '../../common-types/ICheckSubscriptionResult';\nimport { IError } from '../../common-types/IError';\nimport { checkSubscription } from '../../sharedApi/checkSubscription';\nimport {\n IHash,\n IMcpShieldResult,\n IMSISDNSubmissionResult,\n IPINSubmissionResult,\n MultiOperatorMSISDNSubmissionResult,\n SingleMSISDNSubmissionResult\n} from '../../sharedFlowTypes/PinTypes';\nimport { IConfig, IStrategyIDentifyUserResult } from '../../sharedFlowTypes/StrategyTypes';\nimport { left, loop, right } from '../../utilities/helpers';\nimport { loadScriptInnerHtml } from '../../utilities/loadScriptInnerHtml';\nimport { searchToObject } from '../../utilities/searchToObject';\nimport { mcpShield, triggerPin, verifyPin } from './api';\n\nexport default async function submitMSISDN(\n window: Window,\n maybeConfig: IConfig,\n internationalMSISDN: string,\n extraParams?: IHash\n): Promise<SingleMSISDNSubmissionResult | MultiOperatorMSISDNSubmissionResult> {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const config: IConfig = { offer: window.pac_analytics.visitor.offer, ...(maybeConfig || {}) };\n if (config.automaticallySubmitAllOperators === true && !!config.operators && config.operators.length > 0) {\n return submitMSISDNForMultipleOperators(window, config, internationalMSISDN, config.operators, extraParams);\n }\n return submitMSISDNOnce(window, config, internationalMSISDN, extraParams);\n}\n\nlet uniqidResult = '';\n// eslint-disable-next-line consistent-return\nexport async function loadMcpShield(window: Window, config: IConfig): Promise<IMcpShieldResult> {\n if (config) {\n const { slug, country, device } = config;\n\n const { offer } = window.pac_analytics.visitor;\n const { rockmanId } = window.pac_analytics.visitor;\n\n try {\n const mcpShieldResult: IMcpShieldResult = await mcpShield({ window, country, slug, device, offer, rockmanId });\n if (mcpShieldResult.success === false) {\n console.warn(mcpShieldResult.message);\n } else {\n loadScriptInnerHtml(mcpShieldResult.source);\n uniqidResult = mcpShieldResult.uniqid;\n return mcpShieldResult;\n }\n } catch (err) {\n console.warn(err);\n }\n }\n}\n\nasync function submitMSISDNOnce(\n window: Window,\n config: IConfig,\n internationalMSISDN: string,\n extraParams?: IHash\n): Promise<SingleMSISDNSubmissionResult> {\n if (!internationalMSISDN) {\n const submissionError = new Error(`Error in submitMSISDN() trigger-pin action`) as IError & { type: string };\n submissionError.type = 'InvalidMSISDN';\n throw submissionError;\n }\n const newExtraParams = extraParams || {};\n let isSkipValidation = false;\n const searchObj = searchToObject(window) as IStrategyIDentifyUserResult;\n if (searchObj?.success === 'true' && searchObj['msisdn-alias'] === '1') {\n // Search param is set to 1 for header enrichment when the msisdn is masked\n newExtraParams['skip-validation'] = '1';\n }\n\n if (newExtraParams['skip-validation'] === '1') {\n isSkipValidation = true;\n }\n\n const msisdn = isSkipValidation ? internationalMSISDN : internationalMSISDN.match(/\\d+/gi).join(''); // tallyman API expects international msisdn without any special character\n const { rockmanId } = window.pac_analytics.visitor;\n\n const { slug, country, device, offer } = config;\n\n const search = window.location.search.substr(1) || '';\n const uniqid = !!uniqidResult && uniqidResult !== '' ? `&mcpUniqid=${uniqidResult}` : '';\n const evinaTid = typeof window !== 'undefined' && window.tid ? window.tid : '';\n\n const result: IMSISDNSubmissionResult = await triggerPin({\n window,\n country,\n slug,\n device,\n offer,\n msisdn,\n rockmanId,\n extraParams: newExtraParams,\n search,\n uniqid,\n evinaTid\n });\n\n if (result.success === false) {\n const error = new Error(`Error in submitMSISDN() trigger-pin action:\\n${result.message}`) as IError & {\n type: string;\n productUrl: string;\n };\n error.message = result.message;\n switch (true) {\n case result.message.includes('ALREADY SUBSCRIBED'):\n error.type = 'AlreadySubscribed';\n break;\n case result.message.includes('invalid'):\n error.type = 'InvalidMSISDN';\n break;\n default:\n error.type = null;\n }\n // error.type = result.message === 'ALREADY SUBSCRIBED' ? 'AlreadySubscribed' : 'InvalidMSISDN';\n error.productUrl = result.product_url ? result.product_url : '';\n console.error(error);\n throw error;\n } else {\n window.operator = result.operator; // currently used on server for KW_STC if present dont call empello for Shemaroo\n const codesWithMcpShied: { [key: string]: { [key: string]: string } } = {\n kw: {\n kw_viva: 'kw_viva'\n },\n k2: {\n k2_viva: 'k2_viva'\n },\n bh: {\n bh_viva: 'bh_viva'\n }\n };\n if (\n country &&\n result.operator &&\n ((codesWithMcpShied[country.toLowerCase()] &&\n codesWithMcpShied[country.toLowerCase()][result.operator.toLowerCase()]) ||\n country.toLowerCase() === 'iq') &&\n !window.isCallBlockApi &&\n !window.Empello // set on server https://www.notion.so/sammedia/KW-Agency-Shemaroo-STC-integration-1a114991683d4af79eb01a4d96789f30\n ) {\n try {\n const mcpShieldResult: IMcpShieldResult = await mcpShield({\n window,\n country,\n slug,\n device,\n offer,\n rockmanId,\n operator: result.operator,\n uniqid\n });\n if (mcpShieldResult.success === false) {\n console.warn(mcpShieldResult.message);\n } else {\n loadScriptInnerHtml(mcpShieldResult.source);\n uniqidResult = mcpShieldResult.uniqid;\n }\n } catch (err) {\n console.warn(err);\n }\n }\n\n if (result.javascript) {\n loadScriptInnerHtml(result.javascript);\n }\n\n return {\n type: 'SingleMSISDNSubmissionResult',\n pin: result.pin,\n uniqidResult,\n operator: result.operator,\n redirectUrl: result?.redirect_to_url, // For pin redirect empello\n ...(result?.userType ? { userType: result?.userType } : {}) // For Peru user plan if prepaid or postpaid\n };\n }\n}\n\nasync function submitMSISDNForMultipleOperators(\n window: Window,\n config: IConfig,\n internationalMSISDN: string,\n operators: string[],\n extraParams?: IHash\n): Promise<MultiOperatorMSISDNSubmissionResult> {\n const results = await Promise.all(\n operators.map(async (o) => {\n try {\n const singleResult = await submitMSISDNOnce(window, config, internationalMSISDN, {\n ...extraParams,\n operator: o\n });\n return right({ ...singleResult, operator: o });\n } catch (error) {\n return left(error);\n }\n })\n );\n\n const alreadySubscribed = results.find((r: any) => r.type === 'left' && r.value?.type === 'AlreadySubscribed');\n\n if (results.every((r) => r.type === 'left')) {\n // no submission worked\n throw results[0].value;\n } else if (alreadySubscribed) {\n throw alreadySubscribed.value;\n } else {\n return {\n type: 'MultiOperatorMSISDNSubmissionResult'\n };\n }\n}\n\nexport async function submitPIN(\n window: Window,\n pin: string,\n config: IConfig,\n extraParams: IHash\n): Promise<{ productUrl?: string; isAlreadySubscribed?: boolean; gatewayRedirectUrl?: string }> {\n if (window.hostCountry && window.hostSlug) {\n config.country = window.hostCountry;\n config.slug = window.hostSlug;\n }\n const { slug, country, device } = config;\n const { offer } = window.pac_analytics.visitor;\n\n const newExtraParams = extraParams || {};\n const searchObj = searchToObject(window) as any;\n if (searchObj?.success === 'true' && searchObj['msisdn-alias'] === '1') {\n newExtraParams['skip-validation'] = '1';\n }\n\n const { rockmanId } = window.pac_analytics.visitor;\n\n if (!pin) {\n const emptyPinError = new Error(`Error in submitMSISDN() verify-pin action:\\n Pin Cannot Be Empty`) as IError & {\n type: string;\n };\n emptyPinError.type = 'InvalidPIN';\n throw emptyPinError;\n }\n const uniqid = uniqidResult !== '' ? `&mcpUniqid=${uniqidResult}` : '';\n const evinaTid = typeof window !== 'undefined' && window.tid ? window.tid : '';\n\n const pinResult: IPINSubmissionResult = await verifyPin({\n window,\n country,\n slug,\n device,\n offer,\n rockmanId,\n pin,\n extraParams: newExtraParams,\n uniqid,\n evinaTid\n });\n if (pinResult.success === false) {\n const pinErrorTypeMap: { [key: string]: string } = {\n 'pin does not match': 'InvalidPIN',\n 'mcp blocked': 'SessionBlocked',\n expired_pin: 'ExpiredPIN',\n insufficient_balance: 'InsufficientBalance'\n };\n const errorMessage = pinErrorTypeMap[pinResult.message as string];\n const pinError = new Error(`Error in submitMSISDN() verify-pin action:\\n${errorMessage}`) as IError & {\n type: string;\n };\n pinError.type = errorMessage || 'InvalidPIN';\n pinError.message = pinResult.message;\n console.error(pinError);\n throw pinError;\n } else if (pinResult.async === true) {\n // Needed for ES https://www.notion.so/sammedia/ES-OnMobile-Movistar-Direct-Ouisys-Integration-XR-Academy-ca60b176b0ea40a7b170e5d9e7deb491\n if (pinResult.product_url && pinResult.product_url !== '' && country?.toLowerCase() === 'es') {\n return { gatewayRedirectUrl: pinResult.product_url };\n }\n const check: () => Promise<ICheckSubscriptionResult> = () =>\n checkSubscription({ window, country, slug, device, offer, rockmanId, extraParams });\n\n const checkResult: ICheckSubscriptionResult = await loop(\n check,\n 100,\n (r) => r.success || r.message === 'invalid_pin',\n 0\n );\n if (checkResult.success === true) {\n const isAlreadySubscribed = pinResult.message === 'ALREADY SUBSCRIBED';\n return { productUrl: checkResult.product_url || null, isAlreadySubscribed };\n }\n const pinError = new Error(`Error in submitMSISDN() verify-pin action:\\n${checkResult.message}`) as IError & {\n type: string;\n };\n pinError.type = 'InvalidPIN';\n pinError.message = checkResult.message;\n\n throw pinError;\n } else {\n const isAlreadySubscribed = pinResult.message === 'ALREADY SUBSCRIBED';\n return { productUrl: pinResult.product_url || null, isAlreadySubscribed };\n }\n}\n","import { createAsyncThunk, createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport * as RDS from '../../common-types/RemoteDataState';\nimport {\n IHash,\n MSISDNEntryErrorTypes,\n MSISDNEntryFailure,\n MSISDNEntrySuccess,\n PINEntryErrorTypes,\n PINEntryFailure,\n PINEntryState,\n PINEntrySuccess,\n PinFlowState\n} from '../../sharedFlowTypes/PinTypes';\nimport { IMockFlowParams, PossibleTypes, RootState } from '../../sharedFlowTypes/StrategyTypes';\nimport { searchToObject } from '../../utilities/searchToObject';\nimport { storeMsisdn } from '../../utilities/storeMsisdn';\nimport { tracker } from '../../utilities/tracker';\nimport { identifyStrategy, setStrategyExtraData } from '../strategy/strategySlice';\nimport submitMSISDN, { submitPIN } from './main';\n\nconst mockedPINState: PinFlowState = {\n currentState: {\n type: 'PINEntry',\n result: RDS.NothingYet<PINEntryFailure, PINEntrySuccess>(),\n data: {\n actualPIN: '',\n msisdn: '',\n operator: '',\n pinMaxLength: 4\n }\n }\n};\n\nconst mockedCompletedState: PinFlowState = {\n currentState: {\n type: 'PINEntry',\n result: RDS.Success<PINEntryFailure, PINEntrySuccess>({ finalUrl: '/product' }),\n data: {\n actualPIN: '',\n msisdn: '',\n operator: '',\n pinMaxLength: 4\n }\n }\n};\n\nconst mockedMSISDNEntryFailure: PinFlowState = {\n currentState: {\n type: 'MSISDNEntry',\n result: RDS.Failure<MSISDNEntryFailure, MSISDNEntrySuccess>({\n errorType: 'InvalidMSISDN',\n error: 'Invalid Mobile Number'\n })\n }\n};\n\n// Define the initial state\nconst defaultInitialState: PinFlowState = {\n currentState: {\n type: 'MSISDNEntry',\n result: RDS.NothingYet()\n }\n};\n\n/**\n * Sets the initial state of the pin flow based on the search parameters in the URL or the default state.\n *\n * @param {Window} window - The window object.\n * @return {PinFlowState} The initial state of the pin flow.\n */\nconst setInitialState = (window: Window) => {\n const search = searchToObject(window) as IMockFlowParams<any>;\n const pinPageEvent = new Event('onPinPage');\n const isPinEntryStep = search['show-pin-entry'] && search['show-pin-entry'] === '1';\n const isShowThankYouStep = search['show-thank-you'] && search['show-thank-you'] === '1';\n const isShowCustomError = search?.show_custom_error === '1';\n\n const msisdnError: PinFlowState = {\n currentState: {\n type: 'MSISDNEntry',\n result: RDS.Failure<MSISDNEntryFailure, MSISDNEntrySuccess>({\n errorType: 'SomethingWentWrong',\n error: null\n })\n }\n };\n\n const thankYouState: PinFlowState = {\n currentState: {\n type: 'PINEntry',\n result: RDS.Success<PINEntryFailure, PINEntrySuccess>({\n finalUrl: search?.product_url || ''\n }),\n // @ts-ignore\n data: {\n msisdn: search?.msisdn || '',\n operator: search?.operator || ''\n }\n }\n };\n\n const initalPinEntryState: PinFlowState = {\n currentState: {\n type: 'PINEntry',\n result: RDS.NothingYet(),\n // @ts-ignore\n data: {\n msisdn: search?.msisdn || '',\n operator: search?.operator || ''\n }\n }\n };\n if (isPinEntryStep) {\n // Needed for shemroo the handler is injected on server\n window?.dispatchEvent(pinPageEvent);\n return initalPinEntryState;\n }\n if (isShowThankYouStep) {\n return thankYouState;\n }\n if (isShowCustomError) {\n return msisdnError;\n }\n\n if (search['mock-flow']) {\n switch (search['current-state']) {\n case 'msisdn-failure-state':\n return mockedMSISDNEntryFailure;\n case 'pin-state':\n // Needed for shemroo the handler is injected on server\n window?.dispatchEvent(pinPageEvent);\n return mockedPINState;\n case 'completed-state':\n return mockedCompletedState;\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\n/**\n * submitMSISDNAction\n * @returns {type: ' 'pinFlow/submitMSISDNAction', payload: {type: PossibleTypes.MO, result: PINEntryState}}\n \n * Calls trigger-pin api that sends a pin to the user\n * Sets state to show pin entry\n */\ninterface SubmitMSISDNArgs {\n window: Window;\n msisdn: string;\n extraParams?: IHash;\n}\nexport const submitMSISDNAction = createAsyncThunk<\n PINEntryState,\n SubmitMSISDNArgs,\n {\n rejectValue: MSISDNEntryFailure; // Type for rejectWithValue\n }\n>('pinFlow/submitMSISDNAction', async ({ window, msisdn, extraParams }, { getState, dispatch, rejectWithValue }) => {\n const state: RootState = getState();\n if (!state?.strategy?.currentState?.data?.config) {\n return rejectWithValue({\n errorType: 'UnexpectedState'\n });\n }\n const { config, isHeaderEnrichmentSuccess } = state.strategy.currentState.data;\n const pinFlowCurrentState = state.pinFlow?.currentState;\n try {\n /**\n * Palestine calling code is +970\n * But there was a request to have it as +972 only for gateway shemaroo\n */\n // Start PS Calling code temp fix\n if (config?.country.toLowerCase() === 'ps' && config?.slug.includes('shemaroo')) {\n const prefix = getInputValuePrefix(config?.country, msisdn);\n if (prefix === '+970') {\n msisdn = msisdn.replace('970', '972');\n }\n }\n // END PS Calling code temp fix\n\n // Start Trigger Pin\n tracker.advancedInFlow('tallyman.v1-pin', 'msisdn-submitted', { msisdn });\n\n const msisdnSubmissionResult = await submitMSISDN(window, config, msisdn);\n\n tracker.advancedInFlow('tallyman.v1-pin', 'msisdn-submission-success', { msisdn });\n // End Trigger Pin\n\n /**\n * Some flows require us to redirect to a url after trigger pin to check for fraud\n * The url will then do some processing and return back to ouisys with\n * extra param in the url that will tell us to show pin entry step or error\n */\n\n // Start Pin Redirect\n if (msisdnSubmissionResult.type === 'SingleMSISDNSubmissionResult' && msisdnSubmissionResult.redirectUrl) {\n tracker.advancedInFlow('tallyman.v1-pin', 'msisdn-submission-success', { msisdn });\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-redirect', {\n redirectUrl: msisdnSubmissionResult.redirectUrl\n });\n window.location.href = msisdnSubmissionResult.redirectUrl;\n }\n // End Pin Redirect\n\n // Start handle store msisdn\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 handle store msisdn\n\n const operator: string =\n msisdnSubmissionResult.type === 'SingleMSISDNSubmissionResult' ? msisdnSubmissionResult.operator : '';\n\n const pinMaxLengthByOp: { [key: string]: number } = {\n SA_MOBILY: 6,\n SA_STC: 4,\n SA_ZAIN: 4\n };\n\n /**\n * onPinPage\n * some scripts on the server need to be injected on pin page/view\n * This event will be handled on server\n */\n const pinPageEvent = new Event('onPinPage');\n window?.dispatchEvent(pinPageEvent);\n\n return {\n ...pinFlowCurrentState,\n type: 'PINEntry',\n result: RDS.NothingYet(),\n data: {\n actualPIN: msisdnSubmissionResult.type === 'SingleMSISDNSubmissionResult' ? msisdnSubmissionResult.pin : null,\n msisdn,\n operator,\n pinMaxLength: operator !== '' && pinMaxLengthByOp[operator] ? pinMaxLengthByOp[operator] : null,\n isHeaderEnrichmentSuccess,\n ...(msisdnSubmissionResult.type === 'SingleMSISDNSubmissionResult' && msisdnSubmissionResult?.userType\n ? { userType: msisdnSubmissionResult.userType }\n : {})\n }\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-pin', 'msisdn-submission-failure', {\n msisdn,\n errorType,\n error: ex.toString(),\n message: ex.message,\n productUrl: ex.productUrl\n });\n\n if (isHeaderEnrichmentSuccess) {\n dispatch(\n setStrategyExtraData({\n type: PossibleTypes.PIN,\n data: {\n isHeaderEnrichmentSuccess: false,\n config\n }\n })\n );\n }\n\n return rejectWithValue({\n errorType,\n error: ex.toString(),\n message: ex.message,\n productUrl: ex.productUrl\n });\n }\n});\n\n/**\n * submitPinAction\n * @returns {type: ' 'pinFlow/submitMSISDNAction', payload: {type: 'PINEntry', result: RDS.NothingYet()}}\n \n * Calls verify-pin api that check if the user enters a valid pin\n * Sets state to show thank you page if pin is valid\n */\ninterface SubmitPINArgs {\n window: Window;\n msisdn: string;\n pin: string;\n extraParams?: IHash;\n}\nexport const submitPinAction = createAsyncThunk<\n PINEntryState,\n SubmitPINArgs,\n {\n rejectValue: PINEntryFailure; // Type for rejectWithValue\n }\n>('pinFlow/submitPinAction', async ({ window, msisdn, pin, extraParams }, { getState, rejectWithValue }) => {\n const state: RootState = getState();\n\n if (!state?.strategy?.currentState?.data?.config) {\n return rejectWithValue({\n errorType: 'UnexpectedState'\n });\n }\n const { config } = state.strategy.currentState.data;\n const pinFlowCurrentState = state.pinFlow?.currentState;\n try {\n tracker.advancedInFlow('tallyman.v1-pin', 'pin-submitted', { msisdn, pin });\n const result = await submitPIN(window, pin, config, extraParams);\n tracker.advancedInFlow('tallyman.v1-pin', 'pin-submission-success', {\n msisdn,\n pin,\n finalUrl: result.productUrl\n });\n\n /**\n * Gateway redirect\n * Value returned in this case is actually the gateway url instead of the product url\n * More details on this ticket:\n * https://www.notion.so/sammedia/ES-OnMobile-Movistar-Direct-Ouisys-Integration-XR-Academy-ca60b176b0ea40a7b170e5d9e7deb491\n */\n // Start Gateway redirect\n if (result.gatewayRedirectUrl && result.gatewayRedirectUrl !== '') {\n tracker.advancedInFlow('tallyman.v1-pin', 'gateway-redirect', {\n msisdn,\n pin,\n gatewayRedirectUrl: result.gatewayRedirectUrl\n });\n window.location.href = result.gatewayRedirectUrl;\n }\n // End Gateway redirect\n\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 ...pinFlowCurrentState,\n type: 'PINEntry',\n result: RDS.Success<PINEntryFailure, PINEntrySuccess>({\n finalUrl: result.productUrl,\n isAlreadySubscribed: result.isAlreadySubscribed || false\n })\n };\n } catch (ex) {\n console.warn(ex);\n let errorType: PINEntryErrorTypes;\n switch (ex.type) {\n case 'AlreadySubscribed':\n errorType = 'AlreadySubscribed';\n break;\n case 'InvalidPIN':\n errorType = 'InvalidPIN';\n break;\n case 'SessionBlocked':\n errorType = 'SessionBlocked';\n break;\n case 'ExpiredPIN':\n errorType = 'ExpiredPIN';\n break;\n case 'InsufficientBalance':\n errorType = 'InsufficientBalance';\n break;\n default:\n errorType = 'UnknownError';\n break;\n }\n tracker.recedeInFlow('tallyman.v1-pin', 'pin-submission-failure', {\n msisdn,\n pin,\n errorType,\n error: ex.toString(),\n message: ex.message,\n productUrl: ex.productUrl\n });\n // Redirect to the product url if returned in the exception\n setTimeout(() => {\n if (ex.productUrl) {\n window.location.href = ex.productUrl;\n }\n }, 0);\n\n return rejectWithValue({\n errorType,\n error: ex.toString(),\n message: ex.message,\n productUrl: ex.productUrl\n });\n }\n});\n\nexport const backToStartAction = createAsyncThunk<\n any,\n any,\n {\n rejectValue: any; // Type for rejectWithValue\n }\n>('pinFlow/backToStartAction', async (_, { dispatch, rejectWithValue }) => {\n try {\n tracker.recedeInFlow('tallyman.v1-pin', 'pin-state', 'requested to change phone number');\n dispatch(identifyStrategy());\n } catch (ex) {\n console.warn(ex);\n return rejectWithValue({\n errorType: 'UnexpectedState'\n });\n }\n});\n\ntype CountryCodeMap = { [country: string]: string };\n\nconst countryCodes: CountryCodeMap = {\n PS: '970'\n // Add other countries and codes here\n};\n\nconst getInputValuePrefix = (country: string, international: string): string => {\n if (!country || !international) return '';\n\n // Convert the country to uppercase and retrieve the country code\n const normalizedCountry = country.toUpperCase();\n const countryCode = countryCodes[normalizedCountry];\n\n // Check if the country code exists in the mapping\n if (!countryCode) {\n console.error('Country code not found for', country);\n return '';\n }\n\n return `+${countryCode}`;\n};\n\n// Define your slice\nconst pinFlowSlice = createSlice({\n name: 'pinFlow',\n initialState,\n reducers: {},\n extraReducers: (builder) => {\n builder\n .addCase(submitMSISDNAction.pending, (state) => {\n state.currentState = { type: 'MSISDNEntry', result: RDS.Loading(), data: state.currentState.data };\n })\n .addCase(submitMSISDNAction.fulfilled, (state, action: PayloadAction<PINEntryState>) => {\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 data: state.currentState.data\n };\n })\n .addCase(submitPinAction.pending, (state) => {\n state.currentState = { type: 'PINEntry', result: RDS.Loading(), data: state.currentState.data };\n })\n .addCase(submitPinAction.fulfilled, (state, action: PayloadAction<PINEntryState>) => {\n state.currentState = action.payload;\n })\n .addCase(submitPinAction.rejected, (state, action: PayloadAction<PINEntryFailure>) => {\n state.currentState = { type: 'PINEntry', result: RDS.Failure(action.payload), data: state.currentState.data };\n });\n }\n});\n\nexport const { reducer: pinFlowReducer, actions: pinFlowActions } = pinFlowSlice;\n\nexport const selectPinFlowState = (state: any) => state.pinFlow;\n"],"names":["usePinFlowState","useSelector","state","pinFlow","currentState","pinFlowMatch","_a","msisdnEntry","pinEntry","type","result","data","Error","checkIsCleanTraffic","country","window","shouldBlock","triggerPin","slug","device","offer","msisdn","rockmanId","extraParams","search","uniqid","evinaTid","cleanTrafficString","extraParamsQs","concat","Object","keys","map","k","filter","Boolean","join","cleanSearchParams","params","action","offerId","rockman_id","sam_evina_tid","page","encodeURIComponent","_b","location","href","language_code","languageCode","partner_transaction_id","partner_timestamp","partner_cid","antifraud_id","antifraud_id_js_code","antifraud_id_js_link","queryString","entries","__read","key","value","host","DEV_BASE_URL","url","fetch","then","x","json","verifyPin","pin","bupperizeCountry","ClickID","antifraud_click_id","mcpShield","operator","pageUrl","ipAdd","pac_analytics","visitor","ip","URLSearchParams","__assign","toString","client_lpu","append","submitMSISDN","maybeConfig","internationalMSISDN","config","automaticallySubmitAllOperators","operators","length","submitMSISDNForMultipleOperators","submitMSISDNOnce","uniqidResult","submissionError","newExtraParams","isSkipValidation","searchObj","searchToObject","success","match","substr","tid","sent","error","message","includes","productUrl","product_url","console","codesWithMcpShied","kw","kw_viva","k2","k2_viva","bh","bh_viva","toLowerCase","isCallBlockApi","Empello","mcpShieldResult","warn","loadScriptInnerHtml","source","err_2","javascript","redirectUrl","redirect_to_url","userType","Promise","all","o","__awaiter","_this","singleResult","right","left","error_1","results","alreadySubscribed","find","r","every","submitPIN","hostCountry","hostSlug","emptyPinError","pinResult","errorMessage","expired_pin","insufficient_balance","pinError","async","gatewayRedirectUrl","check","response","checkSubscription","loop","checkResult","isAlreadySubscribed","mockedPINState","RDS.NothingYet","actualPIN","pinMaxLength","mockedCompletedState","RDS.Success","finalUrl","mockedMSISDNEntryFailure","RDS.Failure","errorType","defaultInitialState","initialState","pinPageEvent","Event","isPinEntryStep","isShowThankYouStep","isShowCustomError","show_custom_error","msisdnError","thankYouState","initalPinEntryState","dispatchEvent","setInitialState","submitMSISDNAction","createAsyncThunk","getState","dispatch","rejectWithValue","_f","_d","strategy","_e","_c","isHeaderEnrichmentSuccess","pinFlowCurrentState","_g","getInputValuePrefix","replace","tracker","advancedInFlow","msisdnSubmissionResult","_h","customEvent","storeMsisdn","catch","pinMaxLengthByOp","SA_MOBILY","SA_STC","SA_ZAIN","ex_1","recedeInFlow","setStrategyExtraData","PossibleTypes","PIN","submitPinAction","ex_2","setTimeout","backToStartAction","_","identifyStrategy","ex","countryCodes","PS","international","normalizedCountry","toUpperCase","countryCode","pinFlowSlice","createSlice","name","reducers","extraReducers","builder","addCase","pending","RDS.Loading","fulfilled","payload","rejected","pinFlowReducer","reducer","actions"],"mappings":"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"}
1
+ {"version":3,"file":"pinFlow.js","sources":["../src/flows/pinFlow/hooks/usePinFlowState.ts","../src/flows/pinFlow/match.ts","../src/sharedApi/checkSubscription.ts","../src/flows/pinFlow/api.ts","../src/flows/pinFlow/main.ts","../src/flows/pinFlow/pinFlowSlice.ts"],"sourcesContent":["import { useSelector as IuseSelector } from 'react-redux';\nimport { RootState } from '../../../sharedFlowTypes/StrategyTypes';\n\nexport const usePinFlowState = (useSelector: typeof IuseSelector) => {\n const currentState = useSelector((state: RootState) => state.pinFlow.currentState);\n return currentState;\n};\n","import * as RDS from '../../common-types/RemoteDataState';\nimport {\n IMsisdnSumbitNextData,\n MSISDNEntryFailure,\n MSISDNEntrySuccess,\n PINEntryFailure,\n PINEntrySuccess,\n PinFlowCurrentState\n} from '../../sharedFlowTypes/PinTypes';\n\nfunction pinFlowMatch<R>({\n msisdnEntry,\n pinEntry\n}: {\n msisdnEntry: (rds: RDS.RemoteDataState<MSISDNEntryFailure, MSISDNEntrySuccess>) => R;\n pinEntry: (rds: RDS.RemoteDataState<PINEntryFailure, PINEntrySuccess>, nextData: IMsisdnSumbitNextData) => R;\n}): (state: PinFlowCurrentState) => R {\n return (state) => {\n switch (state.type) {\n case 'MSISDNEntry':\n return msisdnEntry(state.result);\n case 'PINEntry':\n return pinEntry(state.result, state.data);\n default:\n throw new Error('Invalid State');\n }\n };\n}\n\nexport { pinFlowMatch };\n","import { ICheckSubscriptionResult } from '../common-types/ICheckSubscriptionResult';\nimport { IHash } from '../common-types/IHash';\nimport { bupperizeCountry } from '../utilities/bupperizeCountry';\n\nconst checkSubscription = async ({\n window,\n country,\n slug,\n device,\n offer,\n rockmanId\n}: {\n window: Window;\n country: string;\n slug: string;\n device: string;\n offer: string;\n rockmanId: string;\n extraParams?: IHash; // Marked as optional if currently unused\n}): Promise<ICheckSubscriptionResult> => {\n const params = {\n action: 'check-subscription',\n country: bupperizeCountry(country),\n slug,\n device,\n offerId: offer,\n rockman_id: rockmanId\n };\n\n const queryString = Object.entries(params)\n .filter(([_, value]) => value !== undefined && value !== null)\n .map(([key, value]) => `${key}=${encodeURIComponent(value)}`)\n .join('&');\n\n const host = window.DEV_BASE_URL || '';\n const url = `${host}/tallyman/v1/?${queryString}`;\n return fetch(url).then((response) => response.json());\n};\n\nexport { checkSubscription };\n","import { IHash, IMcpShieldResult, IMSISDNSubmissionResult, IPINSubmissionResult } from '../../sharedFlowTypes/PinTypes';\nimport { bupperizeCountry } from '../../utilities/bupperizeCountry';\nimport { cleanSearchParams } from '../../utilities/cleanSearchParams';\n\nconst checkIsCleanTraffic = (country: string): string => {\n if (country === 'be') {\n if (typeof window !== 'undefined' && window.shouldBlock === true) {\n return '&is-clean-traffic=false';\n }\n return '&is-clean-traffic=true';\n }\n return '';\n};\nconst triggerPin = async ({\n window,\n country,\n slug,\n device,\n offer,\n msisdn,\n rockmanId,\n extraParams,\n search,\n uniqid,\n evinaTid\n}: {\n window?: Window;\n country: string;\n slug: string;\n device: 'smart' | 'feature';\n offer: string;\n msisdn: string;\n rockmanId: string;\n extraParams: IHash;\n search: string;\n uniqid?: string;\n evinaTid?: string;\n}): Promise<IMSISDNSubmissionResult> => {\n const cleanTrafficString = checkIsCleanTraffic(country);\n const extraParamsQs = `&${Object.keys(extraParams)\n .map((k) => (extraParams[k] ? `${k}=${extraParams[k]}` : ''))\n .filter(Boolean)\n .join('&')}`;\n\n // Remove conflicting params from url\n search = cleanSearchParams(search);\n\n // Base parameters object\n const params = {\n action: 'trigger-pin',\n country,\n slug,\n device,\n offerId: offer,\n msisdn,\n rockman_id: rockmanId,\n sam_evina_tid: evinaTid,\n page: encodeURIComponent(window?.location?.href),\n language_code: window.languageCode || '',\n partner_transaction_id: window.partner_transaction_id || '',\n partner_timestamp: window.partner_timestamp || '',\n partner_cid: window.partner_cid || '',\n uniqid: uniqid || '',\n\n antifraud_id: window.antifraud_id || '',\n // More specific antifraud IDs will eventuallly replace antifraud_id\n // https://www.notion.so/sammedia/KW-Agency-Globocom-KW-ENTERTAINMENT-STORE-GAMESOLUTELY-GLING-Landing-Page-Test-a9841b14218b42709ffb1a2d41428275?d=f2a8d09b1e8c4fd4bdab69ab5dda1f25\n antifraud_id_js_code: window.antifraud_id_js_code || '',\n antifraud_id_js_link: window.antifraud_id_js_link || ''\n };\n\n // Convert params object to query string\n const queryString = Object.entries(params)\n .filter(([_, value]) => value)\n .map(([key, value]) => `${key}=${value}`)\n .join('&');\n const host = window.DEV_BASE_URL || '';\n const url = `${host}/tallyman/v1/?${queryString}${cleanTrafficString}${extraParamsQs}${search ? `&${search}` : ''}`;\n\n return fetch(url).then((x) => x.json());\n};\n\nconst verifyPin = async ({\n window,\n country,\n slug,\n device,\n offer,\n rockmanId,\n pin,\n extraParams,\n uniqid,\n evinaTid\n}: {\n window: Window;\n country: string;\n slug: string;\n device: string;\n offer: string;\n rockmanId: string;\n pin: string;\n extraParams: IHash;\n uniqid: string;\n evinaTid: string;\n}): Promise<IPINSubmissionResult> => {\n const cleanTrafficString = checkIsCleanTraffic(country);\n const extraParamsQs = `&${Object.keys(extraParams)\n .map((k) => `${k}=${extraParams[k]}`)\n .join('&')}`;\n\n // Base parameters object\n const params = {\n action: 'verify-pin',\n country: bupperizeCountry(country),\n slug,\n device,\n offerId: offer,\n rockman_id: rockmanId,\n pin,\n page: encodeURIComponent(window?.location?.href),\n language_code: window.languageCode || '',\n ClickID: window.antifraud_click_id || '',\n partner_cid: window.partner_cid || '',\n sam_evina_tid: evinaTid,\n uniqid,\n // More specific antifraud IDs will eventuallly replace antifraud_id\n // https://www.notion.so/sammedia/KW-Agency-Globocom-KW-ENTERTAINMENT-STORE-GAMESOLUTELY-GLING-Landing-Page-Test-a9841b14218b42709ffb1a2d41428275?d=f2a8d09b1e8c4fd4bdab69ab5dda1f25\n antifraud_id_js_code: window.antifraud_id_js_code || '',\n antifraud_id_js_link: window.antifraud_id_js_link || ''\n };\n\n // Convert params object to query string\n const queryString = Object.entries(params)\n .filter(([_, value]) => value)\n .map(([key, value]) => `${key}=${value}`)\n .join('&');\n\n const host = window.DEV_BASE_URL || '';\n const url = `${host}/tallyman/v1/?${queryString}${cleanTrafficString}${extraParamsQs}`;\n\n return fetch(url).then((x) => x.json());\n};\n\nconst mcpShield = async ({\n window,\n country,\n slug,\n device,\n offer,\n rockmanId,\n operator,\n uniqid\n}: {\n window: Window;\n country: string;\n slug: string;\n device: string;\n offer: string;\n rockmanId: string;\n operator?: string;\n uniqid?: string;\n}): Promise<IMcpShieldResult> => {\n const pageUrl = window.location.href;\n const ipAdd = window.pac_analytics.visitor.ip;\n\n const params = new URLSearchParams({\n action: 'mcp-shield',\n country,\n slug,\n device,\n offerId: offer.toString(),\n rockman_id: rockmanId,\n client_lpu: pageUrl,\n ...(operator && { operator }),\n ...(uniqid && { uniqid })\n });\n\n // Conditionally add client_ip if it exists\n if (ipAdd) {\n params.append('client_ip', ipAdd);\n }\n\n const host = window.DEV_BASE_URL || '';\n const url = `${host}/tallyman/v1/?${params.toString()}`;\n\n return fetch(url).then((x) => x.json());\n};\n\nexport { triggerPin, verifyPin, mcpShield };\n","import { ICheckSubscriptionResult } from '../../common-types/ICheckSubscriptionResult';\nimport { IError } from '../../common-types/IError';\nimport { checkSubscription } from '../../sharedApi/checkSubscription';\nimport {\n IHash,\n IMcpShieldResult,\n IMSISDNSubmissionResult,\n IPINSubmissionResult,\n MultiOperatorMSISDNSubmissionResult,\n SingleMSISDNSubmissionResult\n} from '../../sharedFlowTypes/PinTypes';\nimport { IConfig, IStrategyIDentifyUserResult } from '../../sharedFlowTypes/StrategyTypes';\nimport { left, loop, right } from '../../utilities/helpers';\nimport { loadScriptInnerHtml } from '../../utilities/loadScriptInnerHtml';\nimport { searchToObject } from '../../utilities/searchToObject';\nimport { mcpShield, triggerPin, verifyPin } from './api';\n\nexport default async function submitMSISDN(\n window: Window,\n maybeConfig: IConfig,\n internationalMSISDN: string,\n extraParams?: IHash\n): Promise<SingleMSISDNSubmissionResult | MultiOperatorMSISDNSubmissionResult> {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const config: IConfig = { offer: window.pac_analytics.visitor.offer, ...(maybeConfig || {}) };\n if (config.automaticallySubmitAllOperators === true && !!config.operators && config.operators.length > 0) {\n return submitMSISDNForMultipleOperators(window, config, internationalMSISDN, config.operators, extraParams);\n }\n return submitMSISDNOnce(window, config, internationalMSISDN, extraParams);\n}\n\nlet uniqidResult = '';\n// eslint-disable-next-line consistent-return\nexport async function loadMcpShield(window: Window, config: IConfig): Promise<IMcpShieldResult> {\n if (config) {\n const { slug, country, device } = config;\n\n const { offer } = window.pac_analytics.visitor;\n const { rockmanId } = window.pac_analytics.visitor;\n\n try {\n const mcpShieldResult: IMcpShieldResult = await mcpShield({ window, country, slug, device, offer, rockmanId });\n if (mcpShieldResult.success === false) {\n console.warn(mcpShieldResult.message);\n } else {\n loadScriptInnerHtml(mcpShieldResult.source);\n uniqidResult = mcpShieldResult.uniqid;\n return mcpShieldResult;\n }\n } catch (err) {\n console.warn(err);\n }\n }\n}\n\nasync function submitMSISDNOnce(\n window: Window,\n config: IConfig,\n internationalMSISDN: string,\n extraParams?: IHash\n): Promise<SingleMSISDNSubmissionResult> {\n if (!internationalMSISDN) {\n const submissionError = new Error(`Error in submitMSISDN() trigger-pin action`) as IError & { type: string };\n submissionError.type = 'InvalidMSISDN';\n throw submissionError;\n }\n const newExtraParams = extraParams || {};\n let isSkipValidation = false;\n const searchObj = searchToObject(window) as IStrategyIDentifyUserResult;\n if (searchObj?.success === 'true' && searchObj['msisdn-alias'] === '1') {\n // Search param is set to 1 for header enrichment when the msisdn is masked\n newExtraParams['skip-validation'] = '1';\n }\n\n if (newExtraParams['skip-validation'] === '1') {\n isSkipValidation = true;\n }\n\n const msisdn = isSkipValidation ? internationalMSISDN : internationalMSISDN.match(/\\d+/gi).join(''); // tallyman API expects international msisdn without any special character\n const { rockmanId } = window.pac_analytics.visitor;\n\n const { slug, country, device, offer } = config;\n\n const search = window.location.search.substr(1) || '';\n const uniqid = !!uniqidResult && uniqidResult !== '' ? `&mcpUniqid=${uniqidResult}` : '';\n const evinaTid = typeof window !== 'undefined' && window.tid ? window.tid : '';\n\n const result: IMSISDNSubmissionResult = await triggerPin({\n window,\n country,\n slug,\n device,\n offer,\n msisdn,\n rockmanId,\n extraParams: newExtraParams,\n search,\n uniqid,\n evinaTid\n });\n\n if (result.success === false) {\n const error = new Error(`Error in submitMSISDN() trigger-pin action:\\n${result.message}`) as IError & {\n type: string;\n productUrl: string;\n };\n error.message = result.message;\n switch (true) {\n case result.message.includes('ALREADY SUBSCRIBED'):\n error.type = 'AlreadySubscribed';\n break;\n case result.message.includes('invalid'):\n error.type = 'InvalidMSISDN';\n break;\n default:\n error.type = null;\n }\n // error.type = result.message === 'ALREADY SUBSCRIBED' ? 'AlreadySubscribed' : 'InvalidMSISDN';\n error.productUrl = result.product_url ? result.product_url : '';\n console.error(error);\n throw error;\n } else {\n window.operator = result.operator; // currently used on server for KW_STC if present dont call empello for Shemaroo\n const codesWithMcpShied: { [key: string]: { [key: string]: string } } = {\n kw: {\n kw_viva: 'kw_viva'\n },\n k2: {\n k2_viva: 'k2_viva'\n },\n bh: {\n bh_viva: 'bh_viva'\n }\n };\n if (\n country &&\n result.operator &&\n ((codesWithMcpShied[country.toLowerCase()] &&\n codesWithMcpShied[country.toLowerCase()][result.operator.toLowerCase()]) ||\n country.toLowerCase() === 'iq') &&\n !window.isCallBlockApi &&\n !window.Empello // set on server https://www.notion.so/sammedia/KW-Agency-Shemaroo-STC-integration-1a114991683d4af79eb01a4d96789f30\n ) {\n try {\n const mcpShieldResult: IMcpShieldResult = await mcpShield({\n window,\n country,\n slug,\n device,\n offer,\n rockmanId,\n operator: result.operator,\n uniqid\n });\n if (mcpShieldResult.success === false) {\n console.warn(mcpShieldResult.message);\n } else {\n loadScriptInnerHtml(mcpShieldResult.source);\n uniqidResult = mcpShieldResult.uniqid;\n }\n } catch (err) {\n console.warn(err);\n }\n }\n\n if (result.javascript) {\n loadScriptInnerHtml(result.javascript);\n }\n\n return {\n type: 'SingleMSISDNSubmissionResult',\n pin: result.pin,\n uniqidResult,\n operator: result.operator,\n redirectUrl: result?.redirect_to_url, // For pin redirect empello\n ...(result?.userType ? { userType: result?.userType } : {}) // For Peru user plan if prepaid or postpaid\n };\n }\n}\n\nasync function submitMSISDNForMultipleOperators(\n window: Window,\n config: IConfig,\n internationalMSISDN: string,\n operators: string[],\n extraParams?: IHash\n): Promise<MultiOperatorMSISDNSubmissionResult> {\n const results = await Promise.all(\n operators.map(async (o) => {\n try {\n const singleResult = await submitMSISDNOnce(window, config, internationalMSISDN, {\n ...extraParams,\n operator: o\n });\n return right({ ...singleResult, operator: o });\n } catch (error) {\n return left(error);\n }\n })\n );\n\n const alreadySubscribed = results.find((r: any) => r.type === 'left' && r.value?.type === 'AlreadySubscribed');\n\n if (results.every((r) => r.type === 'left')) {\n // no submission worked\n throw results[0].value;\n } else if (alreadySubscribed) {\n throw alreadySubscribed.value;\n } else {\n return {\n type: 'MultiOperatorMSISDNSubmissionResult'\n };\n }\n}\n\nexport async function submitPIN(\n window: Window,\n pin: string,\n config: IConfig,\n extraParams: IHash\n): Promise<{ productUrl?: string; isAlreadySubscribed?: boolean; gatewayRedirectUrl?: string }> {\n if (window.hostCountry && window.hostSlug) {\n config.country = window.hostCountry;\n config.slug = window.hostSlug;\n }\n const { slug, country, device } = config;\n const { offer } = window.pac_analytics.visitor;\n\n const newExtraParams = extraParams || {};\n const searchObj = searchToObject(window) as any;\n if (searchObj?.success === 'true' && searchObj['msisdn-alias'] === '1') {\n newExtraParams['skip-validation'] = '1';\n }\n\n const { rockmanId } = window.pac_analytics.visitor;\n\n if (!pin) {\n const emptyPinError = new Error(`Error in submitMSISDN() verify-pin action:\\n Pin Cannot Be Empty`) as IError & {\n type: string;\n };\n emptyPinError.type = 'InvalidPIN';\n throw emptyPinError;\n }\n const uniqid = uniqidResult !== '' ? `&mcpUniqid=${uniqidResult}` : '';\n const evinaTid = typeof window !== 'undefined' && window.tid ? window.tid : '';\n\n const pinResult: IPINSubmissionResult = await verifyPin({\n window,\n country,\n slug,\n device,\n offer,\n rockmanId,\n pin,\n extraParams: newExtraParams,\n uniqid,\n evinaTid\n });\n if (pinResult.success === false) {\n const pinErrorTypeMap: { [key: string]: string } = {\n 'pin does not match': 'InvalidPIN',\n 'mcp blocked': 'SessionBlocked',\n expired_pin: 'ExpiredPIN',\n insufficient_balance: 'InsufficientBalance'\n };\n const errorMessage = pinErrorTypeMap[pinResult.message as string];\n const pinError = new Error(`Error in submitMSISDN() verify-pin action:\\n${errorMessage}`) as IError & {\n type: string;\n };\n pinError.type = errorMessage || 'InvalidPIN';\n pinError.message = pinResult.message;\n console.error(pinError);\n throw pinError;\n } else if (pinResult.async === true) {\n // Needed for ES https://www.notion.so/sammedia/ES-OnMobile-Movistar-Direct-Ouisys-Integration-XR-Academy-ca60b176b0ea40a7b170e5d9e7deb491\n if (pinResult.product_url && pinResult.product_url !== '' && country?.toLowerCase() === 'es') {\n return { gatewayRedirectUrl: pinResult.product_url };\n }\n const check: () => Promise<ICheckSubscriptionResult> = () =>\n checkSubscription({ window, country, slug, device, offer, rockmanId, extraParams });\n\n const checkResult: ICheckSubscriptionResult = await loop(\n check,\n 100,\n (r) => r.success || r.message === 'invalid_pin',\n 0\n );\n if (checkResult.success === true) {\n const isAlreadySubscribed = pinResult.message === 'ALREADY SUBSCRIBED';\n return { productUrl: checkResult.product_url || null, isAlreadySubscribed };\n }\n const pinError = new Error(`Error in submitMSISDN() verify-pin action:\\n${checkResult.message}`) as IError & {\n type: string;\n };\n pinError.type = 'InvalidPIN';\n pinError.message = checkResult.message;\n\n throw pinError;\n } else {\n const isAlreadySubscribed = pinResult.message === 'ALREADY SUBSCRIBED';\n return { productUrl: pinResult.product_url || null, isAlreadySubscribed };\n }\n}\n","import { createAsyncThunk, createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport * as RDS from '../../common-types/RemoteDataState';\nimport {\n IHash,\n MSISDNEntryErrorTypes,\n MSISDNEntryFailure,\n MSISDNEntrySuccess,\n PINEntryErrorTypes,\n PINEntryFailure,\n PINEntryState,\n PINEntrySuccess,\n PinFlowState\n} from '../../sharedFlowTypes/PinTypes';\nimport { IMockFlowParams, PossibleTypes, RootState } from '../../sharedFlowTypes/StrategyTypes';\nimport { searchToObject } from '../../utilities/searchToObject';\nimport { storeMsisdn } from '../../utilities/storeMsisdn';\nimport { tracker } from '../../utilities/tracker';\nimport { identifyStrategy, setStrategyExtraData } from '../strategy/strategySlice';\nimport submitMSISDN, { submitPIN } from './main';\n\nconst mockedPINState: PinFlowState = {\n currentState: {\n type: 'PINEntry',\n result: RDS.NothingYet<PINEntryFailure, PINEntrySuccess>(),\n data: {\n actualPIN: '',\n msisdn: '',\n operator: '',\n pinMaxLength: 4\n }\n }\n};\n\nconst mockedCompletedState: PinFlowState = {\n currentState: {\n type: 'PINEntry',\n result: RDS.Success<PINEntryFailure, PINEntrySuccess>({ finalUrl: '/product' }),\n data: {\n actualPIN: '',\n msisdn: '',\n operator: '',\n pinMaxLength: 4\n }\n }\n};\n\nconst mockedMSISDNEntryFailure: PinFlowState = {\n currentState: {\n type: 'MSISDNEntry',\n result: RDS.Failure<MSISDNEntryFailure, MSISDNEntrySuccess>({\n errorType: 'InvalidMSISDN',\n error: 'Invalid Mobile Number'\n })\n }\n};\n\n// Define the initial state\nconst defaultInitialState: PinFlowState = {\n currentState: {\n type: 'MSISDNEntry',\n result: RDS.NothingYet()\n }\n};\n\n/**\n * Sets the initial state of the pin flow based on the search parameters in the URL or the default state.\n *\n * @param {Window} window - The window object.\n * @return {PinFlowState} The initial state of the pin flow.\n */\nconst setInitialState = (window: Window) => {\n const search = searchToObject(window) as IMockFlowParams<any>;\n const pinPageEvent = new Event('onPinPage');\n const isPinEntryStep = search['show-pin-entry'] && search['show-pin-entry'] === '1';\n const isShowThankYouStep = search['show-thank-you'] && search['show-thank-you'] === '1';\n const isShowCustomError = search?.show_custom_error === '1';\n\n const msisdnError: PinFlowState = {\n currentState: {\n type: 'MSISDNEntry',\n result: RDS.Failure<MSISDNEntryFailure, MSISDNEntrySuccess>({\n errorType: 'SomethingWentWrong',\n error: null\n })\n }\n };\n\n const thankYouState: PinFlowState = {\n currentState: {\n type: 'PINEntry',\n result: RDS.Success<PINEntryFailure, PINEntrySuccess>({\n finalUrl: search?.product_url || ''\n }),\n // @ts-ignore\n data: {\n msisdn: search?.msisdn || '',\n operator: search?.operator || ''\n }\n }\n };\n\n const initalPinEntryState: PinFlowState = {\n currentState: {\n type: 'PINEntry',\n result: RDS.NothingYet(),\n // @ts-ignore\n data: {\n msisdn: search?.msisdn || '',\n operator: search?.operator || ''\n }\n }\n };\n if (isPinEntryStep) {\n // Needed for shemroo the handler is injected on server\n window?.dispatchEvent(pinPageEvent);\n return initalPinEntryState;\n }\n if (isShowThankYouStep) {\n return thankYouState;\n }\n if (isShowCustomError) {\n return msisdnError;\n }\n\n if (search['mock-flow']) {\n switch (search['current-state']) {\n case 'msisdn-failure-state':\n return mockedMSISDNEntryFailure;\n case 'pin-state':\n // Needed for shemroo the handler is injected on server\n window?.dispatchEvent(pinPageEvent);\n return mockedPINState;\n case 'completed-state':\n return mockedCompletedState;\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\n/**\n * submitMSISDNAction\n * @returns {type: ' 'pinFlow/submitMSISDNAction', payload: {type: PossibleTypes.MO, result: PINEntryState}}\n \n * Calls trigger-pin api that sends a pin to the user\n * Sets state to show pin entry\n */\ninterface SubmitMSISDNArgs {\n window: Window;\n msisdn: string;\n extraParams?: IHash;\n}\nexport const submitMSISDNAction = createAsyncThunk<\n PINEntryState,\n SubmitMSISDNArgs,\n {\n rejectValue: MSISDNEntryFailure; // Type for rejectWithValue\n }\n>('pinFlow/submitMSISDNAction', async ({ window, msisdn, extraParams }, { getState, dispatch, rejectWithValue }) => {\n const state: RootState = getState();\n if (!state?.strategy?.currentState?.data?.config) {\n return rejectWithValue({\n errorType: 'UnexpectedState'\n });\n }\n const { config, isHeaderEnrichmentSuccess } = state.strategy.currentState.data;\n const pinFlowCurrentState = state.pinFlow?.currentState;\n try {\n /**\n * Palestine calling code is +970\n * But there was a request to have it as +972 only for gateway shemaroo\n */\n // Start PS Calling code temp fix\n if (config?.country.toLowerCase() === 'ps' && config?.slug.includes('shemaroo')) {\n const prefix = getInputValuePrefix(config?.country, msisdn);\n if (prefix === '+970') {\n msisdn = msisdn.replace('970', '972');\n }\n }\n // END PS Calling code temp fix\n\n const jsLinkResult = window?.pac_analytics?.visitor?.genericJsLinkResult;\n\n if (jsLinkResult?.gateway === 'tpay') {\n // START TPAY TRIGGER PIN\n const subscriptionInfo = {\n subscriptionPlanId: jsLinkResult?.subscriptionPlanId,\n productCatalog: jsLinkResult?.productCatalog,\n productSku: jsLinkResult?.productSku,\n customerAccountNumber: window.pac_analytics.visitor.rockmanId,\n msisdn: window.TPay.HeaderEnrichment.msisdn(),\n operatorCode: window.TPay.HeaderEnrichment.operatorCode()\n };\n\n const confirmationCallback = async (status: any, refCode: any, contract: TpayContactDetails) => {\n try {\n if (status) {\n if (refCode) {\n // Handle already subscribed\n const errorMsg = 'Subscription already exists';\n return rejectWithValue({\n errorType: 'AlreadySubscribed',\n error: errorMsg,\n message: errorMsg,\n productUrl: null\n });\n }\n if (contract.operationStatusCode === '0') {\n // Handle pending verification\n return {\n ...pinFlowCurrentState,\n type: 'PINEntry',\n result: RDS.NothingYet(),\n data: {\n msisdn,\n operator: '',\n isHeaderEnrichmentSuccess\n }\n };\n }\n // Handle verification failure\n const errorMsg = contract.errorMessage;\n return rejectWithValue({\n errorType: 'SubscriptionVerificationFailed',\n error: errorMsg,\n message: errorMsg,\n productUrl: null\n });\n }\n // Handle operational error\n return rejectWithValue({\n errorType: 'OperationalError',\n error: status,\n message: 'There was an operational error in the confirmation process',\n productUrl: null\n });\n } catch (error) {\n // Catch any unexpected errors\n return rejectWithValue({\n errorType: 'UnknownError',\n error: error.toString(),\n message: error.message,\n productUrl: null\n });\n }\n };\n\n // Usage of the callback in the main thunk\n // Explicitly type the confirmationResult to ensure it matches the expected return types\n const confirmationResult: PINEntryState | ReturnType<typeof rejectWithValue> = await new Promise(\n (resolve, reject) => {\n window?.TPay?.HeaderEnrichment?.confirm(subscriptionInfo, (status, refCode, contract) => {\n // @ts-ignore\n confirmationCallback(status, refCode, contract).then(resolve).catch(reject);\n });\n }\n );\n\n if (confirmationResult) {\n return confirmationResult; // Exit the thunk early with the returned value\n }\n\n window?.TPay?.HeaderEnrichment?.confirm(subscriptionInfo, confirmationCallback);\n // END TPAY TRIGGER PIN\n } else {\n // START NORMAL TRIGGER PIN\n // Start Trigger Pin\n tracker.advancedInFlow('tallyman.v1-pin', 'msisdn-submitted', { msisdn });\n\n const msisdnSubmissionResult = await submitMSISDN(window, config, msisdn);\n\n tracker.advancedInFlow('tallyman.v1-pin', 'msisdn-submission-success', { msisdn });\n // End Trigger Pin\n\n /**\n * Some flows require us to redirect to a url after trigger pin to check for fraud\n * The url will then do some processing and return back to ouisys with\n * extra param in the url that will tell us to show pin entry step or error\n */\n\n // Start Pin Redirect\n if (msisdnSubmissionResult.type === 'SingleMSISDNSubmissionResult' && msisdnSubmissionResult.redirectUrl) {\n tracker.advancedInFlow('tallyman.v1-pin', 'msisdn-submission-success', { msisdn });\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-redirect', {\n redirectUrl: msisdnSubmissionResult.redirectUrl\n });\n window.location.href = msisdnSubmissionResult.redirectUrl;\n }\n // End Pin Redirect\n\n // Start handle store msisdn\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 handle store msisdn\n\n const operator: string =\n msisdnSubmissionResult.type === 'SingleMSISDNSubmissionResult' ? msisdnSubmissionResult.operator : '';\n\n const pinMaxLengthByOp: { [key: string]: number } = {\n SA_MOBILY: 6,\n SA_STC: 4,\n SA_ZAIN: 4\n };\n\n /**\n * onPinPage\n * some scripts on the server need to be injected on pin page/view\n * This event will be handled on server\n */\n const pinPageEvent = new Event('onPinPage');\n window?.dispatchEvent(pinPageEvent);\n\n return {\n ...pinFlowCurrentState,\n type: 'PINEntry',\n result: RDS.NothingYet(),\n data: {\n actualPIN: msisdnSubmissionResult.type === 'SingleMSISDNSubmissionResult' ? msisdnSubmissionResult.pin : null,\n msisdn,\n operator,\n pinMaxLength: operator !== '' && pinMaxLengthByOp[operator] ? pinMaxLengthByOp[operator] : null,\n isHeaderEnrichmentSuccess,\n ...(msisdnSubmissionResult.type === 'SingleMSISDNSubmissionResult' && msisdnSubmissionResult?.userType\n ? { userType: msisdnSubmissionResult.userType }\n : {})\n }\n };\n // END NORMAL TRIGGER PIN\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-pin', 'msisdn-submission-failure', {\n msisdn,\n errorType,\n error: ex.toString(),\n message: ex.message,\n productUrl: ex.productUrl\n });\n\n if (isHeaderEnrichmentSuccess) {\n dispatch(\n setStrategyExtraData({\n type: PossibleTypes.PIN,\n data: {\n isHeaderEnrichmentSuccess: false,\n config\n }\n })\n );\n }\n\n return rejectWithValue({\n errorType,\n error: ex.toString(),\n message: ex.message,\n productUrl: ex.productUrl\n });\n }\n});\n\n/**\n * submitPinAction\n * @returns {type: ' 'pinFlow/submitMSISDNAction', payload: {type: 'PINEntry', result: RDS.NothingYet()}}\n \n * Calls verify-pin api that check if the user enters a valid pin\n * Sets state to show thank you page if pin is valid\n */\ninterface SubmitPINArgs {\n window: Window;\n msisdn: string;\n pin: string;\n extraParams?: IHash;\n}\nexport const submitPinAction = createAsyncThunk<\n PINEntryState,\n SubmitPINArgs,\n {\n rejectValue: PINEntryFailure; // Type for rejectWithValue\n }\n>('pinFlow/submitPinAction', async ({ window, msisdn, pin, extraParams }, { getState, rejectWithValue }) => {\n const state: RootState = getState();\n\n if (!state?.strategy?.currentState?.data?.config) {\n return rejectWithValue({\n errorType: 'UnexpectedState'\n });\n }\n const { config } = state.strategy.currentState.data;\n const pinFlowCurrentState = state.pinFlow?.currentState;\n try {\n tracker.advancedInFlow('tallyman.v1-pin', 'pin-submitted', { msisdn, pin });\n const result = await submitPIN(window, pin, config, extraParams);\n tracker.advancedInFlow('tallyman.v1-pin', 'pin-submission-success', {\n msisdn,\n pin,\n finalUrl: result.productUrl\n });\n\n /**\n * Gateway redirect\n * Value returned in this case is actually the gateway url instead of the product url\n * More details on this ticket:\n * https://www.notion.so/sammedia/ES-OnMobile-Movistar-Direct-Ouisys-Integration-XR-Academy-ca60b176b0ea40a7b170e5d9e7deb491\n */\n // Start Gateway redirect\n if (result.gatewayRedirectUrl && result.gatewayRedirectUrl !== '') {\n tracker.advancedInFlow('tallyman.v1-pin', 'gateway-redirect', {\n msisdn,\n pin,\n gatewayRedirectUrl: result.gatewayRedirectUrl\n });\n window.location.href = result.gatewayRedirectUrl;\n }\n // End Gateway redirect\n\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 ...pinFlowCurrentState,\n type: 'PINEntry',\n result: RDS.Success<PINEntryFailure, PINEntrySuccess>({\n finalUrl: result.productUrl,\n isAlreadySubscribed: result.isAlreadySubscribed || false\n })\n };\n } catch (ex) {\n console.warn(ex);\n let errorType: PINEntryErrorTypes;\n switch (ex.type) {\n case 'AlreadySubscribed':\n errorType = 'AlreadySubscribed';\n break;\n case 'InvalidPIN':\n errorType = 'InvalidPIN';\n break;\n case 'SessionBlocked':\n errorType = 'SessionBlocked';\n break;\n case 'ExpiredPIN':\n errorType = 'ExpiredPIN';\n break;\n case 'InsufficientBalance':\n errorType = 'InsufficientBalance';\n break;\n default:\n errorType = 'UnknownError';\n break;\n }\n tracker.recedeInFlow('tallyman.v1-pin', 'pin-submission-failure', {\n msisdn,\n pin,\n errorType,\n error: ex.toString(),\n message: ex.message,\n productUrl: ex.productUrl\n });\n // Redirect to the product url if returned in the exception\n setTimeout(() => {\n if (ex.productUrl) {\n window.location.href = ex.productUrl;\n }\n }, 0);\n\n return rejectWithValue({\n errorType,\n error: ex.toString(),\n message: ex.message,\n productUrl: ex.productUrl\n });\n }\n});\n\nexport const backToStartAction = createAsyncThunk<\n any,\n any,\n {\n rejectValue: any; // Type for rejectWithValue\n }\n>('pinFlow/backToStartAction', async (_, { dispatch, rejectWithValue }) => {\n try {\n tracker.recedeInFlow('tallyman.v1-pin', 'pin-state', 'requested to change phone number');\n dispatch(identifyStrategy());\n } catch (ex) {\n console.warn(ex);\n return rejectWithValue({\n errorType: 'UnexpectedState'\n });\n }\n});\n\ntype CountryCodeMap = { [country: string]: string };\n\nconst countryCodes: CountryCodeMap = {\n PS: '970'\n // Add other countries and codes here\n};\n\nconst getInputValuePrefix = (country: string, international: string): string => {\n if (!country || !international) return '';\n\n // Convert the country to uppercase and retrieve the country code\n const normalizedCountry = country.toUpperCase();\n const countryCode = countryCodes[normalizedCountry];\n\n // Check if the country code exists in the mapping\n if (!countryCode) {\n console.error('Country code not found for', country);\n return '';\n }\n\n return `+${countryCode}`;\n};\n\n// Define your slice\nconst pinFlowSlice = createSlice({\n name: 'pinFlow',\n initialState,\n reducers: {},\n extraReducers: (builder) => {\n builder\n .addCase(submitMSISDNAction.pending, (state) => {\n state.currentState = { type: 'MSISDNEntry', result: RDS.Loading(), data: state.currentState.data };\n })\n .addCase(submitMSISDNAction.fulfilled, (state, action: PayloadAction<PINEntryState>) => {\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 data: state.currentState.data\n };\n })\n .addCase(submitPinAction.pending, (state) => {\n state.currentState = { type: 'PINEntry', result: RDS.Loading(), data: state.currentState.data };\n })\n .addCase(submitPinAction.fulfilled, (state, action: PayloadAction<PINEntryState>) => {\n state.currentState = action.payload;\n })\n .addCase(submitPinAction.rejected, (state, action: PayloadAction<PINEntryFailure>) => {\n state.currentState = { type: 'PINEntry', result: RDS.Failure(action.payload), data: state.currentState.data };\n });\n }\n});\n\nexport const { reducer: pinFlowReducer, actions: pinFlowActions } = pinFlowSlice;\n\nexport const selectPinFlowState = (state: any) => state.pinFlow;\n"],"names":["usePinFlowState","useSelector","state","pinFlow","currentState","pinFlowMatch","_a","msisdnEntry","pinEntry","type","result","data","Error","checkIsCleanTraffic","country","window","shouldBlock","triggerPin","slug","device","offer","msisdn","rockmanId","extraParams","search","uniqid","evinaTid","cleanTrafficString","extraParamsQs","concat","Object","keys","map","k","filter","Boolean","join","cleanSearchParams","params","action","offerId","rockman_id","sam_evina_tid","page","encodeURIComponent","_b","location","href","language_code","languageCode","partner_transaction_id","partner_timestamp","partner_cid","antifraud_id","antifraud_id_js_code","antifraud_id_js_link","queryString","entries","__read","key","value","host","DEV_BASE_URL","url","fetch","then","x","json","verifyPin","pin","bupperizeCountry","ClickID","antifraud_click_id","mcpShield","operator","pageUrl","ipAdd","pac_analytics","visitor","ip","URLSearchParams","__assign","toString","client_lpu","append","submitMSISDN","maybeConfig","internationalMSISDN","config","automaticallySubmitAllOperators","operators","length","submitMSISDNForMultipleOperators","submitMSISDNOnce","uniqidResult","submissionError","newExtraParams","isSkipValidation","searchObj","searchToObject","success","match","substr","tid","sent","error","message","includes","productUrl","product_url","console","codesWithMcpShied","kw","kw_viva","k2","k2_viva","bh","bh_viva","toLowerCase","isCallBlockApi","Empello","mcpShieldResult","warn","loadScriptInnerHtml","source","err_2","javascript","redirectUrl","redirect_to_url","userType","Promise","all","o","__awaiter","_this","singleResult","right","left","error_1","results","alreadySubscribed","find","r","every","submitPIN","hostCountry","hostSlug","emptyPinError","pinResult","errorMessage","expired_pin","insufficient_balance","pinError","async","gatewayRedirectUrl","check","response","checkSubscription","loop","checkResult","isAlreadySubscribed","mockedPINState","RDS.NothingYet","actualPIN","pinMaxLength","mockedCompletedState","RDS.Success","finalUrl","mockedMSISDNEntryFailure","RDS.Failure","errorType","defaultInitialState","initialState","pinPageEvent","Event","isPinEntryStep","isShowThankYouStep","isShowCustomError","show_custom_error","msisdnError","thankYouState","initalPinEntryState","dispatchEvent","setInitialState","submitMSISDNAction","createAsyncThunk","getState","dispatch","rejectWithValue","_f","_d","strategy","_e","_c","isHeaderEnrichmentSuccess","pinFlowCurrentState","_g","getInputValuePrefix","replace","jsLinkResult","_j","_h","genericJsLinkResult","gateway","subscriptionInfo_1","subscriptionPlanId","productCatalog","productSku","customerAccountNumber","TPay","HeaderEnrichment","operatorCode","confirmationCallback_1","status","refCode","contract","errorMsg_1","operationStatusCode","errorMsg","resolve","reject","confirm","catch","confirmationResult","_m","_l","_k","tracker","advancedInFlow","msisdnSubmissionResult","customEvent","storeMsisdn","pinMaxLengthByOp","SA_MOBILY","SA_STC","SA_ZAIN","ex_1","recedeInFlow","setStrategyExtraData","PossibleTypes","PIN","submitPinAction","ex_2","setTimeout","backToStartAction","_","identifyStrategy","ex","countryCodes","PS","international","normalizedCountry","toUpperCase","countryCode","pinFlowSlice","createSlice","name","reducers","extraReducers","builder","addCase","pending","RDS.Loading","fulfilled","payload","rejected","pinFlowReducer","reducer","actions"],"mappings":"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"}
package/dist/strategy.js CHANGED
@@ -1,2 +1,2 @@
1
- export{R as RDS}from"./RemoteDataState-lcf8PfJd.js";import{P as t}from"./strategySlice-DuYLxEUR.js";export{i as identifyStrategy,a as selectOperatorAction,b as strategyReducer,s as submitMSISDNAction}from"./strategySlice-DuYLxEUR.js";import"tslib";import"@reduxjs/toolkit";import"./searchToObject.js";import"./getConfig.js";import"./tracker-DaaILhEr.js";import"pacman-client";import"uuid";import"./formatNumberToE164-Bd0VHMHJ.js";var e=function(t){return t((function(t){return t.strategy.currentState}))};function r(e){var r=e.identifyInitialState,o=e.identifyFlowByOperatorSelect,s=e.identifyFlowByMsisdn,a=e.pinFlow,i=e.moFlow,n=e.moRedirFlow,c=e.oneClickFlow,u=e.click2smsFlow,l=e.ussdFlow,m=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 s(e.result);case t.PIN:return a();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 m();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-CqwKXb6-.js";export{i as identifyStrategy,a as selectOperatorAction,b as strategyReducer,s as submitMSISDNAction}from"./strategySlice-CqwKXb6-.js";import"tslib";import"@reduxjs/toolkit";import"./searchToObject.js";import"./getConfig.js";import"./tracker-DaaILhEr.js";import"pacman-client";import"uuid";import"./formatNumberToE164-Bd0VHMHJ.js";var e=function(t){return t((function(t){return t.strategy.currentState}))};function r(e){var r=e.identifyInitialState,o=e.identifyFlowByOperatorSelect,s=e.identifyFlowByMsisdn,a=e.pinFlow,i=e.moFlow,n=e.moRedirFlow,c=e.oneClickFlow,u=e.click2smsFlow,l=e.ussdFlow,m=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 s(e.result);case t.PIN:return a();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 m();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 r}from"tslib";import{createAsyncThunk as o,createSlice as n}from"@reduxjs/toolkit";import{N as i,S as a,L as s,F as l}from"./RemoteDataState-lcf8PfJd.js";import{searchToObject as d}from"./searchToObject.js";import{getConfig as u}from"./getConfig.js";import{q as c,t as f}from"./tracker-DaaILhEr.js";import{f as v}from"./formatNumberToE164-Bd0VHMHJ.js";var p;function w(r){return e(this,void 0,void 0,(function(){var e,o,n,i,a;return t(this,(function(t){switch(t.label){case 0:if(e=c(window.location.href,"mock-ip")||process.env.mock_ip,console.log("mockip",e),r.ip||"undefined"==typeof window)return[3,5];t.label=1;case 1:return t.trys.push([1,3,,4]),o=window.location.host,n=window.DEV_BASE_URL_IP||o,[4,fetch("https://".concat(n,"/api/v1/ip").concat(e?"?mock-ip=".concat(e):"")).then((function(e){return e.json()}))];case 2:return i=t.sent(),r.ip=i.ip,r.ip_range_name=i.ip_range_name,[2,i.ip_range_name];case 3:return a=t.sent(),console.warn("IP Lookup failed",a),[2,""];case 4:return[3,6];case 5:return[2,r.ip_range_name||""];case 6:return[2]}}))}))}!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 m=function(r){var o=r.window,n=r.slug,i=r.country,a=r.msisdn,s=r.device,l=r.offer,d=r.rockmanId;return e(void 0,void 0,void 0,(function(){var e,r,u,c,f;return t(this,(function(t){switch(t.label){case 0:return e=o.languageCode||"",r=encodeURIComponent(o.location.href),u=o.DEV_BASE_URL||"",c=new URLSearchParams({action:"identify",slug:n,country:i,msisdn:a,device:s,offerId:l,rockman_id:d,page:r,language_code:e}).toString(),f="".concat(u,"/tallyman/v1/?").concat(c),[4,fetch(f)];case 1:return[2,t.sent().json()]}}))}))},g={mo:p.MO,pin:p.PIN,oneClick:p.ONE_CLICK,moRedir:p.MO_REDIR,click2sms:p.CLICK2SMS,ussd:p.USSD,tpayHe:p.TPAY_HE,creditCard:p.CREDIT_CARD},y={mo:"Msisdn to sms",pin:"Pin",oneClick:"3G click",moRedir:"Redirect",click2sms:"Click to sms",tpayHe:"Pin",ussd:"Msisdn to sms"},E=function(e){return y[e]};function S(o){var n,i,a,s,l=o.window,d=o.internationalMSISDN,u=o.configs;return e(this,void 0,void 0,(function(){var o,c,f,v,p,w,g,y,E,S,h=this;return t(this,(function(I){switch(I.label){case 0:if(!d)throw(S=new Error("Error in submitMSISDN() identify action")).type="SEInvalidMSISDN",S;return o=(null===(n=d.match(/\d+/gi))||void 0===n?void 0:n.join(""))||"",c=null===(i=null==u?void 0:u.strategyConfigs)||void 0===i?void 0:i.default,f=c.flowConfig,v=null===(a=null==u?void 0:u.strategyConfigs)||void 0===a?void 0:a.operators,p=function(){return e(h,void 0,void 0,(function(){var e,r,n,i,a;return t(this,(function(t){switch(t.label){case 0:return e=f.slug,r=f.country,n=f.device,i=l.pac_analytics.visitor.rockmanId,a=l.pac_analytics.visitor.offer,[4,m({window:l,slug:e,country:r,msisdn:o,device:n,offer:a,rockmanId:i})];case 1:return[2,t.sent()]}}))}))},[4,p()];case 1:if(w=I.sent(),g=v[w.operator]?v[w.operator]:null,y=!1===w.success&&"Operator could not be found for the given MSISDN"===w.message,E=!1===w.success&&-1!==(null===(s=w.message)||void 0===s?void 0:s.indexOf("HLR did not find the operator for given MSISDN")),y||E)throw(S=new Error("Error in submitMSISDN() identify action")).type="FlowDetectFailed",S.msisdn=o,S;if(null!==g)return[2,r({operator:w.operator,default:c},g)];if(null===g)return[2,r({operator:w.operator},c)];throw(S=new Error("Error in submitMSISDN() identify action")).type="SEInvalidMSISDN",S}}))}))}function h(e){var t,o,n=e.configs,i=e.operator,a=null===(t=null==n?void 0:n.strategyConfigs)||void 0===t?void 0:t.default,s=null===(o=null==n?void 0:n.strategyConfigs)||void 0===o?void 0:o.operators;return r({operator:null==i?void 0:i.toUpperCase(),default:a},s[null==i?void 0:i.toUpperCase()])}function I(r){var o=r.window,n=r.configs;return e(this,void 0,void 0,(function(){var e;return t(this,(function(t){switch(t.label){case 0:return[4,w(o.pac_analytics.visitor)];case 1:return e=t.sent(),[2,h({configs:n,operator:e&&e.includes("_")?e.toUpperCase():""})]}}))}))}var _=function(){return{type:p.IDENTIFY_FLOW_BY_MSISDN,result:i()}},C=o("strategy/submitMSISDNAction",(function(r,o){var n=r.window,a=r.msisdn,s=o.rejectWithValue;return e(void 0,void 0,void 0,(function(){var e,r,o,l,d,c,v,p,w;return t(this,(function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),e=u(),[4,S({window:n,internationalMSISDN:a,configs:e})];case 1:return r=t.sent(),o=null==r?void 0:r.flow,l=E(o),d=null===(w=null==e?void 0:e.strategyConfigs)||void 0===w?void 0:w.default,c=null==d?void 0:d.flow,g[o]?(f.sendOptInFlowEvent(l),[2,{type:g[o],result:i(),data:{config:r.flowConfig,operator:r.operator,msisdn:a}}]):[2,{type:g[c],result:i(),data:{config:null==d?void 0:d.flowConfig}}];case 2:switch(v=t.sent(),p=void 0,v.type){case"SEAlreadySubscribed":p="AlreadySubscribed";break;case"SEInvalidMSISDN":p="InvalidMSISDN";break;default:p="UnknownError"}return[2,s({errorType:p,error:v,productUrl:v.productUrl})];case 3:return[2]}}))}))})),D=function(){var e=function(e){var t,r=e.configs,o=null===(t=null==r?void 0:r.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}}},T=o("strategy/selectOperatorAction",(function(r,o){var n=r.operator,a=o.rejectWithValue;return e(void 0,void 0,void 0,(function(){var e,r,o,s;return t(this,(function(t){try{return e=u(),r=h({configs:e,operator:n}),o=r.flow,s=E(o),f.sendOptInFlowEvent(s),[2,{type:g[o],result:i(),data:{config:r.flowConfig,operator:r.operator}}]}catch(e){return"UnkownError",[2,a({errorType:"UnkownError",error:e.toString()})]}return[2]}))}))})),O=function(r){return e(void 0,void 0,void 0,(function(){var e,o,n,a,s,l,d,c;return t(this,(function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),e=u(),[4,I({window:window,configs:e})];case 1:return o=t.sent(),n=null===(c=null==e?void 0:e.strategyConfigs)||void 0===c?void 0:c.default,a=null==n?void 0:n.flow,o.flow||"all-flows-detect-operator-by-ip-or-ask-mobile-number"!==r&&"all-flows-ask-mobile-number"!==r?o.flow||"all-flows-detect-operator-by-ip-or-ask-operator"!==r?(s=o.flow,g[s]?(l=E(s),f.sendOptInFlowEvent(l),[2,{type:g[s],result:i(),data:{config:o.flowConfig,operator:o.operator}}]):[2,{type:g[a],result:i(),data:{config:null==n?void 0:n.flowConfig}}]):[2,D()]:[2,_()];case 2:return d=t.sent(),console.error("error",d),[3,3];case 3:return[2]}}))}))},R=function(e,t){return{type:g[t]||p.PIN,result:i(),data:{config:e}}},N=function(r){var o=r.window;return e(void 0,void 0,void 0,(function(){var e,r,n,i,s;return t(this,(function(t){return e=u(),r=null==e?void 0:e.enableScriptTimer,n=e.strategyConfigs,i=null===(s=null==n?void 0:n.default)||void 0===s?void 0:s.flowConfig,[2,new Promise((function(e){var t,s,l,d;try{var c=null===(s=null===(t=null==o?void 0:o.pac_analytics)||void 0===t?void 0:t.visitor)||void 0===s?void 0:s.heMsisdn,w=null===(d=null===(l=null==o?void 0:o.pac_analytics)||void 0===l?void 0:l.visitor)||void 0===d?void 0:d.country;c&&w&&(c=v(c,w));var m,g=!1,y=!1;r&&(m=setTimeout((function(){var t;g||(y=!0,f.customEvent("Flow","recede-auto","msisdn-detection-failure",{errorType:"3 second timer expired"}),o.isPrelanderClicked=!0,e({type:p.PIN,result:a({}),data:{config:null===(t=null==n?void 0:n.default)||void 0===t?void 0:t.flowConfig}}))}),3e3));var E=function(t){var n=t.detail;if((null==n?void 0:n.msisdn)&&(c=v(n.msisdn,w),o.msisdn=c),r){if(!y){g=!0,clearTimeout(m),f.customEvent("Flow","advance-auto","msisdn-detected",{msisdn:c});var i=h({configs:u(),operator:null==n?void 0:n.operator_code});o.removeEventListener("he-success",E),o.removeEventListener("he-fail",S),e(b(i,c,null==n?void 0:n.operator_code,!0))}}else{f.customEvent("Flow","advance-auto","msisdn-detected",{msisdn:c,operator:null==n?void 0:n.operator_code});i=h({configs:u(),operator:null==n?void 0:n.operator_code});o.removeEventListener("he-success",E),o.removeEventListener("he-fail",S),e(b(i,c,null==n?void 0:n.operator_code,!0))}},S=function(){o.removeEventListener("he-success",E),o.removeEventListener("he-fail",S),e(R(i,null==n?void 0:n.default.flow))};if(o.addEventListener("he-success",E),o.addEventListener("he-fail",S),!(null==o?void 0:o.heScriptUrl))return f.customEvent("Flow","recede-auto","msisdn-detection-failure",{errorType:"Error he script url not set"}),void o.dispatchEvent(new Event("he-fail"));var I=document.createElement("script");I.type="text/javascript",I.id="he-js-link",I.src="".concat(o.heScriptUrl),I.referrerPolicy="origin",document.head.appendChild(I),I.onerror=function(){console.error("Error loading Header Enrichment script."),f.customEvent("Flow","recede-auto","msisdn-detection-failure",{errorType:"Error loading Header Enrichment script."}),o.dispatchEvent(new Event("he-fail"))}}catch(t){console.error("Error in header enrichment:",t),e(R(i,null==n?void 0:n.default.flow))}}))]}))}))},b=function(e,t,r,o){var n,a;void 0===t&&(t=null),void 0===r&&(r=null);var s=null===(n=u().strategyConfigs)||void 0===n?void 0:n.default,l=null==s?void 0:s.flow,d=e.flow||(null===(a=e.default)||void 0===a?void 0:a.flow),c=E(d);return f.sendOptInFlowEvent(c),e.flow?{type:g[d],result:i(),data:{config:e.flowConfig,operator:e.operator,isHeaderEnrichmentSuccess:o}}:{type:g[l],result:i(),data:{config:null==s?void 0:s.flowConfig,operator:r,msisdn:t,isHeaderEnrichmentSuccess:o}}},F={currentState:{type:p.IDENTIFY_STRATEGY,result:i(),data:void 0}},k=function(){var e=d(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:a({})};case"mo":return{type:p.MO,result:a({})};case"moredir":return{type:p.MO_REDIR,result:a({})};case"oneclick":return{type:p.ONE_CLICK,result:a({}),data:{subscription_url:e["subscription-url"]}};case"click2sms":return{type:p.CLICK2SMS,result:a({})};case"ussd":return{type:p.USSD,result:a({})};case"creditcard":return{type:p.CREDIT_CARD,result:a({})};default:throw new Error("(mockStrategyStateByUrlParam) Strategy Mock Flow not supported")}},L=o("strategy/identifyStrategy",(function(){return e(void 0,void 0,void 0,(function(){var r,o,n,s,l,c,w,m,y,S,I,C,T;return t(this,(function(R){switch(R.label){case 0:return r=u(),o=r.strategy,n=r.strategyConfigs,void 0!==(s=d(window))["mock-flow"]?[2,k()]:s["show-pin-entry"]&&"1"===s["show-pin-entry"]||s["show-thank-you"]&&"1"===s["show-thank-you"]?(l=h({configs:r,operator:s.operator}),[2,{type:p.PIN,result:a({}),data:{config:(null==l?void 0:l.flowConfig)||(null===(c=null==n?void 0:n.default)||void 0===c?void 0:c.flowConfig)}}]):o.includes("ask-operator")?[2,D()]:o.includes("detect-operator-by-ip")?[2,O(o)]:(null==o?void 0:o.includes("ask-mobile-number"))?[2,_()]:(null==o?void 0:o.includes("header-enrichment"))&&"header-enrichment-script"!==o?[4,e(void 0,void 0,void 0,(function(){var r,o,n,a,s,l,c,p,w,m,y,S;return t(this,(function(I){switch(I.label){case 0:r=u(),o=null==r?void 0:r.strategyConfigs.default,n=o.flow,I.label=1;case 1:return I.trys.push([1,5,,6]),a=d(window),(s=(null==a?void 0:a.msisdn)&&""!==(null==a?void 0:a.msisdn))&&f.customEvent("Flow","advance-auto","msisdn-detected",{msisdn:null==a?void 0:a.msisdn,operator:null==a?void 0:a.operator}),(null==a?void 0:a.operator)?"pin-header-enrichment"===r.strategy&&s?[2,{type:g[n],result:i(),data:{config:null==o?void 0:o.flowConfig,operator:(null==a?void 0:a.operator)||null,msisdn:(null==a?void 0:a.msisdn)||null,isHeaderEnrichmentSuccess:s}}]:(l=null,c=null,[4,h({operator:null==a?void 0:a.operator,configs:r})]):[2,{type:g[n],result:i(),data:{config:null==o?void 0:o.flowConfig}}];case 2:return p=I.sent(),w=p.flow||n,m=E(w),f.sendOptInFlowEvent(m),"oneClick"!==w?[3,4]:[4,e(void 0,void 0,void 0,(function(){var e,r,o,n,i,a,s,l,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=d(window)).success)throw new Error("Error in getRedirectUrl() identify-user action:\n".concat(e.message||"NotOn3g"));if(!(r=e.subscription_url||e.redirect_url))throw new Error("No URL provided for redirection");return o=window.atob(r),n=new URL(o),i=new URLSearchParams(n.search),a=i.get("msisdn")||e.msisdn,s=i.get("operator")||e.operator,a&&(a=v(a,null===(u=null===(l=null===window||void 0===window?void 0:window.pac_analytics)||void 0===l?void 0:l.visitor)||void 0===u?void 0:u.country)),[2,{msisdn:a||"",operator:s||"",subscription_url:e.subscription_url?o:void 0,redirect_url:e.redirect_url?o:void 0}]}))}))];case 3:y=I.sent(),l=(null==y?void 0:y.subscription_url)||null,c=(null==y?void 0:y.redirect_url)||null,I.label=4;case 4:return[2,{type:g[w],result:i(),data:{config:p.flowConfig,operator:p.operator,subscription_url:l||null,redirect_url:c||null,isHeaderEnrichmentSuccess:s}}];case 5:return S=I.sent(),console.error("error",S),[2,{type:g[n],result:i(),data:{config:null==o?void 0:o.flowConfig}}];case 6:return[2]}}))}))]:[3,2];case 1:return[2,R.sent()];case 2:switch(o){case"header-enrichment-script":return[2,N({window:window})];case"pin":return f.sendOptInFlowEvent("Pin"),[2,{type:p.PIN,result:a({}),data:{config:null===(w=null==n?void 0:n.default)||void 0===w?void 0:w.flowConfig}}];case"mo":return f.sendOptInFlowEvent("Msisdn to sms"),[2,{type:p.MO,result:a({}),data:{config:null===(m=null==n?void 0:n.default)||void 0===m?void 0:m.flowConfig}}];case"mo-redir":return[2,{type:p.MO_REDIR,result:a({}),data:{config:null===(y=null==n?void 0:n.default)||void 0===y?void 0:y.flowConfig}}];case"one-click":return f.sendOptInFlowEvent("Redirect"),[2,{type:p.ONE_CLICK,result:a({}),data:{config:null===(S=null==n?void 0:n.default)||void 0===S?void 0:S.flowConfig}}];case"click2sms":return f.sendOptInFlowEvent("Click to sms"),[2,{type:p.CLICK2SMS,result:a({}),data:{config:null===(I=null==n?void 0:n.default)||void 0===I?void 0:I.flowConfig}}];case"ussd":return f.sendOptInFlowEvent("USSD"),[2,{type:p.USSD,result:a({}),data:{config:null===(C=null==n?void 0:n.default)||void 0===C?void 0:C.flowConfig}}];case"credit-card":return f.sendOptInFlowEvent("Credit card"),[2,{type:p.CREDIT_CARD,result:a({}),data:{config:null===(T=null==n?void 0:n.default)||void 0===T?void 0:T.flowConfig}}];default:throw new Error("Strategy not supported")}}}))}))})),M=o("strategy/setStrategyExtraData",(function(r){var o=r.type,n=r.data;return e(void 0,void 0,void 0,(function(){return t(this,(function(e){return[2,{type:o,result:i(),data:n}]}))}))})),Y=n({name:"strategy",initialState:F,reducers:{},extraReducers:function(e){e.addCase(L.pending,(function(e){e.currentState={type:p.IDENTIFY_STRATEGY,result:s()}})).addCase(L.fulfilled,(function(e,t){e.currentState=t.payload})).addCase(L.rejected,(function(e,t){e.currentState={type:p.IDENTIFY_STRATEGY,result:l(t.error.message)}})).addCase(C.pending,(function(e){e.currentState={type:p.IDENTIFY_FLOW_BY_MSISDN,result:s()}})).addCase(C.fulfilled,(function(e,t){e.currentState=t.payload})).addCase(C.rejected,(function(e,t){e.currentState={type:p.IDENTIFY_FLOW_BY_MSISDN,result:l(t.payload)}})).addCase(M.fulfilled,(function(e,t){e.currentState=t.payload})).addCase(T.pending,(function(e){e.currentState={type:p.IDENTIFY_FLOW_BY_OPERATOR_SELECT,result:s()}})).addCase(T.fulfilled,(function(e,t){e.currentState=t.payload})).addCase(T.rejected,(function(e,t){e.currentState={type:p.IDENTIFY_FLOW_BY_OPERATOR_SELECT,result:l(t.payload)}}))}}).reducer;export{p as P,T as a,Y as b,M as c,L as i,C as s,w as t};
2
+ //# sourceMappingURL=strategySlice-CqwKXb6-.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategySlice-CqwKXb6-.js","sources":["../src/sharedFlowTypes/StrategyTypes.ts","../src/ips/tryGetIPRangeName.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/injectHeaderEnrichmentScript.ts","../src/flows/strategy/strategySlice.ts","../src/flows/strategy/strategies/headerEnrichment.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable camelcase */\nimport * as RDS from '../common-types/RemoteDataState';\nimport { IStrategyNames } from '../common-types/Strategy';\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 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 'show-chain-link': '1' | '0';\n operator: string;\n msisdn?: string;\n 'subscription-url'?: string;\n show_custom_error?: string;\n product_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","/* eslint-disable no-param-reassign */\nimport { IVisitor } from '../common-types/IVisitor';\nimport queryString from '../pacman/queryString';\n\n// eslint-disable-next-line consistent-return\nexport default async function tryGetIPRangeName(visitor: IVisitor): Promise<string> {\n const mockip = queryString(window.location.href, 'mock-ip') || process.env.mock_ip;\n // eslint-disable-next-line no-console\n console.log('mockip', mockip);\n if (!visitor.ip && typeof window !== 'undefined') {\n try {\n const { host } = window.location;\n const newHost = window.DEV_BASE_URL_IP || host;\n const res = await fetch(`https://${newHost}/api/v1/ip${mockip ? `?mock-ip=${mockip}` : ''}`).then((x) =>\n x.json()\n );\n // return isIPInRange('37.200.146.28')\n visitor.ip = res.ip;\n visitor.ip_range_name = res.ip_range_name;\n return res.ip_range_name;\n } catch (ex) {\n console.warn('IP Lookup failed', ex);\n return '';\n }\n } else {\n return visitor.ip_range_name || '';\n }\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 || '';\n const locationHref = encodeURIComponent(window.location.href);\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 { IOptInFlowName } from '../../common-types/IOptInFlowName';\nimport { IStrategy, ISupportedFlows } from '../../common-types/Strategy';\nimport tryGetIPRangeName from '../../ips/tryGetIPRangeName';\nimport { HEResult, IConfig, IFlow, IIdentifyResult, PossibleTypes } from '../../sharedFlowTypes/StrategyTypes';\nimport { formatNumberToE164 } from '../../utilities/formatNumberToE164';\nimport { searchToObject } from '../../utilities/searchToObject';\nimport { identify } from './api';\n\nexport const 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 tpayHe: PossibleTypes.TPAY_HE,\n creditCard: PossibleTypes.CREDIT_CARD\n};\n\n// @ts-ignore\nexport const 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 tpayHe: 'Pin',\n ussd: 'Msisdn to sms'\n};\n\nexport const getTrackerEventName = (flowType: ISupportedFlows) => trackerEventMapping[flowType];\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.includes('_') ? 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 ISupportedFlows,\n PossibleTypes,\n StrategyCurrentState\n} from '../../../sharedFlowTypes/StrategyTypes';\nimport { determineFlowByMsidn, flowMapping, getTrackerEventName } 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 flowObj = await determineFlowByMsidn({ window, internationalMSISDN: msisdn, configs });\n const flowType = flowObj?.flow;\n const event = getTrackerEventName(flowType);\n const defaultConfig = configs?.strategyConfigs?.default;\n const defaultFlowType = defaultConfig?.flow as ISupportedFlows;\n\n if (!flowMapping[flowType]) {\n return {\n type: flowMapping[defaultFlowType],\n result: RDS.NothingYet(),\n data: {\n config: defaultConfig?.flowConfig\n }\n };\n }\n tracker.sendOptInFlowEvent(event);\n return {\n type: flowMapping[flowType],\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n operator: flowObj.operator,\n msisdn\n }\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","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, flowMapping, getOperators, getTrackerEventName } 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 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 const errorType = 'UnkownError';\n return rejectWithValue({\n errorType,\n error: ex.toString()\n });\n }\n }\n);\n","import * as RDS from '../../../common-types/RemoteDataState';\nimport { IStrategyNames, ISupportedFlows } from '../../../common-types/Strategy';\n\nimport { getConfig } from '../../../utilities/getConfig';\nimport { tracker } from '../../../utilities/tracker';\nimport { determineFlowByOperatorFromIp, flowMapping, getTrackerEventName } from '../main';\nimport { askMobileNumber } from './askMobileNumber';\nimport { askOperator } from './askOperator';\n\nconst detectOperatorByIp = async (strategy?: IStrategyNames) => {\n try {\n const configs = getConfig();\n\n const flowObj = await determineFlowByOperatorFromIp({\n window,\n configs\n });\n const defaultConfig = configs?.strategyConfigs?.default;\n const defaultFlowType = defaultConfig?.flow as ISupportedFlows;\n\n if (\n !flowObj.flow &&\n (strategy === 'all-flows-detect-operator-by-ip-or-ask-mobile-number' ||\n strategy === 'all-flows-ask-mobile-number')\n ) {\n return askMobileNumber();\n }\n\n if (!flowObj.flow && strategy === 'all-flows-detect-operator-by-ip-or-ask-operator') {\n return askOperator();\n }\n\n const flowType = flowObj.flow;\n if (!flowMapping[flowType]) {\n return {\n type: flowMapping[defaultFlowType],\n result: RDS.NothingYet(),\n data: {\n config: defaultConfig?.flowConfig\n }\n };\n }\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';\nimport {\n IConfig,\n IFlow,\n IScriptHeaderEnrichmentSuccess,\n ISupportedFlows,\n PossibleTypes\n} from '../../../sharedFlowTypes/StrategyTypes';\nimport { formatNumberToE164 } from '../../../utilities/formatNumberToE164';\nimport { getConfig } from '../../../utilities/getConfig';\nimport { tracker } from '../../../utilities/tracker';\nimport { determineFlowByOperator, flowMapping, getTrackerEventName } 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 = (config: IConfig, flow?: ISupportedFlows) => ({\n type: flowMapping[flow] || PossibleTypes.PIN,\n result: RDS.NothingYet(),\n data: {\n config\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 configs = getConfig();\n const enableScriptTimer = configs?.enableScriptTimer;\n const { strategyConfigs } = configs;\n const config = strategyConfigs?.default?.flowConfig;\n\n return new Promise((resolve) => {\n try {\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 let msisdnDetected = false;\n let timerExpired = false;\n let timerId: string | number | NodeJS.Timeout;\n\n if (enableScriptTimer) {\n timerId = setTimeout(() => {\n if (!msisdnDetected) {\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 resolve({\n type: PossibleTypes.PIN,\n result: RDS.Success({}),\n data: {\n config: strategyConfigs?.default?.flowConfig\n }\n });\n }\n }, 3000);\n }\n\n const onSuccess = (event: Event) => {\n const { detail } = event as IScriptHeaderEnrichmentSuccess;\n if (detail?.msisdn) {\n heMsisdn = formatNumberToE164(detail.msisdn, country);\n window.msisdn = heMsisdn;\n }\n\n if (enableScriptTimer) {\n if (!timerExpired) {\n msisdnDetected = true;\n clearTimeout(timerId);\n\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-detected', {\n msisdn: heMsisdn\n });\n const flowObj = determineFlowByOperator({\n configs: getConfig(),\n operator: detail?.operator_code\n });\n window.removeEventListener('he-success', onSuccess);\n window.removeEventListener('he-fail', onFail);\n resolve(headerEnrichmentScript(flowObj, heMsisdn, detail?.operator_code, true));\n }\n } else {\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-detected', {\n msisdn: heMsisdn,\n operator: detail?.operator_code\n });\n const flowObj = determineFlowByOperator({\n configs: getConfig(),\n operator: detail?.operator_code\n });\n window.removeEventListener('he-success', onSuccess);\n window.removeEventListener('he-fail', onFail);\n resolve(headerEnrichmentScript(flowObj, heMsisdn, detail?.operator_code, true));\n }\n };\n\n const onFail = () => {\n window.removeEventListener('he-success', onSuccess);\n window.removeEventListener('he-fail', onFail);\n resolve(createResponseObject(config, strategyConfigs?.default.flow as ISupportedFlows));\n };\n\n window.addEventListener('he-success', onSuccess);\n window.addEventListener('he-fail', onFail);\n\n if (!window?.heScriptUrl) {\n tracker.customEvent('Flow', 'recede-auto', 'msisdn-detection-failure', {\n errorType: 'Error he script url not set'\n });\n window.dispatchEvent(new Event('he-fail'));\n return;\n }\n const script = document.createElement('script');\n script.type = 'text/javascript';\n script.id = 'he-js-link';\n script.src = `${window.heScriptUrl}`; // URL Comes from server\n script.referrerPolicy = 'origin';\n document.head.appendChild(script);\n\n script.onerror = () => {\n console.error('Error loading Header Enrichment script.');\n tracker.customEvent('Flow', 'recede-auto', 'msisdn-detection-failure', {\n errorType: 'Error loading Header Enrichment script.'\n });\n window.dispatchEvent(new Event('he-fail'));\n };\n } catch (err) {\n console.error('Error in header enrichment:', err);\n resolve(createResponseObject(config, strategyConfigs?.default.flow as ISupportedFlows));\n }\n });\n};\n\nconst headerEnrichmentScript = (\n flowObj: IFlow,\n msisdn: string | null = null,\n operator: string | null = null,\n isHeaderEnrichmentSuccess: boolean\n) => {\n const defaultConfig = getConfig().strategyConfigs?.default;\n const defaultFlowType = defaultConfig?.flow;\n const flowType = flowObj.flow || flowObj.default?.flow;\n const event = getTrackerEventName(flowType);\n\n tracker.sendOptInFlowEvent(event);\n\n if (!flowObj.flow) {\n return {\n type: flowMapping[defaultFlowType],\n result: RDS.NothingYet(),\n data: {\n config: defaultConfig?.flowConfig,\n operator,\n msisdn,\n isHeaderEnrichmentSuccess\n }\n };\n }\n\n return {\n type: flowMapping[flowType],\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n operator: flowObj.operator,\n isHeaderEnrichmentSuccess\n }\n };\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(strategy);\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","import * as RDS from '../../../common-types/RemoteDataState';\n\nimport { ISupportedFlows } from '../../../sharedFlowTypes/StrategyTypes';\nimport { getConfig } from '../../../utilities/getConfig';\nimport { searchToObject } from '../../../utilities/searchToObject';\nimport { tracker } from '../../../utilities/tracker';\nimport { determineFlowByOperator, flowMapping, getHeaderEnrichmentResult, getTrackerEventName } from '../main';\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 const isHeaderEnrichmentSuccess = search?.msisdn && search?.msisdn !== '';\n if (isHeaderEnrichmentSuccess) {\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-detected', {\n msisdn: search?.msisdn,\n operator: search?.operator\n });\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 if (configs.strategy === 'pin-header-enrichment' && isHeaderEnrichmentSuccess) {\n return {\n type: flowMapping[defaultFlowType],\n result: RDS.NothingYet(),\n data: {\n config: defaultConfig?.flowConfig,\n operator: search?.operator || null,\n msisdn: search?.msisdn || null,\n isHeaderEnrichmentSuccess\n }\n };\n }\n\n let subscription_url = null;\n let redirect_url = null;\n const flowObj = await determineFlowByOperator({\n operator: search?.operator,\n configs\n });\n const flowType = flowObj.flow || defaultFlowType;\n const event = getTrackerEventName(flowType);\n\n tracker.sendOptInFlowEvent(event);\n\n if (flowType === 'oneClick') {\n const heResult = await getHeaderEnrichmentResult();\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"],"names":["PossibleTypes","tryGetIPRangeName","visitor","mockip","queryString","window","location","href","process","env","mock_ip","console","log","ip","host","newHost","DEV_BASE_URL_IP","fetch","concat","then","x","json","res","_a","sent","ip_range_name","warn","ex_1","identify","slug","country","msisdn","device","offer","rockmanId","languageCode","locationHref","encodeURIComponent","DEV_BASE_URL","urlParams","URLSearchParams","action","offerId","rockman_id","page","language_code","toString","url","_b","flowMapping","mo","MO","pin","PIN","oneClick","ONE_CLICK","moRedir","MO_REDIR","click2sms","CLICK2SMS","ussd","USSD","tpayHe","TPAY_HE","creditCard","CREDIT_CARD","trackerEventMapping","getTrackerEventName","flowType","determineFlowByMsidn","internationalMSISDN","configs","submissionError","Error","type","match","join","defaultFlowConfig","_c","strategyConfigs","default","config","flowConfig","operatorsConfig","_d","operators","indentifyFlow","__awaiter","_this","pac_analytics","theResult","_f","flow","operator","cannotDetect","success","message","hlrError","_e","indexOf","__assign","determineFlowByOperator","toUpperCase","determineFlowByOperatorFromIp","includes","askMobileNumber","IDENTIFY_FLOW_BY_MSISDN","result","RDS.NothingYet","submitMSISDNAction","createAsyncThunk","rejectWithValue","getConfig","flowObj","event_1","defaultConfig","defaultFlowType","tracker","sendOptInFlowEvent","data","errorType","error","productUrl","askOperator","Object","keys","getOperators","IDENTIFY_FLOW_BY_OPERATOR_SELECT","selectOperatorAction","ex","detectOperatorByIp","strategy","createResponseObject","injectHeaderEnrichmentScript","enableScriptTimer","Promise","resolve","heMsisdn_1","heMsisdn","country_1","formatNumberToE164","timerId_1","msisdnDetected_1","timerExpired_1","setTimeout","customEvent","isPrelanderClicked","RDS.Success","onSuccess_1","event","detail","clearTimeout","operator_code","removeEventListener","onFail_1","headerEnrichmentScript","addEventListener","heScriptUrl","dispatchEvent","Event","script","document","createElement","id","src","referrerPolicy","head","appendChild","onerror","err","isHeaderEnrichmentSuccess","initialState","currentState","IDENTIFY_STRATEGY","undefined","mockStrategyStateByUrlParam","search","searchToObject","subscription_url","identifyStrategy","redirect_url","searchObj","decodedUrl","atob","newUrl","URL","get","heResult","_j","_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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"}
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 o}from"@reduxjs/toolkit";import{S as a,L as i,F as c,N 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{i as v}from"./strategySlice-DuYLxEUR.js";import"./helpers-xPhGBX-B.js";import"pacman-client";import"uuid";import"./getConfig.js";import"./formatNumberToE164-Bd0VHMHJ.js";var p=function(t){return t((function(t){return t.ussdFlow.currentState}))};function S(t){var r=t.msisdnEntry;return function(t){return t.type,r(t.result)}}var y=function(s,o,a,i,c,u,d,l,m){return t(void 0,void 0,void 0,(function(){var t,f,v;return r(this,(function(r){return t=new URLSearchParams(e({action:"ussd",slug:o,country:a,msisdn:i,device:c,offerId:u.toString(),rockman_id:d},l&&{search:l})),m&&m.split("&").forEach((function(r){var e=n(r.split("="),2),s=e[0],o=e[1];s&&t.append(s,o)})),f=s.DEV_BASE_URL||"",v="".concat(f,"/tallyman/v1/?").concat(t.toString()),[2,fetch(v).then((function(t){return t.json()}))]}))}))};function h(n,s,o,a){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,o,a)]}))}))}function w(e,n,s,o){return t(this,void 0,void 0,(function(){var t,a,i,c,u,d,l,m,f,v,p;return r(this,(function(r){switch(r.label){case 0:return t=n.slug,a=n.country,i=n.device,c=n.offer,u=e.location.search.substr(1)||"",d=o?"&".concat(Object.keys(o).map((function(t){return"".concat(t,"=").concat(o[t])})).join("&")):"",l=s.match(/\d+/gi).join(""),m=e.pac_analytics.visitor.rockmanId,[4,y(e,t,a,l,i,c,m,u,d)];case 1:if(!1===(f=r.sent()).success)throw v="ALREADY SUBSCRIBED"===f.message?"AlreadySubscribed":"InvalidMSISDN",(p=new Error("".concat(v,":\n").concat(f.message))).type=v,console.error(p),p;return[2,f]}}))}))}var b={currentState:{type:"MSISDNEntry",result:a({keyword:"TEST OK",shortcode:"777"})}},I={currentState:{type:"MSISDNEntry",result:c({errorType:"InvalidMSISDN",error:"Invalid Mobile Number"})}},E={currentState:{type:"MSISDNEntry",result:u()}},j=function(t){var r=l(t);if(!r["mock-flow"])return E;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"),E}}(window),g=s("ussdFlow/submitMSISDNAction",(function(n,s){var o=n.window,i=n.msisdn,c=n.extraParams,u=s.getState,l=s.rejectWithValue;return t(void 0,void 0,void 0,(function(){var t,n,s,v,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:i}),[4,h(o,n,i,c)];case 2:return s=r.sent(),f.advancedInFlow("tallyman.v1-ussd","msisdn-submission-success",{msisdn:i}),c&&c.storeMsisdn&&"true"===c.storeMsisdn?[4,m(i).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:o,flow:"tallyman.v1-ussd",action:"sale",args:{msisdn:i}}),[2,{type:"MSISDNEntry",result:a(e({},s))}];case 5:switch(v=r.sent(),console.warn(v),p=void 0,v.type){case"AlreadySubscribed":p="AlreadySubscribed";break;case"InvalidMSISDN":p="InvalidMSISDN";break;default:p="UnknownError"}return f.recedeInFlow("tallyman.v1-ussd","msisdn-submission-failure",{msisdn:i,errorType:p||"UnknownError"}),[2,l({errorType:p,productUrl:v.productUrl})];case 6:return[2]}}))}))})),M=s("moRedirFlow/backToStartAction",(function(e,n){var s=n.dispatch,o=n.rejectWithValue;return t(void 0,void 0,void 0,(function(){return r(this,(function(t){try{f.recedeInFlow("tallyman.v1-ussd","ussd-state","requested to change phone number"),s(v())}catch(t){return console.warn(t),[2,o({errorType:"UnexpectedState"})]}return[2]}))}))})),D=o({name:"ussdFlow",initialState:j,reducers:{},extraReducers:function(t){t.addCase(g.pending,(function(t){t.currentState={type:"MSISDNEntry",result:i()}})).addCase(g.fulfilled,(function(t,r){t.currentState=r.payload})).addCase(g.rejected,(function(t,r){t.currentState={type:"MSISDNEntry",result:c(r.payload)}}))}}),k=D.reducer;D.actions;export{M as backToStartAction,g as submitMSISDNAction,p as useUssdFlowState,S as ussdFlowMatch,k as ussdFlowReducer};
1
+ import{__awaiter as t,__generator as r,__assign as e,__read as n}from"tslib";import{createAsyncThunk as s,createSlice as o}from"@reduxjs/toolkit";import{S as a,L as i,F as c,N 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{i as v}from"./strategySlice-CqwKXb6-.js";import"./helpers-xPhGBX-B.js";import"pacman-client";import"uuid";import"./getConfig.js";import"./formatNumberToE164-Bd0VHMHJ.js";var p=function(t){return t((function(t){return t.ussdFlow.currentState}))};function S(t){var r=t.msisdnEntry;return function(t){return t.type,r(t.result)}}var y=function(s,o,a,i,c,u,d,l,m){return t(void 0,void 0,void 0,(function(){var t,f,v;return r(this,(function(r){return t=new URLSearchParams(e({action:"ussd",slug:o,country:a,msisdn:i,device:c,offerId:u.toString(),rockman_id:d},l&&{search:l})),m&&m.split("&").forEach((function(r){var e=n(r.split("="),2),s=e[0],o=e[1];s&&t.append(s,o)})),f=s.DEV_BASE_URL||"",v="".concat(f,"/tallyman/v1/?").concat(t.toString()),[2,fetch(v).then((function(t){return t.json()}))]}))}))};function h(n,s,o,a){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,o,a)]}))}))}function w(e,n,s,o){return t(this,void 0,void 0,(function(){var t,a,i,c,u,d,l,m,f,v,p;return r(this,(function(r){switch(r.label){case 0:return t=n.slug,a=n.country,i=n.device,c=n.offer,u=e.location.search.substr(1)||"",d=o?"&".concat(Object.keys(o).map((function(t){return"".concat(t,"=").concat(o[t])})).join("&")):"",l=s.match(/\d+/gi).join(""),m=e.pac_analytics.visitor.rockmanId,[4,y(e,t,a,l,i,c,m,u,d)];case 1:if(!1===(f=r.sent()).success)throw v="ALREADY SUBSCRIBED"===f.message?"AlreadySubscribed":"InvalidMSISDN",(p=new Error("".concat(v,":\n").concat(f.message))).type=v,console.error(p),p;return[2,f]}}))}))}var b={currentState:{type:"MSISDNEntry",result:a({keyword:"TEST OK",shortcode:"777"})}},I={currentState:{type:"MSISDNEntry",result:c({errorType:"InvalidMSISDN",error:"Invalid Mobile Number"})}},E={currentState:{type:"MSISDNEntry",result:u()}},j=function(t){var r=l(t);if(!r["mock-flow"])return E;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"),E}}(window),g=s("ussdFlow/submitMSISDNAction",(function(n,s){var o=n.window,i=n.msisdn,c=n.extraParams,u=s.getState,l=s.rejectWithValue;return t(void 0,void 0,void 0,(function(){var t,n,s,v,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:i}),[4,h(o,n,i,c)];case 2:return s=r.sent(),f.advancedInFlow("tallyman.v1-ussd","msisdn-submission-success",{msisdn:i}),c&&c.storeMsisdn&&"true"===c.storeMsisdn?[4,m(i).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:o,flow:"tallyman.v1-ussd",action:"sale",args:{msisdn:i}}),[2,{type:"MSISDNEntry",result:a(e({},s))}];case 5:switch(v=r.sent(),console.warn(v),p=void 0,v.type){case"AlreadySubscribed":p="AlreadySubscribed";break;case"InvalidMSISDN":p="InvalidMSISDN";break;default:p="UnknownError"}return f.recedeInFlow("tallyman.v1-ussd","msisdn-submission-failure",{msisdn:i,errorType:p||"UnknownError"}),[2,l({errorType:p,productUrl:v.productUrl})];case 6:return[2]}}))}))})),M=s("moRedirFlow/backToStartAction",(function(e,n){var s=n.dispatch,o=n.rejectWithValue;return t(void 0,void 0,void 0,(function(){return r(this,(function(t){try{f.recedeInFlow("tallyman.v1-ussd","ussd-state","requested to change phone number"),s(v())}catch(t){return console.warn(t),[2,o({errorType:"UnexpectedState"})]}return[2]}))}))})),D=o({name:"ussdFlow",initialState:j,reducers:{},extraReducers:function(t){t.addCase(g.pending,(function(t){t.currentState={type:"MSISDNEntry",result:i()}})).addCase(g.fulfilled,(function(t,r){t.currentState=r.payload})).addCase(g.rejected,(function(t,r){t.currentState={type:"MSISDNEntry",result:c(r.payload)}}))}}),k=D.reducer;D.actions;export{M as backToStartAction,g as submitMSISDNAction,p as useUssdFlowState,S as ussdFlowMatch,k as ussdFlowReducer};
2
2
  //# sourceMappingURL=ussdFlow.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ouisys-engine",
3
- "version": "5.0.85",
3
+ "version": "5.0.87",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "directories": "dist dev-tools",
@@ -1,2 +0,0 @@
1
- import{__awaiter as e,__generator as t,__assign as r}from"tslib";import{createAsyncThunk as o,createSlice as n}from"@reduxjs/toolkit";import{N as i,S as a,L as s,F as l}from"./RemoteDataState-lcf8PfJd.js";import{searchToObject as d}from"./searchToObject.js";import{getConfig as u}from"./getConfig.js";import{q as c,t as f}from"./tracker-DaaILhEr.js";import{f as v}from"./formatNumberToE164-Bd0VHMHJ.js";var p;function w(r){return e(this,void 0,void 0,(function(){var e,o,n,i,a;return t(this,(function(t){switch(t.label){case 0:if(e=c(window.location.href,"mock-ip")||process.env.mock_ip,console.log("mockip",e),r.ip||"undefined"==typeof window)return[3,5];t.label=1;case 1:return t.trys.push([1,3,,4]),o=window.location.host,n=window.DEV_BASE_URL_IP||o,[4,fetch("https://".concat(n,"/api/v1/ip").concat(e?"?mock-ip=".concat(e):"")).then((function(e){return e.json()}))];case 2:return i=t.sent(),r.ip=i.ip,r.ip_range_name=i.ip_range_name,[2,i.ip_range_name];case 3:return a=t.sent(),console.warn("IP Lookup failed",a),[2,""];case 4:return[3,6];case 5:return[2,r.ip_range_name||""];case 6:return[2]}}))}))}!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 m=function(r){var o=r.window,n=r.slug,i=r.country,a=r.msisdn,s=r.device,l=r.offer,d=r.rockmanId;return e(void 0,void 0,void 0,(function(){var e,r,u,c,f;return t(this,(function(t){switch(t.label){case 0:return e=o.languageCode||"",r=encodeURIComponent(o.location.href),u=o.DEV_BASE_URL||"",c=new URLSearchParams({action:"identify",slug:n,country:i,msisdn:a,device:s,offerId:l,rockman_id:d,page:r,language_code:e}).toString(),f="".concat(u,"/tallyman/v1/?").concat(c),[4,fetch(f)];case 1:return[2,t.sent().json()]}}))}))},g={mo:p.MO,pin:p.PIN,oneClick:p.ONE_CLICK,moRedir:p.MO_REDIR,click2sms:p.CLICK2SMS,ussd:p.USSD,tpayHe:p.TPAY_HE,creditCard:p.CREDIT_CARD},y={mo:"Msisdn to sms",pin:"Pin",oneClick:"3G click",moRedir:"Redirect",click2sms:"Click to sms",tpayHe:"Pin",ussd:"Msisdn to sms"},E=function(e){return y[e]};function S(o){var n,i,a,s,l=o.window,d=o.internationalMSISDN,u=o.configs;return e(this,void 0,void 0,(function(){var o,c,f,v,p,w,g,y,E,S,h=this;return t(this,(function(I){switch(I.label){case 0:if(!d)throw(S=new Error("Error in submitMSISDN() identify action")).type="SEInvalidMSISDN",S;return o=(null===(n=d.match(/\d+/gi))||void 0===n?void 0:n.join(""))||"",c=null===(i=null==u?void 0:u.strategyConfigs)||void 0===i?void 0:i.default,f=c.flowConfig,v=null===(a=null==u?void 0:u.strategyConfigs)||void 0===a?void 0:a.operators,p=function(){return e(h,void 0,void 0,(function(){var e,r,n,i,a;return t(this,(function(t){switch(t.label){case 0:return e=f.slug,r=f.country,n=f.device,i=l.pac_analytics.visitor.rockmanId,a=l.pac_analytics.visitor.offer,[4,m({window:l,slug:e,country:r,msisdn:o,device:n,offer:a,rockmanId:i})];case 1:return[2,t.sent()]}}))}))},[4,p()];case 1:if(w=I.sent(),g=v[w.operator]?v[w.operator]:null,y=!1===w.success&&"Operator could not be found for the given MSISDN"===w.message,E=!1===w.success&&-1!==(null===(s=w.message)||void 0===s?void 0:s.indexOf("HLR did not find the operator for given MSISDN")),y||E)throw(S=new Error("Error in submitMSISDN() identify action")).type="FlowDetectFailed",S.msisdn=o,S;if(null!==g)return[2,r({operator:w.operator,default:c},g)];if(null===g)return[2,r({operator:w.operator},c)];throw(S=new Error("Error in submitMSISDN() identify action")).type="SEInvalidMSISDN",S}}))}))}function h(e){var t,o,n=e.configs,i=e.operator,a=null===(t=null==n?void 0:n.strategyConfigs)||void 0===t?void 0:t.default,s=null===(o=null==n?void 0:n.strategyConfigs)||void 0===o?void 0:o.operators;return r({operator:null==i?void 0:i.toUpperCase(),default:a},s[null==i?void 0:i.toUpperCase()])}function I(r){var o=r.window,n=r.configs;return e(this,void 0,void 0,(function(){var e;return t(this,(function(t){switch(t.label){case 0:return[4,w(o.pac_analytics.visitor)];case 1:return e=t.sent(),[2,h({configs:n,operator:e&&e.includes("_")?e.toUpperCase():""})]}}))}))}var _=function(){return{type:p.IDENTIFY_FLOW_BY_MSISDN,result:i()}},C=o("strategy/submitMSISDNAction",(function(r,o){var n=r.window,a=r.msisdn,s=o.rejectWithValue;return e(void 0,void 0,void 0,(function(){var e,r,o,l,d,c,v,p,w;return t(this,(function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),e=u(),[4,S({window:n,internationalMSISDN:a,configs:e})];case 1:return r=t.sent(),o=null==r?void 0:r.flow,l=E(o),d=null===(w=null==e?void 0:e.strategyConfigs)||void 0===w?void 0:w.default,c=null==d?void 0:d.flow,g[o]?(f.sendOptInFlowEvent(l),[2,{type:g[o],result:i(),data:{config:r.flowConfig,operator:r.operator,msisdn:a}}]):[2,{type:g[c],result:i(),data:{config:null==d?void 0:d.flowConfig}}];case 2:switch(v=t.sent(),p=void 0,v.type){case"SEAlreadySubscribed":p="AlreadySubscribed";break;case"SEInvalidMSISDN":p="InvalidMSISDN";break;default:p="UnknownError"}return[2,s({errorType:p,error:v,productUrl:v.productUrl})];case 3:return[2]}}))}))})),D=function(){var e=function(e){var t,r=e.configs,o=null===(t=null==r?void 0:r.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}}},T=o("strategy/selectOperatorAction",(function(r,o){var n=r.operator,a=o.rejectWithValue;return e(void 0,void 0,void 0,(function(){var e,r,o,s;return t(this,(function(t){try{return e=u(),r=h({configs:e,operator:n}),o=r.flow,s=E(o),f.sendOptInFlowEvent(s),[2,{type:g[o],result:i(),data:{config:r.flowConfig,operator:r.operator}}]}catch(e){return"UnkownError",[2,a({errorType:"UnkownError",error:e.toString()})]}return[2]}))}))})),O=function(r){return e(void 0,void 0,void 0,(function(){var e,o,n,a,s,l,d,c;return t(this,(function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),e=u(),[4,I({window:window,configs:e})];case 1:return o=t.sent(),n=null===(c=null==e?void 0:e.strategyConfigs)||void 0===c?void 0:c.default,a=null==n?void 0:n.flow,o.flow||"all-flows-detect-operator-by-ip-or-ask-mobile-number"!==r&&"all-flows-ask-mobile-number"!==r?o.flow||"all-flows-detect-operator-by-ip-or-ask-operator"!==r?(s=o.flow,g[s]?(l=E(s),f.sendOptInFlowEvent(l),[2,{type:g[s],result:i(),data:{config:o.flowConfig,operator:o.operator}}]):[2,{type:g[a],result:i(),data:{config:null==n?void 0:n.flowConfig}}]):[2,D()]:[2,_()];case 2:return d=t.sent(),console.error("error",d),[3,3];case 3:return[2]}}))}))},R=function(e){return{type:p.PIN,result:i(),data:{config:e}}},N=function(r){var o=r.window;return e(void 0,void 0,void 0,(function(){var e,r,n,i,s;return t(this,(function(t){return e=u(),r=null==e?void 0:e.enableScriptTimer,n=e.strategyConfigs,i=null===(s=null==n?void 0:n.default)||void 0===s?void 0:s.flowConfig,[2,new Promise((function(e){var t,s,l,d;try{var c=null===(s=null===(t=null==o?void 0:o.pac_analytics)||void 0===t?void 0:t.visitor)||void 0===s?void 0:s.heMsisdn,w=null===(d=null===(l=null==o?void 0:o.pac_analytics)||void 0===l?void 0:l.visitor)||void 0===d?void 0:d.country;c&&w&&(c=v(c,w));var m,g=!1,y=!1;r&&(m=setTimeout((function(){var t;g||(y=!0,f.customEvent("Flow","recede-auto","msisdn-detection-failure",{errorType:"3 second timer expired"}),o.isPrelanderClicked=!0,e({type:p.PIN,result:a({}),data:{config:null===(t=null==n?void 0:n.default)||void 0===t?void 0:t.flowConfig}}))}),3e3));var E=function(t){var n=t.detail;if((null==n?void 0:n.msisdn)&&(c=v(n.msisdn,w),o.msisdn=c),r){if(!y){g=!0,clearTimeout(m),f.customEvent("Flow","advance-auto","msisdn-detected",{msisdn:c});var i=h({configs:u(),operator:null==n?void 0:n.operator_code});o.removeEventListener("he-success",E),o.removeEventListener("he-fail",S),e(b(i,c,null==n?void 0:n.operator_code,!0))}}else{f.customEvent("Flow","advance-auto","msisdn-detected",{msisdn:c,operator:null==n?void 0:n.operator_code});i=h({configs:u(),operator:null==n?void 0:n.operator_code});o.removeEventListener("he-success",E),o.removeEventListener("he-fail",S),e(b(i,c,null==n?void 0:n.operator_code,!0))}},S=function(){o.removeEventListener("he-success",E),o.removeEventListener("he-fail",S),e(R(i))};if(o.addEventListener("he-success",E),o.addEventListener("he-fail",S),!(null==o?void 0:o.heScriptUrl))return f.customEvent("Flow","recede-auto","msisdn-detection-failure",{errorType:"Error he script url not set"}),void o.dispatchEvent(new Event("he-fail"));var I=document.createElement("script");I.type="text/javascript",I.id="he-js-link",I.src="".concat(o.heScriptUrl),I.referrerPolicy="origin",document.head.appendChild(I),I.onerror=function(){console.error("Error loading Header Enrichment script."),f.customEvent("Flow","recede-auto","msisdn-detection-failure",{errorType:"Error loading Header Enrichment script."}),o.dispatchEvent(new Event("he-fail"))}}catch(t){console.error("Error in header enrichment:",t),e(R(i))}}))]}))}))},b=function(e,t,r,o){var n,a;void 0===t&&(t=null),void 0===r&&(r=null);var s=null===(n=u().strategyConfigs)||void 0===n?void 0:n.default,l=null==s?void 0:s.flow,d=e.flow||(null===(a=e.default)||void 0===a?void 0:a.flow),c=E(d);return f.sendOptInFlowEvent(c),e.flow?{type:g[d],result:i(),data:{config:e.flowConfig,operator:e.operator,isHeaderEnrichmentSuccess:o}}:{type:g[l],result:i(),data:{config:null==s?void 0:s.flowConfig,operator:r,msisdn:t,isHeaderEnrichmentSuccess:o}}},F={currentState:{type:p.IDENTIFY_STRATEGY,result:i(),data:void 0}},k=function(){var e=d(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:a({})};case"mo":return{type:p.MO,result:a({})};case"moredir":return{type:p.MO_REDIR,result:a({})};case"oneclick":return{type:p.ONE_CLICK,result:a({}),data:{subscription_url:e["subscription-url"]}};case"click2sms":return{type:p.CLICK2SMS,result:a({})};case"ussd":return{type:p.USSD,result:a({})};case"creditcard":return{type:p.CREDIT_CARD,result:a({})};default:throw new Error("(mockStrategyStateByUrlParam) Strategy Mock Flow not supported")}},L=o("strategy/identifyStrategy",(function(){return e(void 0,void 0,void 0,(function(){var r,o,n,s,l,c,w,m,y,S,I,C,T;return t(this,(function(R){switch(R.label){case 0:return r=u(),o=r.strategy,n=r.strategyConfigs,void 0!==(s=d(window))["mock-flow"]?[2,k()]:s["show-pin-entry"]&&"1"===s["show-pin-entry"]||s["show-thank-you"]&&"1"===s["show-thank-you"]?(l=h({configs:r,operator:s.operator}),[2,{type:p.PIN,result:a({}),data:{config:(null==l?void 0:l.flowConfig)||(null===(c=null==n?void 0:n.default)||void 0===c?void 0:c.flowConfig)}}]):o.includes("ask-operator")?[2,D()]:o.includes("detect-operator-by-ip")?[2,O(o)]:(null==o?void 0:o.includes("ask-mobile-number"))?[2,_()]:(null==o?void 0:o.includes("header-enrichment"))&&"header-enrichment-script"!==o?[4,e(void 0,void 0,void 0,(function(){var r,o,n,a,s,l,c,p,w,m,y,S;return t(this,(function(I){switch(I.label){case 0:r=u(),o=null==r?void 0:r.strategyConfigs.default,n=o.flow,I.label=1;case 1:return I.trys.push([1,5,,6]),a=d(window),(s=(null==a?void 0:a.msisdn)&&""!==(null==a?void 0:a.msisdn))&&f.customEvent("Flow","advance-auto","msisdn-detected",{msisdn:null==a?void 0:a.msisdn,operator:null==a?void 0:a.operator}),(null==a?void 0:a.operator)?"pin-header-enrichment"===r.strategy&&s?[2,{type:g[n],result:i(),data:{config:null==o?void 0:o.flowConfig,operator:(null==a?void 0:a.operator)||null,msisdn:(null==a?void 0:a.msisdn)||null,isHeaderEnrichmentSuccess:s}}]:(l=null,c=null,[4,h({operator:null==a?void 0:a.operator,configs:r})]):[2,{type:g[n],result:i(),data:{config:null==o?void 0:o.flowConfig}}];case 2:return p=I.sent(),w=p.flow||n,m=E(w),f.sendOptInFlowEvent(m),"oneClick"!==w?[3,4]:[4,e(void 0,void 0,void 0,(function(){var e,r,o,n,i,a,s,l,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=d(window)).success)throw new Error("Error in getRedirectUrl() identify-user action:\n".concat(e.message||"NotOn3g"));if(!(r=e.subscription_url||e.redirect_url))throw new Error("No URL provided for redirection");return o=window.atob(r),n=new URL(o),i=new URLSearchParams(n.search),a=i.get("msisdn")||e.msisdn,s=i.get("operator")||e.operator,a&&(a=v(a,null===(u=null===(l=null===window||void 0===window?void 0:window.pac_analytics)||void 0===l?void 0:l.visitor)||void 0===u?void 0:u.country)),[2,{msisdn:a||"",operator:s||"",subscription_url:e.subscription_url?o:void 0,redirect_url:e.redirect_url?o:void 0}]}))}))];case 3:y=I.sent(),l=(null==y?void 0:y.subscription_url)||null,c=(null==y?void 0:y.redirect_url)||null,I.label=4;case 4:return[2,{type:g[w],result:i(),data:{config:p.flowConfig,operator:p.operator,subscription_url:l||null,redirect_url:c||null,isHeaderEnrichmentSuccess:s}}];case 5:return S=I.sent(),console.error("error",S),[2,{type:g[n],result:i(),data:{config:null==o?void 0:o.flowConfig}}];case 6:return[2]}}))}))]:[3,2];case 1:return[2,R.sent()];case 2:switch(o){case"header-enrichment-script":return[2,N({window:window})];case"pin":return f.sendOptInFlowEvent("Pin"),[2,{type:p.PIN,result:a({}),data:{config:null===(w=null==n?void 0:n.default)||void 0===w?void 0:w.flowConfig}}];case"mo":return f.sendOptInFlowEvent("Msisdn to sms"),[2,{type:p.MO,result:a({}),data:{config:null===(m=null==n?void 0:n.default)||void 0===m?void 0:m.flowConfig}}];case"mo-redir":return[2,{type:p.MO_REDIR,result:a({}),data:{config:null===(y=null==n?void 0:n.default)||void 0===y?void 0:y.flowConfig}}];case"one-click":return f.sendOptInFlowEvent("Redirect"),[2,{type:p.ONE_CLICK,result:a({}),data:{config:null===(S=null==n?void 0:n.default)||void 0===S?void 0:S.flowConfig}}];case"click2sms":return f.sendOptInFlowEvent("Click to sms"),[2,{type:p.CLICK2SMS,result:a({}),data:{config:null===(I=null==n?void 0:n.default)||void 0===I?void 0:I.flowConfig}}];case"ussd":return f.sendOptInFlowEvent("USSD"),[2,{type:p.USSD,result:a({}),data:{config:null===(C=null==n?void 0:n.default)||void 0===C?void 0:C.flowConfig}}];case"credit-card":return f.sendOptInFlowEvent("Credit card"),[2,{type:p.CREDIT_CARD,result:a({}),data:{config:null===(T=null==n?void 0:n.default)||void 0===T?void 0:T.flowConfig}}];default:throw new Error("Strategy not supported")}}}))}))})),M=o("strategy/setStrategyExtraData",(function(r){var o=r.type,n=r.data;return e(void 0,void 0,void 0,(function(){return t(this,(function(e){return[2,{type:o,result:i(),data:n}]}))}))})),Y=n({name:"strategy",initialState:F,reducers:{},extraReducers:function(e){e.addCase(L.pending,(function(e){e.currentState={type:p.IDENTIFY_STRATEGY,result:s()}})).addCase(L.fulfilled,(function(e,t){e.currentState=t.payload})).addCase(L.rejected,(function(e,t){e.currentState={type:p.IDENTIFY_STRATEGY,result:l(t.error.message)}})).addCase(C.pending,(function(e){e.currentState={type:p.IDENTIFY_FLOW_BY_MSISDN,result:s()}})).addCase(C.fulfilled,(function(e,t){e.currentState=t.payload})).addCase(C.rejected,(function(e,t){e.currentState={type:p.IDENTIFY_FLOW_BY_MSISDN,result:l(t.payload)}})).addCase(M.fulfilled,(function(e,t){e.currentState=t.payload})).addCase(T.pending,(function(e){e.currentState={type:p.IDENTIFY_FLOW_BY_OPERATOR_SELECT,result:s()}})).addCase(T.fulfilled,(function(e,t){e.currentState=t.payload})).addCase(T.rejected,(function(e,t){e.currentState={type:p.IDENTIFY_FLOW_BY_OPERATOR_SELECT,result:l(t.payload)}}))}}).reducer;export{p as P,T as a,Y as b,M as c,L as i,C as s,w as t};
2
- //# sourceMappingURL=strategySlice-DuYLxEUR.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"strategySlice-DuYLxEUR.js","sources":["../src/sharedFlowTypes/StrategyTypes.ts","../src/ips/tryGetIPRangeName.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/injectHeaderEnrichmentScript.ts","../src/flows/strategy/strategySlice.ts","../src/flows/strategy/strategies/headerEnrichment.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable camelcase */\nimport * as RDS from '../common-types/RemoteDataState';\nimport { IStrategyNames } from '../common-types/Strategy';\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 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 'show-chain-link': '1' | '0';\n operator: string;\n msisdn?: string;\n 'subscription-url'?: string;\n show_custom_error?: string;\n product_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","/* eslint-disable no-param-reassign */\nimport { IVisitor } from '../common-types/IVisitor';\nimport queryString from '../pacman/queryString';\n\n// eslint-disable-next-line consistent-return\nexport default async function tryGetIPRangeName(visitor: IVisitor): Promise<string> {\n const mockip = queryString(window.location.href, 'mock-ip') || process.env.mock_ip;\n // eslint-disable-next-line no-console\n console.log('mockip', mockip);\n if (!visitor.ip && typeof window !== 'undefined') {\n try {\n const { host } = window.location;\n const newHost = window.DEV_BASE_URL_IP || host;\n const res = await fetch(`https://${newHost}/api/v1/ip${mockip ? `?mock-ip=${mockip}` : ''}`).then((x) =>\n x.json()\n );\n // return isIPInRange('37.200.146.28')\n visitor.ip = res.ip;\n visitor.ip_range_name = res.ip_range_name;\n return res.ip_range_name;\n } catch (ex) {\n console.warn('IP Lookup failed', ex);\n return '';\n }\n } else {\n return visitor.ip_range_name || '';\n }\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 || '';\n const locationHref = encodeURIComponent(window.location.href);\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 { IOptInFlowName } from '../../common-types/IOptInFlowName';\nimport { IStrategy, ISupportedFlows } from '../../common-types/Strategy';\nimport tryGetIPRangeName from '../../ips/tryGetIPRangeName';\nimport { HEResult, IConfig, IFlow, IIdentifyResult, PossibleTypes } from '../../sharedFlowTypes/StrategyTypes';\nimport { formatNumberToE164 } from '../../utilities/formatNumberToE164';\nimport { searchToObject } from '../../utilities/searchToObject';\nimport { identify } from './api';\n\nexport const 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 tpayHe: PossibleTypes.TPAY_HE,\n creditCard: PossibleTypes.CREDIT_CARD\n};\n\n// @ts-ignore\nexport const 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 tpayHe: 'Pin',\n ussd: 'Msisdn to sms'\n};\n\nexport const getTrackerEventName = (flowType: ISupportedFlows) => trackerEventMapping[flowType];\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.includes('_') ? 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 ISupportedFlows,\n PossibleTypes,\n StrategyCurrentState\n} from '../../../sharedFlowTypes/StrategyTypes';\nimport { determineFlowByMsidn, flowMapping, getTrackerEventName } 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 flowObj = await determineFlowByMsidn({ window, internationalMSISDN: msisdn, configs });\n const flowType = flowObj?.flow;\n const event = getTrackerEventName(flowType);\n const defaultConfig = configs?.strategyConfigs?.default;\n const defaultFlowType = defaultConfig?.flow as ISupportedFlows;\n\n if (!flowMapping[flowType]) {\n return {\n type: flowMapping[defaultFlowType],\n result: RDS.NothingYet(),\n data: {\n config: defaultConfig?.flowConfig\n }\n };\n }\n tracker.sendOptInFlowEvent(event);\n return {\n type: flowMapping[flowType],\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n operator: flowObj.operator,\n msisdn\n }\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","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, flowMapping, getOperators, getTrackerEventName } 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 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 const errorType = 'UnkownError';\n return rejectWithValue({\n errorType,\n error: ex.toString()\n });\n }\n }\n);\n","import * as RDS from '../../../common-types/RemoteDataState';\nimport { IStrategyNames, ISupportedFlows } from '../../../common-types/Strategy';\n\nimport { getConfig } from '../../../utilities/getConfig';\nimport { tracker } from '../../../utilities/tracker';\nimport { determineFlowByOperatorFromIp, flowMapping, getTrackerEventName } from '../main';\nimport { askMobileNumber } from './askMobileNumber';\nimport { askOperator } from './askOperator';\n\nconst detectOperatorByIp = async (strategy?: IStrategyNames) => {\n try {\n const configs = getConfig();\n\n const flowObj = await determineFlowByOperatorFromIp({\n window,\n configs\n });\n const defaultConfig = configs?.strategyConfigs?.default;\n const defaultFlowType = defaultConfig?.flow as ISupportedFlows;\n\n if (\n !flowObj.flow &&\n (strategy === 'all-flows-detect-operator-by-ip-or-ask-mobile-number' ||\n strategy === 'all-flows-ask-mobile-number')\n ) {\n return askMobileNumber();\n }\n\n if (!flowObj.flow && strategy === 'all-flows-detect-operator-by-ip-or-ask-operator') {\n return askOperator();\n }\n\n const flowType = flowObj.flow;\n if (!flowMapping[flowType]) {\n return {\n type: flowMapping[defaultFlowType],\n result: RDS.NothingYet(),\n data: {\n config: defaultConfig?.flowConfig\n }\n };\n }\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';\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, flowMapping, getTrackerEventName } 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 = (config: IConfig) => ({\n type: PossibleTypes.PIN,\n result: RDS.NothingYet(),\n data: {\n config\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 configs = getConfig();\n const enableScriptTimer = configs?.enableScriptTimer;\n const { strategyConfigs } = configs;\n const config = strategyConfigs?.default?.flowConfig;\n\n return new Promise((resolve) => {\n try {\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 let msisdnDetected = false;\n let timerExpired = false;\n let timerId: string | number | NodeJS.Timeout;\n\n if (enableScriptTimer) {\n timerId = setTimeout(() => {\n if (!msisdnDetected) {\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 resolve({\n type: PossibleTypes.PIN,\n result: RDS.Success({}),\n data: {\n config: strategyConfigs?.default?.flowConfig\n }\n });\n }\n }, 3000);\n }\n\n const onSuccess = (event: Event) => {\n const { detail } = event as IScriptHeaderEnrichmentSuccess;\n if (detail?.msisdn) {\n heMsisdn = formatNumberToE164(detail.msisdn, country);\n window.msisdn = heMsisdn;\n }\n\n if (enableScriptTimer) {\n if (!timerExpired) {\n msisdnDetected = true;\n clearTimeout(timerId);\n\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-detected', {\n msisdn: heMsisdn\n });\n const flowObj = determineFlowByOperator({\n configs: getConfig(),\n operator: detail?.operator_code\n });\n window.removeEventListener('he-success', onSuccess);\n window.removeEventListener('he-fail', onFail);\n resolve(headerEnrichmentScript(flowObj, heMsisdn, detail?.operator_code, true));\n }\n } else {\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-detected', {\n msisdn: heMsisdn,\n operator: detail?.operator_code\n });\n const flowObj = determineFlowByOperator({\n configs: getConfig(),\n operator: detail?.operator_code\n });\n window.removeEventListener('he-success', onSuccess);\n window.removeEventListener('he-fail', onFail);\n resolve(headerEnrichmentScript(flowObj, heMsisdn, detail?.operator_code, true));\n }\n };\n\n const onFail = () => {\n window.removeEventListener('he-success', onSuccess);\n window.removeEventListener('he-fail', onFail);\n resolve(createResponseObject(config));\n };\n\n window.addEventListener('he-success', onSuccess);\n window.addEventListener('he-fail', onFail);\n\n if (!window?.heScriptUrl) {\n tracker.customEvent('Flow', 'recede-auto', 'msisdn-detection-failure', {\n errorType: 'Error he script url not set'\n });\n window.dispatchEvent(new Event('he-fail'));\n return;\n }\n const script = document.createElement('script');\n script.type = 'text/javascript';\n script.id = 'he-js-link';\n script.src = `${window.heScriptUrl}`; // URL Comes from server\n script.referrerPolicy = 'origin';\n document.head.appendChild(script);\n\n script.onerror = () => {\n console.error('Error loading Header Enrichment script.');\n tracker.customEvent('Flow', 'recede-auto', 'msisdn-detection-failure', {\n errorType: 'Error loading Header Enrichment script.'\n });\n window.dispatchEvent(new Event('he-fail'));\n };\n } catch (err) {\n console.error('Error in header enrichment:', err);\n resolve(createResponseObject(config));\n }\n });\n};\n\nconst headerEnrichmentScript = (\n flowObj: IFlow,\n msisdn: string | null = null,\n operator: string | null = null,\n isHeaderEnrichmentSuccess: boolean\n) => {\n const defaultConfig = getConfig().strategyConfigs?.default;\n const defaultFlowType = defaultConfig?.flow;\n const flowType = flowObj.flow || flowObj.default?.flow;\n const event = getTrackerEventName(flowType);\n\n tracker.sendOptInFlowEvent(event);\n\n if (!flowObj.flow) {\n return {\n type: flowMapping[defaultFlowType],\n result: RDS.NothingYet(),\n data: {\n config: defaultConfig?.flowConfig,\n operator,\n msisdn,\n isHeaderEnrichmentSuccess\n }\n };\n }\n\n return {\n type: flowMapping[flowType],\n result: RDS.NothingYet(),\n data: {\n config: flowObj.flowConfig,\n operator: flowObj.operator,\n isHeaderEnrichmentSuccess\n }\n };\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(strategy);\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","import * as RDS from '../../../common-types/RemoteDataState';\n\nimport { ISupportedFlows } from '../../../sharedFlowTypes/StrategyTypes';\nimport { getConfig } from '../../../utilities/getConfig';\nimport { searchToObject } from '../../../utilities/searchToObject';\nimport { tracker } from '../../../utilities/tracker';\nimport { determineFlowByOperator, flowMapping, getHeaderEnrichmentResult, getTrackerEventName } from '../main';\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 const isHeaderEnrichmentSuccess = search?.msisdn && search?.msisdn !== '';\n if (isHeaderEnrichmentSuccess) {\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-detected', {\n msisdn: search?.msisdn,\n operator: search?.operator\n });\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 if (configs.strategy === 'pin-header-enrichment' && isHeaderEnrichmentSuccess) {\n return {\n type: flowMapping[defaultFlowType],\n result: RDS.NothingYet(),\n data: {\n config: defaultConfig?.flowConfig,\n operator: search?.operator || null,\n msisdn: search?.msisdn || null,\n isHeaderEnrichmentSuccess\n }\n };\n }\n\n let subscription_url = null;\n let redirect_url = null;\n const flowObj = await determineFlowByOperator({\n operator: search?.operator,\n configs\n });\n const flowType = flowObj.flow || defaultFlowType;\n const event = getTrackerEventName(flowType);\n\n tracker.sendOptInFlowEvent(event);\n\n if (flowType === 'oneClick') {\n const heResult = await getHeaderEnrichmentResult();\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"],"names":["PossibleTypes","tryGetIPRangeName","visitor","mockip","queryString","window","location","href","process","env","mock_ip","console","log","ip","host","newHost","DEV_BASE_URL_IP","fetch","concat","then","x","json","res","_a","sent","ip_range_name","warn","ex_1","identify","slug","country","msisdn","device","offer","rockmanId","languageCode","locationHref","encodeURIComponent","DEV_BASE_URL","urlParams","URLSearchParams","action","offerId","rockman_id","page","language_code","toString","url","_b","flowMapping","mo","MO","pin","PIN","oneClick","ONE_CLICK","moRedir","MO_REDIR","click2sms","CLICK2SMS","ussd","USSD","tpayHe","TPAY_HE","creditCard","CREDIT_CARD","trackerEventMapping","getTrackerEventName","flowType","determineFlowByMsidn","internationalMSISDN","configs","submissionError","Error","type","match","join","defaultFlowConfig","_c","strategyConfigs","default","config","flowConfig","operatorsConfig","_d","operators","indentifyFlow","__awaiter","_this","pac_analytics","theResult","_f","flow","operator","cannotDetect","success","message","hlrError","_e","indexOf","__assign","determineFlowByOperator","toUpperCase","determineFlowByOperatorFromIp","includes","askMobileNumber","IDENTIFY_FLOW_BY_MSISDN","result","RDS.NothingYet","submitMSISDNAction","createAsyncThunk","rejectWithValue","getConfig","flowObj","event_1","defaultConfig","defaultFlowType","tracker","sendOptInFlowEvent","data","errorType","error","productUrl","askOperator","Object","keys","getOperators","IDENTIFY_FLOW_BY_OPERATOR_SELECT","selectOperatorAction","ex","detectOperatorByIp","strategy","createResponseObject","injectHeaderEnrichmentScript","enableScriptTimer","Promise","resolve","heMsisdn_1","heMsisdn","country_1","formatNumberToE164","timerId_1","msisdnDetected_1","timerExpired_1","setTimeout","customEvent","isPrelanderClicked","RDS.Success","onSuccess_1","event","detail","clearTimeout","operator_code","removeEventListener","onFail_1","headerEnrichmentScript","addEventListener","heScriptUrl","dispatchEvent","Event","script","document","createElement","id","src","referrerPolicy","head","appendChild","onerror","err","isHeaderEnrichmentSuccess","initialState","currentState","IDENTIFY_STRATEGY","undefined","mockStrategyStateByUrlParam","search","searchToObject","subscription_url","identifyStrategy","redirect_url","searchObj","decodedUrl","atob","newUrl","URL","get","heResult","_j","_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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"}