expo-iap 3.2.1 → 3.3.0-rc.2

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 (30) hide show
  1. package/coverage/clover.xml +7 -7
  2. package/coverage/coverage-final.json +5 -5
  3. package/coverage/lcov-report/block-navigation.js +1 -1
  4. package/coverage/lcov-report/index.html +1 -1
  5. package/coverage/lcov-report/sorter.js +7 -21
  6. package/coverage/lcov-report/src/ExpoIap.types.ts.html +1396 -0
  7. package/coverage/lcov-report/src/helpers/index.html +116 -0
  8. package/coverage/lcov-report/src/helpers/subscription.ts.html +499 -0
  9. package/coverage/lcov-report/src/index.html +1 -1
  10. package/coverage/lcov-report/src/index.ts.html +1 -1
  11. package/coverage/lcov-report/src/modules/android.ts.html +1 -1
  12. package/coverage/lcov-report/src/modules/index.html +1 -1
  13. package/coverage/lcov-report/src/modules/ios.ts.html +1 -1
  14. package/coverage/lcov-report/src/onside/ExpoOnsideMarketplaceAvailabilityModule.ts.html +145 -0
  15. package/coverage/lcov-report/src/onside/index.html +131 -0
  16. package/coverage/lcov-report/src/onside/index.ts.html +253 -0
  17. package/coverage/lcov-report/src/types/ExpoIapAndroid.types.ts.html +502 -0
  18. package/coverage/lcov-report/src/types/index.html +116 -0
  19. package/coverage/lcov-report/src/useIAP.ts.html +1654 -0
  20. package/coverage/lcov-report/src/utils/constants.ts.html +127 -0
  21. package/coverage/lcov-report/src/utils/debug.ts.html +1 -1
  22. package/coverage/lcov-report/src/utils/errorMapping.ts.html +1 -1
  23. package/coverage/lcov-report/src/utils/index.html +1 -1
  24. package/ios/expoiap.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  25. package/ios/expoiap.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  26. package/package.json +1 -1
  27. package/plugin/build/withIAP.d.ts +5 -8
  28. package/plugin/build/withIAP.js +3 -12
  29. package/plugin/src/withIAP.ts +9 -18
  30. package/plugin/tsconfig.tsbuildinfo +1 -1
@@ -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-12-13T16:00:09.743Z
119
+ at 2025-12-13T05:45:54.833Z
120
120
  </div>
121
121
  <script src="../../prettify.js"></script>
122
122
  <script>
@@ -1270,7 +1270,7 @@ export const presentExternalPurchaseLinkIOS: MutationField&lt;
1270
1270
  <div class='footer quiet pad2 space-top1 center small'>
1271
1271
  Code coverage generated by
1272
1272
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1273
- at 2025-12-13T16:00:09.743Z
1273
+ at 2025-12-13T05:45:54.833Z
1274
1274
  </div>
1275
1275
  <script src="../../prettify.js"></script>
1276
1276
  <script>
