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.
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">97.05% </span>
26
+ <span class="strong">94.59% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>99/102</span>
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">85.07% </span>
33
+ <span class="strong">79.54% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>57/67</span>
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">94.11% </span>
40
+ <span class="strong">88.23% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>16/17</span>
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">97% </span>
47
+ <span class="strong">94.49% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>97/100</span>
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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
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">&nbsp;</span>
395
414
  <span class="cline-any cline-neutral">&nbsp;</span>
396
415
  <span class="cline-any cline-neutral">&nbsp;</span>
397
416
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</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">&nbsp;</span>
426
+ <span class="cline-any cline-yes">45x</span>
404
427
  <span class="cline-any cline-neutral">&nbsp;</span>
405
428
  <span class="cline-any cline-neutral">&nbsp;</span>
429
+ <span class="cline-any cline-yes">10x</span>
406
430
  <span class="cline-any cline-neutral">&nbsp;</span>
407
431
  <span class="cline-any cline-neutral">&nbsp;</span>
408
432
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -419,23 +443,19 @@
419
443
  <span class="cline-any cline-neutral">&nbsp;</span>
420
444
  <span class="cline-any cline-neutral">&nbsp;</span>
421
445
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</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">&nbsp;</span>
428
447
  <span class="cline-any cline-neutral">&nbsp;</span>
429
448
  <span class="cline-any cline-neutral">&nbsp;</span>
430
- <span class="cline-any cline-yes">3x</span>
431
- <span class="cline-any cline-neutral">&nbsp;</span>
432
449
  <span class="cline-any cline-neutral">&nbsp;</span>
433
450
  <span class="cline-any cline-neutral">&nbsp;</span>
434
451
  <span class="cline-any cline-neutral">&nbsp;</span>
435
452
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
437
456
  <span class="cline-any cline-neutral">&nbsp;</span>
438
457
  <span class="cline-any cline-neutral">&nbsp;</span>
458
+ <span class="cline-any cline-yes">3x</span>
439
459
  <span class="cline-any cline-neutral">&nbsp;</span>
440
460
  <span class="cline-any cline-neutral">&nbsp;</span>
441
461
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -474,23 +494,25 @@
474
494
  <span class="cline-any cline-neutral">&nbsp;</span>
475
495
  <span class="cline-any cline-neutral">&nbsp;</span>
476
496
  <span class="cline-any cline-neutral">&nbsp;</span>
497
+ <span class="cline-any cline-yes">3x</span>
477
498
  <span class="cline-any cline-neutral">&nbsp;</span>
478
499
  <span class="cline-any cline-neutral">&nbsp;</span>
479
500
  <span class="cline-any cline-neutral">&nbsp;</span>
480
501
  <span class="cline-any cline-neutral">&nbsp;</span>
481
502
  <span class="cline-any cline-yes">3x</span>
482
503
  <span class="cline-any cline-neutral">&nbsp;</span>
504
+ <span class="cline-any cline-yes">3x</span>
483
505
  <span class="cline-any cline-neutral">&nbsp;</span>
484
506
  <span class="cline-any cline-neutral">&nbsp;</span>
507
+ <span class="cline-any cline-yes">4x</span>
485
508
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
489
510
  <span class="cline-any cline-neutral">&nbsp;</span>
490
- <span class="cline-any cline-yes">3x</span>
491
511
  <span class="cline-any cline-neutral">&nbsp;</span>
492
512
  <span class="cline-any cline-neutral">&nbsp;</span>
493
513
  <span class="cline-any cline-yes">4x</span>
514
+ <span class="cline-any cline-neutral">&nbsp;</span>
515
+ <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
510
532
  <span class="cline-any cline-neutral">&nbsp;</span>
511
533
  <span class="cline-any cline-neutral">&nbsp;</span>
534
+ <span class="cline-any cline-neutral">&nbsp;</span>
535
+ <span class="cline-any cline-neutral">&nbsp;</span>
512
536
  <span class="cline-any cline-yes">1x</span>
