@crossmint/client-sdk-react-native-ui 0.13.30 → 0.13.33

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 (297) hide show
  1. package/dist/chunk-2D2RJCVX.js +1 -0
  2. package/dist/chunk-2PX34LDU.js +1 -0
  3. package/dist/chunk-33A67NJB.js +1 -0
  4. package/dist/chunk-3QSVHCEH.mjs +2 -0
  5. package/dist/chunk-4K5AKIUY.mjs +1 -0
  6. package/dist/chunk-5CLFJLE4.mjs +0 -0
  7. package/dist/chunk-72MMCJ2E.js +1 -0
  8. package/dist/chunk-77GXCNDP.js +1 -0
  9. package/dist/chunk-7USVT6EZ.mjs +1 -0
  10. package/dist/chunk-AJMHVVST.js +1 -0
  11. package/dist/chunk-C62HRWJA.js +1 -0
  12. package/dist/chunk-D4347S2W.mjs +1 -0
  13. package/dist/chunk-D5QADN6Z.mjs +1 -0
  14. package/dist/chunk-DC5HCBPK.js +1 -0
  15. package/dist/chunk-DGDGCUWI.js +1 -0
  16. package/dist/chunk-DKQZSNOO.js +1 -0
  17. package/dist/chunk-DRF2SEV2.mjs +1 -0
  18. package/dist/chunk-DZIX4GTA.mjs +1 -0
  19. package/dist/chunk-EEGS6YBT.mjs +1 -0
  20. package/dist/chunk-EF2YTIUF.mjs +1 -0
  21. package/dist/chunk-EF5KYLDO.js +1 -0
  22. package/dist/chunk-EI5LOD4Y.js +1 -0
  23. package/dist/chunk-F7VXWATP.js +1 -0
  24. package/dist/chunk-FFQ6EQCL.mjs +1 -0
  25. package/dist/chunk-FX23A4BR.mjs +1 -0
  26. package/dist/chunk-GP5U5576.js +1 -0
  27. package/dist/chunk-I3QSTPTV.mjs +0 -0
  28. package/dist/chunk-I4D3YJW2.js +1 -0
  29. package/dist/chunk-IUDQDPIN.mjs +1 -0
  30. package/dist/chunk-J42HASCI.js +1 -0
  31. package/dist/chunk-J477SX6P.mjs +1 -0
  32. package/dist/chunk-J7Q2R6UH.mjs +0 -0
  33. package/dist/chunk-K36KMDCG.js +1 -0
  34. package/dist/chunk-KBGJNOSB.js +1 -0
  35. package/dist/chunk-LK3AO6AY.mjs +1 -0
  36. package/dist/chunk-LOFHVHXQ.js +1 -0
  37. package/dist/chunk-MB7H3PBJ.mjs +0 -0
  38. package/dist/chunk-MKCQJOIO.js +1 -0
  39. package/dist/chunk-MVVSGLQL.js +2 -0
  40. package/dist/chunk-OCOGB3KT.mjs +1 -0
  41. package/dist/chunk-PCJMDUSI.mjs +1 -0
  42. package/dist/chunk-PSSAAY7D.mjs +1 -0
  43. package/dist/chunk-RRFC7QEE.js +1 -0
  44. package/dist/chunk-SHTETN4C.js +1 -0
  45. package/dist/chunk-TIQGKXQA.mjs +0 -0
  46. package/dist/chunk-TUC3RZ6L.mjs +1 -0
  47. package/dist/chunk-UA34B5QB.js +1 -0
  48. package/dist/chunk-UBHIBMTA.mjs +0 -0
  49. package/dist/chunk-VACQTZRT.js +1 -0
  50. package/dist/chunk-VQE67ZFF.js +1 -0
  51. package/dist/chunk-XNDIT72O.mjs +2 -0
  52. package/dist/chunk-YJORUMPB.js +2 -0
  53. package/dist/chunk-YLJDAK2S.mjs +1 -0
  54. package/dist/chunk-YQEWHOQ7.js +1 -0
  55. package/dist/chunk-ZCKUSOGC.mjs +1 -0
  56. package/dist/chunk-ZI3GTSDG.mjs +1 -0
  57. package/dist/components/embed/index.js +1 -16
  58. package/dist/components/embed/index.mjs +1 -16
  59. package/dist/components/embed/v3/CrossmintEmbeddedCheckoutV3.js +1 -14
  60. package/dist/components/embed/v3/CrossmintEmbeddedCheckoutV3.mjs +1 -14
  61. package/dist/components/embed/v3/EmbeddedCheckoutV3WebView.js +1 -13
  62. package/dist/components/embed/v3/EmbeddedCheckoutV3WebView.mjs +1 -13
  63. package/dist/components/embed/v3/crypto/PayerConnectionHandler.js +1 -8
  64. package/dist/components/embed/v3/crypto/PayerConnectionHandler.mjs +1 -8
  65. package/dist/components/embed/v3/index.js +1 -15
  66. package/dist/components/embed/v3/index.mjs +1 -15
  67. package/dist/components/index.js +1 -34
  68. package/dist/components/index.mjs +1 -34
  69. package/dist/components/signers/BaseCodeInput.js +1 -9
  70. package/dist/components/signers/BaseCodeInput.mjs +1 -9
  71. package/dist/components/signers/BaseConfirmation.js +1 -9
  72. package/dist/components/signers/BaseConfirmation.mjs +1 -9
  73. package/dist/components/signers/EmailSignersDialog.js +1 -11
  74. package/dist/components/signers/EmailSignersDialog.mjs +1 -11
  75. package/dist/components/signers/PhoneSignersDialog.js +1 -11
  76. package/dist/components/signers/PhoneSignersDialog.mjs +1 -11
  77. package/dist/components/signers/index.js +1 -16
  78. package/dist/components/signers/index.mjs +1 -16
  79. package/dist/components/wallets/ExportPrivateKeyButton.js +1 -8
  80. package/dist/components/wallets/ExportPrivateKeyButton.mjs +1 -8
  81. package/dist/components/wallets/index.js +1 -9
  82. package/dist/components/wallets/index.mjs +1 -9
  83. package/dist/hooks/index.js +1 -26
  84. package/dist/hooks/index.mjs +1 -26
  85. package/dist/hooks/useAuth.js +1 -14
  86. package/dist/hooks/useAuth.mjs +1 -14
  87. package/dist/hooks/useCrossmintCheckout.js +1 -11
  88. package/dist/hooks/useCrossmintCheckout.mjs +1 -11
  89. package/dist/hooks/useWalletEmailSigner.js +1 -8
  90. package/dist/hooks/useWalletEmailSigner.mjs +1 -8
  91. package/dist/index.js +1 -79
  92. package/dist/index.mjs +1 -79
  93. package/dist/logger/init.js +1 -9
  94. package/dist/logger/init.mjs +1 -9
  95. package/dist/plugin/mods/addQueryToAndroidManifest.js +1 -8
  96. package/dist/plugin/mods/addQueryToAndroidManifest.mjs +1 -8
  97. package/dist/plugin/withGooglePay.js +1 -57
  98. package/dist/plugin/withGooglePay.mjs +1 -57
  99. package/dist/providers/CrossmintAuthProvider.js +1 -14
  100. package/dist/providers/CrossmintAuthProvider.mjs +1 -14
  101. package/dist/providers/CrossmintProvider.js +1 -12
  102. package/dist/providers/CrossmintProvider.mjs +1 -12
  103. package/dist/providers/CrossmintWalletProvider.js +1 -16
  104. package/dist/providers/CrossmintWalletProvider.mjs +1 -16
  105. package/dist/providers/index.js +1 -28
  106. package/dist/providers/index.mjs +1 -28
  107. package/dist/styles/index.js +1 -8
  108. package/dist/styles/index.mjs +1 -8
  109. package/dist/styles/theme.js +1 -8
  110. package/dist/styles/theme.mjs +1 -8
  111. package/dist/types/auth.js +1 -1
  112. package/dist/types/auth.mjs +0 -1
  113. package/dist/utils/SecureStorage.js +1 -8
  114. package/dist/utils/SecureStorage.mjs +1 -8
  115. package/dist/utils/createCrossmintApiClient.js +1 -9
  116. package/dist/utils/createCrossmintApiClient.mjs +1 -9
  117. package/dist/utils/embed/userAgent.js +1 -12
  118. package/dist/utils/embed/userAgent.mjs +1 -12
  119. package/dist/utils/eventEmitter.js +1 -8
  120. package/dist/utils/eventEmitter.mjs +1 -8
  121. package/package.json +58 -54
  122. package/dist/chunk-24MMQ2R4.js +0 -15
  123. package/dist/chunk-24MMQ2R4.js.map +0 -1
  124. package/dist/chunk-2DNOAXOE.mjs +0 -8
  125. package/dist/chunk-2DNOAXOE.mjs.map +0 -1
  126. package/dist/chunk-2TEAOLM6.mjs +0 -149
  127. package/dist/chunk-2TEAOLM6.mjs.map +0 -1
  128. package/dist/chunk-34OVOZB2.mjs +0 -111
  129. package/dist/chunk-34OVOZB2.mjs.map +0 -1
  130. package/dist/chunk-3AWDWMZ2.mjs +0 -18
  131. package/dist/chunk-3AWDWMZ2.mjs.map +0 -1
  132. package/dist/chunk-3PJ6FXFT.mjs +0 -1
  133. package/dist/chunk-3PJ6FXFT.mjs.map +0 -1
  134. package/dist/chunk-3SFSPJXM.mjs +0 -55
  135. package/dist/chunk-3SFSPJXM.mjs.map +0 -1
  136. package/dist/chunk-4AJTICKY.mjs +0 -44
  137. package/dist/chunk-4AJTICKY.mjs.map +0 -1
  138. package/dist/chunk-4HKXTAVR.js +0 -14
  139. package/dist/chunk-4HKXTAVR.js.map +0 -1
  140. package/dist/chunk-4V7NDO5X.mjs +0 -157
  141. package/dist/chunk-4V7NDO5X.mjs.map +0 -1
  142. package/dist/chunk-4WJIXD7U.mjs +0 -14
  143. package/dist/chunk-4WJIXD7U.mjs.map +0 -1
  144. package/dist/chunk-5V6ONJWT.mjs +0 -61
  145. package/dist/chunk-5V6ONJWT.mjs.map +0 -1
  146. package/dist/chunk-5ZBDQUNG.js +0 -1
  147. package/dist/chunk-5ZBDQUNG.js.map +0 -1
  148. package/dist/chunk-6S5SEVGS.js +0 -17
  149. package/dist/chunk-6S5SEVGS.js.map +0 -1
  150. package/dist/chunk-6Z74KC25.mjs +0 -1
  151. package/dist/chunk-6Z74KC25.mjs.map +0 -1
  152. package/dist/chunk-7SPIOD4K.mjs +0 -66
  153. package/dist/chunk-7SPIOD4K.mjs.map +0 -1
  154. package/dist/chunk-ALMDA3KN.mjs +0 -199
  155. package/dist/chunk-ALMDA3KN.mjs.map +0 -1
  156. package/dist/chunk-BE4HT2U7.mjs +0 -1
  157. package/dist/chunk-BE4HT2U7.mjs.map +0 -1
  158. package/dist/chunk-BTH5QRIT.js +0 -149
  159. package/dist/chunk-BTH5QRIT.js.map +0 -1
  160. package/dist/chunk-BUB4U2GE.js +0 -44
  161. package/dist/chunk-BUB4U2GE.js.map +0 -1
  162. package/dist/chunk-BUTZZ7JB.js +0 -36
  163. package/dist/chunk-BUTZZ7JB.js.map +0 -1
  164. package/dist/chunk-CFHHVHNZ.mjs +0 -157
  165. package/dist/chunk-CFHHVHNZ.mjs.map +0 -1
  166. package/dist/chunk-CV6RWU2T.js +0 -50
  167. package/dist/chunk-CV6RWU2T.js.map +0 -1
  168. package/dist/chunk-DD2MVD6A.mjs +0 -36
  169. package/dist/chunk-DD2MVD6A.mjs.map +0 -1
  170. package/dist/chunk-EKXEDMRD.mjs +0 -71
  171. package/dist/chunk-EKXEDMRD.mjs.map +0 -1
  172. package/dist/chunk-FCDPEDXH.mjs +0 -148
  173. package/dist/chunk-FCDPEDXH.mjs.map +0 -1
  174. package/dist/chunk-FQID5LOL.js +0 -22
  175. package/dist/chunk-FQID5LOL.js.map +0 -1
  176. package/dist/chunk-FRD6HEIM.mjs +0 -22
  177. package/dist/chunk-FRD6HEIM.mjs.map +0 -1
  178. package/dist/chunk-GYBEEYGB.mjs +0 -1
  179. package/dist/chunk-GYBEEYGB.mjs.map +0 -1
  180. package/dist/chunk-HELXBZ7D.js +0 -18
  181. package/dist/chunk-HELXBZ7D.js.map +0 -1
  182. package/dist/chunk-IBQK5B7B.js +0 -71
  183. package/dist/chunk-IBQK5B7B.js.map +0 -1
  184. package/dist/chunk-IHZNXV5S.js +0 -1
  185. package/dist/chunk-IHZNXV5S.js.map +0 -1
  186. package/dist/chunk-IMME6ZBV.js +0 -61
  187. package/dist/chunk-IMME6ZBV.js.map +0 -1
  188. package/dist/chunk-J2MDWDV6.mjs +0 -1
  189. package/dist/chunk-J2MDWDV6.mjs.map +0 -1
  190. package/dist/chunk-KK4SQ7WF.js +0 -1
  191. package/dist/chunk-KK4SQ7WF.js.map +0 -1
  192. package/dist/chunk-KOUCOMBE.js +0 -148
  193. package/dist/chunk-KOUCOMBE.js.map +0 -1
  194. package/dist/chunk-MMVER6VO.js +0 -1
  195. package/dist/chunk-MMVER6VO.js.map +0 -1
  196. package/dist/chunk-MVLQR6RI.js +0 -199
  197. package/dist/chunk-MVLQR6RI.js.map +0 -1
  198. package/dist/chunk-NBWATZY4.js +0 -157
  199. package/dist/chunk-NBWATZY4.js.map +0 -1
  200. package/dist/chunk-OTRMAWWU.js +0 -55
  201. package/dist/chunk-OTRMAWWU.js.map +0 -1
  202. package/dist/chunk-P35PHJU5.mjs +0 -17
  203. package/dist/chunk-P35PHJU5.mjs.map +0 -1
  204. package/dist/chunk-PUTC7LI4.mjs +0 -348
  205. package/dist/chunk-PUTC7LI4.mjs.map +0 -1
  206. package/dist/chunk-Q2Y5CZT4.js +0 -157
  207. package/dist/chunk-Q2Y5CZT4.js.map +0 -1
  208. package/dist/chunk-Q7YPX4RJ.js +0 -66
  209. package/dist/chunk-Q7YPX4RJ.js.map +0 -1
  210. package/dist/chunk-R47XMJ32.js +0 -1
  211. package/dist/chunk-R47XMJ32.js.map +0 -1
  212. package/dist/chunk-RSCBYS6I.mjs +0 -15
  213. package/dist/chunk-RSCBYS6I.mjs.map +0 -1
  214. package/dist/chunk-RTLOANMR.mjs +0 -50
  215. package/dist/chunk-RTLOANMR.mjs.map +0 -1
  216. package/dist/chunk-S3OC5AT3.mjs +0 -24
  217. package/dist/chunk-S3OC5AT3.mjs.map +0 -1
  218. package/dist/chunk-SHSENRY7.js +0 -24
  219. package/dist/chunk-SHSENRY7.js.map +0 -1
  220. package/dist/chunk-TNPZITVL.mjs +0 -1
  221. package/dist/chunk-TNPZITVL.mjs.map +0 -1
  222. package/dist/chunk-UNIFCVYR.js +0 -348
  223. package/dist/chunk-UNIFCVYR.js.map +0 -1
  224. package/dist/chunk-VCF2YXCO.js +0 -208
  225. package/dist/chunk-VCF2YXCO.js.map +0 -1
  226. package/dist/chunk-XNVZRSGL.js +0 -111
  227. package/dist/chunk-XNVZRSGL.js.map +0 -1
  228. package/dist/chunk-XUGJXLWC.js +0 -8
  229. package/dist/chunk-XUGJXLWC.js.map +0 -1
  230. package/dist/chunk-XXJ7LQ44.js +0 -1
  231. package/dist/chunk-XXJ7LQ44.js.map +0 -1
  232. package/dist/chunk-Z7Y7COJM.mjs +0 -208
  233. package/dist/chunk-Z7Y7COJM.mjs.map +0 -1
  234. package/dist/components/embed/index.js.map +0 -1
  235. package/dist/components/embed/index.mjs.map +0 -1
  236. package/dist/components/embed/v3/CrossmintEmbeddedCheckoutV3.js.map +0 -1
  237. package/dist/components/embed/v3/CrossmintEmbeddedCheckoutV3.mjs.map +0 -1
  238. package/dist/components/embed/v3/EmbeddedCheckoutV3WebView.js.map +0 -1
  239. package/dist/components/embed/v3/EmbeddedCheckoutV3WebView.mjs.map +0 -1
  240. package/dist/components/embed/v3/crypto/PayerConnectionHandler.js.map +0 -1
  241. package/dist/components/embed/v3/crypto/PayerConnectionHandler.mjs.map +0 -1
  242. package/dist/components/embed/v3/index.js.map +0 -1
  243. package/dist/components/embed/v3/index.mjs.map +0 -1
  244. package/dist/components/index.js.map +0 -1
  245. package/dist/components/index.mjs.map +0 -1
  246. package/dist/components/signers/BaseCodeInput.js.map +0 -1
  247. package/dist/components/signers/BaseCodeInput.mjs.map +0 -1
  248. package/dist/components/signers/BaseConfirmation.js.map +0 -1
  249. package/dist/components/signers/BaseConfirmation.mjs.map +0 -1
  250. package/dist/components/signers/EmailSignersDialog.js.map +0 -1
  251. package/dist/components/signers/EmailSignersDialog.mjs.map +0 -1
  252. package/dist/components/signers/PhoneSignersDialog.js.map +0 -1
  253. package/dist/components/signers/PhoneSignersDialog.mjs.map +0 -1
  254. package/dist/components/signers/index.js.map +0 -1
  255. package/dist/components/signers/index.mjs.map +0 -1
  256. package/dist/components/wallets/ExportPrivateKeyButton.js.map +0 -1
  257. package/dist/components/wallets/ExportPrivateKeyButton.mjs.map +0 -1
  258. package/dist/components/wallets/index.js.map +0 -1
  259. package/dist/components/wallets/index.mjs.map +0 -1
  260. package/dist/hooks/index.js.map +0 -1
  261. package/dist/hooks/index.mjs.map +0 -1
  262. package/dist/hooks/useAuth.js.map +0 -1
  263. package/dist/hooks/useAuth.mjs.map +0 -1
  264. package/dist/hooks/useCrossmintCheckout.js.map +0 -1
  265. package/dist/hooks/useCrossmintCheckout.mjs.map +0 -1
  266. package/dist/hooks/useWalletEmailSigner.js.map +0 -1
  267. package/dist/hooks/useWalletEmailSigner.mjs.map +0 -1
  268. package/dist/index.js.map +0 -1
  269. package/dist/index.mjs.map +0 -1
  270. package/dist/logger/init.js.map +0 -1
  271. package/dist/logger/init.mjs.map +0 -1
  272. package/dist/plugin/mods/addQueryToAndroidManifest.js.map +0 -1
  273. package/dist/plugin/mods/addQueryToAndroidManifest.mjs.map +0 -1
  274. package/dist/plugin/withGooglePay.js.map +0 -1
  275. package/dist/plugin/withGooglePay.mjs.map +0 -1
  276. package/dist/providers/CrossmintAuthProvider.js.map +0 -1
  277. package/dist/providers/CrossmintAuthProvider.mjs.map +0 -1
  278. package/dist/providers/CrossmintProvider.js.map +0 -1
  279. package/dist/providers/CrossmintProvider.mjs.map +0 -1
  280. package/dist/providers/CrossmintWalletProvider.js.map +0 -1
  281. package/dist/providers/CrossmintWalletProvider.mjs.map +0 -1
  282. package/dist/providers/index.js.map +0 -1
  283. package/dist/providers/index.mjs.map +0 -1
  284. package/dist/styles/index.js.map +0 -1
  285. package/dist/styles/index.mjs.map +0 -1
  286. package/dist/styles/theme.js.map +0 -1
  287. package/dist/styles/theme.mjs.map +0 -1
  288. package/dist/types/auth.js.map +0 -1
  289. package/dist/types/auth.mjs.map +0 -1
  290. package/dist/utils/SecureStorage.js.map +0 -1
  291. package/dist/utils/SecureStorage.mjs.map +0 -1
  292. package/dist/utils/createCrossmintApiClient.js.map +0 -1
  293. package/dist/utils/createCrossmintApiClient.mjs.map +0 -1
  294. package/dist/utils/embed/userAgent.js.map +0 -1
  295. package/dist/utils/embed/userAgent.mjs.map +0 -1
  296. package/dist/utils/eventEmitter.js.map +0 -1
  297. package/dist/utils/eventEmitter.mjs.map +0 -1
