ouisys-engine 5.0.110 → 5.0.113

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- import{__awaiter as e,__generator as r,__assign as t}from"tslib";import{createAsyncThunk as n,createSlice as a}from"@reduxjs/toolkit";import{S as o,L as i,F as c,N as s}from"./RemoteDataState-lcf8PfJd.js";import{l}from"./loadScriptInnerHtml-B6v2-IGn.js";import{searchToObject as d}from"./searchToObject.js";import{t as u}from"./tracker-DaaILhEr.js";import"pacman-client";import"uuid";var v=function(n){var a=n.window,o=n.slug,i=n.country,c=n.msisdn,s=n.device,l=n.offer,d=n.rockmanId,u=n.ip_range_name,v=n.search,m=n.extraParamsQs,f=n.email,y=n.password;return e(void 0,void 0,void 0,(function(){var e,n,p,g,w,_;return r(this,(function(r){return e=new URLSearchParams(t(t(t(t(t(t({action:"redirect",slug:o,country:i,device:s,offerId:l.toString(),rockman_id:d,page:encodeURIComponent(a.location.href),network_type:u?"":"wifi"},v&&{search:v}),(null===(_=null===(w=null===(g=a.pac_analytics)||void 0===g?void 0:g.visitor)||void 0===w?void 0:w.page)||void 0===_?void 0:_.includes("agency"))&&{evinaTi:d}),a.securityProcessId&&{securityProcessId:a.securityProcessId}),a.languageCode&&{language_code:a.languageCode}),f&&y?{email:f,password:y}:{msisdn:c}),m&&{extraParams:m})).toString(),n=a.DEV_BASE_URL||"",p="".concat(n,"/tallyman/v1/?").concat(e),[2,fetch(p).then((function(e){return e.json()}))]}))}))},m=function(n){var a=n.window,o=n.userDetails,i=n.extraConfig;return e(void 0,void 0,void 0,(function(){var e,n,c,s,l,u,v;return r(this,(function(r){return e="cc_number"in o,n=a.DEV_BASE_URL_CREDIT_CARD||"",c="".concat(n,"/api/v1"),"/frontend/initiate-payment-generic",s=d(a),l=t(t(t({rockman_id:null===(v=a.pac_analytics.visitor)||void 0===v?void 0:v.rockmanId,landing_page_url:a.location.href,service_id:e?null==i?void 0:i.serviceId:"2"},(null==i?void 0:i.slug)?{slug:"".concat(null==i?void 0:i.slug).concat((null==s?void 0:s.d_country)||"")}:{}),e?{}:{user_agent:a.navigator.userAgent,ip:a.pac_analytics.visitor.ip}),o),u={method:"POST",headers:new Headers({"Content-Type":"application/json"}),body:JSON.stringify(l)},[2,fetch("".concat(c).concat("/frontend/initiate-payment-generic"),u).then((function(e){return e.json()}))]}))}))};function f(t,n,a){var o,i,c,s,l;return e(this,void 0,void 0,(function(){var e,d,u,f,y,p,g,w,_,h,S,I;return r(this,(function(r){switch(r.label){case 0:return e=n.slug,d=n.country,u=n.device,f=n.serviceId,y=t.location.search.substr(1)||"",p=t.pac_analytics.visitor,g=p.rockmanId,w={serviceId:f,slug:e},(null===(c=null===(i=null===(o=null==t?void 0:t.pac_analytics)||void 0===o?void 0:o.visitor)||void 0===i?void 0:i.page)||void 0===c?void 0:c.includes("agency"))?[4,v({window:t,slug:e,country:d,device:u,offer:null===(l=null===(s=null==t?void 0:t.pac_analytics)||void 0===s?void 0:s.visitor)||void 0===l?void 0:l.offer,rockmanId:g,email:null==a?void 0:a.email,password:null==a?void 0:a.password,search:y})]:[3,2];case 1:return h=r.sent(),[3,4];case 2:return[4,m({window:t,userDetails:a,extraConfig:w})];case 3:h=r.sent(),r.label=4;case 4:if(!1===(_=h).success)throw S="ALREADY SUBSCRIBED"===_.message?"AlreadySubscribed":_.message,(I=new Error("".concat(S,":\n").concat(_.message))).type=S,I.errorId=_.errorId,console.error(I),I;return[2,{gateway_url:_.gateway_url||_.redirect_url,method:_.redirect_url?"redirection":_.method,html:_.html}]}}))}))}var y={currentState:{type:"USER_DETAILS_ENTRY",result:o({gateway_url:"https://www.google.com",method:"jslink"})}},p={currentState:{type:"USER_DETAILS_ENTRY",result:c({errorType:"AlreadySubscribed",error:"Already Subscribed"})}},g={currentState:{type:"USER_DETAILS_ENTRY",result:s()}},w=function(e){var r=d(e);if(!r["mock-flow"])return g;switch(r["current-state"]){case"user-details-entry-failure-state":return p;case"user-details-entry-success-state":return y;default:return console.error("Mock Flow not supported"),g}}(window),_=n("creditCardFlow/submitUserDetailsAction",(function(t,n){var a=t.window,i=t.userDetails,c=n.getState,s=n.rejectWithValue;return e(void 0,void 0,void 0,(function(){var e,t,n,d,v,m,y,p,g,w,_;return r(this,(function(r){switch(r.label){case 0:if(e=c(),!(null===(_=null===(w=null===(g=null==e?void 0:e.strategy)||void 0===g?void 0:g.currentState)||void 0===w?void 0:w.data)||void 0===_?void 0:_.config))return[2,s({errorType:"UnexpectedState"})];t=e.strategy.currentState.data.config,r.label=1;case 1:return r.trys.push([1,3,,4]),u.advancedInFlow("tallyman.v1-credit-card","cc-form-submitted",{email:null==i?void 0:i.email}),[4,f(a,t,i)];case 2:return n=r.sent(),d=n.gateway_url,v=n.method,m=n.html,u.advancedInFlow("tallyman.v1-credit-card","cc-form-submission-success",{email:null==i?void 0:i.email,gateway_url:d}),"jslink"===v&&d&&(u.advancedInFlow("tallyman.v1-credit-card","load-script-start",{gateway_url:d}),function(e){var r=e.url,t=e.key,n=e.isRecaptcha,a=void 0!==n&&n,o=e.callBack,i=e.id,c=void 0===i?"":i,s=document.createElement("script");s.type="text/javascript",s.src=r,s.id="injected_script_".concat(c);var d=document.getElementsByTagName("head")[0];d.insertBefore(s,d.firstChild),a&&(s.onload=function(){var e='\n grecaptcha.ready(function() {\n grecaptcha.execute("'.concat(t,'", {action: \'submit\'}).then(function(token) {\n // To be used by tallyman\n window.reCaptchaToken = token;\n console.log("-------" + token);\n });\n });\n ');l(e,!0)}),s.onerror=function(){console.error("Error loading script",r),o&&o()}}({id:"ecardon-credit-card",url:d,callBack:function(){u.advancedInFlow("tallyman.v1-credit-card","load-script-success",{gateway_url:d})}})),"redirection"===v&&d&&(u.customEvent("Flow","advance-auto","redirect-success",{redirect_url:d}),a.location.href=d),"html"===v&&m&&u.advancedInFlow("tallyman.v1-credit-card","get-html-success"),[2,{type:"USER_DETAILS_ENTRY",result:o({gateway_url:d,method:v,html:m})}];case 3:switch(y=r.sent(),console.warn(y),p=void 0,y.type){case"AlreadySubscribed":p="AlreadySubscribed";break;case"InvalidUserDetails":p="InvalidUserDetails";break;default:p="UnknownError"}return u.recedeInFlow("tallyman.v1-credit-card","cc-form-submission-failure",{email:null==i?void 0:i.email,errorType:p||y.type,errorId:(null==y?void 0:y.errorId)||""}),[2,s({errorType:p,error:y.toString(),errorId:(null==y?void 0:y.errorId)||""})];case 4:return[2]}}))}))})),h=a({name:"creditCardFlow",initialState:w,reducers:{},extraReducers:function(e){e.addCase(_.pending,(function(e){e.currentState={type:"USER_DETAILS_ENTRY",result:i()}})).addCase(_.fulfilled,(function(e,r){e.currentState=r.payload})).addCase(_.rejected,(function(e,r){e.currentState={type:"USER_DETAILS_ENTRY",result:c(r.payload)}}))}}),S=h.reducer;h.actions;var I=function(e){return e((function(e){return e.creditCardFlow.currentState}))};function E(e){var r=e.userDetailsEntry;return function(e){return e.type,r(e.result)}}export{E as creditCardFlowMatch,S as creditCardFlowReducer,_ as submitUserDetailsAction,I as useCreditCardFlowState};
1
+ import{__awaiter as e,__generator as r,__assign as t}from"tslib";import{createAsyncThunk as n,createSlice as a}from"@reduxjs/toolkit";import{S as o,L as i,F as c,N as s}from"./RemoteDataState-lcf8PfJd.js";import{l}from"./loadScriptInnerHtml-B6v2-IGn.js";import{searchToObject as d}from"./searchToObject.js";import{t as u}from"./tracker-DaaILhEr.js";import"pacman-client";import"uuid";var v=function(n){var a=n.window,o=n.slug,i=n.country,c=n.msisdn,s=n.device,l=n.offer,d=n.rockmanId,u=n.ip_range_name,v=n.search,m=n.extraParamsQs,f=n.email,g=n.password;return e(void 0,void 0,void 0,(function(){var e,n,p,y,w,h;return r(this,(function(r){return e=new URLSearchParams(t(t(t(t(t(t({action:"redirect",slug:o,country:i,device:s,offerId:l.toString(),rockman_id:d,page:encodeURIComponent(a.location.href),network_type:u?"":"wifi"},v&&{search:v}),(null===(h=null===(w=null===(y=a.pac_analytics)||void 0===y?void 0:y.visitor)||void 0===w?void 0:w.page)||void 0===h?void 0:h.includes("agency"))&&{evinaTi:d}),a.securityProcessId&&{securityProcessId:a.securityProcessId}),a.languageCode&&{language_code:a.languageCode}),f&&g?{email:f,password:g}:{msisdn:c}),m&&{extraParams:m})).toString(),n=a.DEV_BASE_URL||"",p="".concat(n,"/tallyman/v1/?").concat(e),[2,fetch(p).then((function(e){return e.json()}))]}))}))},m=function(n){var a=n.window,o=n.userDetails,i=n.extraConfig;return e(void 0,void 0,void 0,(function(){var e,n,c,s,l,u,v,m;return r(this,(function(r){return e="cc_number"in o,n=a.DEV_BASE_URL_CREDIT_CARD||"",c="".concat(n,"/api/v1"),"/frontend/initiate-payment-generic",s=d(a),l={timezone:(new Date).getTimezoneOffset(),browserColorDepth:a.screen.colorDepth,browserLanguage:navigator.language,browserScreenHeight:a.screen.height,browserScreenWidth:a.screen.width,userAgent:navigator.userAgent,browserJavaEnabled:!!navigator.javaEnabled&&navigator.javaEnabled(),browserJavascriptEnabled:!0},u=t(t(t(t({rockman_id:null===(m=a.pac_analytics.visitor)||void 0===m?void 0:m.rockmanId,landing_page_url:a.location.href,service_id:e?null==i?void 0:i.serviceId:"2"},(null==i?void 0:i.slug)?{slug:"".concat(null==i?void 0:i.slug).concat((null==s?void 0:s.d_country)||"")}:{}),e?{}:{user_agent:a.navigator.userAgent,ip:a.pac_analytics.visitor.ip}),{browserFingerprint:l}),o),v={method:"POST",headers:new Headers({"Content-Type":"application/json"}),body:JSON.stringify(u)},[2,fetch("".concat(c).concat("/frontend/initiate-payment-generic"),v).then((function(e){return e.json()}))]}))}))};function f(t,n,a){var o,i,c,s,l;return e(this,void 0,void 0,(function(){var e,d,u,f,g,p,y,w,h,_,S,b;return r(this,(function(r){switch(r.label){case 0:return e=n.slug,d=n.country,u=n.device,f=n.serviceId,g=t.location.search.substr(1)||"",p=t.pac_analytics.visitor,y=p.rockmanId,w={serviceId:f,slug:e},(null===(c=null===(i=null===(o=null==t?void 0:t.pac_analytics)||void 0===o?void 0:o.visitor)||void 0===i?void 0:i.page)||void 0===c?void 0:c.includes("agency"))?[4,v({window:t,slug:e,country:d,device:u,offer:null===(l=null===(s=null==t?void 0:t.pac_analytics)||void 0===s?void 0:s.visitor)||void 0===l?void 0:l.offer,rockmanId:y,email:null==a?void 0:a.email,password:null==a?void 0:a.password,search:g})]:[3,2];case 1:return _=r.sent(),[3,4];case 2:return[4,m({window:t,userDetails:a,extraConfig:w})];case 3:_=r.sent(),r.label=4;case 4:if(!1===(h=_).success)throw S="ALREADY SUBSCRIBED"===h.message?"AlreadySubscribed":h.message,(b=new Error("".concat(S,":\n").concat(h.message))).type=S,b.errorId=h.errorId,console.error(b),b;return[2,{gateway_url:h.gateway_url||h.redirect_url,method:h.redirect_url?"redirection":h.method,html:h.html}]}}))}))}var g={currentState:{type:"USER_DETAILS_ENTRY",result:o({gateway_url:"https://www.google.com",method:"jslink"})}},p={currentState:{type:"USER_DETAILS_ENTRY",result:c({errorType:"AlreadySubscribed",error:"Already Subscribed"})}},y={currentState:{type:"USER_DETAILS_ENTRY",result:s()}},w=function(e){var r=d(e);if(!r["mock-flow"])return y;switch(r["current-state"]){case"user-details-entry-failure-state":return p;case"user-details-entry-success-state":return g;default:return console.error("Mock Flow not supported"),y}}(window),h=n("creditCardFlow/submitUserDetailsAction",(function(t,n){var a=t.window,i=t.userDetails,c=n.getState,s=n.rejectWithValue;return e(void 0,void 0,void 0,(function(){var e,t,n,d,v,m,g,p,y,w,h;return r(this,(function(r){switch(r.label){case 0:if(e=c(),!(null===(h=null===(w=null===(y=null==e?void 0:e.strategy)||void 0===y?void 0:y.currentState)||void 0===w?void 0:w.data)||void 0===h?void 0:h.config))return[2,s({errorType:"UnexpectedState"})];t=e.strategy.currentState.data.config,r.label=1;case 1:return r.trys.push([1,3,,4]),u.advancedInFlow("tallyman.v1-credit-card","cc-form-submitted",{email:null==i?void 0:i.email}),[4,f(a,t,i)];case 2:return n=r.sent(),d=n.gateway_url,v=n.method,m=n.html,u.advancedInFlow("tallyman.v1-credit-card","cc-form-submission-success",{email:null==i?void 0:i.email,gateway_url:d}),"jslink"===v&&d&&(u.advancedInFlow("tallyman.v1-credit-card","load-script-start",{gateway_url:d}),function(e){var r=e.url,t=e.key,n=e.isRecaptcha,a=void 0!==n&&n,o=e.callBack,i=e.id,c=void 0===i?"":i,s=document.createElement("script");s.type="text/javascript",s.src=r,s.id="injected_script_".concat(c);var d=document.getElementsByTagName("head")[0];d.insertBefore(s,d.firstChild),a&&(s.onload=function(){var e='\n grecaptcha.ready(function() {\n grecaptcha.execute("'.concat(t,'", {action: \'submit\'}).then(function(token) {\n // To be used by tallyman\n window.reCaptchaToken = token;\n console.log("-------" + token);\n });\n });\n ');l(e,!0)}),s.onerror=function(){console.error("Error loading script",r),o&&o()}}({id:"ecardon-credit-card",url:d,callBack:function(){u.advancedInFlow("tallyman.v1-credit-card","load-script-success",{gateway_url:d})}})),"redirection"===v&&d&&(u.customEvent("Flow","advance-auto","redirect-success",{redirect_url:d}),a.location.href=d),"html"===v&&m&&u.advancedInFlow("tallyman.v1-credit-card","get-html-success"),[2,{type:"USER_DETAILS_ENTRY",result:o({gateway_url:d,method:v,html:m})}];case 3:switch(g=r.sent(),console.warn(g),p=void 0,g.type){case"AlreadySubscribed":p="AlreadySubscribed";break;case"InvalidUserDetails":p="InvalidUserDetails";break;default:p="UnknownError"}return u.recedeInFlow("tallyman.v1-credit-card","cc-form-submission-failure",{email:null==i?void 0:i.email,errorType:p||g.type,errorId:(null==g?void 0:g.errorId)||""}),[2,s({errorType:p,error:g.toString(),errorId:(null==g?void 0:g.errorId)||""})];case 4:return[2]}}))}))})),_=a({name:"creditCardFlow",initialState:w,reducers:{},extraReducers:function(e){e.addCase(h.pending,(function(e){e.currentState={type:"USER_DETAILS_ENTRY",result:i()}})).addCase(h.fulfilled,(function(e,r){e.currentState=r.payload})).addCase(h.rejected,(function(e,r){e.currentState={type:"USER_DETAILS_ENTRY",result:c(r.payload)}}))}}),S=_.reducer;_.actions;var b=function(e){return e((function(e){return e.creditCardFlow.currentState}))};function E(e){var r=e.userDetailsEntry;return function(e){return e.type,r(e.result)}}export{E as creditCardFlowMatch,S as creditCardFlowReducer,h as submitUserDetailsAction,b as useCreditCardFlowState};
2
2
  //# sourceMappingURL=creditCardFlow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"creditCardFlow.js","sources":["../src/utilities/loadScriptSrc.ts","../src/flows/creditCardFlow/api.ts","../src/flows/creditCardFlow/main.ts","../src/flows/creditCardFlow/creditCardFlowSlice.ts","../src/flows/creditCardFlow/hooks/useCreditCardFlowState.ts","../src/flows/creditCardFlow/match.ts"],"sourcesContent":["import { loadScriptInnerHtml } from './loadScriptInnerHtml';\n\n/**\n * Loads a script from the specified URL and optionally executes a reCAPTCHA if the `isRecaptcha` flag is set.\n *\n * @param {Object} options - An object containing the following properties:\n * - {string} url: The URL of the script to load.\n * - {string} [key]: The reCAPTCHA key to use for execution. (Optional)\n * - {boolean} [isRecaptcha]: Flag indicating whether to execute a reCAPTCHA. Defaults to false.\n * - {function} [callBack]: A callback function to be called if there is an error loading the script. (Optional)\n * - {string} [id]: The ID to assign to the injected script. Defaults to an empty string.\n * @return {void}\n */\nconst loadScriptSrc = ({\n url,\n key,\n isRecaptcha = false,\n callBack,\n id = ''\n}: {\n url: string;\n key?: string;\n isRecaptcha?: boolean;\n callBack?: () => void;\n id?: string;\n}) => {\n const script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = url;\n script.id = `injected_script_${id}`;\n const headElem = document.getElementsByTagName('head')[0];\n headElem.insertBefore(script, headElem.firstChild);\n\n if (isRecaptcha) {\n script.onload = () => {\n const scriptInner = `\n grecaptcha.ready(function() {\n grecaptcha.execute(\"${key}\", {action: 'submit'}).then(function(token) {\n // To be used by tallyman\n window.reCaptchaToken = token;\n console.log(\"-------\" + token);\n });\n });\n `;\n loadScriptInnerHtml(scriptInner, true);\n };\n }\n\n script.onerror = () => {\n console.error('Error loading script', url);\n if (callBack) {\n callBack();\n }\n };\n};\n\nexport default loadScriptSrc;\n","import { IUserDetails, IUserDetailsEcardon, IUserDetailsSubmissionResult } from '../../sharedFlowTypes/CreditCardTypes';\nimport { IMSISDNSubmissionResult } from '../../sharedFlowTypes/MoRedirTypes';\nimport { searchToObject } from '../../utilities/searchToObject';\n\nconst redirect = async ({\n window,\n slug,\n country,\n msisdn,\n device,\n offer,\n rockmanId,\n ip_range_name,\n search,\n extraParamsQs,\n email,\n password\n}: {\n window: Window;\n slug: string;\n country: string;\n msisdn?: string;\n device: string;\n offer: string;\n rockmanId: string;\n ip_range_name?: string;\n search: string;\n extraParamsQs?: string;\n email?: string;\n password?: string;\n}): Promise<IMSISDNSubmissionResult> => {\n const params = new URLSearchParams({\n action: 'redirect',\n slug,\n country,\n device,\n offerId: offer.toString(),\n rockman_id: rockmanId,\n page: encodeURIComponent(window.location.href),\n network_type: ip_range_name ? '' : 'wifi',\n ...(search && { search }),\n ...(window.pac_analytics?.visitor?.page?.includes('agency') && { evinaTi: rockmanId }),\n ...(window.securityProcessId && { securityProcessId: window.securityProcessId }),\n ...(window.languageCode && { language_code: window.languageCode }),\n ...(email && password ? { email, password } : { msisdn }),\n ...(extraParamsQs && { extraParams: extraParamsQs })\n }).toString();\n\n const host = window.DEV_BASE_URL || '';\n const url = `${host}/tallyman/v1/?${params}`;\n\n return fetch(url).then((x) => x.json());\n};\n\nconst creditCardPayment = async ({\n window,\n userDetails,\n extraConfig\n}: {\n window: Window;\n userDetails: IUserDetails | IUserDetailsEcardon;\n extraConfig?: { serviceId: string; slug: string };\n}): Promise<IUserDetailsSubmissionResult> => {\n const isMaxPay = 'cc_number' in userDetails;\n const host = window.DEV_BASE_URL_CREDIT_CARD || '';\n const apiBaseURL = `${host}/api/v1`;\n const apiPath = '/frontend/initiate-payment-generic';\n const search = searchToObject(window) as any;\n // Common userDetails properties\n const commonDetails = {\n rockman_id: window.pac_analytics.visitor?.rockmanId,\n landing_page_url: window.location.href,\n // Use conditional operation for service_id as it varies\n service_id: isMaxPay ? extraConfig?.serviceId : '2',\n ...(extraConfig?.slug ? { slug: `${extraConfig?.slug}${search?.d_country || ''}` } : {}),\n ...(isMaxPay ? {} : { user_agent: window.navigator.userAgent, ip: window.pac_analytics.visitor.ip }),\n ...userDetails\n };\n\n const requestOptions = {\n method: 'POST',\n headers: new Headers({ 'Content-Type': 'application/json' }),\n body: JSON.stringify(commonDetails)\n };\n\n return fetch(`${apiBaseURL}${apiPath}`, requestOptions).then((response) => response.json());\n};\n\nexport { redirect, creditCardPayment };\n","import { IError } from '../../common-types/IError';\nimport { IUserDetails, IUserDetailsEcardon, IUserDetailsSubmissionResult } from '../../sharedFlowTypes/CreditCardTypes';\nimport { IConfig } from '../../sharedFlowTypes/StrategyTypes';\nimport { creditCardPayment, redirect } from './api';\n\nexport async function submitUserDetails(\n window: Window,\n config: IConfig,\n userDetails: IUserDetails | IUserDetailsEcardon\n): Promise<{\n method: string;\n gateway_url?: string;\n html?: string;\n}> {\n const { slug, country, device, serviceId } = config;\n const search = window.location.search.substr(1) || '';\n const { visitor } = window.pac_analytics;\n\n const { rockmanId } = visitor;\n const extraConfig = { serviceId, slug };\n const result: IUserDetailsSubmissionResult = window?.pac_analytics?.visitor?.page?.includes('agency')\n ? await redirect({\n window,\n slug,\n country,\n device,\n offer: window?.pac_analytics?.visitor?.offer,\n rockmanId,\n email: userDetails?.email,\n password: userDetails?.password,\n search\n })\n : await creditCardPayment({ window, userDetails, extraConfig });\n\n if (result.success === false) {\n const type = result.message === 'ALREADY SUBSCRIBED' ? 'AlreadySubscribed' : result.message;\n const error = new Error(`${type}:\\n${result.message}`) as IError & { type: string };\n error.type = type;\n error.errorId = result.errorId;\n console.error(error);\n throw error;\n } else {\n return {\n gateway_url: result.gateway_url || result.redirect_url,\n method: result.redirect_url ? 'redirection' : result.method,\n html: result.html\n };\n }\n}\n","import { createAsyncThunk, createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport * as RDS from '../../common-types/RemoteDataState';\nimport {\n CreditCardFlowState,\n IUserDetails,\n IUserDetailsEcardon,\n SubmitUserDetailsErrorTypes,\n SubmitUserDetailsFailure,\n SubmitUserDetailsSuccess,\n USERDETAILSEntryState\n} from '../../sharedFlowTypes/CreditCardTypes';\nimport { IMockFlowParams, RootState } from '../../sharedFlowTypes/StrategyTypes';\nimport loadScriptSrc from '../../utilities/loadScriptSrc';\nimport { searchToObject } from '../../utilities/searchToObject';\nimport { tracker } from '../../utilities/tracker';\nimport { submitUserDetails } from './main';\n\nconst mockedUserDetailsEntrySuccess: CreditCardFlowState = {\n currentState: {\n type: 'USER_DETAILS_ENTRY',\n result: RDS.Success<SubmitUserDetailsFailure, SubmitUserDetailsSuccess>({\n gateway_url: 'https://www.google.com',\n method: 'jslink'\n })\n }\n};\n\nconst mockedUserDetailsEntryFailure: CreditCardFlowState = {\n currentState: {\n type: 'USER_DETAILS_ENTRY',\n result: RDS.Failure<SubmitUserDetailsFailure, SubmitUserDetailsSuccess>({\n errorType: 'AlreadySubscribed',\n error: 'Already Subscribed'\n })\n }\n};\n\nconst defaultInitialState: CreditCardFlowState = {\n currentState: {\n type: 'USER_DETAILS_ENTRY',\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 'user-details-entry-failure-state':\n return mockedUserDetailsEntryFailure;\n case 'user-details-entry-success-state':\n return mockedUserDetailsEntrySuccess;\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 SubmitUserDetailsArgs {\n window: Window;\n userDetails: IUserDetails | IUserDetailsEcardon;\n}\n/**\n * submitUserDetailsAction\n * @returns {type: ' 'pinFlow/submitUserDetailsAction', payload: {type: PossibleTypes, result: USERDETAILSEntryState}}\n \n * Calls redirect or max api and returns a url\n * \n */\nexport const submitUserDetailsAction = createAsyncThunk<\n USERDETAILSEntryState,\n SubmitUserDetailsArgs,\n {\n rejectValue: SubmitUserDetailsFailure;\n }\n>('creditCardFlow/submitUserDetailsAction', async ({ window, userDetails }, { 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 Credit Card API\n tracker.advancedInFlow('tallyman.v1-credit-card', 'cc-form-submitted', { email: userDetails?.email });\n const { gateway_url, method, html } = await submitUserDetails(window, config, userDetails);\n tracker.advancedInFlow('tallyman.v1-credit-card', 'cc-form-submission-success', {\n email: userDetails?.email,\n gateway_url\n });\n // Start Credit Card API\n\n if (method === 'jslink' && gateway_url) {\n tracker.advancedInFlow('tallyman.v1-credit-card', 'load-script-start', { gateway_url });\n loadScriptSrc({\n id: 'ecardon-credit-card',\n url: gateway_url,\n callBack: () => {\n tracker.advancedInFlow('tallyman.v1-credit-card', 'load-script-success', { gateway_url });\n }\n });\n }\n\n if (method === 'redirection' && gateway_url) {\n tracker.customEvent('Flow', 'advance-auto', 'redirect-success', { redirect_url: gateway_url });\n window.location.href = gateway_url;\n }\n\n if (method === 'html' && html) {\n tracker.advancedInFlow('tallyman.v1-credit-card', 'get-html-success');\n }\n return {\n type: 'USER_DETAILS_ENTRY',\n result: RDS.Success<SubmitUserDetailsFailure, SubmitUserDetailsSuccess>({ gateway_url, method, html })\n };\n } catch (ex) {\n console.warn(ex);\n let errorType: SubmitUserDetailsErrorTypes;\n switch (ex.type) {\n case 'AlreadySubscribed':\n errorType = 'AlreadySubscribed';\n break;\n case 'InvalidUserDetails':\n errorType = 'InvalidUserDetails';\n break;\n default:\n errorType = 'UnknownError';\n }\n\n tracker.recedeInFlow('tallyman.v1-credit-card', 'cc-form-submission-failure', {\n email: userDetails?.email,\n errorType: errorType || ex.type,\n errorId: ex?.errorId || ''\n });\n\n return rejectWithValue({\n errorType,\n error: ex.toString(),\n errorId: ex?.errorId || ''\n });\n }\n});\n\nconst creditCardFlowSlice = createSlice({\n name: 'creditCardFlow',\n initialState,\n reducers: {},\n extraReducers: (builder) => {\n builder\n .addCase(submitUserDetailsAction.pending, (state) => {\n state.currentState = { type: 'USER_DETAILS_ENTRY', result: RDS.Loading() };\n })\n .addCase(submitUserDetailsAction.fulfilled, (state, action: PayloadAction<USERDETAILSEntryState>) => {\n state.currentState = action.payload;\n })\n .addCase(submitUserDetailsAction.rejected, (state, action: PayloadAction<SubmitUserDetailsFailure>) => {\n state.currentState = {\n type: 'USER_DETAILS_ENTRY',\n result: RDS.Failure(action.payload)\n };\n });\n }\n});\n\n// Export reducers and actions\nexport const { reducer: creditCardFlowReducer, actions: creditCardFlowActions } = creditCardFlowSlice;\n\n// If you have selectors or thunks related to this slice, export them as named exports as well\nexport const selectCreditCardFlowState = (state: any) => state.creditCardFlow;\n","import { useSelector as IuseSelector } from 'react-redux';\nimport { RootState } from '../../../sharedFlowTypes/StrategyTypes';\n\nexport const useCreditCardFlowState = (useSelector: typeof IuseSelector) => {\n const currentState = useSelector((state: RootState) => state.creditCardFlow.currentState);\n return currentState;\n};\n","import * as RDS from '../../common-types/RemoteDataState';\nimport {\n CreditCardFlowCurrentState,\n SubmitUserDetailsFailure,\n SubmitUserDetailsSuccess\n} from '../../sharedFlowTypes/CreditCardTypes';\n\nfunction creditCardFlowMatch<R>({\n userDetailsEntry\n}: {\n userDetailsEntry: (rds: RDS.RemoteDataState<SubmitUserDetailsFailure, SubmitUserDetailsSuccess>) => R;\n}): (state: CreditCardFlowCurrentState) => R {\n return (state) => {\n switch (state.type) {\n case 'USER_DETAILS_ENTRY':\n return userDetailsEntry(state.result);\n default:\n // TODO - this should be an error or something\n return userDetailsEntry(state.result);\n }\n };\n}\n\nexport { creditCardFlowMatch };\n"],"names":["redirect","_a","window","slug","country","msisdn","device","offer","rockmanId","ip_range_name","search","extraParamsQs","email","password","params","URLSearchParams","__assign","action","offerId","toString","rockman_id","page","encodeURIComponent","location","href","network_type","_d","_c","_b","pac_analytics","visitor","includes","evinaTi","securityProcessId","languageCode","language_code","extraParams","host","DEV_BASE_URL","url","concat","fetch","then","x","json","creditCardPayment","userDetails","extraConfig","isMaxPay","DEV_BASE_URL_CREDIT_CARD","apiBaseURL","searchToObject","commonDetails","landing_page_url","service_id","serviceId","d_country","user_agent","navigator","userAgent","ip","requestOptions","method","headers","Headers","body","JSON","stringify","response","submitUserDetails","config","substr","_e","_f","_g","result","success","type","message","error","Error","errorId","console","gateway_url","redirect_url","html","mockedUserDetailsEntrySuccess","currentState","RDS.Success","mockedUserDetailsEntryFailure","RDS.Failure","errorType","defaultInitialState","RDS.NothingYet","initialState","setInitialState","submitUserDetailsAction","createAsyncThunk","getState","rejectWithValue","state","strategy","data","tracker","advancedInFlow","sent","gateway_url_1","key","isRecaptcha","callBack","id","script","document","createElement","src","headElem","getElementsByTagName","insertBefore","firstChild","onload","scriptInner","loadScriptInnerHtml","onerror","loadScriptSrc","customEvent","warn","ex_1","recedeInFlow","creditCardFlowSlice","createSlice","name","reducers","extraReducers","builder","addCase","pending","RDS.Loading","fulfilled","payload","rejected","creditCardFlowReducer","reducer","actions","useCreditCardFlowState","useSelector","creditCardFlow","creditCardFlowMatch","userDetailsEntry"],"mappings":"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"}
