ouisys-engine 5.0.22 → 5.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/creditCardFlow.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{__awaiter as e,__generator as r,__assign as t}from"tslib";import{createAsyncThunk as a,createSlice as n}from"@reduxjs/toolkit";import{S as i,L as o,F as c,N as s}from"./RemoteDataState-lcf8PfJd.js";import{l as d}from"./loadScriptSrc-Da4autZd.js";import{searchToObject as l}from"./searchToObject.js";import{t as u}from"./tracker-DaaILhEr.js";import"./loadScriptInnerHtml-BzQm-AFb.js";import"pacman-client";import"uuid";var v=function(a){var n=a.window,i=a.slug,o=a.country,c=a.msisdn,s=a.device,d=a.offer,l=a.rockmanId,u=a.ip_range_name,v=a.search,m=a.extraParamsQs,y=a.email,f=a.password;return e(void 0,void 0,void 0,(function(){var e,a,p,w,
|
|
1
|
+
import{__awaiter as e,__generator as r,__assign as t}from"tslib";import{createAsyncThunk as a,createSlice as n}from"@reduxjs/toolkit";import{S as i,L as o,F as c,N as s}from"./RemoteDataState-lcf8PfJd.js";import{l as d}from"./loadScriptSrc-Da4autZd.js";import{searchToObject as l}from"./searchToObject.js";import{t as u}from"./tracker-DaaILhEr.js";import"./loadScriptInnerHtml-BzQm-AFb.js";import"pacman-client";import"uuid";var v=function(a){var n=a.window,i=a.slug,o=a.country,c=a.msisdn,s=a.device,d=a.offer,l=a.rockmanId,u=a.ip_range_name,v=a.search,m=a.extraParamsQs,y=a.email,f=a.password;return e(void 0,void 0,void 0,(function(){var e,a,p,g,w,_;return r(this,(function(r){return e=new URLSearchParams(t(t(t(t(t(t({action:"redirect",slug:i,country:o,device:s,offerId:d.toString(),rockman_id:l,page:encodeURIComponent(n.location.href),network_type:u?"":"wifi"},v&&{search:v}),(null===(_=null===(w=null===(g=n.pac_analytics)||void 0===g?void 0:g.visitor)||void 0===w?void 0:w.page)||void 0===_?void 0:_.includes("agency"))&&{evinaTi:l}),n.securityProcessId&&{securityProcessId:n.securityProcessId}),n.languageCode&&{language_code:n.languageCode}),y&&f?{email:y,password:f}:{msisdn:c}),m&&{extraParams:m})).toString(),a=n.DEV_BASE_URL||"",p="".concat(a,"/tallyman/v1/?").concat(e),i.includes("za-mtn-beyondvr-r7")?[2,{success:!0,rockman_id:l,redirect_url:p}]:[2,fetch(p).then((function(e){return e.json()}))]}))}))},m=function(a){var n=a.window,i=a.userDetails,o=a.extraConfig;return e(void 0,void 0,void 0,(function(){var e,a,c,s,d,u,v,m;return r(this,(function(r){return e="cc_number"in i,a=n.DEV_BASE_URL_CREDIT_CARD||"",c="".concat(a,"/api/v1"),s=e?"/maxpay/frontend/initiate-payment":"/ecardon/frontend/initiate-payment",d=l(n),u=t(t(t({rockman_id:null===(m=n.pac_analytics.visitor)||void 0===m?void 0:m.rockmanId,landing_page_url:n.location.href,service_id:e?null==o?void 0:o.serviceId:"2"},(null==o?void 0:o.slug)?{slug:"".concat(null==o?void 0:o.slug).concat(d.d_country)}:{}),e?{}:{user_agent:n.navigator.userAgent,ip:n.pac_analytics.visitor.ip}),i),v={method:"POST",headers:new Headers({"Content-Type":"application/json"}),body:JSON.stringify(u)},[2,fetch("".concat(c).concat(s),v).then((function(e){return e.json()}))]}))}))};function y(t,a,n){var i,o,c,s,d;return e(this,void 0,void 0,(function(){var e,l,u,y,f,p,g,w,_,S,h,E;return r(this,(function(r){switch(r.label){case 0:return e=a.slug,l=a.country,u=a.device,y=a.serviceId,f=t.location.search.substr(1)||"",p=t.pac_analytics.visitor,g=p.rockmanId,w={serviceId:y,slug:e},(null===(c=null===(o=null===(i=null==t?void 0:t.pac_analytics)||void 0===i?void 0:i.visitor)||void 0===o?void 0:o.page)||void 0===c?void 0:c.includes("agency"))?[4,v({window:t,slug:e,country:l,device:u,offer:null===(d=null===(s=null==t?void 0:t.pac_analytics)||void 0===s?void 0:s.visitor)||void 0===d?void 0:d.offer,rockmanId:g,email:null==n?void 0:n.email,password:null==n?void 0:n.password,search:f})]:[3,2];case 1:return S=r.sent(),[3,4];case 2:return[4,m({window:t,userDetails:n,extraConfig:w})];case 3:S=r.sent(),r.label=4;case 4:if(!1===(_=S).success)throw h="ALREADY SUBSCRIBED"===_.message?"AlreadySubscribed":_.message,(E=new Error("".concat(h,":\n").concat(_.message))).type=h,console.error(E),E;return[2,{gateway_url:_.gateway_url||_.redirect_url,method:_.redirect_url?"redirection":_.method}]}}))}))}var f={currentState:{type:"USER_DETAILS_ENTRY",result:i({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=l(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 f;default:return console.error("Mock Flow not supported"),g}}(window),_=a("creditCardFlow/submitUserDetailsAction",(function(t,a){var n=t.window,o=t.userDetails,c=a.getState,s=a.rejectWithValue;return e(void 0,void 0,void 0,(function(){var e,t,a,l,v,m,f,p,g,w;return r(this,(function(r){switch(r.label){case 0:if(e=c(),!(null===(w=null===(g=null===(p=null==e?void 0:e.strategy)||void 0===p?void 0:p.currentState)||void 0===g?void 0:g.data)||void 0===w?void 0:w.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==o?void 0:o.email}),[4,y(n,t,o)];case 2:return a=r.sent(),l=a.gateway_url,v=a.method,u.advancedInFlow("tallyman.v1-credit-card","cc-form-submission-success",{email:null==o?void 0:o.email,gateway_url:l}),"jslink"===v&&l&&(u.advancedInFlow("tallyman.v1-credit-card","load-script-start",{gateway_url:l}),d({id:"ecardon-credit-card",url:l,callBack:function(){u.advancedInFlow("tallyman.v1-credit-card","load-script-success",{gateway_url:l})}})),"redirection"===v&&l&&(u.customEvent("Flow","advance-auto","redirect-success",{redirect_url:l}),n.location.href=l),[2,{type:"USER_DETAILS_ENTRY",result:i({gateway_url:l,method:v})}];case 3:switch(m=r.sent(),console.warn(m),f=void 0,m.type){case"AlreadySubscribed":f="AlreadySubscribed";break;case"InvalidUserDetails":f="InvalidUserDetails";break;default:f="UnknownError"}return u.recedeInFlow("tallyman.v1-credit-card","cc-form-submission-failure",{email:null==o?void 0:o.email,errorType:f||m.type}),[2,s({errorType:f,error:m.toString()})];case 4:return[2]}}))}))})),S=n({name:"creditCardFlow",initialState:w,reducers:{},extraReducers:function(e){e.addCase(_.pending,(function(e){e.currentState={type:"USER_DETAILS_ENTRY",result:o()}})).addCase(_.fulfilled,(function(e,r){e.currentState=r.payload})).addCase(_.rejected,(function(e,r){e.currentState={type:"USER_DETAILS_ENTRY",result:c(r.payload)}}))}}),h=S.reducer;S.actions;var E=function(e){return e((function(e){return e.creditCardFlow.currentState}))};function I(e){var r=e.userDetailsEntry;return function(e){return e.type,r(e.result)}}export{I as creditCardFlowMatch,h as creditCardFlowReducer,_ as submitUserDetailsAction,E as useCreditCardFlowState};
|
|
2
2
|
//# sourceMappingURL=creditCardFlow.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"creditCardFlow.js","sources":["../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 { 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 if (slug.includes('za-mtn-beyondvr-r7')) {\n return {\n success: true,\n rockman_id: rockmanId,\n redirect_url: url\n };\n }\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 = isMaxPay ? '/maxpay/frontend/initiate-payment' : '/ecardon/frontend/initiate-payment';\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?.serviceId}${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 gateway_url: string;\n method: 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 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 };\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 } = 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 return {\n type: 'USER_DETAILS_ENTRY',\n result: RDS.Success<SubmitUserDetailsFailure, SubmitUserDetailsSuccess>({ gateway_url, method })\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 });\n\n return rejectWithValue({\n errorType,\n error: ex.toString()\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","success","redirect_url","fetch","then","x","json","creditCardPayment","userDetails","extraConfig","isMaxPay","DEV_BASE_URL_CREDIT_CARD","apiBaseURL","apiPath","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","type","message","error","Error","console","gateway_url","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","loadScriptSrc","id","callBack","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/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 { 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 if (slug.includes('za-mtn-beyondvr-r7')) {\n return {\n success: true,\n rockman_id: rockmanId,\n redirect_url: url\n };\n }\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 = isMaxPay ? '/maxpay/frontend/initiate-payment' : '/ecardon/frontend/initiate-payment';\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 gateway_url: string;\n method: 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 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 };\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 } = 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 return {\n type: 'USER_DETAILS_ENTRY',\n result: RDS.Success<SubmitUserDetailsFailure, SubmitUserDetailsSuccess>({ gateway_url, method })\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 });\n\n return rejectWithValue({\n errorType,\n error: ex.toString()\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","success","redirect_url","fetch","then","x","json","creditCardPayment","userDetails","extraConfig","isMaxPay","DEV_BASE_URL_CREDIT_CARD","apiBaseURL","apiPath","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","type","message","error","Error","console","gateway_url","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","loadScriptSrc","id","callBack","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":"yaAIA,IAAMA,EAAW,SAAOC,GACtB,IAAAC,EAAMD,EAAAC,OACNC,EAAIF,EAAAE,KACJC,EAAOH,EAAAG,QACPC,EAAMJ,EAAAI,OACNC,EAAML,EAAAK,OACNC,EAAKN,EAAAM,MACLC,EAASP,EAAAO,UACTC,EAAaR,EAAAQ,cACbC,EAAMT,EAAAS,OACNC,kBACAC,EAAKX,EAAAW,MACLC,EAAQZ,EAAAY,8FAmCR,OApBMC,EAAS,IAAIC,gBAAeC,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAA,CAChCC,OAAQ,WACRd,OACAC,QAAOA,EACPE,OAAMA,EACNY,QAASX,EAAMY,WACfC,WAAYZ,EACZa,KAAMC,mBAAmBpB,EAAOqB,SAASC,MACzCC,aAAchB,EAAgB,GAAK,QAC/BC,GAAU,CAAEA,OAAMA,KACmB,QAArCgB,EAA6B,QAA7BC,EAAoB,QAApBC,EAAA1B,EAAO2B,qBAAa,IAAAD,OAAA,EAAAA,EAAEE,eAAO,IAAAH,OAAA,EAAAA,EAAEN,YAAM,IAAAK,OAAA,EAAAA,EAAAK,SAAS,YAAa,CAAEC,QAASxB,IACtEN,EAAO+B,mBAAqB,CAAEA,kBAAmB/B,EAAO+B,oBACxD/B,EAAOgC,cAAgB,CAAEC,cAAejC,EAAOgC,eAC/CtB,GAASC,EAAW,CAAED,MAAKA,EAAEC,SAAQA,GAAK,CAAER,OAAMA,IAClDM,GAAiB,CAAEyB,YAAazB,KACnCQ,WAEGkB,EAAOnC,EAAOoC,cAAgB,GAC9BC,EAAM,GAAGC,OAAAH,EAAqB,kBAAAG,OAAA1B,GAEhCX,EAAK4B,SAAS,sBACT,CAAA,EAAA,CACLU,SAAS,EACTrB,WAAYZ,EACZkC,aAAcH,IAIlB,CAAA,EAAOI,MAAMJ,GAAKK,MAAK,SAACC,GAAM,OAAAA,EAAEC,MAAF,YAG1BC,EAAoB,SAAO9C,GAC/B,IAAAC,WACA8C,EAAW/C,EAAA+C,YACXC,EAAWhD,EAAAgD,qGA4BX,OAtBMC,EAAW,cAAeF,EAC1BX,EAAOnC,EAAOiD,0BAA4B,GAC1CC,EAAa,GAAAZ,OAAGH,EAAI,WACpBgB,EAAUH,EAAW,oCAAsC,qCAC3DxC,EAAS4C,EAAepD,GAExBqD,SACJnC,WAA0C,UAA9BlB,EAAO2B,cAAcC,eAAS,IAAAF,OAAA,EAAAA,EAAApB,UAC1CgD,iBAAkBtD,EAAOqB,SAASC,KAElCiC,WAAYP,EAAWD,aAAW,EAAXA,EAAaS,UAAY,MAC5CT,eAAAA,EAAa9C,MAAO,CAAEA,KAAM,GAAAqC,OAAGS,eAAAA,EAAa9C,MAAOqC,OAAA9B,EAAOiD,YAAgB,CAAA,GAC1ET,EAAW,GAAK,CAAEU,WAAY1D,EAAO2D,UAAUC,UAAWC,GAAI7D,EAAO2B,cAAcC,QAAQiC,KAC5Ff,GAGCgB,EAAiB,CACrBC,OAAQ,OACRC,QAAS,IAAIC,QAAQ,CAAE,eAAgB,qBACvCC,KAAMC,KAAKC,UAAUf,IAGhB,CAAA,EAAAZ,MAAM,GAAAH,OAAGY,GAAUZ,OAAGa,GAAWW,GAAgBpB,MAAK,SAAC2B,GAAa,OAAAA,EAASzB,MAAM,qBCxFtE0B,EACpBtE,EACAuE,EACAzB,uIAW6C,OANrC7C,EAAqCsE,EAAMtE,KAArCC,EAA+BqE,EAAxBrE,QAAEE,EAAsBmE,EAAhBnE,OAAEoD,EAAce,YACvC/D,EAASR,EAAOqB,SAASb,OAAOgE,OAAO,IAAM,GAC3C5C,EAAY5B,EAAO2B,sBAEnBrB,EAAcsB,EAAOtB,UACvByC,EAAc,CAAES,UAASA,EAAEvD,KAAIA,YACQwB,EAAgC,UAAX,QAArB1B,EAAAC,eAAAA,EAAQ2B,qBAAa,IAAA5B,OAAA,EAAAA,EAAE6B,eAAS,IAAAF,OAAA,EAAAA,EAAAP,2BAAMU,SAAS,WACxF,CAAA,EAAM/B,EAAS,CACbE,OAAMA,EACNC,KAAIA,EACJC,QAAOA,EACPE,OAAMA,EACNC,cAAOoE,EAAuB,QAAvBjD,EAAAxB,aAAA,EAAAA,EAAQ2B,qBAAe,IAAAH,OAAA,EAAAA,EAAAI,8BAASvB,MACvCC,UAASA,EACTI,MAAOoC,aAAA,EAAAA,EAAapC,MACpBC,SAAUmC,aAAA,EAAAA,EAAanC,SACvBH,OAAMA,KAVyF,CAAA,EAAA,iBACjGkE,EAAAC,eAWA,KAAA,EAAA,MAAA,CAAA,EAAM9B,EAAkB,CAAE7C,OAAMA,EAAE8C,YAAWA,EAAEC,YAAWA,YAA1D2B,EAAAC,0BAEJ,IAAuB,KAdjBC,EAY2DF,GAEtDnC,QAKT,MAJMsC,EAA0B,uBAAnBD,EAAOE,QAAmC,oBAAsBF,EAAOE,SAC9EC,EAAQ,IAAIC,MAAM,GAAG1C,OAAAuC,EAAU,OAAAvC,OAAAsC,EAAOE,WACtCD,KAAOA,EACbI,QAAQF,MAAMA,GACRA,EAEN,MAAO,CAAA,EAAA,CACLG,YAAaN,EAAOM,aAAeN,EAAOpC,aAC1CuB,OAAQa,EAAOpC,aAAe,cAAgBoC,EAAOb,eAG1D,CC5BD,IAAMoB,EAAqD,CACzDC,aAAc,CACZP,KAAM,qBACND,OAAQS,EAAgE,CACtEH,YAAa,yBACbnB,OAAQ,aAKRuB,EAAqD,CACzDF,aAAc,CACZP,KAAM,qBACND,OAAQW,EAAgE,CACtEC,UAAW,oBACXT,MAAO,yBAKPU,EAA2C,CAC/CL,aAAc,CACZP,KAAM,qBACND,OAAQc,MAqBNC,EAjBkB,SAAC3F,GACvB,IAAMQ,EAAS4C,EAAepD,GAC9B,IAAIQ,EAAO,aAWT,OAAOiF,EAVP,OAAQjF,EAAO,kBACb,IAAK,mCACH,OAAO8E,EACT,IAAK,mCACH,OAAOH,EACT,QAEE,OADAF,QAAQF,MAAM,2BACPU,EAKf,CAEqBG,CAAgB5F,QAaxB6F,EAA0BC,EAMrC,0CAA0C,SAAO/F,EAAyB2B,OAAvB1B,EAAMD,EAAAC,OAAE8C,EAAW/C,EAAA+C,YAAMiD,EAAQrE,EAAAqE,SAAEC,EAAetE,EAAAsE,oIAErG,GADMC,EAAmBF,MACiB,QAArCrB,EAA6B,kBAA7BlD,EAAAyE,aAAK,EAALA,EAAOC,+BAAUd,oBAAY,IAAAX,OAAA,EAAAA,EAAE0B,YAAM,IAAAzB,OAAA,EAAAA,EAAAH,QACxC,MAAA,CAAA,EAAOyB,EAAgB,CACrBR,UAAW,qBAGPjB,EAAW0B,EAAMC,SAASd,aAAae,KAAI5B,wBAKjB,6BADhC6B,EAAQC,eAAe,0BAA2B,oBAAqB,CAAE3F,MAAOoC,aAAA,EAAAA,EAAapC,QACvD,CAAA,EAAA4D,EAAkBtE,EAAQuE,EAAQzB,WAuBxE,OAvBMrB,EAA0BkD,EAAoD2B,OAA5EC,EAAW9E,EAAAyD,YAAEnB,EAAMtC,EAAAsC,OAC3BqC,EAAQC,eAAe,0BAA2B,6BAA8B,CAC9E3F,MAAOoC,aAAA,EAAAA,EAAapC,MACpBwE,YAAWqB,IAIE,WAAXxC,GAAuBwC,IACzBH,EAAQC,eAAe,0BAA2B,oBAAqB,CAAEnB,YAAWqB,IACpFC,EAAc,CACZC,GAAI,sBACJpE,IAAKkE,EACLG,SAAU,WACRN,EAAQC,eAAe,0BAA2B,sBAAuB,CAAEnB,YAAWqB,GACvF,KAIU,gBAAXxC,GAA4BwC,IAC9BH,EAAQO,YAAY,OAAQ,eAAgB,mBAAoB,CAAEnE,aAAc+D,IAChFvG,EAAOqB,SAASC,KAAOiF,GAGlB,CAAA,EAAA,CACL1B,KAAM,qBACND,OAAQS,EAAgE,CAAEH,YAAWqB,EAAExC,OAAMA,aAK/F,kBAFAkB,QAAQ2B,KAAKC,GACTrB,SACIqB,EAAGhC,MACT,IAAK,oBACHW,EAAY,oBACZ,MACF,IAAK,qBACHA,EAAY,qBACZ,MACF,QACEA,EAAY,eAQhB,OALAY,EAAQU,aAAa,0BAA2B,6BAA8B,CAC5EpG,MAAOoC,aAAA,EAAAA,EAAapC,MACpB8E,UAAWA,GAAaqB,EAAGhC,OAG7B,CAAA,EAAOmB,EAAgB,CACrBR,UAASA,EACTT,MAAO8B,EAAG5F,qCAGf,IAEK8F,EAAsBC,EAAY,CACtCC,KAAM,iBACNtB,aAAYA,EACZuB,SAAU,CAAE,EACZC,cAAe,SAACC,GACdA,EACGC,QAAQxB,EAAwByB,SAAS,SAACrB,GACzCA,EAAMb,aAAe,CAAEP,KAAM,qBAAsBD,OAAQ2C,IAC7D,IACCF,QAAQxB,EAAwB2B,WAAW,SAACvB,EAAOlF,GAClDkF,EAAMb,aAAerE,EAAO0G,OAC9B,IACCJ,QAAQxB,EAAwB6B,UAAU,SAACzB,EAAOlF,GACjDkF,EAAMb,aAAe,CACnBP,KAAM,qBACND,OAAQW,EAAYxE,EAAO0G,SAE/B,GACH,IAIqBE,EAA0DZ,EAArCa,QAAqCb,EAAmBc,QCpK9F,IAAMC,EAAyB,SAACC,GAErC,OADqBA,GAAY,SAAC9B,GAAqB,OAAAA,EAAM+B,eAAe5C,YAArB,GAEzD,ECCA,SAAS6C,EAAuBlI,GAC9B,IAAAmI,EAAgBnI,EAAAmI,iBAIhB,OAAO,SAACjC,GAMF,OALIA,EAAMpB,KAKHqD,EAAiBjC,EAAMrB,OAEpC,CACF"}
|