@dintero/checkout-web-sdk 0.5.10 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">88.24% </span>
26
+ <span class="strong">81.82% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>30/34</span>
28
+ <span class='fraction'>45/55</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">70.83% </span>
33
+ <span class="strong">55.88% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>17/24</span>
35
+ <span class='fraction'>19/34</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">75% </span>
40
+ <span class="strong">61.54% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>6/8</span>
42
+ <span class='fraction'>8/13</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">86.21% </span>
47
+ <span class="strong">77.78% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>25/29</span>
49
+ <span class='fraction'>35/45</span>
50
50
  </div>
51
51
 
52
52
 
@@ -178,7 +178,71 @@
178
178
  <a name='L119'></a><a href='#L119'>119</a>
179
179
  <a name='L120'></a><a href='#L120'>120</a>
180
180
  <a name='L121'></a><a href='#L121'>121</a>
181
- <a name='L122'></a><a href='#L122'>122</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
181
+ <a name='L122'></a><a href='#L122'>122</a>
182
+ <a name='L123'></a><a href='#L123'>123</a>
183
+ <a name='L124'></a><a href='#L124'>124</a>
184
+ <a name='L125'></a><a href='#L125'>125</a>
185
+ <a name='L126'></a><a href='#L126'>126</a>
186
+ <a name='L127'></a><a href='#L127'>127</a>
187
+ <a name='L128'></a><a href='#L128'>128</a>
188
+ <a name='L129'></a><a href='#L129'>129</a>
189
+ <a name='L130'></a><a href='#L130'>130</a>
190
+ <a name='L131'></a><a href='#L131'>131</a>
191
+ <a name='L132'></a><a href='#L132'>132</a>
192
+ <a name='L133'></a><a href='#L133'>133</a>
193
+ <a name='L134'></a><a href='#L134'>134</a>
194
+ <a name='L135'></a><a href='#L135'>135</a>
195
+ <a name='L136'></a><a href='#L136'>136</a>
196
+ <a name='L137'></a><a href='#L137'>137</a>
197
+ <a name='L138'></a><a href='#L138'>138</a>
198
+ <a name='L139'></a><a href='#L139'>139</a>
199
+ <a name='L140'></a><a href='#L140'>140</a>
200
+ <a name='L141'></a><a href='#L141'>141</a>
201
+ <a name='L142'></a><a href='#L142'>142</a>
202
+ <a name='L143'></a><a href='#L143'>143</a>
203
+ <a name='L144'></a><a href='#L144'>144</a>
204
+ <a name='L145'></a><a href='#L145'>145</a>
205
+ <a name='L146'></a><a href='#L146'>146</a>
206
+ <a name='L147'></a><a href='#L147'>147</a>
207
+ <a name='L148'></a><a href='#L148'>148</a>
208
+ <a name='L149'></a><a href='#L149'>149</a>
209
+ <a name='L150'></a><a href='#L150'>150</a>
210
+ <a name='L151'></a><a href='#L151'>151</a>
211
+ <a name='L152'></a><a href='#L152'>152</a>
212
+ <a name='L153'></a><a href='#L153'>153</a>
213
+ <a name='L154'></a><a href='#L154'>154</a>
214
+ <a name='L155'></a><a href='#L155'>155</a>
215
+ <a name='L156'></a><a href='#L156'>156</a>
216
+ <a name='L157'></a><a href='#L157'>157</a>
217
+ <a name='L158'></a><a href='#L158'>158</a>
218
+ <a name='L159'></a><a href='#L159'>159</a>
219
+ <a name='L160'></a><a href='#L160'>160</a>
220
+ <a name='L161'></a><a href='#L161'>161</a>
221
+ <a name='L162'></a><a href='#L162'>162</a>
222
+ <a name='L163'></a><a href='#L163'>163</a>
223
+ <a name='L164'></a><a href='#L164'>164</a>
224
+ <a name='L165'></a><a href='#L165'>165</a>
225
+ <a name='L166'></a><a href='#L166'>166</a>
226
+ <a name='L167'></a><a href='#L167'>167</a>
227
+ <a name='L168'></a><a href='#L168'>168</a>
228
+ <a name='L169'></a><a href='#L169'>169</a>
229
+ <a name='L170'></a><a href='#L170'>170</a>
230
+ <a name='L171'></a><a href='#L171'>171</a>
231
+ <a name='L172'></a><a href='#L172'>172</a>
232
+ <a name='L173'></a><a href='#L173'>173</a>
233
+ <a name='L174'></a><a href='#L174'>174</a>
234
+ <a name='L175'></a><a href='#L175'>175</a>
235
+ <a name='L176'></a><a href='#L176'>176</a>
236
+ <a name='L177'></a><a href='#L177'>177</a>
237
+ <a name='L178'></a><a href='#L178'>178</a>
238
+ <a name='L179'></a><a href='#L179'>179</a>
239
+ <a name='L180'></a><a href='#L180'>180</a>
240
+ <a name='L181'></a><a href='#L181'>181</a>
241
+ <a name='L182'></a><a href='#L182'>182</a>
242
+ <a name='L183'></a><a href='#L183'>183</a>
243
+ <a name='L184'></a><a href='#L184'>184</a>
244
+ <a name='L185'></a><a href='#L185'>185</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
245
+ <span class="cline-any cline-neutral">&nbsp;</span>
182
246
  <span class="cline-any cline-neutral">&nbsp;</span>
