ouisys-engine 5.1.9 → 5.1.10
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/checkSubscriptionHander.js +1 -1
- package/dist/click2smsFlow.js +1 -1
- package/dist/handleWaterfallRedirect-DztqrthA.js +2 -0
- package/dist/handleWaterfallRedirect-DztqrthA.js.map +1 -0
- package/dist/moFlow.js +1 -1
- package/dist/moFlow.js.map +1 -1
- package/dist/pinFlow.js +1 -1
- package/dist/pinFlow.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{__awaiter as r,__generator as t,__assign as i}from"tslib";import{l as o}from"./helpers-CBmogWIZ.js";import{searchToObject as c}from"./searchToObject.js";import{t as e}from"./tracker-DaaILhEr.js";import{u as n}from"./updateUrlWithParams-C6-BX4TY.js";import"pacman-client";import"uuid";function a(a){var s,u,l,
|
|
1
|
+
import{__awaiter as r,__generator as t,__assign as i}from"tslib";import{l as o}from"./helpers-CBmogWIZ.js";import{searchToObject as c}from"./searchToObject.js";import{t as e}from"./tracker-DaaILhEr.js";import{u as n}from"./updateUrlWithParams-C6-BX4TY.js";import"pacman-client";import"uuid";function a(a){var s,u,d,l,v=a.window,m=a.flow,h=a.action,p=a.args,f=a.extraParams,_=void 0===f?{}:f,w=a.isRedirectToChainAndProduct,k=void 0!==w&&w,b=a.isShowThankYou,y=void 0!==b&&b;return r(this,void 0,void 0,(function(){var a,f,w,b,E,j,R,S,U,g,P;return t(this,(function(T){switch(T.label){case 0:return a=v.pac_analytics.visitor.rockmanId,m&&h&&e.advancedInFlow(m,h,i({},p)),f=c(v),(w="check-subscription-success-state"===f["current-state"])&&(console.log("isMock is true"),(b=f["show-chain-link"])&&"1"===b&&(v.pac_analytics.visitor.chainRedirectUrl="/chain-url")),E=function(){return w?Promise.resolve({success:!0,rockman_id:a,product_url:"/product",msisdn:"000"}):function(i){var o=i.window,c=i.rockmanId;return r(void 0,void 0,void 0,(function(){var r,i,e;return t(this,(function(t){switch(t.label){case 0:return r=o.DEV_BASE_URL||"",i=new URLSearchParams({action:"check-subscription",rockman_id:c}).toString(),e="".concat(r,"/tallyman/v1/?").concat(i),[4,fetch(e)];case 1:return[2,t.sent().json()]}}))}))}({window:v,rockmanId:a})},[4,o(E,60,(function(r){return r.success}),0)];case 1:if(!0===(j=T.sent()).success){if(R=j.product_url,y)return S=n(v.location.href,{rockman_id:a,ui_show_tq:"1","show-thank-you":1,product_url:R}),setTimeout((function(){e.customEvent(m,"show-thank-you","thank-you-page",{thankYou:S}),v.location.replace(S)}),3e3),[2,S];if(null===(u=null===(s=null==v?void 0:v.pac_analytics)||void 0===s?void 0:s.visitor)||void 0===u?void 0:u.chainRedirectUrl){if(U=null===(l=null===(d=null==v?void 0:v.pac_analytics)||void 0===d?void 0:d.visitor)||void 0===l?void 0:l.chainRedirectUrl,g=n(U,_),k)return e.customEvent(m,"redirect","chain-redirect",{redirect_url:g}),v.open(g,"_blank"),R&&""!==R&&setTimeout((function(){e.customEvent(m,"redirect","product-redirect",{redirect_url:R}),v.location.replace(R)}),3e3),[2];e.customEvent(m,"redirect","chain-redirect",{redirect_url:g}),v.location.replace(g)}else R&&""!==R&&(e.customEvent(m,"redirect","product-redirect",{redirect_url:R}),v.location.replace(R));return[2,R||null]}throw(P=new Error("".concat("SubscriptionFailed",":\n").concat(j.message))).type="SubscriptionFailed",P}}))}))}export{a as checkSubscriptionHander};
|
|
2
2
|
//# sourceMappingURL=checkSubscriptionHander.js.map
|
package/dist/click2smsFlow.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{__awaiter as t,__generator as r,__assign as o}from"tslib";import{createAsyncThunk as e,createSlice as n}from"@reduxjs/toolkit";import{S as i,L as a,F as
|
|
1
|
+
import{__awaiter as t,__generator as r,__assign as o}from"tslib";import{createAsyncThunk as e,createSlice as n}from"@reduxjs/toolkit";import{S as i,L as a,F as c,N as u}from"./RemoteDataState-lcf8PfJd.js";import{t as s}from"./tracker-DaaILhEr.js";import{c as l}from"./cleanSearchParams-Dl7ZDlew.js";import"pacman-client";import"uuid";var d=function(e){var n=e.window,i=e.country,a=e.slug,c=e.offer,u=e.rockmanId,s=e.keyword,d=e.operator,v=e.search;return t(void 0,void 0,void 0,(function(){var t,e,f,p,y,m,h;return r(this,(function(r){return v=l(v),t=new URLSearchParams(o(o({action:"oc2sms",country:i,slug:a,offerId:c.toString(),page:encodeURIComponent(n.location.href),device:"smart",rockman_id:u,ip_address:(null===(y=null===(p=null==n?void 0:n.pac_analytics)||void 0===p?void 0:p.visitor)||void 0===y?void 0:y.ip)||"",ip_range_operator:(null===(h=null===(m=null==n?void 0:n.pac_analytics)||void 0===m?void 0:m.visitor)||void 0===h?void 0:h.ipRangeOperator)||""},s&&{keyword:s}),d&&{operator:d})).toString(),e=n.DEV_BASE_URL||"",f="".concat(e,"/tallyman/v1/?").concat(t).concat(v?"&".concat(v):""),[2,fetch(f).then((function(t){return t.json()}))]}))}))};function v(e,n,i,a,c){return t(this,void 0,void 0,(function(){var t,c,u,s,l,v,f,p,y;return r(this,(function(r){switch(r.label){case 0:return n&&"keywordAndShortCode"===n.tag?(t=n.keyword,c=n.shortcode,[2,o({type:"SingleSubmissionResult"},{keyword:t,shortcode:c})]):(u=e.pac_analytics.visitor.offer,s=o({offer:e.pac_analytics.visitor.offer},n),l=s.country,v=s.slug,f=e.pac_analytics.visitor.rockmanId,p=e.location.search.substr(1)||"",[4,d({window:e,country:l,slug:v,offer:u,rockmanId:f,keyword:a,operator:i,search:p})]);case 1:if((y=r.sent()).success)return[2,o({type:"SingleSubmissionResult"},{keyword:"".concat(a||y.displayKeyword).concat(y.uid?" ".concat(y.uid):""),shortcode:y.shortcode})];throw y.message}}))}))}function f(e,n,i,a,c){return t(this,void 0,void 0,(function(){var c,u,s,l=this;return r(this,(function(d){switch(d.label){case 0:return c=Promise.all(i.map((function(i){return t(l,void 0,void 0,(function(){var t,c;return r(this,(function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,v(e,n,i,a)];case 1:return t=r.sent(),[2,(s=o(o({},t),{operator:i}),{type:"right",value:s})];case 2:return c=r.sent(),[2,(u=c,{type:"left",value:u})];case 3:return[2]}var u,s}))}))}))),[4,Promise.resolve(c)];case 1:if((u=d.sent()).every((function(t){return"left"===t.type})))throw u[0].value;return s=[],u.map((function(t){if("right"===t.type){var r=t.value;s.push({keyword:null==r?void 0:r.keyword,shortcode:null==r?void 0:r.shortcode,operator:null==r?void 0:r.operator})}return t})),[2,{type:"MultiOperatorSubmissionResult",data:s}]}}))}))}var p=function(e,n,i,a){return t(void 0,void 0,void 0,(function(){return r(this,(function(t){return n&&"keywordAndShortCode"===n.tag?[2,o({type:"SingleSubmissionResult"},{keyword:n.keyword,shortcode:n.shortcode})]:n&&"keyword"===n.tag?[2,y(e,n,i)]:[2,y(e,n,null)]}))}))};function y(e,n,i,a){return t(this,void 0,void 0,(function(){var t,a;return r(this,(function(r){return!0===(t=o({offer:e.pac_analytics.visitor.offer},n)).automaticallySubmitAllOperators&&t.operators&&t.operators.length>0?[2,f(e,n,t.operators,i)]:(a=n.operators&&n.operators.length>0?n.operators[0]:null,[2,v(e,n,a,i)])}))}))}var m={currentState:{type:"LOAD_OC2SMS",result:u()}},h=e("click2Flow/loadOc2smsAction",(function(e,n){var a=e.window,c=n.getState,u=n.rejectWithValue;return t(void 0,void 0,void 0,(function(){var t,e,n,l,d,v,f,y,m;return r(this,(function(r){switch(r.label){case 0:if(t=c(),!(null===(f=null===(v=null===(d=null==t?void 0:t.strategy)||void 0===d?void 0:d.currentState)||void 0===v?void 0:v.data)||void 0===f?void 0:f.config))return[2,u("UnexpectedState")];e=null===(m=null===(y=t.strategy.currentState)||void 0===y?void 0:y.data)||void 0===m?void 0:m.config,r.label=1;case 1:return r.trys.push([1,3,,4]),"keywordAndShortCode"===e.tag?[2,{type:"LOAD_OC2SMS",result:i(o({type:"SingleSubmissionResult"},e))}]:(s.customEvent("Flow","advance-auto","load-click2sms"),[4,p(a,e)]);case 2:return n=r.sent(),s.customEvent("Flow","advance-auto","loaded-click2sms",n),[2,{type:"LOAD_OC2SMS",result:i(n)}];case 3:return l=r.sent(),console.warn(l),s.customEvent("Flow","advance-auto","load-click2sms-failure",l.toString()),[2,u(l.toString())];case 4:return[2]}}))}))})),S=n({name:"click2smsFlow",initialState:m,reducers:{},extraReducers:function(t){t.addCase(h.pending,(function(t){t.currentState={type:"LOAD_OC2SMS",result:a()}})).addCase(h.fulfilled,(function(t,r){t.currentState=r.payload})).addCase(h.rejected,(function(t,r){t.currentState={type:"LOAD_OC2SMS",result:c(r.payload)}}))}}),w=S.reducer;S.actions;var g=function(t){return t((function(t){return t.click2smsFlow.currentState}))},k=function(t){var r,o=t((function(t){return t.click2smsFlow.currentState}));return null===(r=null==o?void 0:o.result)||void 0===r?void 0:r.data};function _(t){var r=t.load;return function(t){return t.type,r(t.result)}}export{_ as click2smsFlowMatch,w as click2smsFlowReducer,h as loadOc2smsAction,g as useClick2smsFlowState,k as useKeyWordShortCode};
|
|
2
2
|
//# sourceMappingURL=click2smsFlow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleWaterfallRedirect-DztqrthA.js","sources":["../src/utilities/handleWaterfallRedirect.ts"],"sourcesContent":["const isUrl = (value: string): boolean => {\n try {\n // eslint-disable-next-line no-new\n new URL(value);\n return true;\n } catch {\n return false;\n }\n};\n\nexport const handleWaterfallRedirect = (url: string) => {\n if (isUrl(url)) {\n window.location.href = url;\n } else {\n window.location.href = `/api/v1/resolve-wfl?token=${url}`;\n }\n};\n"],"names":["handleWaterfallRedirect","url","value","URL","_a","isUrl","window","location","href","concat"],"mappings":"AAAA,IAUaA,EAA0B,SAACC,IAV1B,SAACC,GACb,IAGE,OADA,IAAIC,IAAID,IACD,CACR,CAAC,MAAME,GACN,OAAO,CACR,CACH,CAGMC,CAAMJ,GAGRK,OAAOC,SAASC,KAAO,6BAA6BC,OAAAR,GAFpDK,OAAOC,SAASC,KAAOP,CAI3B"}
|
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{n as
|
|
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{h as d}from"./handleWaterfallRedirect-DztqrthA.js";import{n as l,r as m}from"./normaliseErrorCode-CVpyJZ6_.js";import{searchToObject as v}from"./searchToObject.js";import{s as f}from"./storeMsisdn-Cjq8_qYH.js";import{t as p}from"./tracker-DaaILhEr.js";import{c as y}from"./cleanSearchParams-Dl7ZDlew.js";import{i as S}from"./strategySlice-BMNt18ck.js";import"pacman-client";import"uuid";import"./getConfig.js";import"./formatNumberToE164-DaAFvpKD.js";import"./api-geirVksI.js";var _=function(t){return t((function(t){return t.moFlow.currentState}))};function h(t){var r=t.msisdnEntry;return function(t){return t.type,r(t.result)}}var w=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,f,p,S,_;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=y(m),v={action:"trigger-message",slug:a,country:i,msisdn:s,device:c,offerId:u,rockman_id:d,page:encodeURIComponent(null===(_=null==o?void 0:o.location)||void 0===_?void 0:_.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||""},f=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("&"),p=o.DEV_BASE_URL||"",S="".concat(p,"/tallyman/v1/?").concat(f).concat(m?"&".concat(m):"","&").concat(l),o.MOCK_TRIGGER_MESSAGE_RESPONSE?[2,o.MOCK_TRIGGER_MESSAGE_RESPONSE]:[2,fetch(S).then((function(t){return t.json()}))]}}))}))};function j(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,E(e,t,a,i)]}))}))}function E(e,o,a,i){var s,c;return t(this,void 0,void 0,(function(){var t,u,d,m,v,f,p,y,S,_,h,j;return r(this,(function(r){switch(r.label){case 0:return t=o.slug,u=o.country,d=o.device,m=o.offer,v=e.location.search.substr(1)||"",f=i?"&".concat(Object.keys(i).map((function(t){return"".concat(t,"=").concat(i[t])})).join("&")):"",p=(null===(s=a.match(/\d+/gi))||void 0===s?void 0:s.join(""))||"",y=e.pac_analytics.visitor.rockmanId,[4,w({window:e,slug:t,country:u,msisdn:p,device:d,offer:m,rockmanId:y,search:v,extraParamsQs:f})];case 1:if(!1===(S=r.sent()).success)throw _="ALREADY SUBSCRIBED"===S.message?"AlreadySubscribed":"InvalidMsisdn",h=S.error_code?l(S.error_code):_,j=new Error("".concat(h,":\n").concat(S.message)),Object.assign(j,{type:h,productUrl:null!==(c=S.product_url)&&void 0!==c?c:""}),j;return[2,n(n({},S),{keyword:S.displayKeyword})]}}))}))}var g={currentState:{type:"MSISDNEntry",result:i({keyword:"TEST OK",shortcode:"777"})}},I={currentState:{type:"MSISDNEntry",result:c({errorType:"InvalidMSISDN",error:"Invalid Mobile Number"})}},b={currentState:{type:"MSISDNEntry",result:u()}},M=function(t){var r=v(t);if(!r["mock-flow"])return b;switch(r["current-state"]){case"msisdn-entry-failure-state":return I;case"msisdn-entry-success-state":return g;default:return console.error("Mock Flow not supported"),b}}(window),R=o("moFlow/submitMSISDNAction",(function(e,o){var a=e.window,s=e.msisdn,c=e.extraParams,u=o.getState,l=o.rejectWithValue;return t(void 0,void 0,void 0,(function(){var t,e,o,v,y,S,_,h,w,E,g,I,b,M;return r(this,(function(r){switch(r.label){case 0:if(t=u(),!(null===(h=null===(_=null===(S=null==t?void 0:t.strategy)||void 0===S?void 0:S.currentState)||void 0===_?void 0:_.data)||void 0===h?void 0:h.config))return[2,l({errorType:"UnexpectedState"})];e=t.strategy.currentState.data.config,r.label=1;case 1:return r.trys.push([1,5,,6]),p.advancedInFlow("tallyman.v1-mo","msisdn-submitted",{msisdn:s}),[4,j(a,e,s,c)];case 2:return o=r.sent(),p.advancedInFlow("tallyman.v1-mo","msisdn-submission-success",{msisdn:s}),c&&c.storeMsisdn&&"true"===c.storeMsisdn?[4,f(s).then((function(t){t&&t.data&&t.data.success?p.customEvent("Flow","advance-auto","msisdn-stored-success"):p.customEvent("Flow","advance-auto","msisdn-stored-failed")})).catch((function(t){p.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:return v=r.sent(),console.warn(v),y=v.type,p.recedeInFlow("tallyman.v1-mo","msisdn-submission-failure",{msisdn:s,errorType:y}),m.includes(y)&&(null===(E=null===(w=null==a?void 0:a.pac_analytics)||void 0===w?void 0:w.visitor)||void 0===E?void 0:E.waterfallRedirectUrl)&&(p.customEvent("tallyman.v1-mo","redirect","waterfall-redirect",{redirect_url:null===(I=null===(g=null==a?void 0:a.pac_analytics)||void 0===g?void 0:g.visitor)||void 0===I?void 0:I.waterfallRedirectUrl,errorType:y}),d(null===(M=null===(b=null==a?void 0:a.pac_analytics)||void 0===b?void 0:b.visitor)||void 0===M?void 0:M.waterfallRedirectUrl)),[2,l({errorType:y,productUrl:v.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{p.recedeInFlow("tallyman.v1-mo","mo-state","requested to change phone number"),o(S())}catch(t){return console.warn(t),[2,a({errorType:"UnexpectedState"})]}return[2]}))}))})),T=a({name:"moFlow",initialState:M,reducers:{},extraReducers:function(t){t.addCase(R.pending,(function(t){t.currentState={type:"MSISDNEntry",result:s()}})).addCase(R.fulfilled,(function(t,r){t.currentState=r.payload})).addCase(R.rejected,(function(t,r){t.currentState={type:"MSISDNEntry",result:c(r.payload)}}))}}),F=T.reducer;T.actions;export{k as backToStartAction,h as moFlowMatch,F as moFlowReducer,R as submitMSISDNAction,_ as useMoFlowState};
|
|
2
2
|
//# sourceMappingURL=moFlow.js.map
|
package/dist/moFlow.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"moFlow.js","sources":["../src/flows/moFlow/hooks/useMoFlowState.ts","../src/flows/moFlow/match.ts","../src/flows/moFlow/api.ts","../src/flows/moFlow/main.ts","../src/flows/moFlow/moFlowSlice.ts"],"sourcesContent":["import { useSelector as IuseSelector } from 'react-redux';\nimport { RootState } from '../../../sharedFlowTypes/StrategyTypes';\n\nexport const useMoFlowState = (useSelector: typeof IuseSelector) => {\n const currentState = useSelector((state: RootState) => state.moFlow.currentState);\n return currentState;\n};\n","import * as RDS from '../../common-types/RemoteDataState';\nimport { MoFlowCurrentState, MSISDNEntryFailure, MSISDNEntrySuccess } from '../../sharedFlowTypes/MoTypes';\n\nfunction moFlowMatch<R>({\n msisdnEntry\n}: {\n msisdnEntry: (rds: RDS.RemoteDataState<MSISDNEntryFailure, MSISDNEntrySuccess>) => R;\n}): (state: MoFlowCurrentState) => R {\n return (state) => {\n switch (state.type) {\n case 'MSISDNEntry':\n return msisdnEntry(state.result);\n default:\n // TODO - this should be an error or something\n return msisdnEntry(state.result);\n }\n };\n}\n\nexport { moFlowMatch };\n","import { IGoogleReCaptcha, IMSISDNSubmissionResult } from '../../sharedFlowTypes/MoTypes';\nimport { cleanSearchParams } from '../../utilities/cleanSearchParams';\n\nconst getGoogleCaptcha = async (\n window: Window,\n country: string,\n slug: string,\n device: string,\n domain: string\n): Promise<IGoogleReCaptcha> => {\n const host = (window as Window).DEV_BASE_URL || '';\n\n return fetch(\n `${host}/tallyman/helper/?action=google-captcha-v3-config&country=${country}&slug=${slug}&device=${device}&domain=${domain}`\n ).then((x) => x.json());\n};\n\nconst triggerMessage = async ({\n window,\n slug,\n country,\n msisdn,\n device,\n offer,\n rockmanId,\n extraParamsQs,\n search\n}: {\n window: Window;\n slug: string;\n country: string;\n msisdn: string;\n device: string;\n offer: string;\n rockmanId: string;\n search: string;\n extraParamsQs: string;\n}): Promise<IMSISDNSubmissionResult> => {\n // introduced https://www.notion.so/sammedia/CH-Agency-Bodkinco-Integration-ea1600ad175f451a9d351b6763ad7992\n const partnerAjaxResopnse: {\n form_action: string;\n } = window.api_ajax_url ? await fetch(window.api_ajax_url).then((x) => x.json()) : null;\n\n // Remove conflicting params from url\n search = cleanSearchParams(search);\n const params = {\n action: 'trigger-message',\n slug,\n country,\n msisdn,\n device,\n offerId: offer,\n rockman_id: rockmanId,\n page: encodeURIComponent(window?.location?.href),\n sam_g_token: window.reCaptchaToken || '',\n language_code: window.languageCode || '',\n partner_form_action: partnerAjaxResopnse?.form_action ? encodeURIComponent(partnerAjaxResopnse?.form_action) : '',\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 const queryString = Object.entries(params)\n .filter(([_, value]) => value)\n .map(([key, value]) => `${key}=${value}`)\n .join('&');\n\n const host = (window as Window).DEV_BASE_URL || '';\n const url = `${host}/tallyman/v1/?${queryString}${search ? `&${search}` : ''}&${extraParamsQs}`;\n\n if (window.MOCK_TRIGGER_MESSAGE_RESPONSE) {\n return window.MOCK_TRIGGER_MESSAGE_RESPONSE;\n }\n return fetch(url).then((x) => x.json());\n};\n\nexport { getGoogleCaptcha, triggerMessage };\n","import { ICheckSubscriptionResult } from '../../common-types/ICheckSubscriptionResult';\nimport { IError } from '../../common-types/IError';\nimport { IConfig } from '../../common-types/Strategy';\nimport { checkSubscriptionByRockmanIdOnly } from '../../sharedApi/checkSubscriptionByRockmanIdOnly';\nimport { IGoogleReCaptcha, IKeywordShortcode, IMSISDNSubmissionResult } from '../../sharedFlowTypes/MoTypes';\nimport { loop } from '../../utilities/helpers';\nimport loadScriptSrc from '../../utilities/loadScriptSrc';\nimport { normaliseErrorCode } from '../../utilities/normaliseErrorCode';\nimport { getGoogleCaptcha, triggerMessage } from './api';\n\nexport default async function submitMSISDN(\n window: Window,\n maybeConfig: IConfig,\n internationalMSISDN: string,\n extraParams?: { [key: string]: string }\n): Promise<IKeywordShortcode> {\n const config: any = { ...(maybeConfig || {}), offer: window.pac_analytics?.visitor?.offer };\n return submitMSISDNWithConfig(window, config, internationalMSISDN, extraParams);\n}\n\nexport const getGoogleReCaptchaConfig = async ({\n window,\n slug,\n country,\n device\n}: IConfig & { window: Window }): Promise<IGoogleReCaptcha> => {\n const domain = window.location.hostname;\n const result: IGoogleReCaptcha = await getGoogleCaptcha(window, country, slug, device, domain);\n if (result.success === true) {\n const srcUrl = `https://www.google.com/recaptcha/api.js?render=${result.site_key}`;\n loadScriptSrc({ url: srcUrl, key: result.site_key, isRecaptcha: true });\n }\n return result;\n};\n\nexport async function submitMSISDNWithConfig(\n window: Window,\n config: IConfig,\n internationalMSISDN: string,\n extraParams?: { [key: string]: string }\n): Promise<IKeywordShortcode> {\n const { slug, country, device, offer } = config;\n const search = window.location.search.substr(1) || '';\n const extraParamsQs = !extraParams\n ? ''\n : `&${Object.keys(extraParams)\n .map((k) => `${k}=${extraParams[k]}`)\n .join('&')}`;\n const msisdn = internationalMSISDN.match(/\\d+/gi)?.join('') || '';\n const { rockmanId } = window.pac_analytics.visitor;\n\n const result: IMSISDNSubmissionResult = await triggerMessage({\n window,\n slug,\n country,\n msisdn,\n device,\n offer,\n rockmanId,\n search,\n extraParamsQs\n });\n\n if (result.success === false) {\n // pick a default based on message, then override with error_code if available\n const defaultType = result.message === 'ALREADY SUBSCRIBED' ? 'AlreadySubscribed' : 'InvalidMsisdn';\n\n const type = result.error_code ? normaliseErrorCode(result.error_code) : defaultType;\n\n // build, augment, log and throw\n const error = new Error(`${type}:\\n${result.message}`) as IError & {\n type: string;\n productUrl: string;\n };\n\n Object.assign(error, {\n type,\n productUrl: result.product_url ?? ''\n });\n\n throw error;\n } else {\n return { ...result, keyword: result.displayKeyword }; // based on discussion with Chanaka to avoid confusion in set up on bupper. Click2sms and mo will use display keyword\n }\n}\n\nexport async function moCheckSubscription(window: Window): Promise<string> {\n const { rockmanId } = window.pac_analytics.visitor;\n const check: () => Promise<ICheckSubscriptionResult> = () => checkSubscriptionByRockmanIdOnly({ window, rockmanId });\n\n const checkResult: ICheckSubscriptionResult = await loop(check, 60, (r) => r.success, 0);\n\n if (checkResult.success === true && checkResult.product_url && checkResult.product_url !== '') {\n window.location.href = checkResult.product_url;\n return checkResult.product_url;\n }\n const error = new Error(`${'SubscriptionFailed'}:\\n${checkResult.message}`) as IError & { type: string };\n error.type = 'SubscriptionFailed';\n throw error;\n}\n\n// export const formatSMSLink = (keywordAndShortcode: IKeywordShortcode) =>\n// !!window.pac_analytics.visitor['x-requested-with'] &&\n// window.pac_analytics.visitor['x-requested-with'] !== null &&\n// window.pac_analytics.visitor['x-requested-with'].indexOf('com.facebook') !== -1\n// ? `sms://${keywordAndShortcode.shortcode}?body=${keywordAndShortcode.keyword}`\n// : typeof navigator !== 'undefined' && (/iPhone/i.test(navigator.userAgent) || /Mac OS/i.test(navigator.userAgent))\n// ? `sms:${keywordAndShortcode.shortcode}&body=${keywordAndShortcode.keyword}`\n// : `sms:${keywordAndShortcode.shortcode}?body=${keywordAndShortcode.keyword}`;\n","import { createAsyncThunk, createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { IHash } from '../../common-types/IHash';\nimport * as RDS from '../../common-types/RemoteDataState';\nimport {\n MSISDNEntryErrorTypes,\n MSISDNEntryFailure,\n MSISDNEntryState,\n MSISDNEntrySuccess\n} from '../../sharedFlowTypes/MoTypes';\nimport { IMockFlowParams, RootState } from '../../sharedFlowTypes/StrategyTypes';\nimport { redirectErrorTypes } from '../../utilities/normaliseErrorCode';\nimport { searchToObject } from '../../utilities/searchToObject';\nimport { storeMsisdn } from '../../utilities/storeMsisdn';\nimport { tracker } from '../../utilities/tracker';\nimport { identifyStrategy } from '../strategy';\nimport submitMSISDN from './main';\n\nexport const mockedMSISDNEntrySuccess: MoFlowState = {\n currentState: {\n type: 'MSISDNEntry',\n result: RDS.Success<MSISDNEntryFailure, MSISDNEntrySuccess>({\n keyword: 'TEST OK',\n shortcode: '777'\n })\n }\n};\n\nexport const mockedMSISDNEntryFailure: MoFlowState = {\n currentState: {\n type: 'MSISDNEntry',\n result: RDS.Failure<MSISDNEntryFailure, MSISDNEntrySuccess>({\n errorType: 'InvalidMSISDN',\n error: 'Invalid Mobile Number'\n })\n }\n};\nexport interface MoFlowState {\n currentState: {\n type: 'MSISDNEntry';\n result: RDS.RemoteDataState<any, any>; // Replace any with your specific error and data types\n };\n}\n\nconst defaultInitialState: MoFlowState = {\n currentState: {\n type: 'MSISDNEntry',\n result: RDS.NothingYet()\n }\n};\n\nconst setInitialState = (window: Window) => {\n const search = searchToObject(window) as IMockFlowParams<any>;\n if (search['mock-flow']) {\n switch (search['current-state']) {\n case 'msisdn-entry-failure-state':\n return mockedMSISDNEntryFailure;\n case 'msisdn-entry-success-state':\n return mockedMSISDNEntrySuccess;\n default:\n console.error('Mock Flow not supported');\n return defaultInitialState;\n }\n } else {\n return defaultInitialState;\n }\n};\n\nconst initialState = setInitialState(window);\n\ninterface SubmitMSISDNArgs {\n window: Window;\n msisdn: string;\n extraParams?: IHash;\n}\n/**\n * submitMSISDNAction\n * @returns {type: ' 'pinFlow/submitMSISDNAction', payload: {type: PossibleTypes, result: MSISDNEntryState}}\n \n * Calls trigger-message api that returns a short code and key word\n * Sets completed stated\n */\nexport const submitMSISDNAction = createAsyncThunk<\n MSISDNEntryState,\n SubmitMSISDNArgs,\n {\n rejectValue: MSISDNEntryFailure;\n }\n>('moFlow/submitMSISDNAction', async ({ window, msisdn, extraParams }, { getState, rejectWithValue }) => {\n const state: RootState = getState();\n if (!state?.strategy?.currentState?.data?.config) {\n return rejectWithValue({\n errorType: 'UnexpectedState'\n });\n }\n const { config } = state.strategy.currentState.data;\n\n try {\n // Start Trigger Message\n tracker.advancedInFlow('tallyman.v1-mo', 'msisdn-submitted', { msisdn });\n const keywordAndShortcode = await submitMSISDN(window, config, msisdn, extraParams);\n tracker.advancedInFlow('tallyman.v1-mo', 'msisdn-submission-success', { msisdn });\n // End Trigger Message\n\n // Start Store Msisdn\n // if storeMsisdn is true, encrypt msisdn and save it in cookie, localStorage, and zürch\n if (extraParams && extraParams.storeMsisdn && extraParams.storeMsisdn === 'true') {\n await storeMsisdn(msisdn)\n .then((data: any) => {\n if (data && data.data && data.data.success) {\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-stored-success');\n } else {\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-stored-failed');\n }\n })\n .catch((error) => {\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-stored-error', error);\n });\n }\n // End Store Msisdn\n\n return {\n type: 'MSISDNEntry',\n result: RDS.Success<MSISDNEntryFailure, MSISDNEntrySuccess>({ ...keywordAndShortcode })\n };\n } catch (ex) {\n console.warn(ex);\n\n const errorType = ex.type as MSISDNEntryErrorTypes;\n\n tracker.recedeInFlow('tallyman.v1-mo', 'msisdn-submission-failure', {\n msisdn,\n errorType\n });\n\n if (redirectErrorTypes.includes(errorType) && window?.pac_analytics?.visitor?.waterfallRedirectUrl) {\n tracker.customEvent('tallyman.v1-mo', 'redirect', 'waterfall-redirect', {\n redirect_url: window?.pac_analytics?.visitor?.waterfallRedirectUrl,\n errorType\n });\n window.location.href = window?.pac_analytics?.visitor?.waterfallRedirectUrl;\n }\n return rejectWithValue({\n errorType,\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>('moFlow/backToStartAction', async (_, { dispatch, rejectWithValue }) => {\n try {\n tracker.recedeInFlow('tallyman.v1-mo', 'mo-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\nconst moFlowSlice = createSlice({\n name: 'moFlow',\n initialState,\n reducers: {},\n extraReducers: (builder) => {\n builder\n .addCase(submitMSISDNAction.pending, (state) => {\n state.currentState = { type: 'MSISDNEntry', result: RDS.Loading() };\n })\n .addCase(submitMSISDNAction.fulfilled, (state, action: PayloadAction<MSISDNEntryState>) => {\n state.currentState = action.payload;\n })\n .addCase(submitMSISDNAction.rejected, (state, action: PayloadAction<MSISDNEntryFailure>) => {\n state.currentState = {\n type: 'MSISDNEntry',\n result: RDS.Failure(action.payload)\n };\n });\n }\n});\n\n// Export reducers and actions\nexport const { reducer: moFlowReducer, actions: moFlowActions } = moFlowSlice;\n\n// If you have selectors or thunks related to this slice, export them as named exports as well\nexport const selectMoFlowState = (state: any) => state.moFlow;\n"],"names":["useMoFlowState","useSelector","state","moFlow","currentState","moFlowMatch","_a","msisdnEntry","type","result","triggerMessage","window","slug","country","msisdn","device","offer","rockmanId","extraParamsQs","search","api_ajax_url","fetch","then","x","json","_b","_d","partnerAjaxResopnse","cleanSearchParams","params","action","offerId","rockman_id","page","encodeURIComponent","_c","location","href","sam_g_token","reCaptchaToken","language_code","languageCode","partner_form_action","form_action","antifraud_id","antifraud_id_js_code","antifraud_id_js_link","queryString","Object","entries","filter","__read","map","key","value","concat","join","host","DEV_BASE_URL","url","MOCK_TRIGGER_MESSAGE_RESPONSE","submitMSISDN","maybeConfig","internationalMSISDN","extraParams","config","pac_analytics","visitor","submitMSISDNWithConfig","substr","keys","k","match","sent","success","defaultType","message","error_code","normaliseErrorCode","error","Error","assign","productUrl","product_url","__assign","keyword","displayKeyword","mockedMSISDNEntrySuccess","RDS.Success","shortcode","mockedMSISDNEntryFailure","RDS.Failure","errorType","defaultInitialState","RDS.NothingYet","initialState","searchToObject","console","setInitialState","submitMSISDNAction","createAsyncThunk","getState","rejectWithValue","_e","strategy","data","tracker","advancedInFlow","keywordAndShortcode","_m","storeMsisdn","customEvent","catch","warn","ex_1","recedeInFlow","redirectErrorTypes","includes","_f","_g","waterfallRedirectUrl","redirect_url","_j","_h","_l","backToStartAction","_","dispatch","identifyStrategy","ex","moFlowSlice","createSlice","name","reducers","extraReducers","builder","addCase","pending","RDS.Loading","fulfilled","payload","rejected","moFlowReducer","reducer","actions"],"mappings":"moBAGO,IAAMA,EAAiB,SAACC,GAE7B,OADqBA,GAAY,SAACC,GAAqB,OAAAA,EAAMC,OAAOC,YAAb,GAEzD,ECHA,SAASC,EAAeC,GACtB,IAAAC,EAAWD,EAAAC,YAIX,OAAO,SAACL,GAMF,OALIA,EAAMM,KAKHD,EAAYL,EAAMO,OAE/B,CACF,CCAA,IAAMC,EAAiB,SAAOJ,OAC5BK,EAAML,EAAAK,OACNC,EAAIN,EAAAM,KACJC,EAAOP,EAAAO,QACPC,EAAMR,EAAAQ,OACNC,WACAC,EAAKV,EAAAU,MACLC,EAASX,EAAAW,UACTC,EAAaZ,EAAAY,cACbC,EAAMb,EAAAa,4HAeFR,EAAOS,aAAqB,CAAA,EAAAC,MAAMV,EAAOS,cAAcE,MAAK,SAACC,GAAM,OAAAA,EAAEC,MAAF,KAAhD,CAAA,EAAA,iBAAGC,EAAAC,sBAAyDD,EAAA,sBAgCnF,OAlCME,EAEiFF,EAGvFN,EAASS,EAAkBT,GACrBU,EAAS,CACbC,OAAQ,kBACRlB,KAAIA,EACJC,QAAOA,EACPC,OAAMA,EACNC,OAAMA,EACNgB,QAASf,EACTgB,WAAYf,EACZgB,KAAMC,mBAAmC,QAAhBC,EAAAxB,aAAM,EAANA,EAAQyB,gBAAQ,IAAAD,OAAA,EAAAA,EAAEE,MAC3CC,YAAa3B,EAAO4B,gBAAkB,GACtCC,cAAe7B,EAAO8B,cAAgB,GACtCC,qBAAqBf,eAAAA,EAAqBgB,aAAcT,mBAAmBP,aAAA,EAAAA,EAAqBgB,aAAe,GAE/GC,aAAcjC,EAAOiC,cAAgB,GAGrCC,qBAAsBlC,EAAOkC,sBAAwB,GACrDC,qBAAsBnC,EAAOmC,sBAAwB,IAGjDC,EAAcC,OAAOC,QAAQpB,GAChCqB,QAAO,SAAC5C,GAAA,IAAAmB,EAAA0B,OAAe,OAAb1B,EAAA,GAAOA,EAAA,EAAM,IACvB2B,KAAI,SAAC9C,GAAA,IAAAmB,EAAA0B,OAACE,EAAG5B,EAAA,GAAE6B,EAAK7B,EAAA,GAAM,MAAA,GAAG8B,OAAAF,EAAO,KAAAE,OAAAD,EAAV,IACtBE,KAAK,KAEFC,EAAQ9C,EAAkB+C,cAAgB,GAC1CC,EAAM,UAAGF,EAAI,kBAAAF,OAAiBR,GAAcQ,OAAApC,EAAS,WAAIA,GAAW,GAAM,KAAAoC,OAAArC,GAE5EP,EAAOiD,8BACF,CAAA,EAAAjD,EAAOiD,+BAEhB,CAAA,EAAOvC,MAAMsC,GAAKrC,MAAK,SAACC,GAAM,OAAAA,EAAEC,MAAF,aClElB,SAAgBqC,EAC5BlD,EACAmD,EACAC,EACAC,oFAGA,OADMC,SAAoBH,GAAe,CAAE,IAAG9C,MAAsC,UAAX,QAApBV,EAAAK,EAAOuD,qBAAa,IAAA5D,OAAA,EAAAA,EAAE6D,eAAS,IAAA1C,OAAA,EAAAA,EAAAT,QAC7E,CAAA,EAAAoD,EAAuBzD,EAAQsD,EAAQF,EAAqBC,SACpE,CAiBK,SAAgBI,EACpBzD,EACAsD,EACAF,EACAC,iIAYwC,OAVhCpD,EAAiCqD,EAAMrD,KAAjCC,EAA2BoD,EAApBpD,QAAEE,EAAkBkD,EAAZlD,OAAEC,EAAUiD,QACnC9C,EAASR,EAAOyB,SAASjB,OAAOkD,OAAO,IAAM,GAC7CnD,EAAiB8C,EAEnB,IAAIT,OAAAP,OAAOsB,KAAKN,GACbZ,KAAI,SAACmB,GAAM,MAAA,GAAGhB,OAAAgB,EAAK,KAAAhB,OAAAS,EAAYO,GAAI,IACnCf,KAAK,MAHR,GAIE1C,GAA2C,QAAlCR,EAAAyD,EAAoBS,MAAM,gBAAQ,IAAAlE,OAAA,EAAAA,EAAEkD,KAAK,MAAO,GACvDvC,EAAcN,EAAOuD,cAAcC,kBAEH,CAAA,EAAMzD,EAAe,CAC3DC,OAAMA,EACNC,KAAIA,EACJC,QAAOA,EACPC,OAAMA,EACNC,OAAMA,EACNC,MAAKA,EACLC,UAASA,EACTE,OAAMA,EACND,cAAaA,YAGf,IAAuB,KAZjBT,EAAkC0B,EAUtCsC,QAESC,QAiBT,MAfMC,EAAiC,uBAAnBlE,EAAOmE,QAAmC,oBAAsB,gBAE9EpE,EAAOC,EAAOoE,WAAaC,EAAmBrE,EAAOoE,YAAcF,EAGnEI,EAAQ,IAAIC,MAAM,GAAGzB,OAAA/C,EAAU,OAAA+C,OAAA9C,EAAOmE,UAK5C5B,OAAOiC,OAAOF,EAAO,CACnBvE,KAAIA,EACJ0E,mBAAYzD,EAAAhB,EAAO0E,2BAAe,KAG9BJ,EAEN,MAAY,CAAA,EAAAK,EAAAA,EAAA,CAAA,EAAA3E,IAAQ4E,QAAS5E,EAAO6E,wBAEvC,CCnEM,IAAMC,EAAwC,CACnDnF,aAAc,CACZI,KAAM,cACNC,OAAQ+E,EAAoD,CAC1DH,QAAS,UACTI,UAAW,UAKJC,EAAwC,CACnDtF,aAAc,CACZI,KAAM,cACNC,OAAQkF,EAAoD,CAC1DC,UAAW,gBACXb,MAAO,4BAWPc,EAAmC,CACvCzF,aAAc,CACZI,KAAM,cACNC,OAAQqF,MAqBNC,EAjBkB,SAACpF,GACvB,IAAMQ,EAAS6E,EAAerF,GAC9B,IAAIQ,EAAO,aAWT,OAAO0E,EAVP,OAAQ1E,EAAO,kBACb,IAAK,6BACH,OAAOuE,EACT,IAAK,6BACH,OAAOH,EACT,QAEE,OADAU,QAAQlB,MAAM,2BACPc,EAKf,CAEqBK,CAAgBvF,QAcxBwF,EAAqBC,EAMhC,6BAA6B,SAAO9F,EAAiCmB,GAA/B,IAAAd,WAAQG,EAAMR,EAAAQ,OAAEkD,EAAW1D,EAAA0D,YAAMqC,EAAQ5E,EAAA4E,SAAEC,EAAe7E,EAAA6E,4IAEhG,GADMpG,EAAmBmG,MACiB,QAArCE,EAA6B,kBAA7BpE,EAAAjC,aAAK,EAALA,EAAOsG,+BAAUpG,oBAAY,IAAAsB,OAAA,EAAAA,EAAE+E,YAAM,IAAAF,OAAA,EAAAA,EAAAtC,QACxC,MAAA,CAAA,EAAOqC,EAAgB,CACrBV,UAAW,qBAGP3B,EAAW/D,EAAMsG,SAASpG,aAAaqG,KAAIxC,wBAKrB,6BAD5ByC,EAAQC,eAAe,iBAAkB,mBAAoB,CAAE7F,OAAMA,IACnC,CAAA,EAAA+C,EAAalD,EAAQsD,EAAQnD,EAAQkD,WAMnE,OANE4C,EAAsBC,EAAuDpC,OACnFiC,EAAQC,eAAe,iBAAkB,4BAA6B,CAAE7F,OAAMA,IAK1EkD,GAAeA,EAAY8C,aAA2C,SAA5B9C,EAAY8C,YAClD,CAAA,EAAAA,EAAYhG,GACfQ,MAAK,SAACmF,GACDA,GAAQA,EAAKA,MAAQA,EAAKA,KAAK/B,QACjCgC,EAAQK,YAAY,OAAQ,eAAgB,yBAE5CL,EAAQK,YAAY,OAAQ,eAAgB,uBAEhD,IACCC,OAAM,SAACjC,GACN2B,EAAQK,YAAY,OAAQ,eAAgB,sBAAuBhC,EACpE,KAX2E,CAAA,EAAA,UAC9E8B,EAAApC,wBAcF,MAAO,CAAA,EAAA,CACLjE,KAAM,cACNC,OAAQ+E,EAAWJ,EAAA,CAAA,EAA8CwB,aAmBnE,kBAhBAX,QAAQgB,KAAKC,GAEPtB,EAAYsB,EAAG1G,KAErBkG,EAAQS,aAAa,iBAAkB,4BAA6B,CAClErG,OAAMA,EACN8E,UAASA,IAGPwB,EAAmBC,SAASzB,KAA4C,kBAA9B0B,EAAA3G,aAAM,EAANA,EAAQuD,oCAAeC,eAAO,IAAAoD,OAAA,EAAAA,EAAEC,wBAC5Ed,EAAQK,YAAY,iBAAkB,WAAY,qBAAsB,CACtEU,qBAAcC,EAAuB,QAAvBC,EAAAhH,aAAA,EAAAA,EAAQuD,qBAAe,IAAAyD,OAAA,EAAAA,EAAAxD,8BAASqD,qBAC9C5B,UAASA,IAEXjF,EAAOyB,SAASC,KAAqC,QAA9BuF,YAAAjH,aAAM,EAANA,EAAQuD,oCAAeC,eAAO,IAAAyD,OAAA,EAAAA,EAAEJ,sBAEzD,CAAA,EAAOlB,EAAgB,CACrBV,UAASA,EACTV,WAAYgC,EAAGhC,qCAGpB,IAEY2C,EAAoBzB,EAM/B,4BAA4B,SAAO0B,EAAGxH,OAAEyH,EAAQzH,EAAAyH,SAAEzB,EAAehG,EAAAgG,qFACjE,IACEI,EAAQS,aAAa,iBAAkB,WAAY,oCACnDY,EAASC,IACV,CAAC,MAAOC,GAEP,OADAhC,QAAQgB,KAAKgB,GACb,CAAA,EAAO3B,EAAgB,CACrBV,UAAW,oBAEd,gBACF,IAEKsC,EAAcC,EAAY,CAC9BC,KAAM,SACNrC,aAAYA,EACZsC,SAAU,CAAE,EACZC,cAAe,SAACC,GACdA,EACGC,QAAQrC,EAAmBsC,SAAS,SAACvI,GACpCA,EAAME,aAAe,CAAEI,KAAM,cAAeC,OAAQiI,IACtD,IACCF,QAAQrC,EAAmBwC,WAAW,SAACzI,EAAO4B,GAC7C5B,EAAME,aAAe0B,EAAO8G,OAC9B,IACCJ,QAAQrC,EAAmB0C,UAAU,SAAC3I,EAAO4B,GAC5C5B,EAAME,aAAe,CACnBI,KAAM,cACNC,OAAQkF,EAAY7D,EAAO8G,SAE/B,GACH,IAIqBE,EAA0CZ,EAA7Ba,QAA6Bb,EAAWc"}
|
|
1
|
+
{"version":3,"file":"moFlow.js","sources":["../src/flows/moFlow/hooks/useMoFlowState.ts","../src/flows/moFlow/match.ts","../src/flows/moFlow/api.ts","../src/flows/moFlow/main.ts","../src/flows/moFlow/moFlowSlice.ts"],"sourcesContent":["import { useSelector as IuseSelector } from 'react-redux';\nimport { RootState } from '../../../sharedFlowTypes/StrategyTypes';\n\nexport const useMoFlowState = (useSelector: typeof IuseSelector) => {\n const currentState = useSelector((state: RootState) => state.moFlow.currentState);\n return currentState;\n};\n","import * as RDS from '../../common-types/RemoteDataState';\nimport { MoFlowCurrentState, MSISDNEntryFailure, MSISDNEntrySuccess } from '../../sharedFlowTypes/MoTypes';\n\nfunction moFlowMatch<R>({\n msisdnEntry\n}: {\n msisdnEntry: (rds: RDS.RemoteDataState<MSISDNEntryFailure, MSISDNEntrySuccess>) => R;\n}): (state: MoFlowCurrentState) => R {\n return (state) => {\n switch (state.type) {\n case 'MSISDNEntry':\n return msisdnEntry(state.result);\n default:\n // TODO - this should be an error or something\n return msisdnEntry(state.result);\n }\n };\n}\n\nexport { moFlowMatch };\n","import { IGoogleReCaptcha, IMSISDNSubmissionResult } from '../../sharedFlowTypes/MoTypes';\nimport { cleanSearchParams } from '../../utilities/cleanSearchParams';\n\nconst getGoogleCaptcha = async (\n window: Window,\n country: string,\n slug: string,\n device: string,\n domain: string\n): Promise<IGoogleReCaptcha> => {\n const host = (window as Window).DEV_BASE_URL || '';\n\n return fetch(\n `${host}/tallyman/helper/?action=google-captcha-v3-config&country=${country}&slug=${slug}&device=${device}&domain=${domain}`\n ).then((x) => x.json());\n};\n\nconst triggerMessage = async ({\n window,\n slug,\n country,\n msisdn,\n device,\n offer,\n rockmanId,\n extraParamsQs,\n search\n}: {\n window: Window;\n slug: string;\n country: string;\n msisdn: string;\n device: string;\n offer: string;\n rockmanId: string;\n search: string;\n extraParamsQs: string;\n}): Promise<IMSISDNSubmissionResult> => {\n // introduced https://www.notion.so/sammedia/CH-Agency-Bodkinco-Integration-ea1600ad175f451a9d351b6763ad7992\n const partnerAjaxResopnse: {\n form_action: string;\n } = window.api_ajax_url ? await fetch(window.api_ajax_url).then((x) => x.json()) : null;\n\n // Remove conflicting params from url\n search = cleanSearchParams(search);\n const params = {\n action: 'trigger-message',\n slug,\n country,\n msisdn,\n device,\n offerId: offer,\n rockman_id: rockmanId,\n page: encodeURIComponent(window?.location?.href),\n sam_g_token: window.reCaptchaToken || '',\n language_code: window.languageCode || '',\n partner_form_action: partnerAjaxResopnse?.form_action ? encodeURIComponent(partnerAjaxResopnse?.form_action) : '',\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 const queryString = Object.entries(params)\n .filter(([_, value]) => value)\n .map(([key, value]) => `${key}=${value}`)\n .join('&');\n\n const host = (window as Window).DEV_BASE_URL || '';\n const url = `${host}/tallyman/v1/?${queryString}${search ? `&${search}` : ''}&${extraParamsQs}`;\n\n if (window.MOCK_TRIGGER_MESSAGE_RESPONSE) {\n return window.MOCK_TRIGGER_MESSAGE_RESPONSE;\n }\n return fetch(url).then((x) => x.json());\n};\n\nexport { getGoogleCaptcha, triggerMessage };\n","import { ICheckSubscriptionResult } from '../../common-types/ICheckSubscriptionResult';\nimport { IError } from '../../common-types/IError';\nimport { IConfig } from '../../common-types/Strategy';\nimport { checkSubscriptionByRockmanIdOnly } from '../../sharedApi/checkSubscriptionByRockmanIdOnly';\nimport { IGoogleReCaptcha, IKeywordShortcode, IMSISDNSubmissionResult } from '../../sharedFlowTypes/MoTypes';\nimport { loop } from '../../utilities/helpers';\nimport loadScriptSrc from '../../utilities/loadScriptSrc';\nimport { normaliseErrorCode } from '../../utilities/normaliseErrorCode';\nimport { getGoogleCaptcha, triggerMessage } from './api';\n\nexport default async function submitMSISDN(\n window: Window,\n maybeConfig: IConfig,\n internationalMSISDN: string,\n extraParams?: { [key: string]: string }\n): Promise<IKeywordShortcode> {\n const config: any = { ...(maybeConfig || {}), offer: window.pac_analytics?.visitor?.offer };\n return submitMSISDNWithConfig(window, config, internationalMSISDN, extraParams);\n}\n\nexport const getGoogleReCaptchaConfig = async ({\n window,\n slug,\n country,\n device\n}: IConfig & { window: Window }): Promise<IGoogleReCaptcha> => {\n const domain = window.location.hostname;\n const result: IGoogleReCaptcha = await getGoogleCaptcha(window, country, slug, device, domain);\n if (result.success === true) {\n const srcUrl = `https://www.google.com/recaptcha/api.js?render=${result.site_key}`;\n loadScriptSrc({ url: srcUrl, key: result.site_key, isRecaptcha: true });\n }\n return result;\n};\n\nexport async function submitMSISDNWithConfig(\n window: Window,\n config: IConfig,\n internationalMSISDN: string,\n extraParams?: { [key: string]: string }\n): Promise<IKeywordShortcode> {\n const { slug, country, device, offer } = config;\n const search = window.location.search.substr(1) || '';\n const extraParamsQs = !extraParams\n ? ''\n : `&${Object.keys(extraParams)\n .map((k) => `${k}=${extraParams[k]}`)\n .join('&')}`;\n const msisdn = internationalMSISDN.match(/\\d+/gi)?.join('') || '';\n const { rockmanId } = window.pac_analytics.visitor;\n\n const result: IMSISDNSubmissionResult = await triggerMessage({\n window,\n slug,\n country,\n msisdn,\n device,\n offer,\n rockmanId,\n search,\n extraParamsQs\n });\n\n if (result.success === false) {\n // pick a default based on message, then override with error_code if available\n const defaultType = result.message === 'ALREADY SUBSCRIBED' ? 'AlreadySubscribed' : 'InvalidMsisdn';\n\n const type = result.error_code ? normaliseErrorCode(result.error_code) : defaultType;\n\n // build, augment, log and throw\n const error = new Error(`${type}:\\n${result.message}`) as IError & {\n type: string;\n productUrl: string;\n };\n\n Object.assign(error, {\n type,\n productUrl: result.product_url ?? ''\n });\n\n throw error;\n } else {\n return { ...result, keyword: result.displayKeyword }; // based on discussion with Chanaka to avoid confusion in set up on bupper. Click2sms and mo will use display keyword\n }\n}\n\nexport async function moCheckSubscription(window: Window): Promise<string> {\n const { rockmanId } = window.pac_analytics.visitor;\n const check: () => Promise<ICheckSubscriptionResult> = () => checkSubscriptionByRockmanIdOnly({ window, rockmanId });\n\n const checkResult: ICheckSubscriptionResult = await loop(check, 60, (r) => r.success, 0);\n\n if (checkResult.success === true && checkResult.product_url && checkResult.product_url !== '') {\n window.location.href = checkResult.product_url;\n return checkResult.product_url;\n }\n const error = new Error(`${'SubscriptionFailed'}:\\n${checkResult.message}`) as IError & { type: string };\n error.type = 'SubscriptionFailed';\n throw error;\n}\n\n// export const formatSMSLink = (keywordAndShortcode: IKeywordShortcode) =>\n// !!window.pac_analytics.visitor['x-requested-with'] &&\n// window.pac_analytics.visitor['x-requested-with'] !== null &&\n// window.pac_analytics.visitor['x-requested-with'].indexOf('com.facebook') !== -1\n// ? `sms://${keywordAndShortcode.shortcode}?body=${keywordAndShortcode.keyword}`\n// : typeof navigator !== 'undefined' && (/iPhone/i.test(navigator.userAgent) || /Mac OS/i.test(navigator.userAgent))\n// ? `sms:${keywordAndShortcode.shortcode}&body=${keywordAndShortcode.keyword}`\n// : `sms:${keywordAndShortcode.shortcode}?body=${keywordAndShortcode.keyword}`;\n","import { createAsyncThunk, createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { IHash } from '../../common-types/IHash';\nimport * as RDS from '../../common-types/RemoteDataState';\nimport {\n MSISDNEntryErrorTypes,\n MSISDNEntryFailure,\n MSISDNEntryState,\n MSISDNEntrySuccess\n} from '../../sharedFlowTypes/MoTypes';\nimport { IMockFlowParams, RootState } from '../../sharedFlowTypes/StrategyTypes';\nimport { handleWaterfallRedirect } from '../../utilities/handleWaterfallRedirect';\nimport { redirectErrorTypes } from '../../utilities/normaliseErrorCode';\nimport { searchToObject } from '../../utilities/searchToObject';\nimport { storeMsisdn } from '../../utilities/storeMsisdn';\nimport { tracker } from '../../utilities/tracker';\nimport { identifyStrategy } from '../strategy';\nimport submitMSISDN from './main';\n\nexport const mockedMSISDNEntrySuccess: MoFlowState = {\n currentState: {\n type: 'MSISDNEntry',\n result: RDS.Success<MSISDNEntryFailure, MSISDNEntrySuccess>({\n keyword: 'TEST OK',\n shortcode: '777'\n })\n }\n};\n\nexport const mockedMSISDNEntryFailure: MoFlowState = {\n currentState: {\n type: 'MSISDNEntry',\n result: RDS.Failure<MSISDNEntryFailure, MSISDNEntrySuccess>({\n errorType: 'InvalidMSISDN',\n error: 'Invalid Mobile Number'\n })\n }\n};\nexport interface MoFlowState {\n currentState: {\n type: 'MSISDNEntry';\n result: RDS.RemoteDataState<any, any>; // Replace any with your specific error and data types\n };\n}\n\nconst defaultInitialState: MoFlowState = {\n currentState: {\n type: 'MSISDNEntry',\n result: RDS.NothingYet()\n }\n};\n\nconst setInitialState = (window: Window) => {\n const search = searchToObject(window) as IMockFlowParams<any>;\n if (search['mock-flow']) {\n switch (search['current-state']) {\n case 'msisdn-entry-failure-state':\n return mockedMSISDNEntryFailure;\n case 'msisdn-entry-success-state':\n return mockedMSISDNEntrySuccess;\n default:\n console.error('Mock Flow not supported');\n return defaultInitialState;\n }\n } else {\n return defaultInitialState;\n }\n};\n\nconst initialState = setInitialState(window);\n\ninterface SubmitMSISDNArgs {\n window: Window;\n msisdn: string;\n extraParams?: IHash;\n}\n/**\n * submitMSISDNAction\n * @returns {type: ' 'pinFlow/submitMSISDNAction', payload: {type: PossibleTypes, result: MSISDNEntryState}}\n \n * Calls trigger-message api that returns a short code and key word\n * Sets completed stated\n */\nexport const submitMSISDNAction = createAsyncThunk<\n MSISDNEntryState,\n SubmitMSISDNArgs,\n {\n rejectValue: MSISDNEntryFailure;\n }\n>('moFlow/submitMSISDNAction', async ({ window, msisdn, extraParams }, { getState, rejectWithValue }) => {\n const state: RootState = getState();\n if (!state?.strategy?.currentState?.data?.config) {\n return rejectWithValue({\n errorType: 'UnexpectedState'\n });\n }\n const { config } = state.strategy.currentState.data;\n\n try {\n // Start Trigger Message\n tracker.advancedInFlow('tallyman.v1-mo', 'msisdn-submitted', { msisdn });\n const keywordAndShortcode = await submitMSISDN(window, config, msisdn, extraParams);\n tracker.advancedInFlow('tallyman.v1-mo', 'msisdn-submission-success', { msisdn });\n // End Trigger Message\n\n // Start Store Msisdn\n // if storeMsisdn is true, encrypt msisdn and save it in cookie, localStorage, and zürch\n if (extraParams && extraParams.storeMsisdn && extraParams.storeMsisdn === 'true') {\n await storeMsisdn(msisdn)\n .then((data: any) => {\n if (data && data.data && data.data.success) {\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-stored-success');\n } else {\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-stored-failed');\n }\n })\n .catch((error) => {\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-stored-error', error);\n });\n }\n // End Store Msisdn\n\n return {\n type: 'MSISDNEntry',\n result: RDS.Success<MSISDNEntryFailure, MSISDNEntrySuccess>({ ...keywordAndShortcode })\n };\n } catch (ex) {\n console.warn(ex);\n\n const errorType = ex.type as MSISDNEntryErrorTypes;\n\n tracker.recedeInFlow('tallyman.v1-mo', 'msisdn-submission-failure', {\n msisdn,\n errorType\n });\n\n if (redirectErrorTypes.includes(errorType) && window?.pac_analytics?.visitor?.waterfallRedirectUrl) {\n tracker.customEvent('tallyman.v1-mo', 'redirect', 'waterfall-redirect', {\n redirect_url: window?.pac_analytics?.visitor?.waterfallRedirectUrl,\n errorType\n });\n handleWaterfallRedirect(window?.pac_analytics?.visitor?.waterfallRedirectUrl);\n }\n return rejectWithValue({\n errorType,\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>('moFlow/backToStartAction', async (_, { dispatch, rejectWithValue }) => {\n try {\n tracker.recedeInFlow('tallyman.v1-mo', 'mo-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\nconst moFlowSlice = createSlice({\n name: 'moFlow',\n initialState,\n reducers: {},\n extraReducers: (builder) => {\n builder\n .addCase(submitMSISDNAction.pending, (state) => {\n state.currentState = { type: 'MSISDNEntry', result: RDS.Loading() };\n })\n .addCase(submitMSISDNAction.fulfilled, (state, action: PayloadAction<MSISDNEntryState>) => {\n state.currentState = action.payload;\n })\n .addCase(submitMSISDNAction.rejected, (state, action: PayloadAction<MSISDNEntryFailure>) => {\n state.currentState = {\n type: 'MSISDNEntry',\n result: RDS.Failure(action.payload)\n };\n });\n }\n});\n\n// Export reducers and actions\nexport const { reducer: moFlowReducer, actions: moFlowActions } = moFlowSlice;\n\n// If you have selectors or thunks related to this slice, export them as named exports as well\nexport const selectMoFlowState = (state: any) => state.moFlow;\n"],"names":["useMoFlowState","useSelector","state","moFlow","currentState","moFlowMatch","_a","msisdnEntry","type","result","triggerMessage","window","slug","country","msisdn","device","offer","rockmanId","extraParamsQs","search","api_ajax_url","fetch","then","x","json","_b","_d","partnerAjaxResopnse","cleanSearchParams","params","action","offerId","rockman_id","page","encodeURIComponent","_c","location","href","sam_g_token","reCaptchaToken","language_code","languageCode","partner_form_action","form_action","antifraud_id","antifraud_id_js_code","antifraud_id_js_link","queryString","Object","entries","filter","__read","map","key","value","concat","join","host","DEV_BASE_URL","url","MOCK_TRIGGER_MESSAGE_RESPONSE","submitMSISDN","maybeConfig","internationalMSISDN","extraParams","config","pac_analytics","visitor","submitMSISDNWithConfig","substr","keys","k","match","sent","success","defaultType","message","error_code","normaliseErrorCode","error","Error","assign","productUrl","product_url","__assign","keyword","displayKeyword","mockedMSISDNEntrySuccess","RDS.Success","shortcode","mockedMSISDNEntryFailure","RDS.Failure","errorType","defaultInitialState","RDS.NothingYet","initialState","searchToObject","console","setInitialState","submitMSISDNAction","createAsyncThunk","getState","rejectWithValue","_e","strategy","data","tracker","advancedInFlow","keywordAndShortcode","_m","storeMsisdn","customEvent","catch","warn","ex_1","recedeInFlow","redirectErrorTypes","includes","_f","_g","waterfallRedirectUrl","redirect_url","_j","_h","handleWaterfallRedirect","_l","_k","backToStartAction","_","dispatch","identifyStrategy","ex","moFlowSlice","createSlice","name","reducers","extraReducers","builder","addCase","pending","RDS.Loading","fulfilled","payload","rejected","moFlowReducer","reducer","actions"],"mappings":"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"}
|
package/dist/pinFlow.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{__awaiter as e,__generator as t,__assign as r}from"tslib";import{createAsyncThunk as n,createSlice as i}from"@reduxjs/toolkit";import{N as o,L as a,S as s,F as l}from"./RemoteDataState-lcf8PfJd.js";import{i as d,c as u,P as c}from"./strategySlice-BMNt18ck.js";import{r as v}from"./normaliseErrorCode-CVpyJZ6_.js";import{searchToObject as p}from"./searchToObject.js";import{s as m}from"./storeMsisdn-Cjq8_qYH.js";import{t as y}from"./tracker-DaaILhEr.js";import{s as w,a as f}from"./main-CDmeQMF-.js";import"./getConfig.js";import"./formatNumberToE164-DaAFvpKD.js";import"./api-geirVksI.js";import"pacman-client";import"uuid";import"./helpers-CBmogWIZ.js";import"./loadScriptInnerHtml-B6v2-IGn.js";import"./cleanSearchParams-Dl7ZDlew.js";var S=function(e){return e((function(e){return e.pinFlow.currentState}))};function g(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 h={currentState:{type:"PINEntry",result:o(),data:{actualPIN:"",msisdn:"",operator:"",pinMaxLength:4}}},I={currentState:{type:"PINEntry",result:s({finalUrl:"/product"}),data:{actualPIN:"",msisdn:"",operator:"",pinMaxLength:4}}},b={currentState:{type:"MSISDNEntry",result:l({errorType:"InvalidMSISDN",error:"Invalid Mobile Number"})}},E={currentState:{type:"MSISDNEntry",result:o()}},N=function(e){var t,r=p(e),n=new Event("onPinPage"),i=r.ui_show_pin_entry&&"1"===r.ui_show_pin_entry||r["show-pin-entry"]&&"1"===r["show-pin-entry"],a=r["show-thank-you"]&&"1"===r["show-thank-you"],d="1"===(null==r?void 0:r.show_custom_error),u=(null!==(t=null==r?void 0:r.ui_error_message)&&void 0!==t?t:"").replace(/\+/g,"%20"),c=decodeURIComponent(u),v={currentState:{type:"MSISDNEntry",result:l({errorType:{"This mobile number is blacklisted":"BlacklistedNumber"}[c]||"SomethingWentWrong",error:c})}},m={currentState:{type:"PINEntry",result:s({finalUrl:(null==r?void 0:r.product_url)||""}),data:{msisdn:(null==r?void 0:r.msisdn)||"",operator:(null==r?void 0:r.operator)||""}}},y={currentState:{type:"PINEntry",result:o(),data:{msisdn:(null==r?void 0:r.msisdn)||"",operator:(null==r?void 0:r.operator)||""}}};if(i)return null==e||e.dispatchEvent(n),y;if(a)return m;if(d)return v;if(!r["mock-flow"])return E;switch(r["current-state"]){case"msisdn-failure-state":return b;case"pin-state":return null==e||e.dispatchEvent(n),h;case"completed-state":return I;default:return console.error("Mock Flow not supported"),E}}(window),U=n("pinFlow/submitMSISDNAction",(function(n,i){var s=n.window,l=n.msisdn,d=n.extraParams,f=i.getState,S=i.dispatch,g=i.rejectWithValue;return e(void 0,void 0,void 0,(function(){var e,n,i,h,I,b,E,N,U,P,_,F,M,C,k,j,R,D,x,A,L,B,W,H,q,J,V;return t(this,(function(t){switch(t.label){case 0:if(e=f(),!(null===(D=null===(R=null===(j=null==e?void 0:e.strategy)||void 0===j?void 0:j.currentState)||void 0===R?void 0:R.data)||void 0===D?void 0:D.config))return[2,g({errorType:"UnexpectedState"})];n=e.strategy.currentState.data,i=n.config,h=n.isHeaderEnrichmentSuccess,I=null===(x=e.pinFlow)||void 0===x?void 0:x.currentState,b=p(s),t.label=1;case 1:return t.trys.push([1,7,,8]),"ps"===(null==i?void 0:i.country.toLowerCase())&&(null==i?void 0:i.slug.includes("shemaroo"))&&"+970"===T(null==i?void 0:i.country,l)&&(l=l.replace("970","972")),"tpay"!==(null==(E=null===(L=null===(A=null==s?void 0:s.pac_analytics)||void 0===A?void 0:A.visitor)||void 0===L?void 0:L.genericJsLinkResult)?void 0:E.gateway)||(null==b?void 0:b.ui_show_pin_entry)?[3,3]:(y.advancedInFlow("tallyman.v1-pin","msisdn-submitted",{msisdn:l}),[4,w(s,i,l)]);case 2:if(t.sent(),s.msisdn=l,s.callConfirm)try{return s.callConfirm(),[2,r(r({},I),{type:"MSISDNEntry",result:a()})]}catch(e){return N="Confirm function failed",y.recedeInFlow("tallyman.v1-pin","msisdn-submission-failure",{msisdn:l,errorType:"TPayConfirmError",error:(null==e?void 0:e.toString())||"Error calling window.callConfirm function",message:e.message}),[2,g({errorType:"TPayConfirmError",error:N,message:N})]}return U="Confirm function not found",y.recedeInFlow("tallyman.v1-pin","msisdn-submission-failure",{msisdn:l,errorType:"TPayConfirmError",error:U,message:U}),[2,g({errorType:"TPayConfirmError",error:U,message:U})];case 3:return y.advancedInFlow("tallyman.v1-pin","msisdn-submitted",{msisdn:l}),[4,w(s,i,l)];case 4:return P=t.sent(),y.advancedInFlow("tallyman.v1-pin","msisdn-submission-success",{msisdn:l}),"SingleMSISDNSubmissionResult"===P.type&&P.redirectUrl?(y.advancedInFlow("tallyman.v1-pin","msisdn-submission-success",{msisdn:l}),y.customEvent("Flow","advance-auto","msisdn-redirect",{redirectUrl:P.redirectUrl}),s.location.href=P.redirectUrl,[2]):d&&d.storeMsisdn&&"true"===d.storeMsisdn?[4,m(l).then((function(e){e&&e.data&&e.data.success?y.customEvent("Flow","advance-auto","msisdn-stored-success"):y.customEvent("Flow","advance-auto","msisdn-stored-failed")})).catch((function(e){y.customEvent("Flow","advance-auto","msisdn-stored-error",e)}))]:[3,6];case 5:t.sent(),t.label=6;case 6:return _="SingleMSISDNSubmissionResult"===(null==P?void 0:P.type)?null==P?void 0:P.operator:"",F={SA_MOBILY:6,SA_STC:4,SA_ZAIN:4},M=new Event("onPinPage"),null==s||s.dispatchEvent(M),[2,r(r({},I),{type:"PINEntry",result:o(),data:r({actualPIN:"SingleMSISDNSubmissionResult"===P.type?P.pin:null,msisdn:l,operator:_,pinMaxLength:""!==_&&F[_]?F[_]:null,isHeaderEnrichmentSuccess:h},"SingleMSISDNSubmissionResult"===P.type&&(null==P?void 0:P.userType)?{userType:P.userType}:{})})];case 7:return C=t.sent(),console.warn(C),k=C.type,y.recedeInFlow("tallyman.v1-pin","msisdn-submission-failure",{msisdn:l,errorType:k,error:C.toString(),message:C.message,productUrl:C.productUrl}),h&&S(u({type:c.PIN,data:{isHeaderEnrichmentSuccess:!1,config:i}})),v.includes(k)&&(null===(W=null===(B=null==s?void 0:s.pac_analytics)||void 0===B?void 0:B.visitor)||void 0===W?void 0:W.waterfallRedirectUrl)&&(y.customEvent("tallyman.v1-pin","redirect","waterfall-redirect",{redirect_url:null===(q=null===(H=null==s?void 0:s.pac_analytics)||void 0===H?void 0:H.visitor)||void 0===q?void 0:q.waterfallRedirectUrl,errorType:k}),s.location.href=null===(V=null===(J=null==s?void 0:s.pac_analytics)||void 0===J?void 0:J.visitor)||void 0===V?void 0:V.waterfallRedirectUrl),[2,g({errorType:k,error:C.toString(),message:C.message,productUrl:C.productUrl})];case 8:return[2]}}))}))})),P=n("pinFlow/submitPinAction",(function(n,i){var o=n.window,a=n.msisdn,l=n.pin,d=n.extraParams,u=i.getState,c=i.rejectWithValue;return e(void 0,void 0,void 0,(function(){var e,n,i,v,p,w,S,g,h,I;return t(this,(function(t){switch(t.label){case 0:if(e=u(),!(null===(h=null===(g=null===(S=null==e?void 0:e.strategy)||void 0===S?void 0:S.currentState)||void 0===g?void 0:g.data)||void 0===h?void 0:h.config))return[2,c({errorType:"UnexpectedState"})];n=e.strategy.currentState.data.config,i=null===(I=e.pinFlow)||void 0===I?void 0:I.currentState,t.label=1;case 1:return t.trys.push([1,5,,6]),y.advancedInFlow("tallyman.v1-pin","pin-submitted",{msisdn:a,pin:l}),[4,f(o,l,n,d)];case 2:return v=t.sent(),y.advancedInFlow("tallyman.v1-pin","pin-submission-success",{msisdn:a,pin:l,finalUrl:v.productUrl}),v.gatewayRedirectUrl&&""!==v.gatewayRedirectUrl&&(y.advancedInFlow("tallyman.v1-pin","gateway-redirect",{msisdn:a,pin:l,gatewayRedirectUrl:v.gatewayRedirectUrl}),o.location.href=v.gatewayRedirectUrl),d&&d.storeMsisdn&&"true"===d.storeMsisdn?[4,m(a).then((function(e){e&&e.data&&e.data.success?y.customEvent("Flow","advance-auto","msisdn-stored-success"):y.customEvent("Flow","advance-auto","msisdn-stored-failed")})).catch((function(e){y.customEvent("Flow","advance-auto","msisdn-stored-error",e)}))]:[3,4];case 3:t.sent(),t.label=4;case 4:return[2,r(r({},i),{type:"PINEntry",result:s({finalUrl:v.productUrl,isAlreadySubscribed:v.isAlreadySubscribed||!1})})];case 5:switch(p=t.sent(),console.warn(p),w=void 0,p.type){case"AlreadySubscribed":w="AlreadySubscribed";break;case"InvalidPIN":w="InvalidPIN";break;case"SessionBlocked":w="SessionBlocked";break;case"ExpiredPIN":w="ExpiredPIN";break;case"InsufficientBalance":w="InsufficientBalance";break;case"DuplicatedRequest":w="DuplicatedRequest";break;default:w="UnknownError"}return y.recedeInFlow("tallyman.v1-pin","pin-submission-failure",{msisdn:a,pin:l,errorType:w,error:p.toString(),message:p.message,productUrl:p.productUrl}),setTimeout((function(){p.productUrl&&(o.location.href=p.productUrl)}),0),[2,c({errorType:w,error:p.toString(),message:p.message,productUrl:p.productUrl})];case 6:return[2]}}))}))})),_=n("pinFlow/backToStartAction",(function(r,n){var i=n.getState,a=n.dispatch,s=n.rejectWithValue;return e(void 0,void 0,void 0,(function(){var e,r,n,l;return t(this,(function(t){try{if(y.recedeInFlow("tallyman.v1-pin","pin-state","requested to change phone number"),e=i(),!(null===(l=null===(n=null===(r=null==e?void 0:e.strategy)||void 0===r?void 0:r.currentState)||void 0===n?void 0:n.data)||void 0===l?void 0:l.config))return[2,s({errorType:"UnexpectedState"})];if("pin"===e.strategy.currentState.data.strategy)return[2,{type:"MSISDNEntry",result:o()}];a(d())}catch(e){return console.warn(e),[2,s({errorType:"UnexpectedState"})]}return[2]}))}))})),F={PS:"970"},T=function(e,t){if(!e||!t)return"";var r=e.toUpperCase(),n=F[r];return n?"+".concat(n):(console.error("Country code not found for",e),"")},M=i({name:"pinFlow",initialState:N,reducers:{},extraReducers:function(e){e.addCase(U.pending,(function(e){var t,r,n,i,o,s,l;e.currentState={type:(null===(r=null===(t=null===window||void 0===window?void 0:window.location)||void 0===t?void 0:t.search)||void 0===r?void 0:r.includes("ui_show_pin_entry"))||(null===(i=null===(n=null===window||void 0===window?void 0:window.location)||void 0===n?void 0:n.search)||void 0===i?void 0:i.includes("show-pin-entry"))&&"tpay"===(null===(l=null===(s=null===(o=null===window||void 0===window?void 0:window.pac_analytics)||void 0===o?void 0:o.visitor)||void 0===s?void 0:s.genericJsLinkResult)||void 0===l?void 0:l.gateway)?"PINEntry":"MSISDNEntry",result:a(),data:e.currentState.data}})).addCase(U.fulfilled,(function(e,t){e.currentState=t.payload})).addCase(U.rejected,(function(e,t){var r,n,i,o,a,s,d;e.currentState={type:(null===(n=null===(r=null===window||void 0===window?void 0:window.location)||void 0===r?void 0:r.search)||void 0===n?void 0:n.includes("ui_show_pin_entry"))||(null===(o=null===(i=null===window||void 0===window?void 0:window.location)||void 0===i?void 0:i.search)||void 0===o?void 0:o.includes("show-pin-entry"))&&"tpay"===(null===(d=null===(s=null===(a=null===window||void 0===window?void 0:window.pac_analytics)||void 0===a?void 0:a.visitor)||void 0===s?void 0:s.genericJsLinkResult)||void 0===d?void 0:d.gateway)?"PINEntry":"MSISDNEntry",result:l(t.payload),data:e.currentState.data}})).addCase(P.pending,(function(e){e.currentState={type:"PINEntry",result:a(),data:e.currentState.data}})).addCase(P.fulfilled,(function(e,t){e.currentState=t.payload})).addCase(P.rejected,(function(e,t){e.currentState={type:"PINEntry",result:l(t.payload),data:e.currentState.data}})).addCase(_.fulfilled,(function(e,t){e.currentState=t.payload}))}}),C=M.reducer;M.actions;export{_ as backToStartAction,g as pinFlowMatch,C as pinFlowReducer,U as submitMSISDNAction,P as submitPinAction,S as usePinFlowState};
|
|
1
|
+
import{__awaiter as e,__generator as t,__assign as r}from"tslib";import{createAsyncThunk as n,createSlice as i}from"@reduxjs/toolkit";import{N as o,L as a,S as s,F as l}from"./RemoteDataState-lcf8PfJd.js";import{i as d,c as u,P as c}from"./strategySlice-BMNt18ck.js";import{h as v}from"./handleWaterfallRedirect-DztqrthA.js";import{r as p}from"./normaliseErrorCode-CVpyJZ6_.js";import{searchToObject as m}from"./searchToObject.js";import{s as y}from"./storeMsisdn-Cjq8_qYH.js";import{t as w}from"./tracker-DaaILhEr.js";import{s as f,a as S}from"./main-CDmeQMF-.js";import"./getConfig.js";import"./formatNumberToE164-DaAFvpKD.js";import"./api-geirVksI.js";import"pacman-client";import"uuid";import"./helpers-CBmogWIZ.js";import"./loadScriptInnerHtml-B6v2-IGn.js";import"./cleanSearchParams-Dl7ZDlew.js";var g=function(e){return e((function(e){return e.pinFlow.currentState}))};function h(e){var t=e.msisdnEntry,r=e.pinEntry;return function(e){switch(e.type){case"MSISDNEntry":return t(e.result);case"PINEntry":return r(e.result,e.data);default:throw new Error("Invalid State")}}}var I={currentState:{type:"PINEntry",result:o(),data:{actualPIN:"",msisdn:"",operator:"",pinMaxLength:4}}},b={currentState:{type:"PINEntry",result:s({finalUrl:"/product"}),data:{actualPIN:"",msisdn:"",operator:"",pinMaxLength:4}}},E={currentState:{type:"MSISDNEntry",result:l({errorType:"InvalidMSISDN",error:"Invalid Mobile Number"})}},N={currentState:{type:"MSISDNEntry",result:o()}},U=function(e){var t,r=m(e),n=new Event("onPinPage"),i=r.ui_show_pin_entry&&"1"===r.ui_show_pin_entry||r["show-pin-entry"]&&"1"===r["show-pin-entry"],a=r["show-thank-you"]&&"1"===r["show-thank-you"],d="1"===(null==r?void 0:r.show_custom_error),u=(null!==(t=null==r?void 0:r.ui_error_message)&&void 0!==t?t:"").replace(/\+/g,"%20"),c=decodeURIComponent(u),v={currentState:{type:"MSISDNEntry",result:l({errorType:{"This mobile number is blacklisted":"BlacklistedNumber"}[c]||"SomethingWentWrong",error:c})}},p={currentState:{type:"PINEntry",result:s({finalUrl:(null==r?void 0:r.product_url)||""}),data:{msisdn:(null==r?void 0:r.msisdn)||"",operator:(null==r?void 0:r.operator)||""}}},y={currentState:{type:"PINEntry",result:o(),data:{msisdn:(null==r?void 0:r.msisdn)||"",operator:(null==r?void 0:r.operator)||""}}};if(i)return null==e||e.dispatchEvent(n),y;if(a)return p;if(d)return v;if(!r["mock-flow"])return N;switch(r["current-state"]){case"msisdn-failure-state":return E;case"pin-state":return null==e||e.dispatchEvent(n),I;case"completed-state":return b;default:return console.error("Mock Flow not supported"),N}}(window),P=n("pinFlow/submitMSISDNAction",(function(n,i){var s=n.window,l=n.msisdn,d=n.extraParams,S=i.getState,g=i.dispatch,h=i.rejectWithValue;return e(void 0,void 0,void 0,(function(){var e,n,i,I,b,E,N,U,P,_,F,T,C,j,k,R,D,x,A,L,B,W,H,q,J,V,O;return t(this,(function(t){switch(t.label){case 0:if(e=S(),!(null===(x=null===(D=null===(R=null==e?void 0:e.strategy)||void 0===R?void 0:R.currentState)||void 0===D?void 0:D.data)||void 0===x?void 0:x.config))return[2,h({errorType:"UnexpectedState"})];n=e.strategy.currentState.data,i=n.config,I=n.isHeaderEnrichmentSuccess,b=null===(A=e.pinFlow)||void 0===A?void 0:A.currentState,E=m(s),t.label=1;case 1:return t.trys.push([1,7,,8]),"ps"===(null==i?void 0:i.country.toLowerCase())&&(null==i?void 0:i.slug.includes("shemaroo"))&&"+970"===M(null==i?void 0:i.country,l)&&(l=l.replace("970","972")),"tpay"!==(null==(N=null===(B=null===(L=null==s?void 0:s.pac_analytics)||void 0===L?void 0:L.visitor)||void 0===B?void 0:B.genericJsLinkResult)?void 0:N.gateway)||(null==E?void 0:E.ui_show_pin_entry)?[3,3]:(w.advancedInFlow("tallyman.v1-pin","msisdn-submitted",{msisdn:l}),[4,f(s,i,l)]);case 2:if(t.sent(),s.msisdn=l,s.callConfirm)try{return s.callConfirm(),[2,r(r({},b),{type:"MSISDNEntry",result:a()})]}catch(e){return U="Confirm function failed",w.recedeInFlow("tallyman.v1-pin","msisdn-submission-failure",{msisdn:l,errorType:"TPayConfirmError",error:(null==e?void 0:e.toString())||"Error calling window.callConfirm function",message:e.message}),[2,h({errorType:"TPayConfirmError",error:U,message:U})]}return P="Confirm function not found",w.recedeInFlow("tallyman.v1-pin","msisdn-submission-failure",{msisdn:l,errorType:"TPayConfirmError",error:P,message:P}),[2,h({errorType:"TPayConfirmError",error:P,message:P})];case 3:return w.advancedInFlow("tallyman.v1-pin","msisdn-submitted",{msisdn:l}),[4,f(s,i,l)];case 4:return _=t.sent(),w.advancedInFlow("tallyman.v1-pin","msisdn-submission-success",{msisdn:l}),"SingleMSISDNSubmissionResult"===_.type&&_.redirectUrl?(w.advancedInFlow("tallyman.v1-pin","msisdn-submission-success",{msisdn:l}),w.customEvent("Flow","advance-auto","msisdn-redirect",{redirectUrl:_.redirectUrl}),s.location.href=_.redirectUrl,[2]):d&&d.storeMsisdn&&"true"===d.storeMsisdn?[4,y(l).then((function(e){e&&e.data&&e.data.success?w.customEvent("Flow","advance-auto","msisdn-stored-success"):w.customEvent("Flow","advance-auto","msisdn-stored-failed")})).catch((function(e){w.customEvent("Flow","advance-auto","msisdn-stored-error",e)}))]:[3,6];case 5:t.sent(),t.label=6;case 6:return F="SingleMSISDNSubmissionResult"===(null==_?void 0:_.type)?null==_?void 0:_.operator:"",T={SA_MOBILY:6,SA_STC:4,SA_ZAIN:4},C=new Event("onPinPage"),null==s||s.dispatchEvent(C),[2,r(r({},b),{type:"PINEntry",result:o(),data:r({actualPIN:"SingleMSISDNSubmissionResult"===_.type?_.pin:null,msisdn:l,operator:F,pinMaxLength:""!==F&&T[F]?T[F]:null,isHeaderEnrichmentSuccess:I},"SingleMSISDNSubmissionResult"===_.type&&(null==_?void 0:_.userType)?{userType:_.userType}:{})})];case 7:return j=t.sent(),console.warn(j),k=j.type,w.recedeInFlow("tallyman.v1-pin","msisdn-submission-failure",{msisdn:l,errorType:k,error:j.toString(),message:j.message,productUrl:j.productUrl}),I&&g(u({type:c.PIN,data:{isHeaderEnrichmentSuccess:!1,config:i}})),p.includes(k)&&(null===(H=null===(W=null==s?void 0:s.pac_analytics)||void 0===W?void 0:W.visitor)||void 0===H?void 0:H.waterfallRedirectUrl)&&(w.customEvent("tallyman.v1-pin","redirect","waterfall-redirect",{redirect_url:null===(J=null===(q=null==s?void 0:s.pac_analytics)||void 0===q?void 0:q.visitor)||void 0===J?void 0:J.waterfallRedirectUrl,errorType:k}),v(null===(O=null===(V=null==s?void 0:s.pac_analytics)||void 0===V?void 0:V.visitor)||void 0===O?void 0:O.waterfallRedirectUrl)),[2,h({errorType:k,error:j.toString(),message:j.message,productUrl:j.productUrl})];case 8:return[2]}}))}))})),_=n("pinFlow/submitPinAction",(function(n,i){var o=n.window,a=n.msisdn,l=n.pin,d=n.extraParams,u=i.getState,c=i.rejectWithValue;return e(void 0,void 0,void 0,(function(){var e,n,i,v,p,m,f,g,h,I;return t(this,(function(t){switch(t.label){case 0:if(e=u(),!(null===(h=null===(g=null===(f=null==e?void 0:e.strategy)||void 0===f?void 0:f.currentState)||void 0===g?void 0:g.data)||void 0===h?void 0:h.config))return[2,c({errorType:"UnexpectedState"})];n=e.strategy.currentState.data.config,i=null===(I=e.pinFlow)||void 0===I?void 0:I.currentState,t.label=1;case 1:return t.trys.push([1,5,,6]),w.advancedInFlow("tallyman.v1-pin","pin-submitted",{msisdn:a,pin:l}),[4,S(o,l,n,d)];case 2:return v=t.sent(),w.advancedInFlow("tallyman.v1-pin","pin-submission-success",{msisdn:a,pin:l,finalUrl:v.productUrl}),v.gatewayRedirectUrl&&""!==v.gatewayRedirectUrl&&(w.advancedInFlow("tallyman.v1-pin","gateway-redirect",{msisdn:a,pin:l,gatewayRedirectUrl:v.gatewayRedirectUrl}),o.location.href=v.gatewayRedirectUrl),d&&d.storeMsisdn&&"true"===d.storeMsisdn?[4,y(a).then((function(e){e&&e.data&&e.data.success?w.customEvent("Flow","advance-auto","msisdn-stored-success"):w.customEvent("Flow","advance-auto","msisdn-stored-failed")})).catch((function(e){w.customEvent("Flow","advance-auto","msisdn-stored-error",e)}))]:[3,4];case 3:t.sent(),t.label=4;case 4:return[2,r(r({},i),{type:"PINEntry",result:s({finalUrl:v.productUrl,isAlreadySubscribed:v.isAlreadySubscribed||!1})})];case 5:switch(p=t.sent(),console.warn(p),m=void 0,p.type){case"AlreadySubscribed":m="AlreadySubscribed";break;case"InvalidPIN":m="InvalidPIN";break;case"SessionBlocked":m="SessionBlocked";break;case"ExpiredPIN":m="ExpiredPIN";break;case"InsufficientBalance":m="InsufficientBalance";break;case"DuplicatedRequest":m="DuplicatedRequest";break;default:m="UnknownError"}return w.recedeInFlow("tallyman.v1-pin","pin-submission-failure",{msisdn:a,pin:l,errorType:m,error:p.toString(),message:p.message,productUrl:p.productUrl}),setTimeout((function(){p.productUrl&&(o.location.href=p.productUrl)}),0),[2,c({errorType:m,error:p.toString(),message:p.message,productUrl:p.productUrl})];case 6:return[2]}}))}))})),F=n("pinFlow/backToStartAction",(function(r,n){var i=n.getState,a=n.dispatch,s=n.rejectWithValue;return e(void 0,void 0,void 0,(function(){var e,r,n,l;return t(this,(function(t){try{if(w.recedeInFlow("tallyman.v1-pin","pin-state","requested to change phone number"),e=i(),!(null===(l=null===(n=null===(r=null==e?void 0:e.strategy)||void 0===r?void 0:r.currentState)||void 0===n?void 0:n.data)||void 0===l?void 0:l.config))return[2,s({errorType:"UnexpectedState"})];if("pin"===e.strategy.currentState.data.strategy)return[2,{type:"MSISDNEntry",result:o()}];a(d())}catch(e){return console.warn(e),[2,s({errorType:"UnexpectedState"})]}return[2]}))}))})),T={PS:"970"},M=function(e,t){if(!e||!t)return"";var r=e.toUpperCase(),n=T[r];return n?"+".concat(n):(console.error("Country code not found for",e),"")},C=i({name:"pinFlow",initialState:U,reducers:{},extraReducers:function(e){e.addCase(P.pending,(function(e){var t,r,n,i,o,s,l;e.currentState={type:(null===(r=null===(t=null===window||void 0===window?void 0:window.location)||void 0===t?void 0:t.search)||void 0===r?void 0:r.includes("ui_show_pin_entry"))||(null===(i=null===(n=null===window||void 0===window?void 0:window.location)||void 0===n?void 0:n.search)||void 0===i?void 0:i.includes("show-pin-entry"))&&"tpay"===(null===(l=null===(s=null===(o=null===window||void 0===window?void 0:window.pac_analytics)||void 0===o?void 0:o.visitor)||void 0===s?void 0:s.genericJsLinkResult)||void 0===l?void 0:l.gateway)?"PINEntry":"MSISDNEntry",result:a(),data:e.currentState.data}})).addCase(P.fulfilled,(function(e,t){e.currentState=t.payload})).addCase(P.rejected,(function(e,t){var r,n,i,o,a,s,d;e.currentState={type:(null===(n=null===(r=null===window||void 0===window?void 0:window.location)||void 0===r?void 0:r.search)||void 0===n?void 0:n.includes("ui_show_pin_entry"))||(null===(o=null===(i=null===window||void 0===window?void 0:window.location)||void 0===i?void 0:i.search)||void 0===o?void 0:o.includes("show-pin-entry"))&&"tpay"===(null===(d=null===(s=null===(a=null===window||void 0===window?void 0:window.pac_analytics)||void 0===a?void 0:a.visitor)||void 0===s?void 0:s.genericJsLinkResult)||void 0===d?void 0:d.gateway)?"PINEntry":"MSISDNEntry",result:l(t.payload),data:e.currentState.data}})).addCase(_.pending,(function(e){e.currentState={type:"PINEntry",result:a(),data:e.currentState.data}})).addCase(_.fulfilled,(function(e,t){e.currentState=t.payload})).addCase(_.rejected,(function(e,t){e.currentState={type:"PINEntry",result:l(t.payload),data:e.currentState.data}})).addCase(F.fulfilled,(function(e,t){e.currentState=t.payload}))}}),j=C.reducer;C.actions;export{F as backToStartAction,h as pinFlowMatch,j as pinFlowReducer,P as submitMSISDNAction,_ as submitPinAction,g as usePinFlowState};
|
|
2
2
|
//# sourceMappingURL=pinFlow.js.map
|
package/dist/pinFlow.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pinFlow.js","sources":["../src/flows/pinFlow/hooks/usePinFlowState.ts","../src/flows/pinFlow/match.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 { createAsyncThunk, createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport * as RDS from '../../common-types/RemoteDataState';\nimport {\n IHash,\n MSISDNEntryFailure,\n MSISDNEntryState,\n MSISDNEntrySuccess,\n PINEntryErrorTypes,\n PINEntryFailure,\n PINEntryState,\n PINEntrySuccess,\n PinFlowState\n} from '../../sharedFlowTypes/PinTypes';\nimport { IMockFlowParams, PossibleTypes, RootState } from '../../sharedFlowTypes/StrategyTypes';\nimport { ErrorType, redirectErrorTypes } from '../../utilities/normaliseErrorCode';\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 =\n (search.ui_show_pin_entry && search.ui_show_pin_entry === '1') ||\n (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 rawParam = search?.ui_error_message ?? '';\n const normalizedParam = rawParam.replace(/\\+/g, '%20');\n const errorMsg = decodeURIComponent(normalizedParam);\n const mapParamError: { [key: string]: ErrorType } = {\n 'This mobile number is blacklisted': 'BlacklistedNumber'\n };\n\n const msisdnError: PinFlowState = {\n currentState: {\n type: 'MSISDNEntry',\n result: RDS.Failure<MSISDNEntryFailure, MSISDNEntrySuccess>({\n errorType: mapParamError[errorMsg] || 'SomethingWentWrong',\n error: errorMsg\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 | MSISDNEntryState,\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 const searchObj = searchToObject(window) as { ui_show_pin_entry: string };\n\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 the flow is TPAY the above trigger pin will only do tracking on the backend and not actually request a pin from gateway\n // The code below handles that request\n if (jsLinkResult?.gateway === 'tpay' && !searchObj?.ui_show_pin_entry) {\n tracker.advancedInFlow('tallyman.v1-pin', 'msisdn-submitted', { msisdn });\n await submitMSISDN(window, config, msisdn); // trigger pin call requested here by Adrian for BE tracking\n window.msisdn = msisdn;\n if (window.callConfirm) {\n try {\n window.callConfirm();\n return {\n ...pinFlowCurrentState,\n type: 'MSISDNEntry',\n result: RDS.Loading()\n };\n } catch (ex) {\n // Catch any unexpected errors\n const errorMsg = 'Confirm function failed';\n tracker.recedeInFlow('tallyman.v1-pin', 'msisdn-submission-failure', {\n msisdn,\n errorType: 'TPayConfirmError',\n error: ex?.toString() || 'Error calling window.callConfirm function',\n message: ex.message\n });\n return rejectWithValue({\n errorType: 'TPayConfirmError',\n error: errorMsg,\n message: errorMsg\n });\n }\n }\n // Catch any unexpected errors\n const errorMsg = 'Confirm function not found';\n tracker.recedeInFlow('tallyman.v1-pin', 'msisdn-submission-failure', {\n msisdn,\n errorType: 'TPayConfirmError',\n error: errorMsg,\n message: errorMsg\n });\n return rejectWithValue({\n errorType: 'TPayConfirmError',\n error: errorMsg,\n message: errorMsg\n });\n\n // END TPAY TRIGGER PIN\n }\n\n // Start Trigger Pin\n tracker.advancedInFlow('tallyman.v1-pin', 'msisdn-submitted', { msisdn });\n const msisdnSubmissionResult = await submitMSISDN(window, config, msisdn);\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 return;\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 } catch (ex) {\n console.warn(ex);\n const errorType = ex.type;\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 if (redirectErrorTypes.includes(errorType) && window?.pac_analytics?.visitor?.waterfallRedirectUrl) {\n tracker.customEvent('tallyman.v1-pin', 'redirect', 'waterfall-redirect', {\n redirect_url: window?.pac_analytics?.visitor?.waterfallRedirectUrl,\n errorType\n });\n window.location.href = window?.pac_analytics?.visitor?.waterfallRedirectUrl;\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}\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 case 'DuplicatedRequest':\n errorType = 'DuplicatedRequest';\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 (_, { getState, dispatch, rejectWithValue }) => {\n try {\n tracker.recedeInFlow('tallyman.v1-pin', 'pin-state', 'requested to change phone number');\n const state: RootState = getState();\n\n if (!state?.strategy?.currentState?.data?.config) {\n return rejectWithValue({\n errorType: 'UnexpectedState'\n });\n }\n const { strategy } = state.strategy.currentState.data;\n if (strategy === 'pin') {\n return {\n type: 'MSISDNEntry',\n result: RDS.NothingYet()\n };\n }\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 // @ts-ignore\n state.currentState = {\n type:\n window?.location?.search?.includes('ui_show_pin_entry') ||\n (window?.location?.search?.includes('show-pin-entry') &&\n window?.pac_analytics?.visitor?.genericJsLinkResult?.gateway === 'tpay')\n ? 'PINEntry'\n : 'MSISDNEntry',\n result: RDS.Loading(),\n data: state.currentState.data\n };\n })\n .addCase(submitMSISDNAction.fulfilled, (state, action: PayloadAction<PINEntryState | MSISDNEntryState>) => {\n state.currentState = action.payload;\n })\n .addCase(submitMSISDNAction.rejected, (state, action: PayloadAction<MSISDNEntryFailure>) => {\n // @ts-ignore\n state.currentState = {\n type:\n window?.location?.search?.includes('ui_show_pin_entry') ||\n (window?.location?.search?.includes('show-pin-entry') &&\n window?.pac_analytics?.visitor?.genericJsLinkResult?.gateway === 'tpay')\n ? 'PINEntry'\n : '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 .addCase(backToStartAction.fulfilled, (state, action: PayloadAction<MSISDNEntryState>) => {\n state.currentState = action.payload;\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","mockedPINState","RDS.NothingYet","actualPIN","msisdn","operator","pinMaxLength","mockedCompletedState","RDS.Success","finalUrl","mockedMSISDNEntryFailure","RDS.Failure","errorType","error","defaultInitialState","initialState","window","search","searchToObject","pinPageEvent","Event","isPinEntryStep","ui_show_pin_entry","isShowThankYouStep","isShowCustomError","show_custom_error","normalizedParam","ui_error_message","replace","errorMsg","decodeURIComponent","msisdnError","thankYouState","product_url","initalPinEntryState","dispatchEvent","console","setInitialState","submitMSISDNAction","createAsyncThunk","_b","extraParams","getState","dispatch","rejectWithValue","_f","_d","strategy","_e","config","_c","isHeaderEnrichmentSuccess","pinFlowCurrentState","_g","searchObj","country","toLowerCase","slug","includes","getInputValuePrefix","jsLinkResult","_j","_h","pac_analytics","visitor","genericJsLinkResult","gateway","tracker","advancedInFlow","submitMSISDN","_r","sent","callConfirm","__assign","RDS.Loading","ex","errorMsg_1","recedeInFlow","toString","message","msisdnSubmissionResult","redirectUrl","customEvent","location","href","storeMsisdn","then","success","catch","pinMaxLengthByOp","SA_MOBILY","SA_STC","SA_ZAIN","pin","userType","warn","ex_1","productUrl","setStrategyExtraData","PossibleTypes","PIN","redirectErrorTypes","_k","_l","waterfallRedirectUrl","redirect_url","_o","_m","_q","submitPinAction","submitPIN","gatewayRedirectUrl","isAlreadySubscribed","ex_2","setTimeout","backToStartAction","_","identifyStrategy","countryCodes","PS","international","normalizedCountry","toUpperCase","countryCode","concat","pinFlowSlice","createSlice","name","reducers","extraReducers","builder","addCase","pending","fulfilled","action","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/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 { createAsyncThunk, createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport * as RDS from '../../common-types/RemoteDataState';\nimport {\n IHash,\n MSISDNEntryFailure,\n MSISDNEntryState,\n MSISDNEntrySuccess,\n PINEntryErrorTypes,\n PINEntryFailure,\n PINEntryState,\n PINEntrySuccess,\n PinFlowState\n} from '../../sharedFlowTypes/PinTypes';\nimport { IMockFlowParams, PossibleTypes, RootState } from '../../sharedFlowTypes/StrategyTypes';\nimport { handleWaterfallRedirect } from '../../utilities/handleWaterfallRedirect';\nimport { ErrorType, redirectErrorTypes } from '../../utilities/normaliseErrorCode';\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 =\n (search.ui_show_pin_entry && search.ui_show_pin_entry === '1') ||\n (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 rawParam = search?.ui_error_message ?? '';\n const normalizedParam = rawParam.replace(/\\+/g, '%20');\n const errorMsg = decodeURIComponent(normalizedParam);\n const mapParamError: { [key: string]: ErrorType } = {\n 'This mobile number is blacklisted': 'BlacklistedNumber'\n };\n\n const msisdnError: PinFlowState = {\n currentState: {\n type: 'MSISDNEntry',\n result: RDS.Failure<MSISDNEntryFailure, MSISDNEntrySuccess>({\n errorType: mapParamError[errorMsg] || 'SomethingWentWrong',\n error: errorMsg\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 | MSISDNEntryState,\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 const searchObj = searchToObject(window) as { ui_show_pin_entry: string };\n\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 the flow is TPAY the above trigger pin will only do tracking on the backend and not actually request a pin from gateway\n // The code below handles that request\n if (jsLinkResult?.gateway === 'tpay' && !searchObj?.ui_show_pin_entry) {\n tracker.advancedInFlow('tallyman.v1-pin', 'msisdn-submitted', { msisdn });\n await submitMSISDN(window, config, msisdn); // trigger pin call requested here by Adrian for BE tracking\n window.msisdn = msisdn;\n if (window.callConfirm) {\n try {\n window.callConfirm();\n return {\n ...pinFlowCurrentState,\n type: 'MSISDNEntry',\n result: RDS.Loading()\n };\n } catch (ex) {\n // Catch any unexpected errors\n const errorMsg = 'Confirm function failed';\n tracker.recedeInFlow('tallyman.v1-pin', 'msisdn-submission-failure', {\n msisdn,\n errorType: 'TPayConfirmError',\n error: ex?.toString() || 'Error calling window.callConfirm function',\n message: ex.message\n });\n return rejectWithValue({\n errorType: 'TPayConfirmError',\n error: errorMsg,\n message: errorMsg\n });\n }\n }\n // Catch any unexpected errors\n const errorMsg = 'Confirm function not found';\n tracker.recedeInFlow('tallyman.v1-pin', 'msisdn-submission-failure', {\n msisdn,\n errorType: 'TPayConfirmError',\n error: errorMsg,\n message: errorMsg\n });\n return rejectWithValue({\n errorType: 'TPayConfirmError',\n error: errorMsg,\n message: errorMsg\n });\n\n // END TPAY TRIGGER PIN\n }\n\n // Start Trigger Pin\n tracker.advancedInFlow('tallyman.v1-pin', 'msisdn-submitted', { msisdn });\n const msisdnSubmissionResult = await submitMSISDN(window, config, msisdn);\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 return;\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 } catch (ex) {\n console.warn(ex);\n const errorType = ex.type;\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 if (redirectErrorTypes.includes(errorType) && window?.pac_analytics?.visitor?.waterfallRedirectUrl) {\n tracker.customEvent('tallyman.v1-pin', 'redirect', 'waterfall-redirect', {\n redirect_url: window?.pac_analytics?.visitor?.waterfallRedirectUrl,\n errorType\n });\n handleWaterfallRedirect(window?.pac_analytics?.visitor?.waterfallRedirectUrl);\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}\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 case 'DuplicatedRequest':\n errorType = 'DuplicatedRequest';\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 (_, { getState, dispatch, rejectWithValue }) => {\n try {\n tracker.recedeInFlow('tallyman.v1-pin', 'pin-state', 'requested to change phone number');\n const state: RootState = getState();\n\n if (!state?.strategy?.currentState?.data?.config) {\n return rejectWithValue({\n errorType: 'UnexpectedState'\n });\n }\n const { strategy } = state.strategy.currentState.data;\n if (strategy === 'pin') {\n return {\n type: 'MSISDNEntry',\n result: RDS.NothingYet()\n };\n }\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 // @ts-ignore\n state.currentState = {\n type:\n window?.location?.search?.includes('ui_show_pin_entry') ||\n (window?.location?.search?.includes('show-pin-entry') &&\n window?.pac_analytics?.visitor?.genericJsLinkResult?.gateway === 'tpay')\n ? 'PINEntry'\n : 'MSISDNEntry',\n result: RDS.Loading(),\n data: state.currentState.data\n };\n })\n .addCase(submitMSISDNAction.fulfilled, (state, action: PayloadAction<PINEntryState | MSISDNEntryState>) => {\n state.currentState = action.payload;\n })\n .addCase(submitMSISDNAction.rejected, (state, action: PayloadAction<MSISDNEntryFailure>) => {\n // @ts-ignore\n state.currentState = {\n type:\n window?.location?.search?.includes('ui_show_pin_entry') ||\n (window?.location?.search?.includes('show-pin-entry') &&\n window?.pac_analytics?.visitor?.genericJsLinkResult?.gateway === 'tpay')\n ? 'PINEntry'\n : '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 .addCase(backToStartAction.fulfilled, (state, action: PayloadAction<MSISDNEntryState>) => {\n state.currentState = action.payload;\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","mockedPINState","RDS.NothingYet","actualPIN","msisdn","operator","pinMaxLength","mockedCompletedState","RDS.Success","finalUrl","mockedMSISDNEntryFailure","RDS.Failure","errorType","error","defaultInitialState","initialState","window","search","searchToObject","pinPageEvent","Event","isPinEntryStep","ui_show_pin_entry","isShowThankYouStep","isShowCustomError","show_custom_error","normalizedParam","ui_error_message","replace","errorMsg","decodeURIComponent","msisdnError","thankYouState","product_url","initalPinEntryState","dispatchEvent","console","setInitialState","submitMSISDNAction","createAsyncThunk","_b","extraParams","getState","dispatch","rejectWithValue","_f","_d","strategy","_e","config","_c","isHeaderEnrichmentSuccess","pinFlowCurrentState","_g","searchObj","country","toLowerCase","slug","includes","getInputValuePrefix","jsLinkResult","_j","_h","pac_analytics","visitor","genericJsLinkResult","gateway","tracker","advancedInFlow","submitMSISDN","_r","sent","callConfirm","__assign","RDS.Loading","ex","errorMsg_1","recedeInFlow","toString","message","msisdnSubmissionResult","redirectUrl","customEvent","location","href","storeMsisdn","then","success","catch","pinMaxLengthByOp","SA_MOBILY","SA_STC","SA_ZAIN","pin","userType","warn","ex_1","productUrl","setStrategyExtraData","PossibleTypes","PIN","redirectErrorTypes","_k","_l","waterfallRedirectUrl","redirect_url","_o","_m","handleWaterfallRedirect","_q","_p","submitPinAction","submitPIN","gatewayRedirectUrl","isAlreadySubscribed","ex_2","setTimeout","backToStartAction","_","identifyStrategy","countryCodes","PS","international","normalizedCountry","toUpperCase","countryCode","concat","pinFlowSlice","createSlice","name","reducers","extraReducers","builder","addCase","pending","fulfilled","action","payload","rejected","pinFlowReducer","reducer","actions"],"mappings":"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"}
|