513
537
  <span class="cline-any cline-neutral">&nbsp;</span>
514
538
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -522,8 +546,6 @@
522
546
  <span class="cline-any cline-yes">3x</span>
523
547
  <span class="cline-any cline-neutral">&nbsp;</span>
524
548
  <span class="cline-any cline-no">&nbsp;</span>
525
- <span class="cline-any cline-no">&nbsp;</span>
526
- <span class="cline-any cline-neutral">&nbsp;</span>
527
549
  <span class="cline-any cline-neutral">&nbsp;</span>
528
550
  <span class="cline-any cline-neutral">&nbsp;</span>
529
551
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -532,65 +554,72 @@
532
554
  <span class="cline-any cline-neutral">&nbsp;</span>
533
555
  <span class="cline-any cline-neutral">&nbsp;</span>
534
556
  <span class="cline-any cline-neutral">&nbsp;</span>
535
- <span class="cline-any cline-yes">3x</span>
536
- <span class="cline-any cline-yes">2x</span>
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">&nbsp;</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">&nbsp;</span>
563
+ <span class="cline-any cline-no">&nbsp;</span>
542
564
  <span class="cline-any cline-neutral">&nbsp;</span>
565
+ <span class="cline-any cline-no">&nbsp;</span>
566
+ <span class="cline-any cline-no">&nbsp;</span>
543
567
  <span class="cline-any cline-neutral">&nbsp;</span>
544
568
  <span class="cline-any cline-neutral">&nbsp;</span>
545
569
  <span class="cline-any cline-neutral">&nbsp;</span>
546
- <span class="cline-any cline-yes">2x</span>
547
570
  <span class="cline-any cline-neutral">&nbsp;</span>
548
571
  <span class="cline-any cline-neutral">&nbsp;</span>
549
- <span class="cline-any cline-yes">5x</span>
572
+ <span class="cline-any cline-yes">7x</span>
550
573
  <span class="cline-any cline-neutral">&nbsp;</span>
551
574
  <span class="cline-any cline-neutral">&nbsp;</span>
552
575
  <span class="cline-any cline-neutral">&nbsp;</span>
553
- <span class="cline-any cline-yes">1x</span>
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">&nbsp;</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">&nbsp;</span>
559
579
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
561
583
  <span class="cline-any cline-neutral">&nbsp;</span>
562
- <span class="cline-any cline-yes">1x</span>
563
584
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
565
- <span class="cline-any cline-yes">34x</span>
566
- <span class="cline-any cline-no">&nbsp;</span>
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">&nbsp;</span>
568
591
  <span class="cline-any cline-neutral">&nbsp;</span>
569
592
  <span class="cline-any cline-neutral">&nbsp;</span>
570
- <span class="cline-any cline-yes">1x</span>
571
593
  <span class="cline-any cline-neutral">&nbsp;</span>
594
+ <span class="cline-any cline-yes">4x</span>
572
595
  <span class="cline-any cline-neutral">&nbsp;</span>
573
596
  <span class="cline-any cline-neutral">&nbsp;</span>
597
+ <span class="cline-any cline-yes">101x</span>
598
+ <span class="cline-any cline-neutral">&nbsp;</span>
599
+ <span class="cline-any cline-neutral">&nbsp;</span>
600
+ <span class="cline-any cline-neutral">&nbsp;</span>
601
+ <span class="cline-any cline-yes">3x</span>
602
+ <span class="cline-any cline-neutral">&nbsp;</span>
574
603
  <span class="cline-any cline-neutral">&nbsp;</span>
575
604
  <span class="cline-any cline-neutral">&nbsp;</span>
576
605
  <span class="cline-any cline-yes">1x</span>
577
- <span class="cline-any cline-yes">1x</span>
606
+ <span class="cline-any cline-neutral">&nbsp;</span>
607
+ <span class="cline-any cline-neutral">&nbsp;</span>
608
+ <span class="cline-any cline-neutral">&nbsp;</span>
578
609
  <span class="cline-any cline-neutral">&nbsp;</span>
