let responseType = 'canMakePayment-true'; self.addEventListener('canmakepayment', event => { if (event.methodData) { const msg = 'Expected no method data.'; event.respondWith(Promise.reject(new Error(msg))); return; } if (event.modifiers) { const msg = 'Expected no modifiers'; event.respondWith(Promise.reject(new Error(msg))); return; } if (event.topOrigin) { const msg = `Unexpected topOrigin.`; event.respondWith(Promise.reject(new Error(msg))); return; } if (event.paymentRequestOrigin) { const msg = `Unexpected iframe origin.`; event.respondWith(Promise.reject(new Error(msg))); return; } switch (responseType) { case 'canMakePayment-true': event.respondWith(true); break; case 'canMakePayment-false': event.respondWith(false); break; case 'canMakePayment-promise-true': event.respondWith(Promise.resolve(true)); break; case 'canMakePayment-promise-false': event.respondWith(Promise.resolve(false)); break; case 'canMakePayment-custom-error': event.respondWith(Promise.reject(new Error('Custom error'))); break; default: const msg = `Unrecognized payment method name "${methodName}".`; event.respondWith(Promise.reject(new Error(msg))); break; } }); self.addEventListener('paymentrequest', event => { responseType = event.methodData[0].data.responseType; event.respondWith({ methodName: event.methodData[0].supportedMethods, details: {status: 'success'}, }); });