Hex Artifact Content
Not logged in

Artifact 22ecc4295870883ebce089da088a402ac2ad1afb:


0000: 2f 2a 20 67 6c 6f 62 61 6c 73 20 73 65 6c 66 2c  /* globals self,
0010: 20 63 6c 69 65 6e 74 73 20 2a 2f 0a 0a 6c 65 74   clients */..let
0020: 20 70 61 79 6d 65 6e 74 52 65 71 75 65 73 74 45   paymentRequestE
0030: 76 65 6e 74 0a 6c 65 74 20 70 61 79 6d 65 6e 74  vent.let payment
0040: 52 65 71 75 65 73 74 52 65 73 6f 6c 76 65 72 0a  RequestResolver.
0050: 0a 73 65 6c 66 2e 61 64 64 45 76 65 6e 74 4c 69  .self.addEventLi
0060: 73 74 65 6e 65 72 28 27 70 61 79 6d 65 6e 74 72  stener('paymentr
0070: 65 71 75 65 73 74 27 2c 20 65 20 3d 3e 20 7b 0a  equest', e => {.
0080: 20 20 70 61 79 6d 65 6e 74 52 65 71 75 65 73 74    paymentRequest
0090: 45 76 65 6e 74 20 3d 20 65 0a 0a 20 20 70 61 79  Event = e..  pay
00a0: 6d 65 6e 74 52 65 71 75 65 73 74 52 65 73 6f 6c  mentRequestResol
00b0: 76 65 72 20 3d 20 6e 65 77 20 50 72 6f 6d 69 73  ver = new Promis
00c0: 65 52 65 73 6f 6c 76 65 72 28 29 0a 20 20 65 2e  eResolver().  e.
00d0: 72 65 73 70 6f 6e 64 57 69 74 68 28 70 61 79 6d  respondWith(paym
00e0: 65 6e 74 52 65 71 75 65 73 74 52 65 73 6f 6c 76  entRequestResolv
00f0: 65 72 2e 70 72 6f 6d 69 73 65 29 0a 0a 20 20 63  er.promise)..  c
0100: 6f 6e 73 74 20 69 64 65 6e 74 69 66 69 65 72 20  onst identifier 
0110: 3d 20 70 61 79 6d 65 6e 74 52 65 71 75 65 73 74  = paymentRequest
0120: 45 76 65 6e 74 2e 6d 65 74 68 6f 64 44 61 74 61  Event.methodData
0130: 5b 30 5d 2e 64 61 74 61 2e 69 64 65 6e 74 69 66  [0].data.identif
0140: 69 65 72 0a 20 20 63 6f 6e 73 74 20 61 6d 6f 75  ier.  const amou
0150: 6e 74 20 3d 20 70 61 79 6d 65 6e 74 52 65 71 75  nt = paymentRequ
0160: 65 73 74 45 76 65 6e 74 2e 74 6f 74 61 6c 2e 76  estEvent.total.v
0170: 61 6c 75 65 0a 0a 20 20 65 2e 6f 70 65 6e 57 69  alue..  e.openWi
0180: 6e 64 6f 77 28 60 68 74 74 70 73 3a 2f 2f 24 7b  ndow(`https://${
0190: 6c 6f 63 61 74 69 6f 6e 2e 68 6f 73 74 7d 2f 77  location.host}/w
01a0: 65 62 70 61 79 6d 65 6e 74 2f 24 7b 69 64 65 6e  ebpayment/${iden
01b0: 74 69 66 69 65 72 7d 2f 24 7b 61 6d 6f 75 6e 74  tifier}/${amount
01c0: 7d 60 29 0a 20 20 20 20 2e 63 61 74 63 68 28 65  }`).    .catch(e
01d0: 72 72 20 3d 3e 20 7b 0a 20 20 20 20 20 20 70 61  rr => {.      pa
01e0: 79 6d 65 6e 74 52 65 71 75 65 73 74 52 65 73 6f  ymentRequestReso
01f0: 6c 76 65 72 2e 72 65 6a 65 63 74 28 65 72 72 29  lver.reject(err)
0200: 0a 20 20 20 20 7d 29 0a 7d 29 0a 0a 73 65 6c 66  .    }).})..self
0210: 2e 61 64 64 45 76 65 6e 74 4c 69 73 74 65 6e 65  .addEventListene
0220: 72 28 27 6d 65 73 73 61 67 65 27 2c 20 65 20 3d  r('message', e =
0230: 3e 20 7b 0a 20 20 2f 2a 20 69 66 20 28 65 2e 64  > {.  /* if (e.d
0240: 61 74 61 20 3d 3d 3d 20 27 70 61 79 6d 65 6e 74  ata === 'payment
0250: 5f 61 70 70 5f 77 69 6e 64 6f 77 5f 72 65 61 64  _app_window_read
0260: 79 27 29 20 7b 0a 20 20 20 20 73 65 6e 64 50 61  y') {.    sendPa
0270: 79 6d 65 6e 74 52 65 71 75 65 73 74 28 29 0a 20  ymentRequest(). 
0280: 20 20 20 72 65 74 75 72 6e 0a 20 20 7d 20 2a 2f     return.  } */
0290: 0a 0a 20 20 69 66 20 28 65 2e 64 61 74 61 2e 6d  ..  if (e.data.m
02a0: 65 74 68 6f 64 4e 61 6d 65 29 20 7b 0a 20 20 20  ethodName) {.   
02b0: 20 70 61 79 6d 65 6e 74 52 65 71 75 65 73 74 52   paymentRequestR
02c0: 65 73 6f 6c 76 65 72 2e 72 65 73 6f 6c 76 65 28  esolver.resolve(
02d0: 65 2e 64 61 74 61 29 0a 20 20 7d 20 65 6c 73 65  e.data).  } else
02e0: 20 7b 0a 20 20 20 20 70 61 79 6d 65 6e 74 52 65   {.    paymentRe
02f0: 71 75 65 73 74 52 65 73 6f 6c 76 65 72 2e 72 65  questResolver.re
0300: 6a 65 63 74 28 65 2e 64 61 74 61 29 0a 20 20 7d  ject(e.data).  }
0310: 0a 7d 29 0a 0a 2f 2a 20 66 75 6e 63 74 69 6f 6e  .})../* function
0320: 20 73 65 6e 64 50 61 79 6d 65 6e 74 52 65 71 75   sendPaymentRequ
0330: 65 73 74 20 28 29 20 7b 0a 20 20 2f 2f 20 4e 6f  est () {.  // No
0340: 74 65 20 74 68 61 74 20 74 68 65 20 72 65 74 75  te that the retu
0350: 72 6e 65 64 20 77 69 6e 64 6f 77 5f 63 6c 69 65  rned window_clie
0360: 6e 74 20 66 72 6f 6d 20 6f 70 65 6e 57 69 6e 64  nt from openWind
0370: 6f 77 20 69 73 20 6e 6f 74 20 75 73 65 64 20 73  ow is not used s
0380: 69 6e 63 65 0a 20 20 2f 2f 20 69 74 20 6d 69 67  ince.  // it mig
0390: 68 74 20 62 65 20 63 68 61 6e 67 65 64 20 62 79  ht be changed by
03a0: 20 72 65 66 72 65 73 68 69 6e 67 20 74 68 65 20   refreshing the 
03b0: 6f 70 65 6e 65 64 20 70 61 67 65 2e 0a 20 20 2f  opened page..  /
03c0: 2f 20 52 65 66 65 72 20 74 6f 20 68 74 74 70 73  / Refer to https
03d0: 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72 67 2f 54 52  ://www.w3.org/TR
03e0: 2f 73 65 72 76 69 63 65 2d 77 6f 72 6b 65 72 73  /service-workers
03f0: 2d 31 2f 23 63 6c 69 65 6e 74 73 2d 67 65 74 61  -1/#clients-geta
0400: 6c 6c 0a 20 20 6c 65 74 20 6f 70 74 69 6f 6e 73  ll.  let options
0410: 20 3d 20 7b 0a 20 20 20 20 69 6e 63 6c 75 64 65   = {.    include
0420: 55 6e 63 6f 6e 74 72 6f 6c 6c 65 64 3a 20 66 61  Uncontrolled: fa
0430: 6c 73 65 2c 0a 20 20 20 20 74 79 70 65 3a 20 27  lse,.    type: '
0440: 77 69 6e 64 6f 77 27 0a 20 20 7d 0a 20 20 63 6c  window'.  }.  cl
0450: 69 65 6e 74 73 2e 6d 61 74 63 68 41 6c 6c 28 6f  ients.matchAll(o
0460: 70 74 69 6f 6e 73 29 2e 74 68 65 6e 28 63 6c 69  ptions).then(cli
0470: 65 6e 74 4c 69 73 74 20 3d 3e 20 7b 0a 20 20 20  entList => {.   
0480: 20 66 6f 72 20 28 6c 65 74 20 69 20 3d 20 30 3b   for (let i = 0;
0490: 20 69 20 3c 20 63 6c 69 65 6e 74 4c 69 73 74 2e   i < clientList.
04a0: 6c 65 6e 67 74 68 3b 20 69 2b 2b 29 20 7b 0a 20  length; i++) {. 
04b0: 20 20 20 20 20 2f 2f 20 4d 69 67 68 74 20 64 6f       // Might do
04c0: 20 6d 6f 72 65 20 63 6f 6d 6d 75 6e 69 63 61 74   more communicat
04d0: 69 6f 6e 73 20 6f 72 20 63 68 65 63 6b 73 20 74  ions or checks t
04e0: 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20  o make sure the 
04f0: 6d 65 73 73 61 67 65 20 69 73 0a 20 20 20 20 20  message is.     
0500: 20 2f 2f 20 70 6f 73 74 65 64 20 74 6f 20 74 68   // posted to th
0510: 65 20 63 6f 72 72 65 63 74 20 77 69 6e 64 6f 77  e correct window
0520: 20 6f 6e 6c 79 2e 0a 0a 20 20 20 20 20 20 2f 2f   only...      //
0530: 20 43 6f 70 79 20 74 68 65 20 72 65 6c 65 76 61   Copy the releva
0540: 6e 74 20 64 61 74 61 20 66 72 6f 6d 20 74 68 65  nt data from the
0550: 20 70 61 79 6d 65 6e 74 72 65 71 75 65 73 74 65   paymentrequeste
0560: 76 65 6e 74 20 74 6f 0a 20 20 20 20 20 20 2f 2f  vent to.      //
0570: 20 73 65 6e 64 20 74 6f 20 74 68 65 20 70 61 79   send to the pay
0580: 6d 65 6e 74 20 61 70 70 20 63 6f 6e 66 69 72 6d  ment app confirm
0590: 61 74 69 6f 6e 20 70 61 67 65 2e 0a 20 20 20 20  ation page..    
05a0: 20 20 2f 2f 20 4e 6f 74 65 20 74 68 61 74 20 74    // Note that t
05b0: 68 65 20 65 6e 74 69 72 65 20 50 61 79 6d 65 6e  he entire Paymen
05c0: 74 52 65 71 75 65 73 74 45 76 65 6e 74 20 63 61  tRequestEvent ca
05d0: 6e 20 6e 6f 74 20 62 65 20 70 61 73 73 65 64 20  n not be passed 
05e0: 74 68 72 6f 75 67 68 0a 20 20 20 20 20 20 2f 2f  through.      //
05f0: 20 70 6f 73 74 4d 65 73 73 61 67 65 20 64 69 72   postMessage dir
0600: 65 63 74 6c 79 20 73 69 6e 63 65 20 69 74 20 63  ectly since it c
0610: 61 6e 20 6e 6f 74 20 62 65 20 63 6c 6f 6e 65 64  an not be cloned
0620: 2e 0a 20 20 20 20 20 20 63 6c 69 65 6e 74 4c 69  ..      clientLi
0630: 73 74 5b 69 5d 2e 70 6f 73 74 4d 65 73 73 61 67  st[i].postMessag
0640: 65 28 70 61 79 6d 65 6e 74 52 65 71 75 65 73 74  e(paymentRequest
0650: 45 76 65 6e 74 2e 74 6f 74 61 6c 29 0a 20 20 20  Event.total).   
0660: 20 7d 0a 20 20 7d 29 0a 7d 20 2a 2f 0a 0a 66 75   }.  }).} */..fu
0670: 6e 63 74 69 6f 6e 20 50 72 6f 6d 69 73 65 52 65  nction PromiseRe
0680: 73 6f 6c 76 65 72 20 28 29 20 7b 0a 20 20 2f 2a  solver () {.  /*
0690: 2a 20 40 70 72 69 76 61 74 65 20 7b 66 75 6e 63  * @private {func
06a0: 74 69 6f 6e 28 54 3d 29 3a 20 76 6f 69 64 7d 20  tion(T=): void} 
06b0: 2a 2f 0a 20 20 74 68 69 73 2e 72 65 73 6f 6c 76  */.  this.resolv
06c0: 65 5f 0a 0a 20 20 2f 2a 2a 20 40 70 72 69 76 61  e_..  /** @priva
06d0: 74 65 20 7b 66 75 6e 63 74 69 6f 6e 28 2a 3d 29  te {function(*=)
06e0: 3a 20 76 6f 69 64 7d 20 2a 2f 0a 20 20 74 68 69  : void} */.  thi
06f0: 73 2e 72 65 6a 65 63 74 5f 0a 0a 20 20 2f 2a 2a  s.reject_..  /**
0700: 20 40 70 72 69 76 61 74 65 20 7b 21 50 72 6f 6d   @private {!Prom
0710: 69 73 65 3c 54 3e 7d 20 2a 2f 0a 20 20 74 68 69  ise<T>} */.  thi
0720: 73 2e 70 72 6f 6d 69 73 65 5f 20 3d 20 6e 65 77  s.promise_ = new
0730: 20 50 72 6f 6d 69 73 65 28 28 72 65 73 6f 6c 76   Promise((resolv
0740: 65 2c 20 72 65 6a 65 63 74 29 20 3d 3e 20 7b 0a  e, reject) => {.
0750: 20 20 20 20 74 68 69 73 2e 72 65 73 6f 6c 76 65      this.resolve
0760: 5f 20 3d 20 72 65 73 6f 6c 76 65 0a 20 20 20 20  _ = resolve.    
0770: 74 68 69 73 2e 72 65 6a 65 63 74 5f 20 3d 20 72  this.reject_ = r
0780: 65 6a 65 63 74 0a 20 20 7d 29 0a 7d 0a 0a 50 72  eject.  }).}..Pr
0790: 6f 6d 69 73 65 52 65 73 6f 6c 76 65 72 2e 70 72  omiseResolver.pr
07a0: 6f 74 6f 74 79 70 65 20 3d 20 7b 0a 20 20 2f 2a  ototype = {.  /*
07b0: 2a 20 40 72 65 74 75 72 6e 20 7b 21 50 72 6f 6d  * @return {!Prom
07c0: 69 73 65 3c 54 3e 7d 20 2a 2f 0a 20 20 67 65 74  ise<T>} */.  get
07d0: 20 70 72 6f 6d 69 73 65 20 28 29 20 7b 0a 20 20   promise () {.  
07e0: 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 70 72    return this.pr
07f0: 6f 6d 69 73 65 5f 0a 20 20 7d 2c 0a 0a 20 20 2f  omise_.  },..  /
0800: 2a 2a 20 40 72 65 74 75 72 6e 20 7b 66 75 6e 63  ** @return {func
0810: 74 69 6f 6e 28 54 3d 29 3a 20 76 6f 69 64 7d 20  tion(T=): void} 
0820: 2a 2f 0a 20 20 67 65 74 20 72 65 73 6f 6c 76 65  */.  get resolve
0830: 20 28 29 20 7b 0a 20 20 20 20 72 65 74 75 72 6e   () {.    return
0840: 20 74 68 69 73 2e 72 65 73 6f 6c 76 65 5f 0a 20   this.resolve_. 
0850: 20 7d 2c 0a 0a 20 20 2f 2a 2a 20 40 72 65 74 75   },..  /** @retu
0860: 72 6e 20 7b 66 75 6e 63 74 69 6f 6e 28 2a 3d 29  rn {function(*=)
0870: 3a 20 76 6f 69 64 7d 20 2a 2f 0a 20 20 67 65 74  : void} */.  get
0880: 20 72 65 6a 65 63 74 20 28 29 20 7b 0a 20 20 20   reject () {.   
0890: 20 72 65 74 75 72 6e 20 74 68 69 73 2e 72 65 6a   return this.rej
08a0: 65 63 74 5f 0a 20 20 7d 0a 7d 0a                 ect_.  }.}.