579
610
  <span class="cline-any cline-neutral">&nbsp;</span>
580
611
  <span class="cline-any cline-yes">1x</span>
581
612
  <span class="cline-any cline-neutral">&nbsp;</span>
582
613
  <span class="cline-any cline-neutral">&nbsp;</span>
614
+ <span class="cline-any cline-yes">1x</span>
583
615
  <span class="cline-any cline-neutral">&nbsp;</span>
584
616
  <span class="cline-any cline-neutral">&nbsp;</span>
585
617
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
589
619
  <span class="cline-any cline-neutral">&nbsp;</span>
620
+ <span class="cline-any cline-yes">2x</span>
590
621
  <span class="cline-any cline-neutral">&nbsp;</span>
591
- <span class="cline-any cline-yes">1x</span>
592
622
  <span class="cline-any cline-neutral">&nbsp;</span>
593
- <span class="cline-any cline-yes">1x</span>
594
623
  <span class="cline-any cline-neutral">&nbsp;</span>
595
624
  <span class="cline-any cline-neutral">&nbsp;</span>
596
625
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -608,17 +637,26 @@
608
637
  <span class="cline-any cline-neutral">&nbsp;</span>
609
638
  <span class="cline-any cline-neutral">&nbsp;</span>
610
639
  <span class="cline-any cline-yes">36x</span>
611
- <span class="cline-any cline-yes">29x</span>
640
+ <span class="cline-any cline-yes">26x</span>
612
641
  <span class="cline-any cline-neutral">&nbsp;</span>
613
642
  <span class="cline-any cline-neutral">&nbsp;</span>
614
- <span class="cline-any cline-yes">7x</span>
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">&nbsp;</span>
647
+ <span class="cline-any cline-neutral">&nbsp;</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-yes">3x</span>
651
+ <span class="cline-any cline-no">&nbsp;</span>
652
+ <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
619
657
  <span class="cline-any cline-neutral">&nbsp;</span>
620
658
  <span class="cline-any cline-neutral">&nbsp;</span>
621
- <span class="cline-any cline-yes">4x</span>
659
+ <span class="cline-any cline-yes">6x</span>
622
660
  <span class="cline-any cline-neutral">&nbsp;</span>
623
661
  <span class="cline-any cline-neutral">&nbsp;</span>
624
662
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -728,82 +766,79 @@
728
766
  import {NATIVE_ERROR_CODES} from '../ExpoIapModule';
729
767
  import {ErrorCode, IapPlatform} from '../types';
730
768
  &nbsp;