1
+ {"version":3,"file":"creditCardFlow.js","sources":["../src/utilities/loadScriptSrc.ts","../src/flows/creditCardFlow/api.ts","../src/flows/creditCardFlow/main.ts","../src/flows/creditCardFlow/creditCardFlowSlice.ts","../src/flows/creditCardFlow/hooks/useCreditCardFlowState.ts","../src/flows/creditCardFlow/match.ts"],"sourcesContent":["import { loadScriptInnerHtml } from './loadScriptInnerHtml';\n\n/**\n * Loads a script from the specified URL and optionally executes a reCAPTCHA if the `isRecaptcha` flag is set.\n *\n * @param {Object} options - An object containing the following properties:\n * - {string} url: The URL of the script to load.\n * - {string} [key]: The reCAPTCHA key to use for execution. (Optional)\n * - {boolean} [isRecaptcha]: Flag indicating whether to execute a reCAPTCHA. Defaults to false.\n * - {function} [callBack]: A callback function to be called if there is an error loading the script. (Optional)\n * - {string} [id]: The ID to assign to the injected script. Defaults to an empty string.\n * @return {void}\n */\nconst loadScriptSrc = ({\n url,\n key,\n isRecaptcha = false,\n callBack,\n id = ''\n}: {\n url: string;\n key?: string;\n isRecaptcha?: boolean;\n callBack?: () => void;\n id?: string;\n}) => {\n const script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = url;\n script.id = `injected_script_${id}`;\n const headElem = document.getElementsByTagName('head')[0];\n headElem.insertBefore(script, headElem.firstChild);\n\n if (isRecaptcha) {\n script.onload = () => {\n const scriptInner = `\n grecaptcha.ready(function() {\n grecaptcha.execute(\"${key}\", {action: 'submit'}).then(function(token) {\n // To be used by tallyman\n window.reCaptchaToken = token;\n console.log(\"-------\" + token);\n });\n });\n `;\n loadScriptInnerHtml(scriptInner, true);\n };\n }\n\n script.onerror = () => {\n console.error('Error loading script', url);\n if (callBack) {\n callBack();\n }\n };\n};\n\nexport default loadScriptSrc;\n","import { IUserDetails, IUserDetailsEcardon, IUserDetailsSubmissionResult } from '../../sharedFlowTypes/CreditCardTypes';\nimport { IMSISDNSubmissionResult } from '../../sharedFlowTypes/MoRedirTypes';\nimport { searchToObject } from '../../utilities/searchToObject';\n\nconst redirect = async ({\n window,\n slug,\n country,\n msisdn,\n device,\n offer,\n rockmanId,\n ip_range_name,\n search,\n extraParamsQs,\n email,\n password\n}: {\n window: Window;\n slug: string;\n country: string;\n msisdn?: string;\n device: string;\n offer: string;\n rockmanId: string;\n ip_range_name?: string;\n search: string;\n extraParamsQs?: string;\n email?: string;\n password?: string;\n}): Promise<IMSISDNSubmissionResult> => {\n const params = new URLSearchParams({\n action: 'redirect',\n slug,\n country,\n device,\n offerId: offer.toString(),\n rockman_id: rockmanId,\n page: encodeURIComponent(window.location.href),\n network_type: ip_range_name ? '' : 'wifi',\n ...(search && { search }),\n ...(window.pac_analytics?.visitor?.page?.includes('agency') && { evinaTi: rockmanId }),\n ...(window.securityProcessId && { securityProcessId: window.securityProcessId }),\n ...(window.languageCode && { language_code: window.languageCode }),\n ...(email && password ? { email, password } : { msisdn }),\n ...(extraParamsQs && { extraParams: extraParamsQs })\n }).toString();\n\n const host = window.DEV_BASE_URL || '';\n const url = `${host}/tallyman/v1/?${params}`;\n\n return fetch(url).then((x) => x.json());\n};\n\nconst creditCardPayment = async ({\n window,\n userDetails,\n extraConfig\n}: {\n window: Window;\n userDetails: IUserDetails | IUserDetailsEcardon;\n extraConfig?: { serviceId: string; slug: string };\n}): Promise<IUserDetailsSubmissionResult> => {\n const isMaxPay = 'cc_number' in userDetails;\n const host = window.DEV_BASE_URL_CREDIT_CARD || '';\n const apiBaseURL = `${host}/api/v1`;\n const apiPath = '/frontend/initiate-payment-generic';\n const search = searchToObject(window) as any;\n // Common userDetails properties\n\n const browserFingerprint = {\n timezone: new Date().getTimezoneOffset(),\n browserColorDepth: window.screen.colorDepth,\n browserLanguage: navigator.language,\n browserScreenHeight: window.screen.height,\n browserScreenWidth: window.screen.width,\n userAgent: navigator.userAgent,\n browserJavaEnabled: navigator.javaEnabled ? navigator.javaEnabled() : false,\n browserJavascriptEnabled: true\n };\n const commonDetails = {\n rockman_id: window.pac_analytics.visitor?.rockmanId,\n landing_page_url: window.location.href,\n // Use conditional operation for service_id as it varies\n service_id: isMaxPay ? extraConfig?.serviceId : '2',\n ...(extraConfig?.slug ? { slug: `${extraConfig?.slug}${search?.d_country || ''}` } : {}),\n ...(isMaxPay ? {} : { user_agent: window.navigator.userAgent, ip: window.pac_analytics.visitor.ip }),\n browserFingerprint,\n ...userDetails\n };\n\n const requestOptions = {\n method: 'POST',\n headers: new Headers({ 'Content-Type': 'application/json' }),\n body: JSON.stringify(commonDetails)\n };\n\n return fetch(`${apiBaseURL}${apiPath}`, requestOptions).then((response) => response.json());\n};\n\nexport { redirect, creditCardPayment };\n","import { IError } from '../../common-types/IError';\nimport { IUserDetails, IUserDetailsEcardon, IUserDetailsSubmissionResult } from '../../sharedFlowTypes/CreditCardTypes';\nimport { IConfig } from '../../sharedFlowTypes/StrategyTypes';\nimport { creditCardPayment, redirect } from './api';\n\nexport async function submitUserDetails(\n window: Window,\n config: IConfig,\n userDetails: IUserDetails | IUserDetailsEcardon\n): Promise<{\n method: string;\n gateway_url?: string;\n html?: string;\n}> {\n const { slug, country, device, serviceId } = config;\n const search = window.location.search.substr(1) || '';\n const { visitor } = window.pac_analytics;\n\n const { rockmanId } = visitor;\n const extraConfig = { serviceId, slug };\n const result: IUserDetailsSubmissionResult = window?.pac_analytics?.visitor?.page?.includes('agency')\n ? await redirect({\n window,\n slug,\n country,\n device,\n offer: window?.pac_analytics?.visitor?.offer,\n rockmanId,\n email: userDetails?.email,\n password: userDetails?.password,\n search\n })\n : await creditCardPayment({ window, userDetails, extraConfig });\n\n if (result.success === false) {\n const type = result.message === 'ALREADY SUBSCRIBED' ? 'AlreadySubscribed' : result.message;\n const error = new Error(`${type}:\\n${result.message}`) as IError & { type: string };\n error.type = type;\n error.errorId = result.errorId;\n console.error(error);\n throw error;\n } else {\n return {\n gateway_url: result.gateway_url || result.redirect_url,\n method: result.redirect_url ? 'redirection' : result.method,\n html: result.html\n };\n }\n}\n","import { createAsyncThunk, createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport * as RDS from '../../common-types/RemoteDataState';\nimport {\n CreditCardFlowState,\n IUserDetails,\n IUserDetailsEcardon,\n SubmitUserDetailsErrorTypes,\n SubmitUserDetailsFailure,\n SubmitUserDetailsSuccess,\n USERDETAILSEntryState\n} from '../../sharedFlowTypes/CreditCardTypes';\nimport { IMockFlowParams, RootState } from '../../sharedFlowTypes/StrategyTypes';\nimport loadScriptSrc from '../../utilities/loadScriptSrc';\nimport { searchToObject } from '../../utilities/searchToObject';\nimport { tracker } from '../../utilities/tracker';\nimport { submitUserDetails } from './main';\n\nconst mockedUserDetailsEntrySuccess: CreditCardFlowState = {\n currentState: {\n type: 'USER_DETAILS_ENTRY',\n result: RDS.Success<SubmitUserDetailsFailure, SubmitUserDetailsSuccess>({\n gateway_url: 'https://www.google.com',\n method: 'jslink'\n })\n }\n};\n\nconst mockedUserDetailsEntryFailure: CreditCardFlowState = {\n currentState: {\n type: 'USER_DETAILS_ENTRY',\n result: RDS.Failure<SubmitUserDetailsFailure, SubmitUserDetailsSuccess>({\n errorType: 'AlreadySubscribed',\n error: 'Already Subscribed'\n })\n }\n};\n\nconst defaultInitialState: CreditCardFlowState = {\n currentState: {\n type: 'USER_DETAILS_ENTRY',\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 'user-details-entry-failure-state':\n return mockedUserDetailsEntryFailure;\n case 'user-details-entry-success-state':\n return mockedUserDetailsEntrySuccess;\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 SubmitUserDetailsArgs {\n window: Window;\n userDetails: IUserDetails | IUserDetailsEcardon;\n}\n/**\n * submitUserDetailsAction\n * @returns {type: ' 'pinFlow/submitUserDetailsAction', payload: {type: PossibleTypes, result: USERDETAILSEntryState}}\n \n * Calls redirect or max api and returns a url\n * \n */\nexport const submitUserDetailsAction = createAsyncThunk<\n USERDETAILSEntryState,\n SubmitUserDetailsArgs,\n {\n rejectValue: SubmitUserDetailsFailure;\n }\n>('creditCardFlow/submitUserDetailsAction', async ({ window, userDetails }, { 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 Credit Card API\n tracker.advancedInFlow('tallyman.v1-credit-card', 'cc-form-submitted', { email: userDetails?.email });\n const { gateway_url, method, html } = await submitUserDetails(window, config, userDetails);\n tracker.advancedInFlow('tallyman.v1-credit-card', 'cc-form-submission-success', {\n email: userDetails?.email,\n gateway_url\n });\n // Start Credit Card API\n\n if (method === 'jslink' && gateway_url) {\n tracker.advancedInFlow('tallyman.v1-credit-card', 'load-script-start', { gateway_url });\n loadScriptSrc({\n id: 'ecardon-credit-card',\n url: gateway_url,\n callBack: () => {\n tracker.advancedInFlow('tallyman.v1-credit-card', 'load-script-success', { gateway_url });\n }\n });\n }\n\n if (method === 'redirection' && gateway_url) {\n tracker.customEvent('Flow', 'advance-auto', 'redirect-success', { redirect_url: gateway_url });\n window.location.href = gateway_url;\n }\n\n if (method === 'html' && html) {\n tracker.advancedInFlow('tallyman.v1-credit-card', 'get-html-success');\n }\n return {\n type: 'USER_DETAILS_ENTRY',\n result: RDS.Success<SubmitUserDetailsFailure, SubmitUserDetailsSuccess>({ gateway_url, method, html })\n };\n } catch (ex) {\n console.warn(ex);\n let errorType: SubmitUserDetailsErrorTypes;\n switch (ex.type) {\n case 'AlreadySubscribed':\n errorType = 'AlreadySubscribed';\n break;\n case 'InvalidUserDetails':\n errorType = 'InvalidUserDetails';\n break;\n default:\n errorType = 'UnknownError';\n }\n\n tracker.recedeInFlow('tallyman.v1-credit-card', 'cc-form-submission-failure', {\n email: userDetails?.email,\n errorType: errorType || ex.type,\n errorId: ex?.errorId || ''\n });\n\n return rejectWithValue({\n errorType,\n error: ex.toString(),\n errorId: ex?.errorId || ''\n });\n }\n});\n\nconst creditCardFlowSlice = createSlice({\n name: 'creditCardFlow',\n initialState,\n reducers: {},\n extraReducers: (builder) => {\n builder\n .addCase(submitUserDetailsAction.pending, (state) => {\n state.currentState = { type: 'USER_DETAILS_ENTRY', result: RDS.Loading() };\n })\n .addCase(submitUserDetailsAction.fulfilled, (state, action: PayloadAction<USERDETAILSEntryState>) => {\n state.currentState = action.payload;\n })\n .addCase(submitUserDetailsAction.rejected, (state, action: PayloadAction<SubmitUserDetailsFailure>) => {\n state.currentState = {\n type: 'USER_DETAILS_ENTRY',\n result: RDS.Failure(action.payload)\n };\n });\n }\n});\n\n// Export reducers and actions\nexport const { reducer: creditCardFlowReducer, actions: creditCardFlowActions } = creditCardFlowSlice;\n\n// If you have selectors or thunks related to this slice, export them as named exports as well\nexport const selectCreditCardFlowState = (state: any) => state.creditCardFlow;\n","import { useSelector as IuseSelector } from 'react-redux';\nimport { RootState } from '../../../sharedFlowTypes/StrategyTypes';\n\nexport const useCreditCardFlowState = (useSelector: typeof IuseSelector) => {\n const currentState = useSelector((state: RootState) => state.creditCardFlow.currentState);\n return currentState;\n};\n","import * as RDS from '../../common-types/RemoteDataState';\nimport {\n CreditCardFlowCurrentState,\n SubmitUserDetailsFailure,\n SubmitUserDetailsSuccess\n} from '../../sharedFlowTypes/CreditCardTypes';\n\nfunction creditCardFlowMatch<R>({\n userDetailsEntry\n}: {\n userDetailsEntry: (rds: RDS.RemoteDataState<SubmitUserDetailsFailure, SubmitUserDetailsSuccess>) => R;\n}): (state: CreditCardFlowCurrentState) => R {\n return (state) => {\n switch (state.type) {\n case 'USER_DETAILS_ENTRY':\n return userDetailsEntry(state.result);\n default:\n // TODO - this should be an error or something\n return userDetailsEntry(state.result);\n }\n };\n}\n\nexport { creditCardFlowMatch };\n"],"names":["redirect","_a","window","slug","country","msisdn","device","offer","rockmanId","ip_range_name","search","extraParamsQs","email","password","params","URLSearchParams","__assign","action","offerId","toString","rockman_id","page","encodeURIComponent","location","href","network_type","_d","_c","_b","pac_analytics","visitor","includes","evinaTi","securityProcessId","languageCode","language_code","extraParams","host","DEV_BASE_URL","url","concat","fetch","then","x","json","creditCardPayment","userDetails","extraConfig","isMaxPay","DEV_BASE_URL_CREDIT_CARD","apiBaseURL","searchToObject","browserFingerprint","timezone","Date","getTimezoneOffset","browserColorDepth","screen","colorDepth","browserLanguage","navigator","language","browserScreenHeight","height","browserScreenWidth","width","userAgent","browserJavaEnabled","javaEnabled","browserJavascriptEnabled","commonDetails","landing_page_url","service_id","serviceId","d_country","user_agent","ip","requestOptions","method","headers","Headers","body","JSON","stringify","response","submitUserDetails","config","substr","_e","_f","_g","result","success","type","message","error","Error","errorId","console","gateway_url","redirect_url","html","mockedUserDetailsEntrySuccess","currentState","RDS.Success","mockedUserDetailsEntryFailure","RDS.Failure","errorType","defaultInitialState","RDS.NothingYet","initialState","setInitialState","submitUserDetailsAction","createAsyncThunk","getState","rejectWithValue","state","strategy","data","tracker","advancedInFlow","sent","gateway_url_1","key","isRecaptcha","callBack","id","script","document","createElement","src","headElem","getElementsByTagName","insertBefore","firstChild","onload","scriptInner","loadScriptInnerHtml","onerror","loadScriptSrc","customEvent","warn","ex_1","recedeInFlow","creditCardFlowSlice","createSlice","name","reducers","extraReducers","builder","addCase","pending","RDS.Loading","fulfilled","payload","rejected","creditCardFlowReducer","reducer","actions","useCreditCardFlowState","useSelector","creditCardFlow","creditCardFlowMatch","userDetailsEntry"],"mappings":"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"}
package/dist/pinFlow.js CHANGED
@@ -1,2 +1,2 @@
1
- import{__awaiter as r,__generator as e,__read as t,__assign as n}from"tslib";import{createAsyncThunk as i,createSlice as a}from"@reduxjs/toolkit";import{N as o,L as s,S as c,F as u}from"./RemoteDataState-lcf8PfJd.js";import{i as d,c as l,P as p}from"./strategySlice-BfNZvJIC.js";import{searchToObject as v}from"./searchToObject.js";import{s as f}from"./storeMsisdn-Cjq8_qYH.js";import{t as m}from"./tracker-DaaILhEr.js";import{b as y}from"./api-geirVksI.js";import{l as S,r as w,a as g}from"./helpers-xPhGBX-B.js";import{l as _}from"./loadScriptInnerHtml-B6v2-IGn.js";import{c as h}from"./cleanSearchParams-Dl7ZDlew.js";import"./getConfig.js";import"./formatNumberToE164-DaAFvpKD.js";import"pacman-client";import"uuid";var I=function(r){return r((function(r){return r.pinFlow.currentState}))};function b(r){var e=r.msisdnEntry,t=r.pinEntry;return function(r){switch(r.type){case"MSISDNEntry":return e(r.result);case"PINEntry":return t(r.result,r.data);default:throw new Error("Invalid State")}}}var E=function(r){return"be"===r?"undefined"!=typeof window&&!0===window.shouldBlock?"&is-clean-traffic=false":"&is-clean-traffic=true":""},k=function(n){var i=n.window,a=n.country,o=n.slug,s=n.device,c=n.offer,u=n.msisdn,d=n.rockmanId,l=n.extraParams,p=n.search,v=n.uniqid,f=n.evinaTid;return r(void 0,void 0,void 0,(function(){var r,n,m,y,S,w,g;return e(this,(function(e){return r=E(a),n="&".concat(Object.keys(l).map((function(r){return l[r]?"".concat(r,"=").concat(l[r]):""})).filter(Boolean).join("&")),p=h(p),m={action:"trigger-pin",country:a,slug:o,device:s,offerId:c,msisdn:u,rockman_id:d,sam_evina_tid:f,page:encodeURIComponent(null===(g=null==i?void 0:i.location)||void 0===g?void 0:g.href),language_code:i.languageCode||"",partner_transaction_id:i.partner_transaction_id||"",partner_timestamp:i.partner_timestamp||"",partner_cid:i.partner_cid||"",uniqid:v||"",antifraud_id:i.antifraud_id||"",antifraud_id_js_code:i.antifraud_id_js_code||"",antifraud_id_js_link:i.antifraud_id_js_link||"",zain_antifraud_id:i.zain_antifraud_id||"",korek_antifraud_id:i.korek_antifraud_id||""},y=Object.entries(m).filter((function(r){var e=t(r,2);return e[0],e[1]})).map((function(r){var e=t(r,2),n=e[0],i=e[1];return"".concat(n,"=").concat(i)})).join("&"),S=i.DEV_BASE_URL||"",w="".concat(S,"/tallyman/v1/?").concat(y).concat(r).concat(n).concat(p?"&".concat(p):""),[2,fetch(w).then((function(r){return r.json()}))]}))}))},U=function(n){var i=n.window,a=n.country,o=n.slug,s=n.device,c=n.offer,u=n.rockmanId,d=n.pin,l=n.extraParams,p=n.uniqid,v=n.evinaTid,f=n.search;return r(void 0,void 0,void 0,(function(){var r,n,m,S,w,g,_;return e(this,(function(e){return r=E(a),n="&".concat(Object.keys(l).map((function(r){return"".concat(r,"=").concat(l[r])})).join("&")),f=h(f),m={action:"verify-pin",country:y(a),slug:o,device:s,offerId:c,rockman_id:u,pin:d,page:encodeURIComponent(null===(_=null==i?void 0:i.location)||void 0===_?void 0:_.href),language_code:i.languageCode||"",ClickID:i.antifraud_click_id||"",partner_cid:i.partner_cid||"",sam_evina_tid:v,uniqid:p,antifraud_id_js_code:i.antifraud_id_js_code||"",antifraud_id_js_link:i.antifraud_id_js_link||"",zain_antifraud_id:i.zain_antifraud_id||"",korek_antifraud_id:i.korek_antifraud_id||""},S=Object.entries(m).filter((function(r){var e=t(r,2);return e[0],e[1]})).map((function(r){var e=t(r,2),n=e[0],i=e[1];return"".concat(n,"=").concat(i)})).join("&"),w=i.DEV_BASE_URL||"",g="".concat(w,"/tallyman/v1/?").concat(S).concat(r).concat(n).concat(f?"&".concat(f):""),[2,fetch(g).then((function(r){return r.json()}))]}))}))},N=function(t){var i=t.window,a=t.country,o=t.slug,s=t.device,c=t.offer,u=t.rockmanId,d=t.operator,l=t.uniqid;return r(void 0,void 0,void 0,(function(){var r,t,p,v,f;return e(this,(function(e){return r=i.location.href,t=i.pac_analytics.visitor.ip,p=new URLSearchParams(n(n({action:"mcp-shield",country:a,slug:o,device:s,offerId:c.toString(),rockman_id:u,client_lpu:r},d&&{operator:d}),l&&{uniqid:l})),t&&p.append("client_ip",t),v=i.DEV_BASE_URL||"",f="".concat(v,"/tallyman/v1/?").concat(p.toString()),[2,fetch(f).then((function(r){return r.json()}))]}))}))};function P(t,i,a,o){return r(this,void 0,void 0,(function(){var r;return e(this,(function(e){return!0===(r=n({offer:t.pac_analytics.visitor.offer},i||{})).automaticallySubmitAllOperators&&r.operators&&r.operators.length>0?[2,M(t,r,a,r.operators,o)]:[2,D(t,r,a,o)]}))}))}var j="";function D(t,i,a,o){return r(this,void 0,void 0,(function(){var r,s,c,u,d,l,p,f,m,y,S,w,g,h,I,b,E,U;return e(this,(function(e){switch(e.label){case 0:if(!a)throw(r=new Error("Error in submitMSISDN() trigger-pin action")).type="InvalidMSISDN",r;return s=o||{},c=!1,("true"===(null==(u=v(t))?void 0:u.success)&&"1"===u["msisdn-alias"]||!0===t.skip_validation)&&(s["skip-validation"]="1"),"1"===s["skip-validation"]&&(c=!0),d=c?a||t.msisdn:a.match(/\d+/gi).join(""),l=t.pac_analytics.visitor.rockmanId,p=i.slug,f=i.country,m=i.device,y=i.offer,S=t.location.search.substr(1)||"",w=j&&""!==j?"&mcpUniqid=".concat(j):"",g=void 0!==t&&t.tid?t.tid:"",[4,k({window:t,country:f,slug:p,device:m,offer:y,msisdn:d,rockmanId:l,extraParams:s,search:S,uniqid:w,evinaTid:g})];case 1:if(!1!==(h=e.sent()).success)return[3,2];switch((I=new Error("Error in submitMSISDN() trigger-pin action:\n".concat(h.message))).message=h.message,!0){case h.message.includes("ALREADY SUBSCRIBED"):I.type="AlreadySubscribed";break;case h.message.includes("invalid"):I.type="InvalidMSISDN";break;default:I.type=null}throw I.productUrl=h.product_url?h.product_url:"",console.error(I),I;case 2:if(t.operator=h.operator,b={kw:{kw_viva:"kw_viva"},k2:{k2_viva:"k2_viva"},bh:{bh_viva:"bh_viva"}},!(f&&h.operator&&(b[f.toLowerCase()]&&b[f.toLowerCase()][h.operator.toLowerCase()]||"iq"===f.toLowerCase()))||t.isCallBlockApi||t.Empello)return[3,6];e.label=3;case 3:return e.trys.push([3,5,,6]),[4,N({window:t,country:f,slug:p,device:m,offer:y,rockmanId:l,operator:h.operator,uniqid:w})];case 4:return!1===(E=e.sent()).success?console.warn(E.message):(_(E.source),j=E.uniqid),[3,6];case 5:return U=e.sent(),console.warn(U),[3,6];case 6:return h.javascript&&_(h.javascript),[2,n({type:"SingleMSISDNSubmissionResult",pin:h.pin,uniqidResult:j,operator:h.operator,redirectUrl:null==h?void 0:h.redirect_to_url},(null==h?void 0:h.userType)?{userType:null==h?void 0:h.userType}:{})]}}))}))}function M(t,i,a,o,s){return r(this,void 0,void 0,(function(){var c,u,d=this;return e(this,(function(l){switch(l.label){case 0:return[4,Promise.all(o.map((function(o){return r(d,void 0,void 0,(function(){var r,c;return e(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,D(t,i,a,n(n({},s),{operator:o}))];case 1:return r=e.sent(),[2,w(n(n({},r),{operator:o}))];case 2:return c=e.sent(),[2,S(c)];case 3:return[2]}}))}))})))];case 1:if(c=l.sent(),u=c.find((function(r){var e;return"left"===r.type&&"AlreadySubscribed"===(null===(e=r.value)||void 0===e?void 0:e.type)})),c.every((function(r){return"left"===r.type})))throw c[0].value;if(u)throw u.value;return[2,{type:"MultiOperatorMSISDNSubmissionResult"}]}}))}))}function C(n,i,a,o){return r(this,void 0,void 0,(function(){var s,c,u,d,l,p,f,m,S,w,_,h,I,b,E,k,N;return e(this,(function(P){switch(P.label){case 0:if(n.hostCountry&&n.hostSlug&&(a.country=n.hostCountry,a.slug=n.hostSlug),s=a.slug,c=a.country,u=a.device,d=n.pac_analytics.visitor.offer,l=o||{},"true"===(null==(p=v(n))?void 0:p.success)&&"1"===p["msisdn-alias"]&&(l["skip-validation"]="1"),f=n.pac_analytics.visitor.rockmanId,!i)throw(m=new Error("Error in submitMSISDN() verify-pin action:\n Pin Cannot Be Empty")).type="InvalidPIN",m;return S=""!==j?"&mcpUniqid=".concat(j):"",w=void 0!==n&&n.tid?n.tid:"",_=n.location.search.substr(1)||"",[4,U({window:n,country:c,slug:s,device:u,offer:d,rockmanId:f,pin:i,extraParams:l,uniqid:S,evinaTid:w,search:_})];case 1:if(!1!==(h=P.sent()).success)return[3,2];throw I={"pin does not match":"InvalidPIN","mcp blocked":"SessionBlocked",expired_pin:"ExpiredPIN",insufficient_balance:"InsufficientBalance"}[h.message],(k=new Error("Error in submitMSISDN() verify-pin action:\n".concat(I))).type=I||"InvalidPIN",k.message=h.message,console.error(k),k;case 2:return!0!==h.async?[3,4]:h.product_url&&""!==h.product_url&&"es"===(null==c?void 0:c.toLowerCase())?[2,{gatewayRedirectUrl:h.product_url}]:(b=function(){return function(n){var i=n.window,a=n.country,o=n.slug,s=n.device,c=n.offer,u=n.rockmanId;return r(void 0,void 0,void 0,(function(){var r,n,d,l;return e(this,(function(e){return r={action:"check-subscription",country:y(a),slug:o,device:s,offerId:c,rockman_id:u},n=Object.entries(r).filter((function(r){var e=t(r,2);return e[0],null!=e[1]})).map((function(r){var e=t(r,2),n=e[0],i=e[1];return"".concat(n,"=").concat(encodeURIComponent(i))})).join("&"),d=i.DEV_BASE_URL||"",l="".concat(d,"/tallyman/v1/?").concat(n),[2,fetch(l).then((function(r){return r.json()}))]}))}))}({window:n,country:c,slug:s,device:u,offer:d,rockmanId:f,extraParams:o})},[4,g(b,100,(function(r){return r.success||"invalid_pin"===r.message}),0)]);case 3:if(!0===(E=P.sent()).success)return N="ALREADY SUBSCRIBED"===h.message,[2,{productUrl:E.product_url||null,isAlreadySubscribed:N}];throw(k=new Error("Error in submitMSISDN() verify-pin action:\n".concat(E.message))).type="InvalidPIN",k.message=E.message,k;case 4:return N="ALREADY SUBSCRIBED"===h.message,[2,{productUrl:h.product_url||null,isAlreadySubscribed:N}]}}))}))}var T={currentState:{type:"PINEntry",result:o(),data:{actualPIN:"",msisdn:"",operator:"",pinMaxLength:4}}},R={currentState:{type:"PINEntry",result:c({finalUrl:"/product"}),data:{actualPIN:"",msisdn:"",operator:"",pinMaxLength:4}}},A={currentState:{type:"MSISDNEntry",result:u({errorType:"InvalidMSISDN",error:"Invalid Mobile Number"})}},F={currentState:{type:"MSISDNEntry",result:o()}},x=function(r){var e=v(r),t=new Event("onPinPage"),n=e.ui_show_pin_entry&&"1"===e.ui_show_pin_entry||e["show-pin-entry"]&&"1"===e["show-pin-entry"],i=e["show-thank-you"]&&"1"===e["show-thank-you"],a="1"===(null==e?void 0:e.show_custom_error),s={currentState:{type:"MSISDNEntry",result:u({errorType:"SomethingWentWrong",error:null})}},d={currentState:{type:"PINEntry",result:c({finalUrl:(null==e?void 0:e.product_url)||""}),data:{msisdn:(null==e?void 0:e.msisdn)||"",operator:(null==e?void 0:e.operator)||""}}},l={currentState:{type:"PINEntry",result:o(),data:{msisdn:(null==e?void 0:e.msisdn)||"",operator:(null==e?void 0:e.operator)||""}}};if(n)return null==r||r.dispatchEvent(t),l;if(i)return d;if(a)return s;if(!e["mock-flow"])return F;switch(e["current-state"]){case"msisdn-failure-state":return A;case"pin-state":return null==r||r.dispatchEvent(t),T;case"completed-state":return R;default:return console.error("Mock Flow not supported"),F}}(window),B=i("pinFlow/submitMSISDNAction",(function(t,i){var a=t.window,c=t.msisdn,u=t.extraParams,d=i.getState,v=i.dispatch,y=i.rejectWithValue;return r(void 0,void 0,void 0,(function(){var r,t,i,S,w,g,_,h,I,b,E,k,U,N,j,D,M,C,T,R;return e(this,(function(e){switch(e.label){case 0:if(r=d(),!(null===(M=null===(D=null===(j=null==r?void 0:r.strategy)||void 0===j?void 0:j.currentState)||void 0===D?void 0:D.data)||void 0===M?void 0:M.config))return[2,y({errorType:"UnexpectedState"})];t=r.strategy.currentState.data,i=t.config,S=t.isHeaderEnrichmentSuccess,w=null===(C=r.pinFlow)||void 0===C?void 0:C.currentState,e.label=1;case 1:if(e.trys.push([1,5,,6]),"ps"===(null==i?void 0:i.country.toLowerCase())&&(null==i?void 0:i.slug.includes("shemaroo"))&&"+970"===V(null==i?void 0:i.country,c)&&(c=c.replace("970","972")),"tpay"===(null==(g=null===(R=null===(T=null==a?void 0:a.pac_analytics)||void 0===T?void 0:T.visitor)||void 0===R?void 0:R.genericJsLinkResult)?void 0:g.gateway)){if(m.advancedInFlow("tallyman.v1-pin","msisdn-submitted",{msisdn:c}),P(a,i,c),a.msisdn=c,a.callConfirm)try{return a.callConfirm(),[2,n(n({},w),{type:"MSISDNEntry",result:s()})]}catch(r){return _="Confirm function not found",m.recedeInFlow("tallyman.v1-pin","msisdn-submission-failure",{msisdn:c,errorType:"TPayUnknownError",error:(null==r?void 0:r.toString())||"Error calling window.callConfirm function",message:r.message}),[2,y({errorType:"TPayUnknownError",error:_,message:_})]}return h="Confirm function not found",m.recedeInFlow("tallyman.v1-pin","msisdn-submission-failure",{msisdn:c,errorType:"TPayUnknownError",error:h,message:h}),[2,y({errorType:"TPayUnknownError",error:h,message:h})]}return m.advancedInFlow("tallyman.v1-pin","msisdn-submitted",{msisdn:c}),[4,P(a,i,c)];case 2:return I=e.sent(),m.advancedInFlow("tallyman.v1-pin","msisdn-submission-success",{msisdn:c}),"SingleMSISDNSubmissionResult"===I.type&&I.redirectUrl?(m.advancedInFlow("tallyman.v1-pin","msisdn-submission-success",{msisdn:c}),m.customEvent("Flow","advance-auto","msisdn-redirect",{redirectUrl:I.redirectUrl}),a.location.href=I.redirectUrl,[2]):u&&u.storeMsisdn&&"true"===u.storeMsisdn?[4,f(c).then((function(r){r&&r.data&&r.data.success?m.customEvent("Flow","advance-auto","msisdn-stored-success"):m.customEvent("Flow","advance-auto","msisdn-stored-failed")})).catch((function(r){m.customEvent("Flow","advance-auto","msisdn-stored-error",r)}))]:[3,4];case 3:e.sent(),e.label=4;case 4:return b="SingleMSISDNSubmissionResult"===I.type?I.operator:"",E={SA_MOBILY:6,SA_STC:4,SA_ZAIN:4},k=new Event("onPinPage"),null==a||a.dispatchEvent(k),[2,n(n({},w),{type:"PINEntry",result:o(),data:n({actualPIN:"SingleMSISDNSubmissionResult"===I.type?I.pin:null,msisdn:c,operator:b,pinMaxLength:""!==b&&E[b]?E[b]:null,isHeaderEnrichmentSuccess:S},"SingleMSISDNSubmissionResult"===I.type&&(null==I?void 0:I.userType)?{userType:I.userType}:{})})];case 5:switch(U=e.sent(),console.warn(U),N=void 0,U.type){case"AlreadySubscribed":N="AlreadySubscribed";break;case"InvalidMSISDN":N="InvalidMSISDN";break;default:N="UnknownError"}return m.recedeInFlow("tallyman.v1-pin","msisdn-submission-failure",{msisdn:c,errorType:N,error:U.toString(),message:U.message,productUrl:U.productUrl}),S&&v(l({type:p.PIN,data:{isHeaderEnrichmentSuccess:!1,config:i}})),[2,y({errorType:N,error:U.toString(),message:U.message,productUrl:U.productUrl})];case 6:return[2]}}))}))})),L=i("pinFlow/submitPinAction",(function(t,i){var a=t.window,o=t.msisdn,s=t.pin,u=t.extraParams,d=i.getState,l=i.rejectWithValue;return r(void 0,void 0,void 0,(function(){var r,t,i,p,v,y,S,w,g,_;return e(this,(function(e){switch(e.label){case 0:if(r=d(),!(null===(g=null===(w=null===(S=null==r?void 0:r.strategy)||void 0===S?void 0:S.currentState)||void 0===w?void 0:w.data)||void 0===g?void 0:g.config))return[2,l({errorType:"UnexpectedState"})];t=r.strategy.currentState.data.config,i=null===(_=r.pinFlow)||void 0===_?void 0:_.currentState,e.label=1;case 1:return e.trys.push([1,5,,6]),m.advancedInFlow("tallyman.v1-pin","pin-submitted",{msisdn:o,pin:s}),[4,C(a,s,t,u)];case 2:return p=e.sent(),m.advancedInFlow("tallyman.v1-pin","pin-submission-success",{msisdn:o,pin:s,finalUrl:p.productUrl}),p.gatewayRedirectUrl&&""!==p.gatewayRedirectUrl&&(m.advancedInFlow("tallyman.v1-pin","gateway-redirect",{msisdn:o,pin:s,gatewayRedirectUrl:p.gatewayRedirectUrl}),a.location.href=p.gatewayRedirectUrl),u&&u.storeMsisdn&&"true"===u.storeMsisdn?[4,f(o).then((function(r){r&&r.data&&r.data.success?m.customEvent("Flow","advance-auto","msisdn-stored-success"):m.customEvent("Flow","advance-auto","msisdn-stored-failed")})).catch((function(r){m.customEvent("Flow","advance-auto","msisdn-stored-error",r)}))]:[3,4];case 3:e.sent(),e.label=4;case 4:return[2,n(n({},i),{type:"PINEntry",result:c({finalUrl:p.productUrl,isAlreadySubscribed:p.isAlreadySubscribed||!1})})];case 5:switch(v=e.sent(),console.warn(v),y=void 0,v.type){case"AlreadySubscribed":y="AlreadySubscribed";break;case"InvalidPIN":y="InvalidPIN";break;case"SessionBlocked":y="SessionBlocked";break;case"ExpiredPIN":y="ExpiredPIN";break;case"InsufficientBalance":y="InsufficientBalance";break;default:y="UnknownError"}return m.recedeInFlow("tallyman.v1-pin","pin-submission-failure",{msisdn:o,pin:s,errorType:y,error:v.toString(),message:v.message,productUrl:v.productUrl}),setTimeout((function(){v.productUrl&&(a.location.href=v.productUrl)}),0),[2,l({errorType:y,error:v.toString(),message:v.message,productUrl:v.productUrl})];case 6:return[2]}}))}))})),q=i("pinFlow/backToStartAction",(function(t,n){var i=n.getState,a=n.dispatch,s=n.rejectWithValue;return r(void 0,void 0,void 0,(function(){var r,t,n,c;return e(this,(function(e){try{if(m.recedeInFlow("tallyman.v1-pin","pin-state","requested to change phone number"),r=i(),!(null===(c=null===(n=null===(t=null==r?void 0:r.strategy)||void 0===t?void 0:t.currentState)||void 0===n?void 0:n.data)||void 0===c?void 0:c.config))return[2,s({errorType:"UnexpectedState"})];if("pin"===r.strategy.currentState.data.strategy)return[2,{type:"MSISDNEntry",result:o()}];a(d())}catch(r){return console.warn(r),[2,s({errorType:"UnexpectedState"})]}return[2]}))}))})),O={PS:"970"},V=function(r,e){if(!r||!e)return"";var t=r.toUpperCase(),n=O[t];return n?"+".concat(n):(console.error("Country code not found for",r),"")},W=a({name:"pinFlow",initialState:x,reducers:{},extraReducers:function(r){r.addCase(B.pending,(function(r){r.currentState={type:"MSISDNEntry",result:s(),data:r.currentState.data}})).addCase(B.fulfilled,(function(r,e){r.currentState=e.payload})).addCase(B.rejected,(function(r,e){r.currentState={type:"MSISDNEntry",result:u(e.payload),data:r.currentState.data}})).addCase(L.pending,(function(r){r.currentState={type:"PINEntry",result:s(),data:r.currentState.data}})).addCase(L.fulfilled,(function(r,e){r.currentState=e.payload})).addCase(L.rejected,(function(r,e){r.currentState={type:"PINEntry",result:u(e.payload),data:r.currentState.data}})).addCase(q.fulfilled,(function(r,e){r.currentState=e.payload}))}}),z=W.reducer;W.actions;export{q as backToStartAction,b as pinFlowMatch,z as pinFlowReducer,B as submitMSISDNAction,L as submitPinAction,I as usePinFlowState};
1
+ import{__awaiter as r,__generator as e,__read as t,__assign as n}from"tslib";import{createAsyncThunk as i,createSlice as a}from"@reduxjs/toolkit";import{N as o,L as s,S as c,F as u}from"./RemoteDataState-lcf8PfJd.js";import{i as d,c as l,P as p}from"./strategySlice-BfNZvJIC.js";import{searchToObject as v}from"./searchToObject.js";import{s as f}from"./storeMsisdn-Cjq8_qYH.js";import{t as m}from"./tracker-DaaILhEr.js";import{b as y}from"./api-geirVksI.js";import{l as S,r as w,a as g}from"./helpers-xPhGBX-B.js";import{l as h}from"./loadScriptInnerHtml-B6v2-IGn.js";import{c as _}from"./cleanSearchParams-Dl7ZDlew.js";import"./getConfig.js";import"./formatNumberToE164-DaAFvpKD.js";import"pacman-client";import"uuid";var I=function(r){return r((function(r){return r.pinFlow.currentState}))};function b(r){var e=r.msisdnEntry,t=r.pinEntry;return function(r){switch(r.type){case"MSISDNEntry":return e(r.result);case"PINEntry":return t(r.result,r.data);default:throw new Error("Invalid State")}}}var E=function(r){return"be"===r?"undefined"!=typeof window&&!0===window.shouldBlock?"&is-clean-traffic=false":"&is-clean-traffic=true":""},k=function(n){var i=n.window,a=n.country,o=n.slug,s=n.device,c=n.offer,u=n.msisdn,d=n.rockmanId,l=n.extraParams,p=n.search,v=n.uniqid,f=n.evinaTid;return r(void 0,void 0,void 0,(function(){var r,n,m,y,S,w,g;return e(this,(function(e){return r=E(a),n="&".concat(Object.keys(l).map((function(r){return l[r]?"".concat(r,"=").concat(l[r]):""})).filter(Boolean).join("&")),p=_(p),m={action:"trigger-pin",country:a,slug:o,device:s,offerId:c,msisdn:u,rockman_id:d,sam_evina_tid:f,page:encodeURIComponent(null===(g=null==i?void 0:i.location)||void 0===g?void 0:g.href),language_code:i.languageCode||"",partner_transaction_id:i.partner_transaction_id||"",partner_timestamp:i.partner_timestamp||"",partner_cid:i.partner_cid||"",uniqid:v||"",antifraud_id:i.antifraud_id||"",antifraud_id_js_code:i.antifraud_id_js_code||"",antifraud_id_js_link:i.antifraud_id_js_link||"",zain_antifraud_id:i.zain_antifraud_id||"",korek_antifraud_id:i.korek_antifraud_id||""},y=Object.entries(m).filter((function(r){var e=t(r,2);return e[0],e[1]})).map((function(r){var e=t(r,2),n=e[0],i=e[1];return"".concat(n,"=").concat(i)})).join("&"),S=i.DEV_BASE_URL||"",w="".concat(S,"/tallyman/v1/?").concat(y).concat(r).concat(n).concat(p?"&".concat(p):""),[2,fetch(w).then((function(r){return r.json()}))]}))}))},U=function(n){var i=n.window,a=n.country,o=n.slug,s=n.device,c=n.offer,u=n.rockmanId,d=n.pin,l=n.extraParams,p=n.uniqid,v=n.evinaTid,f=n.search;return r(void 0,void 0,void 0,(function(){var r,n,m,S,w,g,h;return e(this,(function(e){return r=E(a),n="&".concat(Object.keys(l).map((function(r){return"".concat(r,"=").concat(l[r])})).join("&")),f=_(f),m={action:"verify-pin",country:y(a),slug:o,device:s,offerId:c,rockman_id:u,pin:d,page:encodeURIComponent(null===(h=null==i?void 0:i.location)||void 0===h?void 0:h.href),language_code:i.languageCode||"",ClickID:i.antifraud_click_id||"",partner_cid:i.partner_cid||"",sam_evina_tid:v,uniqid:p,antifraud_id_js_code:i.antifraud_id_js_code||"",antifraud_id_js_link:i.antifraud_id_js_link||"",zain_antifraud_id:i.zain_antifraud_id||"",korek_antifraud_id:i.korek_antifraud_id||""},S=Object.entries(m).filter((function(r){var e=t(r,2);return e[0],e[1]})).map((function(r){var e=t(r,2),n=e[0],i=e[1];return"".concat(n,"=").concat(i)})).join("&"),w=i.DEV_BASE_URL||"",g="".concat(w,"/tallyman/v1/?").concat(S).concat(r).concat(n).concat(f?"&".concat(f):""),[2,fetch(g).then((function(r){return r.json()}))]}))}))},N=function(t){var i=t.window,a=t.country,o=t.slug,s=t.device,c=t.offer,u=t.rockmanId,d=t.operator,l=t.uniqid;return r(void 0,void 0,void 0,(function(){var r,t,p,v,f;return e(this,(function(e){return r=i.location.href,t=i.pac_analytics.visitor.ip,p=new URLSearchParams(n(n({action:"mcp-shield",country:a,slug:o,device:s,offerId:c.toString(),rockman_id:u,client_lpu:r},d&&{operator:d}),l&&{uniqid:l})),t&&p.append("client_ip",t),v=i.DEV_BASE_URL||"",f="".concat(v,"/tallyman/v1/?").concat(p.toString()),[2,fetch(f).then((function(r){return r.json()}))]}))}))};function P(t,i,a,o){return r(this,void 0,void 0,(function(){var r;return e(this,(function(e){return!0===(r=n({offer:t.pac_analytics.visitor.offer},i||{})).automaticallySubmitAllOperators&&r.operators&&r.operators.length>0?[2,M(t,r,a,r.operators,o)]:[2,D(t,r,a,o)]}))}))}var j="";function D(t,i,a,o){return r(this,void 0,void 0,(function(){var r,s,c,u,d,l,p,f,m,y,S,w,g,_,I,b,E,U;return e(this,(function(e){switch(e.label){case 0:if(!a)throw(r=new Error("Error in submitMSISDN() trigger-pin action")).type="InvalidMSISDN",r;return s=o||{},c=!1,("true"===(null==(u=v(t))?void 0:u.success)&&"1"===u["msisdn-alias"]||!0===t.skip_validation)&&(s["skip-validation"]="1"),"1"===s["skip-validation"]&&(c=!0),d=c?a||t.msisdn:a.match(/\d+/gi).join(""),l=t.pac_analytics.visitor.rockmanId,p=i.slug,f=i.country,m=i.device,y=i.offer,S=t.location.search.substr(1)||"",w=j&&""!==j?"&mcpUniqid=".concat(j):"",g=void 0!==t&&t.tid?t.tid:"",[4,k({window:t,country:f,slug:p,device:m,offer:y,msisdn:d,rockmanId:l,extraParams:s,search:S,uniqid:w,evinaTid:g})];case 1:if(!1!==(_=e.sent()).success)return[3,2];switch((I=new Error("Error in submitMSISDN() trigger-pin action:\n".concat(_.message))).message=_.message,!0){case _.message.includes("ALREADY SUBSCRIBED"):I.type="AlreadySubscribed";break;case _.message.includes("invalid"):I.type="InvalidMSISDN";break;default:I.type=null}throw I.productUrl=_.product_url?_.product_url:"",console.error(I),I;case 2:if(t.operator=_.operator,b={kw:{kw_viva:"kw_viva"},k2:{k2_viva:"k2_viva"},bh:{bh_viva:"bh_viva"}},!(f&&_.operator&&(b[f.toLowerCase()]&&b[f.toLowerCase()][_.operator.toLowerCase()]||"iq"===f.toLowerCase()))||t.isCallBlockApi||t.Empello)return[3,6];e.label=3;case 3:return e.trys.push([3,5,,6]),[4,N({window:t,country:f,slug:p,device:m,offer:y,rockmanId:l,operator:_.operator,uniqid:w})];case 4:return!1===(E=e.sent()).success?console.warn(E.message):(h(E.source),j=E.uniqid),[3,6];case 5:return U=e.sent(),console.warn(U),[3,6];case 6:return _.javascript&&h(_.javascript),[2,n({type:"SingleMSISDNSubmissionResult",pin:_.pin,uniqidResult:j,operator:_.operator,redirectUrl:null==_?void 0:_.redirect_to_url},(null==_?void 0:_.userType)?{userType:null==_?void 0:_.userType}:{})]}}))}))}function M(t,i,a,o,s){return r(this,void 0,void 0,(function(){var c,u,d=this;return e(this,(function(l){switch(l.label){case 0:return[4,Promise.all(o.map((function(o){return r(d,void 0,void 0,(function(){var r,c;return e(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,D(t,i,a,n(n({},s),{operator:o}))];case 1:return r=e.sent(),[2,w(n(n({},r),{operator:o}))];case 2:return c=e.sent(),[2,S(c)];case 3:return[2]}}))}))})))];case 1:if(c=l.sent(),u=c.find((function(r){var e;return"left"===r.type&&"AlreadySubscribed"===(null===(e=r.value)||void 0===e?void 0:e.type)})),c.every((function(r){return"left"===r.type})))throw c[0].value;if(u)throw u.value;return[2,{type:"MultiOperatorMSISDNSubmissionResult"}]}}))}))}function C(n,i,a,o){return r(this,void 0,void 0,(function(){var s,c,u,d,l,p,f,m,S,w,h,_,I,b,E,k,N;return e(this,(function(P){switch(P.label){case 0:if(n.hostCountry&&n.hostSlug&&(a.country=n.hostCountry,a.slug=n.hostSlug),s=a.slug,c=a.country,u=a.device,d=n.pac_analytics.visitor.offer,l=o||{},"true"===(null==(p=v(n))?void 0:p.success)&&"1"===p["msisdn-alias"]&&(l["skip-validation"]="1"),f=n.pac_analytics.visitor.rockmanId,!i)throw(m=new Error("Error in submitMSISDN() verify-pin action:\n Pin Cannot Be Empty")).type="InvalidPIN",m;return S=""!==j?"&mcpUniqid=".concat(j):"",w=void 0!==n&&n.tid?n.tid:"",h=n.location.search.substr(1)||"",[4,U({window:n,country:c,slug:s,device:u,offer:d,rockmanId:f,pin:i,extraParams:l,uniqid:S,evinaTid:w,search:h})];case 1:if(!1!==(_=P.sent()).success)return[3,2];throw I={"pin does not match":"InvalidPIN","mcp blocked":"SessionBlocked",expired_pin:"ExpiredPIN",insufficient_balance:"InsufficientBalance"}[_.message],(k=new Error("Error in submitMSISDN() verify-pin action:\n".concat(I))).type=I||"InvalidPIN",k.message=_.message,console.error(k),k;case 2:return!0!==_.async?[3,4]:_.product_url&&""!==_.product_url&&"es"===(null==c?void 0:c.toLowerCase())?[2,{gatewayRedirectUrl:_.product_url}]:(b=function(){return function(n){var i=n.window,a=n.country,o=n.slug,s=n.device,c=n.offer,u=n.rockmanId;return r(void 0,void 0,void 0,(function(){var r,n,d,l;return e(this,(function(e){return r={action:"check-subscription",country:y(a),slug:o,device:s,offerId:c,rockman_id:u},n=Object.entries(r).filter((function(r){var e=t(r,2);return e[0],null!=e[1]})).map((function(r){var e=t(r,2),n=e[0],i=e[1];return"".concat(n,"=").concat(encodeURIComponent(i))})).join("&"),d=i.DEV_BASE_URL||"",l="".concat(d,"/tallyman/v1/?").concat(n),[2,fetch(l).then((function(r){return r.json()}))]}))}))}({window:n,country:c,slug:s,device:u,offer:d,rockmanId:f,extraParams:o})},[4,g(b,100,(function(r){return r.success||"invalid_pin"===r.message}),0)]);case 3:if(!0===(E=P.sent()).success)return N="ALREADY SUBSCRIBED"===_.message,[2,{productUrl:E.product_url||null,isAlreadySubscribed:N}];throw(k=new Error("Error in submitMSISDN() verify-pin action:\n".concat(E.message))).type="InvalidPIN",k.message=E.message,k;case 4:return N="ALREADY SUBSCRIBED"===_.message,[2,{productUrl:_.product_url||null,isAlreadySubscribed:N}]}}))}))}var T={currentState:{type:"PINEntry",result:o(),data:{actualPIN:"",msisdn:"",operator:"",pinMaxLength:4}}},R={currentState:{type:"PINEntry",result:c({finalUrl:"/product"}),data:{actualPIN:"",msisdn:"",operator:"",pinMaxLength:4}}},A={currentState:{type:"MSISDNEntry",result:u({errorType:"InvalidMSISDN",error:"Invalid Mobile Number"})}},F={currentState:{type:"MSISDNEntry",result:o()}},x=function(r){var e=v(r),t=new Event("onPinPage"),n=e.ui_show_pin_entry&&"1"===e.ui_show_pin_entry||e["show-pin-entry"]&&"1"===e["show-pin-entry"],i=e["show-thank-you"]&&"1"===e["show-thank-you"],a="1"===(null==e?void 0:e.show_custom_error),s={currentState:{type:"MSISDNEntry",result:u({errorType:"SomethingWentWrong",error:null})}},d={currentState:{type:"PINEntry",result:c({finalUrl:(null==e?void 0:e.product_url)||""}),data:{msisdn:(null==e?void 0:e.msisdn)||"",operator:(null==e?void 0:e.operator)||""}}},l={currentState:{type:"PINEntry",result:o(),data:{msisdn:(null==e?void 0:e.msisdn)||"",operator:(null==e?void 0:e.operator)||""}}};if(n)return null==r||r.dispatchEvent(t),l;if(i)return d;if(a)return s;if(!e["mock-flow"])return F;switch(e["current-state"]){case"msisdn-failure-state":return A;case"pin-state":return null==r||r.dispatchEvent(t),T;case"completed-state":return R;default:return console.error("Mock Flow not supported"),F}}(window),B=i("pinFlow/submitMSISDNAction",(function(t,i){var a=t.window,c=t.msisdn,u=t.extraParams,d=i.getState,y=i.dispatch,S=i.rejectWithValue;return r(void 0,void 0,void 0,(function(){var r,t,i,w,g,h,_,I,b,E,k,U,N,j,D,M,C,T,R,A,F;return e(this,(function(e){switch(e.label){case 0:if(r=d(),!(null===(T=null===(C=null===(M=null==r?void 0:r.strategy)||void 0===M?void 0:M.currentState)||void 0===C?void 0:C.data)||void 0===T?void 0:T.config))return[2,S({errorType:"UnexpectedState"})];t=r.strategy.currentState.data,i=t.config,w=t.isHeaderEnrichmentSuccess,g=null===(R=r.pinFlow)||void 0===R?void 0:R.currentState,h=v(a),e.label=1;case 1:return e.trys.push([1,7,,8]),"ps"===(null==i?void 0:i.country.toLowerCase())&&(null==i?void 0:i.slug.includes("shemaroo"))&&"+970"===V(null==i?void 0:i.country,c)&&(c=c.replace("970","972")),"tpay"!==(null==(_=null===(F=null===(A=null==a?void 0:a.pac_analytics)||void 0===A?void 0:A.visitor)||void 0===F?void 0:F.genericJsLinkResult)?void 0:_.gateway)||(null==h?void 0:h["show-pin-entry"])?[3,3]:(m.advancedInFlow("tallyman.v1-pin","msisdn-submitted",{msisdn:c}),[4,P(a,i,c)]);case 2:if(e.sent(),a.msisdn=c,a.callConfirm)try{return a.callConfirm(),[2,n(n({},g),{type:"MSISDNEntry",result:s()})]}catch(r){return I="Confirm function not found",m.recedeInFlow("tallyman.v1-pin","msisdn-submission-failure",{msisdn:c,errorType:"TPayUnknownError",error:(null==r?void 0:r.toString())||"Error calling window.callConfirm function",message:r.message}),[2,S({errorType:"TPayUnknownError",error:I,message:I})]}return b="Confirm function not found",m.recedeInFlow("tallyman.v1-pin","msisdn-submission-failure",{msisdn:c,errorType:"TPayUnknownError",error:b,message:b}),[2,S({errorType:"TPayUnknownError",error:b,message:b})];case 3:return m.advancedInFlow("tallyman.v1-pin","msisdn-submitted",{msisdn:c}),[4,P(a,i,c)];case 4:return E=e.sent(),m.advancedInFlow("tallyman.v1-pin","msisdn-submission-success",{msisdn:c}),"SingleMSISDNSubmissionResult"===E.type&&E.redirectUrl?(m.advancedInFlow("tallyman.v1-pin","msisdn-submission-success",{msisdn:c}),m.customEvent("Flow","advance-auto","msisdn-redirect",{redirectUrl:E.redirectUrl}),a.location.href=E.redirectUrl,[2]):u&&u.storeMsisdn&&"true"===u.storeMsisdn?[4,f(c).then((function(r){r&&r.data&&r.data.success?m.customEvent("Flow","advance-auto","msisdn-stored-success"):m.customEvent("Flow","advance-auto","msisdn-stored-failed")})).catch((function(r){m.customEvent("Flow","advance-auto","msisdn-stored-error",r)}))]:[3,6];case 5:e.sent(),e.label=6;case 6:return k="SingleMSISDNSubmissionResult"===E.type?E.operator:"",U={SA_MOBILY:6,SA_STC:4,SA_ZAIN:4},N=new Event("onPinPage"),null==a||a.dispatchEvent(N),[2,n(n({},g),{type:"PINEntry",result:o(),data:n({actualPIN:"SingleMSISDNSubmissionResult"===E.type?E.pin:null,msisdn:c,operator:k,pinMaxLength:""!==k&&U[k]?U[k]:null,isHeaderEnrichmentSuccess:w},"SingleMSISDNSubmissionResult"===E.type&&(null==E?void 0:E.userType)?{userType:E.userType}:{})})];case 7:switch(j=e.sent(),console.warn(j),D=void 0,j.type){case"AlreadySubscribed":D="AlreadySubscribed";break;case"InvalidMSISDN":D="InvalidMSISDN";break;default:D="UnknownError"}return m.recedeInFlow("tallyman.v1-pin","msisdn-submission-failure",{msisdn:c,errorType:D,error:j.toString(),message:j.message,productUrl:j.productUrl}),w&&y(l({type:p.PIN,data:{isHeaderEnrichmentSuccess:!1,config:i}})),[2,S({errorType:D,error:j.toString(),message:j.message,productUrl:j.productUrl})];case 8:return[2]}}))}))})),L=i("pinFlow/submitPinAction",(function(t,i){var a=t.window,o=t.msisdn,s=t.pin,u=t.extraParams,d=i.getState,l=i.rejectWithValue;return r(void 0,void 0,void 0,(function(){var r,t,i,p,v,y,S,w,g,h;return e(this,(function(e){switch(e.label){case 0:if(r=d(),!(null===(g=null===(w=null===(S=null==r?void 0:r.strategy)||void 0===S?void 0:S.currentState)||void 0===w?void 0:w.data)||void 0===g?void 0:g.config))return[2,l({errorType:"UnexpectedState"})];t=r.strategy.currentState.data.config,i=null===(h=r.pinFlow)||void 0===h?void 0:h.currentState,e.label=1;case 1:return e.trys.push([1,5,,6]),m.advancedInFlow("tallyman.v1-pin","pin-submitted",{msisdn:o,pin:s}),[4,C(a,s,t,u)];case 2:return p=e.sent(),m.advancedInFlow("tallyman.v1-pin","pin-submission-success",{msisdn:o,pin:s,finalUrl:p.productUrl}),p.gatewayRedirectUrl&&""!==p.gatewayRedirectUrl&&(m.advancedInFlow("tallyman.v1-pin","gateway-redirect",{msisdn:o,pin:s,gatewayRedirectUrl:p.gatewayRedirectUrl}),a.location.href=p.gatewayRedirectUrl),u&&u.storeMsisdn&&"true"===u.storeMsisdn?[4,f(o).then((function(r){r&&r.data&&r.data.success?m.customEvent("Flow","advance-auto","msisdn-stored-success"):m.customEvent("Flow","advance-auto","msisdn-stored-failed")})).catch((function(r){m.customEvent("Flow","advance-auto","msisdn-stored-error",r)}))]:[3,4];case 3:e.sent(),e.label=4;case 4:return[2,n(n({},i),{type:"PINEntry",result:c({finalUrl:p.productUrl,isAlreadySubscribed:p.isAlreadySubscribed||!1})})];case 5:switch(v=e.sent(),console.warn(v),y=void 0,v.type){case"AlreadySubscribed":y="AlreadySubscribed";break;case"InvalidPIN":y="InvalidPIN";break;case"SessionBlocked":y="SessionBlocked";break;case"ExpiredPIN":y="ExpiredPIN";break;case"InsufficientBalance":y="InsufficientBalance";break;default:y="UnknownError"}return m.recedeInFlow("tallyman.v1-pin","pin-submission-failure",{msisdn:o,pin:s,errorType:y,error:v.toString(),message:v.message,productUrl:v.productUrl}),setTimeout((function(){v.productUrl&&(a.location.href=v.productUrl)}),0),[2,l({errorType:y,error:v.toString(),message:v.message,productUrl:v.productUrl})];case 6:return[2]}}))}))})),q=i("pinFlow/backToStartAction",(function(t,n){var i=n.getState,a=n.dispatch,s=n.rejectWithValue;return r(void 0,void 0,void 0,(function(){var r,t,n,c;return e(this,(function(e){try{if(m.recedeInFlow("tallyman.v1-pin","pin-state","requested to change phone number"),r=i(),!(null===(c=null===(n=null===(t=null==r?void 0:r.strategy)||void 0===t?void 0:t.currentState)||void 0===n?void 0:n.data)||void 0===c?void 0:c.config))return[2,s({errorType:"UnexpectedState"})];if("pin"===r.strategy.currentState.data.strategy)return[2,{type:"MSISDNEntry",result:o()}];a(d())}catch(r){return console.warn(r),[2,s({errorType:"UnexpectedState"})]}return[2]}))}))})),O={PS:"970"},V=function(r,e){if(!r||!e)return"";var t=r.toUpperCase(),n=O[t];return n?"+".concat(n):(console.error("Country code not found for",r),"")},W=a({name:"pinFlow",initialState:x,reducers:{},extraReducers:function(r){r.addCase(B.pending,(function(r){r.currentState={type:"MSISDNEntry",result:s(),data:r.currentState.data}})).addCase(B.fulfilled,(function(r,e){r.currentState=e.payload})).addCase(B.rejected,(function(r,e){r.currentState={type:"MSISDNEntry",result:u(e.payload),data:r.currentState.data}})).addCase(L.pending,(function(r){r.currentState={type:"PINEntry",result:s(),data:r.currentState.data}})).addCase(L.fulfilled,(function(r,e){r.currentState=e.payload})).addCase(L.rejected,(function(r,e){r.currentState={type:"PINEntry",result:u(e.payload),data:r.currentState.data}})).addCase(q.fulfilled,(function(r,e){r.currentState=e.payload}))}}),z=W.reducer;W.actions;export{q as backToStartAction,b as pinFlowMatch,z as pinFlowReducer,B as submitMSISDNAction,L as submitPinAction,I as usePinFlowState};
2
2
  //# sourceMappingURL=pinFlow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pinFlow.js","sources":["../src/flows/pinFlow/hooks/usePinFlowState.ts","../src/flows/pinFlow/match.ts","../src/sharedApi/checkSubscription.ts","../src/flows/pinFlow/api.ts","../src/flows/pinFlow/main.ts","../src/flows/pinFlow/pinFlowSlice.ts"],"sourcesContent":["import { useSelector as IuseSelector } from 'react-redux';\nimport { RootState } from '../../../sharedFlowTypes/StrategyTypes';\n\nexport const usePinFlowState = (useSelector: typeof IuseSelector) => {\n const currentState = useSelector((state: RootState) => state.pinFlow.currentState);\n return currentState;\n};\n","import * as RDS from '../../common-types/RemoteDataState';\nimport {\n IMsisdnSumbitNextData,\n MSISDNEntryFailure,\n MSISDNEntrySuccess,\n PINEntryFailure,\n PINEntrySuccess,\n PinFlowCurrentState\n} from '../../sharedFlowTypes/PinTypes';\n\nfunction pinFlowMatch<R>({\n msisdnEntry,\n pinEntry\n}: {\n msisdnEntry: (rds: RDS.RemoteDataState<MSISDNEntryFailure, MSISDNEntrySuccess>) => R;\n pinEntry: (rds: RDS.RemoteDataState<PINEntryFailure, PINEntrySuccess>, nextData: IMsisdnSumbitNextData) => R;\n}): (state: PinFlowCurrentState) => R {\n return (state) => {\n switch (state.type) {\n case 'MSISDNEntry':\n return msisdnEntry(state.result);\n case 'PINEntry':\n return pinEntry(state.result, state.data);\n default:\n throw new Error('Invalid State');\n }\n };\n}\n\nexport { pinFlowMatch };\n","import { ICheckSubscriptionResult } from '../common-types/ICheckSubscriptionResult';\nimport { IHash } from '../common-types/IHash';\nimport { bupperizeCountry } from '../utilities/bupperizeCountry';\n\nconst checkSubscription = async ({\n window,\n country,\n slug,\n device,\n offer,\n rockmanId\n}: {\n window: Window;\n country: string;\n slug: string;\n device: string;\n offer: string;\n rockmanId: string;\n extraParams?: IHash; // Marked as optional if currently unused\n}): Promise<ICheckSubscriptionResult> => {\n const params = {\n action: 'check-subscription',\n country: bupperizeCountry(country),\n slug,\n device,\n offerId: offer,\n rockman_id: rockmanId\n };\n\n const queryString = Object.entries(params)\n .filter(([_, value]) => value !== undefined && value !== null)\n .map(([key, value]) => `${key}=${encodeURIComponent(value)}`)\n .join('&');\n\n const host = window.DEV_BASE_URL || '';\n const url = `${host}/tallyman/v1/?${queryString}`;\n return fetch(url).then((response) => response.json());\n};\n\nexport { checkSubscription };\n","import { IHash, IMcpShieldResult, IMSISDNSubmissionResult, IPINSubmissionResult } from '../../sharedFlowTypes/PinTypes';\nimport { bupperizeCountry } from '../../utilities/bupperizeCountry';\nimport { cleanSearchParams } from '../../utilities/cleanSearchParams';\n\nconst checkIsCleanTraffic = (country: string): string => {\n if (country === 'be') {\n if (typeof window !== 'undefined' && window.shouldBlock === true) {\n return '&is-clean-traffic=false';\n }\n return '&is-clean-traffic=true';\n }\n return '';\n};\nconst triggerPin = async ({\n window,\n country,\n slug,\n device,\n offer,\n msisdn,\n rockmanId,\n extraParams,\n search,\n uniqid,\n evinaTid\n}: {\n window?: Window;\n country: string;\n slug: string;\n device: 'smart' | 'feature';\n offer: string;\n msisdn: string;\n rockmanId: string;\n extraParams: IHash;\n search: string;\n uniqid?: string;\n evinaTid?: string;\n}): Promise<IMSISDNSubmissionResult> => {\n const cleanTrafficString = checkIsCleanTraffic(country);\n const extraParamsQs = `&${Object.keys(extraParams)\n .map((k) => (extraParams[k] ? `${k}=${extraParams[k]}` : ''))\n .filter(Boolean)\n .join('&')}`;\n\n // Remove conflicting params from url\n search = cleanSearchParams(search);\n\n // Base parameters object\n const params = {\n action: 'trigger-pin',\n country,\n slug,\n device,\n offerId: offer,\n msisdn,\n rockman_id: rockmanId,\n sam_evina_tid: evinaTid,\n page: encodeURIComponent(window?.location?.href),\n language_code: window.languageCode || '',\n partner_transaction_id: window.partner_transaction_id || '',\n partner_timestamp: window.partner_timestamp || '',\n partner_cid: window.partner_cid || '',\n uniqid: uniqid || '',\n\n antifraud_id: window.antifraud_id || '',\n // More specific antifraud IDs will eventuallly replace antifraud_id\n // https://www.notion.so/sammedia/KW-Agency-Globocom-KW-ENTERTAINMENT-STORE-GAMESOLUTELY-GLING-Landing-Page-Test-a9841b14218b42709ffb1a2d41428275?d=f2a8d09b1e8c4fd4bdab69ab5dda1f25\n antifraud_id_js_code: window.antifraud_id_js_code || '',\n antifraud_id_js_link: window.antifraud_id_js_link || '',\n zain_antifraud_id: window.zain_antifraud_id || '',\n korek_antifraud_id: window.korek_antifraud_id || ''\n };\n\n // Convert params object to query string\n const queryString = Object.entries(params)\n .filter(([_, value]) => value)\n .map(([key, value]) => `${key}=${value}`)\n .join('&');\n const host = window.DEV_BASE_URL || '';\n const url = `${host}/tallyman/v1/?${queryString}${cleanTrafficString}${extraParamsQs}${search ? `&${search}` : ''}`;\n\n return fetch(url).then((x) => x.json());\n};\n\nconst verifyPin = async ({\n window,\n country,\n slug,\n device,\n offer,\n rockmanId,\n pin,\n extraParams,\n uniqid,\n evinaTid,\n search\n}: {\n window: Window;\n country: string;\n slug: string;\n device: string;\n offer: string;\n rockmanId: string;\n pin: string;\n extraParams: IHash;\n uniqid: string;\n evinaTid: string;\n search: string;\n}): Promise<IPINSubmissionResult> => {\n const cleanTrafficString = checkIsCleanTraffic(country);\n const extraParamsQs = `&${Object.keys(extraParams)\n .map((k) => `${k}=${extraParams[k]}`)\n .join('&')}`;\n // Remove conflicting params from url\n search = cleanSearchParams(search);\n // Base parameters object\n const params = {\n action: 'verify-pin',\n country: bupperizeCountry(country),\n slug,\n device,\n offerId: offer,\n rockman_id: rockmanId,\n pin,\n page: encodeURIComponent(window?.location?.href),\n language_code: window.languageCode || '',\n ClickID: window.antifraud_click_id || '',\n partner_cid: window.partner_cid || '',\n sam_evina_tid: evinaTid,\n uniqid,\n // More specific antifraud IDs will eventuallly replace antifraud_id\n // https://www.notion.so/sammedia/KW-Agency-Globocom-KW-ENTERTAINMENT-STORE-GAMESOLUTELY-GLING-Landing-Page-Test-a9841b14218b42709ffb1a2d41428275?d=f2a8d09b1e8c4fd4bdab69ab5dda1f25\n antifraud_id_js_code: window.antifraud_id_js_code || '',\n antifraud_id_js_link: window.antifraud_id_js_link || '',\n zain_antifraud_id: window.zain_antifraud_id || '',\n korek_antifraud_id: window.korek_antifraud_id || ''\n };\n\n // Convert params object to query string\n const queryString = Object.entries(params)\n .filter(([_, value]) => value)\n .map(([key, value]) => `${key}=${value}`)\n .join('&');\n\n const host = window.DEV_BASE_URL || '';\n const url = `${host}/tallyman/v1/?${queryString}${cleanTrafficString}${extraParamsQs}${search ? `&${search}` : ''}`;\n\n return fetch(url).then((x) => x.json());\n};\n\nconst mcpShield = async ({\n window,\n country,\n slug,\n device,\n offer,\n rockmanId,\n operator,\n uniqid\n}: {\n window: Window;\n country: string;\n slug: string;\n device: string;\n offer: string;\n rockmanId: string;\n operator?: string;\n uniqid?: string;\n}): Promise<IMcpShieldResult> => {\n const pageUrl = window.location.href;\n const ipAdd = window.pac_analytics.visitor.ip;\n\n const params = new URLSearchParams({\n action: 'mcp-shield',\n country,\n slug,\n device,\n offerId: offer.toString(),\n rockman_id: rockmanId,\n client_lpu: pageUrl,\n ...(operator && { operator }),\n ...(uniqid && { uniqid })\n });\n\n // Conditionally add client_ip if it exists\n if (ipAdd) {\n params.append('client_ip', ipAdd);\n }\n\n const host = window.DEV_BASE_URL || '';\n const url = `${host}/tallyman/v1/?${params.toString()}`;\n\n return fetch(url).then((x) => x.json());\n};\n\nexport { triggerPin, verifyPin, mcpShield };\n","import { ICheckSubscriptionResult } from '../../common-types/ICheckSubscriptionResult';\nimport { IError } from '../../common-types/IError';\nimport { checkSubscription } from '../../sharedApi/checkSubscription';\nimport {\n IHash,\n IMcpShieldResult,\n IMSISDNSubmissionResult,\n IPINSubmissionResult,\n MultiOperatorMSISDNSubmissionResult,\n SingleMSISDNSubmissionResult\n} from '../../sharedFlowTypes/PinTypes';\nimport { IConfig, IStrategyIDentifyUserResult } from '../../sharedFlowTypes/StrategyTypes';\nimport { left, loop, right } from '../../utilities/helpers';\nimport { loadScriptInnerHtml } from '../../utilities/loadScriptInnerHtml';\nimport { searchToObject } from '../../utilities/searchToObject';\nimport { mcpShield, triggerPin, verifyPin } from './api';\n\nexport default async function submitMSISDN(\n window: Window,\n maybeConfig: IConfig,\n internationalMSISDN: string,\n extraParams?: IHash\n): Promise<SingleMSISDNSubmissionResult | MultiOperatorMSISDNSubmissionResult> {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const config: IConfig = { offer: window.pac_analytics.visitor.offer, ...(maybeConfig || {}) };\n if (config.automaticallySubmitAllOperators === true && !!config.operators && config.operators.length > 0) {\n return submitMSISDNForMultipleOperators(window, config, internationalMSISDN, config.operators, extraParams);\n }\n return submitMSISDNOnce(window, config, internationalMSISDN, extraParams);\n}\n\nlet uniqidResult = '';\n// eslint-disable-next-line consistent-return\nexport async function loadMcpShield(window: Window, config: IConfig): Promise<IMcpShieldResult> {\n if (config) {\n const { slug, country, device } = config;\n\n const { offer } = window.pac_analytics.visitor;\n const { rockmanId } = window.pac_analytics.visitor;\n\n try {\n const mcpShieldResult: IMcpShieldResult = await mcpShield({ window, country, slug, device, offer, rockmanId });\n if (mcpShieldResult.success === false) {\n console.warn(mcpShieldResult.message);\n } else {\n loadScriptInnerHtml(mcpShieldResult.source);\n uniqidResult = mcpShieldResult.uniqid;\n return mcpShieldResult;\n }\n } catch (err) {\n console.warn(err);\n }\n }\n}\n\nasync function submitMSISDNOnce(\n window: Window,\n config: IConfig,\n internationalMSISDN: string,\n extraParams?: IHash\n): Promise<SingleMSISDNSubmissionResult> {\n if (!internationalMSISDN) {\n const submissionError = new Error(`Error in submitMSISDN() trigger-pin action`) as IError & { type: string };\n submissionError.type = 'InvalidMSISDN';\n throw submissionError;\n }\n const newExtraParams = extraParams || {};\n let isSkipValidation = false;\n const searchObj = searchToObject(window) as IStrategyIDentifyUserResult;\n // @ts-ignore\n if ((searchObj?.success === 'true' && searchObj['msisdn-alias'] === '1') || window.skip_validation === true) {\n // Search param is set to 1 for header enrichment when the msisdn is masked\n newExtraParams['skip-validation'] = '1';\n }\n\n if (newExtraParams['skip-validation'] === '1') {\n isSkipValidation = true;\n }\n\n const msisdn = isSkipValidation ? internationalMSISDN || window.msisdn : internationalMSISDN.match(/\\d+/gi).join(''); // tallyman API expects international msisdn without any special character\n const { rockmanId } = window.pac_analytics.visitor;\n\n const { slug, country, device, offer } = config;\n\n const search = window.location.search.substr(1) || '';\n const uniqid = !!uniqidResult && uniqidResult !== '' ? `&mcpUniqid=${uniqidResult}` : '';\n const evinaTid = typeof window !== 'undefined' && window.tid ? window.tid : '';\n\n const result: IMSISDNSubmissionResult = await triggerPin({\n window,\n country,\n slug,\n device,\n offer,\n msisdn,\n rockmanId,\n extraParams: newExtraParams,\n search,\n uniqid,\n evinaTid\n });\n\n if (result.success === false) {\n const error = new Error(`Error in submitMSISDN() trigger-pin action:\\n${result.message}`) as IError & {\n type: string;\n productUrl: string;\n };\n error.message = result.message;\n switch (true) {\n case result.message.includes('ALREADY SUBSCRIBED'):\n error.type = 'AlreadySubscribed';\n break;\n case result.message.includes('invalid'):\n error.type = 'InvalidMSISDN';\n break;\n default:\n error.type = null;\n }\n // error.type = result.message === 'ALREADY SUBSCRIBED' ? 'AlreadySubscribed' : 'InvalidMSISDN';\n error.productUrl = result.product_url ? result.product_url : '';\n console.error(error);\n throw error;\n } else {\n window.operator = result.operator; // currently used on server for KW_STC if present dont call empello for Shemaroo\n const codesWithMcpShied: { [key: string]: { [key: string]: string } } = {\n kw: {\n kw_viva: 'kw_viva'\n },\n k2: {\n k2_viva: 'k2_viva'\n },\n bh: {\n bh_viva: 'bh_viva'\n }\n };\n if (\n country &&\n result.operator &&\n ((codesWithMcpShied[country.toLowerCase()] &&\n codesWithMcpShied[country.toLowerCase()][result.operator.toLowerCase()]) ||\n country.toLowerCase() === 'iq') &&\n !window.isCallBlockApi &&\n !window.Empello // set on server https://www.notion.so/sammedia/KW-Agency-Shemaroo-STC-integration-1a114991683d4af79eb01a4d96789f30\n ) {\n try {\n const mcpShieldResult: IMcpShieldResult = await mcpShield({\n window,\n country,\n slug,\n device,\n offer,\n rockmanId,\n operator: result.operator,\n uniqid\n });\n if (mcpShieldResult.success === false) {\n console.warn(mcpShieldResult.message);\n } else {\n loadScriptInnerHtml(mcpShieldResult.source);\n uniqidResult = mcpShieldResult.uniqid;\n }\n } catch (err) {\n console.warn(err);\n }\n }\n\n if (result.javascript) {\n loadScriptInnerHtml(result.javascript);\n }\n\n return {\n type: 'SingleMSISDNSubmissionResult',\n pin: result.pin,\n uniqidResult,\n operator: result.operator,\n redirectUrl: result?.redirect_to_url, // For pin redirect empello\n ...(result?.userType ? { userType: result?.userType } : {}) // For Peru user plan if prepaid or postpaid\n };\n }\n}\n\nasync function submitMSISDNForMultipleOperators(\n window: Window,\n config: IConfig,\n internationalMSISDN: string,\n operators: string[],\n extraParams?: IHash\n): Promise<MultiOperatorMSISDNSubmissionResult> {\n const results = await Promise.all(\n operators.map(async (o) => {\n try {\n const singleResult = await submitMSISDNOnce(window, config, internationalMSISDN, {\n ...extraParams,\n operator: o\n });\n return right({ ...singleResult, operator: o });\n } catch (error) {\n return left(error);\n }\n })\n );\n\n const alreadySubscribed = results.find((r: any) => r.type === 'left' && r.value?.type === 'AlreadySubscribed');\n\n if (results.every((r) => r.type === 'left')) {\n // no submission worked\n throw results[0].value;\n } else if (alreadySubscribed) {\n throw alreadySubscribed.value;\n } else {\n return {\n type: 'MultiOperatorMSISDNSubmissionResult'\n };\n }\n}\n\nexport async function submitPIN(\n window: Window,\n pin: string,\n config: IConfig,\n extraParams: IHash\n): Promise<{ productUrl?: string; isAlreadySubscribed?: boolean; gatewayRedirectUrl?: string }> {\n if (window.hostCountry && window.hostSlug) {\n config.country = window.hostCountry;\n config.slug = window.hostSlug;\n }\n const { slug, country, device } = config;\n const { offer } = window.pac_analytics.visitor;\n\n const newExtraParams = extraParams || {};\n const searchObj = searchToObject(window) as any;\n if (searchObj?.success === 'true' && searchObj['msisdn-alias'] === '1') {\n newExtraParams['skip-validation'] = '1';\n }\n\n const { rockmanId } = window.pac_analytics.visitor;\n\n if (!pin) {\n const emptyPinError = new Error(`Error in submitMSISDN() verify-pin action:\\n Pin Cannot Be Empty`) as IError & {\n type: string;\n };\n emptyPinError.type = 'InvalidPIN';\n throw emptyPinError;\n }\n const uniqid = uniqidResult !== '' ? `&mcpUniqid=${uniqidResult}` : '';\n const evinaTid = typeof window !== 'undefined' && window.tid ? window.tid : '';\n const search = window.location.search.substr(1) || '';\n\n const pinResult: IPINSubmissionResult = await verifyPin({\n window,\n country,\n slug,\n device,\n offer,\n rockmanId,\n pin,\n extraParams: newExtraParams,\n uniqid,\n evinaTid,\n search\n });\n if (pinResult.success === false) {\n const pinErrorTypeMap: { [key: string]: string } = {\n 'pin does not match': 'InvalidPIN',\n 'mcp blocked': 'SessionBlocked',\n expired_pin: 'ExpiredPIN',\n insufficient_balance: 'InsufficientBalance'\n };\n const errorMessage = pinErrorTypeMap[pinResult.message as string];\n const pinError = new Error(`Error in submitMSISDN() verify-pin action:\\n${errorMessage}`) as IError & {\n type: string;\n };\n pinError.type = errorMessage || 'InvalidPIN';\n pinError.message = pinResult.message;\n console.error(pinError);\n throw pinError;\n } else if (pinResult.async === true) {\n // Needed for ES https://www.notion.so/sammedia/ES-OnMobile-Movistar-Direct-Ouisys-Integration-XR-Academy-ca60b176b0ea40a7b170e5d9e7deb491\n if (pinResult.product_url && pinResult.product_url !== '' && country?.toLowerCase() === 'es') {\n return { gatewayRedirectUrl: pinResult.product_url };\n }\n const check: () => Promise<ICheckSubscriptionResult> = () =>\n checkSubscription({ window, country, slug, device, offer, rockmanId, extraParams });\n\n const checkResult: ICheckSubscriptionResult = await loop(\n check,\n 100,\n (r) => r.success || r.message === 'invalid_pin',\n 0\n );\n if (checkResult.success === true) {\n const isAlreadySubscribed = pinResult.message === 'ALREADY SUBSCRIBED';\n return { productUrl: checkResult.product_url || null, isAlreadySubscribed };\n }\n const pinError = new Error(`Error in submitMSISDN() verify-pin action:\\n${checkResult.message}`) as IError & {\n type: string;\n };\n pinError.type = 'InvalidPIN';\n pinError.message = checkResult.message;\n\n throw pinError;\n } else {\n const isAlreadySubscribed = pinResult.message === 'ALREADY SUBSCRIBED';\n return { productUrl: pinResult.product_url || null, isAlreadySubscribed };\n }\n}\n","import { createAsyncThunk, createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport * as RDS from '../../common-types/RemoteDataState';\nimport {\n IHash,\n MSISDNEntryErrorTypes,\n MSISDNEntryFailure,\n 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 { 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 msisdnError: PinFlowState = {\n currentState: {\n type: 'MSISDNEntry',\n result: RDS.Failure<MSISDNEntryFailure, MSISDNEntrySuccess>({\n errorType: 'SomethingWentWrong',\n error: null\n })\n }\n };\n\n const thankYouState: PinFlowState = {\n currentState: {\n type: 'PINEntry',\n result: RDS.Success<PINEntryFailure, PINEntrySuccess>({\n finalUrl: search?.product_url || ''\n }),\n // @ts-ignore\n data: {\n msisdn: search?.msisdn || '',\n operator: search?.operator || ''\n }\n }\n };\n\n const initalPinEntryState: PinFlowState = {\n currentState: {\n type: 'PINEntry',\n result: RDS.NothingYet(),\n // @ts-ignore\n data: {\n msisdn: search?.msisdn || '',\n operator: search?.operator || ''\n }\n }\n };\n if (isPinEntryStep) {\n // Needed for shemroo the handler is injected on server\n window?.dispatchEvent(pinPageEvent);\n return initalPinEntryState;\n }\n if (isShowThankYouStep) {\n return thankYouState;\n }\n if (isShowCustomError) {\n return msisdnError;\n }\n\n if (search['mock-flow']) {\n switch (search['current-state']) {\n case 'msisdn-failure-state':\n return mockedMSISDNEntryFailure;\n case 'pin-state':\n // Needed for shemroo the handler is injected on server\n window?.dispatchEvent(pinPageEvent);\n return mockedPINState;\n case 'completed-state':\n return mockedCompletedState;\n default:\n console.error('Mock Flow not supported');\n return defaultInitialState;\n }\n } else {\n return defaultInitialState;\n }\n};\n\nconst initialState = setInitialState(window);\n\n/**\n * submitMSISDNAction\n * @returns {type: ' 'pinFlow/submitMSISDNAction', payload: {type: PossibleTypes.MO, result: PINEntryState}}\n \n * Calls trigger-pin api that sends a pin to the user\n * Sets state to show pin entry\n */\ninterface SubmitMSISDNArgs {\n window: Window;\n msisdn: string;\n extraParams?: IHash;\n}\nexport const submitMSISDNAction = createAsyncThunk<\n PINEntryState | 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 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') {\n tracker.advancedInFlow('tallyman.v1-pin', 'msisdn-submitted', { msisdn });\n 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 not found';\n tracker.recedeInFlow('tallyman.v1-pin', 'msisdn-submission-failure', {\n msisdn,\n errorType: 'TPayUnknownError',\n error: ex?.toString() || 'Error calling window.callConfirm function',\n message: ex.message\n });\n return rejectWithValue({\n errorType: 'TPayUnknownError',\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: 'TPayUnknownError',\n error: errorMsg,\n message: errorMsg\n });\n return rejectWithValue({\n errorType: 'TPayUnknownError',\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 let errorType: MSISDNEntryErrorTypes;\n switch (ex.type) {\n case 'AlreadySubscribed':\n errorType = 'AlreadySubscribed';\n break;\n case 'InvalidMSISDN':\n errorType = 'InvalidMSISDN';\n break;\n default:\n errorType = 'UnknownError';\n }\n\n tracker.recedeInFlow('tallyman.v1-pin', 'msisdn-submission-failure', {\n msisdn,\n errorType,\n error: ex.toString(),\n message: ex.message,\n productUrl: ex.productUrl\n });\n\n if (isHeaderEnrichmentSuccess) {\n dispatch(\n setStrategyExtraData({\n type: PossibleTypes.PIN,\n data: {\n isHeaderEnrichmentSuccess: false,\n config\n }\n })\n );\n }\n\n return rejectWithValue({\n errorType,\n error: ex.toString(),\n message: ex.message,\n productUrl: ex.productUrl\n });\n }\n});\n\n/**\n * submitPinAction\n * @returns {type: ' 'pinFlow/submitMSISDNAction', payload: {type: 'PINEntry', result: RDS.NothingYet()}}\n \n * Calls verify-pin api that check if the user enters a valid pin\n * Sets state to show thank you page if pin is valid\n */\ninterface SubmitPINArgs {\n window: Window;\n msisdn: string;\n pin: string;\n extraParams?: IHash;\n}\n\nexport const submitPinAction = createAsyncThunk<\n PINEntryState,\n SubmitPINArgs,\n {\n rejectValue: PINEntryFailure; // Type for rejectWithValue\n }\n>('pinFlow/submitPinAction', async ({ window, msisdn, pin, extraParams }, { getState, rejectWithValue }) => {\n const state: RootState = getState();\n\n if (!state?.strategy?.currentState?.data?.config) {\n return rejectWithValue({\n errorType: 'UnexpectedState'\n });\n }\n const { config } = state.strategy.currentState.data;\n const pinFlowCurrentState = state.pinFlow?.currentState;\n try {\n tracker.advancedInFlow('tallyman.v1-pin', 'pin-submitted', { msisdn, pin });\n const result = await submitPIN(window, pin, config, extraParams);\n tracker.advancedInFlow('tallyman.v1-pin', 'pin-submission-success', {\n msisdn,\n pin,\n finalUrl: result.productUrl\n });\n\n /**\n * Gateway redirect\n * Value returned in this case is actually the gateway url instead of the product url\n * More details on this ticket:\n * https://www.notion.so/sammedia/ES-OnMobile-Movistar-Direct-Ouisys-Integration-XR-Academy-ca60b176b0ea40a7b170e5d9e7deb491\n */\n // Start Gateway redirect\n if (result.gatewayRedirectUrl && result.gatewayRedirectUrl !== '') {\n tracker.advancedInFlow('tallyman.v1-pin', 'gateway-redirect', {\n msisdn,\n pin,\n gatewayRedirectUrl: result.gatewayRedirectUrl\n });\n window.location.href = result.gatewayRedirectUrl;\n }\n // End Gateway redirect\n\n // if storeMsisdn is true, encrypt msisdn and save it in cookie, localStorage, and zürch\n if (extraParams && extraParams.storeMsisdn && extraParams.storeMsisdn === 'true') {\n await storeMsisdn(msisdn)\n .then((data: any) => {\n if (data && data.data && data.data.success) {\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-stored-success');\n } else {\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-stored-failed');\n }\n })\n .catch((error) => {\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-stored-error', error);\n });\n }\n // End store msisdn\n\n return {\n ...pinFlowCurrentState,\n type: 'PINEntry',\n result: RDS.Success<PINEntryFailure, PINEntrySuccess>({\n finalUrl: result.productUrl,\n isAlreadySubscribed: result.isAlreadySubscribed || false\n })\n };\n } catch (ex) {\n console.warn(ex);\n let errorType: PINEntryErrorTypes;\n switch (ex.type) {\n case 'AlreadySubscribed':\n errorType = 'AlreadySubscribed';\n break;\n case 'InvalidPIN':\n errorType = 'InvalidPIN';\n break;\n case 'SessionBlocked':\n errorType = 'SessionBlocked';\n break;\n case 'ExpiredPIN':\n errorType = 'ExpiredPIN';\n break;\n case 'InsufficientBalance':\n errorType = 'InsufficientBalance';\n break;\n default:\n errorType = 'UnknownError';\n break;\n }\n tracker.recedeInFlow('tallyman.v1-pin', 'pin-submission-failure', {\n msisdn,\n pin,\n errorType,\n error: ex.toString(),\n message: ex.message,\n productUrl: ex.productUrl\n });\n // Redirect to the product url if returned in the exception\n setTimeout(() => {\n if (ex.productUrl) {\n window.location.href = ex.productUrl;\n }\n }, 0);\n\n return rejectWithValue({\n errorType,\n error: ex.toString(),\n message: ex.message,\n productUrl: ex.productUrl\n });\n }\n});\n\nexport const backToStartAction = createAsyncThunk<\n any,\n any,\n {\n rejectValue: any; // Type for rejectWithValue\n }\n>('pinFlow/backToStartAction', async (_, { 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 state.currentState = { type: 'MSISDNEntry', result: RDS.Loading(), data: state.currentState.data };\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 state.currentState = {\n type: 'MSISDNEntry',\n result: RDS.Failure(action.payload),\n data: state.currentState.data\n };\n })\n .addCase(submitPinAction.pending, (state) => {\n state.currentState = { type: 'PINEntry', result: RDS.Loading(), data: state.currentState.data };\n })\n .addCase(submitPinAction.fulfilled, (state, action: PayloadAction<PINEntryState>) => {\n state.currentState = action.payload;\n })\n .addCase(submitPinAction.rejected, (state, action: PayloadAction<PINEntryFailure>) => {\n state.currentState = { type: 'PINEntry', result: RDS.Failure(action.payload), data: state.currentState.data };\n })\n .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","checkIsCleanTraffic","country","window","shouldBlock","triggerPin","slug","device","offer","msisdn","rockmanId","extraParams","search","uniqid","evinaTid","cleanTrafficString","extraParamsQs","concat","Object","keys","map","k","filter","Boolean","join","cleanSearchParams","params","action","offerId","rockman_id","sam_evina_tid","page","encodeURIComponent","_b","location","href","language_code","languageCode","partner_transaction_id","partner_timestamp","partner_cid","antifraud_id","antifraud_id_js_code","antifraud_id_js_link","zain_antifraud_id","korek_antifraud_id","queryString","entries","__read","key","value","host","DEV_BASE_URL","url","fetch","then","x","json","verifyPin","pin","bupperizeCountry","ClickID","antifraud_click_id","mcpShield","operator","pageUrl","ipAdd","pac_analytics","visitor","ip","URLSearchParams","__assign","toString","client_lpu","append","submitMSISDN","maybeConfig","internationalMSISDN","config","automaticallySubmitAllOperators","operators","length","submitMSISDNForMultipleOperators","submitMSISDNOnce","uniqidResult","submissionError","newExtraParams","isSkipValidation","searchObj","searchToObject","success","skip_validation","match","substr","tid","sent","error","message","includes","productUrl","product_url","console","codesWithMcpShied","kw","kw_viva","k2","k2_viva","bh","bh_viva","toLowerCase","isCallBlockApi","Empello","mcpShieldResult","warn","loadScriptInnerHtml","source","err_2","javascript","redirectUrl","redirect_to_url","userType","Promise","all","o","__awaiter","_this","singleResult","right","left","error_1","results","alreadySubscribed","find","r","every","submitPIN","hostCountry","hostSlug","emptyPinError","pinResult","errorMessage","expired_pin","insufficient_balance","pinError","async","gatewayRedirectUrl","check","response","checkSubscription","loop","checkResult","isAlreadySubscribed","mockedPINState","RDS.NothingYet","actualPIN","pinMaxLength","mockedCompletedState","RDS.Success","finalUrl","mockedMSISDNEntryFailure","RDS.Failure","errorType","defaultInitialState","initialState","pinPageEvent","Event","isPinEntryStep","ui_show_pin_entry","isShowThankYouStep","isShowCustomError","show_custom_error","msisdnError","thankYouState","initalPinEntryState","dispatchEvent","setInitialState","submitMSISDNAction","createAsyncThunk","getState","dispatch","rejectWithValue","_f","_d","strategy","_e","_c","isHeaderEnrichmentSuccess","pinFlowCurrentState","_g","getInputValuePrefix","replace","jsLinkResult","_j","_h","genericJsLinkResult","gateway","tracker","advancedInFlow","callConfirm","RDS.Loading","ex","errorMsg_1","recedeInFlow","errorMsg","msisdnSubmissionResult","_k","customEvent","storeMsisdn","catch","pinMaxLengthByOp","SA_MOBILY","SA_STC","SA_ZAIN","ex_1","setStrategyExtraData","PossibleTypes","PIN","submitPinAction","ex_2","setTimeout","backToStartAction","_","identifyStrategy","countryCodes","PS","international","normalizedCountry","toUpperCase","countryCode","pinFlowSlice","createSlice","name","reducers","extraReducers","builder","addCase","pending","fulfilled","payload","rejected","pinFlowReducer","reducer","actions"],"mappings":"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"}
