import { Platform } from 'react-native'; import RNLocation from 'react-native-location'; import EP from './endpoints.js'; import DeviceInfo from 'react-native-device-info'; export default async function API(endpoint, method, headers, params, body, onSuccess, onError) { let deviceID = DeviceInfo.getDeviceId(); let versionNumb = DeviceInfo.getVersion(); let OS = Platform.OS; let appBundleID = OS === 'android' ? "com.project.yondu.unioilloyaltyapp" : "com.rnunioilloyaltyapp"; let versionRelease = DeviceInfo.getBuildNumber(); let location = await RNLocation.getLatestLocation(latestLocation => latestLocation); try { if(method == "post") { var Head = { 'Accept': 'application/json', 'Content-Type': 'application/json', 'x-p97-tenantid': '8ba3cd89-74be-4a7a-91a5-5eb59a2040b8', 'x-p97-apikey': EP.post_pay_api_key, 'x-p97-latitude': location.latitude, 'x-p97-longitude': location.longitude, 'x-p97-deviceid': deviceID, 'x-p97-appversionnumber': versionNumb, 'x-p97-appbundleid': appBundleID, 'x-p97-os': OS, 'x-p97-clientosversion': versionRelease } let url = endpoint.includes(":") ? endpoint : EP[endpoint]; if(headers.token != undefined) { Head = {...Head, 'Authorization': `Bearer ${headers.token}`} } if(headers.language != undefined) { Head = {...Head, 'Accept-Language': headers.language} } let response = await fetch(url, { method: method, body: body?._parts ? body : JSON.stringify(body), headers: Head, params: params }); let json = await response.json(); onSuccess(json) } else if(method == "get") { let url; var Head = { 'Accept': 'application/json', 'Content-Type': 'application/json', 'x-p97-tenantid': '8ba3cd89-74be-4a7a-91a5-5eb59a2040b8', 'x-p97-apikey': EP.post_pay_api_key, 'x-p97-latitude': location.latitude, 'x-p97-longitude': location.longitude, 'x-p97-deviceid': deviceID, 'x-p97-appversionnumber': versionNumb, 'x-p97-appbundleid': appBundleID, 'x-p97-os': OS, 'x-p97-clientosversion': versionRelease } let paramsItem = Object.entries(params).map(([key, value]) => `${key}=${value}`) if(endpoint.includes("/")) { const newURL = endpoint.split("/"); url = newURL[0].includes(":") ? newURL[0] : EP[newURL[0]]; url = `${url}/${newURL[1]}`; } else { url = paramsItem.length > 1 ? `${EP[endpoint]}?${paramsItem.join('&').toString()}` : `${EP[endpoint]}/${Object.entries(params).map(([key, value]) => value).join('').toString()}` } if(headers.token != undefined) { Head = {...Head, 'Authorization': `Bearer ${headers.token}`} } if(headers.language != undefined) { Head = {...Head, 'Accept-Language': headers.language} } console.log(url, Head) let response = await fetch(endpoint.includes(":") ? endpoint : url, { method: method, headers: Head }); let json = await response.json(); onSuccess(json) } else if(method == "delete") { let url = !params.noID ? (EP[endpoint] + "?" + params) : EP[endpoint] + "/" + params.value console.warn('URL delete', url); if(headers.Authorization){ let response = await fetch(endpoint.includes(":") ? endpoint : url, { method: method, headers: new Headers({ 'Accept': 'application/json', 'Authorization': `${headers.Authorization || ''}` }) }); let json = await response.json(); onSuccess(json) } else { let response = await fetch(endpoint.includes(":") ? endpoint : url); console.warn('Response', JSON.stringify(res)) let json = await response.json(); onSuccess(json) } } } catch (error) { onError(error) } }