expo-iap 3.1.15 → 3.1.16

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.
Files changed (33) hide show
  1. package/android/src/main/java/expo/modules/iap/ExpoIapModule.kt +35 -0
  2. package/build/index.d.ts +45 -1
  3. package/build/index.d.ts.map +1 -1
  4. package/build/index.js +50 -2
  5. package/build/index.js.map +1 -1
  6. package/build/types.d.ts +5 -0
  7. package/build/types.d.ts.map +1 -1
  8. package/build/types.js.map +1 -1
  9. package/bun.lockb +0 -0
  10. package/coverage/clover.xml +182 -241
  11. package/coverage/coverage-final.json +2 -3
  12. package/coverage/lcov-report/index.html +25 -40
  13. package/coverage/lcov-report/src/index.html +18 -18
  14. package/coverage/lcov-report/src/index.ts.html +186 -21
  15. package/coverage/lcov-report/src/modules/android.ts.html +1 -1
  16. package/coverage/lcov-report/src/modules/index.html +1 -1
  17. package/coverage/lcov-report/src/modules/ios.ts.html +1 -1
  18. package/coverage/lcov-report/src/utils/debug.ts.html +13 -13
  19. package/coverage/lcov-report/src/utils/errorMapping.ts.html +1 -1
  20. package/coverage/lcov-report/src/utils/index.html +15 -15
  21. package/coverage/lcov.info +340 -445
  22. package/ios/ExpoIapModule.swift +17 -0
  23. package/openiap-versions.json +3 -3
  24. package/package.json +1 -1
  25. package/src/index.ts +61 -6
  26. package/src/types.ts +5 -0
  27. package/build/helpers/subscription.d.ts +0 -14
  28. package/build/helpers/subscription.d.ts.map +0 -1
  29. package/build/helpers/subscription.js +0 -118
  30. package/build/helpers/subscription.js.map +0 -1
  31. package/coverage/lcov-report/src/helpers/index.html +0 -116
  32. package/coverage/lcov-report/src/helpers/subscription.ts.html +0 -499
  33. package/src/helpers/subscription.ts +0 -138
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">94.43% </span>
26
+ <span class="strong">93.99% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>509/539</span>
28
+ <span class='fraction'>454/483</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">87.06% </span>
33
+ <span class="strong">86.45% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>249/286</span>
35
+ <span class='fraction'>217/251</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">78.78% </span>
40
+ <span class="strong">78.94% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>78/99</span>
42
+ <span class='fraction'>75/95</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">94.5% </span>
47
+ <span class="strong">93.87% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>482/510</span>
49
+ <span class='fraction'>429/457</span>
50
50
  </div>
51
51
 
52
52
 
@@ -80,32 +80,17 @@
80
80
  </thead>
81
81
  <tbody><tr>
82
82
  <td class="file high" data-value="src"><a href="src/index.html">src</a></td>
83
- <td data-value="96.61" class="pic high">
83
+ <td data-value="96.68" class="pic high">
84
84
  <div class="chart"><div class="cover-fill" style="width: 96%"></div><div class="cover-empty" style="width: 4%"></div></div>
85
85
  </td>
