tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

app-simple.js (2585B)


      1 self.addEventListener('canmakepayment', event => {
      2  event.respondWith(true);
      3 });
      4 
      5 self.addEventListener('paymentrequest', event => {
      6  const expectedId = 'test-payment-request-identifier';
      7  if (event.paymentRequestId !== expectedId) {
      8    const msg = `Expected payment request identifier "${expectedId}", but got "${
      9      event.paymentRequestId
     10    }"`;
     11    event.respondWith(Promise.reject(new Error(msg)));
     12    return;
     13  }
     14 
     15  if (event.methodData.length !== 1) {
     16    const msg = `Expected one method data, but got ${
     17      event.methodData.length
     18    } instead`;
     19    event.respondWith(Promise.reject(new Error(msg)));
     20    return;
     21  }
     22 
     23  const methodData = event.methodData[0];
     24  const expectedMethodNamePrefix = 'http';
     25  if (!methodData.supportedMethods.startsWith(expectedMethodNamePrefix)) {
     26    const msg = `Expected payment method name "${methodData.supportedMethods}" to start with ${expectedMethodNamePrefix}"`;
     27    event.respondWith(Promise.reject(new Error(msg)));
     28    return;
     29  }
     30 
     31  const expectedMethodNameSuffix = '/payment-handler/payment-request-event-manual-manifest.json';
     32  if (!methodData.supportedMethods.endsWith(expectedMethodNameSuffix)) {
     33    const msg = `Expected payment method name "${methodData.supportedMethods}" to end with ${expectedMethodNameSuffix}"`;
     34    event.respondWith(Promise.reject(new Error(msg)));
     35    return;
     36  }
     37 
     38  if (methodData.data.supportedNetworks) {
     39    const msg =
     40      'Expected no supported networks in payment method specific data';
     41    event.respondWith(Promise.reject(new Error(msg)));
     42    return;
     43  }
     44 
     45  if (methodData.displayItems) {
     46    const msg = 'Expected no display items';
     47    event.respondWith(Promise.reject(new Error(msg)));
     48    return;
     49  }
     50 
     51  const total = event.total;
     52  if (!total) {
     53    const msg = 'Expected total';
     54    event.respondWith(Promise.reject(new Error(msg)));
     55    return;
     56  }
     57 
     58  if (total.label) {
     59    const msg = 'Expected no total label';
     60    event.respondWith(Promise.reject(new Error(msg)));
     61    return;
     62  }
     63 
     64  const expectedCurrency = 'USD';
     65  if (total.currency !== expectedCurrency) {
     66    const msg = `Expected currency "${expectedCurrency}", but got "${
     67      total.currency
     68    }"`;
     69    event.respondWith(Promise.reject(new Error(msg)));
     70    return;
     71  }
     72 
     73  const expectedValue = '0.01';
     74  if (total.value !== expectedValue) {
     75    const msg = `Expected value "${expectedValue}", but got "${total.value}"`;
     76    event.respondWith(Promise.reject(new Error(msg)));
     77    return;
     78  }
     79 
     80  event.respondWith({
     81    methodName: methodData.supportedMethods,
     82    details: {status: 'success'},
     83  });
     84 });