183
247
  <span class="cline-any cline-neutral">&nbsp;</span>
184
248
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -213,7 +277,7 @@
213
277
  <span class="cline-any cline-neutral">&nbsp;</span>
214
278
  <span class="cline-any cline-neutral">&nbsp;</span>
215
279
  <span class="cline-any cline-yes">1x</span>
216
- <span class="cline-any cline-yes">27x</span>
280
+ <span class="cline-any cline-yes">35x</span>
217
281
  <span class="cline-any cline-yes">1x</span>
218
282
  <span class="cline-any cline-neutral">&nbsp;</span>
219
283
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -263,39 +327,101 @@
263
327
  <span class="cline-any cline-neutral">&nbsp;</span>
264
328
  <span class="cline-any cline-neutral">&nbsp;</span>
265
329
  <span class="cline-any cline-neutral">&nbsp;</span>
330
+ <span class="cline-any cline-yes">1x</span>
331
+ <span class="cline-any cline-no">&nbsp;</span>
332
+ <span class="cline-any cline-no">&nbsp;</span>
333
+ <span class="cline-any cline-neutral">&nbsp;</span>
334
+ <span class="cline-any cline-neutral">&nbsp;</span>
335
+ <span class="cline-any cline-neutral">&nbsp;</span>
336
+ <span class="cline-any cline-neutral">&nbsp;</span>
337
+ <span class="cline-any cline-neutral">&nbsp;</span>
338
+ <span class="cline-any cline-neutral">&nbsp;</span>
339
+ <span class="cline-any cline-neutral">&nbsp;</span>
340
+ <span class="cline-any cline-neutral">&nbsp;</span>
341
+ <span class="cline-any cline-neutral">&nbsp;</span>
266
342
  <span class="cline-any cline-neutral">&nbsp;</span>
267
343
  <span class="cline-any cline-yes">1x</span>
268
- <span class="cline-any cline-yes">1485x</span>
344
+ <span class="cline-any cline-no">&nbsp;</span>
345
+ <span class="cline-any cline-no">&nbsp;</span>
346
+ <span class="cline-any cline-neutral">&nbsp;</span>
347
+ <span class="cline-any cline-neutral">&nbsp;</span>
348
+ <span class="cline-any cline-neutral">&nbsp;</span>
349
+ <span class="cline-any cline-neutral">&nbsp;</span>
350
+ <span class="cline-any cline-neutral">&nbsp;</span>
351
+ <span class="cline-any cline-neutral">&nbsp;</span>
352
+ <span class="cline-any cline-neutral">&nbsp;</span>
353
+ <span class="cline-any cline-neutral">&nbsp;</span>
354
+ <span class="cline-any cline-neutral">&nbsp;</span>
355
+ <span class="cline-any cline-yes">1x</span>
356
+ <span class="cline-any cline-yes">4x</span>
357
+ <span class="cline-any cline-yes">4x</span>
358
+ <span class="cline-any cline-neutral">&nbsp;</span>
359
+ <span class="cline-any cline-neutral">&nbsp;</span>
269
360
  <span class="cline-any cline-neutral">&nbsp;</span>
270
361
  <span class="cline-any cline-neutral">&nbsp;</span>
271
362
  <span class="cline-any cline-neutral">&nbsp;</span>