86
- <td data-value="96.61" class="pct high">96.61%</td>
87
- <td data-value="207" class="abs high">200/207</td>
88
- <td data-value="89.24" class="pct high">89.24%</td>
89
- <td data-value="93" class="abs high">83/93</td>
90
- <td data-value="73.17" class="pct medium">73.17%</td>
91
- <td data-value="41" class="abs medium">30/41</td>
92
- <td data-value="96.87" class="pct high">96.87%</td>
93
- <td data-value="192" class="abs high">186/192</td>
94
- </tr>
95
-
96
- <tr>
97
- <td class="file high" data-value="src/helpers"><a href="src/helpers/index.html">src/helpers</a></td>
98
- <td data-value="96.66" class="pic high">
99
- <div class="chart"><div class="cover-fill" style="width: 96%"></div><div class="cover-empty" style="width: 4%"></div></div>
100
- </td>
101
- <td data-value="96.66" class="pct high">96.66%</td>
102
- <td data-value="60" class="abs high">58/60</td>
103
- <td data-value="92.68" class="pct high">92.68%</td>
104
- <td data-value="41" class="abs high">38/41</td>
105
- <td data-value="100" class="pct high">100%</td>
106
- <td data-value="4" class="abs high">4/4</td>
107
- <td data-value="98.24" class="pct high">98.24%</td>
108
- <td data-value="57" class="abs high">56/57</td>
86
+ <td data-value="96.68" class="pct high">96.68%</td>
87
+ <td data-value="211" class="abs high">204/211</td>
88
+ <td data-value="89.89" class="pct high">89.89%</td>
89
+ <td data-value="99" class="abs high">89/99</td>
90
+ <td data-value="78.04" class="pct medium">78.04%</td>
91
+ <td data-value="41" class="abs medium">32/41</td>
92
+ <td data-value="96.93" class="pct high">96.93%</td>
93
+ <td data-value="196" class="abs high">190/196</td>
109
94
  </tr>
110
95
 
111
96
  <tr>
@@ -125,17 +110,17 @@
125
110
 
126
111
  <tr>
127
112
  <td class="file high" data-value="src/utils"><a href="src/utils/index.html">src/utils</a></td>
128
- <td data-value="89.84" class="pic high">
113
+ <td data-value="89.06" class="pic high">
129
114
  <div class="chart"><div class="cover-fill" style="width: 89%"></div><div class="cover-empty" style="width: 11%"></div></div>
130
115
  </td>
131
- <td data-value="89.84" class="pct high">89.84%</td>
132
- <td data-value="128" class="abs high">115/128</td>
116
+ <td data-value="89.06" class="pct high">89.06%</td>
117
+ <td data-value="128" class="abs high">114/128</td>
133
118
  <td data-value="76.28" class="pct medium">76.28%</td>
134
119
  <td data-value="97" class="abs medium">74/97</td>
135
- <td data-value="83.33" class="pct high">83.33%</td>
136
- <td data-value="24" class="abs high">20/24</td>
137
- <td data-value="89.6" class="pct high">89.6%</td>
138
- <td data-value="125" class="abs high">112/125</td>
120
+ <td data-value="79.16" class="pct medium">79.16%</td>
121
+ <td data-value="24" class="abs medium">19/24</td>
122
+ <td data-value="88.8" class="pct high">88.8%</td>
123
+ <td data-value="125" class="abs high">111/125</td>
139
124
  </tr>
140
125
 
141
126
  </tbody>
@@ -146,7 +131,7 @@
146
131
  <div class='footer quiet pad2 space-top1 center small'>
147
132
  Code coverage generated by
148
133
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
149
- at 2025-10-15T18:23:22.756Z
134
+ at 2025-10-15T21:20:56.605Z
150
135
  </div>
151
136
  <script src="prettify.js"></script>
152
137
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">96.61% </span>
26
+ <span class="strong">96.68% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>200/207</span>
28
+ <span class='fraction'>204/211</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">89.24% </span>
33
+ <span class="strong">89.89% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>83/93</span>
35
+ <span class='fraction'>89/99</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">73.17% </span>
40
+ <span class="strong">78.04% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>30/41</span>
42
+ <span class='fraction'>32/41</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">96.87% </span>
47
+ <span class="strong">96.93% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>186/192</span>
49
+ <span class='fraction'>190/196</span>
50
50
  </div>
51
51
 
52
52
 
@@ -80,17 +80,17 @@
80
80
  </thead>
81
81
  <tbody><tr>
82
82
  <td class="file high" data-value="index.ts"><a href="index.ts.html">index.ts</a></td>
