@crossmint/client-sdk-react-native-ui 0.13.32 → 0.13.34

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 (241) hide show
  1. package/dist/chunk-24MMQ2R4.js +15 -0
  2. package/dist/chunk-24MMQ2R4.js.map +1 -0
  3. package/dist/chunk-2DNOAXOE.mjs +8 -0
  4. package/dist/chunk-2DNOAXOE.mjs.map +1 -0
  5. package/dist/chunk-2TEAOLM6.mjs +149 -0
  6. package/dist/chunk-2TEAOLM6.mjs.map +1 -0
  7. package/dist/chunk-2YRJHM46.mjs +50 -0
  8. package/dist/chunk-2YRJHM46.mjs.map +1 -0
  9. package/dist/chunk-34OVOZB2.mjs +111 -0
  10. package/dist/chunk-34OVOZB2.mjs.map +1 -0
  11. package/dist/chunk-3AWDWMZ2.mjs +18 -0
  12. package/dist/chunk-3AWDWMZ2.mjs.map +1 -0
  13. package/dist/chunk-3MWGBZ5O.js +348 -0
  14. package/dist/chunk-3MWGBZ5O.js.map +1 -0
  15. package/dist/chunk-3PJ6FXFT.mjs +1 -0
  16. package/dist/chunk-3PJ6FXFT.mjs.map +1 -0
  17. package/dist/chunk-3SFSPJXM.mjs +55 -0
  18. package/dist/chunk-3SFSPJXM.mjs.map +1 -0
  19. package/dist/chunk-4AJTICKY.mjs +44 -0
  20. package/dist/chunk-4AJTICKY.mjs.map +1 -0
  21. package/dist/chunk-4HKXTAVR.js +14 -0
  22. package/dist/chunk-4HKXTAVR.js.map +1 -0
  23. package/dist/chunk-4NTIGHRE.js +148 -0
  24. package/dist/chunk-4NTIGHRE.js.map +1 -0
  25. package/dist/chunk-4V7NDO5X.mjs +157 -0
  26. package/dist/chunk-4V7NDO5X.mjs.map +1 -0
  27. package/dist/chunk-4WJIXD7U.mjs +14 -0
  28. package/dist/chunk-4WJIXD7U.mjs.map +1 -0
  29. package/dist/chunk-5ZBDQUNG.js +1 -0
  30. package/dist/chunk-5ZBDQUNG.js.map +1 -0
  31. package/dist/chunk-6W2GOMYU.js +22 -0
  32. package/dist/chunk-6W2GOMYU.js.map +1 -0
  33. package/dist/chunk-6Z74KC25.mjs +1 -0
  34. package/dist/chunk-6Z74KC25.mjs.map +1 -0
  35. package/dist/chunk-7SPIOD4K.mjs +66 -0
  36. package/dist/chunk-7SPIOD4K.mjs.map +1 -0
  37. package/dist/chunk-ALMDA3KN.mjs +199 -0
  38. package/dist/chunk-ALMDA3KN.mjs.map +1 -0
  39. package/dist/chunk-BE4HT2U7.mjs +1 -0
  40. package/dist/chunk-BE4HT2U7.mjs.map +1 -0
  41. package/dist/chunk-BTH5QRIT.js +149 -0
  42. package/dist/chunk-BTH5QRIT.js.map +1 -0
  43. package/dist/chunk-BUB4U2GE.js +44 -0
  44. package/dist/chunk-BUB4U2GE.js.map +1 -0
  45. package/dist/chunk-BUTZZ7JB.js +36 -0
  46. package/dist/chunk-BUTZZ7JB.js.map +1 -0
  47. package/dist/chunk-CFHHVHNZ.mjs +157 -0
  48. package/dist/chunk-CFHHVHNZ.mjs.map +1 -0
  49. package/dist/chunk-DD2MVD6A.mjs +36 -0
  50. package/dist/chunk-DD2MVD6A.mjs.map +1 -0
  51. package/dist/chunk-EKXEDMRD.mjs +71 -0
  52. package/dist/chunk-EKXEDMRD.mjs.map +1 -0
  53. package/dist/chunk-GYBEEYGB.mjs +1 -0
  54. package/dist/chunk-GYBEEYGB.mjs.map +1 -0
  55. package/dist/chunk-HELXBZ7D.js +18 -0
  56. package/dist/chunk-HELXBZ7D.js.map +1 -0
  57. package/dist/chunk-IBQK5B7B.js +71 -0
  58. package/dist/chunk-IBQK5B7B.js.map +1 -0
  59. package/dist/chunk-IHZNXV5S.js +1 -0
  60. package/dist/chunk-IHZNXV5S.js.map +1 -0
  61. package/dist/chunk-J2MDWDV6.mjs +1 -0
  62. package/dist/chunk-J2MDWDV6.mjs.map +1 -0
  63. package/dist/chunk-KK4SQ7WF.js +1 -0
  64. package/dist/chunk-KK4SQ7WF.js.map +1 -0
  65. package/dist/chunk-LMXGU2XA.js +50 -0
  66. package/dist/chunk-LMXGU2XA.js.map +1 -0
  67. package/dist/chunk-LWQ5CJC4.mjs +22 -0
  68. package/dist/chunk-LWQ5CJC4.mjs.map +1 -0
  69. package/dist/chunk-MMVER6VO.js +1 -0
  70. package/dist/chunk-MMVER6VO.js.map +1 -0
  71. package/dist/chunk-MVLQR6RI.js +199 -0
  72. package/dist/chunk-MVLQR6RI.js.map +1 -0
  73. package/dist/chunk-NBWATZY4.js +157 -0
  74. package/dist/chunk-NBWATZY4.js.map +1 -0
  75. package/dist/chunk-NSSAF6CV.mjs +348 -0
  76. package/dist/chunk-NSSAF6CV.mjs.map +1 -0
  77. package/dist/chunk-OLVGVQEA.js +24 -0
  78. package/dist/chunk-OLVGVQEA.js.map +1 -0
  79. package/dist/chunk-OTRMAWWU.js +55 -0
  80. package/dist/chunk-OTRMAWWU.js.map +1 -0
  81. package/dist/chunk-Q2Y5CZT4.js +157 -0
  82. package/dist/chunk-Q2Y5CZT4.js.map +1 -0
  83. package/dist/chunk-Q7YPX4RJ.js +66 -0
  84. package/dist/chunk-Q7YPX4RJ.js.map +1 -0
  85. package/dist/chunk-R2M3HW3E.mjs +61 -0
  86. package/dist/chunk-R2M3HW3E.mjs.map +1 -0
  87. package/dist/chunk-R3ZW4OCR.js +61 -0
  88. package/dist/chunk-R3ZW4OCR.js.map +1 -0
  89. package/dist/chunk-R47XMJ32.js +1 -0
  90. package/dist/chunk-R47XMJ32.js.map +1 -0
  91. package/dist/chunk-R5GF6WFB.mjs +148 -0
  92. package/dist/chunk-R5GF6WFB.mjs.map +1 -0
  93. package/dist/chunk-RSCBYS6I.mjs +15 -0
  94. package/dist/chunk-RSCBYS6I.mjs.map +1 -0
  95. package/dist/chunk-TNPZITVL.mjs +1 -0
  96. package/dist/chunk-TNPZITVL.mjs.map +1 -0
  97. package/dist/chunk-U74INGIF.js +17 -0
  98. package/dist/chunk-U74INGIF.js.map +1 -0
  99. package/dist/chunk-V2PIS2OC.mjs +17 -0
  100. package/dist/chunk-V2PIS2OC.mjs.map +1 -0
  101. package/dist/chunk-VCF2YXCO.js +208 -0
  102. package/dist/chunk-VCF2YXCO.js.map +1 -0
  103. package/dist/chunk-XNVZRSGL.js +111 -0
  104. package/dist/chunk-XNVZRSGL.js.map +1 -0
  105. package/dist/chunk-XUGJXLWC.js +8 -0
  106. package/dist/chunk-XUGJXLWC.js.map +1 -0
  107. package/dist/chunk-XXJ7LQ44.js +1 -0
  108. package/dist/chunk-XXJ7LQ44.js.map +1 -0
  109. package/dist/chunk-YAVGI5BZ.mjs +24 -0
  110. package/dist/chunk-YAVGI5BZ.mjs.map +1 -0
  111. package/dist/chunk-Z7Y7COJM.mjs +208 -0
  112. package/dist/chunk-Z7Y7COJM.mjs.map +1 -0
  113. package/dist/components/embed/index.js +16 -1
  114. package/dist/components/embed/index.js.map +1 -0
  115. package/dist/components/embed/index.mjs +16 -1
  116. package/dist/components/embed/index.mjs.map +1 -0
  117. package/dist/components/embed/v3/CrossmintEmbeddedCheckoutV3.js +14 -1
  118. package/dist/components/embed/v3/CrossmintEmbeddedCheckoutV3.js.map +1 -0
  119. package/dist/components/embed/v3/CrossmintEmbeddedCheckoutV3.mjs +14 -1
  120. package/dist/components/embed/v3/CrossmintEmbeddedCheckoutV3.mjs.map +1 -0
  121. package/dist/components/embed/v3/EmbeddedCheckoutV3WebView.js +13 -1
  122. package/dist/components/embed/v3/EmbeddedCheckoutV3WebView.js.map +1 -0
  123. package/dist/components/embed/v3/EmbeddedCheckoutV3WebView.mjs +13 -1
  124. package/dist/components/embed/v3/EmbeddedCheckoutV3WebView.mjs.map +1 -0
  125. package/dist/components/embed/v3/crypto/PayerConnectionHandler.js +8 -1
  126. package/dist/components/embed/v3/crypto/PayerConnectionHandler.js.map +1 -0
  127. package/dist/components/embed/v3/crypto/PayerConnectionHandler.mjs +8 -1
  128. package/dist/components/embed/v3/crypto/PayerConnectionHandler.mjs.map +1 -0
  129. package/dist/components/embed/v3/index.js +15 -1
  130. package/dist/components/embed/v3/index.js.map +1 -0
  131. package/dist/components/embed/v3/index.mjs +15 -1
  132. package/dist/components/embed/v3/index.mjs.map +1 -0
  133. package/dist/components/index.js +34 -1
  134. package/dist/components/index.js.map +1 -0
  135. package/dist/components/index.mjs +34 -1
  136. package/dist/components/index.mjs.map +1 -0
  137. package/dist/components/signers/BaseCodeInput.js +9 -1
  138. package/dist/components/signers/BaseCodeInput.js.map +1 -0
  139. package/dist/components/signers/BaseCodeInput.mjs +9 -1
  140. package/dist/components/signers/BaseCodeInput.mjs.map +1 -0
  141. package/dist/components/signers/BaseConfirmation.js +9 -1
  142. package/dist/components/signers/BaseConfirmation.js.map +1 -0
  143. package/dist/components/signers/BaseConfirmation.mjs +9 -1
  144. package/dist/components/signers/BaseConfirmation.mjs.map +1 -0
  145. package/dist/components/signers/EmailSignersDialog.js +11 -1
  146. package/dist/components/signers/EmailSignersDialog.js.map +1 -0
  147. package/dist/components/signers/EmailSignersDialog.mjs +11 -1
  148. package/dist/components/signers/EmailSignersDialog.mjs.map +1 -0
  149. package/dist/components/signers/PhoneSignersDialog.js +11 -1
  150. package/dist/components/signers/PhoneSignersDialog.js.map +1 -0
  151. package/dist/components/signers/PhoneSignersDialog.mjs +11 -1
  152. package/dist/components/signers/PhoneSignersDialog.mjs.map +1 -0
  153. package/dist/components/signers/index.js +16 -1
  154. package/dist/components/signers/index.js.map +1 -0
  155. package/dist/components/signers/index.mjs +16 -1
  156. package/dist/components/signers/index.mjs.map +1 -0
  157. package/dist/components/wallets/ExportPrivateKeyButton.js +8 -1
  158. package/dist/components/wallets/ExportPrivateKeyButton.js.map +1 -0
  159. package/dist/components/wallets/ExportPrivateKeyButton.mjs +8 -1
  160. package/dist/components/wallets/ExportPrivateKeyButton.mjs.map +1 -0
  161. package/dist/components/wallets/index.js +9 -1
  162. package/dist/components/wallets/index.js.map +1 -0
  163. package/dist/components/wallets/index.mjs +9 -1
  164. package/dist/components/wallets/index.mjs.map +1 -0
  165. package/dist/hooks/index.js +26 -1
  166. package/dist/hooks/index.js.map +1 -0
  167. package/dist/hooks/index.mjs +26 -1
  168. package/dist/hooks/index.mjs.map +1 -0
  169. package/dist/hooks/useAuth.js +14 -1
  170. package/dist/hooks/useAuth.js.map +1 -0
  171. package/dist/hooks/useAuth.mjs +14 -1
  172. package/dist/hooks/useAuth.mjs.map +1 -0
  173. package/dist/hooks/useCrossmintCheckout.js +11 -1
  174. package/dist/hooks/useCrossmintCheckout.js.map +1 -0
  175. package/dist/hooks/useCrossmintCheckout.mjs +11 -1
  176. package/dist/hooks/useCrossmintCheckout.mjs.map +1 -0
  177. package/dist/hooks/useWalletEmailSigner.js +8 -1
  178. package/dist/hooks/useWalletEmailSigner.js.map +1 -0
  179. package/dist/hooks/useWalletEmailSigner.mjs +8 -1
  180. package/dist/hooks/useWalletEmailSigner.mjs.map +1 -0
  181. package/dist/index.js +79 -1
  182. package/dist/index.js.map +1 -0
  183. package/dist/index.mjs +79 -1
  184. package/dist/index.mjs.map +1 -0
  185. package/dist/logger/init.js +9 -1
  186. package/dist/logger/init.js.map +1 -0
  187. package/dist/logger/init.mjs +9 -1
  188. package/dist/logger/init.mjs.map +1 -0
  189. package/dist/plugin/mods/addQueryToAndroidManifest.js +8 -1
  190. package/dist/plugin/mods/addQueryToAndroidManifest.js.map +1 -0
  191. package/dist/plugin/mods/addQueryToAndroidManifest.mjs +8 -1
  192. package/dist/plugin/mods/addQueryToAndroidManifest.mjs.map +1 -0
  193. package/dist/plugin/withGooglePay.js +57 -1
  194. package/dist/plugin/withGooglePay.js.map +1 -0
  195. package/dist/plugin/withGooglePay.mjs +57 -1
  196. package/dist/plugin/withGooglePay.mjs.map +1 -0
  197. package/dist/providers/CrossmintAuthProvider.js +14 -1
  198. package/dist/providers/CrossmintAuthProvider.js.map +1 -0
  199. package/dist/providers/CrossmintAuthProvider.mjs +14 -1
  200. package/dist/providers/CrossmintAuthProvider.mjs.map +1 -0
  201. package/dist/providers/CrossmintProvider.js +12 -1
  202. package/dist/providers/CrossmintProvider.js.map +1 -0
  203. package/dist/providers/CrossmintProvider.mjs +12 -1
  204. package/dist/providers/CrossmintProvider.mjs.map +1 -0
  205. package/dist/providers/CrossmintWalletProvider.js +16 -1
  206. package/dist/providers/CrossmintWalletProvider.js.map +1 -0
  207. package/dist/providers/CrossmintWalletProvider.mjs +16 -1
  208. package/dist/providers/CrossmintWalletProvider.mjs.map +1 -0
  209. package/dist/providers/index.js +28 -1
  210. package/dist/providers/index.js.map +1 -0
  211. package/dist/providers/index.mjs +28 -1
  212. package/dist/providers/index.mjs.map +1 -0
  213. package/dist/styles/index.js +8 -1
  214. package/dist/styles/index.js.map +1 -0
  215. package/dist/styles/index.mjs +8 -1
  216. package/dist/styles/index.mjs.map +1 -0
  217. package/dist/styles/theme.js +8 -1
  218. package/dist/styles/theme.js.map +1 -0
  219. package/dist/styles/theme.mjs +8 -1
  220. package/dist/styles/theme.mjs.map +1 -0
  221. package/dist/types/auth.js +1 -1
  222. package/dist/types/auth.js.map +1 -0
  223. package/dist/types/auth.mjs +1 -0
  224. package/dist/types/auth.mjs.map +1 -0
  225. package/dist/utils/SecureStorage.js +8 -1
  226. package/dist/utils/SecureStorage.js.map +1 -0
  227. package/dist/utils/SecureStorage.mjs +8 -1
  228. package/dist/utils/SecureStorage.mjs.map +1 -0
  229. package/dist/utils/createCrossmintApiClient.js +9 -1
  230. package/dist/utils/createCrossmintApiClient.js.map +1 -0
  231. package/dist/utils/createCrossmintApiClient.mjs +9 -1
  232. package/dist/utils/createCrossmintApiClient.mjs.map +1 -0
  233. package/dist/utils/embed/userAgent.js +12 -1
  234. package/dist/utils/embed/userAgent.js.map +1 -0
  235. package/dist/utils/embed/userAgent.mjs +12 -1
  236. package/dist/utils/embed/userAgent.mjs.map +1 -0
  237. package/dist/utils/eventEmitter.js +8 -1
  238. package/dist/utils/eventEmitter.js.map +1 -0
  239. package/dist/utils/eventEmitter.mjs +8 -1
  240. package/dist/utils/eventEmitter.mjs.map +1 -0
  241. package/package.json +58 -54
