expo-iap 3.1.1-rc.2 → 3.1.1

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 (48) hide show
  1. package/android/src/main/java/expo/modules/iap/ExpoIapModule.kt +0 -11
  2. package/build/ExpoIapModule.d.ts +0 -1
  3. package/build/ExpoIapModule.d.ts.map +1 -1
  4. package/build/ExpoIapModule.js +4 -29
  5. package/build/ExpoIapModule.js.map +1 -1
  6. package/build/useIAP.d.ts +0 -2
  7. package/build/useIAP.d.ts.map +1 -1
  8. package/build/useIAP.js +3 -8
  9. package/build/useIAP.js.map +1 -1
  10. package/expo-module.config.json +3 -10
  11. package/package.json +3 -4
  12. package/plugin/build/withIAP.d.ts +9 -22
  13. package/plugin/build/withIAP.js +9 -157
  14. package/plugin/jest.config.js +3 -13
  15. package/plugin/src/expoConfig.augmentation.d.ts +1 -30
  16. package/plugin/src/withIAP.ts +18 -258
  17. package/plugin/tsconfig.json +1 -2
  18. package/plugin/tsconfig.tsbuildinfo +1 -1
  19. package/src/ExpoIapModule.ts +4 -45
  20. package/src/useIAP.ts +3 -11
  21. package/coverage/clover.xml +0 -497
  22. package/coverage/coverage-final.json +0 -6
  23. package/coverage/lcov-report/base.css +0 -224
  24. package/coverage/lcov-report/block-navigation.js +0 -87
  25. package/coverage/lcov-report/favicon.png +0 -0
  26. package/coverage/lcov-report/index.html +0 -161
  27. package/coverage/lcov-report/prettify.css +0 -1
  28. package/coverage/lcov-report/prettify.js +0 -2
  29. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  30. package/coverage/lcov-report/sorter.js +0 -196
  31. package/coverage/lcov-report/src/ExpoIap.types.ts.html +0 -1243
  32. package/coverage/lcov-report/src/PurchaseError.ts.html +0 -787
  33. package/coverage/lcov-report/src/helpers/index.html +0 -116
  34. package/coverage/lcov-report/src/helpers/subscription.ts.html +0 -496
  35. package/coverage/lcov-report/src/index.html +0 -116
  36. package/coverage/lcov-report/src/index.ts.html +0 -1993
  37. package/coverage/lcov-report/src/modules/android.ts.html +0 -550
  38. package/coverage/lcov-report/src/modules/index.html +0 -131
  39. package/coverage/lcov-report/src/modules/ios.ts.html +0 -1222
  40. package/coverage/lcov-report/src/purchase-error.ts.html +0 -880
  41. package/coverage/lcov-report/src/types/ExpoIapAndroid.types.ts.html +0 -493
  42. package/coverage/lcov-report/src/types/index.html +0 -116
  43. package/coverage/lcov-report/src/useIap.ts.html +0 -1483
  44. package/coverage/lcov-report/src/utils/errorMapping.ts.html +0 -1069
  45. package/coverage/lcov-report/src/utils/index.html +0 -116
  46. package/coverage/lcov-report/src/utils/purchase.ts.html +0 -241
  47. package/coverage/lcov.info +0 -929
  48. package/ios/onside/OnsideIapModule.swift +0 -489