83
- <td data-value="96.61" class="pic high">
83
+ <td data-value="96.68" class="pic high">
84
84
  <div class="chart"><div class="cover-fill" style="width: 96%"></div><div class="cover-empty" style="width: 4%"></div></div>
85
85
  </td>
86
- <td data-value="96.61" class="pct high">96.61%</td>
87
- <td data-value="207" class="abs high">200/207</td>
88
- <td data-value="89.24" class="pct high">89.24%</td>
89
- <td data-value="93" class="abs high">83/93</td>
90
- <td data-value="73.17" class="pct medium">73.17%</td>
91
- <td data-value="41" class="abs medium">30/41</td>
92
- <td data-value="96.87" class="pct high">96.87%</td>
93
- <td data-value="192" class="abs high">186/192</td>
86
+ <td data-value="96.68" class="pct high">96.68%</td>
87
+ <td data-value="211" class="abs high">204/211</td>
88
+ <td data-value="89.89" class="pct high">89.89%</td>
89
+ <td data-value="99" class="abs high">89/99</td>
90
+ <td data-value="78.04" class="pct medium">78.04%</td>
91
+ <td data-value="41" class="abs medium">32/41</td>
92
+ <td data-value="96.93" class="pct high">96.93%</td>
93
+ <td data-value="196" class="abs high">190/196</td>
94
94
  </tr>
95
95
 
96
96
  </tbody>
@@ -101,7 +101,7 @@
101
101
  <div class='footer quiet pad2 space-top1 center small'>
102
102
  Code coverage generated by
103
103
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
104
- at 2025-10-15T18:23:22.756Z
104
+ at 2025-10-15T21:20:56.605Z
105
105
  </div>
106
106
  <script src="../prettify.js"></script>
107
107
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">96.61% </span>
26
+ <span class="strong">96.68% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>200/207</span>
28
+ <span class='fraction'>204/211</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">89.24% </span>
33
+ <span class="strong">89.89% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>83/93</span>
35
+ <span class='fraction'>89/99</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">73.17% </span>
40
+ <span class="strong">78.04% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>30/41</span>
42
+ <span class='fraction'>32/41</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">96.87% </span>
47
+ <span class="strong">96.93% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>186/192</span>
49
+ <span class='fraction'>190/196</span>
50
50
  </div>
51
51
 
52
52
 
@@ -731,7 +731,62 @@
731
731
  <a name='L666'></a><a href='#L666'>666</a>
732
732
  <a name='L667'></a><a href='#L667'>667</a>
733
733
  <a name='L668'></a><a href='#L668'>668</a>