769
+ const toKebabCase = (str: string): string =&gt; {
770
+ if (str.includes('_')) {
771
+ return str
772
+ .split('_')
773
+ .map((word) =&gt; word.toLowerCase())
774
+ .join('-');
775
+ } else {
776
+ return str
777
+ .replace(/([A-Z])/g, '-$1')
778
+ .toLowerCase()
779
+ .replace(/^-/, '');
780
+ }
781
+ };
782
+ &nbsp;
731
783
  export interface PurchaseErrorProps {
732
- message: string;
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
  &nbsp;
740
- type PlatformErrorData = {
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
- &nbsp;
748
- export type PurchaseError = Error &amp; PurchaseErrorProps;
749
- &nbsp;
750
- const toStandardizedCode = (errorCode: ErrorCode): string =&gt;
751
- errorCode.startsWith('E_') ? <span class="branch-0 cbranch-no" title="branch not covered" >errorCode </span>: `E_${errorCode}`;
797
+ platform?: IapPlatform;
798
+ }
752
799
  &nbsp;
753
800
  const normalizePlatform = (platform: IapPlatform): 'ios' | 'android' =&gt;
754
801
  typeof platform === 'string' &amp;&amp; platform.toLowerCase() === 'ios'
755
802
  ? 'ios'
756
- : 'android';
803
+ : <span class="branch-1 cbranch-no" title="branch not covered" >'android';</span>
757
804
  &nbsp;
758
805
  const COMMON_ERROR_CODE_MAP: Record&lt;ErrorCode, string&gt; = {
759
- [ErrorCode.Unknown]: toStandardizedCode(ErrorCode.Unknown),
760
- [ErrorCode.UserCancelled]: toStandardizedCode(ErrorCode.UserCancelled),
761
- [ErrorCode.UserError]: toStandardizedCode(ErrorCode.UserError),
762
- [ErrorCode.ItemUnavailable]: toStandardizedCode(ErrorCode.ItemUnavailable),
763
- [ErrorCode.RemoteError]: toStandardizedCode(ErrorCode.RemoteError),
764
- [ErrorCode.NetworkError]: toStandardizedCode(ErrorCode.NetworkError),
765
- [ErrorCode.ServiceError]: toStandardizedCode(ErrorCode.ServiceError),
766
- [ErrorCode.ReceiptFailed]: toStandardizedCode(ErrorCode.ReceiptFailed),
767
- [ErrorCode.ReceiptFinished]: toStandardizedCode(ErrorCode.ReceiptFinished),
768
- [ErrorCode.ReceiptFinishedFailed]: toStandardizedCode(
769
- ErrorCode.ReceiptFinishedFailed,
770
- ),
771
- [ErrorCode.NotPrepared]: toStandardizedCode(ErrorCode.NotPrepared),
772
- [ErrorCode.NotEnded]: toStandardizedCode(ErrorCode.NotEnded),
773
- [ErrorCode.AlreadyOwned]: toStandardizedCode(ErrorCode.AlreadyOwned),
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.DeferredPayment]: toStandardizedCode(ErrorCode.DeferredPayment),
779
- [ErrorCode.Interrupted]: toStandardizedCode(ErrorCode.Interrupted),
780
- [ErrorCode.IapNotAvailable]: toStandardizedCode(ErrorCode.IapNotAvailable),
781
- [ErrorCode.PurchaseError]: toStandardizedCode(ErrorCode.PurchaseError),
782
- [ErrorCode.SyncError]: toStandardizedCode(ErrorCode.SyncError),
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.ActivityUnavailable]: toStandardizedCode(
787
- ErrorCode.ActivityUnavailable,
788
- ),
789
- [ErrorCode.AlreadyPrepared]: toStandardizedCode(ErrorCode.AlreadyPrepared),
790
- [ErrorCode.Pending]: toStandardizedCode(ErrorCode.Pending),
791
- [ErrorCode.ConnectionClosed]: toStandardizedCode(ErrorCode.ConnectionClosed),
792
- [ErrorCode.InitConnection]: toStandardizedCode(ErrorCode.InitConnection),
793
- [ErrorCode.ServiceDisconnected]: toStandardizedCode(
794
- ErrorCode.ServiceDisconnected,
795
- ),
796
- [ErrorCode.QueryProduct]: toStandardizedCode(ErrorCode.QueryProduct),
797
- [ErrorCode.SkuNotFound]: toStandardizedCode(ErrorCode.SkuNotFound),
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
  &nbsp;
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
  &nbsp;
814
- const OPENIAP_ERROR_CODE_SET: Set&lt;string&gt; = new Set(
815
- Object.values(ErrorCode).map((code) =&gt; toStandardizedCode(code)),
816
- );
849
+ const OPENIAP_ERROR_CODE_SET: Set&lt;string&gt; = new Set(Object.values(ErrorCode));
817
850
  &nbsp;
