{"version":3,"sources":["webpack:///./app/javascript/utilities/validators.js","webpack:///./app/javascript/utilities/vehicleImageHelpers.js","webpack:///./app/javascript/utilities/basketHelpers.js","webpack:///./app/javascript/utilities/intercomManager.js","webpack:///./app/javascript/services/abTestService.js","webpack:///./app/javascript/utilities/analyticsManager.js","webpack:///./app/javascript/services/tagService.js","webpack:///./app/javascript/utilities/WillHelper.js","webpack:///./app/javascript/services/motorService.js"],"names":["Helpers","replaceAllInString","Validators","_Validators","isUserID","id","length","isEmail","email","trim","Regex","test","isCellNo","cell","cellNumber","isLandLineOrCellNo","number","numeric","isName","name","alphaSpaceDash","isFullName","names","split","every","n","isZaId","zaId","val","nCheck","nDigit","bEven","strippedField","replace","cDigit","charAt","parseInt","luhnCheck","parsedInfo","parseSAIdNo","age","isYear","year","indexOf","isNumeric","num","isNumberPlate","reg","str","substr","alphanumericSpace","isVin","vin","isEngineNo","engineNo","isZaBankAcc","no","isZaCompanyRegistrationNo","zaCompanyRegistrationNumer","isZaVatNumber","zaVatNumber","isDealershipCode","code","isPassword","password","isStreetName","street","streetName","isValidEmploymentStatus","EmploymentStatuses","map","status","value","isValidLicenseRestriction","LicenseRestrictions","containsSpecialCharacter","character","includes","isValueInRange","min","max","isValidClaimType","isValidLossType","isValidLossTypeMotor","isValidRole","isValidCauseTypeMotor","isValidIncidentTime","timeObj","dateString","isValidTime","isNaN","Date","parse","dateFromDateString","moment","combinedDateTime","set","hours","minutes","seconds","currentDateTime","isNotInTheFuture","isBefore","getDob","idNumber","Year","substring","Month","Day","getFullYear","isValidLicenseDate","date","parsedZaIdInfo","_parsedZaIdInfo","birthDate","month","day","licenseAge","diff","Number","isValidDate","isValidPreviousLosses","prvLosses","Array","isArray","some","loss","prevLossDetails","prevLossAmount","latestYear","currentyear","isValidAutomaticVehicleDefiner","state","isValid","automaticDefinerNotFound","regularDriver","iWyzePersonExists","iwyzePerson","licenseRestrictionsCode","notTheRegularDriver","regDrvLicenseRestrictions","isEdittingVehicle","showAutomaticQuestion","vehicleIsAutomatic","vehicleImageHelpers","setStockImage","async","url","arguments","undefined","setInStorage","this","setState","vehicleImageUrl","getStockImage","vehicleStockImage","getInStorage","basketHelpers","removeVehicleFromQuote","registration","vehicleId","basketStr","basketArray","JSON","res","MotorService","success","filteredBasket","filter","item","stringify","Alert","alert","error","message","IntercomManager","_IntercomManager","init","window","Intercom","user","getAuthUser","userName","first_name","last_name","truncatedName","app_id","user_id","created_at","update","params","updateParams","_objectSpread","signOut","_Service","SecureService","constructor","trackExperiment","response","fetch","Config","services","analytics","method","headers","defaultHeaders","Authorization","generateAuthHeader","body","json","abTestService","AnalyticsManager","checkExperimentVariant","experimentName","experimentVariant","posthog","getFeatureFlag","getExperimentVariant","forceExperimentVariant","variantName","isOverridingFeatureFlags","configObj","featureFlags","overrideFeatureFlags","console","sanitizeKeyForFirebaseFb","string","toLowerCase","captureEvent","capture","eventName","$set","capturePageView","identifyUser","userId","properties","identify","resetUserIdentity","reset","registerStaticEventDetails","register","isAgent","vehicle","experimentParams","experiment_name","variant_name","product","entity","platform","vehicle_id","sendWebEvent","authUser","afCookieUserId","document","cookie","find","cookies","splitAfData","afID","customerUserId","afUserId","tags","create","ok","tag","WillHelper","processWillLead","sales_agent","auth_user","willsParams","will_send_lead","leadDetails","leadParams","entityObj","log","querystring","_this","httpReq","endpoint","retrieveUser","retrieve","jsonResponse","data","_jsonResponse$data","motor_policy_number","motor_quote_number","Bugsnag","setUser","err","wills","rewarmWillLead","processOptInOptOut","callLead","searchUser","searchByField","sendSMS","sms_type","sendEmail","verifySMS","updateUserOnVerifyAccount","searchMake","make","searchModel","query","searchMmCode","searchMMcode","getDealershipVehicles","queryStr","getAll","getVehicles","getAuthUserId","getByReg","reg_no","Promise","resolve","reject","authHeader","controller","AbortController","signal","Object","assign","setTimeout","abort","then","catch","errorObj","getByMmCode","mmcode","createVehicle","deleteVehicle","getRiskscapePlace","WTF3","LOOKUP","ADDRESS_LATLNG","coords","lat","lng","searchAddress","ADDRESS_AUTOCOMPLETE","address","text","searchCompleteAddress","ADDRESS_AUTOCOMPLETE_FIELDS","searchGoogleAddress","type","person","getGoogleAutocomplete","getPlace","getGooglePlace","placeId","parseGoogleAddress","suburb","province","postalCode","address_components","forEach","component","types","long_name","geometry","location","postal_code","getPremiums","commit","sasria","QUOTE","UPSERT","reload","timeLimit","getExcesses","e","getBanks","getBranches","bank","getITCPerson","personType","CLIENT","ITC","getIWYZEPerson","get","getIWYZEAddedPerson","getAddedPerson","createIWYZEPerson","updateVehicleFinanceDetails","addBankDetailsToQuote","ADD_BANK_DETAILS_TO_QUOTE","addAdditionalVehicleToPolicy","motorPolicy","createPolicy","CREATE_POLICY","getProofOfCover","getConfig","getTermsAndConditions","QUOTE_TCS","checkHighRiskVehicle","HIGH_RISK_VEHICLE","updateClientDeclarations","UPDATE_DECLARATIONS","EXCESSES","REMOVE_VEHICLE","removeObjectFromQuote","REMOVE_OBJECT","objectNo","sendIntercomTag","intercomTags","intercomTag","sendIntercomTags","sendIntercomEvent","metadata","syncPolicy","policyNumber","sync","generateAgentVerificationCode","agent","agent_id","verifyAgentCode","retrieveSalesAgent","updateVin","vinNo","logGoogleConversion","googleConversion","verifyEmail","verifyEmailAddress","recollectionsReschedule","recollections","schedule","searchFinanceHouse","financeHouse","getFinanceHouseName","financeHouseCode"],"mappings":"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","file":"js/364-d1ca287a47100a045835.chunk.js","sourcesContent":["import moment from 'moment'\nimport { EmploymentStatuses, LicenseRestrictions, Regex } from '../utilities/enums'\nimport { Helpers } from '../utilities/helpers'\n\nconst { replaceAllInString } = Helpers\n\nconst luhnCheck = (val) => {\n // Luhn Check Code from https://gist.github.com/4075533\n // accept only digits, dashes or spaces\n const numericDashRegex = /^[\\d\\-\\s]+$/\n if (!numericDashRegex.test(val)) {\n return false\n }\n\n // The Luhn Algorithm\n let nCheck = 0\n let nDigit = 0\n let bEven = false\n let strippedField = val.replace(/\\D/g, '')\n\n for (let n = strippedField.length - 1; n >= 0; n--) {\n let cDigit = strippedField.charAt(n)\n nDigit = parseInt(cDigit, 10)\n\n if (bEven) {\n if ((nDigit *= 2) > 9) {\n nDigit -= 9\n }\n }\n\n nCheck += nDigit\n bEven = !bEven\n }\n\n return nCheck % 10 === 0\n}\n\nexport default class Validators {\n //user_id\n static isUserID = id => id.length === 24\n\n // email\n static isEmail = email => {\n // Check if the email is not empty and does not start with a space\n if (email.trim() !== email) {\n return false\n }\n return Regex.email.test(email)\n }\n\n // cell\n static isCellNo = cell => Regex.cellNumber.test(cell)\n\n // landline or cell\n static isLandLineOrCellNo = number => Regex.numeric.test(number) && number.length === 10 && number[0] === '0'\n\n // name\n static isName = name => name && name.trim().length > 1 && Regex.alphaSpaceDash.test(name)\n\n //full name\n static isFullName = name => {\n const names = name.split(' ');\n return names.length >= 2 && names.every((n) => this.isName(n));\n }\n\n // id no\n static isZaId = (zaId) => {\n if (!Regex.zaId.test(zaId)) {\n return false\n }\n\n if (!luhnCheck(zaId)) {\n return false\n }\n\n // must be older than 18\n const parsedInfo = Helpers.parseSAIdNo(zaId)\n\n if (!parsedInfo || parsedInfo.age < 18) {\n return false\n }\n\n return true\n }\n\n // year\n static isYear = year => year.length === 4 && Regex.numeric.test(year) && [1, 2].indexOf(parseInt(year[0], 10)) > -1\n\n // number\n static isNumeric = num => Regex.numeric.test(num)\n\n // number plate\n static isNumberPlate = reg => {\n const str = Helpers.replaceAllInString(reg, ' ', '')\n\n // Check & restrict user if the number plate is only numbers\n if (/^[0-9]+$/.test(str)) {\n return false\n }\n\n if (reg && reg.substr(reg.length - 3) === 'TMP') {\n return true\n } else {\n return reg && Regex.alphanumericSpace.test(reg) && str.length > 3 && str.length < 10\n }\n }\n\n // vin\n static isVin = vin => Regex.vin.test(vin)\n\n // engine number\n static isEngineNo = engineNo => Regex.engineNo.test(engineNo)\n\n // ZA bank account basic validation\n static isZaBankAcc = no => Regex.numeric.test(no) && (no.length >= 6)\n\n // ZA company registration number\n static isZaCompanyRegistrationNo = no => Regex.zaCompanyRegistrationNumer.test(no)\n\n // ZA VAT number\n static isZaVatNumber = no => Regex.zaVatNumber.test(no)\n\n // Dealership Code\n static isDealershipCode = code => code && code.trim().length === 4\n\n // Password\n static isPassword = password => password && password.trim().length >= 6\n\n //street name\n static isStreetName = street => Regex.streetName.test(street)\n\n // Employment status\n static isValidEmploymentStatus = (val) => {\n const statuses = EmploymentStatuses.map(status => status.value)\n\n return statuses.indexOf(val) > -1\n }\n\n // License restrictions\n static isValidLicenseRestriction = (val) => {\n const statuses = LicenseRestrictions.map(status => status.value)\n\n return statuses.indexOf(val) > -1\n }\n\n // Special characters\n static containsSpecialCharacter = (value, character) => {\n if (value.includes(character)) {\n value = value.replace(/\\s/g, '');\n\n return true\n }\n\n return false\n }\n\n // Is value in range validation\n static isValueInRange = (value, min, max) => {\n return (value > min && value < max)\n }\n\n // claim type\n static isValidClaimType = (val) => {\n return val === 'motor' || val === 'all-risk'\n }\n\n // loss type\n static isValidLossType = (val) => {\n return val === 'theft' || val === 'damage' || val ==='lost-item'\n }\n\n static isValidLossTypeMotor = (val) => {\n return val === 'DQ' ||\n val === 'DS' ||\n val === 'DT' ||\n val === 'DU' ||\n val === 'EJ'\n }\n\n static isValidRole = (val) => {\n return val === 'claims' || val === 'sales'\n }\n\n // incident type\n static isValidCauseTypeMotor = (val) => {\n return val === 'COD' ||\n val === 'CTC' ||\n val === 'CTO' ||\n val === 'KEY' ||\n val === 'MBB' ||\n val === 'MMD' ||\n val === 'PTH' ||\n val === 'ROT' ||\n val === 'WHA' ||\n val === 'WSF' ||\n val === 'WST' ||\n val === 'TFA' ||\n val === 'TFD' ||\n val === 'TFE' ||\n val === 'TFJ' ||\n val === 'TFV' ||\n val === 'AWR' ||\n val === 'AWS' ||\n val === 'MPL' ||\n val === 'CTP'\n }\n\n static isValidIncidentTime = (timeObj, dateString) => {\n let isValidTime = !isNaN(Date.parse(timeObj))\n\n const dateFromDateString = moment(dateString, 'YYYY-MM-DD');\n // Combine the date and time\n const combinedDateTime = moment(dateFromDateString).set({\n 'hour': timeObj.hours(),\n 'minute': timeObj.minutes(),\n 'second': timeObj.seconds(),\n });\n const currentDateTime = moment()\n\n let isNotInTheFuture = combinedDateTime.isBefore(currentDateTime)\n return isValidTime && isNotInTheFuture\n }\n\n //getDOB\n static getDob = (idNumber) => {\n var Year = idNumber.substring(0, 2);\n var Month = idNumber.substring(2, 4)\n var Day = idNumber.substring(4, 6)\n\n var cutoff = (new Date()).getFullYear() - 2000\n\n var dob = (Year > cutoff ? '19' : '20') + Year + '-' + Month + '-' + Day;\n\n return dob;\n }\n\n\n // License date\n static isValidLicenseDate = (date, zaId) => {\n //1. parse ZA id number\n let parsedZaIdInfo\n\n if (!date) {\n return false\n }\n\n if (zaId) {\n parsedZaIdInfo = Helpers.parseSAIdNo(zaId)\n const { year, month, day } = parsedZaIdInfo\n\n //birth date//\n const birthDate = moment(this.getDob(zaId))\n\n const licenseIssueDate = moment(date)\n const licenseAge = moment(date).diff(birthDate, 'y', true)\n\n return !Number.isNaN(licenseAge) && licenseAge >= 18\n } else {\n return date instanceof Date\n }\n }\n\n // validate date\n static isValidDate = (date) => {\n return (new Date(date) !== 'Invalid Date') && !isNaN(new Date(date));\n }\n\n // Previous losses\n static isValidPreviousLosses = (prvLosses) => {\n // is an array actually being supplied?\n if (!prvLosses || !Array.isArray(prvLosses)) {\n return false\n }\n\n // check for malformed data in array\n const containsMalformedData = prvLosses.some((loss) =>\n !loss.prevLossDetails // no description\n || loss.prevLossDetails.trim().length < 10 // description less than 10 characters\n || !loss.prevLossAmount // no amount specified\n )\n\n return !containsMalformedData\n }\n\n static latestYear = (year) => {\n const date = new Date()\n let currentyear = date.getFullYear()\n return (year && this.isYear(year) && year <= currentyear)\n }\n\n static isValidAutomaticVehicleDefiner = (state) => {\n let isValid = false\n if (state.automaticDefinerNotFound) {\n isValid = state.regularDriver\n ? !state.iWyzePersonExists ||\n state.iwyzePerson.licenseRestrictionsCode !== 'AUTO'\n : state.notTheRegularDriver\n ? state.regDrvLicenseRestrictions !== 'AUTO'\n : true\n }\n\n if (!isValid) {\n isValid = (state.isEdittingVehicle && !state.showAutomaticQuestion) ||\n state.vehicleIsAutomatic != null;\n }\n\n return isValid\n }\n\n}","import { Helpers } from '../utilities/helpers';\n\nconst vehicleImageHelpers = {\n setStockImage: async function(url = ''){\n await Helpers.setInStorage('vehicle-image', url)\n this.setState({\n vehicleImageUrl: url\n })\n },\n getStockImage: async function(){\n const { vehicleImageUrl } = this.state\n const vehicleStockImage = await Helpers.getInStorage('vehicle-image')\n\n if (vehicleStockImage !== vehicleImageUrl){\n this.setState({\n vehicleImageUrl: vehicleStockImage\n })\n }\n }\n}\n\nexport { vehicleImageHelpers }","import { Helpers } from '../utilities/helpers';\nimport { MotorService } from '../services/motorService';\nimport Alert from '../components/forms/Alert';\n\nconst basketHelpers = {\n removeVehicleFromQuote: async (registration, vehicleId) => {\n const basketStr = await Helpers.getInStorage('motorInsuranceCart')\n const basketArray = JSON.parse(basketStr)\n if (basketArray) {\n const res = await MotorService.removeVehicleFromQuote(vehicleId)\n if (res && res.success) {\n const filteredBasket = basketArray.filter((item) => item.registration !== registration)\n await Helpers.setInStorage('motorInsuranceCart', JSON.stringify(filteredBasket))\n return filteredBasket\n } else {\n Alert.alert('Could not remove vehicle from quote', res.error.message)\n }\n }\n }\n}\n\nexport { basketHelpers }","import { Helpers } from './helpers'\n\nexport default class IntercomManager {\n static init = async () => {\n // no intercom on screen\n if (!window.Intercom) return\n\n const user = await Helpers.getAuthUser()\n\n // stop if no user\n if (!user) return\n\n const userName = `${user.first_name} ${user.last_name}`\n const truncatedName = userName.length > 17 ? `${userName.substring(0, 17)}...` : userName\n\n // add user details to Intercom\n window.Intercom('boot', {\n app_id: 'bt8vmdib',\n user_id: user.id,\n name: truncatedName, // Full name\n email: user.email, // Email address\n created_at: new Date() // Signup date as a Unix timestamp\n });\n }\n\n static update = async (params = undefined) => {\n await IntercomManager.init()\n\n // no intercom on screen\n if (!window.Intercom) return\n\n // get user ID\n const user = await Helpers.getAuthUser()\n\n const updateParams = {\n user_id: user ? user.id : null,\n ...params\n }\n\n // update so latest messages show up\n window.Intercom('update', updateParams)\n }\n\n static signOut = () => {\n // no intercom on screen\n if (!window.Intercom) return\n\n window.Intercom('shutdown')\n }\n}\n","import { SecureService } from './secureService'\nimport { Config } from '../utilities/config'\n\nclass _Service extends SecureService {\n\n trackExperiment = async (params) => {\n const response = await fetch(Config.services.analytics.trackExperiment, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n })\n const jsonResponse = await response.json()\n return jsonResponse\n }\n\n}\n\nconst abTestService = new _Service()\nexport { abTestService }","import { Helpers } from './helpers'\nimport { abTestService } from '../services/abTestService'\nimport posthog from 'posthog-js'\n\nexport class AnalyticsManager {\n static isOverridingFeatureFlags = false;\n\n static sanitizeKeyForFirebaseFb = (str) => {\n let string = Helpers.replaceAllInString(str.substr(0, 32), '-', '_')\n string = Helpers.replaceAllInString(string, ' ', '_')\n string = Helpers.replaceAllInString(string, '&', '_and_')\n return string.toLowerCase()\n }\n\n // check experiment variants for a given experiment\n static async checkExperimentVariant(experimentName, experimentVariant) {\n const featureFlag = posthog.getFeatureFlag(experimentName);\n return featureFlag === experimentVariant;\n }\n\n // get the current experiment variant from posthof\n static async getExperimentVariant(experimentName) {\n const featureFlag = posthog.getFeatureFlag(experimentName);\n return featureFlag;\n }\n\n static async forceExperimentVariant(experimentName, variantName) {\n if (this.isOverridingFeatureFlags) {\n // Feature flag override is already in progress. Skipping\n return ;\n }\n\n this.isOverridingFeatureFlags = true;\n\n try {\n const configObj = {}\n configObj[`${experimentName}`] = variantName\n posthog.featureFlags.overrideFeatureFlags(configObj)\n\n return true;\n } catch (error) {\n console.error(\"forceExperimentVariant:\", error);\n } finally {\n this.isOverridingFeatureFlags = false;\n }\n }\n\n static captureEvent = async (eventName) => {\n const user = await Helpers.getAuthUser()\n posthog.capture(eventName, {\n $set: { name: `${user.first_name} ${user.last_name}`, email: user.email }\n })\n }\n\n static capturePageView = () => {\n posthog.capture('$pageview')\n }\n\n static identifyUser = (userId, properties) => {\n posthog.identify(userId, properties)\n }\n\n static resetUserIdentity = () => {\n posthog.reset()\n }\n\n static registerStaticEventDetails = (properties) => {\n posthog.register(properties)\n }\n\n // create an A/B test experiment\n static trackExperiment = async (experimentName, variantName, isAgent, vehicle) => {\n const user = await Helpers.getAuthUser()\n const experimentParams = {\n user_id: user.id,\n experiment_name: experimentName,\n variant_name: variantName,\n product: 'motor',\n entity: isAgent ? 'agent' : 'user',\n platform: 'web',\n vehicle_id: vehicle?.id\n }\n\n // Assuming abTestService is available here\n const result = await abTestService.trackExperiment(experimentParams)\n return result\n \n }\n}\n","import { SecureService } from './secureService'\nimport { Config } from '../utilities/config'\nimport { Helpers } from '../utilities/helpers'\n\nclass _Service extends SecureService {\n\n sendWebEvent = async (params) => {\n try {\n const authUser = await Helpers.getAuthUser()\n const splitData = document.cookie.split(';')\n const afCookieUserId = splitData.find((cookies) => {\n const pattern = /afUserId/\n if (pattern.test(cookies)) return cookies.substr(10)\n })\n const splitAfData = afCookieUserId ? afCookieUserId.split('=') : null\n const afID = splitAfData ? splitAfData[1] : null\n params.user_id = authUser.id\n params.customerUserId = authUser ? authUser.id : afCookieUserId\n params.afUserId = afID\n const response = await fetch(Config.services.tags.create, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n })\n \n if (!response.ok) {\n console.error('Network response was not ok')\n }\n\n return response.json()\n } catch (error) {\n console.error('error', error)\n }\n }\n}\n\nconst tag = new _Service()\nexport { tag }","import { MotorService } from '../services/motorService';\nimport { Helpers } from './helpers';\n\nexport class WillHelper {\n constructor() {}\n\n static processWillLead = async (willsParams) => {\n let sales_agent = await Helpers.getInStorage('sales_agent', true);\n if (sales_agent) {\n sales_agent = JSON.parse(sales_agent)\n }\n const auth_user = await Helpers.getAuthUser();\n const { user_id, will_send_lead, leadDetails } = willsParams;\n try {\n const leadParams = {\n user_id,\n will_send_lead,\n entityObj: {\n ...(sales_agent\n ? {\n entity: 'agent',\n email: sales_agent.email,\n }\n : {\n entity: 'user',\n email: leadDetails?.email || auth_user?.email,\n }),\n },\n leadDetails,\n };\n return await MotorService.processWillLead(leadParams);\n } catch (error) {\n console.log('Error processWillLead', error);\n }\n };\n}\n","import Bugsnag from '@bugsnag/js';\nimport { SecureService } from './secureService';\nimport { Config, WTF3 } from '../utilities/config';\nimport { Helpers } from '../utilities/helpers';\n\nconst { querystring } = Helpers;\n\nclass _Service extends SecureService {\n httpReq = async (endpoint, params) => {\n const response = await fetch(`${endpoint}${params}`);\n return response.json ? await response.json() : false;\n };\n\n // retrieve user by email\n retrieveUser = async (params) => {\n try {\n const response = await fetch(Config.services.user.retrieve, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n })\n\n const jsonResponse = await response.json()\n\n if (jsonResponse.success && jsonResponse.data) {\n const {\n id,\n email,\n first_name,\n last_name,\n motor_policy_number,\n motor_quote_number\n } = jsonResponse.data\n Bugsnag.setUser({\n id,\n email,\n name: `${first_name} ${last_name}`\n })\n\n // if user already has a motor policy number, run syncPolicy\n // if (motor_policy_number) {\n // this.syncPolicy(id)\n // } else if (motor_quote_number) {\n // this.syncPolicy(id, motor_quote_number)\n // }\n }\n\n return jsonResponse\n } catch (err) {\n console.error('Motor Service: retrieveUser catch(err): ', err)\n }\n };\n\n processWillLead = async (params) => {\n try {\n const response = await fetch(Config.services.wills.processWillLead, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n })\n\n return await response.json()\n } catch (err) {\n console.error('Motor Service: processWillLead catch(err): ', err)\n }\n };\n\n rewarmWillLead = async (params) => {\n try {\n const response = await fetch(Config.services.wills.rewarmWillLead, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n })\n return await response.json()\n } catch (err) {\n console.error('Value Added Service: rewarmWillLead catch(err): ', err)\n }\n };\n\n // process opt in opt out status of user\n processOptInOptOut = async (params) => {\n const response = await fetch(Config.services.user.processOptInOptOut, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n });\n\n return response.json();\n };\n\n //send lead to be called\n\n callLead = async (params) => {\n const response = await fetch(Config.services.user.callLead, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n });\n\n return response.json();\n };\n\n // search user by email and contact number\n searchUser = async (params) => {\n const response = await fetch(Config.services.user.searchByField, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n });\n\n return response.json();\n };\n\n // send verification SMS to user\n sendSMS = async (user_id, sms_type) => {\n const url = `${Config.services.user.sendSMS.replace(':user_id', user_id)}?sms_type=${sms_type}`\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n }\n })\n return response.json()\n }\n\n // send verification Email to user\n sendEmail = async (user_id) => {\n const response = await fetch(Config.services.user.sendEmail.replace(':user_id', user_id), {\n method: 'GET',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n }\n })\n return response.json()\n }\n\n // send SMS to user\n verifySMS = async (params) => {\n const response = await fetch(Config.services.user.verifySMS, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n })\n return response.json()\n }\n\n // updates an iWyze client\n updateUserOnVerifyAccount = async (userId, params) => {\n const response = await fetch(\n Config.services.user.updateUserOnVerifyAccount.replace(':user_id', userId),\n {\n method: 'PUT',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n }\n )\n return response.json()\n }\n\n // search for a vehicle make\n searchMake = async (make) => {\n const url = Config.services.vehicle.searchMake.replace('{query}', make);\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n });\n\n return response.json();\n };\n\n // search for a vehicle model by make and query string\n searchModel = async (params) => {\n const { make, query, year } = params;\n const url = Config.services.vehicle.searchModel\n .replace('{make}', make)\n .replace('{query}', query)\n .replace('{year}', year);\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n });\n\n return response.json();\n };\n\n //search for a vehicle mmcode by query string\n searchMmCode = async (params) => {\n const { query, year } = params;\n const url = Config.services.vehicle.searchMMcode\n .replace('{query}', query)\n .replace('{year}', year);\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n });\n\n return response.json();\n };\n\n // get all of a user's vehicles\n getDealershipVehicles = async (params = {}) => {\n const queryStr = querystring(params);\n const url = Config.services.vehicle.getAll.replace(':user_id', params.user_id);\n\n const response = await fetch(`${url}?${queryStr}`, {\n method: 'GET',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n });\n\n return await response.json();\n };\n\n // get all of a user's vehicles\n getVehicles = async (params = {}) => {\n try {\n const queryStr = querystring(params);\n const user_id = await Helpers.getAuthUserId();\n if (!user_id) return { success: false }\n const url = Config.services.vehicle.getAll.replace(':user_id', user_id);\n\n const response = await fetch(`${url}?${queryStr}`, {\n method: 'GET',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n });\n\n return await response.json();\n } catch (err) {\n console.log('Motor Service: getVehicles catch(err)', err.message)\n return {\n success: false,\n error: {\n message: err.message || 'Something went wrong when fetching your vehicles',\n }\n }\n }\n };\n\n // get a vehicle's information from TransUnion using its registration number\n getByReg = async (reg_no, params = {}) =>\n new Promise(async (resolve, reject) => {\n const authHeader = this.generateAuthHeader();\n const controller = new AbortController();\n const signal = controller.signal;\n const user_id = await Helpers.getAuthUserId();\n Object.assign(params, { user_id })\n\n setTimeout(() => {\n reject({ message: 'Timed out during request' });\n controller.abort();\n }, 15000); // 15 sec\n\n const url = Config.services.vehicle.getByReg.replace(':reg_no', reg_no)\n fetch(url, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: authHeader,\n },\n signal,\n body: JSON.stringify(params),\n })\n .then((response) => {\n response.ok ? resolve(response) : reject(response);\n })\n .catch((err) => {\n reject({ message: 'Timed out during request' });\n });\n })\n .then(function (response) {\n // Request success and no timeout\n return response.json();\n })\n .catch(function (err) {\n // Error: response error, request timeout or runtime error\n let errorObj;\n\n try {\n errorObj = err.json();\n } catch (error) {\n console.error('Error parsing JSON:', error); // Log the error and avoid syntax errors\n }\n\n return errorObj;\n });\n\n // find a vehicle in the iWyze collection using its mmcode and year\n getByMmCode = async (params) => {\n const { mmcode, year } = params;\n\n const response = await fetch(\n Config.services.vehicle.getByMmCode\n .replace(':mmcode', mmcode)\n .replace(':year', year),\n {\n method: 'GET',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n }\n );\n\n return await response.json();\n };\n\n // create an iWyze user vehicle\n createVehicle = async (params) => {\n const response = await fetch(Config.services.vehicle.create, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n });\n\n return response.json();\n };\n\n // create an iWyze user vehicle\n deleteVehicle = async (params) => {\n const response = await fetch(Config.services.vehicle.deleteVehicle, {\n method: 'DELETE',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n });\n\n return response.json();\n };\n\n // get riskscape place\n getRiskscapePlace = async (coords) => {\n const response = await fetch(\n WTF3.LOOKUP.ADDRESS_LATLNG.replace(':lat', coords.lat).replace(\n ':lng',\n coords.lng\n ),\n {\n method: 'GET',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n }\n );\n\n return response.json();\n };\n\n searchAddress = async (address) => {\n const userId = await Helpers.getAuthUserId()\n const url = `${WTF3.LOOKUP.ADDRESS_AUTOCOMPLETE.replace(':query', address)}&user_id=${userId}`\n try {\n const response = await fetch(\n url,\n {\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n }\n );\n\n const text = await response.text();\n const json = JSON.parse(text);\n return json;\n } catch (err) {\n console.log('Motor Service: searchAddress catch(err)', err)\n\n return {\n success: false,\n error: {\n message: 'Something went wrong when searching for your address',\n },\n }\n }\n };\n\n searchCompleteAddress = async (address) => {\n try {\n const userId = await Helpers.getAuthUserId()\n const response = await fetch(WTF3.LOOKUP.ADDRESS_AUTOCOMPLETE_FIELDS,\n {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify({\n ...address,\n user_id: userId,\n }),\n }\n );\n\n const text = await response.text();\n const json = JSON.parse(text);\n return json;\n } catch (err) {\n console.log('Motor Service: searchCompleteAddress catch(err)', err)\n\n return {\n success: false,\n error: {\n message: 'Something went wrong when searching for your address',\n },\n }\n }\n };\n\n searchGoogleAddress = async (address, type) => {\n const response = await fetch(\n Config.services.person.getGoogleAutocomplete\n .replace(':address', address)\n .replace(':type', type),\n {\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n }\n );\n\n const text = await response.text();\n const json = JSON.parse(text);\n\n return json;\n };\n\n getPlace = async (placeId) => {\n const response = await fetch(\n Config.services.person.getGooglePlace.replace(':placeId', placeId),\n {\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n }\n );\n\n return response.json();\n };\n\n // parse a Google address\n parseGoogleAddress = (address) => {\n const { address_components } = address;\n let suburb, street, number, coords, province, postalCode;\n\n /*\n zero down on suburb accuracy in this order:\n - sublocality_level_1\n - sublocality_levaddress\n - sublocality\n - locality\n */\n address_components.forEach((component) => {\n if (!suburb && component.types.includes('sublocality_level_1')) {\n suburb = component.long_name;\n }\n\n if (!suburb && component.types.includes('sublocality_level_2')) {\n suburb = component.long_name;\n }\n\n if (!suburb && component.types.includes('sublocality')) {\n suburb = component.long_name;\n }\n\n if (!suburb && component.types.includes('locality')) {\n suburb = component.long_name;\n }\n\n if (!postalCode && component.types.includes('postal_code')) {\n postalCode = component.long_name;\n }\n\n // province\n if (\n !province &&\n component.types.includes('administrative_area_level_1')\n ) {\n province = component.long_name;\n }\n\n // street number\n if (component.types.includes('street_number')) {\n number = component.long_name;\n }\n\n // street name\n if (component.types.includes('route')) {\n street = component.long_name;\n }\n });\n\n coords = address.geometry.location;\n\n if (!street) {\n return {\n success: false,\n error: {\n message: 'Please specify an address with a valid street',\n },\n };\n }\n\n if (!province) {\n return {\n success: false,\n error: {\n message: 'Please specify an address with a valid province',\n },\n };\n }\n\n if (!coords || !suburb) {\n return {\n success: false,\n error: {\n message: 'Please specify a valid suburb',\n },\n };\n }\n\n if (!postalCode) {\n return {\n success: false,\n error: {\n message:\n 'The address specified does not seem to have a postal code associated to it. Please be sure to specify an exact street address.',\n },\n };\n }\n\n return {\n success: true,\n data: {\n street,\n number,\n suburb,\n coords,\n province,\n postal_code: postalCode,\n },\n };\n };\n\n // get an array of premiums for the vehicle\n getPremiums = async function (params, commit = false, sasria = true) {\n const user_id = await Helpers.getAuthUserId();\n\n return new Promise((resolve, reject) => {\n const authHeader = this.generateAuthHeader();\n\n const url = WTF3.QUOTE.UPSERT.replace(':user_id', user_id)\n .replace(':commit', commit)\n .replace(':sasria', sasria);\n\n fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: authHeader,\n },\n body: JSON.stringify(params),\n })\n .then((response) => {\n response.ok ? resolve(response) : reject(response);\n })\n .catch((err) => {\n console.log('[getPremiumsService] Get Premiums error:', err)\n setTimeout(() => window.location.reload(), Config.timeLimit.getExcesses)\n })\n })\n .then(function (response) {\n // Request success and no timeout\n return response.json();\n })\n .catch(function (err) {\n // Error: response error, request timeout or runtime error\n let errorObj;\n console.log('- ', err);\n\n try {\n errorObj = err.json();\n } catch (e) {\n console.log(e);\n }\n\n return errorObj;\n });\n };\n\n getBanks = async () => {\n const response = await fetch(Config.services.vehicle.getBanks, {\n method: 'GET',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n });\n\n return response.json();\n };\n\n getBranches = async (bank) => {\n const url = `${Config.services.vehicle.getBranches}?bank=${bank}`;\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n });\n\n return response.json();\n };\n\n // retrieves a persons information from TransUnion\n getITCPerson = async (id, personType) =>\n new Promise(async (resolve, reject) => {\n const authHeader = this.generateAuthHeader();\n const controller = new AbortController();\n const signal = controller.signal;\n const userId = await Helpers.getAuthUserId();\n\n setTimeout(() => {\n reject({ message: 'Request timed out' });\n controller.abort();\n }, 15000);\n\n const url = WTF3.CLIENT.ITC.replace(':za_id', id)\n .replace(':personType', personType)\n .replace(':user_id', userId);\n\n fetch(url, {\n headers: {\n 'Content-Type': 'application/json',\n Authorization: authHeader,\n },\n signal,\n })\n .then((response) => {\n response.ok ? resolve(response) : reject(response);\n })\n .catch((err) => {\n console.log('[personService] ITC Person error:', err);\n });\n })\n .then(function (response) {\n // Request success and no timeout\n return response.json();\n })\n .catch(function (err) {\n // console.log(err)\n // Error: response error, request timeout or runtime error\n let errorObj;\n\n try {\n errorObj = err.json();\n } catch (err) { }\n\n return errorObj;\n });\n\n // fetch an iWyze person\n getIWYZEPerson = async (id) => {\n const userId = await Helpers.getAuthUserId();\n const response = await fetch(\n Config.services.person.get.replace(\n ':id',\n id && id !== null ? id : userId\n ),\n {\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n }\n );\n\n return response.json();\n };\n\n // fetch an iWyze party person added by user\n getIWYZEAddedPerson = async (id, type = 'REGULAR_DRIVER') => {\n const userId = await Helpers.getAuthUserId();\n\n const url = Config.services.person.getAddedPerson\n .replace(':user_id', id && id !== null ? id : userId)\n .replace(':type', type);\n\n const response = await fetch(url, {\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n });\n\n return response.json();\n };\n\n createIWYZEPerson = async (params) => {\n try {\n const response = await fetch(Config.services.person.createIWYZEPerson, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n });\n\n return response.json();\n } catch (err) {\n console.error(err)\n let errorObj\n\n try {\n errorObj = error.json()\n } catch (err) { }\n return errorObj\n }\n };\n\n updateVehicleFinanceDetails = async (params) => {\n const response = await fetch(\n Config.services.vehicle.updateVehicleFinanceDetails.replace(\n ':vehicle_id',\n params.vehicle_id\n ),\n {\n method: 'PUT',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n }\n );\n\n return response.json();\n };\n\n addBankDetailsToQuote = async (params) => {\n const userId = await Helpers.getAuthUserId();\n\n const response = await fetch(\n WTF3.QUOTE.ADD_BANK_DETAILS_TO_QUOTE.replace(':user_id', userId),\n {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n }\n );\n\n return response.json();\n };\n\n addAdditionalVehicleToPolicy = async (params) => {\n const userId = await Helpers.getAuthUserId();\n\n const response = await fetch(Config.services.motorPolicy.create, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n });\n\n return response.json();\n };\n\n createPolicy = async (params) => {\n const userId = await Helpers.getAuthUserId();\n\n const response = await fetch(\n WTF3.QUOTE.CREATE_POLICY.replace(':user_id', userId),\n {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n }\n );\n\n return response.json();\n };\n\n getProofOfCover = async (params) => {\n const response = await fetch(Config.services.vehicle.getProofOfCover, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n });\n return response.json();\n };\n\n getConfig = async () => {\n const response = await fetch(Config.services.vehicle.getConfig, {\n method: 'GET',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n });\n\n return response.json();\n };\n\n getTermsAndConditions = async () => {\n const response = await fetch(WTF3.LOOKUP.QUOTE_TCS, {\n method: 'GET',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n });\n return response.json();\n };\n\n checkHighRiskVehicle = async (mmcode, year) => {\n const url = WTF3.LOOKUP.HIGH_RISK_VEHICLE.replace(\n ':mmcode',\n mmcode\n ).replace(':year', year);\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n });\n\n return response.json();\n };\n\n updateClientDeclarations = async (params) => {\n const userId = await Helpers.getAuthUserId();\n const url = WTF3.CLIENT.UPDATE_DECLARATIONS.replace(':user_id', userId);\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n });\n\n return response.json();\n };\n\n // get user excesses\n getExcesses = async () => {\n try {\n const userId = await Helpers.getAuthUserId();\n\n const url = WTF3.LOOKUP.EXCESSES.replace(':user_id', userId);\n\n const response = await fetch(url, {\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n });\n\n return response.json();\n }\n catch (error) {\n return {\n success: false,\n error\n }\n }\n };\n\n //\n removeVehicleFromQuote = async (vehicleId) => {\n const userId = await Helpers.getAuthUserId()\n\n if (!userId) {\n return {\n success: false,\n error: { message: 'No user is currently logged in.' },\n };\n }\n\n try {\n const response = await fetch(\n WTF3.QUOTE.REMOVE_VEHICLE\n .replace(':userId', userId)\n .replace(':vehicleId', vehicleId),\n {\n method: 'DELETE',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n }\n );\n return await response.json();\n } catch (error) {\n console.log('removeVehicleFromQuote.createPolicy catch(err)', error)\n\n return {\n success: false,\n error,\n };\n }\n }\n\n // remove object from quote\n removeObjectFromQuote = async (objectNo) => {\n const userId = await Helpers.getAuthUserId();\n\n if (!userId) {\n return {\n success: false,\n error: { message: 'No user is currently logged in.' },\n };\n }\n\n try {\n const response = await fetch(\n WTF3.QUOTE.REMOVE_OBJECT.replace(':user_id', userId).replace(\n ':object_no',\n objectNo\n ),\n {\n method: 'DELETE',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n }\n );\n return await response.json();\n } catch (error) {\n console.log('removeObjectFromQuote.createPolicy catch(err)', error);\n\n return {\n success: false,\n error,\n }\n }\n }\n\n sendIntercomTag = async (intercomTag) => {\n const user_id = await Helpers.getAuthUserId();\n const params = {\n user_id,\n intercomTags: intercomTag,\n };\n\n const response = await fetch(Config.services.vehicle.sendIntercomTags, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n })\n\n return response.json()\n };\n\n sendIntercomEvent = async (eventName, metadata = {}) => {\n const user_id = await Helpers.getAuthUserId();\n const params = {\n user_id,\n eventName,\n metadata,\n };\n\n const response = await fetch(Config.services.vehicle.sendIntercomEvent, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n });\n\n return response.json()\n };\n\n syncPolicy = async (user_id, policyNumber) => {\n if (user_id) {\n let url = Config.services.motorPolicy.sync.replace(':user_id', user_id)\n\n if (policyNumber) {\n url = `${url}?force=${policyNumber}`\n }\n\n try {\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n });\n\n return response.json()\n\n } catch (err) {\n console.log('[motorPolicyService] Sync Policy error:', err)\n return {\n success: false,\n error: {\n message: 'Unable to sync motor policy.',\n }\n }\n }\n }\n }\n\n // Generate verification code for agent\n generateAgentVerificationCode = async (agent_id) => {\n try {\n const url = Config.services.agent.generateAgentVerificationCode.replace(':agent_id', agent_id)\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n }\n });\n\n return response.json();\n } catch (err) {\n console.error('generateAgentVerificationCode error:', err);\n return {\n success: false,\n error: {\n message: 'Unable to generate verification code.',\n }\n };\n }\n }\n\n // Verify agent code\n verifyAgentCode = async (code, agent_id) => {\n try {\n const url = Config.services.agent.verifyAgentCode\n\n const params = {\n agent_id,\n code\n }\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params)\n });\n\n return response.json();\n } catch (err) {\n console.error('[motorService] verifyAgentCode error:', err);\n return {\n success: false,\n error: {\n message: 'Unable to verify code.',\n }\n };\n }\n }\n\n // get sales agent\n retrieveSalesAgent = async (params) => {\n const response = await fetch(Config.services.user.retrieveSalesAgent, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n })\n\n return response.json()\n };\n\n updateVin = async (vinNo, vehicleId) => {\n const user_id = await Helpers.getAuthUserId();\n\n const params = {\n user_id,\n vehicleId,\n vinNo,\n };\n\n const response = await fetch(Config.services.vehicle.updateVin, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n });\n\n return response.json();\n }\n\n // log Google Conversion\n logGoogleConversion = async (params) => {\n const response = await fetch(Config.services.analytics.googleConversion, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n })\n\n return response.json()\n }\n\n verifyEmail = async (userId, verifyEmailAddress) => {\n const url = Config.services.user.verifyEmail.replace(':user_id', userId) + `?v=${verifyEmailAddress}`\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n })\n return response.json()\n }\n\n recollectionsReschedule = async (params) => {\n const response = await fetch(Config.services.recollections.schedule, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n })\n\n return await response.json()\n }\n\n // search for finance house\n searchFinanceHouse = async (financeHouse) => {\n const url = Config.services.vehicle.searchFinanceHouse.replace('{query}', financeHouse)\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n })\n\n return await response.json()\n }\n\n getFinanceHouseName = async (financeHouseCode) => {\n const url = Config.services.vehicle.getFinanceHouseName.replace('{code}', financeHouseCode)\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n })\n\n return await response.json()\n }\n}\n\nconst MotorService = new _Service();\nexport { MotorService };\n"],"sourceRoot":""}