272
- <span class="cline-any cline-yes">297x</span>
273
- <span class="cline-any cline-yes">4372x</span>
274
- <span class="cline-any cline-yes">4372x</span>
275
- <span class="cline-any cline-yes">4372x</span>
276
363
  <span class="cline-any cline-neutral">&nbsp;</span>
277
- <span class="cline-any cline-yes">4372x</span>
278
- <span class="cline-any cline-yes">4372x</span>
279
364
  <span class="cline-any cline-neutral">&nbsp;</span>
280
365
  <span class="cline-any cline-neutral">&nbsp;</span>
281
366
  <span class="cline-any cline-neutral">&nbsp;</span>
367
+ <span class="cline-any cline-yes">1x</span>
368
+ <span class="cline-any cline-yes">1x</span>
369
+ <span class="cline-any cline-yes">1x</span>
370
+ <span class="cline-any cline-neutral">&nbsp;</span>
371
+ <span class="cline-any cline-neutral">&nbsp;</span>
372
+ <span class="cline-any cline-neutral">&nbsp;</span>
373
+ <span class="cline-any cline-neutral">&nbsp;</span>
374
+ <span class="cline-any cline-neutral">&nbsp;</span>
375
+ <span class="cline-any cline-neutral">&nbsp;</span>
376
+ <span class="cline-any cline-neutral">&nbsp;</span>
377
+ <span class="cline-any cline-neutral">&nbsp;</span>
378
+ <span class="cline-any cline-neutral">&nbsp;</span>
379
+ <span class="cline-any cline-yes">1x</span>
380
+ <span class="cline-any cline-no">&nbsp;</span>
381
+ <span class="cline-any cline-no">&nbsp;</span>
382
+ <span class="cline-any cline-neutral">&nbsp;</span>
383
+ <span class="cline-any cline-neutral">&nbsp;</span>
384
+ <span class="cline-any cline-neutral">&nbsp;</span>
385
+ <span class="cline-any cline-neutral">&nbsp;</span>
386
+ <span class="cline-any cline-neutral">&nbsp;</span>
387
+ <span class="cline-any cline-neutral">&nbsp;</span>
388
+ <span class="cline-any cline-neutral">&nbsp;</span>
389
+ <span class="cline-any cline-neutral">&nbsp;</span>
390
+ <span class="cline-any cline-yes">1x</span>
391
+ <span class="cline-any cline-yes">2280x</span>
392
+ <span class="cline-any cline-neutral">&nbsp;</span>
393
+ <span class="cline-any cline-neutral">&nbsp;</span>
394
+ <span class="cline-any cline-neutral">&nbsp;</span>
395
+ <span class="cline-any cline-yes">456x</span>
282
396
  <span class="cline-any cline-neutral">&nbsp;</span>
397
+ <span class="cline-any cline-yes">456x</span>
398
+ <span class="cline-any cline-yes">8196x</span>
399
+ <span class="cline-any cline-yes">8196x</span>
400
+ <span class="cline-any cline-yes">8196x</span>
283
401
  <span class="cline-any cline-neutral">&nbsp;</span>
284
- <span class="cline-any cline-yes">27x</span>
285
- <span class="cline-any cline-yes">27x</span>
402
+ <span class="cline-any cline-yes">8196x</span>
286
403
  <span class="cline-any cline-neutral">&nbsp;</span>
404
+ <span class="cline-any cline-yes">8196x</span>
287
405
  <span class="cline-any cline-neutral">&nbsp;</span>
288
406
  <span class="cline-any cline-neutral">&nbsp;</span>
289
407
  <span class="cline-any cline-neutral">&nbsp;</span>
290
- <span class="cline-any cline-yes">297x</span>
291
408
  <span class="cline-any cline-neutral">&nbsp;</span>
292
409
  <span class="cline-any cline-neutral">&nbsp;</span>
293
- <span class="cline-any cline-yes">297x</span>
294
410
  <span class="cline-any cline-yes">35x</span>
411
+ <span class="cline-any cline-yes">35x</span>
412
+ <span class="cline-any cline-neutral">&nbsp;</span>
413
+ <span class="cline-any cline-neutral">&nbsp;</span>
414
+ <span class="cline-any cline-neutral">&nbsp;</span>
415
+ <span class="cline-any cline-neutral">&nbsp;</span>
416
+ <span class="cline-any cline-yes">456x</span>
417
+ <span class="cline-any cline-neutral">&nbsp;</span>
418
+ <span class="cline-any cline-neutral">&nbsp;</span>
419
+ <span class="cline-any cline-yes">456x</span>
420
+ <span class="cline-any cline-yes">116x</span>
295
421
  <span class="cline-any cline-neutral">&nbsp;</span>