818
851
  export const createPurchaseError = (
819
852
  props: PurchaseErrorProps,
820
853
  ): PurchaseError =&gt; {
821
- const error = new Error(props.message) as PurchaseError;
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
+ &nbsp;
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 = props.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
  &nbsp;
831
872
  export const createPurchaseErrorFromPlatform = (
832
- errorData: PlatformErrorData,
873
+ errorData: PurchaseErrorProps,
833
874
  platform: IapPlatform,
834
875
  ): PurchaseError =&gt; {
835
876
  const normalizedPlatform = normalizePlatform(platform);
836
877
  const errorCode = errorData.code
837
- ? ErrorCodeUtils.fromPlatformCode(errorData.code, normalizedPlatform)
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
  &nbsp;
840
883
  return createPurchaseError({
@@ -849,11 +892,9 @@ export const createPurchaseErrorFromPlatform = (
849
892
  &nbsp;
850
893
  export const ErrorCodeUtils = {
851
894
  getNativeErrorCode: <span class="fstat-no" title="function not covered" >(e</span>rrorCode: ErrorCode): string =&gt; {
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&lt;string, string | undefined&gt;)[
855
- standardized
856
- ] ?? standardized
896
+ (NATIVE_ERROR_CODES as Record&lt;string, string | undefined&gt;)[errorCode] ??
897
+ errorCode
857
898
  );
858
899
  },
859
900
  fromPlatformCode: (
@@ -861,21 +902,31 @@ export const ErrorCodeUtils = {
861
902
  _platform: IapPlatform,
862
903
  ): ErrorCode =&gt; {
863
904
  if (typeof platformCode === 'string' &amp;&amp; platformCode.startsWith('E_')) {
864
- if (OPENIAP_ERROR_CODE_SET.has(platformCode)) {
865
- const match = Object.entries(COMMON_ERROR_CODE_MAP).find(
866
- ([, value]) =&gt; value === platformCode,
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]) =&gt; <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
+ &nbsp;
918
+ const normalizedCode =
919
+ typeof platformCode === 'string'
920
+ ? toKebabCase(platformCode)
921
+ : platformCode;
873
922
  &nbsp;
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&lt;string, string | number&gt;,
876
925
  )) {
926
+ const normalizedNative =
927
+ typeof nativeCode === 'string' ? toKebabCase(nativeCode) : nativeCode;
877
928
  if (
878
- nativeCode === platformCode &amp;&amp;
929
+ normalizedNative === normalizedCode &amp;&amp;
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
- <span class="missing-if-branch" title="if path not taken" >I</span>if (mappedCode === platformCode) {
894
- <span class="cstat-no" title="statement not covered" > return errorCode as ErrorCode;</span>
944
+ if (
945
+ mappedCode === normalizedCode ||
946
+ mappedCode === `E_${normalizedCode}`
947
+ ) {
948
+ return errorCode as ErrorCode;
895
949
  }
896
950
  }
897
951
  &nbsp;
@@ -901,9 +955,8 @@ export const ErrorCodeUtils = {
901
955
  errorCode: ErrorCode,
902
956
  _platform: IapPlatform,
903
957
  ): string | number =&gt; {
904
- const standardized = toStandardizedCode(errorCode);
905
958
  const native = (NATIVE_ERROR_CODES as Record&lt;string, string | number&gt;)[
906
- standardized
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 =&gt; {
914
- const standardized = toStandardizedCode(errorCode);
915
- if (
916
- (NATIVE_ERROR_CODES as Record&lt;string, unknown&gt;)[standardized] !==
917
- undefined
918
- ) {
919
- return true;
920
- }
921
- return standardized in ErrorCodeMapping[normalizePlatform(platform)];
967
+ return (
968
+ (NATIVE_ERROR_CODES as Record&lt;string, unknown&gt;)[errorCode] !== undefined
969
+ );
922
970
  },
923
971
  };
924
972
  &nbsp;
@@ -938,11 +986,20 @@ const normalizeErrorCode = (code?: string | null): string | undefined =&gt; {
938
986
  if (ERROR_CODES.has(code)) {
939
987
  return code;
940
988
  }
989
+ &nbsp;
990
+ const camelCased = toKebabCase(code);
991
+ if (ERROR_CODES.has(camelCased)) {
992
+ return camelCased;
993
+ }
941
994
  &nbsp;
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
  &nbsp;
@@ -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-22T14:13:03.978Z
1114
+ at 2025-09-24T00:35:10.304Z
1058
1115
  </div>
1059
1116
  <script src="../../prettify.js"></script>
1060
1117
  <script>