1
+ {"version":3,"file":"pinFlow.js","sources":["../src/flows/pinFlow/hooks/usePinFlowState.ts","../src/flows/pinFlow/match.ts","../src/sharedApi/checkSubscription.ts","../src/flows/pinFlow/api.ts","../src/flows/pinFlow/main.ts","../src/flows/pinFlow/pinFlowSlice.ts"],"sourcesContent":["import { useSelector as IuseSelector } from 'react-redux';\nimport { RootState } from '../../../sharedFlowTypes/StrategyTypes';\n\nexport const usePinFlowState = (useSelector: typeof IuseSelector) => {\n const currentState = useSelector((state: RootState) => state.pinFlow.currentState);\n return currentState;\n};\n","import * as RDS from '../../common-types/RemoteDataState';\nimport {\n IMsisdnSumbitNextData,\n MSISDNEntryFailure,\n MSISDNEntrySuccess,\n PINEntryFailure,\n PINEntrySuccess,\n PinFlowCurrentState\n} from '../../sharedFlowTypes/PinTypes';\n\nfunction pinFlowMatch<R>({\n msisdnEntry,\n pinEntry\n}: {\n msisdnEntry: (rds: RDS.RemoteDataState<MSISDNEntryFailure, MSISDNEntrySuccess>) => R;\n pinEntry: (rds: RDS.RemoteDataState<PINEntryFailure, PINEntrySuccess>, nextData: IMsisdnSumbitNextData) => R;\n}): (state: PinFlowCurrentState) => R {\n return (state) => {\n switch (state.type) {\n case 'MSISDNEntry':\n return msisdnEntry(state.result);\n case 'PINEntry':\n return pinEntry(state.result, state.data);\n default:\n throw new Error('Invalid State');\n }\n };\n}\n\nexport { pinFlowMatch };\n","import { ICheckSubscriptionResult } from '../common-types/ICheckSubscriptionResult';\nimport { IHash } from '../common-types/IHash';\nimport { bupperizeCountry } from '../utilities/bupperizeCountry';\n\nconst checkSubscription = async ({\n window,\n country,\n slug,\n device,\n offer,\n rockmanId\n}: {\n window: Window;\n country: string;\n slug: string;\n device: string;\n offer: string;\n rockmanId: string;\n extraParams?: IHash; // Marked as optional if currently unused\n}): Promise<ICheckSubscriptionResult> => {\n const params = {\n action: 'check-subscription',\n country: bupperizeCountry(country),\n slug,\n device,\n offerId: offer,\n rockman_id: rockmanId\n };\n\n const queryString = Object.entries(params)\n .filter(([_, value]) => value !== undefined && value !== null)\n .map(([key, value]) => `${key}=${encodeURIComponent(value)}`)\n .join('&');\n\n const host = window.DEV_BASE_URL || '';\n const url = `${host}/tallyman/v1/?${queryString}`;\n return fetch(url).then((response) => response.json());\n};\n\nexport { checkSubscription };\n","import { IHash, IMcpShieldResult, IMSISDNSubmissionResult, IPINSubmissionResult } from '../../sharedFlowTypes/PinTypes';\nimport { bupperizeCountry } from '../../utilities/bupperizeCountry';\nimport { cleanSearchParams } from '../../utilities/cleanSearchParams';\n\nconst checkIsCleanTraffic = (country: string): string => {\n if (country === 'be') {\n if (typeof window !== 'undefined' && window.shouldBlock === true) {\n return '&is-clean-traffic=false';\n }\n return '&is-clean-traffic=true';\n }\n return '';\n};\nconst triggerPin = async ({\n window,\n country,\n slug,\n device,\n offer,\n msisdn,\n rockmanId,\n extraParams,\n search,\n uniqid,\n evinaTid\n}: {\n window?: Window;\n country: string;\n slug: string;\n device: 'smart' | 'feature';\n offer: string;\n msisdn: string;\n rockmanId: string;\n extraParams: IHash;\n search: string;\n uniqid?: string;\n evinaTid?: string;\n}): Promise<IMSISDNSubmissionResult> => {\n const cleanTrafficString = checkIsCleanTraffic(country);\n const extraParamsQs = `&${Object.keys(extraParams)\n .map((k) => (extraParams[k] ? `${k}=${extraParams[k]}` : ''))\n .filter(Boolean)\n .join('&')}`;\n\n // Remove conflicting params from url\n search = cleanSearchParams(search);\n\n // Base parameters object\n const params = {\n action: 'trigger-pin',\n country,\n slug,\n device,\n offerId: offer,\n msisdn,\n rockman_id: rockmanId,\n sam_evina_tid: evinaTid,\n page: encodeURIComponent(window?.location?.href),\n language_code: window.languageCode || '',\n partner_transaction_id: window.partner_transaction_id || '',\n partner_timestamp: window.partner_timestamp || '',\n partner_cid: window.partner_cid || '',\n uniqid: uniqid || '',\n\n antifraud_id: window.antifraud_id || '',\n // More specific antifraud IDs will eventuallly replace antifraud_id\n // https://www.notion.so/sammedia/KW-Agency-Globocom-KW-ENTERTAINMENT-STORE-GAMESOLUTELY-GLING-Landing-Page-Test-a9841b14218b42709ffb1a2d41428275?d=f2a8d09b1e8c4fd4bdab69ab5dda1f25\n antifraud_id_js_code: window.antifraud_id_js_code || '',\n antifraud_id_js_link: window.antifraud_id_js_link || '',\n zain_antifraud_id: window.zain_antifraud_id || '',\n korek_antifraud_id: window.korek_antifraud_id || ''\n };\n\n // Convert params object to query string\n const queryString = Object.entries(params)\n .filter(([_, value]) => value)\n .map(([key, value]) => `${key}=${value}`)\n .join('&');\n const host = window.DEV_BASE_URL || '';\n const url = `${host}/tallyman/v1/?${queryString}${cleanTrafficString}${extraParamsQs}${search ? `&${search}` : ''}`;\n\n return fetch(url).then((x) => x.json());\n};\n\nconst verifyPin = async ({\n window,\n country,\n slug,\n device,\n offer,\n rockmanId,\n pin,\n extraParams,\n uniqid,\n evinaTid,\n search\n}: {\n window: Window;\n country: string;\n slug: string;\n device: string;\n offer: string;\n rockmanId: string;\n pin: string;\n extraParams: IHash;\n uniqid: string;\n evinaTid: string;\n search: string;\n}): Promise<IPINSubmissionResult> => {\n const cleanTrafficString = checkIsCleanTraffic(country);\n const extraParamsQs = `&${Object.keys(extraParams)\n .map((k) => `${k}=${extraParams[k]}`)\n .join('&')}`;\n // Remove conflicting params from url\n search = cleanSearchParams(search);\n // Base parameters object\n const params = {\n action: 'verify-pin',\n country: bupperizeCountry(country),\n slug,\n device,\n offerId: offer,\n rockman_id: rockmanId,\n pin,\n page: encodeURIComponent(window?.location?.href),\n language_code: window.languageCode || '',\n ClickID: window.antifraud_click_id || '',\n partner_cid: window.partner_cid || '',\n sam_evina_tid: evinaTid,\n uniqid,\n // More specific antifraud IDs will eventuallly replace antifraud_id\n // https://www.notion.so/sammedia/KW-Agency-Globocom-KW-ENTERTAINMENT-STORE-GAMESOLUTELY-GLING-Landing-Page-Test-a9841b14218b42709ffb1a2d41428275?d=f2a8d09b1e8c4fd4bdab69ab5dda1f25\n antifraud_id_js_code: window.antifraud_id_js_code || '',\n antifraud_id_js_link: window.antifraud_id_js_link || '',\n zain_antifraud_id: window.zain_antifraud_id || '',\n korek_antifraud_id: window.korek_antifraud_id || ''\n };\n\n // Convert params object to query string\n const queryString = Object.entries(params)\n .filter(([_, value]) => value)\n .map(([key, value]) => `${key}=${value}`)\n .join('&');\n\n const host = window.DEV_BASE_URL || '';\n const url = `${host}/tallyman/v1/?${queryString}${cleanTrafficString}${extraParamsQs}${search ? `&${search}` : ''}`;\n\n return fetch(url).then((x) => x.json());\n};\n\nconst mcpShield = async ({\n window,\n country,\n slug,\n device,\n offer,\n rockmanId,\n operator,\n uniqid\n}: {\n window: Window;\n country: string;\n slug: string;\n device: string;\n offer: string;\n rockmanId: string;\n operator?: string;\n uniqid?: string;\n}): Promise<IMcpShieldResult> => {\n const pageUrl = window.location.href;\n const ipAdd = window.pac_analytics.visitor.ip;\n\n const params = new URLSearchParams({\n action: 'mcp-shield',\n country,\n slug,\n device,\n offerId: offer.toString(),\n rockman_id: rockmanId,\n client_lpu: pageUrl,\n ...(operator && { operator }),\n ...(uniqid && { uniqid })\n });\n\n // Conditionally add client_ip if it exists\n if (ipAdd) {\n params.append('client_ip', ipAdd);\n }\n\n const host = window.DEV_BASE_URL || '';\n const url = `${host}/tallyman/v1/?${params.toString()}`;\n\n return fetch(url).then((x) => x.json());\n};\n\nexport { triggerPin, verifyPin, mcpShield };\n","import { ICheckSubscriptionResult } from '../../common-types/ICheckSubscriptionResult';\nimport { IError } from '../../common-types/IError';\nimport { checkSubscription } from '../../sharedApi/checkSubscription';\nimport {\n IHash,\n IMcpShieldResult,\n IMSISDNSubmissionResult,\n IPINSubmissionResult,\n MultiOperatorMSISDNSubmissionResult,\n SingleMSISDNSubmissionResult\n} from '../../sharedFlowTypes/PinTypes';\nimport { IConfig, IStrategyIDentifyUserResult } from '../../sharedFlowTypes/StrategyTypes';\nimport { left, loop, right } from '../../utilities/helpers';\nimport { loadScriptInnerHtml } from '../../utilities/loadScriptInnerHtml';\nimport { searchToObject } from '../../utilities/searchToObject';\nimport { mcpShield, triggerPin, verifyPin } from './api';\n\nexport default async function submitMSISDN(\n window: Window,\n maybeConfig: IConfig,\n internationalMSISDN: string,\n extraParams?: IHash\n): Promise<SingleMSISDNSubmissionResult | MultiOperatorMSISDNSubmissionResult> {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const config: IConfig = { offer: window.pac_analytics.visitor.offer, ...(maybeConfig || {}) };\n if (config.automaticallySubmitAllOperators === true && !!config.operators && config.operators.length > 0) {\n return submitMSISDNForMultipleOperators(window, config, internationalMSISDN, config.operators, extraParams);\n }\n return submitMSISDNOnce(window, config, internationalMSISDN, extraParams);\n}\n\nlet uniqidResult = '';\n// eslint-disable-next-line consistent-return\nexport async function loadMcpShield(window: Window, config: IConfig): Promise<IMcpShieldResult> {\n if (config) {\n const { slug, country, device } = config;\n\n const { offer } = window.pac_analytics.visitor;\n const { rockmanId } = window.pac_analytics.visitor;\n\n try {\n const mcpShieldResult: IMcpShieldResult = await mcpShield({ window, country, slug, device, offer, rockmanId });\n if (mcpShieldResult.success === false) {\n console.warn(mcpShieldResult.message);\n } else {\n loadScriptInnerHtml(mcpShieldResult.source);\n uniqidResult = mcpShieldResult.uniqid;\n return mcpShieldResult;\n }\n } catch (err) {\n console.warn(err);\n }\n }\n}\n\nasync function submitMSISDNOnce(\n window: Window,\n config: IConfig,\n internationalMSISDN: string,\n extraParams?: IHash\n): Promise<SingleMSISDNSubmissionResult> {\n if (!internationalMSISDN) {\n const submissionError = new Error(`Error in submitMSISDN() trigger-pin action`) as IError & { type: string };\n submissionError.type = 'InvalidMSISDN';\n throw submissionError;\n }\n const newExtraParams = extraParams || {};\n let isSkipValidation = false;\n const searchObj = searchToObject(window) as IStrategyIDentifyUserResult;\n // @ts-ignore\n if ((searchObj?.success === 'true' && searchObj['msisdn-alias'] === '1') || window.skip_validation === true) {\n // Search param is set to 1 for header enrichment when the msisdn is masked\n newExtraParams['skip-validation'] = '1';\n }\n\n if (newExtraParams['skip-validation'] === '1') {\n isSkipValidation = true;\n }\n\n const msisdn = isSkipValidation ? internationalMSISDN || window.msisdn : internationalMSISDN.match(/\\d+/gi).join(''); // tallyman API expects international msisdn without any special character\n const { rockmanId } = window.pac_analytics.visitor;\n\n const { slug, country, device, offer } = config;\n\n const search = window.location.search.substr(1) || '';\n const uniqid = !!uniqidResult && uniqidResult !== '' ? `&mcpUniqid=${uniqidResult}` : '';\n const evinaTid = typeof window !== 'undefined' && window.tid ? window.tid : '';\n\n const result: IMSISDNSubmissionResult = await triggerPin({\n window,\n country,\n slug,\n device,\n offer,\n msisdn,\n rockmanId,\n extraParams: newExtraParams,\n search,\n uniqid,\n evinaTid\n });\n\n if (result.success === false) {\n const error = new Error(`Error in submitMSISDN() trigger-pin action:\\n${result.message}`) as IError & {\n type: string;\n productUrl: string;\n };\n error.message = result.message;\n switch (true) {\n case result.message.includes('ALREADY SUBSCRIBED'):\n error.type = 'AlreadySubscribed';\n break;\n case result.message.includes('invalid'):\n error.type = 'InvalidMSISDN';\n break;\n default:\n error.type = null;\n }\n // error.type = result.message === 'ALREADY SUBSCRIBED' ? 'AlreadySubscribed' : 'InvalidMSISDN';\n error.productUrl = result.product_url ? result.product_url : '';\n console.error(error);\n throw error;\n } else {\n window.operator = result.operator; // currently used on server for KW_STC if present dont call empello for Shemaroo\n const codesWithMcpShied: { [key: string]: { [key: string]: string } } = {\n kw: {\n kw_viva: 'kw_viva'\n },\n k2: {\n k2_viva: 'k2_viva'\n },\n bh: {\n bh_viva: 'bh_viva'\n }\n };\n if (\n country &&\n result.operator &&\n ((codesWithMcpShied[country.toLowerCase()] &&\n codesWithMcpShied[country.toLowerCase()][result.operator.toLowerCase()]) ||\n country.toLowerCase() === 'iq') &&\n !window.isCallBlockApi &&\n !window.Empello // set on server https://www.notion.so/sammedia/KW-Agency-Shemaroo-STC-integration-1a114991683d4af79eb01a4d96789f30\n ) {\n try {\n const mcpShieldResult: IMcpShieldResult = await mcpShield({\n window,\n country,\n slug,\n device,\n offer,\n rockmanId,\n operator: result.operator,\n uniqid\n });\n if (mcpShieldResult.success === false) {\n console.warn(mcpShieldResult.message);\n } else {\n loadScriptInnerHtml(mcpShieldResult.source);\n uniqidResult = mcpShieldResult.uniqid;\n }\n } catch (err) {\n console.warn(err);\n }\n }\n\n if (result.javascript) {\n loadScriptInnerHtml(result.javascript);\n }\n\n return {\n type: 'SingleMSISDNSubmissionResult',\n pin: result.pin,\n uniqidResult,\n operator: result.operator,\n redirectUrl: result?.redirect_to_url, // For pin redirect empello\n ...(result?.userType ? { userType: result?.userType } : {}) // For Peru user plan if prepaid or postpaid\n };\n }\n}\n\nasync function submitMSISDNForMultipleOperators(\n window: Window,\n config: IConfig,\n internationalMSISDN: string,\n operators: string[],\n extraParams?: IHash\n): Promise<MultiOperatorMSISDNSubmissionResult> {\n const results = await Promise.all(\n operators.map(async (o) => {\n try {\n const singleResult = await submitMSISDNOnce(window, config, internationalMSISDN, {\n ...extraParams,\n operator: o\n });\n return right({ ...singleResult, operator: o });\n } catch (error) {\n return left(error);\n }\n })\n );\n\n const alreadySubscribed = results.find((r: any) => r.type === 'left' && r.value?.type === 'AlreadySubscribed');\n\n if (results.every((r) => r.type === 'left')) {\n // no submission worked\n throw results[0].value;\n } else if (alreadySubscribed) {\n throw alreadySubscribed.value;\n } else {\n return {\n type: 'MultiOperatorMSISDNSubmissionResult'\n };\n }\n}\n\nexport async function submitPIN(\n window: Window,\n pin: string,\n config: IConfig,\n extraParams: IHash\n): Promise<{ productUrl?: string; isAlreadySubscribed?: boolean; gatewayRedirectUrl?: string }> {\n if (window.hostCountry && window.hostSlug) {\n config.country = window.hostCountry;\n config.slug = window.hostSlug;\n }\n const { slug, country, device } = config;\n const { offer } = window.pac_analytics.visitor;\n\n const newExtraParams = extraParams || {};\n const searchObj = searchToObject(window) as any;\n if (searchObj?.success === 'true' && searchObj['msisdn-alias'] === '1') {\n newExtraParams['skip-validation'] = '1';\n }\n\n const { rockmanId } = window.pac_analytics.visitor;\n\n if (!pin) {\n const emptyPinError = new Error(`Error in submitMSISDN() verify-pin action:\\n Pin Cannot Be Empty`) as IError & {\n type: string;\n };\n emptyPinError.type = 'InvalidPIN';\n throw emptyPinError;\n }\n const uniqid = uniqidResult !== '' ? `&mcpUniqid=${uniqidResult}` : '';\n const evinaTid = typeof window !== 'undefined' && window.tid ? window.tid : '';\n const search = window.location.search.substr(1) || '';\n\n const pinResult: IPINSubmissionResult = await verifyPin({\n window,\n country,\n slug,\n device,\n offer,\n rockmanId,\n pin,\n extraParams: newExtraParams,\n uniqid,\n evinaTid,\n search\n });\n if (pinResult.success === false) {\n const pinErrorTypeMap: { [key: string]: string } = {\n 'pin does not match': 'InvalidPIN',\n 'mcp blocked': 'SessionBlocked',\n expired_pin: 'ExpiredPIN',\n insufficient_balance: 'InsufficientBalance'\n };\n const errorMessage = pinErrorTypeMap[pinResult.message as string];\n const pinError = new Error(`Error in submitMSISDN() verify-pin action:\\n${errorMessage}`) as IError & {\n type: string;\n };\n pinError.type = errorMessage || 'InvalidPIN';\n pinError.message = pinResult.message;\n console.error(pinError);\n throw pinError;\n } else if (pinResult.async === true) {\n // Needed for ES https://www.notion.so/sammedia/ES-OnMobile-Movistar-Direct-Ouisys-Integration-XR-Academy-ca60b176b0ea40a7b170e5d9e7deb491\n if (pinResult.product_url && pinResult.product_url !== '' && country?.toLowerCase() === 'es') {\n return { gatewayRedirectUrl: pinResult.product_url };\n }\n const check: () => Promise<ICheckSubscriptionResult> = () =>\n checkSubscription({ window, country, slug, device, offer, rockmanId, extraParams });\n\n const checkResult: ICheckSubscriptionResult = await loop(\n check,\n 100,\n (r) => r.success || r.message === 'invalid_pin',\n 0\n );\n if (checkResult.success === true) {\n const isAlreadySubscribed = pinResult.message === 'ALREADY SUBSCRIBED';\n return { productUrl: checkResult.product_url || null, isAlreadySubscribed };\n }\n const pinError = new Error(`Error in submitMSISDN() verify-pin action:\\n${checkResult.message}`) as IError & {\n type: string;\n };\n pinError.type = 'InvalidPIN';\n pinError.message = checkResult.message;\n\n throw pinError;\n } else {\n const isAlreadySubscribed = pinResult.message === 'ALREADY SUBSCRIBED';\n return { productUrl: pinResult.product_url || null, isAlreadySubscribed };\n }\n}\n","import { createAsyncThunk, createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport * as RDS from '../../common-types/RemoteDataState';\nimport {\n IHash,\n MSISDNEntryErrorTypes,\n MSISDNEntryFailure,\n 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 { 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 msisdnError: PinFlowState = {\n currentState: {\n type: 'MSISDNEntry',\n result: RDS.Failure<MSISDNEntryFailure, MSISDNEntrySuccess>({\n errorType: 'SomethingWentWrong',\n error: null\n })\n }\n };\n\n const thankYouState: PinFlowState = {\n currentState: {\n type: 'PINEntry',\n result: RDS.Success<PINEntryFailure, PINEntrySuccess>({\n finalUrl: search?.product_url || ''\n }),\n // @ts-ignore\n data: {\n msisdn: search?.msisdn || '',\n operator: search?.operator || ''\n }\n }\n };\n\n const initalPinEntryState: PinFlowState = {\n currentState: {\n type: 'PINEntry',\n result: RDS.NothingYet(),\n // @ts-ignore\n data: {\n msisdn: search?.msisdn || '',\n operator: search?.operator || ''\n }\n }\n };\n if (isPinEntryStep) {\n // Needed for shemroo the handler is injected on server\n window?.dispatchEvent(pinPageEvent);\n return initalPinEntryState;\n }\n if (isShowThankYouStep) {\n return thankYouState;\n }\n if (isShowCustomError) {\n return msisdnError;\n }\n\n if (search['mock-flow']) {\n switch (search['current-state']) {\n case 'msisdn-failure-state':\n return mockedMSISDNEntryFailure;\n case 'pin-state':\n // Needed for shemroo the handler is injected on server\n window?.dispatchEvent(pinPageEvent);\n return mockedPINState;\n case 'completed-state':\n return mockedCompletedState;\n default:\n console.error('Mock Flow not supported');\n return defaultInitialState;\n }\n } else {\n return defaultInitialState;\n }\n};\n\nconst initialState = setInitialState(window);\n\n/**\n * submitMSISDNAction\n * @returns {type: ' 'pinFlow/submitMSISDNAction', payload: {type: PossibleTypes.MO, result: PINEntryState}}\n \n * Calls trigger-pin api that sends a pin to the user\n * Sets state to show pin entry\n */\ninterface SubmitMSISDNArgs {\n window: Window;\n msisdn: string;\n extraParams?: IHash;\n}\nexport const submitMSISDNAction = createAsyncThunk<\n PINEntryState | 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 { '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?.['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 not found';\n tracker.recedeInFlow('tallyman.v1-pin', 'msisdn-submission-failure', {\n msisdn,\n errorType: 'TPayUnknownError',\n error: ex?.toString() || 'Error calling window.callConfirm function',\n message: ex.message\n });\n return rejectWithValue({\n errorType: 'TPayUnknownError',\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: 'TPayUnknownError',\n error: errorMsg,\n message: errorMsg\n });\n return rejectWithValue({\n errorType: 'TPayUnknownError',\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 let errorType: MSISDNEntryErrorTypes;\n switch (ex.type) {\n case 'AlreadySubscribed':\n errorType = 'AlreadySubscribed';\n break;\n case 'InvalidMSISDN':\n errorType = 'InvalidMSISDN';\n break;\n default:\n errorType = 'UnknownError';\n }\n\n tracker.recedeInFlow('tallyman.v1-pin', 'msisdn-submission-failure', {\n msisdn,\n errorType,\n error: ex.toString(),\n message: ex.message,\n productUrl: ex.productUrl\n });\n\n if (isHeaderEnrichmentSuccess) {\n dispatch(\n setStrategyExtraData({\n type: PossibleTypes.PIN,\n data: {\n isHeaderEnrichmentSuccess: false,\n config\n }\n })\n );\n }\n\n return rejectWithValue({\n errorType,\n error: ex.toString(),\n message: ex.message,\n productUrl: ex.productUrl\n });\n }\n});\n\n/**\n * submitPinAction\n * @returns {type: ' 'pinFlow/submitMSISDNAction', payload: {type: 'PINEntry', result: RDS.NothingYet()}}\n \n * Calls verify-pin api that check if the user enters a valid pin\n * Sets state to show thank you page if pin is valid\n */\ninterface SubmitPINArgs {\n window: Window;\n msisdn: string;\n pin: string;\n extraParams?: IHash;\n}\n\nexport const submitPinAction = createAsyncThunk<\n PINEntryState,\n SubmitPINArgs,\n {\n rejectValue: PINEntryFailure; // Type for rejectWithValue\n }\n>('pinFlow/submitPinAction', async ({ window, msisdn, pin, extraParams }, { getState, rejectWithValue }) => {\n const state: RootState = getState();\n\n if (!state?.strategy?.currentState?.data?.config) {\n return rejectWithValue({\n errorType: 'UnexpectedState'\n });\n }\n const { config } = state.strategy.currentState.data;\n const pinFlowCurrentState = state.pinFlow?.currentState;\n try {\n tracker.advancedInFlow('tallyman.v1-pin', 'pin-submitted', { msisdn, pin });\n const result = await submitPIN(window, pin, config, extraParams);\n tracker.advancedInFlow('tallyman.v1-pin', 'pin-submission-success', {\n msisdn,\n pin,\n finalUrl: result.productUrl\n });\n\n /**\n * Gateway redirect\n * Value returned in this case is actually the gateway url instead of the product url\n * More details on this ticket:\n * https://www.notion.so/sammedia/ES-OnMobile-Movistar-Direct-Ouisys-Integration-XR-Academy-ca60b176b0ea40a7b170e5d9e7deb491\n */\n // Start Gateway redirect\n if (result.gatewayRedirectUrl && result.gatewayRedirectUrl !== '') {\n tracker.advancedInFlow('tallyman.v1-pin', 'gateway-redirect', {\n msisdn,\n pin,\n gatewayRedirectUrl: result.gatewayRedirectUrl\n });\n window.location.href = result.gatewayRedirectUrl;\n }\n // End Gateway redirect\n\n // if storeMsisdn is true, encrypt msisdn and save it in cookie, localStorage, and zürch\n if (extraParams && extraParams.storeMsisdn && extraParams.storeMsisdn === 'true') {\n await storeMsisdn(msisdn)\n .then((data: any) => {\n if (data && data.data && data.data.success) {\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-stored-success');\n } else {\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-stored-failed');\n }\n })\n .catch((error) => {\n tracker.customEvent('Flow', 'advance-auto', 'msisdn-stored-error', error);\n });\n }\n // End store msisdn\n\n return {\n ...pinFlowCurrentState,\n type: 'PINEntry',\n result: RDS.Success<PINEntryFailure, PINEntrySuccess>({\n finalUrl: result.productUrl,\n isAlreadySubscribed: result.isAlreadySubscribed || false\n })\n };\n } catch (ex) {\n console.warn(ex);\n let errorType: PINEntryErrorTypes;\n switch (ex.type) {\n case 'AlreadySubscribed':\n errorType = 'AlreadySubscribed';\n break;\n case 'InvalidPIN':\n errorType = 'InvalidPIN';\n break;\n case 'SessionBlocked':\n errorType = 'SessionBlocked';\n break;\n case 'ExpiredPIN':\n errorType = 'ExpiredPIN';\n break;\n case 'InsufficientBalance':\n errorType = 'InsufficientBalance';\n break;\n default:\n errorType = 'UnknownError';\n break;\n }\n tracker.recedeInFlow('tallyman.v1-pin', 'pin-submission-failure', {\n msisdn,\n pin,\n errorType,\n error: ex.toString(),\n message: ex.message,\n productUrl: ex.productUrl\n });\n // Redirect to the product url if returned in the exception\n setTimeout(() => {\n if (ex.productUrl) {\n window.location.href = ex.productUrl;\n }\n }, 0);\n\n return rejectWithValue({\n errorType,\n error: ex.toString(),\n message: ex.message,\n productUrl: ex.productUrl\n });\n }\n});\n\nexport const backToStartAction = createAsyncThunk<\n any,\n any,\n {\n rejectValue: any; // Type for rejectWithValue\n }\n>('pinFlow/backToStartAction', async (_, { 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 state.currentState = { type: 'MSISDNEntry', result: RDS.Loading(), data: state.currentState.data };\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 state.currentState = {\n type: 'MSISDNEntry',\n result: RDS.Failure(action.payload),\n data: state.currentState.data\n };\n })\n .addCase(submitPinAction.pending, (state) => {\n state.currentState = { type: 'PINEntry', result: RDS.Loading(), data: state.currentState.data };\n })\n .addCase(submitPinAction.fulfilled, (state, action: PayloadAction<PINEntryState>) => {\n state.currentState = action.payload;\n })\n .addCase(submitPinAction.rejected, (state, action: PayloadAction<PINEntryFailure>) => {\n state.currentState = { type: 'PINEntry', result: RDS.Failure(action.payload), data: state.currentState.data };\n })\n .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","checkIsCleanTraffic","country","window","shouldBlock","triggerPin","slug","device","offer","msisdn","rockmanId","extraParams","search","uniqid","evinaTid","cleanTrafficString","extraParamsQs","concat","Object","keys","map","k","filter","Boolean","join","cleanSearchParams","params","action","offerId","rockman_id","sam_evina_tid","page","encodeURIComponent","_b","location","href","language_code","languageCode","partner_transaction_id","partner_timestamp","partner_cid","antifraud_id","antifraud_id_js_code","antifraud_id_js_link","zain_antifraud_id","korek_antifraud_id","queryString","entries","__read","key","value","host","DEV_BASE_URL","url","fetch","then","x","json","verifyPin","pin","bupperizeCountry","ClickID","antifraud_click_id","mcpShield","operator","pageUrl","ipAdd","pac_analytics","visitor","ip","URLSearchParams","__assign","toString","client_lpu","append","submitMSISDN","maybeConfig","internationalMSISDN","config","automaticallySubmitAllOperators","operators","length","submitMSISDNForMultipleOperators","submitMSISDNOnce","uniqidResult","submissionError","newExtraParams","isSkipValidation","searchObj","searchToObject","success","skip_validation","match","substr","tid","sent","error","message","includes","productUrl","product_url","console","codesWithMcpShied","kw","kw_viva","k2","k2_viva","bh","bh_viva","toLowerCase","isCallBlockApi","Empello","mcpShieldResult","warn","loadScriptInnerHtml","source","err_2","javascript","redirectUrl","redirect_to_url","userType","Promise","all","o","__awaiter","_this","singleResult","right","left","error_1","results","alreadySubscribed","find","r","every","submitPIN","hostCountry","hostSlug","emptyPinError","pinResult","errorMessage","expired_pin","insufficient_balance","pinError","async","gatewayRedirectUrl","check","response","checkSubscription","loop","checkResult","isAlreadySubscribed","mockedPINState","RDS.NothingYet","actualPIN","pinMaxLength","mockedCompletedState","RDS.Success","finalUrl","mockedMSISDNEntryFailure","RDS.Failure","errorType","defaultInitialState","initialState","pinPageEvent","Event","isPinEntryStep","ui_show_pin_entry","isShowThankYouStep","isShowCustomError","show_custom_error","msisdnError","thankYouState","initalPinEntryState","dispatchEvent","setInitialState","submitMSISDNAction","createAsyncThunk","getState","dispatch","rejectWithValue","_f","_d","strategy","_e","_c","isHeaderEnrichmentSuccess","pinFlowCurrentState","_g","getInputValuePrefix","replace","jsLinkResult","_j","_h","genericJsLinkResult","gateway","tracker","advancedInFlow","_k","callConfirm","RDS.Loading","ex","errorMsg_1","recedeInFlow","errorMsg","msisdnSubmissionResult","customEvent","storeMsisdn","catch","pinMaxLengthByOp","SA_MOBILY","SA_STC","SA_ZAIN","ex_1","setStrategyExtraData","PossibleTypes","PIN","submitPinAction","ex_2","setTimeout","backToStartAction","_","identifyStrategy","countryCodes","PS","international","normalizedCountry","toUpperCase","countryCode","pinFlowSlice","createSlice","name","reducers","extraReducers","builder","addCase","pending","fulfilled","payload","rejected","pinFlowReducer","reducer","actions"],"mappings":"+sBAGO,IAAMA,EAAkB,SAACC,GAE9B,OADqBA,GAAY,SAACC,GAAqB,OAAAA,EAAMC,QAAQC,YAAd,GAEzD,ECIA,SAASC,EAAgBC,OACvBC,EAAWD,EAAAC,YACXC,EAAQF,EAAAE,SAKR,OAAO,SAACN,GACN,OAAQA,EAAMO,MACZ,IAAK,cACH,OAAOF,EAAYL,EAAMQ,QAC3B,IAAK,WACH,OAAOF,EAASN,EAAMQ,OAAQR,EAAMS,MACtC,QACE,MAAM,IAAIC,MAAM,iBAEtB,CACF,CCvBA,ICAMC,EAAsB,SAACC,GAC3B,MAAgB,OAAZA,EACoB,oBAAXC,SAAiD,IAAvBA,OAAOC,YACnC,0BAEF,yBAEF,EACT,EACMC,EAAa,SAAOX,GACxB,IAAAS,EAAMT,EAAAS,OACND,EAAOR,EAAAQ,QACPI,EAAIZ,EAAAY,KACJC,EAAMb,EAAAa,OACNC,UACAC,EAAMf,EAAAe,OACNC,EAAShB,EAAAgB,UACTC,EAAWjB,EAAAiB,YACXC,EAAMlB,EAAAkB,OACNC,EAAMnB,EAAAmB,OACNC,EAAQpB,EAAAoB,gGAyDR,OA3CMC,EAAqBd,EAAoBC,GACzCc,EAAgB,IAAIC,OAAAC,OAAOC,KAAKR,GACnCS,KAAI,SAACC,GAAM,OAACV,EAAYU,GAAK,GAAAJ,OAAGI,EAAC,KAAAJ,OAAIN,EAAYU,IAAO,MACxDC,OAAOC,SACPC,KAAK,MAGRZ,EAASa,EAAkBb,GAGrBc,EAAS,CACbC,OAAQ,cACRzB,QAAOA,EACPI,KAAIA,EACJC,OAAMA,EACNqB,QAASpB,EACTC,OAAMA,EACNoB,WAAYnB,EACZoB,cAAehB,EACfiB,KAAMC,mBAAmC,QAAhBC,EAAA9B,aAAM,EAANA,EAAQ+B,gBAAQ,IAAAD,OAAA,EAAAA,EAAEE,MAC3CC,cAAejC,EAAOkC,cAAgB,GACtCC,uBAAwBnC,EAAOmC,wBAA0B,GACzDC,kBAAmBpC,EAAOoC,mBAAqB,GAC/CC,YAAarC,EAAOqC,aAAe,GACnC3B,OAAQA,GAAU,GAElB4B,aAActC,EAAOsC,cAAgB,GAGrCC,qBAAsBvC,EAAOuC,sBAAwB,GACrDC,qBAAsBxC,EAAOwC,sBAAwB,GACrDC,kBAAmBzC,EAAOyC,mBAAqB,GAC/CC,mBAAoB1C,EAAO0C,oBAAsB,IAI7CC,EAAc5B,OAAO6B,QAAQrB,GAChCJ,QAAO,SAAC5B,GAAA,IAAAuC,EAAAe,OAAe,OAAbf,EAAA,GAAOA,EAAA,EAAM,IACvBb,KAAI,SAAC1B,GAAA,IAAAuC,EAAAe,OAACC,EAAGhB,EAAA,GAAEiB,EAAKjB,EAAA,GAAM,MAAA,GAAGhB,OAAAgC,EAAO,KAAAhC,OAAAiC,EAAV,IACtB1B,KAAK,KACF2B,EAAOhD,EAAOiD,cAAgB,GAC9BC,EAAM,UAAGF,EAAI,kBAAAlC,OAAiB6B,GAAc7B,OAAAF,GAAqBE,OAAAD,GAAgBC,OAAAL,EAAS,WAAIA,GAAW,IAE/G,CAAA,EAAO0C,MAAMD,GAAKE,MAAK,SAACC,GAAM,OAAAA,EAAEC,MAAF,YAG1BC,EAAY,SAAOhE,GACvB,IAAAS,EAAMT,EAAAS,OACND,EAAOR,EAAAQ,QACPI,EAAIZ,EAAAY,KACJC,EAAMb,EAAAa,OACNC,UACAE,EAAShB,EAAAgB,UACTiD,EAAGjE,EAAAiE,IACHhD,EAAWjB,EAAAiB,YACXE,EAAMnB,EAAAmB,OACNC,EAAQpB,EAAAoB,SACRF,EAAMlB,EAAAkB,8FAoDN,OAtCMG,EAAqBd,EAAoBC,GACzCc,EAAgB,IAAIC,OAAAC,OAAOC,KAAKR,GACnCS,KAAI,SAACC,GAAM,MAAA,GAAGJ,OAAAI,EAAK,KAAAJ,OAAAN,EAAYU,GAAI,IACnCG,KAAK,MAERZ,EAASa,EAAkBb,GAErBc,EAAS,CACbC,OAAQ,aACRzB,QAAS0D,EAAiB1D,GAC1BI,KAAIA,EACJC,OAAMA,EACNqB,QAASpB,EACTqB,WAAYnB,EACZiD,IAAGA,EACH5B,KAAMC,mBAAmC,QAAhBC,EAAA9B,aAAM,EAANA,EAAQ+B,gBAAQ,IAAAD,OAAA,EAAAA,EAAEE,MAC3CC,cAAejC,EAAOkC,cAAgB,GACtCwB,QAAS1D,EAAO2D,oBAAsB,GACtCtB,YAAarC,EAAOqC,aAAe,GACnCV,cAAehB,EACfD,OAAMA,EAGN6B,qBAAsBvC,EAAOuC,sBAAwB,GACrDC,qBAAsBxC,EAAOwC,sBAAwB,GACrDC,kBAAmBzC,EAAOyC,mBAAqB,GAC/CC,mBAAoB1C,EAAO0C,oBAAsB,IAI7CC,EAAc5B,OAAO6B,QAAQrB,GAChCJ,QAAO,SAAC5B,GAAA,IAAAuC,EAAAe,OAAe,OAAbf,EAAA,GAAOA,EAAA,EAAM,IACvBb,KAAI,SAAC1B,GAAA,IAAAuC,EAAAe,OAACC,EAAGhB,EAAA,GAAEiB,EAAKjB,EAAA,GAAM,MAAA,GAAGhB,OAAAgC,EAAO,KAAAhC,OAAAiC,EAAV,IACtB1B,KAAK,KAEF2B,EAAOhD,EAAOiD,cAAgB,GAC9BC,EAAM,UAAGF,EAAI,kBAAAlC,OAAiB6B,GAAc7B,OAAAF,GAAqBE,OAAAD,GAAgBC,OAAAL,EAAS,WAAIA,GAAW,IAE/G,CAAA,EAAO0C,MAAMD,GAAKE,MAAK,SAACC,GAAM,OAAAA,EAAEC,MAAF,YAG1BM,EAAY,SAAOrE,OACvBS,EAAMT,EAAAS,OACND,EAAOR,EAAAQ,QACPI,EAAIZ,EAAAY,KACJC,EAAMb,EAAAa,OACNC,EAAKd,EAAAc,MACLE,EAAShB,EAAAgB,UACTsD,EAAQtE,EAAAsE,SACRnD,EAAMnB,EAAAmB,0FAkCN,OAvBMoD,EAAU9D,EAAO+B,SAASC,KAC1B+B,EAAQ/D,EAAOgE,cAAcC,QAAQC,GAErC3C,EAAS,IAAI4C,gBAAeC,EAAAA,EAAA,CAChC5C,OAAQ,aACRzB,QAAOA,EACPI,KAAIA,EACJC,OAAMA,EACNqB,QAASpB,EAAMgE,WACf3C,WAAYnB,EACZ+D,WAAYR,GACRD,GAAY,CAAEA,SAAQA,IACtBnD,GAAU,CAAEA,OAAMA,KAIpBqD,GACFxC,EAAOgD,OAAO,YAAaR,GAGvBf,EAAOhD,EAAOiD,cAAgB,GAC9BC,EAAM,UAAGF,EAAI,kBAAAlC,OAAiBS,EAAO8C,YAE3C,CAAA,EAAOlB,MAAMD,GAAKE,MAAK,SAACC,GAAM,OAAAA,EAAEC,MAAF,YC/KlB,SAAgBkB,EAC5BxE,EACAyE,EACAC,EACAlE,4EAKA,OAA+C,KADzCmE,KAAoBtE,MAAOL,EAAOgE,cAAcC,QAAQ5D,OAAWoE,GAAe,CAAA,IAC7EG,iCAA8CD,EAAOE,WAAaF,EAAOE,UAAUC,OAAS,EACrG,CAAA,EAAOC,EAAiC/E,EAAQ2E,EAAQD,EAAqBC,EAAOE,UAAWrE,IAE1F,CAAA,EAAAwE,EAAiBhF,EAAQ2E,EAAQD,EAAqBlE,SAC9D,CAED,IAAIyE,EAAe,GAwBnB,SAAeD,EACbhF,EACA2E,EACAD,EACAlE,qIAEA,IAAKkE,EAGH,MAFMQ,EAAkB,IAAIrF,MAAM,+CAClBH,KAAO,gBACjBwF,EAwBgC,OAtBlCC,EAAiB3E,GAAe,GAClC4E,GAAmB,GAGK,UAAvBC,OAFCA,EAAYC,EAAetF,WAE5BqF,EAAWE,UAAoD,MAA9BF,EAAU,kBAAuD,IAA3BrF,EAAOwF,mBAEjFL,EAAe,mBAAqB,KAGI,MAAtCA,EAAe,qBACjBC,GAAmB,GAGf9E,EAAS8E,EAAmBV,GAAuB1E,EAAOM,OAASoE,EAAoBe,MAAM,SAASpE,KAAK,IACzGd,EAAcP,EAAOgE,cAAcC,kBAEnC9D,EAAiCwE,EAAMxE,KAAjCJ,EAA2B4E,EAApB5E,QAAEK,EAAkBuE,EAAZvE,OAAEC,EAAUsE,QAEnClE,EAAST,EAAO+B,SAAStB,OAAOiF,OAAO,IAAM,GAC7ChF,EAAWuE,GAAiC,KAAjBA,EAAsB,qBAAcA,GAAiB,GAChFtE,OAA6B,IAAXX,GAA0BA,EAAO2F,IAAM3F,EAAO2F,IAAM,GAEpC,CAAA,EAAMzF,EAAW,CACvDF,OAAMA,EACND,QAAOA,EACPI,KAAIA,EACJC,OAAMA,EACNC,MAAKA,EACLC,OAAMA,EACNC,UAASA,EACTC,YAAa2E,EACb1E,OAAMA,EACNC,OAAMA,EACNC,SAAQA,YAGN,IAAmB,KAdjBhB,EAAkCJ,EAYtCqG,QAESL,QAAP,MAAwB,CAAA,EAAA,GAM1B,QALMM,EAAQ,IAAIhG,MAAM,gDAAAiB,OAAgDnB,EAAOmG,WAIzEA,QAAUnG,EAAOmG,SACf,GACN,KAAKnG,EAAOmG,QAAQC,SAAS,sBAC3BF,EAAMnG,KAAO,oBACb,MACF,KAAKC,EAAOmG,QAAQC,SAAS,WAC3BF,EAAMnG,KAAO,gBACb,MACF,QACEmG,EAAMnG,KAAO,KAKjB,MAFAmG,EAAMG,WAAarG,EAAOsG,YAActG,EAAOsG,YAAc,GAC7DC,QAAQL,MAAMA,GACRA,SAeJ,GAbF7F,EAAO6D,SAAWlE,EAAOkE,SACnBsC,EAAkE,CACtEC,GAAI,CACFC,QAAS,WAEXC,GAAI,CACFC,QAAS,WAEXC,GAAI,CACFC,QAAS,cAIX1G,GACAJ,EAAOkE,WACLsC,EAAkBpG,EAAQ2G,gBAC1BP,EAAkBpG,EAAQ2G,eAAe/G,EAAOkE,SAAS6C,gBAC/B,OAA1B3G,EAAQ2G,iBACT1G,EAAO2G,gBACP3G,EAAO4G,QANR,MAAA,CAAA,EAAA,oBAS4C,6BAAA,CAAA,EAAMhD,EAAU,CACxD5D,OAAMA,EACND,QAAOA,EACPI,KAAIA,EACJC,OAAMA,EACNC,MAAKA,EACLE,UAASA,EACTsD,SAAUlE,EAAOkE,SACjBnD,OAAMA,mBAEwB,KAV1BmG,EAAoCtH,EASxCqG,QACkBL,QAClBW,QAAQY,KAAKD,EAAgBf,UAE7BiB,EAAoBF,EAAgBG,QACpC/B,EAAe4B,EAAgBnG,uCAGjCwF,QAAQY,KAAKG,gBAQjB,OAJItH,EAAOuH,YACTH,EAAoBpH,EAAOuH,YAI3B,CAAA,EAAA9C,EAAA,CAAA1E,KAAM,+BACN8D,IAAK7D,EAAO6D,IACZyB,aAAYA,EACZpB,SAAUlE,EAAOkE,SACjBsD,YAAaxH,aAAM,EAANA,EAAQyH,kBACjBzH,aAAA,EAAAA,EAAQ0H,UAAW,CAAEA,SAAU1H,aAAM,EAANA,EAAQ0H,UAAa,CAAE,UAG/D,CAED,SAAetC,EACb/E,EACA2E,EACAD,EACAG,EACArE,4GAEgB,MAAM,CAAA,EAAA8G,QAAQC,IAC5B1C,EAAU5D,KAAI,SAAOuG,GAAC,OAAAC,EAAAC,OAAA,OAAA,GAAA,qEAEG,6BAAA,CAAA,EAAM1C,EAAiBhF,EAAQ2E,EAAQD,EACvDN,EAAAA,EAAA,CAAA,EAAA5D,GACH,CAAAqD,SAAU2D,aAEZ,OAJMG,EAAepI,EAGnBqG,OACK,CAAA,EAAAgC,SAAWD,GAAY,CAAE9D,SAAU2D,aAE1C,kBAAA,CAAA,EAAOK,EAAKC,wBAEf,GAAA,aAKH,GAhBMC,EAAUxI,EAYfqG,OAEKoC,EAAoBD,EAAQE,MAAK,SAACC,GAAW,IAAA3I,EAAA,MAAW,SAAX2I,EAAExI,MAAqC,uBAAX,QAAPH,EAAA2I,EAAEnF,aAAK,IAAAxD,OAAA,EAAAA,EAAEG,KAA4B,IAEzGqI,EAAQI,OAAM,SAACD,GAAM,MAAW,SAAXA,EAAExI,IAAF,IAEvB,MAAMqI,EAAQ,GAAGhF,MACZ,GAAIiF,EACT,MAAMA,EAAkBjF,MAExB,MAAO,CAAA,EAAA,CACLrD,KAAM,8CAGX,CAEK,SAAgB0I,EACpBpI,EACAwD,EACAmB,EACAnE,mIAiBA,GAfIR,EAAOqI,aAAerI,EAAOsI,WAC/B3D,EAAO5E,QAAUC,EAAOqI,YACxB1D,EAAOxE,KAAOH,EAAOsI,UAEfnI,EAA0BwE,EAAtBxE,KAAEJ,EAAoB4E,EAAM5E,QAAjBK,EAAWuE,SAC1BtE,EAAUL,EAAOgE,cAAcC,cAEjCkB,EAAiB3E,GAAe,GAEX,UAAvB6E,OADEA,EAAYC,EAAetF,SACpB,EAATqF,EAAWE,UAAoD,MAA9BF,EAAU,kBAC7CF,EAAe,mBAAqB,KAG9B5E,EAAcP,EAAOgE,cAAcC,mBAEtCT,EAKH,MAJM+E,EAAgB,IAAI1I,MAAM,qEAGlBH,KAAO,aACf6I,EAMgC,OAJlC7H,EAA0B,KAAjBuE,EAAsB,cAAcnE,OAAAmE,GAAiB,GAC9DtE,OAA6B,IAAXX,GAA0BA,EAAO2F,IAAM3F,EAAO2F,IAAM,GACtElF,EAAST,EAAO+B,SAAStB,OAAOiF,OAAO,IAAM,GAEX,CAAA,EAAMnC,EAAU,CACtDvD,OAAMA,EACND,QAAOA,EACPI,KAAIA,EACJC,OAAMA,EACNC,MAAKA,EACLE,UAASA,EACTiD,IAAGA,EACHhD,YAAa2E,EACbzE,OAAMA,EACNC,SAAQA,EACRF,OAAMA,YAEJ,IAAsB,KAbpB+H,EAAkCjJ,EAYtCqG,QACYL,QAAV,MAA2B,CAAA,EAAA,GAc7B,MAPMkD,EAN6C,CACjD,qBAAsB,aACtB,cAAe,iBACfC,YAAa,aACbC,qBAAsB,uBAEaH,EAAU1C,UACzC8C,EAAW,IAAI/I,MAAM,sDAA+C4I,KAGjE/I,KAAO+I,GAAgB,aAChCG,EAAS9C,QAAU0C,EAAU1C,QAC7BI,QAAQL,MAAM+C,GACRA,SACG,OAAoB,IAApBJ,EAAUK,MAAc,CAAA,EAAA,GAE7BL,EAAUvC,aAAyC,KAA1BuC,EAAUvC,aAAiD,QAA3BlG,aAAA,EAAAA,EAAS2G,eACpE,CAAA,EAAO,CAAEoC,mBAAoBN,EAAUvC,eAEnC8C,EAAiD,WACrD,OFvRoB,SAAOxJ,GAC/B,IAAAS,EAAMT,EAAAS,OACND,EAAOR,EAAAQ,QACPI,EAAIZ,EAAAY,KACJC,WACAC,EAAKd,EAAAc,MACLE,EAAShB,EAAAgB,2FA0BT,OAhBMgB,EAAS,CACbC,OAAQ,qBACRzB,QAAS0D,EAAiB1D,GAC1BI,KAAIA,EACJC,OAAMA,EACNqB,QAASpB,EACTqB,WAAYnB,GAGRoC,EAAc5B,OAAO6B,QAAQrB,GAChCJ,QAAO,SAAC5B,GAAA,IAAAuC,EAAAe,OAAe,OAAbf,EAAA,GAAaiB,MAANjB,EAAA,EAAM,IACvBb,KAAI,SAAC1B,GAAA,IAAAuC,EAAAe,OAACC,EAAGhB,EAAA,GAAEiB,EAAKjB,EAAA,GAAM,MAAA,UAAGgB,EAAG,KAAAhC,OAAIe,mBAAmBkB,GAA7B,IACtB1B,KAAK,KAEF2B,EAAOhD,EAAOiD,cAAgB,GAC9BC,EAAM,GAAGpC,OAAAkC,EAAqB,kBAAAlC,OAAA6B,GACpC,CAAA,EAAOQ,MAAMD,GAAKE,MAAK,SAAC4F,GAAa,OAAAA,EAAS1F,MAAT,WEuPjC2F,CAAkB,CAAEjJ,OAAMA,EAAED,QAAOA,EAAEI,KAAIA,EAAEC,OAAMA,EAAEC,MAAKA,EAAEE,YAAWC,YAAWA,GAAhF,EAEkD,CAAA,EAAA0I,EAClDH,EACA,KACA,SAACb,GAAM,OAAAA,EAAE3C,SAAyB,gBAAd2C,EAAEpC,OAAyB,GAC/C,YAEF,IAA4B,KANtBqD,EAAwC5J,EAK7CqG,QACeL,QAEd,OADM6D,EAA4C,uBAAtBZ,EAAU1C,QACtC,CAAA,EAAO,CAAEE,WAAYmD,EAAYlD,aAAe,KAAMmD,oBAAmBA,IAQ3E,MANMR,EAAW,IAAI/I,MAAM,+CAAAiB,OAA+CqI,EAAYrD,WAG7EpG,KAAO,aAChBkJ,EAAS9C,QAAUqD,EAAYrD,QAEzB8C,SAGN,OADMQ,EAA4C,uBAAtBZ,EAAU1C,QACtC,CAAA,EAAO,CAAEE,WAAYwC,EAAUvC,aAAe,KAAMmD,oBAAmBA,UAE1E,CC7RD,IAAMC,EAA+B,CACnChK,aAAc,CACZK,KAAM,WACNC,OAAQ2J,IACR1J,KAAM,CACJ2J,UAAW,GACXjJ,OAAQ,GACRuD,SAAU,GACV2F,aAAc,KAKdC,EAAqC,CACzCpK,aAAc,CACZK,KAAM,WACNC,OAAQ+J,EAA8C,CAAEC,SAAU,aAClE/J,KAAM,CACJ2J,UAAW,GACXjJ,OAAQ,GACRuD,SAAU,GACV2F,aAAc,KAKdI,EAAyC,CAC7CvK,aAAc,CACZK,KAAM,cACNC,OAAQkK,EAAoD,CAC1DC,UAAW,gBACXjE,MAAO,4BAMPkE,EAAoC,CACxC1K,aAAc,CACZK,KAAM,cACNC,OAAQ2J,MAqFNU,EA3EkB,SAAChK,GACvB,IAAMS,EAAS6E,EAAetF,GACxBiK,EAAe,IAAIC,MAAM,aACzBC,EACH1J,EAAO2J,mBAAkD,MAA7B3J,EAAO2J,mBACnC3J,EAAO,mBAAkD,MAA7BA,EAAO,kBAChC4J,EAAqB5J,EAAO,mBAAkD,MAA7BA,EAAO,kBACxD6J,EAAkD,OAA9B7J,aAAA,EAAAA,EAAQ8J,mBAE5BC,EAA4B,CAChCnL,aAAc,CACZK,KAAM,cACNC,OAAQkK,EAAoD,CAC1DC,UAAW,qBACXjE,MAAO,SAKP4E,EAA8B,CAClCpL,aAAc,CACZK,KAAM,WACNC,OAAQ+J,EAA8C,CACpDC,UAAUlJ,eAAAA,EAAQwF,cAAe,KAGnCrG,KAAM,CACJU,QAAQG,eAAAA,EAAQH,SAAU,GAC1BuD,UAAUpD,eAAAA,EAAQoD,WAAY,MAK9B6G,EAAoC,CACxCrL,aAAc,CACZK,KAAM,WACNC,OAAQ2J,IAER1J,KAAM,CACJU,QAAQG,eAAAA,EAAQH,SAAU,GAC1BuD,UAAUpD,eAAAA,EAAQoD,WAAY,MAIpC,GAAIsG,EAGF,OADAnK,SAAAA,EAAQ2K,cAAcV,GACfS,EAET,GAAIL,EACF,OAAOI,EAET,GAAIH,EACF,OAAOE,EAGT,IAAI/J,EAAO,aAeT,OAAOsJ,EAdP,OAAQtJ,EAAO,kBACb,IAAK,uBACH,OAAOmJ,EACT,IAAK,YAGH,OADA5J,SAAAA,EAAQ2K,cAAcV,GACfZ,EACT,IAAK,kBACH,OAAOI,EACT,QAEE,OADAvD,QAAQL,MAAM,2BACPkE,EAKf,CAEqBa,CAAgB5K,QAcxB6K,EAAqBC,EAMhC,8BAA8B,SAAOvL,EAAiCuC,GAA/B,IAAA9B,WAAQM,EAAMf,EAAAe,OAAEE,EAAWjB,EAAAiB,YAAMuK,aAAUC,EAAQlJ,EAAAkJ,SAAEC,EAAenJ,EAAAmJ,0JAE3G,GADM9L,EAAmB4L,MACiB,QAArCG,EAA6B,kBAA7BC,EAAAhM,aAAK,EAALA,EAAOiM,+BAAU/L,oBAAY,IAAAgM,OAAA,EAAAA,EAAEzL,YAAM,IAAAsL,OAAA,EAAAA,EAAAvG,QACxC,MAAA,CAAA,EAAOsG,EAAgB,CACrBnB,UAAW,qBAGTwB,EAAwCnM,EAAMiM,SAAS/L,aAAaO,KAAlE+E,EAAM2G,EAAA3G,OAAE4G,8BACVC,EAAmC,QAAbC,EAAAtM,EAAMC,eAAO,IAAAqM,OAAA,EAAAA,EAAEpM,aACrCgG,EAAYC,EAAetF,iDAQO,QAAlC2E,aAAM,EAANA,EAAQ5E,QAAQ2G,iBAA0B/B,aAAA,EAAAA,EAAQxE,KAAK4F,SAAS,cAEnD,SADA2F,EAAoB/G,aAAA,EAAAA,EAAQ5E,QAASO,KAElDA,EAASA,EAAOqL,QAAQ,MAAO,QASL,UAA1BC,OAJEA,EAA6C,QAA9BC,EAAqB,QAArBC,EAAA9L,aAAM,EAANA,EAAQgE,qBAAa,IAAA8H,OAAA,EAAAA,EAAE7H,eAAO,IAAA4H,OAAA,EAAAA,EAAEE,0BAIrC,EAAZH,EAAcI,WAAuB3G,aAAS,EAATA,EAAY,mBAAiB,CAAA,EAAA,IACpE4G,EAAQC,eAAe,kBAAmB,mBAAoB,CAAE5L,OAAMA,IAChE,CAAA,EAAAkE,EAAaxE,EAAQ2E,EAAQrE,YAEnC,GAFA6L,EAA0CvG,OAC1C5F,EAAOM,OAASA,EACZN,EAAOoM,YACT,IAEE,OADApM,EAAOoM,cACP,CAAA,EAAAhI,EAAAA,EAAA,CAAA,EACKoH,GAAmB,CACtB9L,KAAM,cACNC,OAAQ0M,MAEX,CAAC,MAAOC,GASP,OAPMC,EAAW,6BACjBN,EAAQO,aAAa,kBAAmB,4BAA6B,CACnElM,OAAMA,EACNwJ,UAAW,mBACXjE,OAAOyG,aAAA,EAAAA,EAAIjI,aAAc,4CACzByB,QAASwG,EAAGxG,UAEd,CAAA,EAAOmF,EAAgB,CACrBnB,UAAW,mBACXjE,MAAO0G,EACPzG,QAASyG,IAEZ,CAUH,OAPME,EAAW,6BACjBR,EAAQO,aAAa,kBAAmB,4BAA6B,CACnElM,OAAMA,EACNwJ,UAAW,mBACXjE,MAAO4G,EACP3G,QAAS2G,IAEX,CAAA,EAAOxB,EAAgB,CACrBnB,UAAW,mBACXjE,MAAO4G,EACP3G,QAAS2G,YAQkB,OAD/BR,EAAQC,eAAe,kBAAmB,mBAAoB,CAAE5L,OAAMA,IACjC,CAAA,EAAAkE,EAAaxE,EAAQ2E,EAAQrE,WAWlE,OAXMoM,EAAyBP,EAA0CvG,OACzEqG,EAAQC,eAAe,kBAAmB,4BAA6B,CAAE5L,OAAMA,IAU3C,iCAAhCoM,EAAuBhN,MAA2CgN,EAAuBvF,aAC3F8E,EAAQC,eAAe,kBAAmB,4BAA6B,CAAE5L,OAAMA,IAC/E2L,EAAQU,YAAY,OAAQ,eAAgB,kBAAmB,CAC7DxF,YAAauF,EAAuBvF,cAEtCnH,EAAO+B,SAASC,KAAO0K,EAAuBvF,YACvC,CAAA,IAKL3G,GAAeA,EAAYoM,aAA2C,SAA5BpM,EAAYoM,YAClD,CAAA,EAAAA,EAAYtM,GACf8C,MAAK,SAACxD,GACDA,GAAQA,EAAKA,MAAQA,EAAKA,KAAK2F,QACjC0G,EAAQU,YAAY,OAAQ,eAAgB,yBAE5CV,EAAQU,YAAY,OAAQ,eAAgB,uBAEhD,IACCE,OAAM,SAAChH,GACNoG,EAAQU,YAAY,OAAQ,eAAgB,sBAAuB9G,EACpE,KAX2E,CAAA,EAAA,UAC9EsG,EAAAvG,wBA+BF,OAjBM/B,EAC4B,iCAAhC6I,EAAuBhN,KAA0CgN,EAAuB7I,SAAW,GAE/FiJ,EAA8C,CAClDC,UAAW,EACXC,OAAQ,EACRC,QAAS,GAQLhD,EAAe,IAAIC,MAAM,aAC/BlK,SAAAA,EAAQ2K,cAAcV,GAEtB,CAAA,EAAA7F,EAAAA,EAAA,CAAA,EACKoH,GACH,CAAA9L,KAAM,WACNC,OAAQ2J,IACR1J,KAAIwE,EAAA,CACFmF,UAA2C,iCAAhCmD,EAAuBhN,KAA0CgN,EAAuBlJ,IAAM,KACzGlD,OAAMA,EACNuD,SAAQA,EACR2F,aAA2B,KAAb3F,GAAmBiJ,EAAiBjJ,GAAYiJ,EAAiBjJ,GAAY,KAC3F0H,0BAAyBA,GACW,iCAAhCmB,EAAuBhN,OAA2CgN,eAAAA,EAAwBrF,UAC1F,CAAEA,SAAUqF,EAAuBrF,UACnC,CAAE,aAOV,kBAFAnB,QAAQY,KAAKoG,GACTpD,SACIoD,EAAGxN,MACT,IAAK,oBACHoK,EAAY,oBACZ,MACF,IAAK,gBACHA,EAAY,gBACZ,MACF,QACEA,EAAY,eAuBhB,OApBAmC,EAAQO,aAAa,kBAAmB,4BAA6B,CACnElM,OAAMA,EACNwJ,UAASA,EACTjE,MAAOqH,EAAG7I,WACVyB,QAASoH,EAAGpH,QACZE,WAAYkH,EAAGlH,aAGbuF,GACFP,EACEmC,EAAqB,CACnBzN,KAAM0N,EAAcC,IACpBzN,KAAM,CACJ2L,2BAA2B,EAC3B5G,OAAMA,MAMd,CAAA,EAAOsG,EAAgB,CACrBnB,UAASA,EACTjE,MAAOqH,EAAG7I,WACVyB,QAASoH,EAAGpH,QACZE,WAAYkH,EAAGlH,qCAGpB,IAgBYsH,EAAkBxC,EAM7B,2BAA2B,SAAOvL,EAAsCuC,OAApC9B,EAAMT,EAAAS,OAAEM,EAAMf,EAAAe,OAAEkD,EAAGjE,EAAAiE,IAAEhD,EAAWjB,EAAAiB,YAAMuK,EAAQjJ,EAAAiJ,SAAEE,EAAenJ,EAAAmJ,oIAGnG,GAFM9L,EAAmB4L,MAEiB,QAArCM,EAA6B,kBAA7BC,EAAAnM,aAAK,EAALA,EAAOiM,+BAAU/L,oBAAY,IAAA8L,OAAA,EAAAA,EAAEvL,YAAM,IAAAyL,OAAA,EAAAA,EAAA1G,QACxC,MAAA,CAAA,EAAOsG,EAAgB,CACrBnB,UAAW,qBAGPnF,EAAWxF,EAAMiM,SAAS/L,aAAaO,KAAI+E,OAC7C6G,EAAmC,QAAbN,EAAA/L,EAAMC,eAAO,IAAA8L,OAAA,EAAAA,EAAE7L,8BAG1B,6BADf4M,EAAQC,eAAe,kBAAmB,gBAAiB,CAAE5L,SAAQkD,IAAGA,IACnD,CAAA,EAAA4E,EAAUpI,EAAQwD,EAAKmB,EAAQnE,WAyBhD,OAzBEb,EAAS8L,EAAiD7F,OAChEqG,EAAQC,eAAe,kBAAmB,yBAA0B,CAClE5L,OAAMA,EACNkD,IAAGA,EACHmG,SAAUhK,EAAOqG,aAUfrG,EAAOmJ,oBAAoD,KAA9BnJ,EAAOmJ,qBACtCmD,EAAQC,eAAe,kBAAmB,mBAAoB,CAC5D5L,OAAMA,EACNkD,IAAGA,EACHsF,mBAAoBnJ,EAAOmJ,qBAE7B9I,EAAO+B,SAASC,KAAOrC,EAAOmJ,oBAK5BtI,GAAeA,EAAYoM,aAA2C,SAA5BpM,EAAYoM,YAClD,CAAA,EAAAA,EAAYtM,GACf8C,MAAK,SAACxD,GACDA,GAAQA,EAAKA,MAAQA,EAAKA,KAAK2F,QACjC0G,EAAQU,YAAY,OAAQ,eAAgB,yBAE5CV,EAAQU,YAAY,OAAQ,eAAgB,uBAEhD,IACCE,OAAM,SAAChH,GACNoG,EAAQU,YAAY,OAAQ,eAAgB,sBAAuB9G,EACpE,KAX2E,CAAA,EAAA,UAC9E4F,EAAA7F,wBAcF,MACK,CAAA,EAAAxB,EAAAA,EAAA,CAAA,EAAAoH,GACH,CAAA9L,KAAM,WACNC,OAAQ+J,EAA8C,CACpDC,SAAUhK,EAAOqG,WACjBoD,oBAAqBzJ,EAAOyJ,sBAAuB,cAMvD,kBAFAlD,QAAQY,KAAKyG,GACTzD,SACIyD,EAAG7N,MACT,IAAK,oBACHoK,EAAY,oBACZ,MACF,IAAK,aACHA,EAAY,aACZ,MACF,IAAK,iBACHA,EAAY,iBACZ,MACF,IAAK,aACHA,EAAY,aACZ,MACF,IAAK,sBACHA,EAAY,sBACZ,MACF,QACEA,EAAY,eAkBhB,OAfAmC,EAAQO,aAAa,kBAAmB,yBAA0B,CAChElM,OAAMA,EACNkD,IAAGA,EACHsG,UAASA,EACTjE,MAAO0H,EAAGlJ,WACVyB,QAASyH,EAAGzH,QACZE,WAAYuH,EAAGvH,aAGjBwH,YAAW,WACLD,EAAGvH,aACLhG,EAAO+B,SAASC,KAAOuL,EAAGvH,WAE7B,GAAE,GAEH,CAAA,EAAOiF,EAAgB,CACrBnB,UAASA,EACTjE,MAAO0H,EAAGlJ,WACVyB,QAASyH,EAAGzH,QACZE,WAAYuH,EAAGvH,qCAGpB,IAEYyH,EAAoB3C,EAM/B,6BAA6B,SAAO4C,EAAGnO,GAAE,IAAAwL,aAAUC,EAAQzL,EAAAyL,SAAEC,EAAe1L,EAAA0L,iGAC5E,IAIE,GAHAgB,EAAQO,aAAa,kBAAmB,YAAa,oCAC/CrN,EAAmB4L,MAEiB,QAArCI,EAA6B,kBAA7BrJ,EAAA3C,aAAK,EAALA,EAAOiM,+BAAU/L,oBAAY,IAAAiM,OAAA,EAAAA,EAAE1L,YAAM,IAAAuL,OAAA,EAAAA,EAAAxG,QACxC,MAAA,CAAA,EAAOsG,EAAgB,CACrBnB,UAAW,qBAIf,GAAiB,QADI3K,EAAMiM,SAAS/L,aAAaO,KAAIwL,SAEnD,MAAO,CAAA,EAAA,CACL1L,KAAM,cACNC,OAAQ2J,MAGZ0B,EAAS2C,IACV,CAAC,MAAOrB,GAEP,OADApG,QAAQY,KAAKwF,GACb,CAAA,EAAOrB,EAAgB,CACrBnB,UAAW,oBAEd,gBACF,IAIK8D,EAA+B,CACnCC,GAAI,OAIAnC,EAAsB,SAAC3L,EAAiB+N,GAC5C,IAAK/N,IAAY+N,EAAe,MAAO,GAGvC,IAAMC,EAAoBhO,EAAQiO,cAC5BC,EAAcL,EAAaG,GAGjC,OAAKE,EAKE,IAAAnN,OAAImN,IAJT/H,QAAQL,MAAM,6BAA8B9F,GACrC,GAIX,EAGMmO,EAAeC,EAAY,CAC/BC,KAAM,UACNpE,aAAYA,EACZqE,SAAU,CAAE,EACZC,cAAe,SAACC,GACdA,EACGC,QAAQ3D,EAAmB4D,SAAS,SAACtP,GACpCA,EAAME,aAAe,CAAEK,KAAM,cAAeC,OAAQ0M,IAAezM,KAAMT,EAAME,aAAaO,KAC9F,IACC4O,QAAQ3D,EAAmB6D,WAAW,SAACvP,EAAOqC,GAC7CrC,EAAME,aAAemC,EAAOmN,OAC9B,IACCH,QAAQ3D,EAAmB+D,UAAU,SAACzP,EAAOqC,GAC5CrC,EAAME,aAAe,CACnBK,KAAM,cACNC,OAAQkK,EAAYrI,EAAOmN,SAC3B/O,KAAMT,EAAME,aAAaO,KAE7B,IACC4O,QAAQlB,EAAgBmB,SAAS,SAACtP,GACjCA,EAAME,aAAe,CAAEK,KAAM,WAAYC,OAAQ0M,IAAezM,KAAMT,EAAME,aAAaO,KAC3F,IACC4O,QAAQlB,EAAgBoB,WAAW,SAACvP,EAAOqC,GAC1CrC,EAAME,aAAemC,EAAOmN,OAC9B,IACCH,QAAQlB,EAAgBsB,UAAU,SAACzP,EAAOqC,GACzCrC,EAAME,aAAe,CAAEK,KAAM,WAAYC,OAAQkK,EAAYrI,EAAOmN,SAAU/O,KAAMT,EAAME,aAAaO,KACzG,IACC4O,QAAQf,EAAkBiB,WAAW,SAACvP,EAAOqC,GAC5CrC,EAAME,aAAemC,EAAOmN,OAC9B,GACH,IAGqBE,EAA4CX,EAA9BY,QAA8BZ,EAAYa"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ouisys-engine",
3
- "version": "5.0.110",
3
+ "version": "5.0.113",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "directories": "dist dev-tools",