@@ -1,550 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for src/modules/android.ts</title>
7
- <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../../prettify.css" />
9
- <link rel="stylesheet" href="../../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
11
- <meta name="viewport" content="width=device-width, initial-scale=1" />
12
- <style type='text/css'>
13
- .coverage-summary .sorter {
14
- background-image: url(../../sort-arrow-sprite.png);
15
- }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <div class='wrapper'>
21
- <div class='pad1'>
22
- <h1><a href="../../index.html">All files</a> / <a href="index.html">src/modules</a> android.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">100% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>38/38</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">95.45% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>21/22</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>5/5</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">100% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>35/35</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
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
- </p>
57
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line high'></div>
65
- <pre><table class="coverage">
66
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
- <a name='L2'></a><a href='#L2'>2</a>
68
- <a name='L3'></a><a href='#L3'>3</a>
69
- <a name='L4'></a><a href='#L4'>4</a>
70
- <a name='L5'></a><a href='#L5'>5</a>
71
- <a name='L6'></a><a href='#L6'>6</a>
72
- <a name='L7'></a><a href='#L7'>7</a>
73
- <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a>
75
- <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a>
77
- <a name='L12'></a><a href='#L12'>12</a>
78
- <a name='L13'></a><a href='#L13'>13</a>
79
- <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a>
82
- <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a>
84
- <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a>
109
- <a name='L44'></a><a href='#L44'>44</a>
110
- <a name='L45'></a><a href='#L45'>45</a>
111
- <a name='L46'></a><a href='#L46'>46</a>
112
- <a name='L47'></a><a href='#L47'>47</a>
113
- <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a>
115
- <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a>
118
- <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a>
121
- <a name='L56'></a><a href='#L56'>56</a>
122
- <a name='L57'></a><a href='#L57'>57</a>
123
- <a name='L58'></a><a href='#L58'>58</a>
124
- <a name='L59'></a><a href='#L59'>59</a>
125
- <a name='L60'></a><a href='#L60'>60</a>
126
- <a name='L61'></a><a href='#L61'>61</a>
127
- <a name='L62'></a><a href='#L62'>62</a>
128
- <a name='L63'></a><a href='#L63'>63</a>
129
- <a name='L64'></a><a href='#L64'>64</a>
130
- <a name='L65'></a><a href='#L65'>65</a>
131
- <a name='L66'></a><a href='#L66'>66</a>
132
- <a name='L67'></a><a href='#L67'>67</a>
133
- <a name='L68'></a><a href='#L68'>68</a>
134
- <a name='L69'></a><a href='#L69'>69</a>
135
- <a name='L70'></a><a href='#L70'>70</a>
136
- <a name='L71'></a><a href='#L71'>71</a>
137
- <a name='L72'></a><a href='#L72'>72</a>
138
- <a name='L73'></a><a href='#L73'>73</a>
139
- <a name='L74'></a><a href='#L74'>74</a>
140
- <a name='L75'></a><a href='#L75'>75</a>
141
- <a name='L76'></a><a href='#L76'>76</a>
142
- <a name='L77'></a><a href='#L77'>77</a>
143
- <a name='L78'></a><a href='#L78'>78</a>
144
- <a name='L79'></a><a href='#L79'>79</a>
145
- <a name='L80'></a><a href='#L80'>80</a>
146
- <a name='L81'></a><a href='#L81'>81</a>
147
- <a name='L82'></a><a href='#L82'>82</a>
148
- <a name='L83'></a><a href='#L83'>83</a>
149
- <a name='L84'></a><a href='#L84'>84</a>
150
- <a name='L85'></a><a href='#L85'>85</a>
151
- <a name='L86'></a><a href='#L86'>86</a>
152
- <a name='L87'></a><a href='#L87'>87</a>
153
- <a name='L88'></a><a href='#L88'>88</a>
154
- <a name='L89'></a><a href='#L89'>89</a>
155
- <a name='L90'></a><a href='#L90'>90</a>
156
- <a name='L91'></a><a href='#L91'>91</a>
157
- <a name='L92'></a><a href='#L92'>92</a>
158
- <a name='L93'></a><a href='#L93'>93</a>
159
- <a name='L94'></a><a href='#L94'>94</a>
160
- <a name='L95'></a><a href='#L95'>95</a>
161
- <a name='L96'></a><a href='#L96'>96</a>
162
- <a name='L97'></a><a href='#L97'>97</a>
163
- <a name='L98'></a><a href='#L98'>98</a>
164
- <a name='L99'></a><a href='#L99'>99</a>
165
- <a name='L100'></a><a href='#L100'>100</a>
166
- <a name='L101'></a><a href='#L101'>101</a>
167
- <a name='L102'></a><a href='#L102'>102</a>
168
- <a name='L103'></a><a href='#L103'>103</a>
169
- <a name='L104'></a><a href='#L104'>104</a>
170
- <a name='L105'></a><a href='#L105'>105</a>
171
- <a name='L106'></a><a href='#L106'>106</a>
172
- <a name='L107'></a><a href='#L107'>107</a>
173
- <a name='L108'></a><a href='#L108'>108</a>
174
- <a name='L109'></a><a href='#L109'>109</a>
175
- <a name='L110'></a><a href='#L110'>110</a>
176
- <a name='L111'></a><a href='#L111'>111</a>
177
- <a name='L112'></a><a href='#L112'>112</a>
178
- <a name='L113'></a><a href='#L113'>113</a>
179
- <a name='L114'></a><a href='#L114'>114</a>
180
- <a name='L115'></a><a href='#L115'>115</a>
181
- <a name='L116'></a><a href='#L116'>116</a>
182
- <a name='L117'></a><a href='#L117'>117</a>
183
- <a name='L118'></a><a href='#L118'>118</a>
184
- <a name='L119'></a><a href='#L119'>119</a>
185
- <a name='L120'></a><a href='#L120'>120</a>
186
- <a name='L121'></a><a href='#L121'>121</a>
187
- <a name='L122'></a><a href='#L122'>122</a>
188
- <a name='L123'></a><a href='#L123'>123</a>
189
- <a name='L124'></a><a href='#L124'>124</a>
190
- <a name='L125'></a><a href='#L125'>125</a>
191
- <a name='L126'></a><a href='#L126'>126</a>
192
- <a name='L127'></a><a href='#L127'>127</a>
193
- <a name='L128'></a><a href='#L128'>128</a>
194
- <a name='L129'></a><a href='#L129'>129</a>
195
- <a name='L130'></a><a href='#L130'>130</a>
196
- <a name='L131'></a><a href='#L131'>131</a>
197
- <a name='L132'></a><a href='#L132'>132</a>
198
- <a name='L133'></a><a href='#L133'>133</a>
199
- <a name='L134'></a><a href='#L134'>134</a>
200
- <a name='L135'></a><a href='#L135'>135</a>
201
- <a name='L136'></a><a href='#L136'>136</a>
202
- <a name='L137'></a><a href='#L137'>137</a>
203
- <a name='L138'></a><a href='#L138'>138</a>
204
- <a name='L139'></a><a href='#L139'>139</a>
205
- <a name='L140'></a><a href='#L140'>140</a>
206
- <a name='L141'></a><a href='#L141'>141</a>
207
- <a name='L142'></a><a href='#L142'>142</a>
208
- <a name='L143'></a><a href='#L143'>143</a>
209
- <a name='L144'></a><a href='#L144'>144</a>
210
- <a name='L145'></a><a href='#L145'>145</a>
211
- <a name='L146'></a><a href='#L146'>146</a>
212
- <a name='L147'></a><a href='#L147'>147</a>
213
- <a name='L148'></a><a href='#L148'>148</a>
214
- <a name='L149'></a><a href='#L149'>149</a>
215
- <a name='L150'></a><a href='#L150'>150</a>
216
- <a name='L151'></a><a href='#L151'>151</a>
217
- <a name='L152'></a><a href='#L152'>152</a>
218
- <a name='L153'></a><a href='#L153'>153</a>
219
- <a name='L154'></a><a href='#L154'>154</a>
220
- <a name='L155'></a><a href='#L155'>155</a>
221
- <a name='L156'></a><a href='#L156'>156</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
222
- <span class="cline-any cline-yes">2x</span>
223
- <span class="cline-any cline-neutral">&nbsp;</span>
224
- <span class="cline-any cline-neutral">&nbsp;</span>
225
- <span class="cline-any cline-yes">2x</span>
226
- <span class="cline-any cline-neutral">&nbsp;</span>
227
- <span class="cline-any cline-neutral">&nbsp;</span>
228
- <span class="cline-any cline-neutral">&nbsp;</span>
229
- <span class="cline-any cline-neutral">&nbsp;</span>
230
- <span class="cline-any cline-neutral">&nbsp;</span>
231
- <span class="cline-any cline-neutral">&nbsp;</span>
232
- <span class="cline-any cline-neutral">&nbsp;</span>
233
- <span class="cline-any cline-neutral">&nbsp;</span>
234
- <span class="cline-any cline-neutral">&nbsp;</span>
235
- <span class="cline-any cline-yes">2x</span>
236
- <span class="cline-any cline-neutral">&nbsp;</span>
237
- <span class="cline-any cline-neutral">&nbsp;</span>
238
- <span class="cline-any cline-yes">8x</span>
239
- <span class="cline-any cline-neutral">&nbsp;</span>
240
- <span class="cline-any cline-neutral">&nbsp;</span>
241
- <span class="cline-any cline-neutral">&nbsp;</span>
242
- <span class="cline-any cline-neutral">&nbsp;</span>
243
- <span class="cline-any cline-neutral">&nbsp;</span>
244
- <span class="cline-any cline-neutral">&nbsp;</span>
245
- <span class="cline-any cline-neutral">&nbsp;</span>
246
- <span class="cline-any cline-neutral">&nbsp;</span>
247
- <span class="cline-any cline-neutral">&nbsp;</span>
248
- <span class="cline-any cline-neutral">&nbsp;</span>
249
- <span class="cline-any cline-neutral">&nbsp;</span>
250
- <span class="cline-any cline-neutral">&nbsp;</span>
251
- <span class="cline-any cline-neutral">&nbsp;</span>
252
- <span class="cline-any cline-neutral">&nbsp;</span>
253
- <span class="cline-any cline-neutral">&nbsp;</span>
254
- <span class="cline-any cline-neutral">&nbsp;</span>
255
- <span class="cline-any cline-neutral">&nbsp;</span>
256
- <span class="cline-any cline-neutral">&nbsp;</span>
257
- <span class="cline-any cline-neutral">&nbsp;</span>
258
- <span class="cline-any cline-neutral">&nbsp;</span>
259
- <span class="cline-any cline-neutral">&nbsp;</span>
260
- <span class="cline-any cline-neutral">&nbsp;</span>
261
- <span class="cline-any cline-neutral">&nbsp;</span>
262
- <span class="cline-any cline-yes">2x</span>
263
- <span class="cline-any cline-neutral">&nbsp;</span>
264
- <span class="cline-any cline-neutral">&nbsp;</span>
265
- <span class="cline-any cline-yes">5x</span>
266
- <span class="cline-any cline-yes">5x</span>
267
- <span class="cline-any cline-neutral">&nbsp;</span>
268
- <span class="cline-any cline-neutral">&nbsp;</span>
269
- <span class="cline-any cline-yes">5x</span>
270
- <span class="cline-any cline-yes">1x</span>
271
- <span class="cline-any cline-neutral">&nbsp;</span>
272
- <span class="cline-any cline-neutral">&nbsp;</span>
273
- <span class="cline-any cline-neutral">&nbsp;</span>
274
- <span class="cline-any cline-neutral">&nbsp;</span>
275
- <span class="cline-any cline-neutral">&nbsp;</span>
276
- <span class="cline-any cline-neutral">&nbsp;</span>
277
- <span class="cline-any cline-yes">4x</span>
278
- <span class="cline-any cline-yes">3x</span>
279
- <span class="cline-any cline-neutral">&nbsp;</span>
280
- <span class="cline-any cline-neutral">&nbsp;</span>
281
- <span class="cline-any cline-neutral">&nbsp;</span>
282
- <span class="cline-any cline-yes">1x</span>
283
- <span class="cline-any cline-neutral">&nbsp;</span>
284
- <span class="cline-any cline-neutral">&nbsp;</span>
285
- <span class="cline-any cline-yes">1x</span>
286
- <span class="cline-any cline-yes">1x</span>
287
- <span class="cline-any cline-neutral">&nbsp;</span>
288
- <span class="cline-any cline-neutral">&nbsp;</span>
289
- <span class="cline-any cline-neutral">&nbsp;</span>
290
- <span class="cline-any cline-neutral">&nbsp;</span>
291
- <span class="cline-any cline-neutral">&nbsp;</span>
292
- <span class="cline-any cline-neutral">&nbsp;</span>
293
- <span class="cline-any cline-neutral">&nbsp;</span>
294
- <span class="cline-any cline-neutral">&nbsp;</span>
295
- <span class="cline-any cline-neutral">&nbsp;</span>
296
- <span class="cline-any cline-neutral">&nbsp;</span>
297
- <span class="cline-any cline-neutral">&nbsp;</span>
298
- <span class="cline-any cline-neutral">&nbsp;</span>
299
- <span class="cline-any cline-neutral">&nbsp;</span>
300
- <span class="cline-any cline-neutral">&nbsp;</span>
301
- <span class="cline-any cline-yes">2x</span>
302
- <span class="cline-any cline-neutral">&nbsp;</span>
303
- <span class="cline-any cline-neutral">&nbsp;</span>
304
- <span class="cline-any cline-neutral">&nbsp;</span>
305
- <span class="cline-any cline-neutral">&nbsp;</span>
306
- <span class="cline-any cline-neutral">&nbsp;</span>
307
- <span class="cline-any cline-neutral">&nbsp;</span>
308
- <span class="cline-any cline-neutral">&nbsp;</span>
309
- <span class="cline-any cline-neutral">&nbsp;</span>
310
- <span class="cline-any cline-neutral">&nbsp;</span>
311
- <span class="cline-any cline-neutral">&nbsp;</span>
312
- <span class="cline-any cline-neutral">&nbsp;</span>
313
- <span class="cline-any cline-neutral">&nbsp;</span>
314
- <span class="cline-any cline-yes">2x</span>
315
- <span class="cline-any cline-neutral">&nbsp;</span>
316
- <span class="cline-any cline-neutral">&nbsp;</span>
317
- <span class="cline-any cline-yes">2x</span>
318
- <span class="cline-any cline-neutral">&nbsp;</span>
319
- <span class="cline-any cline-neutral">&nbsp;</span>
320
- <span class="cline-any cline-neutral">&nbsp;</span>
321
- <span class="cline-any cline-yes">2x</span>
322
- <span class="cline-any cline-neutral">&nbsp;</span>
323
- <span class="cline-any cline-neutral">&nbsp;</span>
324
- <span class="cline-any cline-neutral">&nbsp;</span>
325
- <span class="cline-any cline-neutral">&nbsp;</span>
326
- <span class="cline-any cline-neutral">&nbsp;</span>
327
- <span class="cline-any cline-neutral">&nbsp;</span>
328
- <span class="cline-any cline-neutral">&nbsp;</span>
329
- <span class="cline-any cline-yes">2x</span>
330
- <span class="cline-any cline-yes">1x</span>
331
- <span class="cline-any cline-neutral">&nbsp;</span>
332
- <span class="cline-any cline-neutral">&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-yes">1x</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>
342
- <span class="cline-any cline-neutral">&nbsp;</span>
343
- <span class="cline-any cline-neutral">&nbsp;</span>
344
- <span class="cline-any cline-yes">2x</span>
345
- <span class="cline-any cline-neutral">&nbsp;</span>
346
- <span class="cline-any cline-yes">2x</span>
347
- <span class="cline-any cline-yes">5x</span>
348
- <span class="cline-any cline-neutral">&nbsp;</span>
349
- <span class="cline-any cline-yes">5x</span>
350
- <span class="cline-any cline-yes">1x</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-yes">4x</span>
354
- <span class="cline-any cline-yes">3x</span>
355
- <span class="cline-any cline-yes">3x</span>
356
- <span class="cline-any cline-yes">1x</span>
357
- <span class="cline-any cline-neutral">&nbsp;</span>
358
- <span class="cline-any cline-yes">2x</span>
359
- <span class="cline-any cline-yes">2x</span>
360
- <span class="cline-any cline-neutral">&nbsp;</span>
361
- <span class="cline-any cline-neutral">&nbsp;</span>
362
- <span class="cline-any cline-neutral">&nbsp;</span>
363
- <span class="cline-any cline-yes">1x</span>
364
- <span class="cline-any cline-neutral">&nbsp;</span>
365
- <span class="cline-any cline-neutral">&nbsp;</span>
366
- <span class="cline-any cline-neutral">&nbsp;</span>
367
- <span class="cline-any cline-neutral">&nbsp;</span>
368
- <span class="cline-any cline-neutral">&nbsp;</span>
369
- <span class="cline-any cline-neutral">&nbsp;</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-yes">2x</span>
374
- <span class="cline-any cline-yes">1x</span>
375
- <span class="cline-any cline-neutral">&nbsp;</span>
376
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">// External dependencies
377
- import {Linking} from 'react-native';
378
- &nbsp;
379
- // Internal modules
380
- import ExpoIapModule from '../ExpoIapModule';
381
- &nbsp;
382
- // Types
383
- import type {
384
- DeepLinkOptions,
385
- MutationField,
386
- ReceiptValidationResultAndroid,
387
- } from '../types';
388
- &nbsp;
389
- // Type guards
390
- export function isProductAndroid&lt;T extends {platform?: string}&gt;(
391
- item: unknown,
392
- ): item is T &amp; {platform: 'android'} {
393
- return (
394
- item != null &amp;&amp;
395
- typeof item === 'object' &amp;&amp;
396
- 'platform' in item &amp;&amp;
397
- typeof (item as any).platform === 'string' &amp;&amp;
398
- (item as any).platform.toLowerCase() === 'android'
399
- );
400
- }
401
- &nbsp;
402
- /**
403
- * Deep link to subscriptions screen on Android.
404
- * @param {Object} params - The parameters object
405
- * @param {string} params.skuAndroid - The product's SKU (on Android)
406
- * @param {string} params.packageNameAndroid - The package name of your Android app (e.g., 'com.example.app')
407
- * @returns {Promise&lt;void&gt;}
408
- *
409
- * @example
410
- * ```typescript
411
- * await deepLinkToSubscriptionsAndroid({
412
- * skuAndroid: 'subscription_id',
413
- * packageNameAndroid: 'com.example.app'
414
- * });
415
- * ```
416
- */
417
- export const deepLinkToSubscriptionsAndroid = async (
418
- options?: DeepLinkOptions | null,
419
- ): Promise&lt;void&gt; =&gt; {
420
- const sku = options?.skuAndroid ?? undefined;
421
- const packageName = options?.packageNameAndroid ?? undefined;
422
- &nbsp;
423
- // Prefer native deep link implementation via OpenIAP module
424
- if (ExpoIapModule?.deepLinkToSubscriptionsAndroid) {
425
- return (ExpoIapModule as any).deepLinkToSubscriptionsAndroid({
426
- skuAndroid: sku,
427
- packageNameAndroid: packageName,
428
- });
429
- }
430
- &nbsp;
431
- // Fallback to Linking if native method unavailable
432
- if (!packageName) {
433
- throw new Error(
434
- 'packageName is required for deepLinkToSubscriptionsAndroid',
435
- );
436
- }
437
- const base = `https://play.google.com/store/account/subscriptions?package=${encodeURIComponent(
438
- packageName,
439
- )}`;
440
- const url = sku ? `${base}&amp;sku=${encodeURIComponent(sku)}` : <span class="branch-1 cbranch-no" title="branch not covered" >base;</span>
441
- return Linking.openURL(url);
442
- };
443
- &nbsp;
444
- /**
445
- * Validate receipt for Android. NOTE: This method is here for debugging purposes only. Including
446
- * your access token in the binary you ship to users is potentially dangerous.
447
- * Use server side validation instead for your production builds
448
- * @param {Object} params - The parameters object
449
- * @param {string} params.packageName - package name of your app.
450
- * @param {string} params.productId - product id for your in app product.
451
- * @param {string} params.productToken - token for your purchase (called 'token' in the API documentation).
452
- * @param {string} params.accessToken - OAuth access token with androidpublisher scope. Required for authentication.
453
- * @param {boolean} params.isSub - whether this is subscription or in-app. `true` for subscription.
454
- * @returns {Promise&lt;ReceiptAndroid&gt;}
455
- */
456
- export const validateReceiptAndroid = async ({
457
- packageName,
458
- productId,
459
- productToken,
460
- accessToken,
461
- isSub,
462
- }: {
463
- packageName: string;
464
- productId: string;
465
- productToken: string;
466
- accessToken: string;
467
- isSub?: boolean;
468
- }): Promise&lt;ReceiptValidationResultAndroid&gt; =&gt; {
469
- const type = isSub ? 'subscriptions' : 'products';
470
- &nbsp;
471
- const url =
472
- 'https://androidpublisher.googleapis.com/androidpublisher/v3/applications' +
473
- `/${packageName}/purchases/${type}/${productId}` +
474
- `/tokens/${productToken}`;
475
- &nbsp;
476
- const response = await fetch(url, {
477
- method: 'GET',
478
- headers: {
479
- 'Content-Type': 'application/json',
480
- Authorization: `Bearer ${accessToken}`,
481
- },
482
- });
483
- &nbsp;
484
- if (!response.ok) {
485
- throw Object.assign(new Error(response.statusText), {
486
- statusCode: response.status,
487
- });
488
- }
489
- &nbsp;
490
- return response.json();
491
- };
492
- &nbsp;
493
- /**
494
- * Acknowledge a product (on Android.) No-op on iOS.
495
- * @param {Object} params - The parameters object
496
- * @param {string} params.token - The product's token (on Android)
497
- * @returns {Promise&lt;VoidResult | void&gt;}
498
- */
499
- export const acknowledgePurchaseAndroid: MutationField&lt;
500
- 'acknowledgePurchaseAndroid'
501
- &gt; = async (purchaseToken) =&gt; {
502
- const result = await ExpoIapModule.acknowledgePurchaseAndroid(purchaseToken);
503
- &nbsp;
504
- if (typeof result === 'boolean') {
505
- return result;
506
- }
507
- &nbsp;
508
- if (result &amp;&amp; typeof result === 'object') {
509
- const record = result as Record&lt;string, unknown&gt;;
510
- if (typeof record.success === 'boolean') {
511
- return record.success;
512
- }
513
- if (typeof record.responseCode === 'number') {
514
- return record.responseCode === 0;
515
- }
516
- }
517
- &nbsp;
518
- return true;
519
- };
520
- &nbsp;
521
- /**
522
- * Open the Google Play Store to redeem offer codes (Android only).
523
- * Note: Google Play does not provide a direct API to redeem codes within the app.
524
- * This function opens the Play Store where users can manually enter their codes.
525
- *
526
- * @returns {Promise&lt;void&gt;}
527
- */
528
- export const openRedeemOfferCodeAndroid = async (): Promise&lt;void&gt; =&gt; {
529
- return Linking.openURL(`https://play.google.com/redeem?code=`);
530
- };
531
- &nbsp;</pre></td></tr></table></pre>
532
-
533
- <div class='push'></div><!-- for sticky footer -->
534
- </div><!-- /wrapper -->
535
- <div class='footer quiet pad2 space-top1 center small'>
536
- Code coverage generated by
537
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
538
- at 2025-09-21T17:41:08.551Z
539
- </div>
540
- <script src="../../prettify.js"></script>
541
- <script>
542
- window.onload = function () {
543
- prettyPrint();
544
- };
545
- </script>
546
- <script src="../../sorter.js"></script>
547
- <script src="../../block-navigation.js"></script>
548
- </body>
549
- </html>
550
-