734
- <a name='L669'></a><a href='#L669'>669</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
734
+ <a name='L669'></a><a href='#L669'>669</a>
735
+ <a name='L670'></a><a href='#L670'>670</a>
736
+ <a name='L671'></a><a href='#L671'>671</a>
737
+ <a name='L672'></a><a href='#L672'>672</a>
738
+ <a name='L673'></a><a href='#L673'>673</a>
739
+ <a name='L674'></a><a href='#L674'>674</a>
740
+ <a name='L675'></a><a href='#L675'>675</a>
741
+ <a name='L676'></a><a href='#L676'>676</a>
742
+ <a name='L677'></a><a href='#L677'>677</a>
743
+ <a name='L678'></a><a href='#L678'>678</a>
744
+ <a name='L679'></a><a href='#L679'>679</a>
745
+ <a name='L680'></a><a href='#L680'>680</a>
746
+ <a name='L681'></a><a href='#L681'>681</a>
747
+ <a name='L682'></a><a href='#L682'>682</a>
748
+ <a name='L683'></a><a href='#L683'>683</a>
749
+ <a name='L684'></a><a href='#L684'>684</a>
750
+ <a name='L685'></a><a href='#L685'>685</a>
751
+ <a name='L686'></a><a href='#L686'>686</a>
752
+ <a name='L687'></a><a href='#L687'>687</a>
753
+ <a name='L688'></a><a href='#L688'>688</a>
754
+ <a name='L689'></a><a href='#L689'>689</a>
755
+ <a name='L690'></a><a href='#L690'>690</a>
756
+ <a name='L691'></a><a href='#L691'>691</a>
757
+ <a name='L692'></a><a href='#L692'>692</a>
758
+ <a name='L693'></a><a href='#L693'>693</a>
759
+ <a name='L694'></a><a href='#L694'>694</a>
760
+ <a name='L695'></a><a href='#L695'>695</a>
761
+ <a name='L696'></a><a href='#L696'>696</a>
762
+ <a name='L697'></a><a href='#L697'>697</a>
763
+ <a name='L698'></a><a href='#L698'>698</a>
764
+ <a name='L699'></a><a href='#L699'>699</a>
765
+ <a name='L700'></a><a href='#L700'>700</a>
766
+ <a name='L701'></a><a href='#L701'>701</a>
767
+ <a name='L702'></a><a href='#L702'>702</a>
768
+ <a name='L703'></a><a href='#L703'>703</a>
769
+ <a name='L704'></a><a href='#L704'>704</a>
770
+ <a name='L705'></a><a href='#L705'>705</a>
771
+ <a name='L706'></a><a href='#L706'>706</a>
772
+ <a name='L707'></a><a href='#L707'>707</a>
773
+ <a name='L708'></a><a href='#L708'>708</a>
774
+ <a name='L709'></a><a href='#L709'>709</a>
775
+ <a name='L710'></a><a href='#L710'>710</a>
776
+ <a name='L711'></a><a href='#L711'>711</a>
777
+ <a name='L712'></a><a href='#L712'>712</a>
778
+ <a name='L713'></a><a href='#L713'>713</a>
779
+ <a name='L714'></a><a href='#L714'>714</a>
780
+ <a name='L715'></a><a href='#L715'>715</a>
781
+ <a name='L716'></a><a href='#L716'>716</a>
782
+ <a name='L717'></a><a href='#L717'>717</a>
783
+ <a name='L718'></a><a href='#L718'>718</a>
784
+ <a name='L719'></a><a href='#L719'>719</a>
785
+ <a name='L720'></a><a href='#L720'>720</a>
786
+ <a name='L721'></a><a href='#L721'>721</a>
787
+ <a name='L722'></a><a href='#L722'>722</a>
788
+ <a name='L723'></a><a href='#L723'>723</a>
789
+ <a name='L724'></a><a href='#L724'>724</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
735
790
  <span class="cline-any cline-yes">1x</span>
736
791
  <span class="cline-any cline-yes">1x</span>
737
792
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -772,13 +827,9 @@
772
827
  <span class="cline-any cline-neutral">&nbsp;</span>
773
828
  <span class="cline-any cline-neutral">&nbsp;</span>
774
829
  <span class="cline-any cline-neutral">&nbsp;</span>
775
- <span class="cline-any cline-yes">1x</span>
776
- <span class="cline-any cline-yes">1x</span>
777
- <span class="cline-any cline-neutral">&nbsp;</span>
778
830
  <span class="cline-any cline-neutral">&nbsp;</span>
779
831
  <span class="cline-any cline-yes">1x</span>
780
832
  <span class="cline-any cline-yes">1x</span>
781
- <span class="cline-any cline-yes">1x</span>
782
833
  <span class="cline-any cline-neutral">&nbsp;</span>
783
834
  <span class="cline-any cline-neutral">&nbsp;</span>
784
835
  <span class="cline-any cline-yes">1x</span>
@@ -786,7 +837,6 @@
786
837
  <span class="cline-any cline-yes">1x</span>
787
838
  <span class="cline-any cline-neutral">&nbsp;</span>
788
839
  <span class="cline-any cline-neutral">&nbsp;</span>
789
- <span class="cline-any cline-neutral">&nbsp;</span>
790
840
  <span class="cline-any cline-yes">1x</span>
791
841
  <span class="cline-any cline-yes">1x</span>
