@crossmint/client-sdk-react-native-ui 0.13.30 → 0.13.32
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.
- package/dist/chunk-2D2RJCVX.js +1 -0
- package/dist/chunk-2PX34LDU.js +1 -0
- package/dist/chunk-33A67NJB.js +1 -0
- package/dist/chunk-3QSVHCEH.mjs +2 -0
- package/dist/chunk-4K5AKIUY.mjs +1 -0
- package/dist/chunk-5CLFJLE4.mjs +0 -0
- package/dist/chunk-72MMCJ2E.js +1 -0
- package/dist/chunk-77GXCNDP.js +1 -0
- package/dist/chunk-7USVT6EZ.mjs +1 -0
- package/dist/chunk-AJMHVVST.js +1 -0
- package/dist/chunk-C62HRWJA.js +1 -0
- package/dist/chunk-D4347S2W.mjs +1 -0
- package/dist/chunk-D5QADN6Z.mjs +1 -0
- package/dist/chunk-DC5HCBPK.js +1 -0
- package/dist/chunk-DGDGCUWI.js +1 -0
- package/dist/chunk-DKQZSNOO.js +1 -0
- package/dist/chunk-DRF2SEV2.mjs +1 -0
- package/dist/chunk-DZIX4GTA.mjs +1 -0
- package/dist/chunk-EEGS6YBT.mjs +1 -0
- package/dist/chunk-EF2YTIUF.mjs +1 -0
- package/dist/chunk-EF5KYLDO.js +1 -0
- package/dist/chunk-EI5LOD4Y.js +1 -0
- package/dist/chunk-F7VXWATP.js +1 -0
- package/dist/chunk-FFQ6EQCL.mjs +1 -0
- package/dist/chunk-FX23A4BR.mjs +1 -0
- package/dist/chunk-GP5U5576.js +1 -0
- package/dist/chunk-I3QSTPTV.mjs +0 -0
- package/dist/chunk-I4D3YJW2.js +1 -0
- package/dist/chunk-IUDQDPIN.mjs +1 -0
- package/dist/chunk-J42HASCI.js +1 -0
- package/dist/chunk-J477SX6P.mjs +1 -0
- package/dist/chunk-J7Q2R6UH.mjs +0 -0
- package/dist/chunk-K36KMDCG.js +1 -0
- package/dist/chunk-KBGJNOSB.js +1 -0
- package/dist/chunk-LK3AO6AY.mjs +1 -0
- package/dist/chunk-LOFHVHXQ.js +1 -0
- package/dist/chunk-MB7H3PBJ.mjs +0 -0
- package/dist/chunk-MKCQJOIO.js +1 -0
- package/dist/chunk-MVVSGLQL.js +2 -0
- package/dist/chunk-OCOGB3KT.mjs +1 -0
- package/dist/chunk-PCJMDUSI.mjs +1 -0
- package/dist/chunk-PSSAAY7D.mjs +1 -0
- package/dist/chunk-RRFC7QEE.js +1 -0
- package/dist/chunk-SHTETN4C.js +1 -0
- package/dist/chunk-TIQGKXQA.mjs +0 -0
- package/dist/chunk-TUC3RZ6L.mjs +1 -0
- package/dist/chunk-UA34B5QB.js +1 -0
- package/dist/chunk-UBHIBMTA.mjs +0 -0
- package/dist/chunk-VACQTZRT.js +1 -0
- package/dist/chunk-VQE67ZFF.js +1 -0
- package/dist/chunk-XNDIT72O.mjs +2 -0
- package/dist/chunk-YJORUMPB.js +2 -0
- package/dist/chunk-YLJDAK2S.mjs +1 -0
- package/dist/chunk-YQEWHOQ7.js +1 -0
- package/dist/chunk-ZCKUSOGC.mjs +1 -0
- package/dist/chunk-ZI3GTSDG.mjs +1 -0
- package/dist/components/embed/index.js +1 -16
- package/dist/components/embed/index.mjs +1 -16
- package/dist/components/embed/v3/CrossmintEmbeddedCheckoutV3.js +1 -14
- package/dist/components/embed/v3/CrossmintEmbeddedCheckoutV3.mjs +1 -14
- package/dist/components/embed/v3/EmbeddedCheckoutV3WebView.js +1 -13
- package/dist/components/embed/v3/EmbeddedCheckoutV3WebView.mjs +1 -13
- package/dist/components/embed/v3/crypto/PayerConnectionHandler.js +1 -8
- package/dist/components/embed/v3/crypto/PayerConnectionHandler.mjs +1 -8
- package/dist/components/embed/v3/index.js +1 -15
- package/dist/components/embed/v3/index.mjs +1 -15
- package/dist/components/index.js +1 -34
- package/dist/components/index.mjs +1 -34
- package/dist/components/signers/BaseCodeInput.js +1 -9
- package/dist/components/signers/BaseCodeInput.mjs +1 -9
- package/dist/components/signers/BaseConfirmation.js +1 -9
- package/dist/components/signers/BaseConfirmation.mjs +1 -9
- package/dist/components/signers/EmailSignersDialog.js +1 -11
- package/dist/components/signers/EmailSignersDialog.mjs +1 -11
- package/dist/components/signers/PhoneSignersDialog.js +1 -11
- package/dist/components/signers/PhoneSignersDialog.mjs +1 -11
- package/dist/components/signers/index.js +1 -16
- package/dist/components/signers/index.mjs +1 -16
- package/dist/components/wallets/ExportPrivateKeyButton.js +1 -8
- package/dist/components/wallets/ExportPrivateKeyButton.mjs +1 -8
- package/dist/components/wallets/index.js +1 -9
- package/dist/components/wallets/index.mjs +1 -9
- package/dist/hooks/index.js +1 -26
- package/dist/hooks/index.mjs +1 -26
- package/dist/hooks/useAuth.js +1 -14
- package/dist/hooks/useAuth.mjs +1 -14
- package/dist/hooks/useCrossmintCheckout.js +1 -11
- package/dist/hooks/useCrossmintCheckout.mjs +1 -11
- package/dist/hooks/useWalletEmailSigner.js +1 -8
- package/dist/hooks/useWalletEmailSigner.mjs +1 -8
- package/dist/index.js +1 -79
- package/dist/index.mjs +1 -79
- package/dist/logger/init.js +1 -9
- package/dist/logger/init.mjs +1 -9
- package/dist/plugin/mods/addQueryToAndroidManifest.js +1 -8
- package/dist/plugin/mods/addQueryToAndroidManifest.mjs +1 -8
- package/dist/plugin/withGooglePay.js +1 -57
- package/dist/plugin/withGooglePay.mjs +1 -57
- package/dist/providers/CrossmintAuthProvider.js +1 -14
- package/dist/providers/CrossmintAuthProvider.mjs +1 -14
- package/dist/providers/CrossmintProvider.js +1 -12
- package/dist/providers/CrossmintProvider.mjs +1 -12
- package/dist/providers/CrossmintWalletProvider.js +1 -16
- package/dist/providers/CrossmintWalletProvider.mjs +1 -16
- package/dist/providers/index.js +1 -28
- package/dist/providers/index.mjs +1 -28
- package/dist/styles/index.js +1 -8
- package/dist/styles/index.mjs +1 -8
- package/dist/styles/theme.js +1 -8
- package/dist/styles/theme.mjs +1 -8
- package/dist/types/auth.js +1 -1
- package/dist/types/auth.mjs +0 -1
- package/dist/utils/SecureStorage.js +1 -8
- package/dist/utils/SecureStorage.mjs +1 -8
- package/dist/utils/createCrossmintApiClient.js +1 -9
- package/dist/utils/createCrossmintApiClient.mjs +1 -9
- package/dist/utils/embed/userAgent.js +1 -12
- package/dist/utils/embed/userAgent.mjs +1 -12
- package/dist/utils/eventEmitter.js +1 -8
- package/dist/utils/eventEmitter.mjs +1 -8
- package/package.json +1 -1
- package/dist/chunk-24MMQ2R4.js +0 -15
- package/dist/chunk-24MMQ2R4.js.map +0 -1
- package/dist/chunk-2DNOAXOE.mjs +0 -8
- package/dist/chunk-2DNOAXOE.mjs.map +0 -1
- package/dist/chunk-2TEAOLM6.mjs +0 -149
- package/dist/chunk-2TEAOLM6.mjs.map +0 -1
- package/dist/chunk-34OVOZB2.mjs +0 -111
- package/dist/chunk-34OVOZB2.mjs.map +0 -1
- package/dist/chunk-3AWDWMZ2.mjs +0 -18
- package/dist/chunk-3AWDWMZ2.mjs.map +0 -1
- package/dist/chunk-3PJ6FXFT.mjs +0 -1
- package/dist/chunk-3PJ6FXFT.mjs.map +0 -1
- package/dist/chunk-3SFSPJXM.mjs +0 -55
- package/dist/chunk-3SFSPJXM.mjs.map +0 -1
- package/dist/chunk-4AJTICKY.mjs +0 -44
- package/dist/chunk-4AJTICKY.mjs.map +0 -1
- package/dist/chunk-4HKXTAVR.js +0 -14
- package/dist/chunk-4HKXTAVR.js.map +0 -1
- package/dist/chunk-4V7NDO5X.mjs +0 -157
- package/dist/chunk-4V7NDO5X.mjs.map +0 -1
- package/dist/chunk-4WJIXD7U.mjs +0 -14
- package/dist/chunk-4WJIXD7U.mjs.map +0 -1
- package/dist/chunk-5V6ONJWT.mjs +0 -61
- package/dist/chunk-5V6ONJWT.mjs.map +0 -1
- package/dist/chunk-5ZBDQUNG.js +0 -1
- package/dist/chunk-5ZBDQUNG.js.map +0 -1
- package/dist/chunk-6S5SEVGS.js +0 -17
- package/dist/chunk-6S5SEVGS.js.map +0 -1
- package/dist/chunk-6Z74KC25.mjs +0 -1
- package/dist/chunk-6Z74KC25.mjs.map +0 -1
- package/dist/chunk-7SPIOD4K.mjs +0 -66
- package/dist/chunk-7SPIOD4K.mjs.map +0 -1
- package/dist/chunk-ALMDA3KN.mjs +0 -199
- package/dist/chunk-ALMDA3KN.mjs.map +0 -1
- package/dist/chunk-BE4HT2U7.mjs +0 -1
- package/dist/chunk-BE4HT2U7.mjs.map +0 -1
- package/dist/chunk-BTH5QRIT.js +0 -149
- package/dist/chunk-BTH5QRIT.js.map +0 -1
- package/dist/chunk-BUB4U2GE.js +0 -44
- package/dist/chunk-BUB4U2GE.js.map +0 -1
- package/dist/chunk-BUTZZ7JB.js +0 -36
- package/dist/chunk-BUTZZ7JB.js.map +0 -1
- package/dist/chunk-CFHHVHNZ.mjs +0 -157
- package/dist/chunk-CFHHVHNZ.mjs.map +0 -1
- package/dist/chunk-CV6RWU2T.js +0 -50
- package/dist/chunk-CV6RWU2T.js.map +0 -1
- package/dist/chunk-DD2MVD6A.mjs +0 -36
- package/dist/chunk-DD2MVD6A.mjs.map +0 -1
- package/dist/chunk-EKXEDMRD.mjs +0 -71
- package/dist/chunk-EKXEDMRD.mjs.map +0 -1
- package/dist/chunk-FCDPEDXH.mjs +0 -148
- package/dist/chunk-FCDPEDXH.mjs.map +0 -1
- package/dist/chunk-FQID5LOL.js +0 -22
- package/dist/chunk-FQID5LOL.js.map +0 -1
- package/dist/chunk-FRD6HEIM.mjs +0 -22
- package/dist/chunk-FRD6HEIM.mjs.map +0 -1
- package/dist/chunk-GYBEEYGB.mjs +0 -1
- package/dist/chunk-GYBEEYGB.mjs.map +0 -1
- package/dist/chunk-HELXBZ7D.js +0 -18
- package/dist/chunk-HELXBZ7D.js.map +0 -1
- package/dist/chunk-IBQK5B7B.js +0 -71
- package/dist/chunk-IBQK5B7B.js.map +0 -1
- package/dist/chunk-IHZNXV5S.js +0 -1
- package/dist/chunk-IHZNXV5S.js.map +0 -1
- package/dist/chunk-IMME6ZBV.js +0 -61
- package/dist/chunk-IMME6ZBV.js.map +0 -1
- package/dist/chunk-J2MDWDV6.mjs +0 -1
- package/dist/chunk-J2MDWDV6.mjs.map +0 -1
- package/dist/chunk-KK4SQ7WF.js +0 -1
- package/dist/chunk-KK4SQ7WF.js.map +0 -1
- package/dist/chunk-KOUCOMBE.js +0 -148
- package/dist/chunk-KOUCOMBE.js.map +0 -1
- package/dist/chunk-MMVER6VO.js +0 -1
- package/dist/chunk-MMVER6VO.js.map +0 -1
- package/dist/chunk-MVLQR6RI.js +0 -199
- package/dist/chunk-MVLQR6RI.js.map +0 -1
- package/dist/chunk-NBWATZY4.js +0 -157
- package/dist/chunk-NBWATZY4.js.map +0 -1
- package/dist/chunk-OTRMAWWU.js +0 -55
- package/dist/chunk-OTRMAWWU.js.map +0 -1
- package/dist/chunk-P35PHJU5.mjs +0 -17
- package/dist/chunk-P35PHJU5.mjs.map +0 -1
- package/dist/chunk-PUTC7LI4.mjs +0 -348
- package/dist/chunk-PUTC7LI4.mjs.map +0 -1
- package/dist/chunk-Q2Y5CZT4.js +0 -157
- package/dist/chunk-Q2Y5CZT4.js.map +0 -1
- package/dist/chunk-Q7YPX4RJ.js +0 -66
- package/dist/chunk-Q7YPX4RJ.js.map +0 -1
- package/dist/chunk-R47XMJ32.js +0 -1
- package/dist/chunk-R47XMJ32.js.map +0 -1
- package/dist/chunk-RSCBYS6I.mjs +0 -15
- package/dist/chunk-RSCBYS6I.mjs.map +0 -1
- package/dist/chunk-RTLOANMR.mjs +0 -50
- package/dist/chunk-RTLOANMR.mjs.map +0 -1
- package/dist/chunk-S3OC5AT3.mjs +0 -24
- package/dist/chunk-S3OC5AT3.mjs.map +0 -1
- package/dist/chunk-SHSENRY7.js +0 -24
- package/dist/chunk-SHSENRY7.js.map +0 -1
- package/dist/chunk-TNPZITVL.mjs +0 -1
- package/dist/chunk-TNPZITVL.mjs.map +0 -1
- package/dist/chunk-UNIFCVYR.js +0 -348
- package/dist/chunk-UNIFCVYR.js.map +0 -1
- package/dist/chunk-VCF2YXCO.js +0 -208
- package/dist/chunk-VCF2YXCO.js.map +0 -1
- package/dist/chunk-XNVZRSGL.js +0 -111
- package/dist/chunk-XNVZRSGL.js.map +0 -1
- package/dist/chunk-XUGJXLWC.js +0 -8
- package/dist/chunk-XUGJXLWC.js.map +0 -1
- package/dist/chunk-XXJ7LQ44.js +0 -1
- package/dist/chunk-XXJ7LQ44.js.map +0 -1
- package/dist/chunk-Z7Y7COJM.mjs +0 -208
- package/dist/chunk-Z7Y7COJM.mjs.map +0 -1
- package/dist/components/embed/index.js.map +0 -1
- package/dist/components/embed/index.mjs.map +0 -1
- package/dist/components/embed/v3/CrossmintEmbeddedCheckoutV3.js.map +0 -1
- package/dist/components/embed/v3/CrossmintEmbeddedCheckoutV3.mjs.map +0 -1
- package/dist/components/embed/v3/EmbeddedCheckoutV3WebView.js.map +0 -1
- package/dist/components/embed/v3/EmbeddedCheckoutV3WebView.mjs.map +0 -1
- package/dist/components/embed/v3/crypto/PayerConnectionHandler.js.map +0 -1
- package/dist/components/embed/v3/crypto/PayerConnectionHandler.mjs.map +0 -1
- package/dist/components/embed/v3/index.js.map +0 -1
- package/dist/components/embed/v3/index.mjs.map +0 -1
- package/dist/components/index.js.map +0 -1
- package/dist/components/index.mjs.map +0 -1
- package/dist/components/signers/BaseCodeInput.js.map +0 -1
- package/dist/components/signers/BaseCodeInput.mjs.map +0 -1
- package/dist/components/signers/BaseConfirmation.js.map +0 -1
- package/dist/components/signers/BaseConfirmation.mjs.map +0 -1
- package/dist/components/signers/EmailSignersDialog.js.map +0 -1
- package/dist/components/signers/EmailSignersDialog.mjs.map +0 -1
- package/dist/components/signers/PhoneSignersDialog.js.map +0 -1
- package/dist/components/signers/PhoneSignersDialog.mjs.map +0 -1
- package/dist/components/signers/index.js.map +0 -1
- package/dist/components/signers/index.mjs.map +0 -1
- package/dist/components/wallets/ExportPrivateKeyButton.js.map +0 -1
- package/dist/components/wallets/ExportPrivateKeyButton.mjs.map +0 -1
- package/dist/components/wallets/index.js.map +0 -1
- package/dist/components/wallets/index.mjs.map +0 -1
- package/dist/hooks/index.js.map +0 -1
- package/dist/hooks/index.mjs.map +0 -1
- package/dist/hooks/useAuth.js.map +0 -1
- package/dist/hooks/useAuth.mjs.map +0 -1
- package/dist/hooks/useCrossmintCheckout.js.map +0 -1
- package/dist/hooks/useCrossmintCheckout.mjs.map +0 -1
- package/dist/hooks/useWalletEmailSigner.js.map +0 -1
- package/dist/hooks/useWalletEmailSigner.mjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/logger/init.js.map +0 -1
- package/dist/logger/init.mjs.map +0 -1
- package/dist/plugin/mods/addQueryToAndroidManifest.js.map +0 -1
- package/dist/plugin/mods/addQueryToAndroidManifest.mjs.map +0 -1
- package/dist/plugin/withGooglePay.js.map +0 -1
- package/dist/plugin/withGooglePay.mjs.map +0 -1
- package/dist/providers/CrossmintAuthProvider.js.map +0 -1
- package/dist/providers/CrossmintAuthProvider.mjs.map +0 -1
- package/dist/providers/CrossmintProvider.js.map +0 -1
- package/dist/providers/CrossmintProvider.mjs.map +0 -1
- package/dist/providers/CrossmintWalletProvider.js.map +0 -1
- package/dist/providers/CrossmintWalletProvider.mjs.map +0 -1
- package/dist/providers/index.js.map +0 -1
- package/dist/providers/index.mjs.map +0 -1
- package/dist/styles/index.js.map +0 -1
- package/dist/styles/index.mjs.map +0 -1
- package/dist/styles/theme.js.map +0 -1
- package/dist/styles/theme.mjs.map +0 -1
- package/dist/types/auth.js.map +0 -1
- package/dist/types/auth.mjs.map +0 -1
- package/dist/utils/SecureStorage.js.map +0 -1
- package/dist/utils/SecureStorage.mjs.map +0 -1
- package/dist/utils/createCrossmintApiClient.js.map +0 -1
- package/dist/utils/createCrossmintApiClient.mjs.map +0 -1
- package/dist/utils/embed/userAgent.js.map +0 -1
- package/dist/utils/embed/userAgent.mjs.map +0 -1
- package/dist/utils/eventEmitter.js.map +0 -1
- package/dist/utils/eventEmitter.mjs.map +0 -1
package/dist/chunk-NBWATZY4.js
DELETED
|
@@ -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"]}
|
package/dist/chunk-OTRMAWWU.js
DELETED
|
@@ -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"]}
|
package/dist/chunk-P35PHJU5.mjs
DELETED
|
@@ -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":[]}
|
package/dist/chunk-PUTC7LI4.mjs
DELETED
|
@@ -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":[]}
|