84 lines
2.5 KiB
JavaScript
84 lines
2.5 KiB
JavaScript
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'},
|
|
});
|
|
});
|