@@ -0,0 +1,348 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunkQ2Y5CZT4js = require('./chunk-Q2Y5CZT4.js');
4
+
5
+
6
+ var _chunkNBWATZY4js = require('./chunk-NBWATZY4.js');
7
+
8
+
9
+ var _chunkOLVGVQEAjs = require('./chunk-OLVGVQEA.js');
10
+
11
+
12
+
13
+ var _chunkQ7YPX4RJjs = require('./chunk-Q7YPX4RJ.js');
14
+
15
+ // src/providers/CrossmintWalletProvider.tsx
16
+ var _react = require('react');
17
+ var _reactnative = require('react-native');
18
+ var _clientsdkrnwindow = require('@crossmint/client-sdk-rn-window');
19
+
20
+
21
+
22
+
23
+
24
+ var _clientsigners = require('@crossmint/client-signers');
25
+ var _commonsdkbase = require('@crossmint/common-sdk-base');
26
+
27
+
28
+
29
+ var _clientsdkreactbase = require('@crossmint/client-sdk-react-base');
30
+
31
+ var _jsxruntime = require('react/jsx-runtime');
32
+ function CrossmintWalletProviderInternal({
33
+ children,
34
+ createOnLogin,
35
+ appearance,
36
+ headlessSigningFlow = true,
37
+ callbacks
38
+ }) {
39
+ const { crossmint } = _clientsdkreactbase.useCrossmint.call(void 0, "CrossmintWalletProvider must be used within CrossmintProvider");
40
+ const logger = _clientsdkreactbase.useLogger.call(void 0, _chunkOLVGVQEAjs.LoggerContext);
41
+ const { apiKey, appId } = crossmint;
42
+ const parsedAPIKey = _react.useMemo.call(void 0, () => {
43
+ const result = _commonsdkbase.validateAPIKey.call(void 0, apiKey);
44
+ if (!result.isValid) {
45
+ throw new Error("Invalid API key");
46
+ }
47
+ return result;
48
+ }, [apiKey]);
49
+ const frameUrl = _react.useMemo.call(void 0, () => {
50
+ return _clientsigners.environmentUrlConfig[parsedAPIKey.environment];
51
+ }, [parsedAPIKey.environment]);
52
+ const webviewRef = _react.useRef.call(void 0, null);
53
+ const webViewParentRef = _react.useRef.call(void 0,
54
+ null
55
+ );
56
+ const [needsWebView, setNeedsWebView] = _react.useState.call(void 0, false);
57
+ const handshakeTriggeredRef = _react.useRef.call(void 0, false);
58
+ const handshakeInProgressRef = _react.useRef.call(void 0, false);
59
+ const handshakeGenerationRef = _react.useRef.call(void 0, 0);
60
+ const handshakeStartTimeRef = _react.useRef.call(void 0, 0);
61
+ const secureGlobals = _react.useMemo.call(void 0, () => {
62
+ if (appId != null) {
63
+ return { crossmintAppId: appId };
64
+ }
65
+ return {};
66
+ }, [appId]);
67
+ const performHandshake = _react.useCallback.call(void 0,
68
+ (trigger) => _chunkQ7YPX4RJjs.__async.call(void 0, this, null, function* () {
69
+ if (webViewParentRef.current != null) {
70
+ const parent = webViewParentRef.current;
71
+ if (handshakeInProgressRef.current) {
72
+ logger.info("react-native.wallet.webview.handshake.skip.in-progress", {
73
+ trigger,
74
+ generation: handshakeGenerationRef.current
75
+ });
76
+ return;
77
+ }
78
+ if (handshakeTriggeredRef.current && parent.isConnected) {
79
+ logger.info("react-native.wallet.webview.handshake.skip.already-connected", {
80
+ trigger,
81
+ generation: handshakeGenerationRef.current
82
+ });
83
+ return;
84
+ }
85
+ handshakeInProgressRef.current = true;
86
+ const handshakeStartTime = Date.now();
87
+ handshakeStartTimeRef.current = handshakeStartTime;
88
+ const generation = handshakeGenerationRef.current;
89
+ try {
90
+ logger.info("react-native.wallet.webview.handshake.start", {
91
+ trigger,
92
+ generation,
93
+ platform: _reactnative.Platform.OS
94
+ });
95
+ handshakeTriggeredRef.current = true;
96
+ parent.isConnected = false;
97
+ yield parent.handshakeWithChild();
98
+ const durationMs = Date.now() - handshakeStartTime;
99
+ logger.info("react-native.wallet.webview.handshake.success", {
100
+ trigger,
101
+ generation,
102
+ durationMs
103
+ });
104
+ } catch (e) {
105
+ const durationMs = Date.now() - handshakeStartTime;
106
+ if (generation === handshakeGenerationRef.current) {
107
+ handshakeTriggeredRef.current = false;
108
+ }
109
+ logger.error("react-native.wallet.webview.handshake.error", {
110
+ trigger,
111
+ generation,
112
+ durationMs,
113
+ error: e instanceof Error ? e.message : String(e)
114
+ });
115
+ console.error("[CrossmintWalletProvider] Handshake error:", e);
116
+ } finally {
117
+ if (generation === handshakeGenerationRef.current) {
118
+ handshakeInProgressRef.current = false;
119
+ }
120
+ }
121
+ } else {
122
+ logger.warn("react-native.wallet.webview.handshake.skip", {
123
+ trigger,
124
+ reason: "parent not initialized"
125
+ });
126
+ }
127
+ }),
128
+ [logger]
129
+ );
130
+ _react.useEffect.call(void 0, () => {
131
+ if (webviewRef.current != null && webViewParentRef.current == null) {
132
+ logger.info("react-native.wallet.webview.initializing");
133
+ webViewParentRef.current = new (0, _clientsdkrnwindow.WebViewParent)(webviewRef, {
134
+ incomingEvents: _clientsigners.signerOutboundEvents,
135
+ outgoingEvents: _clientsigners.signerInboundEvents,
136
+ handshakeOptions: {
137
+ timeoutMs: 3e4,
138
+ intervalMs: 100
139
+ },
140
+ recovery: {
141
+ recoverableErrorCodes: [_clientsigners.SignerErrorCode.IndexedDbFatal]
142
+ }
143
+ });
144
+ logger.info("react-native.wallet.webview.initialized");
145
+ performHandshake("eager");
146
+ }
147
+ }, [needsWebView, logger, performHandshake]);
148
+ const onWebViewLoad = _react.useCallback.call(void 0, () => _chunkQ7YPX4RJjs.__async.call(void 0, this, null, function* () {
149
+ var _a, _b;
150
+ logger.info("react-native.wallet.webview.onLoadEnd", {
151
+ handshakeInProgress: handshakeInProgressRef.current,
152
+ isConnected: (_b = (_a = webViewParentRef.current) == null ? void 0 : _a.isConnected) != null ? _b : false,
153
+ generation: handshakeGenerationRef.current
154
+ });
155
+ yield performHandshake("onLoadEnd");
156
+ }), [logger, performHandshake]);
157
+ const handleMessage = _react.useCallback.call(void 0,
158
+ (event) => {
159
+ var _a, _b;
160
+ const parent = webViewParentRef.current;
161
+ if (parent == null) {
162
+ return;
163
+ }
164
+ const rawData = event.nativeEvent.data;
165
+ if (rawData === "frame-ready") {
166
+ logger.info("react-native.wallet.webview.frame-ready.received", {
167
+ handshakeInProgress: handshakeInProgressRef.current,
168
+ isConnected: (_b = (_a = webViewParentRef.current) == null ? void 0 : _a.isConnected) != null ? _b : false,
169
+ generation: handshakeGenerationRef.current,
170
+ msSinceHandshakeStart: handshakeStartTimeRef.current > 0 ? Date.now() - handshakeStartTimeRef.current : null
171
+ });
172
+ performHandshake("frame-ready");
173
+ return;
174
+ }
175
+ try {
176
+ const messageData = JSON.parse(rawData);
177
+ if (messageData && typeof messageData.type === "string" && messageData.type.startsWith("console.")) {
178
+ const consoleMethod = messageData.type.split(".")[1];
179
+ const args = (messageData.data || []).map((argStr) => {
180
+ try {
181
+ if (argStr === "[Function]" || argStr === "[Circular Reference]" || argStr === "[Unserializable Object]") {
182
+ return argStr;
183
+ }
184
+ return JSON.parse(argStr);
185
+ } catch (e) {
186
+ return argStr;
187
+ }
188
+ });
189
+ const logMessage = `react-native.wallet.webview.console.${consoleMethod}`;
190
+ const logContext = { webview_args: args };
191
+ switch (consoleMethod) {
192
+ case "log":
193
+ logger.info(logMessage, logContext);
194
+ break;
195
+ case "error":
196
+ logger.error(logMessage, logContext);
197
+ break;
198
+ case "warn":
199
+ logger.warn(logMessage, logContext);
200
+ break;
201
+ case "info":
202
+ logger.info(logMessage, logContext);
203
+ break;
204
+ case "debug":
205
+ logger.debug(logMessage, logContext);
206
+ break;
207
+ default:
208
+ logger.info(`react-native.wallet.webview.console.unknown`, {
209
+ webview_method: consoleMethod,
210
+ webview_args: args
211
+ });
212
+ }
213
+ return;
214
+ }
215
+ } catch (e) {
216
+ }
217
+ parent.handleMessage(event);
218
+ },
219
+ [logger, performHandshake]
220
+ );
221
+ const getClientTEEConnection = () => {
222
+ if (webViewParentRef.current == null) {
223
+ throw new Error("WebView not ready or handshake incomplete");
224
+ }
225
+ return webViewParentRef.current;
226
+ };
227
+ const renderNativeUI = ({ emailSignerProps, phoneSignerProps }) => {
228
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
229
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkQ2Y5CZT4js.EmailSignersDialog, _chunkQ7YPX4RJjs.__spreadValues.call(void 0, {}, emailSignerProps)),
230
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNBWATZY4js.PhoneSignersDialog, _chunkQ7YPX4RJjs.__spreadValues.call(void 0, {}, phoneSignerProps))
231
+ ] });
232
+ };
233
+ const initializeWebView = () => _chunkQ7YPX4RJjs.__async.call(void 0, this, null, function* () {
234
+ logger.info("react-native.wallet.webview.init.start");
235
+ setNeedsWebView(true);
236
+ let attempts = 0;
237
+ const maxAttempts = 100;
238
+ while (webViewParentRef.current == null && attempts < maxAttempts) {
239
+ yield new Promise((resolve) => setTimeout(resolve, 50));
240
+ attempts++;
241
+ }
242
+ if (webViewParentRef.current == null) {
243
+ logger.error("react-native.wallet.webview.init.timeout", {
244
+ attempts
245
+ });
246
+ throw new Error("WebView not ready or handshake incomplete");
247
+ }
248
+ logger.info("react-native.wallet.webview.init.success", { attempts });
249
+ });
250
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
251
+ _clientsdkreactbase.CrossmintWalletBaseProvider,
252
+ {
253
+ createOnLogin,
254
+ appearance,
255
+ headlessSigningFlow,
256
+ initializeWebView,
257
+ callbacks,
258
+ renderUI: headlessSigningFlow ? void 0 : renderNativeUI,
259
+ clientTEEConnection: getClientTEEConnection,
260
+ children: [
261
+ children,
262
+ needsWebView && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
263
+ _reactnative.View,
264
+ {
265
+ style: {
266
+ position: "absolute",
267
+ width: 0,
268
+ height: 0,
269
+ overflow: "hidden"
270
+ },
271
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
272
+ _clientsdkrnwindow.RNWebView,
273
+ {
274
+ ref: webviewRef,
275
+ source: { uri: frameUrl },
276
+ globals: secureGlobals,
277
+ onLoadEnd: onWebViewLoad,
278
+ onMessage: handleMessage,
279
+ onError: (syntheticEvent) => {
280
+ console.error("[CrossmintWalletProvider] WebView error:", syntheticEvent.nativeEvent);
281
+ },
282
+ onHttpError: (syntheticEvent) => {
283
+ console.error("[CrossmintWalletProvider] WebView HTTP error:", syntheticEvent.nativeEvent);
284
+ },
285
+ onContentProcessDidTerminate: () => {
286
+ var _a, _b, _c;
287
+ const prevGeneration = handshakeGenerationRef.current;
288
+ handshakeGenerationRef.current++;
289
+ logger.warn("react-native.wallet.webview.process.terminated", {
290
+ prevGeneration,
291
+ newGeneration: handshakeGenerationRef.current,
292
+ wasConnected: (_b = (_a = webViewParentRef.current) == null ? void 0 : _a.isConnected) != null ? _b : false,
293
+ hadHandshakeInProgress: handshakeInProgressRef.current
294
+ });
295
+ handshakeTriggeredRef.current = false;
296
+ handshakeInProgressRef.current = false;
297
+ if (webViewParentRef.current != null) {
298
+ webViewParentRef.current.isConnected = false;
299
+ }
300
+ (_c = webviewRef.current) == null ? void 0 : _c.reload();
301
+ performHandshake("eager");
302
+ },
303
+ onRenderProcessGone: () => {
304
+ var _a, _b, _c;
305
+ const prevGeneration = handshakeGenerationRef.current;
306
+ handshakeGenerationRef.current++;
307
+ logger.warn("react-native.wallet.webview.process.renderGone", {
308
+ prevGeneration,
309
+ newGeneration: handshakeGenerationRef.current,
310
+ wasConnected: (_b = (_a = webViewParentRef.current) == null ? void 0 : _a.isConnected) != null ? _b : false,
311
+ hadHandshakeInProgress: handshakeInProgressRef.current
312
+ });
313
+ handshakeTriggeredRef.current = false;
314
+ handshakeInProgressRef.current = false;
315
+ if (webViewParentRef.current != null) {
316
+ webViewParentRef.current.isConnected = false;
317
+ }
318
+ (_c = webviewRef.current) == null ? void 0 : _c.reload();
319
+ performHandshake("eager");
320
+ },
321
+ style: {
322
+ width: 1,
323
+ height: 1
324
+ },
325
+ javaScriptCanOpenWindowsAutomatically: false,
326
+ thirdPartyCookiesEnabled: false,
327
+ sharedCookiesEnabled: false,
328
+ incognito: false,
329
+ setSupportMultipleWindows: false,
330
+ originWhitelist: [_clientsigners.environmentUrlConfig[parsedAPIKey.environment]],
331
+ cacheEnabled: true,
332
+ cacheMode: "LOAD_DEFAULT"
333
+ }
334
+ )
335
+ }
336
+ )
337
+ ]
338
+ }
339
+ );
340
+ }
341
+ function CrossmintWalletProvider(props) {
342
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, CrossmintWalletProviderInternal, _chunkQ7YPX4RJjs.__spreadValues.call(void 0, {}, props));
343
+ }
344
+
345
+
346
+
347
+ exports.CrossmintWalletProvider = CrossmintWalletProvider;
348
+ //# sourceMappingURL=chunk-3MWGBZ5O.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/providers/CrossmintWalletProvider.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,SAAyB,aAAa,QAAQ,SAAS,WAAW,gBAAgC;AAClG,SAAS,UAAU,YAAY;AAE/B,SAAS,WAAW,qBAAqB;AACzC;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP,SAAS,sBAAqC;AAC9C;AAAA,EACI;AAAA,EAGA;AAAA,OACG;AAGP,SAAS,iBAAiB;AA2Pd,mBACI,KADJ;AAtOZ,SAAS,gCAAgC;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA,sBAAsB;AAAA,EACtB;AACJ,GAAiC;AAC7B,QAAM,EAAE,UAAU,IAAI,aAAa,+DAA+D;AAClG,QAAM,SAAS,UAAU,aAAa;AACtC,QAAM,EAAE,QAAQ,MAAM,IAAI;AAE1B,QAAM,eAAe,QAAQ,MAAM;AAC/B,UAAM,SAAS,eAAe,MAAM;AACpC,QAAI,CAAC,OAAO,SAAS;AACjB,YAAM,IAAI,MAAM,iBAAiB;AAAA,IACrC;AACA,WAAO;AAAA,EACX,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,WAAW,QAAQ,MAAM;AAC3B,WAAO,qBAAqB,aAAa,WAAW;AAAA,EACxD,GAAG,CAAC,aAAa,WAAW,CAAC;AAE7B,QAAM,aAAa,OAAgB,IAAI;AACvC,QAAM,mBAAmB;AAAA,IACrB;AAAA,EACJ;AAEA,QAAM,CAAC,cAAc,eAAe,IAAI,SAAkB,KAAK;AAC/D,QAAM,wBAAwB,OAAgB,KAAK;AACnD,QAAM,yBAAyB,OAAgB,KAAK;AACpD,QAAM,yBAAyB,OAAe,CAAC;AAC/C,QAAM,wBAAwB,OAAe,CAAC;AAE9C,QAAM,gBAAgB,QAAQ,MAAM;AAChC,QAAI,SAAS,MAAM;AACf,aAAO,EAAE,gBAAgB,MAAM;AAAA,IACnC;AACA,WAAO,CAAC;AAAA,EACZ,GAAG,CAAC,KAAK,CAAC;AAEV,QAAM,mBAAmB;AAAA,IACrB,CAAO,YAAmD;AACtD,UAAI,iBAAiB,WAAW,MAAM;AAClC,cAAM,SAAS,iBAAiB;AAGhC,YAAI,uBAAuB,SAAS;AAChC,iBAAO,KAAK,0DAA0D;AAAA,YAClE;AAAA,YACA,YAAY,uBAAuB;AAAA,UACvC,CAAC;AACD;AAAA,QACJ;AACA,YAAI,sBAAsB,WAAW,OAAO,aAAa;AACrD,iBAAO,KAAK,gEAAgE;AAAA,YACxE;AAAA,YACA,YAAY,uBAAuB;AAAA,UACvC,CAAC;AACD;AAAA,QACJ;AAEA,+BAAuB,UAAU;AACjC,cAAM,qBAAqB,KAAK,IAAI;AACpC,8BAAsB,UAAU;AAChC,cAAM,aAAa,uBAAuB;AAC1C,YAAI;AACA,iBAAO,KAAK,+CAA+C;AAAA,YACvD;AAAA,YACA;AAAA,YACA,UAAU,SAAS;AAAA,UACvB,CAAC;AACD,gCAAsB,UAAU;AAChC,iBAAO,cAAc;AACrB,gBAAM,OAAO,mBAAmB;AAChC,gBAAM,aAAa,KAAK,IAAI,IAAI;AAChC,iBAAO,KAAK,iDAAiD;AAAA,YACzD;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC;AAAA,QACL,SAAS,GAAG;AACR,gBAAM,aAAa,KAAK,IAAI,IAAI;AAChC,cAAI,eAAe,uBAAuB,SAAS;AAC/C,kCAAsB,UAAU;AAAA,UACpC;AACA,iBAAO,MAAM,+CAA+C;AAAA,YACxD;AAAA,YACA;AAAA,YACA;AAAA,YACA,OAAO,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC;AAAA,UACpD,CAAC;AACD,kBAAQ,MAAM,8CAA8C,CAAC;AAAA,QACjE,UAAE;AACE,cAAI,eAAe,uBAAuB,SAAS;AAC/C,mCAAuB,UAAU;AAAA,UACrC;AAAA,QACJ;AAAA,MACJ,OAAO;AACH,eAAO,KAAK,8CAA8C;AAAA,UACtD;AAAA,UACA,QAAQ;AAAA,QACZ,CAAC;AAAA,MACL;AAAA,IACJ;AAAA,IACA,CAAC,MAAM;AAAA,EACX;AAEA,YAAU,MAAM;AACZ,QAAI,WAAW,WAAW,QAAQ,iBAAiB,WAAW,MAAM;AAChE,aAAO,KAAK,0CAA0C;AACtD,uBAAiB,UAAU,IAAI,cAAc,YAAkC;AAAA,QAC3E,gBAAgB;AAAA,QAChB,gBAAgB;AAAA,QAChB,kBAAkB;AAAA,UACd,WAAW;AAAA,UACX,YAAY;AAAA,QAChB;AAAA,QACA,UAAU;AAAA,UACN,uBAAuB,CAAC,gBAAgB,cAAc;AAAA,QAC1D;AAAA,MACJ,CAAC;AACD,aAAO,KAAK,yCAAyC;AAOrD,uBAAiB,OAAO;AAAA,IAC5B;AAAA,EACJ,GAAG,CAAC,cAAc,QAAQ,gBAAgB,CAAC;AAE3C,QAAM,gBAAgB,YAAY,MAAY;AA7KlD;AAgLQ,WAAO,KAAK,yCAAyC;AAAA,MACjD,qBAAqB,uBAAuB;AAAA,MAC5C,cAAa,4BAAiB,YAAjB,mBAA0B,gBAA1B,YAAyC;AAAA,MACtD,YAAY,uBAAuB;AAAA,IACvC,CAAC;AACD,UAAM,iBAAiB,WAAW;AAAA,EACtC,IAAG,CAAC,QAAQ,gBAAgB,CAAC;AAE7B,QAAM,gBAAgB;AAAA,IAClB,CAAC,UAA+B;AAzLxC;AA0LY,YAAM,SAAS,iBAAiB;AAChC,UAAI,UAAU,MAAM;AAChB;AAAA,MACJ;AAEA,YAAM,UAAU,MAAM,YAAY;AAKlC,UAAI,YAAY,eAAe;AAC3B,eAAO,KAAK,oDAAoD;AAAA,UAC5D,qBAAqB,uBAAuB;AAAA,UAC5C,cAAa,4BAAiB,YAAjB,mBAA0B,gBAA1B,YAAyC;AAAA,UACtD,YAAY,uBAAuB;AAAA,UACnC,uBACI,sBAAsB,UAAU,IAAI,KAAK,IAAI,IAAI,sBAAsB,UAAU;AAAA,QACzF,CAAC;AACD,yBAAiB,aAAa;AAC9B;AAAA,MACJ;AAEA,UAAI;AACA,cAAM,cAAc,KAAK,MAAM,OAAO;AACtC,YAAI,eAAe,OAAO,YAAY,SAAS,YAAY,YAAY,KAAK,WAAW,UAAU,GAAG;AAChG,gBAAM,gBAAgB,YAAY,KAAK,MAAM,GAAG,EAAE,CAAC;AACnD,gBAAM,QAAQ,YAAY,QAAQ,CAAC,GAAG,IAAI,CAAC,WAAmB;AAC1D,gBAAI;AACA,kBACI,WAAW,gBACX,WAAW,0BACX,WAAW,2BACb;AACE,uBAAO;AAAA,cACX;AACA,qBAAO,KAAK,MAAM,MAAM;AAAA,YAC5B,SAAQ;AACJ,qBAAO;AAAA,YACX;AAAA,UACJ,CAAC;AAED,gBAAM,aAAa,uCAAuC,aAAa;AACvE,gBAAM,aAAa,EAAE,cAAc,KAAK;AAExC,kBAAQ,eAAe;AAAA,YACnB,KAAK;AACD,qBAAO,KAAK,YAAY,UAAU;AAClC;AAAA,YACJ,KAAK;AACD,qBAAO,MAAM,YAAY,UAAU;AACnC;AAAA,YACJ,KAAK;AACD,qBAAO,KAAK,YAAY,UAAU;AAClC;AAAA,YACJ,KAAK;AACD,qBAAO,KAAK,YAAY,UAAU;AAClC;AAAA,YACJ,KAAK;AACD,qBAAO,MAAM,YAAY,UAAU;AACnC;AAAA,YACJ;AACI,qBAAO,KAAK,+CAA+C;AAAA,gBACvD,gBAAgB;AAAA,gBAChB,cAAc;AAAA,cAClB,CAAC;AAAA,UACT;AACA;AAAA,QACJ;AAAA,MACJ,SAAQ;AAAA,MAAC;AAET,aAAO,cAAc,KAAK;AAAA,IAC9B;AAAA,IACA,CAAC,QAAQ,gBAAgB;AAAA,EAC7B;AAEA,QAAM,yBAAyB,MAAM;AACjC,QAAI,iBAAiB,WAAW,MAAM;AAClC,YAAM,IAAI,MAAM,2CAA2C;AAAA,IAC/D;AACA,WAAO,iBAAiB;AAAA,EAC5B;AAEA,QAAM,iBAAiB,CAAC,EAAE,kBAAkB,iBAAiB,MAAqB;AAC9E,WACI,iCACI;AAAA,0BAAC,uCAAuB,iBAAkB;AAAA,MAC1C,oBAAC,uCAAuB,iBAAkB;AAAA,OAC9C;AAAA,EAER;AAEA,QAAM,oBAAoB,MAAY;AAClC,WAAO,KAAK,wCAAwC;AACpD,oBAAgB,IAAI;AACpB,QAAI,WAAW;AACf,UAAM,cAAc;AACpB,WAAO,iBAAiB,WAAW,QAAQ,WAAW,aAAa;AAC/D,YAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AACtD;AAAA,IACJ;AAEA,QAAI,iBAAiB,WAAW,MAAM;AAClC,aAAO,MAAM,4CAA4C;AAAA,QACrD;AAAA,MACJ,CAAC;AACD,YAAM,IAAI,MAAM,2CAA2C;AAAA,IAC/D;AACA,WAAO,KAAK,4CAA4C,EAAE,SAAS,CAAC;AAAA,EACxE;AAEA,SACI;AAAA,IAAC;AAAA;AAAA,MACG;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU,sBAAsB,SAAY;AAAA,MAC5C,qBAAqB;AAAA,MAEpB;AAAA;AAAA,QAEA,gBACG;AAAA,UAAC;AAAA;AAAA,YACG,OAAO;AAAA,cACH,UAAU;AAAA,cACV,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,UAAU;AAAA,YACd;AAAA,YAEA;AAAA,cAAC;AAAA;AAAA,gBACG,KAAK;AAAA,gBACL,QAAQ,EAAE,KAAK,SAAS;AAAA,gBACxB,SAAS;AAAA,gBACT,WAAW;AAAA,gBACX,WAAW;AAAA,gBACX,SAAS,CAAC,mBAAmB;AACzB,0BAAQ,MAAM,4CAA4C,eAAe,WAAW;AAAA,gBACxF;AAAA,gBACA,aAAa,CAAC,mBAAmB;AAC7B,0BAAQ,MAAM,iDAAiD,eAAe,WAAW;AAAA,gBAC7F;AAAA,gBACA,8BAA8B,MAAM;AAzU5D;AA0U4B,wBAAM,iBAAiB,uBAAuB;AAC9C,yCAAuB;AACvB,yBAAO,KAAK,kDAAkD;AAAA,oBAC1D;AAAA,oBACA,eAAe,uBAAuB;AAAA,oBACtC,eAAc,4BAAiB,YAAjB,mBAA0B,gBAA1B,YAAyC;AAAA,oBACvD,wBAAwB,uBAAuB;AAAA,kBACnD,CAAC;AACD,wCAAsB,UAAU;AAChC,yCAAuB,UAAU;AACjC,sBAAI,iBAAiB,WAAW,MAAM;AAClC,qCAAiB,QAAQ,cAAc;AAAA,kBAC3C;AACA,mCAAW,YAAX,mBAAoB;AAEpB,mCAAiB,OAAO;AAAA,gBAC5B;AAAA,gBACA,qBAAqB,MAAM;AA3VnD;AA4V4B,wBAAM,iBAAiB,uBAAuB;AAC9C,yCAAuB;AACvB,yBAAO,KAAK,kDAAkD;AAAA,oBAC1D;AAAA,oBACA,eAAe,uBAAuB;AAAA,oBACtC,eAAc,4BAAiB,YAAjB,mBAA0B,gBAA1B,YAAyC;AAAA,oBACvD,wBAAwB,uBAAuB;AAAA,kBACnD,CAAC;AACD,wCAAsB,UAAU;AAChC,yCAAuB,UAAU;AACjC,sBAAI,iBAAiB,WAAW,MAAM;AAClC,qCAAiB,QAAQ,cAAc;AAAA,kBAC3C;AACA,mCAAW,YAAX,mBAAoB;AAEpB,mCAAiB,OAAO;AAAA,gBAC5B;AAAA,gBACA,OAAO;AAAA,kBACH,OAAO;AAAA,kBACP,QAAQ;AAAA,gBACZ;AAAA,gBACA,uCAAuC;AAAA,gBACvC,0BAA0B;AAAA,gBAC1B,sBAAsB;AAAA,gBACtB,WAAW;AAAA,gBACX,2BAA2B;AAAA,gBAC3B,iBAAiB,CAAC,qBAAqB,aAAa,WAAW,CAAC;AAAA,gBAChE,cAAc;AAAA,gBACd,WAAU;AAAA;AAAA,YACd;AAAA;AAAA,QACJ;AAAA;AAAA;AAAA,EAER;AAER;AAMO,SAAS,wBAAwB,OAAqC;AACzE,SAAO,oBAAC,oDAAoC,MAAO;AACvD","sourcesContent":["import { type ReactNode, useCallback, useRef, useMemo, useEffect, useState, type RefObject } from \"react\";\nimport { Platform, View } from \"react-native\";\nimport type { WebView, WebViewMessageEvent } from \"react-native-webview\";\nimport { RNWebView, WebViewParent } from \"@crossmint/client-sdk-rn-window\";\nimport {\n environmentUrlConfig,\n signerInboundEvents,\n signerOutboundEvents,\n SignerErrorCode,\n} from \"@crossmint/client-signers\";\nimport { validateAPIKey, type UIConfig } from \"@crossmint/common-sdk-base\";\nimport {\n CrossmintWalletBaseProvider,\n type UIRenderProps,\n type CreateOnLogin,\n useCrossmint,\n} from \"@crossmint/client-sdk-react-base\";\nimport { EmailSignersDialog } from \"@/components/signers/EmailSignersDialog\";\nimport { PhoneSignersDialog } from \"@/components/signers/PhoneSignersDialog\";\nimport { useLogger } from \"@crossmint/client-sdk-react-base\";\nimport { LoggerContext } from \"./CrossmintProvider\";\n\nexport interface CrossmintWalletProviderProps {\n /** Wallet configuration for automatic creation on user login. Defines the chain and signer type for the wallet. */\n createOnLogin?: CreateOnLogin;\n /** Optional appearance configuration for styling built-in UI components. */\n appearance?: UIConfig;\n /** When true (default), no UI is rendered and signing flows must be handled manually. When false, built-in UI components are rendered. */\n headlessSigningFlow?: boolean;\n /** Optional lifecycle callbacks invoked during wallet creation and transaction signing. */\n callbacks?: {\n /** Called when a wallet creation flow begins. */\n onWalletCreationStart?: () => Promise<void>;\n /** Called when a transaction signing flow begins. */\n onTransactionStart?: () => Promise<void>;\n };\n /** @internal */\n children: ReactNode;\n}\n\nfunction CrossmintWalletProviderInternal({\n children,\n createOnLogin,\n appearance,\n headlessSigningFlow = true,\n callbacks,\n}: CrossmintWalletProviderProps) {\n const { crossmint } = useCrossmint(\"CrossmintWalletProvider must be used within CrossmintProvider\");\n const logger = useLogger(LoggerContext);\n const { apiKey, appId } = crossmint;\n\n const parsedAPIKey = useMemo(() => {\n const result = validateAPIKey(apiKey);\n if (!result.isValid) {\n throw new Error(\"Invalid API key\");\n }\n return result;\n }, [apiKey]);\n\n const frameUrl = useMemo(() => {\n return environmentUrlConfig[parsedAPIKey.environment];\n }, [parsedAPIKey.environment]);\n\n const webviewRef = useRef<WebView>(null);\n const webViewParentRef = useRef<WebViewParent<typeof signerOutboundEvents, typeof signerInboundEvents> | null>(\n null\n );\n\n const [needsWebView, setNeedsWebView] = useState<boolean>(false);\n const handshakeTriggeredRef = useRef<boolean>(false);\n const handshakeInProgressRef = useRef<boolean>(false);\n const handshakeGenerationRef = useRef<number>(0);\n const handshakeStartTimeRef = useRef<number>(0);\n\n const secureGlobals = useMemo(() => {\n if (appId != null) {\n return { crossmintAppId: appId };\n }\n return {};\n }, [appId]);\n\n const performHandshake = useCallback(\n async (trigger: \"frame-ready\" | \"onLoadEnd\" | \"eager\") => {\n if (webViewParentRef.current != null) {\n const parent = webViewParentRef.current;\n\n // Prevent concurrent or duplicate handshakes\n if (handshakeInProgressRef.current) {\n logger.info(\"react-native.wallet.webview.handshake.skip.in-progress\", {\n trigger,\n generation: handshakeGenerationRef.current,\n });\n return;\n }\n if (handshakeTriggeredRef.current && parent.isConnected) {\n logger.info(\"react-native.wallet.webview.handshake.skip.already-connected\", {\n trigger,\n generation: handshakeGenerationRef.current,\n });\n return;\n }\n\n handshakeInProgressRef.current = true;\n const handshakeStartTime = Date.now();\n handshakeStartTimeRef.current = handshakeStartTime;\n const generation = handshakeGenerationRef.current;\n try {\n logger.info(\"react-native.wallet.webview.handshake.start\", {\n trigger,\n generation,\n platform: Platform.OS,\n });\n handshakeTriggeredRef.current = true;\n parent.isConnected = false;\n await parent.handshakeWithChild();\n const durationMs = Date.now() - handshakeStartTime;\n logger.info(\"react-native.wallet.webview.handshake.success\", {\n trigger,\n generation,\n durationMs,\n });\n } catch (e) {\n const durationMs = Date.now() - handshakeStartTime;\n if (generation === handshakeGenerationRef.current) {\n handshakeTriggeredRef.current = false;\n }\n logger.error(\"react-native.wallet.webview.handshake.error\", {\n trigger,\n generation,\n durationMs,\n error: e instanceof Error ? e.message : String(e),\n });\n console.error(\"[CrossmintWalletProvider] Handshake error:\", e);\n } finally {\n if (generation === handshakeGenerationRef.current) {\n handshakeInProgressRef.current = false;\n }\n }\n } else {\n logger.warn(\"react-native.wallet.webview.handshake.skip\", {\n trigger,\n reason: \"parent not initialized\",\n });\n }\n },\n [logger]\n );\n\n useEffect(() => {\n if (webviewRef.current != null && webViewParentRef.current == null) {\n logger.info(\"react-native.wallet.webview.initializing\");\n webViewParentRef.current = new WebViewParent(webviewRef as RefObject<WebView>, {\n incomingEvents: signerOutboundEvents,\n outgoingEvents: signerInboundEvents,\n handshakeOptions: {\n timeoutMs: 30_000,\n intervalMs: 100,\n },\n recovery: {\n recoverableErrorCodes: [SignerErrorCode.IndexedDbFatal],\n },\n });\n logger.info(\"react-native.wallet.webview.initialized\");\n\n // Start handshake immediately — don't wait for onLoadEnd or frame-ready.\n // The parent polls handshakeRequest every 100ms for 30s, so by the time\n // the child finishes init and calls handshakeWithParent(), the request\n // will arrive within 100ms. This eliminates the 15-23s gap on slow\n // devices where onLoadEnd fires long after the child is ready.\n performHandshake(\"eager\");\n }\n }, [needsWebView, logger, performHandshake]);\n\n const onWebViewLoad = useCallback(async () => {\n // onLoadEnd is a fallback — eager handshake should have started already.\n // This still triggers in case the eager start couldn't run (e.g. ref timing).\n logger.info(\"react-native.wallet.webview.onLoadEnd\", {\n handshakeInProgress: handshakeInProgressRef.current,\n isConnected: webViewParentRef.current?.isConnected ?? false,\n generation: handshakeGenerationRef.current,\n });\n await performHandshake(\"onLoadEnd\");\n }, [logger, performHandshake]);\n\n const handleMessage = useCallback(\n (event: WebViewMessageEvent) => {\n const parent = webViewParentRef.current;\n if (parent == null) {\n return;\n }\n\n const rawData = event.nativeEvent.data;\n\n // Handle \"frame-ready\" signal from child — child is ready to handshake.\n // With eager handshake, the parent is already polling, so the handshake\n // should already be in progress or complete. Log for diagnostics.\n if (rawData === \"frame-ready\") {\n logger.info(\"react-native.wallet.webview.frame-ready.received\", {\n handshakeInProgress: handshakeInProgressRef.current,\n isConnected: webViewParentRef.current?.isConnected ?? false,\n generation: handshakeGenerationRef.current,\n msSinceHandshakeStart:\n handshakeStartTimeRef.current > 0 ? Date.now() - handshakeStartTimeRef.current : null,\n });\n performHandshake(\"frame-ready\");\n return;\n }\n\n try {\n const messageData = JSON.parse(rawData);\n if (messageData && typeof messageData.type === \"string\" && messageData.type.startsWith(\"console.\")) {\n const consoleMethod = messageData.type.split(\".\")[1];\n const args = (messageData.data || []).map((argStr: string) => {\n try {\n if (\n argStr === \"[Function]\" ||\n argStr === \"[Circular Reference]\" ||\n argStr === \"[Unserializable Object]\"\n ) {\n return argStr;\n }\n return JSON.parse(argStr);\n } catch {\n return argStr;\n }\n });\n\n const logMessage = `react-native.wallet.webview.console.${consoleMethod}`;\n const logContext = { webview_args: args };\n\n switch (consoleMethod) {\n case \"log\":\n logger.info(logMessage, logContext);\n break;\n case \"error\":\n logger.error(logMessage, logContext);\n break;\n case \"warn\":\n logger.warn(logMessage, logContext);\n break;\n case \"info\":\n logger.info(logMessage, logContext);\n break;\n case \"debug\":\n logger.debug(logMessage, logContext);\n break;\n default:\n logger.info(`react-native.wallet.webview.console.unknown`, {\n webview_method: consoleMethod,\n webview_args: args,\n });\n }\n return;\n }\n } catch {}\n\n parent.handleMessage(event);\n },\n [logger, performHandshake]\n );\n\n const getClientTEEConnection = () => {\n if (webViewParentRef.current == null) {\n throw new Error(\"WebView not ready or handshake incomplete\");\n }\n return webViewParentRef.current;\n };\n\n const renderNativeUI = ({ emailSignerProps, phoneSignerProps }: UIRenderProps) => {\n return (\n <>\n <EmailSignersDialog {...emailSignerProps} />\n <PhoneSignersDialog {...phoneSignerProps} />\n </>\n );\n };\n\n const initializeWebView = async () => {\n logger.info(\"react-native.wallet.webview.init.start\");\n setNeedsWebView(true);\n let attempts = 0;\n const maxAttempts = 100; // 5 seconds total with 50ms intervals\n while (webViewParentRef.current == null && attempts < maxAttempts) {\n await new Promise((resolve) => setTimeout(resolve, 50));\n attempts++;\n }\n\n if (webViewParentRef.current == null) {\n logger.error(\"react-native.wallet.webview.init.timeout\", {\n attempts,\n });\n throw new Error(\"WebView not ready or handshake incomplete\");\n }\n logger.info(\"react-native.wallet.webview.init.success\", { attempts });\n };\n\n return (\n <CrossmintWalletBaseProvider\n createOnLogin={createOnLogin}\n appearance={appearance}\n headlessSigningFlow={headlessSigningFlow}\n initializeWebView={initializeWebView}\n callbacks={callbacks}\n renderUI={headlessSigningFlow ? undefined : renderNativeUI}\n clientTEEConnection={getClientTEEConnection}\n >\n {children}\n\n {needsWebView && (\n <View\n style={{\n position: \"absolute\",\n width: 0,\n height: 0,\n overflow: \"hidden\",\n }}\n >\n <RNWebView\n ref={webviewRef}\n source={{ uri: frameUrl }}\n globals={secureGlobals}\n onLoadEnd={onWebViewLoad}\n onMessage={handleMessage}\n onError={(syntheticEvent) => {\n console.error(\"[CrossmintWalletProvider] WebView error:\", syntheticEvent.nativeEvent);\n }}\n onHttpError={(syntheticEvent) => {\n console.error(\"[CrossmintWalletProvider] WebView HTTP error:\", syntheticEvent.nativeEvent);\n }}\n onContentProcessDidTerminate={() => {\n const prevGeneration = handshakeGenerationRef.current;\n handshakeGenerationRef.current++;\n logger.warn(\"react-native.wallet.webview.process.terminated\", {\n prevGeneration,\n newGeneration: handshakeGenerationRef.current,\n wasConnected: webViewParentRef.current?.isConnected ?? false,\n hadHandshakeInProgress: handshakeInProgressRef.current,\n });\n handshakeTriggeredRef.current = false;\n handshakeInProgressRef.current = false;\n if (webViewParentRef.current != null) {\n webViewParentRef.current.isConnected = false;\n }\n webviewRef.current?.reload();\n // Start polling immediately — don't wait for onLoadEnd which fires 15-23s late on slow devices\n performHandshake(\"eager\");\n }}\n onRenderProcessGone={() => {\n const prevGeneration = handshakeGenerationRef.current;\n handshakeGenerationRef.current++;\n logger.warn(\"react-native.wallet.webview.process.renderGone\", {\n prevGeneration,\n newGeneration: handshakeGenerationRef.current,\n wasConnected: webViewParentRef.current?.isConnected ?? false,\n hadHandshakeInProgress: handshakeInProgressRef.current,\n });\n handshakeTriggeredRef.current = false;\n handshakeInProgressRef.current = false;\n if (webViewParentRef.current != null) {\n webViewParentRef.current.isConnected = false;\n }\n webviewRef.current?.reload();\n // Start polling immediately — don't wait for onLoadEnd which fires 15-23s late on slow devices\n performHandshake(\"eager\");\n }}\n style={{\n width: 1,\n height: 1,\n }}\n javaScriptCanOpenWindowsAutomatically={false}\n thirdPartyCookiesEnabled={false}\n sharedCookiesEnabled={false}\n incognito={false}\n setSupportMultipleWindows={false}\n originWhitelist={[environmentUrlConfig[parsedAPIKey.environment]]}\n cacheEnabled={true}\n cacheMode=\"LOAD_DEFAULT\"\n />\n </View>\n )}\n </CrossmintWalletBaseProvider>\n );\n}\n\n/**\n * Provider for wallet creation and management. Must be nested inside {@link CrossmintProvider}.\n * Handles secure communication with the Crossmint signer via a hidden WebView.\n */\nexport function CrossmintWalletProvider(props: CrossmintWalletProviderProps) {\n return <CrossmintWalletProviderInternal {...props} />;\n}\n"]}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=chunk-3PJ6FXFT.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,55 @@
1
+ import {
2
+ __async
3
+ } from "./chunk-7SPIOD4K.mjs";
4
+
5
+ // src/hooks/useWalletEmailSigner.ts
6
+ import { useCallback, useContext } from "react";
7
+ import { CrossmintWalletBaseContext } from "@crossmint/client-sdk-react-base";
8
+ var throwNotAvailable = (functionName) => () => {
9
+ throw new Error(`${functionName} is not available. Make sure you're using an email signer wallet.`);
10
+ };
11
+ function useWalletEmailSigner() {
12
+ const context = useContext(CrossmintWalletBaseContext);
13
+ if (context == null) {
14
+ throw new Error("useWalletEmailSigner must be used within CrossmintWalletProvider");
15
+ }
16
+ const { emailSignerState } = context;
17
+ const sendEmailWithOtp = useCallback(() => __async(this, null, function* () {
18
+ var _a;
19
+ if (!emailSignerState.sendEmailWithOtp) {
20
+ throwNotAvailable("sendEmailWithOtp")();
21
+ }
22
+ return yield (_a = emailSignerState.sendEmailWithOtp) == null ? void 0 : _a.call(emailSignerState);
23
+ }), [emailSignerState.sendEmailWithOtp]);
24
+ const verifyOtp = useCallback(
25
+ (otp) => __async(this, null, function* () {
26
+ var _a;
27
+ if (!emailSignerState.verifyOtp) {
28
+ throwNotAvailable("verifyOtp")();
29
+ }
30
+ return yield (_a = emailSignerState.verifyOtp) == null ? void 0 : _a.call(emailSignerState, otp);
31
+ }),
32
+ [emailSignerState.verifyOtp]
33
+ );
34
+ const reject = useCallback(
35
+ (error) => {
36
+ var _a;
37
+ if (!emailSignerState.reject) {
38
+ throwNotAvailable("reject")();
39
+ }
40
+ (_a = emailSignerState.reject) == null ? void 0 : _a.call(emailSignerState, error);
41
+ },
42
+ [emailSignerState.reject]
43
+ );
44
+ return {
45
+ needsAuth: emailSignerState.needsAuth,
46
+ sendEmailWithOtp,
47
+ verifyOtp,
48
+ reject
49
+ };
50
+ }
51
+
52
+ export {
53
+ useWalletEmailSigner
54
+ };
55
+ //# sourceMappingURL=chunk-3SFSPJXM.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/useWalletEmailSigner.ts"],"sourcesContent":["import { useCallback, useContext } from \"react\";\nimport { CrossmintWalletBaseContext } from \"@crossmint/client-sdk-react-base\";\n\nconst throwNotAvailable = (functionName: string) => () => {\n throw new Error(`${functionName} is not available. Make sure you're using an email signer wallet.`);\n};\n\nexport type EmailSignerFunctions = {\n /** Whether the email signer currently requires authentication (OTP verification). */\n needsAuth: boolean;\n /** Sends a one-time password to the user's email address. */\n sendEmailWithOtp: () => Promise<void>;\n /** Verifies the one-time password entered by the user. */\n verifyOtp: (otp: string) => Promise<void>;\n /** Rejects the current authentication request with an error. */\n reject: (error: Error) => void;\n};\n\n/**\n * Hook for managing email-based signer authentication flows.\n * Provides OTP send/verify functions for wallets using an email signer.\n * Must be used within a {@link CrossmintWalletProvider}.\n */\nexport function useWalletEmailSigner(): EmailSignerFunctions {\n const context = useContext(CrossmintWalletBaseContext);\n\n if (context == null) {\n throw new Error(\"useWalletEmailSigner must be used within CrossmintWalletProvider\");\n }\n\n const { emailSignerState } = context;\n\n const sendEmailWithOtp = useCallback(async () => {\n if (!emailSignerState.sendEmailWithOtp) {\n throwNotAvailable(\"sendEmailWithOtp\")();\n }\n return await emailSignerState.sendEmailWithOtp?.();\n }, [emailSignerState.sendEmailWithOtp]);\n\n const verifyOtp = useCallback(\n async (otp: string) => {\n if (!emailSignerState.verifyOtp) {\n throwNotAvailable(\"verifyOtp\")();\n }\n return await emailSignerState.verifyOtp?.(otp);\n },\n [emailSignerState.verifyOtp]\n );\n\n const reject = useCallback(\n (error: Error) => {\n if (!emailSignerState.reject) {\n throwNotAvailable(\"reject\")();\n }\n emailSignerState.reject?.(error);\n },\n [emailSignerState.reject]\n );\n\n return {\n needsAuth: emailSignerState.needsAuth,\n sendEmailWithOtp,\n verifyOtp,\n reject,\n };\n}\n"],"mappings":";;;;;AAAA,SAAS,aAAa,kBAAkB;AACxC,SAAS,kCAAkC;AAE3C,IAAM,oBAAoB,CAAC,iBAAyB,MAAM;AACtD,QAAM,IAAI,MAAM,GAAG,YAAY,mEAAmE;AACtG;AAkBO,SAAS,uBAA6C;AACzD,QAAM,UAAU,WAAW,0BAA0B;AAErD,MAAI,WAAW,MAAM;AACjB,UAAM,IAAI,MAAM,kEAAkE;AAAA,EACtF;AAEA,QAAM,EAAE,iBAAiB,IAAI;AAE7B,QAAM,mBAAmB,YAAY,MAAY;AAhCrD;AAiCQ,QAAI,CAAC,iBAAiB,kBAAkB;AACpC,wBAAkB,kBAAkB,EAAE;AAAA,IAC1C;AACA,WAAO,OAAM,sBAAiB,qBAAjB;AAAA,EACjB,IAAG,CAAC,iBAAiB,gBAAgB,CAAC;AAEtC,QAAM,YAAY;AAAA,IACd,CAAO,QAAgB;AAxC/B;AAyCY,UAAI,CAAC,iBAAiB,WAAW;AAC7B,0BAAkB,WAAW,EAAE;AAAA,MACnC;AACA,aAAO,OAAM,sBAAiB,cAAjB,0CAA6B;AAAA,IAC9C;AAAA,IACA,CAAC,iBAAiB,SAAS;AAAA,EAC/B;AAEA,QAAM,SAAS;AAAA,IACX,CAAC,UAAiB;AAlD1B;AAmDY,UAAI,CAAC,iBAAiB,QAAQ;AAC1B,0BAAkB,QAAQ,EAAE;AAAA,MAChC;AACA,6BAAiB,WAAjB,0CAA0B;AAAA,IAC9B;AAAA,IACA,CAAC,iBAAiB,MAAM;AAAA,EAC5B;AAEA,SAAO;AAAA,IACH,WAAW,iBAAiB;AAAA,IAC5B;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACJ;","names":[]}
@@ -0,0 +1,44 @@
1
+ import {
2
+ __async
3
+ } from "./chunk-7SPIOD4K.mjs";
4
+
5
+ // src/components/embed/v3/crypto/PayerConnectionHandler.tsx
6
+ import { useEffect } from "react";
7
+ function PayerConnectionHandler({
8
+ payer,
9
+ webViewClient
10
+ }) {
11
+ useEffect(() => {
12
+ if (webViewClient == null) {
13
+ return;
14
+ }
15
+ const signTransactionListener = webViewClient.on(
16
+ "crypto:send-transaction",
17
+ (_0) => __async(this, [_0], function* ({ chain, serializedTransaction }) {
18
+ try {
19
+ yield payer.handleChainSwitch(chain);
20
+ const tx = yield payer.handleSignAndSendTransaction(serializedTransaction);
21
+ if (tx.success) {
22
+ webViewClient.send("crypto:send-transaction:success", { txId: tx.txId });
23
+ } else {
24
+ webViewClient.send("crypto:send-transaction:failed", { error: tx.errorMessage });
25
+ }
26
+ } catch (error) {
27
+ console.error("[PayerConnectionHandler] Failed to send transaction", error);
28
+ webViewClient.send("crypto:send-transaction:failed", {
29
+ error: error.message || "An unknown error occurred"
30
+ });
31
+ }
32
+ })
33
+ );
34
+ return () => {
35
+ webViewClient.off(signTransactionListener);
36
+ };
37
+ }, [webViewClient]);
38
+ return null;
39
+ }
40
+
41
+ export {
42
+ PayerConnectionHandler
43
+ };
44
+ //# sourceMappingURL=chunk-4AJTICKY.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/embed/v3/crypto/PayerConnectionHandler.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport type { EmbeddedCheckoutPayer } from \"@crossmint/client-sdk-base\";\nimport type { PayerSupportedBlockchains } from \"@crossmint/common-sdk-base\";\nimport type { WebViewParent } from \"@crossmint/client-sdk-rn-window\";\nimport type { embeddedCheckoutV3IncomingEvents, embeddedCheckoutV3OutgoingEvents } from \"@crossmint/client-sdk-base\";\n\nexport function PayerConnectionHandler({\n payer,\n webViewClient,\n}: {\n payer: EmbeddedCheckoutPayer;\n webViewClient: WebViewParent<\n typeof embeddedCheckoutV3IncomingEvents,\n typeof embeddedCheckoutV3OutgoingEvents\n > | null;\n}) {\n useEffect(() => {\n if (webViewClient == null) {\n return;\n }\n\n const signTransactionListener = webViewClient.on(\n \"crypto:send-transaction\",\n async ({ chain, serializedTransaction }) => {\n try {\n await payer.handleChainSwitch(chain as PayerSupportedBlockchains);\n const tx = await payer.handleSignAndSendTransaction(serializedTransaction);\n if (tx.success) {\n webViewClient.send(\"crypto:send-transaction:success\", { txId: tx.txId });\n } else {\n webViewClient.send(\"crypto:send-transaction:failed\", { error: tx.errorMessage });\n }\n } catch (error) {\n console.error(\"[PayerConnectionHandler] Failed to send transaction\", error);\n webViewClient.send(\"crypto:send-transaction:failed\", {\n error: (error as Error).message || \"An unknown error occurred\",\n });\n }\n }\n );\n\n return () => {\n webViewClient.off(signTransactionListener);\n };\n }, [webViewClient]);\n\n return null;\n}\n"],"mappings":";;;;;AAAA,SAAS,iBAAiB;AAMnB,SAAS,uBAAuB;AAAA,EACnC;AAAA,EACA;AACJ,GAMG;AACC,YAAU,MAAM;AACZ,QAAI,iBAAiB,MAAM;AACvB;AAAA,IACJ;AAEA,UAAM,0BAA0B,cAAc;AAAA,MAC1C;AAAA,MACA,CAAO,OAAqC,eAArC,KAAqC,WAArC,EAAE,OAAO,sBAAsB,GAAM;AACxC,YAAI;AACA,gBAAM,MAAM,kBAAkB,KAAkC;AAChE,gBAAM,KAAK,MAAM,MAAM,6BAA6B,qBAAqB;AACzE,cAAI,GAAG,SAAS;AACZ,0BAAc,KAAK,mCAAmC,EAAE,MAAM,GAAG,KAAK,CAAC;AAAA,UAC3E,OAAO;AACH,0BAAc,KAAK,kCAAkC,EAAE,OAAO,GAAG,aAAa,CAAC;AAAA,UACnF;AAAA,QACJ,SAAS,OAAO;AACZ,kBAAQ,MAAM,uDAAuD,KAAK;AAC1E,wBAAc,KAAK,kCAAkC;AAAA,YACjD,OAAQ,MAAgB,WAAW;AAAA,UACvC,CAAC;AAAA,QACL;AAAA,MACJ;AAAA,IACJ;AAEA,WAAO,MAAM;AACT,oBAAc,IAAI,uBAAuB;AAAA,IAC7C;AAAA,EACJ,GAAG,CAAC,aAAa,CAAC;AAElB,SAAO;AACX;","names":[]}
@@ -0,0 +1,14 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/plugin/mods/addQueryToAndroidManifest.ts
2
+ function addQueryToAndroidManifest(androidManifest, query) {
3
+ const manifest = androidManifest.manifest;
4
+ if (!manifest.queries) {
5
+ manifest.queries = [];
6
+ }
7
+ manifest.queries.push(query);
8
+ return androidManifest;
9
+ }
10
+
11
+
12
+
13
+ exports.addQueryToAndroidManifest = addQueryToAndroidManifest;
14
+ //# sourceMappingURL=chunk-4HKXTAVR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/plugin/mods/addQueryToAndroidManifest.ts"],"names":[],"mappings":";AAEO,SAAS,0BAA0B,iBAAkC,OAAuC;AAC/G,QAAM,WAAW,gBAAgB;AAEjC,MAAI,CAAC,SAAS,SAAS;AACnB,aAAS,UAAU,CAAC;AAAA,EACxB;AAEA,WAAS,QAAQ,KAAK,KAAK;AAE3B,SAAO;AACX","sourcesContent":["import type { AndroidManifest, ManifestQuery } from \"@expo/config-plugins/build/android/Manifest\";\n\nexport function addQueryToAndroidManifest(androidManifest: AndroidManifest, query: ManifestQuery): AndroidManifest {\n const manifest = androidManifest.manifest;\n\n if (!manifest.queries) {\n manifest.queries = [];\n }\n\n manifest.queries.push(query);\n\n return androidManifest;\n}\n"]}