@@ -1,348 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
-
3
- var _chunkSHSENRY7js = require('./chunk-SHSENRY7.js');
4
-
5
-
6
- var _chunkQ2Y5CZT4js = require('./chunk-Q2Y5CZT4.js');
7
-
8
-
9
- var _chunkNBWATZY4js = require('./chunk-NBWATZY4.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, _chunkSHSENRY7js.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-UNIFCVYR.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/providers/CrossmintWalletProvider.tsx"],"names":[],"mappings":"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","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"]}
@@ -1,208 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2
-
3
- var _chunkIBQK5B7Bjs = require('./chunk-IBQK5B7B.js');
4
-
5
-
6
-
7
- var _chunkQ7YPX4RJjs = require('./chunk-Q7YPX4RJ.js');
8
-
9
- // src/providers/CrossmintAuthProvider.tsx
10
- var _react = require('react');
11
- var _expowebbrowser = require('expo-web-browser'); var WebBrowser = _interopRequireWildcard(_expowebbrowser);
12
- var _expoconstants = require('expo-constants'); var _expoconstants2 = _interopRequireDefault(_expoconstants);
13
- var _reactnative = require('react-native');
14
- var _clientsdkreactbase = require('@crossmint/client-sdk-react-base');
15
-
16
- // src/hooks/index.ts
17
-
18
-
19
- // src/hooks/useAuth.ts
20
-
21
- function useCrossmintAuth() {
22
- const context = _react.useContext.call(void 0, AuthContext);
23
- if (context == null) {
24
- throw new Error("useCrossmintAuth must be used within a CrossmintAuthProvider");
25
- }
26
- return context;
27
- }
28
- var useAuth = useCrossmintAuth;
29
-
30
- // src/providers/CrossmintAuthProvider.tsx
31
- var _jsxruntime = require('react/jsx-runtime');
32
- var initialOAuthUrlMap = {
33
- google: null,
34
- twitter: null
35
- };
36
- var defaultContextValue = {
37
- crossmintAuth: void 0,
38
- login: () => {
39
- },
40
- logout: () => _chunkQ7YPX4RJjs.__async.call(void 0, void 0, null, function* () {
41
- }),
42
- jwt: void 0,
43
- user: void 0,
44
- status: "initializing",
45
- getUser: () => {
46
- },
47
- loginWithOAuth: () => Promise.resolve(),
48
- createAuthSession: () => Promise.resolve(null)
49
- };
50
- var AuthContext = _react.createContext.call(void 0, defaultContextValue);
51
- function CrossmintAuthSync({ children }) {
52
- const { experimental_setCustomAuth, experimental_customAuth } = _clientsdkreactbase.useCrossmint.call(void 0, );
53
- const { user, jwt } = useAuth();
54
- _react.useEffect.call(void 0, () => {
55
- if (jwt == null && (experimental_customAuth == null ? void 0 : experimental_customAuth.jwt) != null) {
56
- experimental_setCustomAuth(void 0);
57
- }
58
- if (jwt != null) {
59
- experimental_setCustomAuth({
60
- jwt,
61
- email: user == null ? void 0 : user.email
62
- });
63
- }
64
- }, [experimental_setCustomAuth, jwt, user]);
65
- return children;
66
- }
67
- function CrossmintAuthProviderContent({
68
- children,
69
- appSchema
70
- }) {
71
- const baseAuth = _clientsdkreactbase.useCrossmintAuthBase.call(void 0, );
72
- const [oauthUrlMap, setOauthUrlMap] = _react.useState.call(void 0, initialOAuthUrlMap);
73
- const [inProgress, setInProgress] = _react.useState.call(void 0, false);
74
- const singleAppSchema = Array.isArray(appSchema) ? appSchema[0] : appSchema;
75
- const isRunningInExpoGo = _expoconstants2.default.executionEnvironment === "storeClient" || _expoconstants2.default.appOwnership === "expo" || !!_expoconstants2.default.expoVersion;
76
- const resolvedAppSchema = isRunningInExpoGo ? "exp://127.0.0.1:8081" : singleAppSchema;
77
- const preFetchAndSetOauthUrl = _react.useCallback.call(void 0, () => _chunkQ7YPX4RJjs.__async.call(void 0, this, null, function* () {
78
- try {
79
- const oauthProviders = Object.keys(initialOAuthUrlMap);
80
- const oauthPromiseList = oauthProviders.map((provider) => _chunkQ7YPX4RJjs.__async.call(void 0, this, null, function* () {
81
- var _a;
82
- const url = yield (_a = baseAuth.crossmintAuth) == null ? void 0 : _a.getOAuthUrl(provider, {
83
- appSchema: resolvedAppSchema
84
- });
85
- return { [provider]: url };
86
- }));
87
- const oauthUrlMap2 = Object.assign({}, ...yield Promise.all(oauthPromiseList));
88
- setOauthUrlMap(oauthUrlMap2);
89
- } catch (error) {
90
- console.error(error);
91
- }
92
- }), [baseAuth.crossmintAuth, resolvedAppSchema]);
93
- _react.useEffect.call(void 0, () => {
94
- if (baseAuth.user == null) {
95
- preFetchAndSetOauthUrl();
96
- }
97
- }, [preFetchAndSetOauthUrl, baseAuth.user]);
98
- const getAuthStatus = () => {
99
- if (baseAuth.status === "initializing") {
100
- return "initializing";
101
- }
102
- if (inProgress) {
103
- return "in-progress";
104
- }
105
- if (baseAuth.jwt != null) {
106
- return "logged-in";
107
- }
108
- return "logged-out";
109
- };
110
- const loginWithOAuth = (provider) => _chunkQ7YPX4RJjs.__async.call(void 0, this, null, function* () {
111
- var _a, _b;
112
- try {
113
- setInProgress(true);
114
- const oauthUrl = (_b = oauthUrlMap[provider]) != null ? _b : yield (_a = baseAuth.crossmintAuth) == null ? void 0 : _a.getOAuthUrl(provider, { appSchema: resolvedAppSchema });
115
- yield WebBrowser.warmUpAsync();
116
- const baseUrl = new URL(oauthUrl);
117
- if (provider === "google") {
118
- baseUrl.searchParams.append("provider_prompt", "select_account");
119
- }
120
- if (_reactnative.Platform.OS === "android") {
121
- yield WebBrowser.openBrowserAsync(baseUrl.toString());
122
- } else {
123
- const result = yield WebBrowser.openAuthSessionAsync(baseUrl.toString());
124
- if (result.type === "success") {
125
- yield createAuthSession(result.url);
126
- }
127
- }
128
- yield WebBrowser.coolDownAsync();
129
- } catch (error) {
130
- console.error("[CrossmintAuthProvider] Error during OAuth login:", error);
131
- throw new Error(`Error during OAuth login: ${error}`);
132
- } finally {
133
- setInProgress(false);
134
- }
135
- });
136
- const createAuthSession = _react.useCallback.call(void 0,
137
- (urlOrOneTimeSecret) => _chunkQ7YPX4RJjs.__async.call(void 0, this, null, function* () {
138
- var _a;
139
- const oneTimeSecret = urlOrOneTimeSecret.includes("://") ? extractOneTimeSecretFromUrl(urlOrOneTimeSecret) : urlOrOneTimeSecret;
140
- if (oneTimeSecret != null) {
141
- try {
142
- setInProgress(true);
143
- const authMaterial = yield (_a = baseAuth.crossmintAuth) == null ? void 0 : _a.handleRefreshAuthMaterial(oneTimeSecret);
144
- return authMaterial;
145
- } catch (error) {
146
- throw error;
147
- } finally {
148
- setInProgress(false);
149
- }
150
- }
151
- return null;
152
- }),
153
- [baseAuth.crossmintAuth]
154
- );
155
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
156
- AuthContext.Provider,
157
- {
158
- value: {
159
- crossmintAuth: baseAuth.crossmintAuth,
160
- logout: baseAuth.logout,
161
- jwt: baseAuth.jwt,
162
- user: baseAuth.user,
163
- status: getAuthStatus(),
164
- getUser: baseAuth.getUser,
165
- login: () => {
166
- },
167
- loginWithOAuth,
168
- createAuthSession
169
- },
170
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, CrossmintAuthSync, { children })
171
- }
172
- );
173
- }
174
- function CrossmintAuthProvider(_a) {
175
- var _b = _a, { children } = _b, props = _chunkQ7YPX4RJjs.__objRest.call(void 0, _b, ["children"]);
176
- var _a2, _b2;
177
- const appSchema = (_b2 = props.appSchema) != null ? _b2 : (_a2 = _expoconstants2.default.expoConfig) == null ? void 0 : _a2.scheme;
178
- const customStorageProvider = _react.useMemo.call(void 0, () => {
179
- var _a3;
180
- return (_a3 = props.storageProvider) != null ? _a3 : new (0, _chunkIBQK5B7Bjs.SecureStorage)();
181
- }, [props.storageProvider]);
182
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
183
- _clientsdkreactbase.CrossmintAuthBaseProvider,
184
- {
185
- onLoginSuccess: props.onLoginSuccess,
186
- refreshRoute: props.refreshRoute,
187
- logoutRoute: props.logoutRoute,
188
- storageProvider: customStorageProvider,
189
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, CrossmintAuthProviderContent, { appSchema, children })
190
- }
191
- );
192
- }
193
- var extractOneTimeSecretFromUrl = (url) => {
194
- const regex = /[?&]oneTimeSecret=([^&#]+)/;
195
- const match = url.match(regex);
196
- const secret = match ? decodeURIComponent(match[1]) : void 0;
197
- return secret;
198
- };
199
-
200
-
201
-
202
-
203
-
204
-
205
-
206
-
207
- exports.AuthContext = AuthContext; exports.CrossmintAuthProvider = CrossmintAuthProvider; exports.useCrossmintAuth = useCrossmintAuth; exports.useAuth = useAuth; exports.useCrossmint = _clientsdkreactbase.useCrossmint; exports.useWallet = _clientsdkreactbase.useWallet;
208
- //# sourceMappingURL=chunk-VCF2YXCO.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/providers/CrossmintAuthProvider.tsx","../src/hooks/index.ts","../src/hooks/useAuth.ts"],"names":["oauthUrlMap","_a","_b"],"mappings":"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","sourcesContent":["import { type ReactNode, createContext, useEffect, useMemo, useState, useCallback } from \"react\";\nimport * as WebBrowser from \"expo-web-browser\";\nimport Constants from \"expo-constants\";\nimport { Platform } from \"react-native\";\nimport type { OAuthProvider } from \"@crossmint/common-sdk-auth\";\nimport { type AuthStatus, CrossmintAuthBaseProvider, useCrossmintAuthBase } from \"@crossmint/client-sdk-react-base\";\nimport { useAuth, useCrossmint } from \"../hooks\";\nimport { SecureStorage } from \"../utils/SecureStorage\";\nimport type { RNAuthContext, RNCrossmintAuthProviderProps } from \"@/types/auth\";\n\ntype OAuthUrlMap = Record<OAuthProvider, string | null>;\nconst initialOAuthUrlMap: OAuthUrlMap = {\n google: null,\n twitter: null,\n};\n\nconst defaultContextValue: RNAuthContext = {\n crossmintAuth: undefined,\n login: () => {},\n logout: async () => {},\n jwt: undefined,\n user: undefined,\n status: \"initializing\",\n getUser: () => {},\n loginWithOAuth: () => Promise.resolve(),\n createAuthSession: () => Promise.resolve(null),\n};\n\nexport const AuthContext = createContext<RNAuthContext>(defaultContextValue);\n\nfunction CrossmintAuthSync({ children }: { children: ReactNode }) {\n const { experimental_setCustomAuth, experimental_customAuth } = useCrossmint();\n const { user, jwt } = useAuth();\n\n useEffect(() => {\n if (jwt == null && experimental_customAuth?.jwt != null) {\n experimental_setCustomAuth(undefined);\n }\n if (jwt != null) {\n experimental_setCustomAuth({\n jwt,\n email: user?.email,\n });\n }\n }, [experimental_setCustomAuth, jwt, user]);\n\n return children;\n}\n\nfunction CrossmintAuthProviderContent({\n children,\n appSchema,\n}: {\n children: ReactNode;\n appSchema?: string | string[];\n}) {\n const baseAuth = useCrossmintAuthBase();\n const [oauthUrlMap, setOauthUrlMap] = useState<OAuthUrlMap>(initialOAuthUrlMap);\n const [inProgress, setInProgress] = useState(false);\n\n const singleAppSchema = Array.isArray(appSchema) ? appSchema[0] : appSchema;\n const isRunningInExpoGo =\n Constants.executionEnvironment === \"storeClient\" ||\n Constants.appOwnership === \"expo\" ||\n !!Constants.expoVersion;\n const resolvedAppSchema = isRunningInExpoGo ? \"exp://127.0.0.1:8081\" : singleAppSchema;\n\n const preFetchAndSetOauthUrl = useCallback(async () => {\n try {\n const oauthProviders = Object.keys(initialOAuthUrlMap);\n\n const oauthPromiseList = oauthProviders.map(async (provider) => {\n const url = await baseAuth.crossmintAuth?.getOAuthUrl(provider as OAuthProvider, {\n appSchema: resolvedAppSchema,\n });\n return { [provider]: url };\n });\n\n const oauthUrlMap = Object.assign({}, ...(await Promise.all(oauthPromiseList)));\n setOauthUrlMap(oauthUrlMap);\n } catch (error) {\n console.error(error);\n }\n }, [baseAuth.crossmintAuth, resolvedAppSchema]);\n\n useEffect(() => {\n if (baseAuth.user == null) {\n preFetchAndSetOauthUrl();\n }\n }, [preFetchAndSetOauthUrl, baseAuth.user]);\n\n const getAuthStatus = (): AuthStatus => {\n if (baseAuth.status === \"initializing\") {\n return \"initializing\";\n }\n if (inProgress) {\n return \"in-progress\";\n }\n if (baseAuth.jwt != null) {\n return \"logged-in\";\n }\n return \"logged-out\";\n };\n\n const loginWithOAuth = async (provider: OAuthProvider) => {\n try {\n setInProgress(true);\n const oauthUrl =\n oauthUrlMap[provider] ??\n (await baseAuth.crossmintAuth?.getOAuthUrl(provider, { appSchema: resolvedAppSchema }));\n\n await WebBrowser.warmUpAsync();\n const baseUrl = new URL(oauthUrl);\n if (provider === \"google\") {\n baseUrl.searchParams.append(\"provider_prompt\", \"select_account\");\n }\n\n if (Platform.OS === \"android\") {\n await WebBrowser.openBrowserAsync(baseUrl.toString());\n } else {\n const result = await WebBrowser.openAuthSessionAsync(baseUrl.toString());\n if (result.type === \"success\") {\n await createAuthSession(result.url);\n }\n }\n await WebBrowser.coolDownAsync();\n } catch (error) {\n console.error(\"[CrossmintAuthProvider] Error during OAuth login:\", error);\n throw new Error(`Error during OAuth login: ${error}`);\n } finally {\n setInProgress(false);\n }\n };\n\n const createAuthSession = useCallback(\n async (urlOrOneTimeSecret: string) => {\n const oneTimeSecret = urlOrOneTimeSecret.includes(\"://\")\n ? extractOneTimeSecretFromUrl(urlOrOneTimeSecret)\n : urlOrOneTimeSecret;\n\n if (oneTimeSecret != null) {\n try {\n setInProgress(true);\n const authMaterial = await baseAuth.crossmintAuth?.handleRefreshAuthMaterial(oneTimeSecret);\n return authMaterial;\n } catch (error) {\n throw error;\n } finally {\n setInProgress(false);\n }\n }\n return null;\n },\n [baseAuth.crossmintAuth]\n );\n\n return (\n <AuthContext.Provider\n value={{\n crossmintAuth: baseAuth.crossmintAuth,\n logout: baseAuth.logout,\n jwt: baseAuth.jwt,\n user: baseAuth.user,\n status: getAuthStatus(),\n getUser: baseAuth.getUser,\n login: () => {},\n loginWithOAuth,\n createAuthSession,\n }}\n >\n <CrossmintAuthSync>{children}</CrossmintAuthSync>\n </AuthContext.Provider>\n );\n}\n\nexport function CrossmintAuthProvider({ children, ...props }: RNCrossmintAuthProviderProps) {\n const appSchema = props.appSchema ?? Constants.expoConfig?.scheme;\n const customStorageProvider = useMemo(() => props.storageProvider ?? new SecureStorage(), [props.storageProvider]);\n\n return (\n <CrossmintAuthBaseProvider\n onLoginSuccess={props.onLoginSuccess}\n refreshRoute={props.refreshRoute}\n logoutRoute={props.logoutRoute}\n storageProvider={customStorageProvider}\n >\n <CrossmintAuthProviderContent appSchema={appSchema}>{children}</CrossmintAuthProviderContent>\n </CrossmintAuthBaseProvider>\n );\n}\n\nconst extractOneTimeSecretFromUrl = (url: string): string | undefined => {\n const regex = /[?&]oneTimeSecret=([^&#]+)/;\n const match = url.match(regex);\n const secret = match ? decodeURIComponent(match[1]) : undefined;\n return secret;\n};\n","export { useCrossmint, useWallet } from \"@crossmint/client-sdk-react-base\";\nexport * from \"./useWalletEmailSigner\";\nexport * from \"./useCrossmintCheckout\";\nexport * from \"./useAuth\";\n","import { useContext } from \"react\";\nimport type { CrossmintAuthBaseContextType } from \"@crossmint/client-sdk-react-base\";\nimport type { AuthMaterialWithUser, OAuthProvider } from \"@crossmint/common-sdk-auth\";\nimport { AuthContext } from \"@/providers/CrossmintAuthProvider\";\n\ninterface RNCrossmintAuthContext extends CrossmintAuthBaseContextType {\n loginWithOAuth: (provider: OAuthProvider) => Promise<void>;\n createAuthSession: (urlOrOneTimeSecret: string) => Promise<AuthMaterialWithUser | null>;\n}\n\nexport function useCrossmintAuth(): RNCrossmintAuthContext {\n const context = useContext(AuthContext);\n if (context == null) {\n throw new Error(\"useCrossmintAuth must be used within a CrossmintAuthProvider\");\n }\n return context;\n}\n\nexport const useAuth = useCrossmintAuth;\n"]}