792
842
  <span class="cline-any cline-yes">1x</span>
@@ -1065,6 +1115,66 @@
1065
1115
  <span class="cline-any cline-yes">4x</span>
1066
1116
  <span class="cline-any cline-neutral">&nbsp;</span>
1067
1117
  <span class="cline-any cline-neutral">&nbsp;</span>
1118
+ <span class="cline-any cline-neutral">&nbsp;</span>
1119
+ <span class="cline-any cline-neutral">&nbsp;</span>
1120
+ <span class="cline-any cline-neutral">&nbsp;</span>
1121
+ <span class="cline-any cline-neutral">&nbsp;</span>
1122
+ <span class="cline-any cline-neutral">&nbsp;</span>
1123
+ <span class="cline-any cline-neutral">&nbsp;</span>
1124
+ <span class="cline-any cline-neutral">&nbsp;</span>
1125
+ <span class="cline-any cline-neutral">&nbsp;</span>
1126
+ <span class="cline-any cline-neutral">&nbsp;</span>
1127
+ <span class="cline-any cline-neutral">&nbsp;</span>
1128
+ <span class="cline-any cline-neutral">&nbsp;</span>
1129
+ <span class="cline-any cline-neutral">&nbsp;</span>
1130
+ <span class="cline-any cline-neutral">&nbsp;</span>
1131
+ <span class="cline-any cline-neutral">&nbsp;</span>
1132
+ <span class="cline-any cline-neutral">&nbsp;</span>
1133
+ <span class="cline-any cline-neutral">&nbsp;</span>
1134
+ <span class="cline-any cline-neutral">&nbsp;</span>
1135
+ <span class="cline-any cline-neutral">&nbsp;</span>
1136
+ <span class="cline-any cline-neutral">&nbsp;</span>
1137
+ <span class="cline-any cline-neutral">&nbsp;</span>
1138
+ <span class="cline-any cline-neutral">&nbsp;</span>
1139
+ <span class="cline-any cline-neutral">&nbsp;</span>
1140
+ <span class="cline-any cline-neutral">&nbsp;</span>
1141
+ <span class="cline-any cline-neutral">&nbsp;</span>
1142
+ <span class="cline-any cline-neutral">&nbsp;</span>
1143
+ <span class="cline-any cline-neutral">&nbsp;</span>
1144
+ <span class="cline-any cline-neutral">&nbsp;</span>
1145
+ <span class="cline-any cline-neutral">&nbsp;</span>
1146
+ <span class="cline-any cline-yes">1x</span>
1147
+ <span class="cline-any cline-neutral">&nbsp;</span>
1148
+ <span class="cline-any cline-yes">1x</span>
1149
+ <span class="cline-any cline-yes">6x</span>
1150
+ <span class="cline-any cline-neutral">&nbsp;</span>
1151
+ <span class="cline-any cline-neutral">&nbsp;</span>
1152
+ <span class="cline-any cline-yes">6x</span>
1153
+ <span class="cline-any cline-neutral">&nbsp;</span>
1154
+ <span class="cline-any cline-neutral">&nbsp;</span>
1155
+ <span class="cline-any cline-neutral">&nbsp;</span>
1156
+ <span class="cline-any cline-neutral">&nbsp;</span>
1157
+ <span class="cline-any cline-neutral">&nbsp;</span>
1158
+ <span class="cline-any cline-neutral">&nbsp;</span>
1159
+ <span class="cline-any cline-neutral">&nbsp;</span>
1160
+ <span class="cline-any cline-neutral">&nbsp;</span>
1161
+ <span class="cline-any cline-neutral">&nbsp;</span>
1162
+ <span class="cline-any cline-neutral">&nbsp;</span>
1163
+ <span class="cline-any cline-neutral">&nbsp;</span>
1164
+ <span class="cline-any cline-neutral">&nbsp;</span>
1165
+ <span class="cline-any cline-neutral">&nbsp;</span>
1166
+ <span class="cline-any cline-neutral">&nbsp;</span>
1167
+ <span class="cline-any cline-neutral">&nbsp;</span>
1168
+ <span class="cline-any cline-neutral">&nbsp;</span>
1169
+ <span class="cline-any cline-neutral">&nbsp;</span>
1170
+ <span class="cline-any cline-yes">1x</span>
1171
+ <span class="cline-any cline-neutral">&nbsp;</span>
1172
+ <span class="cline-any cline-yes">1x</span>
1173
+ <span class="cline-any cline-yes">8x</span>
1174
+ <span class="cline-any cline-neutral">&nbsp;</span>
1175
+ <span class="cline-any cline-neutral">&nbsp;</span>
1176
+ <span class="cline-any cline-neutral">&nbsp;</span>
1177
+ <span class="cline-any cline-neutral">&nbsp;</span>
1068
1178
  <span class="cline-any cline-yes">1x</span>
