expo-iap 3.1.2 → 3.1.3
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.
- package/android/src/main/java/expo/modules/iap/ExpoIapHelper.kt +171 -0
- package/android/src/main/java/expo/modules/iap/ExpoIapLog.kt +4 -0
- package/android/src/main/java/expo/modules/iap/ExpoIapModule.kt +50 -114
- package/build/types.d.ts +34 -34
- package/build/types.js +34 -34
- package/build/types.js.map +1 -1
- package/build/utils/errorMapping.d.ts +7 -8
- package/build/utils/errorMapping.d.ts.map +1 -1
- package/build/utils/errorMapping.js +83 -53
- package/build/utils/errorMapping.js.map +1 -1
- package/coverage/clover.xml +105 -96
- package/coverage/coverage-final.json +1 -1
- package/coverage/lcov-report/index.html +19 -19
- package/coverage/lcov-report/src/helpers/index.html +1 -1
- package/coverage/lcov-report/src/helpers/subscription.ts.html +1 -1
- package/coverage/lcov-report/src/index.html +1 -1
- package/coverage/lcov-report/src/index.ts.html +1 -1
- package/coverage/lcov-report/src/modules/android.ts.html +1 -1
- package/coverage/lcov-report/src/modules/index.html +1 -1
- package/coverage/lcov-report/src/modules/ios.ts.html +1 -1
- package/coverage/lcov-report/src/utils/errorMapping.ts.html +191 -134
- package/coverage/lcov-report/src/utils/index.html +19 -19
- package/coverage/lcov.info +215 -185
- package/ios/ExpoIapHelper.swift +101 -6
- package/ios/ExpoIapModule.swift +29 -97
- package/openiap-versions.json +1 -1
- package/package.json +1 -1
- package/src/types.ts +34 -34
- package/src/utils/errorMapping.ts +101 -82
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">94.59% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>105/111</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">79.54% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>70/88</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">88.23% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>15/17</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">94.49% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>103/109</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -391,7 +391,26 @@
|
|
|
391
391
|
<a name='L326'></a><a href='#L326'>326</a>
|
|
392
392
|
<a name='L327'></a><a href='#L327'>327</a>
|
|
393
393
|
<a name='L328'></a><a href='#L328'>328</a>
|
|
394
|
-
<a name='L329'></a><a href='#L329'>329</a
|
|
394
|
+
<a name='L329'></a><a href='#L329'>329</a>
|
|
395
|
+
<a name='L330'></a><a href='#L330'>330</a>
|
|
396
|
+
<a name='L331'></a><a href='#L331'>331</a>
|
|
397
|
+
<a name='L332'></a><a href='#L332'>332</a>
|
|
398
|
+
<a name='L333'></a><a href='#L333'>333</a>
|
|
399
|
+
<a name='L334'></a><a href='#L334'>334</a>
|
|
400
|
+
<a name='L335'></a><a href='#L335'>335</a>
|
|
401
|
+
<a name='L336'></a><a href='#L336'>336</a>
|
|
402
|
+
<a name='L337'></a><a href='#L337'>337</a>
|
|
403
|
+
<a name='L338'></a><a href='#L338'>338</a>
|
|
404
|
+
<a name='L339'></a><a href='#L339'>339</a>
|
|
405
|
+
<a name='L340'></a><a href='#L340'>340</a>
|
|
406
|
+
<a name='L341'></a><a href='#L341'>341</a>
|
|
407
|
+
<a name='L342'></a><a href='#L342'>342</a>
|
|
408
|
+
<a name='L343'></a><a href='#L343'>343</a>
|
|
409
|
+
<a name='L344'></a><a href='#L344'>344</a>
|
|
410
|
+
<a name='L345'></a><a href='#L345'>345</a>
|
|
411
|
+
<a name='L346'></a><a href='#L346'>346</a>
|
|
412
|
+
<a name='L347'></a><a href='#L347'>347</a>
|
|
413
|
+
<a name='L348'></a><a href='#L348'>348</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
395
414
|
<span class="cline-any cline-neutral"> </span>
|
|
396
415
|
<span class="cline-any cline-neutral"> </span>
|
|
397
416
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -400,9 +419,14 @@
|
|
|
400
419
|
<span class="cline-any cline-yes">3x</span>
|
|
401
420
|
<span class="cline-any cline-yes">3x</span>
|
|
402
421
|
<span class="cline-any cline-neutral"> </span>
|
|
422
|
+
<span class="cline-any cline-yes">3x</span>
|
|
423
|
+
<span class="cline-any cline-yes">30x</span>
|
|
424
|
+
<span class="cline-any cline-yes">20x</span>
|
|
403
425
|
<span class="cline-any cline-neutral"> </span>
|
|
426
|
+
<span class="cline-any cline-yes">45x</span>
|
|
404
427
|
<span class="cline-any cline-neutral"> </span>
|
|
405
428
|
<span class="cline-any cline-neutral"> </span>
|
|
429
|
+
<span class="cline-any cline-yes">10x</span>
|
|
406
430
|
<span class="cline-any cline-neutral"> </span>
|
|
407
431
|
<span class="cline-any cline-neutral"> </span>
|
|
408
432
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -419,23 +443,19 @@
|
|
|
419
443
|
<span class="cline-any cline-neutral"> </span>
|
|
420
444
|
<span class="cline-any cline-neutral"> </span>
|
|
421
445
|
<span class="cline-any cline-neutral"> </span>
|
|
422
|
-
<span class="cline-any cline-yes">3x</span>
|
|
423
|
-
<span class="cline-any cline-yes">207x</span>
|
|
424
|
-
<span class="cline-any cline-neutral"> </span>
|
|
425
|
-
<span class="cline-any cline-yes">3x</span>
|
|
426
|
-
<span class="cline-any cline-yes">2x</span>
|
|
427
446
|
<span class="cline-any cline-neutral"> </span>
|
|
428
447
|
<span class="cline-any cline-neutral"> </span>
|
|
429
448
|
<span class="cline-any cline-neutral"> </span>
|
|
430
|
-
<span class="cline-any cline-yes">3x</span>
|
|
431
|
-
<span class="cline-any cline-neutral"> </span>
|
|
432
449
|
<span class="cline-any cline-neutral"> </span>
|
|
433
450
|
<span class="cline-any cline-neutral"> </span>
|
|
434
451
|
<span class="cline-any cline-neutral"> </span>
|
|
435
452
|
<span class="cline-any cline-neutral"> </span>
|
|
453
|
+
<span class="cline-any cline-yes">3x</span>
|
|
454
|
+
<span class="cline-any cline-yes">1x</span>
|
|
436
455
|
<span class="cline-any cline-neutral"> </span>
|
|
437
456
|
<span class="cline-any cline-neutral"> </span>
|
|
438
457
|
<span class="cline-any cline-neutral"> </span>
|
|
458
|
+
<span class="cline-any cline-yes">3x</span>
|
|
439
459
|
<span class="cline-any cline-neutral"> </span>
|
|
440
460
|
<span class="cline-any cline-neutral"> </span>
|
|
441
461
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -474,23 +494,25 @@
|
|
|
474
494
|
<span class="cline-any cline-neutral"> </span>
|
|
475
495
|
<span class="cline-any cline-neutral"> </span>
|
|
476
496
|
<span class="cline-any cline-neutral"> </span>
|
|
497
|
+
<span class="cline-any cline-yes">3x</span>
|
|
477
498
|
<span class="cline-any cline-neutral"> </span>
|
|
478
499
|
<span class="cline-any cline-neutral"> </span>
|
|
479
500
|
<span class="cline-any cline-neutral"> </span>
|
|
480
501
|
<span class="cline-any cline-neutral"> </span>
|
|
481
502
|
<span class="cline-any cline-yes">3x</span>
|
|
482
503
|
<span class="cline-any cline-neutral"> </span>
|
|
504
|
+
<span class="cline-any cline-yes">3x</span>
|
|
483
505
|
<span class="cline-any cline-neutral"> </span>
|
|
484
506
|
<span class="cline-any cline-neutral"> </span>
|
|
507
|
+
<span class="cline-any cline-yes">4x</span>
|
|
485
508
|
<span class="cline-any cline-neutral"> </span>
|
|
486
|
-
<span class="cline-any cline-yes">3x</span>
|
|
487
|
-
<span class="cline-any cline-yes">102x</span>
|
|
488
509
|
<span class="cline-any cline-neutral"> </span>
|
|
489
510
|
<span class="cline-any cline-neutral"> </span>
|
|
490
|
-
<span class="cline-any cline-yes">3x</span>
|
|
491
511
|
<span class="cline-any cline-neutral"> </span>
|
|
492
512
|
<span class="cline-any cline-neutral"> </span>
|
|
493
513
|
<span class="cline-any cline-yes">4x</span>
|
|
514
|
+
<span class="cline-any cline-neutral"> </span>
|
|
515
|
+
<span class="cline-any cline-neutral"> </span>
|
|
494
516
|
<span class="cline-any cline-yes">4x</span>
|
|
495
517
|
<span class="cline-any cline-yes">4x</span>
|
|
496
518
|
<span class="cline-any cline-yes">4x</span>
|
|
@@ -509,6 +531,8 @@
|
|
|
509
531
|
<span class="cline-any cline-neutral"> </span>
|
|
510
532
|
<span class="cline-any cline-neutral"> </span>
|
|
511
533
|
<span class="cline-any cline-neutral"> </span>
|
|
534
|
+
<span class="cline-any cline-neutral"> </span>
|
|
535
|
+
<span class="cline-any cline-neutral"> </span>
|
|
512
536
|
<span class="cline-any cline-yes">1x</span>
|
|
513
537
|
<span class="cline-any cline-neutral"> </span>
|
|
514
538
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -522,8 +546,6 @@
|
|
|
522
546
|
<span class="cline-any cline-yes">3x</span>
|
|
523
547
|
<span class="cline-any cline-neutral"> </span>
|
|
524
548
|
<span class="cline-any cline-no"> </span>
|
|
525
|
-
<span class="cline-any cline-no"> </span>
|
|
526
|
-
<span class="cline-any cline-neutral"> </span>
|
|
527
549
|
<span class="cline-any cline-neutral"> </span>
|
|
528
550
|
<span class="cline-any cline-neutral"> </span>
|
|
529
551
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -532,65 +554,72 @@
|
|
|
532
554
|
<span class="cline-any cline-neutral"> </span>
|
|
533
555
|
<span class="cline-any cline-neutral"> </span>
|
|
534
556
|
<span class="cline-any cline-neutral"> </span>
|
|
535
|
-
<span class="cline-any cline-yes">
|
|
536
|
-
<span class="cline-any cline-yes">
|
|
557
|
+
<span class="cline-any cline-yes">7x</span>
|
|
558
|
+
<span class="cline-any cline-yes">1x</span>
|
|
537
559
|
<span class="cline-any cline-yes">1x</span>
|
|
538
|
-
<span class="cline-any cline-yes">13x</span>
|
|
539
|
-
<span class="cline-any cline-neutral"> </span>
|
|
540
560
|
<span class="cline-any cline-yes">1x</span>
|
|
541
561
|
<span class="cline-any cline-yes">1x</span>
|
|
562
|
+
<span class="cline-any cline-no"> </span>
|
|
563
|
+
<span class="cline-any cline-no"> </span>
|
|
542
564
|
<span class="cline-any cline-neutral"> </span>
|
|
565
|
+
<span class="cline-any cline-no"> </span>
|
|
566
|
+
<span class="cline-any cline-no"> </span>
|
|
543
567
|
<span class="cline-any cline-neutral"> </span>
|
|
544
568
|
<span class="cline-any cline-neutral"> </span>
|
|
545
569
|
<span class="cline-any cline-neutral"> </span>
|
|
546
|
-
<span class="cline-any cline-yes">2x</span>
|
|
547
570
|
<span class="cline-any cline-neutral"> </span>
|
|
548
571
|
<span class="cline-any cline-neutral"> </span>
|
|
549
|
-
<span class="cline-any cline-yes">
|
|
572
|
+
<span class="cline-any cline-yes">7x</span>
|
|
550
573
|
<span class="cline-any cline-neutral"> </span>
|
|
551
574
|
<span class="cline-any cline-neutral"> </span>
|
|
552
575
|
<span class="cline-any cline-neutral"> </span>
|
|
553
|
-
<span class="cline-any cline-yes">
|
|
554
|
-
<span class="cline-any cline-yes">32x</span>
|
|
576
|
+
<span class="cline-any cline-yes">7x</span>
|
|
555
577
|
<span class="cline-any cline-neutral"> </span>
|
|
556
|
-
<span class="cline-any cline-yes">1x</span>
|
|
557
|
-
<span class="cline-any cline-yes">1x</span>
|
|
558
578
|
<span class="cline-any cline-neutral"> </span>
|
|
559
579
|
<span class="cline-any cline-neutral"> </span>
|
|
580
|
+
<span class="cline-any cline-yes">12x</span>
|
|
581
|
+
<span class="cline-any cline-yes">12x</span>
|
|
560
582
|
<span class="cline-any cline-neutral"> </span>
|
|
561
583
|
<span class="cline-any cline-neutral"> </span>
|
|
562
|
-
<span class="cline-any cline-yes">1x</span>
|
|
563
584
|
<span class="cline-any cline-neutral"> </span>
|
|
585
|
+
<span class="cline-any cline-yes">3x</span>
|
|
586
|
+
<span class="cline-any cline-yes">58x</span>
|
|
564
587
|
<span class="cline-any cline-neutral"> </span>
|
|
565
|
-
<span class="cline-any cline-yes">
|
|
566
|
-
<span class="cline-any cline-
|
|
588
|
+
<span class="cline-any cline-yes">3x</span>
|
|
589
|
+
<span class="cline-any cline-yes">3x</span>
|
|
567
590
|
<span class="cline-any cline-neutral"> </span>
|
|
568
591
|
<span class="cline-any cline-neutral"> </span>
|
|
569
592
|
<span class="cline-any cline-neutral"> </span>
|
|
570
|
-
<span class="cline-any cline-yes">1x</span>
|
|
571
593
|
<span class="cline-any cline-neutral"> </span>
|
|
594
|
+
<span class="cline-any cline-yes">4x</span>
|
|
572
595
|
<span class="cline-any cline-neutral"> </span>
|
|
573
596
|
<span class="cline-any cline-neutral"> </span>
|
|
597
|
+
<span class="cline-any cline-yes">101x</span>
|
|
598
|
+
<span class="cline-any cline-neutral"> </span>
|
|
599
|
+
<span class="cline-any cline-neutral"> </span>
|
|
600
|
+
<span class="cline-any cline-neutral"> </span>
|
|
601
|
+
<span class="cline-any cline-yes">3x</span>
|
|
602
|
+
<span class="cline-any cline-neutral"> </span>
|
|
574
603
|
<span class="cline-any cline-neutral"> </span>
|
|
575
604
|
<span class="cline-any cline-neutral"> </span>
|
|
576
605
|
<span class="cline-any cline-yes">1x</span>
|
|
577
|
-
<span class="cline-any cline-
|
|
606
|
+
<span class="cline-any cline-neutral"> </span>
|
|
607
|
+
<span class="cline-any cline-neutral"> </span>
|
|
608
|
+
<span class="cline-any cline-neutral"> </span>
|
|
578
609
|
<span class="cline-any cline-neutral"> </span>
|
|
579
610
|
<span class="cline-any cline-neutral"> </span>
|
|
580
611
|
<span class="cline-any cline-yes">1x</span>
|
|
581
612
|
<span class="cline-any cline-neutral"> </span>
|
|
582
613
|
<span class="cline-any cline-neutral"> </span>
|
|
614
|
+
<span class="cline-any cline-yes">1x</span>
|
|
583
615
|
<span class="cline-any cline-neutral"> </span>
|
|
584
616
|
<span class="cline-any cline-neutral"> </span>
|
|
585
617
|
<span class="cline-any cline-neutral"> </span>
|
|
586
|
-
<span class="cline-any cline-yes">2x</span>
|
|
587
|
-
<span class="cline-any cline-yes">2x</span>
|
|
588
618
|
<span class="cline-any cline-neutral"> </span>
|
|
589
619
|
<span class="cline-any cline-neutral"> </span>
|
|
620
|
+
<span class="cline-any cline-yes">2x</span>
|
|
590
621
|
<span class="cline-any cline-neutral"> </span>
|
|
591
|
-
<span class="cline-any cline-yes">1x</span>
|
|
592
622
|
<span class="cline-any cline-neutral"> </span>
|
|
593
|
-
<span class="cline-any cline-yes">1x</span>
|
|
594
623
|
<span class="cline-any cline-neutral"> </span>
|
|
595
624
|
<span class="cline-any cline-neutral"> </span>
|
|
596
625
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -608,17 +637,26 @@
|
|
|
608
637
|
<span class="cline-any cline-neutral"> </span>
|
|
609
638
|
<span class="cline-any cline-neutral"> </span>
|
|
610
639
|
<span class="cline-any cline-yes">36x</span>
|
|
611
|
-
<span class="cline-any cline-yes">
|
|
640
|
+
<span class="cline-any cline-yes">26x</span>
|
|
612
641
|
<span class="cline-any cline-neutral"> </span>
|
|
613
642
|
<span class="cline-any cline-neutral"> </span>
|
|
614
|
-
<span class="cline-any cline-yes">
|
|
643
|
+
<span class="cline-any cline-yes">10x</span>
|
|
644
|
+
<span class="cline-any cline-yes">10x</span>
|
|
645
|
+
<span class="cline-any cline-yes">2x</span>
|
|
646
|
+
<span class="cline-any cline-neutral"> </span>
|
|
647
|
+
<span class="cline-any cline-neutral"> </span>
|
|
648
|
+
<span class="cline-any cline-yes">8x</span>
|
|
615
649
|
<span class="cline-any cline-yes">4x</span>
|
|
616
650
|
<span class="cline-any cline-yes">4x</span>
|
|
617
|
-
<span class="cline-any cline-
|
|
651
|
+
<span class="cline-any cline-no"> </span>
|
|
652
|
+
<span class="cline-any cline-neutral"> </span>
|
|
653
|
+
<span class="cline-any cline-yes">4x</span>
|
|
654
|
+
<span class="cline-any cline-yes">4x</span>
|
|
655
|
+
<span class="cline-any cline-yes">2x</span>
|
|
618
656
|
<span class="cline-any cline-neutral"> </span>
|
|
619
657
|
<span class="cline-any cline-neutral"> </span>
|
|
620
658
|
<span class="cline-any cline-neutral"> </span>
|
|
621
|
-
<span class="cline-any cline-yes">
|
|
659
|
+
<span class="cline-any cline-yes">6x</span>
|
|
622
660
|
<span class="cline-any cline-neutral"> </span>
|
|
623
661
|
<span class="cline-any cline-neutral"> </span>
|
|
624
662
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -728,82 +766,79 @@
|
|
|
728
766
|
import {NATIVE_ERROR_CODES} from '../ExpoIapModule';
|
|
729
767
|
import {ErrorCode, IapPlatform} from '../types';
|
|
730
768
|
|
|
769
|
+
const toKebabCase = (str: string): string => {
|
|
770
|
+
if (str.includes('_')) {
|
|
771
|
+
return str
|
|
772
|
+
.split('_')
|
|
773
|
+
.map((word) => word.toLowerCase())
|
|
774
|
+
.join('-');
|
|
775
|
+
} else {
|
|
776
|
+
return str
|
|
777
|
+
.replace(/([A-Z])/g, '-$1')
|
|
778
|
+
.toLowerCase()
|
|
779
|
+
.replace(/^-/, '');
|
|
780
|
+
}
|
|
781
|
+
};
|
|
782
|
+
|
|
731
783
|
export interface PurchaseErrorProps {
|
|
732
|
-
message
|
|
784
|
+
message?: string;
|
|
733
785
|
responseCode?: number;
|
|
734
786
|
debugMessage?: string;
|
|
735
|
-
code?: ErrorCode;
|
|
787
|
+
code?: ErrorCode | string | number;
|
|
736
788
|
productId?: string;
|
|
737
789
|
platform?: IapPlatform;
|
|
738
790
|
}
|
|
739
791
|
|
|
740
|
-
|
|
741
|
-
code?: string | number;
|
|
742
|
-
message?: string;
|
|
792
|
+
export interface PurchaseError extends Error {
|
|
743
793
|
responseCode?: number;
|
|
744
794
|
debugMessage?: string;
|
|
795
|
+
code?: ErrorCode;
|
|
745
796
|
productId?: string;
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
export type PurchaseError = Error & PurchaseErrorProps;
|
|
749
|
-
|
|
750
|
-
const toStandardizedCode = (errorCode: ErrorCode): string =>
|
|
751
|
-
errorCode.startsWith('E_') ? <span class="branch-0 cbranch-no" title="branch not covered" >errorCode </span>: `E_${errorCode}`;
|
|
797
|
+
platform?: IapPlatform;
|
|
798
|
+
}
|
|
752
799
|
|
|
753
800
|
const normalizePlatform = (platform: IapPlatform): 'ios' | 'android' =>
|
|
754
801
|
typeof platform === 'string' && platform.toLowerCase() === 'ios'
|
|
755
802
|
? 'ios'
|
|
756
|
-
: 'android'
|
|
803
|
+
: <span class="branch-1 cbranch-no" title="branch not covered" >'android';</span>
|
|
757
804
|
|
|
758
805
|
const COMMON_ERROR_CODE_MAP: Record<ErrorCode, string> = {
|
|
759
|
-
[ErrorCode.Unknown]:
|
|
760
|
-
[ErrorCode.UserCancelled]:
|
|
761
|
-
[ErrorCode.UserError]:
|
|
762
|
-
[ErrorCode.ItemUnavailable]:
|
|
763
|
-
[ErrorCode.RemoteError]:
|
|
764
|
-
[ErrorCode.NetworkError]:
|
|
765
|
-
[ErrorCode.ServiceError]:
|
|
766
|
-
[ErrorCode.ReceiptFailed]:
|
|
767
|
-
[ErrorCode.ReceiptFinished]:
|
|
768
|
-
[ErrorCode.ReceiptFinishedFailed]:
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
[ErrorCode.
|
|
772
|
-
[ErrorCode.
|
|
773
|
-
[ErrorCode.
|
|
774
|
-
[ErrorCode.DeveloperError]: toStandardizedCode(ErrorCode.DeveloperError),
|
|
775
|
-
[ErrorCode.BillingResponseJsonParseError]: toStandardizedCode(
|
|
806
|
+
[ErrorCode.Unknown]: ErrorCode.Unknown,
|
|
807
|
+
[ErrorCode.UserCancelled]: ErrorCode.UserCancelled,
|
|
808
|
+
[ErrorCode.UserError]: ErrorCode.UserError,
|
|
809
|
+
[ErrorCode.ItemUnavailable]: ErrorCode.ItemUnavailable,
|
|
810
|
+
[ErrorCode.RemoteError]: ErrorCode.RemoteError,
|
|
811
|
+
[ErrorCode.NetworkError]: ErrorCode.NetworkError,
|
|
812
|
+
[ErrorCode.ServiceError]: ErrorCode.ServiceError,
|
|
813
|
+
[ErrorCode.ReceiptFailed]: ErrorCode.ReceiptFailed,
|
|
814
|
+
[ErrorCode.ReceiptFinished]: ErrorCode.ReceiptFinished,
|
|
815
|
+
[ErrorCode.ReceiptFinishedFailed]: ErrorCode.ReceiptFinishedFailed,
|
|
816
|
+
[ErrorCode.NotPrepared]: ErrorCode.NotPrepared,
|
|
817
|
+
[ErrorCode.NotEnded]: ErrorCode.NotEnded,
|
|
818
|
+
[ErrorCode.AlreadyOwned]: ErrorCode.AlreadyOwned,
|
|
819
|
+
[ErrorCode.DeveloperError]: ErrorCode.DeveloperError,
|
|
820
|
+
[ErrorCode.BillingResponseJsonParseError]:
|
|
776
821
|
ErrorCode.BillingResponseJsonParseError,
|
|
777
|
-
|
|
778
|
-
[ErrorCode.
|
|
779
|
-
[ErrorCode.
|
|
780
|
-
[ErrorCode.
|
|
781
|
-
[ErrorCode.
|
|
782
|
-
[ErrorCode.
|
|
783
|
-
[ErrorCode.TransactionValidationFailed]: toStandardizedCode(
|
|
822
|
+
[ErrorCode.DeferredPayment]: ErrorCode.DeferredPayment,
|
|
823
|
+
[ErrorCode.Interrupted]: ErrorCode.Interrupted,
|
|
824
|
+
[ErrorCode.IapNotAvailable]: ErrorCode.IapNotAvailable,
|
|
825
|
+
[ErrorCode.PurchaseError]: ErrorCode.PurchaseError,
|
|
826
|
+
[ErrorCode.SyncError]: ErrorCode.SyncError,
|
|
827
|
+
[ErrorCode.TransactionValidationFailed]:
|
|
784
828
|
ErrorCode.TransactionValidationFailed,
|
|
785
|
-
|
|
786
|
-
[ErrorCode.
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
[ErrorCode.
|
|
790
|
-
[ErrorCode.
|
|
791
|
-
[ErrorCode.
|
|
792
|
-
[ErrorCode.
|
|
793
|
-
[ErrorCode.
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
[ErrorCode.
|
|
797
|
-
[ErrorCode.
|
|
798
|
-
[ErrorCode.SkuOfferMismatch]: toStandardizedCode(ErrorCode.SkuOfferMismatch),
|
|
799
|
-
[ErrorCode.ItemNotOwned]: toStandardizedCode(ErrorCode.ItemNotOwned),
|
|
800
|
-
[ErrorCode.BillingUnavailable]: toStandardizedCode(
|
|
801
|
-
ErrorCode.BillingUnavailable,
|
|
802
|
-
),
|
|
803
|
-
[ErrorCode.FeatureNotSupported]: toStandardizedCode(
|
|
804
|
-
ErrorCode.FeatureNotSupported,
|
|
805
|
-
),
|
|
806
|
-
[ErrorCode.EmptySkuList]: toStandardizedCode(ErrorCode.EmptySkuList),
|
|
829
|
+
[ErrorCode.ActivityUnavailable]: ErrorCode.ActivityUnavailable,
|
|
830
|
+
[ErrorCode.AlreadyPrepared]: ErrorCode.AlreadyPrepared,
|
|
831
|
+
[ErrorCode.Pending]: ErrorCode.Pending,
|
|
832
|
+
[ErrorCode.ConnectionClosed]: ErrorCode.ConnectionClosed,
|
|
833
|
+
[ErrorCode.InitConnection]: ErrorCode.InitConnection,
|
|
834
|
+
[ErrorCode.ServiceDisconnected]: ErrorCode.ServiceDisconnected,
|
|
835
|
+
[ErrorCode.QueryProduct]: ErrorCode.QueryProduct,
|
|
836
|
+
[ErrorCode.SkuNotFound]: ErrorCode.SkuNotFound,
|
|
837
|
+
[ErrorCode.SkuOfferMismatch]: ErrorCode.SkuOfferMismatch,
|
|
838
|
+
[ErrorCode.ItemNotOwned]: ErrorCode.ItemNotOwned,
|
|
839
|
+
[ErrorCode.BillingUnavailable]: ErrorCode.BillingUnavailable,
|
|
840
|
+
[ErrorCode.FeatureNotSupported]: ErrorCode.FeatureNotSupported,
|
|
841
|
+
[ErrorCode.EmptySkuList]: ErrorCode.EmptySkuList,
|
|
807
842
|
};
|
|
808
843
|
|
|
809
844
|
export const ErrorCodeMapping = {
|
|
@@ -811,30 +846,38 @@ export const ErrorCodeMapping = {
|
|
|
811
846
|
android: COMMON_ERROR_CODE_MAP,
|
|
812
847
|
} as const;
|
|
813
848
|
|
|
814
|
-
const OPENIAP_ERROR_CODE_SET: Set<string> = new Set(
|
|
815
|
-
Object.values(ErrorCode).map((code) => toStandardizedCode(code)),
|
|
816
|
-
);
|
|
849
|
+
const OPENIAP_ERROR_CODE_SET: Set<string> = new Set(Object.values(ErrorCode));
|
|
817
850
|
|
|
818
851
|
export const createPurchaseError = (
|
|
819
852
|
props: PurchaseErrorProps,
|
|
820
853
|
): PurchaseError => {
|
|
821
|
-
const
|
|
854
|
+
const errorCode = props.code
|
|
855
|
+
? typeof props.code === 'string' || <span class="branch-1 cbranch-no" title="branch not covered" >typeof props.code === 'number'</span>
|
|
856
|
+
? ErrorCodeUtils.fromPlatformCode(props.code, props.platform || 'ios')
|
|
857
|
+
: <span class="branch-1 cbranch-no" title="branch not covered" >props.code</span>
|
|
858
|
+
: <span class="branch-1 cbranch-no" title="branch not covered" >undefined;</span>
|
|
859
|
+
|
|
860
|
+
const error = new Error(
|
|
861
|
+
props.message ?? <span class="branch-1 cbranch-no" title="branch not covered" >'Unknown error occurred',</span>
|
|
862
|
+
) as PurchaseError;
|
|
822
863
|
error.name = '[expo-iap]: PurchaseError';
|
|
823
864
|
error.responseCode = props.responseCode;
|
|
824
865
|
error.debugMessage = props.debugMessage;
|
|
825
|
-
error.code =
|
|
866
|
+
error.code = errorCode;
|
|
826
867
|
error.productId = props.productId;
|
|
827
868
|
error.platform = props.platform;
|
|
828
869
|
return error;
|
|
829
870
|
};
|
|
830
871
|
|
|
831
872
|
export const createPurchaseErrorFromPlatform = (
|
|
832
|
-
errorData:
|
|
873
|
+
errorData: PurchaseErrorProps,
|
|
833
874
|
platform: IapPlatform,
|
|
834
875
|
): PurchaseError => {
|
|
835
876
|
const normalizedPlatform = normalizePlatform(platform);
|
|
836
877
|
const errorCode = errorData.code
|
|
837
|
-
?
|
|
878
|
+
? typeof errorData.code === 'string' || <span class="branch-1 cbranch-no" title="branch not covered" >typeof errorData.code === 'number'</span>
|
|
879
|
+
? ErrorCodeUtils.fromPlatformCode(errorData.code, normalizedPlatform)
|
|
880
|
+
: <span class="branch-1 cbranch-no" title="branch not covered" >errorData.code</span>
|
|
838
881
|
: <span class="branch-1 cbranch-no" title="branch not covered" >ErrorCode.Unknown;</span>
|
|
839
882
|
|
|
840
883
|
return createPurchaseError({
|
|
@@ -849,11 +892,9 @@ export const createPurchaseErrorFromPlatform = (
|
|
|
849
892
|
|
|
850
893
|
export const ErrorCodeUtils = {
|
|
851
894
|
getNativeErrorCode: <span class="fstat-no" title="function not covered" >(e</span>rrorCode: ErrorCode): string => {
|
|
852
|
-
const standardized = <span class="cstat-no" title="statement not covered" >toStandardizedCode(errorCode);</span>
|
|
853
895
|
<span class="cstat-no" title="statement not covered" > return (</span>
|
|
854
|
-
(NATIVE_ERROR_CODES as Record<string, string | undefined>)[
|
|
855
|
-
|
|
856
|
-
] ?? standardized
|
|
896
|
+
(NATIVE_ERROR_CODES as Record<string, string | undefined>)[errorCode] ??
|
|
897
|
+
errorCode
|
|
857
898
|
);
|
|
858
899
|
},
|
|
859
900
|
fromPlatformCode: (
|
|
@@ -861,21 +902,31 @@ export const ErrorCodeUtils = {
|
|
|
861
902
|
_platform: IapPlatform,
|
|
862
903
|
): ErrorCode => {
|
|
863
904
|
if (typeof platformCode === 'string' && platformCode.startsWith('E_')) {
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
905
|
+
const withoutE = platformCode.substring(2);
|
|
906
|
+
const camelCased = toKebabCase(withoutE);
|
|
907
|
+
const withE = `E_${camelCased}`;
|
|
908
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (OPENIAP_ERROR_CODE_SET.has(withE)) {
|
|
909
|
+
const match = <span class="cstat-no" title="statement not covered" >Object.entries(COMMON_ERROR_CODE_MAP).find(</span>
|
|
910
|
+
<span class="fstat-no" title="function not covered" > ([</span>, value]) => <span class="cstat-no" title="statement not covered" >value === withE,</span>
|
|
867
911
|
);
|
|
868
|
-
if (match) {
|
|
869
|
-
return match[0] as ErrorCode
|
|
912
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (match) {</span>
|
|
913
|
+
<span class="cstat-no" title="statement not covered" > return match[0] as ErrorCode;</span>
|
|
870
914
|
}
|
|
871
915
|
}
|
|
872
916
|
}
|
|
917
|
+
|
|
918
|
+
const normalizedCode =
|
|
919
|
+
typeof platformCode === 'string'
|
|
920
|
+
? toKebabCase(platformCode)
|
|
921
|
+
: platformCode;
|
|
873
922
|
|
|
874
923
|
for (const [standardized, nativeCode] of Object.entries(
|
|
875
924
|
(NATIVE_ERROR_CODES || <span class="branch-1 cbranch-no" title="branch not covered" >{})</span> as Record<string, string | number>,
|
|
876
925
|
)) {
|
|
926
|
+
const normalizedNative =
|
|
927
|
+
typeof nativeCode === 'string' ? toKebabCase(nativeCode) : nativeCode;
|
|
877
928
|
if (
|
|
878
|
-
|
|
929
|
+
normalizedNative === normalizedCode &&
|
|
879
930
|
OPENIAP_ERROR_CODE_SET.has(standardized)
|
|
880
931
|
) {
|
|
881
932
|
const match = Object.entries(COMMON_ERROR_CODE_MAP).find(
|
|
@@ -890,8 +941,11 @@ export const ErrorCodeUtils = {
|
|
|
890
941
|
for (const [errorCode, mappedCode] of Object.entries(
|
|
891
942
|
COMMON_ERROR_CODE_MAP,
|
|
892
943
|
)) {
|
|
893
|
-
|
|
894
|
-
|
|
944
|
+
if (
|
|
945
|
+
mappedCode === normalizedCode ||
|
|
946
|
+
mappedCode === `E_${normalizedCode}`
|
|
947
|
+
) {
|
|
948
|
+
return errorCode as ErrorCode;
|
|
895
949
|
}
|
|
896
950
|
}
|
|
897
951
|
|
|
@@ -901,9 +955,8 @@ export const ErrorCodeUtils = {
|
|
|
901
955
|
errorCode: ErrorCode,
|
|
902
956
|
_platform: IapPlatform,
|
|
903
957
|
): string | number => {
|
|
904
|
-
const standardized = toStandardizedCode(errorCode);
|
|
905
958
|
const native = (NATIVE_ERROR_CODES as Record<string, string | number>)[
|
|
906
|
-
|
|
959
|
+
errorCode
|
|
907
960
|
];
|
|
908
961
|
return native ?? <span class="branch-1 cbranch-no" title="branch not covered" >COMMON_ERROR_CODE_MAP[errorCode] </span>?? <span class="branch-2 cbranch-no" title="branch not covered" >'E_UNKNOWN';</span>
|
|
909
962
|
},
|
|
@@ -911,14 +964,9 @@ export const ErrorCodeUtils = {
|
|
|
911
964
|
errorCode: ErrorCode,
|
|
912
965
|
platform: IapPlatform,
|
|
913
966
|
): boolean => {
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
undefined
|
|
918
|
-
) {
|
|
919
|
-
return true;
|
|
920
|
-
}
|
|
921
|
-
return standardized in ErrorCodeMapping[normalizePlatform(platform)];
|
|
967
|
+
return (
|
|
968
|
+
(NATIVE_ERROR_CODES as Record<string, unknown>)[errorCode] !== undefined
|
|
969
|
+
);
|
|
922
970
|
},
|
|
923
971
|
};
|
|
924
972
|
|
|
@@ -938,11 +986,20 @@ const normalizeErrorCode = (code?: string | null): string | undefined => {
|
|
|
938
986
|
if (ERROR_CODES.has(code)) {
|
|
939
987
|
return code;
|
|
940
988
|
}
|
|
989
|
+
|
|
990
|
+
const camelCased = toKebabCase(code);
|
|
991
|
+
if (ERROR_CODES.has(camelCased)) {
|
|
992
|
+
return camelCased;
|
|
993
|
+
}
|
|
941
994
|
|
|
942
995
|
if (code.startsWith('E_')) {
|
|
943
996
|
const trimmed = code.substring(2);
|
|
944
|
-
if (ERROR_CODES.has(trimmed)) {
|
|
945
|
-
return trimmed
|
|
997
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (ERROR_CODES.has(trimmed)) {
|
|
998
|
+
<span class="cstat-no" title="statement not covered" > return trimmed;</span>
|
|
999
|
+
}
|
|
1000
|
+
const camelTrimmed = toKebabCase(trimmed);
|
|
1001
|
+
if (ERROR_CODES.has(camelTrimmed)) {
|
|
1002
|
+
return camelTrimmed;
|
|
946
1003
|
}
|
|
947
1004
|
}
|
|
948
1005
|
|
|
@@ -1054,7 +1111,7 @@ export function getUserFriendlyErrorMessage(error: ErrorLike): string {
|
|
|
1054
1111
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
1055
1112
|
Code coverage generated by
|
|
1056
1113
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1057
|
-
at 2025-09-
|
|
1114
|
+
at 2025-09-24T00:35:10.304Z
|
|
1058
1115
|
</div>
|
|
1059
1116
|
<script src="../../prettify.js"></script>
|
|
1060
1117
|
<script>
|