import { MiniAppAPI } from '../../model/miniAppApi'; export default function jsBridge() { const createInjectedFuncStr = (miniAppApis: any): string => { let temp = '{'; for (let nameOrNameSpace in miniAppApis) { if (typeof miniAppApis[nameOrNameSpace] === 'object') { return (temp += ` ${nameOrNameSpace}: ${createInjectedFuncStr( miniAppApis[nameOrNameSpace] )}, }`); } if (typeof miniAppApis[nameOrNameSpace] === 'string') { temp += ` ${nameOrNameSpace}: function(params = {}) { const randomId = randomPPCBPostfix(); let promiseResolve; let promiseReject; const promise = new Promise((resolve, reject) => { promiseResolve = resolve; promiseReject = reject; }); if(params.success) { params.successCB = 's' + randomId; ppCallbackMap.set(params.successCB, params.success); } if(params.fail) { params.failCB = 'f' + randomId; ppCallbackMap.set(params.failCB, params.fail); } if(params.complete) { params.completeCB = 'c' + randomId; ppCallbackMap.set(params.completeCB, params.complete); } params.originId = document.getElementById('paypaySimulatorIframeID').value; var data = { event: '${miniAppApis[nameOrNameSpace]}', payload: params }; sendPPInjMessage(data); return promise; },`; } } return ` ${temp} }`; }; const libString = ` (function(){ let ppCallbackMap = new Map(); function sendPPInjMessage(data) { parent.postMessage(JSON.stringify(data),'*'); } function randomPPCBPostfix() { return Math.random().toString(36).substring(5) + '-' + Date.now(); } window.PayPayJsBridge = window.pp = ${createInjectedFuncStr(MiniAppAPI)}; window.addEventListener("message", function(event) { const data = JSON.parse(event.data); var ppFunctionCB = ppCallbackMap.get(data.event); ppFunctionCB && ppFunctionCB(data.payload); }); window.addEventListener('load', function() { sendPPInjMessage({ event: 'pageDidLoad' }); }); })() `; return libString; }