296
422
  <span class="cline-any cline-neutral">&nbsp;</span>
297
423
  <span class="cline-any cline-neutral">&nbsp;</span>
298
- <span class="cline-any cline-yes">297x</span>
424
+ <span class="cline-any cline-yes">456x</span>
299
425
  <span class="cline-any cline-neutral">&nbsp;</span>
300
426
  <span class="cline-any cline-neutral">&nbsp;</span>
301
427
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -321,6 +447,7 @@ interface SubscriptionOptions {
321
447
  handler: SubscriptionHandler;
322
448
  eventTypes: (CheckoutEvents | InternalCheckoutEvents)[];
323
449
  checkout: DinteroCheckoutInstance;
450
+ source: Window;
324
451
  }
325
452
  &nbsp;
326
453
  export type Subscription = {
@@ -333,9 +460,9 @@ export type Subscription = {
333
460
  /**
334
461
  * Post a message acknowledgement to the checkout iframe.
335
462
  */
336
- const postAck = (iframe: HTMLIFrameElement, event: MessageEvent) =&gt; {
337
- if (event.data.mid &amp;&amp; iframe.contentWindow) {
338
- iframe.contentWindow.postMessage(
463
+ const postAck = (source: Window, event: MessageEvent) =&gt; {
464
+ if (event.data.mid &amp;&amp; source) {
465
+ source.postMessage(
339
466
  { ack: event.data.mid },
340
467
  event.origin || <span class="branch-1 cbranch-no" title="branch not covered" >"*"</span>
341
468
  );
@@ -370,7 +497,7 @@ export const postSessionRefresh = (iframe: HTMLIFrameElement, sid: string) =&gt;
370
497
  };
371
498
  &nbsp;
372
499
  /**
373
- * Post setActivePaymentProductType-event to the checkout iframe.
500
+ * Post SetActivePaymentProductType-event to the checkout iframe.
374
501
  */
375
502
  export const postActivePaymentProductType = <span class="fstat-no" title="function not covered" >(i</span>frame: HTMLIFrameElement, sid: string, paymentProductType?: string) =&gt; {
376
503
  <span class="cstat-no" title="statement not covered" > if (iframe.contentWindow) {</span>
@@ -381,6 +508,65 @@ export const postActivePaymentProductType = <span class="fstat-no" title="functi
381
508
  }
382
509
  };
383
510
  &nbsp;
511
+ /**
512
+ * Post ClosePopOut-event to the checkout iframe.
513
+ */
514
+ export const postValidatePopOutEvent = <span class="fstat-no" title="function not covered" >(i</span>frame: HTMLIFrameElement, sid: string) =&gt; {
515
+ <span class="cstat-no" title="statement not covered" > if (iframe.contentWindow) {</span>
516
+ <span class="cstat-no" title="statement not covered" > iframe.contentWindow.postMessage(</span>
517
+ { type: "ValidatingPopOut", sid },
518
+ "*"
519
+ );
520
+ }
521
+ };
522
+ &nbsp;
523
+ &nbsp;
524
+ /**
525
+ * Post OpenPopOutFailed-event to the checkout iframe.
526
+ */
527
+ export const postOpenPopOutFailedEvent = <span class="fstat-no" title="function not covered" >(i</span>frame: HTMLIFrameElement, sid: string) =&gt; {
528
+ <span class="cstat-no" title="statement not covered" > if (iframe.contentWindow) {</span>
529
+ <span class="cstat-no" title="statement not covered" > iframe.contentWindow.postMessage(</span>
530
+ { type: "OpenPopOutFailed", sid },
531
+ "*"
532
+ );
533
+ }
534
+ };
535
+ &nbsp;
536
+ /**
537
+ * Post OpenedPopOut-event to the checkout iframe.
538
+ */
539
+ export const postOpenPopOutEvent = (iframe: HTMLIFrameElement, sid: string) =&gt; {
540
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (iframe.contentWindow) {
541
+ iframe.contentWindow.postMessage(
542
+ { type: "OpenedPopOut", sid },
543
+ "*"
544
+ );
545
+ }
546
+ };
547
+ &nbsp;
548
+ /**
549
+ * Post ClosePopOut-event to the checkout iframe.
550
+ */
551
+ export const postClosePopOutEvent = (iframe: HTMLIFrameElement, sid: string) =&gt; {
552
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (iframe.contentWindow) {
553
+ iframe.contentWindow.postMessage(
554
+ { type: "ClosedPopOut", sid },
555
+ "*"
556
+ );
557
+ }
558
+ };
559
+ &nbsp;
560
+ /**
561
+ * Post SetLanguage-event to the checkout iframe.
562
+ */
563
+ export const postSetLanguage = <span class="fstat-no" title="function not covered" >(i</span>frame: HTMLIFrameElement, sid: string, language: string) =&gt; {
564
+ <span class="cstat-no" title="statement not covered" > if (iframe.contentWindow) {</span>
565
+ <span class="cstat-no" title="statement not covered" > iframe.contentWindow.postMessage({ type: "SetLanguage", sid, language }, "*");</span>
566
+ }
567
+ };
568
+ &nbsp;
569
+ &nbsp;
384
570
  /**
385
571
  * Subscribe to events from an iframe given a handler and a set
386
572
  * of event types.
@@ -390,19 +576,22 @@ export const subscribe = (options: SubscriptionOptions): Subscription =&gt; {
390
576
  &nbsp;
391
577
  // Wrap event handler in a function that checks for correct origin and
392
578
  // filters on event type(s) in the event data.
579
+ const endpointUrl = new URL(endpoint);
580
+ &nbsp;
393
581
  const wrappedHandler = (event: MessageEvent) =&gt; {
394
- const correctOrigin = event.origin === endpoint;
582
+ const correctOrigin = event.origin === endpointUrl.origin;
395
583
  const correctWindow = event.source === checkout.iframe.contentWindow;
396
584
  const correctSid = event.data &amp;&amp; event.data.sid === sid;
397
585
  const correctMessageType =
398
586
  eventTypes.indexOf(event.data &amp;&amp; event.data.type) !== -1;
587
+ &nbsp;
399
588
  if (
400
589
  correctOrigin &amp;&amp;
401
590
  correctWindow &amp;&amp;
402
591
  correctSid &amp;&amp;
403
592
  correctMessageType
404
593
  ) {
405
- postAck(checkout.iframe, event);
594
+ postAck(checkout.iframe.contentWindow, event);
406
595
  handler(event.data, checkout);
407
596
  }
408
597
  };
@@ -427,7 +616,7 @@ export const subscribe = (options: SubscriptionOptions): Subscription =&gt; {
427
616
  <div class='footer quiet pad2 space-top1 center small'>
428
617
  Code coverage generated by
429
618
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
430
- at Thu Sep 28 2023 07:12:08 GMT+0000 (Coordinated Universal Time)
619
+ at Wed Oct 04 2023 07:34:20 GMT+0000 (Coordinated Universal Time)
431
620
  </div>
432
621
  </div>
433
622
  <script src="prettify.js"></script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">87.5% </span>
26
+ <span class="strong">46.34% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>14/16</span>
28
+ <span class='fraction'>19/41</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">60% </span>
33
+ <span class="strong">38.89% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>6/10</span>
35
+ <span class='fraction'>7/18</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">66.67% </span>
40
+ <span class="strong">25% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>2/3</span>
42
+ <span class='fraction'>1/4</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">84.62% </span>
47
+ <span class="strong">48.48% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>11/13</span>
49
+ <span class='fraction'>16/33</span>
50
50
  </div>
51
51
 
52
52
 
@@ -55,7 +55,7 @@
55
55
  Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
56
  </p>
57
57
  </div>
58
- <div class='status-line high'></div>
58
+ <div class='status-line low'></div>
59
59
  <pre><table class="coverage">
60
60
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
61
61
  <a name='L2'></a><a href='#L2'>2</a>
@@ -92,7 +92,40 @@
92
92
  <a name='L33'></a><a href='#L33'>33</a>
93
93
  <a name='L34'></a><a href='#L34'>34</a>
94
94
  <a name='L35'></a><a href='#L35'>35</a>
95
- <a name='L36'></a><a href='#L36'>36</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
95
+ <a name='L36'></a><a href='#L36'>36</a>
96
+ <a name='L37'></a><a href='#L37'>37</a>
97
+ <a name='L38'></a><a href='#L38'>38</a>
98
+ <a name='L39'></a><a href='#L39'>39</a>
99
+ <a name='L40'></a><a href='#L40'>40</a>
100
+ <a name='L41'></a><a href='#L41'>41</a>
101
+ <a name='L42'></a><a href='#L42'>42</a>
102
+ <a name='L43'></a><a href='#L43'>43</a>
103
+ <a name='L44'></a><a href='#L44'>44</a>
104
+ <a name='L45'></a><a href='#L45'>45</a>
105
+ <a name='L46'></a><a href='#L46'>46</a>
106
+ <a name='L47'></a><a href='#L47'>47</a>
107
+ <a name='L48'></a><a href='#L48'>48</a>
108
+ <a name='L49'></a><a href='#L49'>49</a>
109
+ <a name='L50'></a><a href='#L50'>50</a>
110
+ <a name='L51'></a><a href='#L51'>51</a>
111
+ <a name='L52'></a><a href='#L52'>52</a>
112
+ <a name='L53'></a><a href='#L53'>53</a>
113
+ <a name='L54'></a><a href='#L54'>54</a>
114
+ <a name='L55'></a><a href='#L55'>55</a>
115
+ <a name='L56'></a><a href='#L56'>56</a>
116
+ <a name='L57'></a><a href='#L57'>57</a>
117
+ <a name='L58'></a><a href='#L58'>58</a>
118
+ <a name='L59'></a><a href='#L59'>59</a>
119
+ <a name='L60'></a><a href='#L60'>60</a>
120
+ <a name='L61'></a><a href='#L61'>61</a>
121
+ <a name='L62'></a><a href='#L62'>62</a>
122
+ <a name='L63'></a><a href='#L63'>63</a>
123
+ <a name='L64'></a><a href='#L64'>64</a>
124
+ <a name='L65'></a><a href='#L65'>65</a>
125
+ <a name='L66'></a><a href='#L66'>66</a>
126
+ <a name='L67'></a><a href='#L67'>67</a>
127
+ <a name='L68'></a><a href='#L68'>68</a>
128
+ <a name='L69'></a><a href='#L69'>69</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
96
129
  <span class="cline-any cline-neutral">&nbsp;</span>
97
130
  <span class="cline-any cline-neutral">&nbsp;</span>
98
131
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -113,20 +146,53 @@
113
146
  <span class="cline-any cline-neutral">&nbsp;</span>
114
147
  <span class="cline-any cline-neutral">&nbsp;</span>
115
148
  <span class="cline-any cline-neutral">&nbsp;</span>
149
+ <span class="cline-any cline-neutral">&nbsp;</span>
116
150
  <span class="cline-any cline-yes">1x</span>
117
- <span class="cline-any cline-yes">10x</span>
151
+ <span class="cline-any cline-yes">12x</span>
118
152
  <span class="cline-any cline-yes">2x</span>
119
153
  <span class="cline-any cline-no">&nbsp;</span>
120
154
  <span class="cline-any cline-neutral">&nbsp;</span>
121
- <span class="cline-any cline-neutral">&nbsp;</span>
155
+ <span class="cline-any cline-yes">2x</span>
156
+ <span class="cline-any cline-yes">2x</span>
157
+ <span class="cline-any cline-yes">2x</span>
158
+ <span class="cline-any cline-no">&nbsp;</span>
122
159
  <span class="cline-any cline-neutral">&nbsp;</span>
123
160
  <span class="cline-any cline-yes">2x</span>
161
+ <span class="cline-any cline-yes">1x</span>
162
+ <span class="cline-any cline-neutral">&nbsp;</span>
124
163
  <span class="cline-any cline-yes">2x</span>
164
+ <span class="cline-any cline-no">&nbsp;</span>
165
+ <span class="cline-any cline-neutral">&nbsp;</span>
125
166
  <span class="cline-any cline-yes">2x</span>
167
+ <span class="cline-any cline-no">&nbsp;</span>
168
+ <span class="cline-any cline-neutral">&nbsp;</span>
126
169
  <span class="cline-any cline-yes">2x</span>
127
- <span class="cline-any cline-yes">8x</span>
170
+ <span class="cline-any cline-neutral">&nbsp;</span>
128
171
  <span class="cline-any cline-yes">2x</span>
129
172
  <span class="cline-any cline-neutral">&nbsp;</span>
173
+ <span class="cline-any cline-neutral">&nbsp;</span>
174
+ <span class="cline-any cline-neutral">&nbsp;</span>
175
+ <span class="cline-any cline-neutral">&nbsp;</span>
176
+ <span class="cline-any cline-no">&nbsp;</span>
177
+ <span class="cline-any cline-no">&nbsp;</span>
178
+ <span class="cline-any cline-neutral">&nbsp;</span>
179
+ <span class="cline-any cline-neutral">&nbsp;</span>
180
+ <span class="cline-any cline-yes">1x</span>
181
+ <span class="cline-any cline-neutral">&nbsp;</span>
182
+ <span class="cline-any cline-yes">1x</span>
183
+ <span class="cline-any cline-no">&nbsp;</span>
184
+ <span class="cline-any cline-no">&nbsp;</span>
185
+ <span class="cline-any cline-neutral">&nbsp;</span>
186
+ <span class="cline-any cline-no">&nbsp;</span>
187
+ <span class="cline-any cline-no">&nbsp;</span>
188
+ <span class="cline-any cline-no">&nbsp;</span>
189
+ <span class="cline-any cline-no">&nbsp;</span>
190
+ <span class="cline-any cline-no">&nbsp;</span>
191
+ <span class="cline-any cline-no">&nbsp;</span>
192
+ <span class="cline-any cline-no">&nbsp;</span>
193
+ <span class="cline-any cline-neutral">&nbsp;</span>
194
+ <span class="cline-any cline-no">&nbsp;</span>
195
+ <span class="cline-any cline-neutral">&nbsp;</span>
130
196
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import pkg from "../package.json";
131
197
  &nbsp;
132
198
  /**
@@ -146,21 +212,54 @@ export interface SessionUrlOptions {
146
212
  language: string | undefined;
147
213
  ui?: "fullscreen" | "inline";
148
214
  shouldCallValidateSession: boolean;
215
+ popOut?: boolean
149
216
  }
150
217
  &nbsp;
151
218
  export const getSessionUrl = (options: SessionUrlOptions): string =&gt; {
152
- const { sid, endpoint, language, ui, shouldCallValidateSession } = options;
219
+ const { sid, endpoint, language, ui, shouldCallValidateSession, popOut } = options;
153
220
  <span class="missing-if-branch" title="if path not taken" >I</span>if (!endpoint) {
154
221
  <span class="cstat-no" title="statement not covered" > throw new Error("Invalid endpoint");</span>
155
222
  }
223
+ const params = new URLSearchParams();
224
+ params.append('sdk', pkg.version);
225
+ <span class="missing-if-branch" title="if path not taken" >I</span>if(ui){
226
+ <span class="cstat-no" title="statement not covered" > params.append('ui', ui);</span>
227
+ }
228
+ if(language){
229
+ params.append('language', language);
230
+ }
231
+ <span class="missing-if-branch" title="if path not taken" >I</span>if(shouldCallValidateSession){
232
+ <span class="cstat-no" title="statement not covered" > params.append('client_side_validation', 'true');</span>
233
+ }
234
+ <span class="missing-if-branch" title="if path not taken" >I</span>if(popOut) {
235
+ <span class="cstat-no" title="statement not covered" > params.append('role', 'pop_out_launcher');</span>
236
+ }
237
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (endpoint === "https://checkout.dintero.com") {
238
+ // Default endpoint will redirect via the view endpoint
239
+ return `${endpoint}/v1/view/${sid}?${params.toString()}`;
240
+ }
241
+ // When a custom endpoint is set skip the view redirect endpoint since
242
+ // custom endpoints like localhost and PR builds does not support the
243
+ // serverside view flow.
244
+ <span class="cstat-no" title="statement not covered" > params.append('sid', sid);</span>
245
+ <span class="cstat-no" title="statement not covered" > return `${endpoint}/?${params.toString()}`;</span>
246
+ };
247
+ &nbsp;
248
+ const padTralingSlash = <span class="fstat-no" title="function not covered" >(e</span>ndpoint: string) =&gt; <span class="cstat-no" title="statement not covered" >endpoint.endsWith('/') ? endpoint : `${endpoint}/`;</span>
156
249
  &nbsp;
157
- // Compose url for view session endpoint with optional language parameter.
158
- let languageParam = language ? `language=${language}` : "";
159
- let uiParam = ui ? <span class="branch-0 cbranch-no" title="branch not covered" >`ui=${ui}` </span>: "";
160
- let sdk = `sdk=${pkg.version}`;
161
- let validate = shouldCallValidateSession ? <span class="branch-0 cbranch-no" title="branch not covered" >`client_side_validation=true` </span>: undefined;
162
- const params = [languageParam, uiParam, sdk, validate].filter(x =&gt; x).join("&amp;");
163
- return `${endpoint}/v1/view/${sid}${params ? "?" + params : <span class="branch-1 cbranch-no" title="branch not covered" >""}</span>`;
250
+ export const getPopOutUrl = <span class="fstat-no" title="function not covered" >({</span> sid<span class="cstat-no" title="statement not covered" >, e</span>ndpoint<span class="cstat-no" title="statement not covered" >, l</span>anguage<span class="cstat-no" title="statement not covered" >, s</span>houldCallValidateSession<span class="cstat-no" title="statement not covered" > }: SessionUrlOptions)</span> =&gt; {
251
+ <span class="cstat-no" title="statement not covered" > if (shouldCallValidateSession) {</span>
252
+ <span class="cstat-no" title="statement not covered" > return `${padTralingSlash(endpoint)}?loader=true`;</span>
253
+ }
254
+ const params = <span class="cstat-no" title="statement not covered" >new URLSearchParams();</span>
255
+ <span class="cstat-no" title="statement not covered" > params.append('ui', 'fullscreen');</span>
256
+ <span class="cstat-no" title="statement not covered" > params.append('role', 'pop_out_payment');</span>
257
+ <span class="cstat-no" title="statement not covered" > params.append('sid', sid);</span>
258
+ <span class="cstat-no" title="statement not covered" > params.append('sdk', pkg.version);</span>
259
+ <span class="cstat-no" title="statement not covered" > if (language) {</span>
260
+ <span class="cstat-no" title="statement not covered" > params.append('language', language);</span>
261
+ }
262
+ <span class="cstat-no" title="statement not covered" > return `${endpoint}/?${params.toString()}`;</span>
164
263
  };
165
264
  &nbsp;</pre></td></tr></table></pre>
166
265
 
@@ -169,7 +268,7 @@ export const getSessionUrl = (options: SessionUrlOptions): string =&gt; {
169
268
  <div class='footer quiet pad2 space-top1 center small'>
170
269
  Code coverage generated by
171
270
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
172
- at Thu Sep 28 2023 07:12:08 GMT+0000 (Coordinated Universal Time)
271
+ at Wed Oct 04 2023 07:34:20 GMT+0000 (Coordinated Universal Time)
173
272
  </div>
174
273
  </div>
175
274
  <script src="prettify.js"></script>
@@ -15,7 +15,9 @@ export declare enum CheckoutEvents {
15
15
  export declare enum InternalCheckoutEvents {
16
16
  HeightChanged = "HeightChanged",
17
17
  LanguageChanged = "LanguageChanged",
18
- ScrollToTop = "ScrollToTop"
18
+ ScrollToTop = "ScrollToTop",
19
+ ShowPopOutButton = "ShowPopOutButton",
20
+ HidePopOutButton = "HidePopOutButton"
19
21
  }
20
22
  export type SessionNotFound = {
21
23
  type: CheckoutEvents.SessionNotFound;
@@ -49,6 +51,32 @@ export type SessionLocked = {
49
51
  pay_lock_id: string;
50
52
  callback: () => void;
51
53
  };
54
+ export type ShowPopOutButton = {
55
+ type: 'ShowPopOutButton';
56
+ styles: {
57
+ font: string;
58
+ height: string;
59
+ color: string;
60
+ background: string;
61
+ textAlign: string;
62
+ padding: string;
63
+ margin: string;
64
+ border: string;
65
+ borderRadius: string;
66
+ cursor: string;
67
+ fontWeight: string;
68
+ lineHeight: string;
69
+ };
70
+ openLabel: string;
71
+ focusLabel: string;
72
+ closeLabel: string;
73
+ descriptionLabel: string;
74
+ top: string;
75
+ left: string;
76
+ right: string;
77
+ language: string;
78
+ disabled: 'true' | 'false';
79
+ };
52
80
  export type SessionLockFailed = {
53
81
  type: CheckoutEvents.SessionLockFailed;
54
82
  };