Source code
Revision control
Copy as Markdown
Other Tools
self.addEventListener('canmakepayment', event => {
event.respondWith(true);
});
self.addEventListener('paymentrequest', event => {
const expectedId = 'test-payment-request-identifier';
if (event.paymentRequestId !== expectedId) {
const msg = `Expected payment request identifier "${expectedId}", but got "${
event.paymentRequestId
}"`;
event.respondWith(Promise.reject(new Error(msg)));
return;
}
if (event.methodData.length !== 1) {
const msg = `Expected one method data, but got ${
event.methodData.length
} instead`;
event.respondWith(Promise.reject(new Error(msg)));
return;
}
const methodData = event.methodData[0];
const expectedMethodNamePrefix = 'http';
if (!methodData.supportedMethods.startsWith(expectedMethodNamePrefix)) {
const msg = `Expected payment method name "${methodData.supportedMethods}" to start with ${expectedMethodNamePrefix}"`;
event.respondWith(Promise.reject(new Error(msg)));
return;
}
const expectedMethodNameSuffix = '/payment-handler/payment-request-event-manual-manifest.json';
if (!methodData.supportedMethods.endsWith(expectedMethodNameSuffix)) {
const msg = `Expected payment method name "${methodData.supportedMethods}" to end with ${expectedMethodNameSuffix}"`;
event.respondWith(Promise.reject(new Error(msg)));
return;
}
if (methodData.data.supportedNetworks) {
const msg =
'Expected no supported networks in payment method specific data';
event.respondWith(Promise.reject(new Error(msg)));
return;
}
if (methodData.displayItems) {
const msg = 'Expected no display items';
event.respondWith(Promise.reject(new Error(msg)));
return;
}
const total = event.total;
if (!total) {
const msg = 'Expected total';
event.respondWith(Promise.reject(new Error(msg)));
return;
}
if (total.label) {
const msg = 'Expected no total label';
event.respondWith(Promise.reject(new Error(msg)));
return;
}
const expectedCurrency = 'USD';
if (total.currency !== expectedCurrency) {
const msg = `Expected currency "${expectedCurrency}", but got "${
total.currency
}"`;
event.respondWith(Promise.reject(new Error(msg)));
return;
}
const expectedValue = '0.01';
if (total.value !== expectedValue) {
const msg = `Expected value "${expectedValue}", but got "${total.value}"`;
event.respondWith(Promise.reject(new Error(msg)));
return;
}
event.respondWith({
methodName: methodData.supportedMethods,
details: {status: 'success'},
});
});