1069
1179
  <span class="cline-any cline-yes">2x</span>
1070
1180
  <span class="cline-any cline-no">&nbsp;</span>
@@ -1420,6 +1530,7 @@ import {ExpoIapConsole} from './utils/debug';
1420
1530
  &nbsp;
1421
1531
  // Types
1422
1532
  import type {
1533
+ ActiveSubscription,
1423
1534
  AndroidSubscriptionOfferInput,
1424
1535
  DeepLinkOptions,
1425
1536
  FetchProductsResult,
@@ -1448,12 +1559,6 @@ export * from './types';
1448
1559
  export * from './modules/android';
1449
1560
  export * from './modules/ios';
1450
1561
  &nbsp;
1451
- // Export subscription helpers
1452
- export {
1453
- <span class="fstat-no" title="function not covered" > getActiveSubscriptions,</span>
1454
- <span class="fstat-no" title="function not covered" > hasActiveSubscriptions,</span>
1455
- } from './helpers/subscription';
1456
- &nbsp;
1457
1562
  // Get the native constant value
1458
1563
  export enum OpenIapEvent {
1459
1564
  PurchaseUpdated = 'purchase-updated',
@@ -1733,6 +1838,66 @@ export const getAvailablePurchases: QueryField&lt;
1733
1838
  return normalizePurchaseArray(purchases as Purchase[]);
1734
1839
  };
1735
1840
  &nbsp;
1841
+ /**
1842
+ * Get all active subscriptions with detailed information.
1843
+ * Uses native OpenIAP module for accurate subscription status and renewal info.
1844
+ *
1845
+ * On iOS: Returns subscriptions with renewalInfoIOS containing pendingUpgradeProductId,
1846
+ * willAutoRenew, autoRenewPreference, and other renewal details.
1847
+ *
1848
+ * On Android: Filters available purchases to find active subscriptions (fallback implementation).
1849
+ *
1850
+ * @param subscriptionIds - Optional array of subscription product IDs to filter. If not provided, returns all active subscriptions.
1851
+ * @returns Promise resolving to array of active subscriptions with details
1852
+ *
1853
+ * @example
1854
+ * ```typescript
1855
+ * // Get all active subscriptions
1856
+ * const subs = await getActiveSubscriptions();
1857
+ *
1858
+ * // Get specific subscriptions
1859
+ * const premiumSubs = await getActiveSubscriptions(['premium', 'premium_year']);
1860
+ *
1861
+ * // Check for pending upgrades (iOS)
1862
+ * subs.forEach(sub =&gt; {
1863
+ * if (sub.renewalInfoIOS?.pendingUpgradeProductId) {
1864
+ * console.log(`Upgrade pending to: ${sub.renewalInfoIOS.pendingUpgradeProductId}`);
1865
+ * }
1866
+ * });
1867
+ * ```
1868
+ */
1869
+ export const getActiveSubscriptions: QueryField&lt;
1870
+ 'getActiveSubscriptions'
1871
+ &gt; = async (subscriptionIds) =&gt; {
1872
+ const result = await ExpoIapModule.getActiveSubscriptions(
1873
+ subscriptionIds ?? null,
1874
+ );
1875
+ return (result ?? []) as ActiveSubscription[];
1876
+ };
1877
+ &nbsp;
1878
+ /**
1879
+ * Check if user has any active subscriptions.
1880
+ *
1881
+ * @param subscriptionIds - Optional array of subscription product IDs to check. If not provided, checks all subscriptions.
1882
+ * @returns Promise resolving to true if user has at least one active subscription
1883
+ *
1884
+ * @example
1885
+ * ```typescript
1886
+ * // Check any active subscription
1887
+ * const hasAny = await hasActiveSubscriptions();
1888
+ *
1889
+ * // Check specific subscriptions
1890
+ * const hasPremium = await hasActiveSubscriptions(['premium', 'premium_year']);
1891
+ * ```
1892
+ */
1893
+ export const hasActiveSubscriptions: QueryField&lt;
1894
+ 'hasActiveSubscriptions'
1895
+ &gt; = async (subscriptionIds) =&gt; {
1896
+ return !!(await ExpoIapModule.hasActiveSubscriptions(
1897
+ subscriptionIds ?? null,
1898
+ ));
1899
+ };
1900
+ &nbsp;
1736
1901
  export const getStorefront: QueryField&lt;'getStorefront'&gt; = async () =&gt; {
1737
1902
  <span class="missing-if-branch" title="if path not taken" >I</span>if (Platform.OS !== 'ios' &amp;&amp; Platform.OS !== 'android') {
1738
1903
  <span class="cstat-no" title="statement not covered" > return '';</span>
@@ -2074,7 +2239,7 @@ export {<span class="fstat-no" title="function not covered" >ExpoIapConsole}</sp
2074
2239
  <div class='footer quiet pad2 space-top1 center small'>
2075
2240
  Code coverage generated by
2076
2241
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
2077
- at 2025-10-15T18:23:22.756Z
2242
+ at 2025-10-15T21:20:56.605Z
2078
2243
  </div>
2079
2244
  <script src="../prettify.js"></script>
2080
2245
  <script>
@@ -814,7 +814,7 @@ export const createAlternativeBillingTokenAndroid: MutationField&lt;
814
814
  <div class='footer quiet pad2 space-top1 center small'>
815
815
  Code coverage generated by
816
816
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
817
- at 2025-10-15T18:23:22.756Z
817
+ at 2025-10-15T21:20:56.605Z
818
818
  </div>
819
819
  <script src="../../prettify.js"></script>
820
820
  <script>
@@ -116,7 +116,7 @@
116
116
  <div class='footer quiet pad2 space-top1 center small'>
117
117
  Code coverage generated by
118
118
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
119
- at 2025-10-15T18:23:22.756Z
119
+ at 2025-10-15T21:20:56.605Z
120
120
  </div>
121
121
  <script src="../../prettify.js"></script>
122
122
  <script>
@@ -1267,7 +1267,7 @@ export const presentExternalPurchaseLinkIOS: MutationField&lt;
1267
1267
  <div class='footer quiet pad2 space-top1 center small'>
1268
1268
  Code coverage generated by
1269
1269
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1270
- at 2025-10-15T18:23:22.756Z
1270
+ at 2025-10-15T21:20:56.605Z
1271
1271
  </div>
1272
1272
  <script src="../../prettify.js"></script>
1273
1273
  <script>
@@ -23,9 +23,9 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">58.82% </span>
26
+ <span class="strong">52.94% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>10/17</span>
28
+ <span class='fraction'>9/17</span>
29
29
  </div>
30
30
 
31
31
 
@@ -37,16 +37,16 @@
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">71.42% </span>
40
+ <span class="strong">57.14% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>5/7</span>
42
+ <span class='fraction'>4/7</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">56.25% </span>
47
+ <span class="strong">50% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>9/16</span>
49
+ <span class='fraction'>8/16</span>
50
50
  </div>
51
51
 
52
52
 
@@ -137,7 +137,7 @@
137
137
  <span class="cline-any cline-neutral">&nbsp;</span>
138
138
  <span class="cline-any cline-neutral">&nbsp;</span>
139
139
  <span class="cline-any cline-neutral">&nbsp;</span>
140
- <span class="cline-any cline-yes">2x</span>
140
+ <span class="cline-any cline-yes">1x</span>
141
141
  <span class="cline-any cline-neutral">&nbsp;</span>
142
142
  <span class="cline-any cline-neutral">&nbsp;</span>
143
143
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -160,7 +160,7 @@
160
160
  <span class="cline-any cline-yes">6x</span>
161
161
  <span class="cline-any cline-neutral">&nbsp;</span>
162
162
  <span class="cline-any cline-neutral">&nbsp;</span>
163
- <span class="cline-any cline-yes">2x</span>
163
+ <span class="cline-any cline-yes">1x</span>
164
164
  <span class="cline-any cline-neutral">&nbsp;</span>
165
165
  <span class="cline-any cline-no">&nbsp;</span>
166
166
  <span class="cline-any cline-no">&nbsp;</span>
@@ -182,7 +182,7 @@
182
182
  <span class="cline-any cline-neutral">&nbsp;</span>
183
183
  <span class="cline-any cline-neutral">&nbsp;</span>
184
184
  <span class="cline-any cline-neutral">&nbsp;</span>
185
- <span class="cline-any cline-yes">1x</span>
185
+ <span class="cline-any cline-no">&nbsp;</span>
186
186
  <span class="cline-any cline-neutral">&nbsp;</span>
187
187
  <span class="cline-any cline-neutral">&nbsp;</span>
188
188
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -194,7 +194,7 @@
194
194
  <span class="cline-any cline-neutral">&nbsp;</span>
195
195
  <span class="cline-any cline-neutral">&nbsp;</span>
196
196
  <span class="cline-any cline-neutral">&nbsp;</span>
197
- <span class="cline-any cline-yes">2x</span>
197
+ <span class="cline-any cline-yes">1x</span>
198
198
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
199
199
  * Debug logger for Expo IAP
200
200
  * Only logs when explicitly enabled for library development
@@ -246,9 +246,9 @@ const createConsole = () =&gt; ({
246
246
  console.warn('[Expo-IAP]', ...args);
247
247
  },
248
248
  &nbsp;
249
- error: (...args: any[]) =&gt; {
249
+ error: <span class="fstat-no" title="function not covered" >(.</span>..args: any[]) =&gt; {
250
250
  // Errors are always shown
251
- console.error('[Expo-IAP]', ...args);
251
+ <span class="cstat-no" title="statement not covered" > console.error('[Expo-IAP]', ...args);</span>
252
252
  },
253
253
  &nbsp;
254
254
  info: <span class="fstat-no" title="function not covered" >(.</span>..args: any[]) =&gt; {
@@ -268,7 +268,7 @@ export const ExpoIapConsole = createConsole();
268
268
  <div class='footer quiet pad2 space-top1 center small'>
269
269
  Code coverage generated by
270
270
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
271
- at 2025-10-15T18:23:22.756Z
271
+ at 2025-10-15T21:20:56.605Z
272
272
  </div>
273
273
  <script src="../../prettify.js"></script>
274
274
  <script>
@@ -1111,7 +1111,7 @@ export function getUserFriendlyErrorMessage(error: ErrorLike): string {
1111
1111
  <div class='footer quiet pad2 space-top1 center small'>
1112
1112
  Code coverage generated by
1113
1113
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1114
- at 2025-10-15T18:23:22.756Z
1114
+ at 2025-10-15T21:20:56.605Z
1115
1115
  </div>
1116
1116
  <script src="../../prettify.js"></script>
1117
1117
  <script>