{"version":3,"file":"jifiti-sdk.min.js","sources":["../src/lib/config.js","../src/lib/utils/httpRequest.js","../src/lib/browser/sdk.js","../src/lib/utils/windowBehavior.js","../src/lib/api/applicationApi.js","../src/lib/utils/util.js","../src/lib/check-eligibility.js","../src/entry/index-sdk.js"],"sourcesContent":["const jifitiConfig = (clientToken, url) => ({\r\n baseUrl: url,\r\n token: clientToken\r\n});\r\n\r\nexport { jifitiConfig };\r\n\r\n","export default function newHttpRequest(method, url, headers, body) {\r\n const xhr = new window.XMLHttpRequest();\r\n xhr.open(method, url);\r\n xhr.setRequestHeader('Content-Type', 'application/json');\r\n for (const key in headers || {}) {\r\n if (Object.prototype.hasOwnProperty.call(headers, key)) {\r\n xhr.setRequestHeader(key, headers[key]);\r\n }\r\n }\r\n\r\n let cancelled;\r\n const p = new Promise((resolve, reject) => {\r\n xhr.addEventListener('load', () => {\r\n if (cancelled) {\r\n return;\r\n }\r\n if (xhr.status === 200 || xhr.status === 201) {\r\n let bodyObject;\r\n try {\r\n bodyObject = JSON.parse(xhr.responseText);\r\n } catch (error) {\r\n bodyObject = {};\r\n }\r\n resolve(bodyObject);\r\n } else {\r\n let err = 'error';\r\n try {\r\n err = xhr.responseText ? JSON.parse(xhr.responseText) : {};\r\n } catch (error) {}\r\n err?.message ? reject(err) : reject(new Error(err?.Detail));\r\n }\r\n });\r\n xhr.addEventListener('error', () => {\r\n if (cancelled) {\r\n return;\r\n }\r\n reject(new Error());\r\n });\r\n xhr.send(JSON.stringify(body));\r\n });\r\n const cancel = () => {\r\n cancelled = true;\r\n xhr.abort();\r\n };\r\n return { promise: p, cancel: cancel };\r\n}","import { jifitiConfig } from './../config';\r\nimport { initiateFlow } from './../api/applicationApi';\r\nimport windowBehaviorModule from './../utils/windowBehavior';\r\n\r\nexport default function browserSdk(clientToken) {\r\n const client = {};\r\n let globalSdkConfig;\r\n const copyInitiateFlowRequest = {};\r\n const initiateFlowResponse = {};\r\n let newWin;\r\n\r\n const url = 'https://web-apidev.jifiti.com'; // Please keep \"apidev.jifiti.com\" ( replace from release )\r\n globalSdkConfig = jifitiConfig(clientToken, url);\r\n\r\n validConfig(globalSdkConfig);\r\n\r\n function validConfig(sdkConfig) {\r\n if (!sdkConfig) {\r\n throw new Error('sdkConfig are required to initilize jifiti-Sdk.js');\r\n }\r\n }\r\n\r\n function validRequireParams(request) {\r\n if (!request) {\r\n throw new Error('request are required to call initiateFlow from client at browserSdk module');\r\n }\r\n if (!request['MerchantId']) {\r\n throw new Error('MerchantId is required');\r\n }\r\n if (!request['CompletionMethod']) {\r\n throw new Error('completionMethod is required');\r\n }\r\n if (!request['SourcePageType']) {\r\n throw new Error('SourcePageType is required');\r\n }\r\n\r\n //TODO\r\n // if WindowBehavior !== sameTab -> need callbackURL\r\n // if WindowBehavior === iframe -> need selectorId\r\n }\r\n\r\n const windowBehavior = windowBehaviorModule();\r\n\r\n client.on = (eventName, callback) => {\r\n windowBehavior.addClientEvent(eventName, callback);\r\n };\r\n\r\n client.initiateFlow = initiateFlowRequest => {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n validRequireParams(initiateFlowRequest);\r\n } catch (error) {\r\n reject(error);\r\n return;\r\n }\r\n Object.assign(copyInitiateFlowRequest, initiateFlowRequest); // save internal initiate Flow Request\r\n\r\n if (initiateFlowRequest.WindowBehavior === 'NewTab') {\r\n const params =\r\n 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=no, copyhistory=no, width=600px, height=600px';\r\n newWin = open('', '', params);\r\n newWin.document.write(\"

Loading...

\");\r\n }\r\n\r\n return initiateFlow(globalSdkConfig, initiateFlowRequest)\r\n .then(response => {\r\n if (response) {\r\n Object.assign(initiateFlowResponse, response);\r\n\r\n windowBehavior.addEventListener();\r\n\r\n switch (initiateFlowRequest?.WindowBehavior) {\r\n case 'Lightbox':\r\n windowBehavior.openIframe(response.RedirectURL, initiateFlowRequest.selectorId);\r\n resolve();\r\n break;\r\n case 'NewTab':\r\n windowBehavior.openNewTab(response.RedirectURL, newWin);\r\n resolve();\r\n break;\r\n case 'SameTab':\r\n windowBehavior.openSameTab(response.RedirectURL);\r\n resolve();\r\n break;\r\n default:\r\n windowBehavior.openIframe(response.RedirectURL, initiateFlowRequest.selectorId);\r\n resolve();\r\n break;\r\n }\r\n\r\n return;\r\n }\r\n })\r\n .catch(err => {\r\n if (newWin) {\r\n newWin.close();\r\n }\r\n\r\n reject(err);\r\n });\r\n });\r\n };\r\n\r\n return client;\r\n}\r\n","export default function windowBehaviorModule() {\r\n var ifrm;\r\n var events = {};\r\n\r\n const openIframe = (url, selectorId) => {\r\n let existIframe = document.getElementById(\"jifiti-iframe-SDK\");\r\n \r\n if (existIframe) {\r\n existIframe.setAttribute(\"src\", url);\r\n return;\r\n }\r\n \r\n ifrm = document.createElement(\"iframe\");\r\n ifrm.setAttribute(\"id\", \"jifiti-iframe-SDK\");\r\n ifrm.setAttribute(\"src\", url);\r\n ifrm.setAttribute(\"sandbox\", \"allow-same-origin allow-scripts allow-forms allow-popups allow-popups-to-escape-sandbox\");\r\n ifrm.style.width = \"100%\";\r\n ifrm.style.height = \"100%\";\r\n ifrm.style.border = \"1px solid\";\r\n \r\n // check if selectorId exists in the DOM\r\n var el = document.getElementById(selectorId); // returns null if the element does not exist.\r\n if (el) {\r\n console.log(\"appending iframe to containerId \" + selectorId);\r\n el.appendChild(ifrm);\r\n }\r\n else {\r\n document.body.appendChild(ifrm);\r\n }\r\n };\r\n \r\n const openNewTab = (url, newWin) => {\r\n newWin.location = url;\r\n };\r\n \r\n const openSameTab = url => {\r\n // TODO: params good? style tab width and height good?\r\n var params = 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=no, copyhistory=no, width=600px, height=600px'\r\n window.open(url, '_self', params);\r\n };\r\n\r\n const addEventListener = () => {\r\n var posMsgtListerFunc;\r\n if (!posMsgtListerFunc) {\r\n posMsgtListerFunc = function (e) {\r\n if(e.origin) {\r\n try { \r\n var obj = JSON.parse(e.data);\r\n const clientEvent = events[obj.status];\r\n delete obj['sourcepage'];\r\n if(clientEvent) {\r\n clientEvent(obj);\r\n }\r\n } catch (err) {\r\n if (e.data === 'closeIframe') {\r\n window.removeEventListener(\"message\", posMsgtListerFunc, false); \r\n if (ifrm) { \r\n ifrm.remove();\r\n } \r\n }\r\n return !1;\r\n }\r\n }\r\n }\r\n window.addEventListener(\"message\", posMsgtListerFunc, !1);\r\n }\r\n }\r\n\r\n const addClientEvent = (eventName, callback) => {\r\n events[eventName] = callback;\r\n }\r\n\r\n\r\n return {\r\n addEventListener: addEventListener,\r\n openSameTab: openSameTab,\r\n openNewTab: openNewTab,\r\n openIframe: openIframe,\r\n addClientEvent: addClientEvent\r\n };\r\n};\r\n","/* eslint-disable no-use-before-define */\r\n/* eslint-disable no-param-reassign */\r\nimport httpRequest from '../utils/httpRequest';\r\nlet productPrice = null;\r\nlet referenceId = null;\r\n// remove after offer type will be included from server\r\nconst tempMethod = offers => {\r\n for (let index = 0; index < offers.length; index++) {\r\n if (offers[index].CategoryType === 'ZERO4') {\r\n offers[index]['OfferType'] = 8;\r\n } else {\r\n offers[index]['OfferType'] = 4;\r\n }\r\n }\r\n};\r\n\r\nconst merchantOfferDetails = (config, price = null) => {\r\n if (price) {\r\n config['price'] = price;\r\n return merchantSliderOfferDetails(config);\r\n }\r\n const apiToken = config.token;\r\n return httpRequest('GET', config.baseUrl + '/application/GetMerchantMultiOfferDetails/' + config.token, {\r\n token: apiToken,\r\n // }).promise.then(result => result.Offers);\r\n }).promise;\r\n};\r\n\r\nconst merchantSliderOfferDetails = productConf => {\r\n const apiToken = productConf.token;\r\n const price = productConf.price; // THere is an issue with the price and other attr that we don't get(need to split methods for initKey and init)\r\n if (!productConf.price) {\r\n return;\r\n }\r\n productPrice = productConf.price;\r\n return httpRequest('POST', productConf.baseUrl + '/application/GetMerchatProductFinancingDetails/','' ,{\r\n token: apiToken,\r\n price: price,\r\n }).promise;\r\n};\r\n\r\nconst initiateFlowWidgets = (config, initiateFlowReq) => {\r\n const product = {\r\n MerchantId: 'null',\r\n SourcePageType: 'PIP',\r\n RequestedAmount: initiateFlowReq?.RequestedAmount || 0,\r\n CallbackURL: window.location.href,\r\n CompletionMethod: 'Prequal',\r\n StartedFrom: 'Widget',\r\n SourceChannel: 87,\r\n };\r\n\r\n initiateFlowReq = { ...product, ...initiateFlowReq };\r\n const apiToken = config.token; //'5118fb6700ff4907b06dc4b23cb03b04'\r\n return httpRequest(\r\n 'POST',\r\n config.baseUrl + '/applications/v2/Widgets',\r\n {\r\n token: apiToken,\r\n },\r\n initiateFlowReq\r\n ).promise;\r\n};\r\n\r\nconst setReferenceId = refId => {\r\n referenceId = refId;\r\n};\r\n\r\nconst checkAccountStatus = config => {\r\n if (!referenceId) {\r\n return;\r\n }\r\n const apiToken = config.token; //'5118fb6700ff4907b06dc4b23cb03b04'\r\n const referenceId = {\r\n ReferenceID: referenceId || '1f1e2fa2d57148f0aace176b76703b5d',\r\n };\r\n return httpRequest(\r\n 'POST',\r\n config.baseUrl + '/application/CheckAccountStatus',\r\n {\r\n token: apiToken,\r\n },\r\n referenceId\r\n ).promise;\r\n};\r\n\r\nconst initiateFlow = (config, bodyReq) => {\r\n const apiToken = config.token;\r\n return httpRequest(\r\n 'POST',\r\n config.baseUrl + '/initiateWebFlow',\r\n {\r\n 'x-jifiti-token-id': apiToken,\r\n },\r\n bodyReq\r\n ).promise;\r\n};\r\n\r\nconst checkEligibility = (config, bodyReq) => {\r\n const apiToken = config.token;\r\n return httpRequest(\r\n 'POST',\r\n config.baseUrl + '/initiateWebFlow/CheckEligibility',\r\n {\r\n 'x-jifiti-token-id': apiToken,\r\n },\r\n bodyReq\r\n ).promise;\r\n};\r\n\r\nconst updateOrderID = (config, bodyReq) => {\r\n const apiToken = config.token;\r\n return httpRequest(\r\n 'POST',\r\n config.baseUrl + '/Orders/UpdateOrderID',\r\n {\r\n 'x-jifiti-token-id': apiToken,\r\n },\r\n bodyReq\r\n ).promise;\r\n};\r\n\r\nconst successCallback = result => {\r\n console.log(result);\r\n return result;\r\n};\r\nconst failureCallback = error => {\r\n console.log(error);\r\n};\r\n\r\nexport {\r\n merchantOfferDetails,\r\n merchantSliderOfferDetails,\r\n initiateFlow,\r\n productPrice,\r\n checkEligibility,\r\n updateOrderID,\r\n initiateFlowWidgets,\r\n setReferenceId,\r\n checkAccountStatus,\r\n};\r\n","/* eslint-disable no-param-reassign */\r\nconst groupBy = (xs, key) =>\r\n xs.reduce((rv, x) => {\r\n (rv[x[key]] = rv[x[key]] || []).push(x);\r\n return rv;\r\n }, {});\r\n\r\nconst isUndefined = obj => obj === 'undefined' || obj === void 0;\r\n\r\nconst getHtmlElement = select => {\r\n if (isUndefined(select)) {\r\n return select;\r\n }\r\n if (typeof select === 'string') {\r\n const idElement = document.getElementById(select);\r\n if (idElement) {\r\n return idElement;\r\n }\r\n const classElement = document.getElementsByClassName(select);\r\n if (classElement?.length === 1) {\r\n return classElement;\r\n }\r\n }\r\n return select;\r\n};\r\n\r\nconst openPopup = (e, url = '', behavior = '', hasLink = true) => {\r\n //behavior: '_blank'=new tab | '_self'= redirect | ''=popup\r\n e.preventDefault();\r\n if (!hasLink) {\r\n openLenderReadme(e, url);\r\n return;\r\n }\r\n let mql = window.matchMedia('(min-width: 992px)');\r\n let popup_width = mql.matches ? 996 : 331;\r\n let popup_height = mql.matches ? 825 : 700;\r\n\r\n let left = (screen.width - popup_width) / 2; \r\n let top = (screen.height - popup_height) / 4; \r\n let params = `width=${popup_width}, height=${popup_height}, left=${left}, top=${top}, toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no`;\r\n params = behavior === '_blank' ? '' : params;\r\n window.open(url, \"sameWindowShit\", params);\r\n};\r\n\r\nconst openLenderReadme = (e, url)=>{\r\n const modal = document.querySelector('#j__myModal');\r\n const modalImg = document.querySelector(\"#j__infoPage\");\r\n const modalOverlay = document.querySelector(\".j__modal-overlay\");\r\n const span = document.querySelector(\".j__close\");\r\n\r\n\r\n modal.style.display = \"block\";\r\n modalImg.src = url;\r\n modalOverlay.style.opacity = 1;\r\n \r\n span.onclick = function() { \r\n modal.style.display = \"none\";\r\n }\r\n\r\n modalOverlay.onclick = function() { \r\n modal.style.display = \"none\";\r\n modalOverlay.style.opacity = 0;\r\n }\r\n\r\n}\r\n\r\nexport { groupBy, getHtmlElement, isUndefined, openPopup };\r\n","import { checkEligibility } from './api/applicationApi';\r\nimport { jifitiConfig } from './config';\r\nimport { isUndefined } from './utils/util';\r\n\r\nconst client = {};\r\nlet globalConfig = {};\r\nlet copyRequest = {};\r\n\r\nconst validateRequest = request => {\r\n if (isUndefined(request['LenderId'])) {\r\n throw 'LenderId is required';\r\n }\r\n if (isUndefined(request['MerchantId'])) {\r\n throw 'MerchantId is required';\r\n }\r\n if (isUndefined(request['RequestedAmount'])) {\r\n throw 'RequestedAmount is required';\r\n }\r\n if (isUndefined(request['Currency'])) {\r\n throw 'Currency is required';\r\n }\r\n if (isUndefined(request['ProductType'])) {\r\n throw 'ProductType is required';\r\n }\r\n};\r\n\r\nexport default function checkEligibilityClient(token) {\r\n let url = 'https://web-apidev.jifiti.com' // Please keep \"apidev.jifiti.com\" ( replace from release )\r\n //let url = 'https://localhost:5001'; \r\n globalConfig = jifitiConfig(token, url);\r\n\r\n client.checkEligibility = (checkEligibilityRequest) => {\r\n\r\n return new Promise((resolve, reject) => {\r\n try {\r\n validateRequest(checkEligibilityRequest);\r\n } catch (error) {\r\n reject(error);\r\n return;\r\n }\r\n\r\n Object.assign(copyRequest, checkEligibilityRequest); // save internal check Eligibility Request \r\n\r\n return checkEligibility(globalConfig, checkEligibilityRequest).then((response) => {\r\n resolve(response);\r\n }).catch(err => {\r\n reject(err);\r\n })\r\n })\r\n }\r\n\r\n return client;\r\n}\r\n","import browserSdk from '../lib/browser/sdk';\r\nimport checkEligibilityClient from '../lib/check-eligibility';\r\n\r\nconst init = clientToken => browserSdk(clientToken);\r\n\r\nconst checkEligibilityInit = (token, request) => checkEligibilityClient(token, request);\r\n\r\nexport { init, checkEligibilityInit };\r\n"],"names":["jifitiConfig","clientToken","url","baseUrl","token","newHttpRequest","method","headers","body","cancelled","xhr","window","XMLHttpRequest","key","open","setRequestHeader","Object","prototype","hasOwnProperty","call","promise","Promise","resolve","reject","addEventListener","status","bodyObject","JSON","parse","responseText","error","err","message","Error","_err2","Detail","send","stringify","cancel","abort","browserSdk","globalSdkConfig","newWin","client","copyInitiateFlowRequest","initiateFlowResponse","sdkConfig","validConfig","ifrm","events","windowBehavior","posMsgtListerFunc","e","origin","obj","data","clientEvent","removeEventListener","remove","openSameTab","openNewTab","location","openIframe","selectorId","existIframe","document","getElementById","setAttribute","createElement","style","width","height","border","el","console","log","appendChild","addClientEvent","eventName","callback","on","initiateFlow","initiateFlowRequest","request","validRequireParams","assign","WindowBehavior","write","config","bodyReq","apiToken","httpRequest","then","response","RedirectURL","close","isUndefined","globalConfig","copyRequest","checkEligibilityClient","checkEligibility","checkEligibilityRequest","validateRequest"],"mappings":"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"}