@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,157 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
-
3
- var _chunkMVLQR6RIjs = require('./chunk-MVLQR6RI.js');
4
-
5
-
6
- var _chunkBTH5QRITjs = require('./chunk-BTH5QRIT.js');
7
-
8
-
9
- var _chunkHELXBZ7Djs = require('./chunk-HELXBZ7D.js');
10
-
11
- // src/components/signers/PhoneSignersDialog.tsx
12
- var _reactnative = require('react-native');
13
- var _lucidereactnative = require('lucide-react-native');
14
- var _jsxruntime = require('react/jsx-runtime');
15
- var { width: screenWidth } = _reactnative.Dimensions.get("window");
16
- function PhoneSignersDialog({
17
- phone,
18
- open,
19
- setOpen,
20
- step,
21
- onSubmitOTP,
22
- onResendOTPCode,
23
- onSubmitPhone,
24
- rejectRef,
25
- appearance
26
- }) {
27
- var _a, _b, _c, _d, _e, _f;
28
- function handleOnCancel() {
29
- var _a2;
30
- if (open) {
31
- (_a2 = rejectRef.current) == null ? void 0 : _a2.call(rejectRef, new Error("User cancelled"));
32
- setOpen(false);
33
- }
34
- }
35
- const dynamicStyles = _reactnative.StyleSheet.create({
36
- modalOverlay: {
37
- flex: 1,
38
- backgroundColor: "rgba(0, 0, 0, 0.5)",
39
- justifyContent: "center",
40
- alignItems: "center",
41
- padding: 16
42
- },
43
- modalContainer: {
44
- backgroundColor: ((_a = appearance == null ? void 0 : appearance.colors) == null ? void 0 : _a.background) || _chunkHELXBZ7Djs.theme["cm-background-primary"],
45
- borderRadius: (appearance == null ? void 0 : appearance.borderRadius) || 12,
46
- padding: 32,
47
- width: Math.min(screenWidth - 32, 400),
48
- maxHeight: "80%",
49
- position: "relative",
50
- alignItems: "center",
51
- shadowColor: "#000",
52
- shadowOffset: {
53
- width: 0,
54
- height: 2
55
- },
56
- shadowOpacity: 0.25,
57
- shadowRadius: 4,
58
- elevation: 5
59
- },
60
- closeButton: {
61
- position: "absolute",
62
- top: 16,
63
- right: 16,
64
- width: 32,
65
- height: 32,
66
- borderRadius: 6,
67
- backgroundColor: ((_b = appearance == null ? void 0 : appearance.colors) == null ? void 0 : _b.inputBackground) || _chunkHELXBZ7Djs.theme["cm-muted-primary"],
68
- alignItems: "center",
69
- justifyContent: "center",
70
- zIndex: 1
71
- }
72
- });
73
- if (!open) {
74
- return null;
75
- }
76
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
77
- _reactnative.Modal,
78
- {
79
- visible: open,
80
- transparent: true,
81
- animationType: "fade",
82
- onRequestClose: handleOnCancel,
83
- statusBarTranslucent: true,
84
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _reactnative.View, { style: dynamicStyles.modalOverlay, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _reactnative.View, { style: dynamicStyles.modalContainer, children: [
85
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
86
- _reactnative.TouchableOpacity,
87
- {
88
- style: dynamicStyles.closeButton,
89
- onPress: handleOnCancel,
90
- hitSlop: { top: 10, bottom: 10, left: 10, right: 10 },
91
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereactnative.X, { size: 16, color: ((_c = appearance == null ? void 0 : appearance.colors) == null ? void 0 : _c.textSecondary) || _chunkHELXBZ7Djs.theme["cm-text-secondary"] })
92
- }
93
- ),
94
- step === "initial" ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
95
- _chunkBTH5QRITjs.BaseConfirmation,
96
- {
97
- contactInfo: phone != null ? phone : "",
98
- contactType: "phone",
99
- icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
100
- _lucidereactnative.PhoneIcon,
101
- {
102
- size: 22,
103
- color: ((_d = appearance == null ? void 0 : appearance.colors) == null ? void 0 : _d.textPrimary) || _chunkHELXBZ7Djs.theme["cm-text-primary"]
104
- }
105
- ),
106
- onConfirm: onSubmitPhone,
107
- onCancel: handleOnCancel,
108
- appearance
109
- }
110
- ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
111
- _chunkMVLQR6RIjs.BaseCodeInput,
112
- {
113
- contactInfo: phone != null ? phone : "",
114
- contactType: "phone",
115
- icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
116
- _reactnative.View,
117
- {
118
- style: {
119
- backgroundColor: ((_e = appearance == null ? void 0 : appearance.colors) == null ? void 0 : _e.accent) || _chunkHELXBZ7Djs.theme["cm-accent"],
120
- borderRadius: 999,
121
- padding: 12
122
- },
123
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
124
- _lucidereactnative.Smartphone,
125
- {
126
- size: 22,
127
- color: ((_f = appearance == null ? void 0 : appearance.colors) == null ? void 0 : _f.background) || _chunkHELXBZ7Djs.theme["cm-background-primary"]
128
- }
129
- )
130
- }
131
- ),
132
- title: "Check your phone",
133
- description: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _reactnative.Text, { children: [
134
- "A temporary login code has been sent via SMS to",
135
- " ",
136
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _reactnative.Text, { style: { fontWeight: "bold" }, children: phone })
137
- ] }),
138
- helpText: `Can't receive the SMS? Check your phone number.
139
- Some messages may take several minutes to arrive.`,
140
- onSubmitOTP,
141
- onResendCode: onResendOTPCode,
142
- appearance,
143
- otpLength: 10,
144
- keyboardType: "number-pad",
145
- autoComplete: "sms-otp",
146
- textContentType: "oneTimeCode"
147
- }
148
- )
149
- ] }) })
150
- }
151
- );
152
- }
153
-
154
-
155
-
156
- exports.PhoneSignersDialog = PhoneSignersDialog;
157
- //# sourceMappingURL=chunk-NBWATZY4.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/signers/PhoneSignersDialog.tsx"],"names":["_a"],"mappings":"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","sourcesContent":["import type { MutableRefObject } from \"react\";\nimport { View, StyleSheet, Dimensions, Modal, TouchableOpacity, Text } from \"react-native\";\nimport type { UIConfig } from \"@crossmint/common-sdk-base\";\nimport { PhoneIcon, Smartphone, X } from \"lucide-react-native\";\nimport { BaseConfirmation } from \"./BaseConfirmation\";\nimport { BaseCodeInput } from \"./BaseCodeInput\";\nimport { theme } from \"../../styles/theme\";\n\ninterface PhoneSignersDialogProps {\n phone?: string;\n open: boolean;\n setOpen: (open: boolean) => void;\n step: \"initial\" | \"otp\";\n onSubmitOTP: (token: string) => Promise<void>;\n onResendOTPCode: () => Promise<void>;\n onSubmitPhone: () => Promise<void>;\n rejectRef: MutableRefObject<((error: Error) => void) | undefined>;\n appearance?: UIConfig;\n}\n\nconst { width: screenWidth } = Dimensions.get(\"window\");\n\nexport function PhoneSignersDialog({\n phone,\n open,\n setOpen,\n step,\n onSubmitOTP,\n onResendOTPCode,\n onSubmitPhone,\n rejectRef,\n appearance,\n}: PhoneSignersDialogProps) {\n function handleOnCancel() {\n if (open) {\n rejectRef.current?.(new Error(\"User cancelled\"));\n setOpen(false);\n }\n }\n\n const dynamicStyles = StyleSheet.create({\n modalOverlay: {\n flex: 1,\n backgroundColor: \"rgba(0, 0, 0, 0.5)\",\n justifyContent: \"center\",\n alignItems: \"center\",\n padding: 16,\n },\n modalContainer: {\n backgroundColor: appearance?.colors?.background || theme[\"cm-background-primary\"],\n borderRadius: appearance?.borderRadius || 12,\n padding: 32,\n width: Math.min(screenWidth - 32, 400),\n maxHeight: \"80%\",\n position: \"relative\",\n alignItems: \"center\",\n shadowColor: \"#000\",\n shadowOffset: {\n width: 0,\n height: 2,\n },\n shadowOpacity: 0.25,\n shadowRadius: 4,\n elevation: 5,\n },\n closeButton: {\n position: \"absolute\",\n top: 16,\n right: 16,\n width: 32,\n height: 32,\n borderRadius: 6,\n backgroundColor: appearance?.colors?.inputBackground || theme[\"cm-muted-primary\"],\n alignItems: \"center\",\n justifyContent: \"center\",\n zIndex: 1,\n },\n });\n\n if (!open) {\n return null;\n }\n\n return (\n <Modal\n visible={open}\n transparent={true}\n animationType=\"fade\"\n onRequestClose={handleOnCancel}\n statusBarTranslucent={true}\n >\n <View style={dynamicStyles.modalOverlay}>\n <View style={dynamicStyles.modalContainer}>\n <TouchableOpacity\n style={dynamicStyles.closeButton}\n onPress={handleOnCancel}\n hitSlop={{ top: 10, bottom: 10, left: 10, right: 10 }}\n >\n <X size={16} color={appearance?.colors?.textSecondary || theme[\"cm-text-secondary\"]} />\n </TouchableOpacity>\n\n {step === \"initial\" ? (\n <BaseConfirmation\n contactInfo={phone ?? \"\"}\n contactType=\"phone\"\n icon={\n <PhoneIcon\n size={22}\n color={appearance?.colors?.textPrimary || theme[\"cm-text-primary\"]}\n />\n }\n onConfirm={onSubmitPhone}\n onCancel={handleOnCancel}\n appearance={appearance}\n />\n ) : (\n <BaseCodeInput\n contactInfo={phone ?? \"\"}\n contactType=\"phone\"\n icon={\n <View\n style={{\n backgroundColor: appearance?.colors?.accent || theme[\"cm-accent\"],\n borderRadius: 999,\n padding: 12,\n }}\n >\n <Smartphone\n size={22}\n color={appearance?.colors?.background || theme[\"cm-background-primary\"]}\n />\n </View>\n }\n title=\"Check your phone\"\n description={\n <Text>\n A temporary login code has been sent via SMS to{\" \"}\n <Text style={{ fontWeight: \"bold\" }}>{phone}</Text>\n </Text>\n }\n helpText={`Can't receive the SMS? Check your phone number.\\nSome messages may take several minutes to arrive.`}\n onSubmitOTP={onSubmitOTP}\n onResendCode={onResendOTPCode}\n appearance={appearance}\n otpLength={10}\n keyboardType=\"number-pad\"\n autoComplete=\"sms-otp\"\n textContentType=\"oneTimeCode\"\n />\n )}\n </View>\n </View>\n </Modal>\n );\n}\n"]}
@@ -1,55 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
-
3
- var _chunkQ7YPX4RJjs = require('./chunk-Q7YPX4RJ.js');
4
-
5
- // src/hooks/useWalletEmailSigner.ts
6
- var _react = require('react');
7
- var _clientsdkreactbase = require('@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 = _react.useContext.call(void 0, _clientsdkreactbase.CrossmintWalletBaseContext);
13
- if (context == null) {
14
- throw new Error("useWalletEmailSigner must be used within CrossmintWalletProvider");
15
- }
16
- const { emailSignerState } = context;
17
- const sendEmailWithOtp = _react.useCallback.call(void 0, () => _chunkQ7YPX4RJjs.__async.call(void 0, 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 = _react.useCallback.call(void 0,
25
- (otp) => _chunkQ7YPX4RJjs.__async.call(void 0, 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 = _react.useCallback.call(void 0,
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
-
53
-
54
- exports.useWalletEmailSigner = useWalletEmailSigner;
55
- //# sourceMappingURL=chunk-OTRMAWWU.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/hooks/useWalletEmailSigner.ts"],"names":[],"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","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"]}
@@ -1,17 +0,0 @@
1
- import {
2
- EmbeddedCheckoutV3WebView
3
- } from "./chunk-FCDPEDXH.mjs";
4
- import {
5
- __spreadValues
6
- } from "./chunk-7SPIOD4K.mjs";
7
-
8
- // src/components/embed/v3/CrossmintEmbeddedCheckoutV3.tsx
9
- import { jsx } from "react/jsx-runtime";
10
- function CrossmintEmbeddedCheckout(props) {
11
- return /* @__PURE__ */ jsx(EmbeddedCheckoutV3WebView, __spreadValues({}, props));
12
- }
13
-
14
- export {
15
- CrossmintEmbeddedCheckout
16
- };
17
- //# sourceMappingURL=chunk-P35PHJU5.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/embed/v3/CrossmintEmbeddedCheckoutV3.tsx"],"sourcesContent":["import { EmbeddedCheckoutV3WebView } from \"./EmbeddedCheckoutV3WebView\";\nimport type { CrossmintEmbeddedCheckoutV3Props } from \"@crossmint/client-sdk-base\";\n\nexport function CrossmintEmbeddedCheckout(props: CrossmintEmbeddedCheckoutV3Props) {\n return <EmbeddedCheckoutV3WebView {...props} />;\n}\n"],"mappings":";;;;;;;;AAIW;AADJ,SAAS,0BAA0B,OAAyC;AAC/E,SAAO,oBAAC,8CAA8B,MAAO;AACjD;","names":[]}
@@ -1,348 +0,0 @@
1
- import {
2
- LoggerContext
3
- } from "./chunk-S3OC5AT3.mjs";
4
- import {
5
- EmailSignersDialog
6
- } from "./chunk-CFHHVHNZ.mjs";
7
- import {
8
- PhoneSignersDialog
9
- } from "./chunk-4V7NDO5X.mjs";
10
- import {
11
- __async,
12
- __spreadValues
13
- } from "./chunk-7SPIOD4K.mjs";
14
-
15
- // src/providers/CrossmintWalletProvider.tsx
16
- import { useCallback, useRef, useMemo, useEffect, useState } from "react";
17
- import { Platform, View } from "react-native";
18
- import { RNWebView, WebViewParent } from "@crossmint/client-sdk-rn-window";
19
- import {
20
- environmentUrlConfig,
21
- signerInboundEvents,
22
- signerOutboundEvents,
23
- SignerErrorCode
24
- } from "@crossmint/client-signers";
25
- import { validateAPIKey } from "@crossmint/common-sdk-base";
26
- import {
27
- CrossmintWalletBaseProvider,
28
- useCrossmint
29
- } from "@crossmint/client-sdk-react-base";
30
- import { useLogger } from "@crossmint/client-sdk-react-base";
31
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
32
- function CrossmintWalletProviderInternal({
33
- children,
34
- createOnLogin,
35
- appearance,
36
- headlessSigningFlow = true,
37
- callbacks
38
- }) {
39
- const { crossmint } = useCrossmint("CrossmintWalletProvider must be used within CrossmintProvider");
40
- const logger = useLogger(LoggerContext);
41
- const { apiKey, appId } = crossmint;
42
- const parsedAPIKey = useMemo(() => {
43
- const result = validateAPIKey(apiKey);
44
- if (!result.isValid) {
45
- throw new Error("Invalid API key");
46
- }
47
- return result;
48
- }, [apiKey]);
49
- const frameUrl = useMemo(() => {
50
- return environmentUrlConfig[parsedAPIKey.environment];
51
- }, [parsedAPIKey.environment]);
52
- const webviewRef = useRef(null);
53
- const webViewParentRef = useRef(
54
- null
55
- );
56
- const [needsWebView, setNeedsWebView] = useState(false);
57
- const handshakeTriggeredRef = useRef(false);
58
- const handshakeInProgressRef = useRef(false);
59
- const handshakeGenerationRef = useRef(0);
60
- const handshakeStartTimeRef = useRef(0);
61
- const secureGlobals = useMemo(() => {
62
- if (appId != null) {
63
- return { crossmintAppId: appId };
64
- }
65
- return {};
66
- }, [appId]);
67
- const performHandshake = useCallback(
68
- (trigger) => __async(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: 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
- useEffect(() => {
131
- if (webviewRef.current != null && webViewParentRef.current == null) {
132
- logger.info("react-native.wallet.webview.initializing");
133
- webViewParentRef.current = new WebViewParent(webviewRef, {
134
- incomingEvents: signerOutboundEvents,
135
- outgoingEvents: signerInboundEvents,
136
- handshakeOptions: {
137
- timeoutMs: 3e4,
138
- intervalMs: 100
139
- },
140
- recovery: {
141
- recoverableErrorCodes: [SignerErrorCode.IndexedDbFatal]
142
- }
143
- });
144
- logger.info("react-native.wallet.webview.initialized");
145
- performHandshake("eager");
146
- }
147
- }, [needsWebView, logger, performHandshake]);
148
- const onWebViewLoad = useCallback(() => __async(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 = useCallback(
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__ */ jsxs(Fragment, { children: [
229
- /* @__PURE__ */ jsx(EmailSignersDialog, __spreadValues({}, emailSignerProps)),
230
- /* @__PURE__ */ jsx(PhoneSignersDialog, __spreadValues({}, phoneSignerProps))
231
- ] });
232
- };
233
- const initializeWebView = () => __async(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__ */ jsxs(
251
- 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__ */ jsx(
263
- View,
264
- {
265
- style: {
266
- position: "absolute",
267
- width: 0,
268
- height: 0,
269
- overflow: "hidden"
270
- },
271
- children: /* @__PURE__ */ jsx(
272
- 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: [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__ */ jsx(CrossmintWalletProviderInternal, __spreadValues({}, props));
343
- }
344
-
345
- export {
346
- CrossmintWalletProvider
347
- };
348
- //# sourceMappingURL=chunk-PUTC7LI4.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/providers/CrossmintWalletProvider.tsx"],"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"],"mappings":"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","names":[]}