@@ -0,0 +1,145 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/onside/ExpoOnsideMarketplaceAvailabilityModule.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/onside</a> ExpoOnsideMarketplaceAvailabilityModule.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">66.66% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>4/6</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">100% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>0/0</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">50% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>1/2</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">66.66% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>4/6</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 medium'></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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">4x</span>
87
+ <span class="cline-any cline-neutral">&nbsp;</span>
88
+ <span class="cline-any cline-neutral">&nbsp;</span>
89
+ <span class="cline-any cline-neutral">&nbsp;</span>
90
+ <span class="cline-any cline-neutral">&nbsp;</span>
91
+ <span class="cline-any cline-neutral">&nbsp;</span>
92
+ <span class="cline-any cline-neutral">&nbsp;</span>
93
+ <span class="cline-any cline-neutral">&nbsp;</span>
94
+ <span class="cline-any cline-yes">4x</span>
95
+ <span class="cline-any cline-neutral">&nbsp;</span>
96
+ <span class="cline-any cline-yes">4x</span>
97
+ <span class="cline-any cline-yes">4x</span>
98
+ <span class="cline-any cline-neutral">&nbsp;</span>
99
+ <span class="cline-any cline-no">&nbsp;</span>
100
+ <span class="cline-any cline-neutral">&nbsp;</span>
101
+ <span class="cline-any cline-no">&nbsp;</span>
102
+ <span class="cline-any cline-neutral">&nbsp;</span>
103
+ <span class="cline-any cline-neutral">&nbsp;</span>
104
+ <span class="cline-any cline-neutral">&nbsp;</span>
105
+ <span class="cline-any cline-neutral">&nbsp;</span>
106
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import {requireNativeModule} from 'expo-modules-core';
107
+ &nbsp;
108
+ export type InstalledFromOnside = boolean | null | string;
109
+ &nbsp;
110
+ type NativeModuleType = {
111
+ checkInstallationFromOnsideAsync(): Promise&lt;InstalledFromOnside&gt;;
112
+ };
113
+ &nbsp;
114
+ export const ExpoOnsideMarketplaceAvailabilityModule: NativeModuleType =
115
+ (() =&gt; {
116
+ try {
117
+ return requireNativeModule&lt;NativeModuleType&gt;('ExpoOnsideModule');
118
+ } catch {
119
+ <span class="cstat-no" title="statement not covered" > return {</span>
120
+ <span class="fstat-no" title="function not covered" > async </span>checkInstallationFromOnsideAsync() {
121
+ <span class="cstat-no" title="statement not covered" > return null;</span>
122
+ },
123
+ };
124
+ }
125
+ })();
126
+ &nbsp;</pre></td></tr></table></pre>
127
+
128
+ <div class='push'></div><!-- for sticky footer -->
129
+ </div><!-- /wrapper -->
130
+ <div class='footer quiet pad2 space-top1 center small'>
131
+ Code coverage generated by
132
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
133
+ at 2025-11-10T17:39:47.259Z
134
+ </div>
135
+ <script src="../../prettify.js"></script>
136
+ <script>
137
+ window.onload = function () {
138
+ prettyPrint();
139
+ };
140
+ </script>
141
+ <script src="../../sorter.js"></script>
142
+ <script src="../../block-navigation.js"></script>
143
+ </body>
144
+ </html>
145
+
@@ -0,0 +1,131 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/onside</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> src/onside</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">47.61% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>10/21</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">100% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>0/0</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">14.28% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>1/7</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">42.1% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>8/19</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 low'></div>
65
+ <div class="pad1">
66
+ <table class="coverage-summary">
67
+ <thead>
68
+ <tr>
69
+ <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
70
+ <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
71
+ <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
72
+ <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
73
+ <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
74
+ <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
75
+ <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
76
+ <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
77
+ <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
78
+ <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
79
+ </tr>
80
+ </thead>
81
+ <tbody><tr>
82
+ <td class="file medium" data-value="ExpoOnsideMarketplaceAvailabilityModule.ts"><a href="ExpoOnsideMarketplaceAvailabilityModule.ts.html">ExpoOnsideMarketplaceAvailabilityModule.ts</a></td>
83
+ <td data-value="66.66" class="pic medium">
84
+ <div class="chart"><div class="cover-fill" style="width: 66%"></div><div class="cover-empty" style="width: 34%"></div></div>
85
+ </td>
86
+ <td data-value="66.66" class="pct medium">66.66%</td>
87
+ <td data-value="6" class="abs medium">4/6</td>
88
+ <td data-value="100" class="pct high">100%</td>
89
+ <td data-value="0" class="abs high">0/0</td>
90
+ <td data-value="50" class="pct medium">50%</td>
91
+ <td data-value="2" class="abs medium">1/2</td>
92
+ <td data-value="66.66" class="pct medium">66.66%</td>
93
+ <td data-value="6" class="abs medium">4/6</td>
94
+ </tr>
95
+
96
+ <tr>
97
+ <td class="file low" data-value="index.ts"><a href="index.ts.html">index.ts</a></td>
98
+ <td data-value="40" class="pic low">
99
+ <div class="chart"><div class="cover-fill" style="width: 40%"></div><div class="cover-empty" style="width: 60%"></div></div>
100
+ </td>
101
+ <td data-value="40" class="pct low">40%</td>
102
+ <td data-value="15" class="abs low">6/15</td>
103
+ <td data-value="100" class="pct high">100%</td>
104
+ <td data-value="0" class="abs high">0/0</td>
105
+ <td data-value="0" class="pct low">0%</td>
106
+ <td data-value="5" class="abs low">0/5</td>
107
+ <td data-value="30.76" class="pct low">30.76%</td>
108
+ <td data-value="13" class="abs low">4/13</td>
109
+ </tr>
110
+
111
+ </tbody>
112
+ </table>
113
+ </div>
114
+ <div class='push'></div><!-- for sticky footer -->
115
+ </div><!-- /wrapper -->
116
+ <div class='footer quiet pad2 space-top1 center small'>
117
+ Code coverage generated by
118
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
119
+ at 2025-11-10T17:39:47.259Z
120
+ </div>
121
+ <script src="../../prettify.js"></script>
122
+ <script>
123
+ window.onload = function () {
124
+ prettyPrint();
125
+ };
126
+ </script>
127
+ <script src="../../sorter.js"></script>
128
+ <script src="../../block-navigation.js"></script>
129
+ </body>
130
+ </html>
131
+
@@ -0,0 +1,253 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/onside/index.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/onside</a> index.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">40% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>6/15</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">100% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>0/0</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">0% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>0/5</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">30.76% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>4/13</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 low'></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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">4x</span>
123
+ <span class="cline-any cline-neutral">&nbsp;</span>
124
+ <span class="cline-any cline-neutral">&nbsp;</span>
125
+ <span class="cline-any cline-neutral">&nbsp;</span>
126
+ <span class="cline-any cline-yes">4x</span>
127
+ <span class="cline-any cline-neutral">&nbsp;</span>
128
+ <span class="cline-any cline-yes">4x</span>
129
+ <span class="cline-any cline-neutral">&nbsp;</span>
130
+ <span class="cline-any cline-neutral">&nbsp;</span>
131
+ <span class="cline-any cline-neutral">&nbsp;</span>
132
+ <span class="cline-any cline-neutral">&nbsp;</span>
133
+ <span class="cline-any cline-neutral">&nbsp;</span>
134
+ <span class="cline-any cline-neutral">&nbsp;</span>
135
+ <span class="cline-any cline-neutral">&nbsp;</span>
136
+ <span class="cline-any cline-neutral">&nbsp;</span>
137
+ <span class="cline-any cline-neutral">&nbsp;</span>
138
+ <span class="cline-any cline-neutral">&nbsp;</span>
139
+ <span class="cline-any cline-neutral">&nbsp;</span>
140
+ <span class="cline-any cline-neutral">&nbsp;</span>
141
+ <span class="cline-any cline-neutral">&nbsp;</span>
142
+ <span class="cline-any cline-neutral">&nbsp;</span>
143
+ <span class="cline-any cline-neutral">&nbsp;</span>
144
+ <span class="cline-any cline-neutral">&nbsp;</span>
145
+ <span class="cline-any cline-neutral">&nbsp;</span>
146
+ <span class="cline-any cline-neutral">&nbsp;</span>
147
+ <span class="cline-any cline-neutral">&nbsp;</span>
148
+ <span class="cline-any cline-neutral">&nbsp;</span>
149
+ <span class="cline-any cline-neutral">&nbsp;</span>
150
+ <span class="cline-any cline-neutral">&nbsp;</span>
151
+ <span class="cline-any cline-neutral">&nbsp;</span>
152
+ <span class="cline-any cline-neutral">&nbsp;</span>
153
+ <span class="cline-any cline-neutral">&nbsp;</span>
154
+ <span class="cline-any cline-neutral">&nbsp;</span>
155
+ <span class="cline-any cline-neutral">&nbsp;</span>
156
+ <span class="cline-any cline-no">&nbsp;</span>
157
+ <span class="cline-any cline-no">&nbsp;</span>
158
+ <span class="cline-any cline-no">&nbsp;</span>
159
+ <span class="cline-any cline-neutral">&nbsp;</span>
160
+ <span class="cline-any cline-neutral">&nbsp;</span>
161
+ <span class="cline-any cline-neutral">&nbsp;</span>
162
+ <span class="cline-any cline-no">&nbsp;</span>
163
+ <span class="cline-any cline-neutral">&nbsp;</span>
164
+ <span class="cline-any cline-no">&nbsp;</span>
165
+ <span class="cline-any cline-no">&nbsp;</span>
166
+ <span class="cline-any cline-neutral">&nbsp;</span>
167
+ <span class="cline-any cline-no">&nbsp;</span>
168
+ <span class="cline-any cline-neutral">&nbsp;</span>
169
+ <span class="cline-any cline-neutral">&nbsp;</span>
170
+ <span class="cline-any cline-no">&nbsp;</span>
171
+ <span class="cline-any cline-neutral">&nbsp;</span>
172
+ <span class="cline-any cline-neutral">&nbsp;</span>
173
+ <span class="cline-any cline-neutral">&nbsp;</span>
174
+ <span class="cline-any cline-no">&nbsp;</span>
175
+ <span class="cline-any cline-neutral">&nbsp;</span>
176
+ <span class="cline-any cline-neutral">&nbsp;</span>
177
+ <span class="cline-any cline-yes">4x</span>
178
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import {
179
+ ExpoOnsideMarketplaceAvailabilityModule,
180
+ InstalledFromOnside,
181
+ } from './ExpoOnsideMarketplaceAvailabilityModule';
182
+ import {useEffect, useState} from 'react';
183
+ &nbsp;
184
+ let installedFromOnside: InstalledFromOnside = null;
185
+ &nbsp;
186
+ /**
187
+ * IMPORTANT:
188
+ * Note: call it BEFORE initializing useIAP, for example during SplashScreen initialization.
189
+ *
190
+ * 1) Call checkOnsideAvailability BEFORE initializing useIAP.
191
+ * Reason: this is an asynchronous check and cannot run during module import/initialization.
192
+ * 2) Make sure the Onside module is enabled in your Expo config plugin:
193
+ *
194
+ * plugins: [
195
+ * [
196
+ * 'expo-iap',
197
+ * {
198
+ * modules: {
199
+ * onside: true,
200
+ * //Keep other modules
201
+ * },
202
+ * },
203
+ * ],
204
+ * ];
205
+ *
206
+ * Without this, the Onside integration won’t be linked and the availability check will always be false.
207
+ */
208
+ &nbsp;
209
+ // checkInstallationFromOnside is required to switch the payment module at runtime based on marketplace installation.
210
+ async function <span class="fstat-no" title="function not covered" >checkInstallationFromOnside(</span>): Promise&lt;InstalledFromOnside&gt; {
211
+ const onsideInstallation =
212
+ <span class="cstat-no" title="statement not covered" > await ExpoOnsideMarketplaceAvailabilityModule.checkInstallationFromOnsideAsync();</span>
213
+ <span class="cstat-no" title="statement not covered" > installedFromOnside = onsideInstallation;</span>
214
+ <span class="cstat-no" title="statement not covered" > return onsideInstallation;</span>
215
+ }
216
+ &nbsp;
217
+ function <span class="fstat-no" title="function not covered" >useOnside(</span>) {
218
+ const [isOnsideLoading, setIsOnsideLoading] = <span class="cstat-no" title="statement not covered" >useState(true);</span>
219
+ &nbsp;
220
+ <span class="cstat-no" title="statement not covered" > useEffect(<span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
221
+ <span class="cstat-no" title="statement not covered" > checkInstallationFromOnside()</span>
222
+ .then(<span class="fstat-no" title="function not covered" >(r</span>esult) =&gt; {
223
+ <span class="cstat-no" title="statement not covered" > installedFromOnside = result;</span>
224
+ })
225
+ .finally(<span class="fstat-no" title="function not covered" >() =</span>&gt; {
226
+ <span class="cstat-no" title="statement not covered" > setIsOnsideLoading(false);</span>
227
+ });
228
+ }, []);
229
+ &nbsp;
230
+ <span class="cstat-no" title="statement not covered" > return {isOnsideLoading};</span>
231
+ }
232
+ &nbsp;
233
+ export {checkInstallationFromOnside, installedFromOnside, useOnside};
234
+ &nbsp;</pre></td></tr></table></pre>
235
+
236
+ <div class='push'></div><!-- for sticky footer -->
237
+ </div><!-- /wrapper -->
238
+ <div class='footer quiet pad2 space-top1 center small'>
239
+ Code coverage generated by
240
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
241
+ at 2025-11-10T17:39:47.259Z
242
+ </div>
243
+ <script src="../../prettify.js"></script>
244
+ <script>
245
+ window.onload = function () {
246
+ prettyPrint();
247
+ };
248
+ </script>
249
+ <script src="../../sorter.js"></script>
250
+ <script src="../../block-navigation.js"></script>
251
+ </body>
252
+ </html>
253
+