@crossmint/client-sdk-react-native-ui 0.13.32 → 0.13.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-24MMQ2R4.js +15 -0
- package/dist/chunk-24MMQ2R4.js.map +1 -0
- package/dist/chunk-2DNOAXOE.mjs +8 -0
- package/dist/chunk-2DNOAXOE.mjs.map +1 -0
- package/dist/chunk-2TEAOLM6.mjs +149 -0
- package/dist/chunk-2TEAOLM6.mjs.map +1 -0
- package/dist/chunk-2YRJHM46.mjs +50 -0
- package/dist/chunk-2YRJHM46.mjs.map +1 -0
- package/dist/chunk-34OVOZB2.mjs +111 -0
- package/dist/chunk-34OVOZB2.mjs.map +1 -0
- package/dist/chunk-3AWDWMZ2.mjs +18 -0
- package/dist/chunk-3AWDWMZ2.mjs.map +1 -0
- package/dist/chunk-3MWGBZ5O.js +348 -0
- package/dist/chunk-3MWGBZ5O.js.map +1 -0
- package/dist/chunk-3PJ6FXFT.mjs +1 -0
- package/dist/chunk-3PJ6FXFT.mjs.map +1 -0
- package/dist/chunk-3SFSPJXM.mjs +55 -0
- package/dist/chunk-3SFSPJXM.mjs.map +1 -0
- package/dist/chunk-4AJTICKY.mjs +44 -0
- package/dist/chunk-4AJTICKY.mjs.map +1 -0
- package/dist/chunk-4HKXTAVR.js +14 -0
- package/dist/chunk-4HKXTAVR.js.map +1 -0
- package/dist/chunk-4NTIGHRE.js +148 -0
- package/dist/chunk-4NTIGHRE.js.map +1 -0
- package/dist/chunk-4V7NDO5X.mjs +157 -0
- package/dist/chunk-4V7NDO5X.mjs.map +1 -0
- package/dist/chunk-4WJIXD7U.mjs +14 -0
- package/dist/chunk-4WJIXD7U.mjs.map +1 -0
- package/dist/chunk-5ZBDQUNG.js +1 -0
- package/dist/chunk-5ZBDQUNG.js.map +1 -0
- package/dist/chunk-6W2GOMYU.js +22 -0
- package/dist/chunk-6W2GOMYU.js.map +1 -0
- package/dist/chunk-6Z74KC25.mjs +1 -0
- package/dist/chunk-6Z74KC25.mjs.map +1 -0
- package/dist/chunk-7SPIOD4K.mjs +66 -0
- package/dist/chunk-7SPIOD4K.mjs.map +1 -0
- package/dist/chunk-ALMDA3KN.mjs +199 -0
- package/dist/chunk-ALMDA3KN.mjs.map +1 -0
- package/dist/chunk-BE4HT2U7.mjs +1 -0
- package/dist/chunk-BE4HT2U7.mjs.map +1 -0
- package/dist/chunk-BTH5QRIT.js +149 -0
- package/dist/chunk-BTH5QRIT.js.map +1 -0
- package/dist/chunk-BUB4U2GE.js +44 -0
- package/dist/chunk-BUB4U2GE.js.map +1 -0
- package/dist/chunk-BUTZZ7JB.js +36 -0
- package/dist/chunk-BUTZZ7JB.js.map +1 -0
- package/dist/chunk-CFHHVHNZ.mjs +157 -0
- package/dist/chunk-CFHHVHNZ.mjs.map +1 -0
- package/dist/chunk-DD2MVD6A.mjs +36 -0
- package/dist/chunk-DD2MVD6A.mjs.map +1 -0
- package/dist/chunk-EKXEDMRD.mjs +71 -0
- package/dist/chunk-EKXEDMRD.mjs.map +1 -0
- package/dist/chunk-GYBEEYGB.mjs +1 -0
- package/dist/chunk-GYBEEYGB.mjs.map +1 -0
- package/dist/chunk-HELXBZ7D.js +18 -0
- package/dist/chunk-HELXBZ7D.js.map +1 -0
- package/dist/chunk-IBQK5B7B.js +71 -0
- package/dist/chunk-IBQK5B7B.js.map +1 -0
- package/dist/chunk-IHZNXV5S.js +1 -0
- package/dist/chunk-IHZNXV5S.js.map +1 -0
- package/dist/chunk-J2MDWDV6.mjs +1 -0
- package/dist/chunk-J2MDWDV6.mjs.map +1 -0
- package/dist/chunk-KK4SQ7WF.js +1 -0
- package/dist/chunk-KK4SQ7WF.js.map +1 -0
- package/dist/chunk-LMXGU2XA.js +50 -0
- package/dist/chunk-LMXGU2XA.js.map +1 -0
- package/dist/chunk-LWQ5CJC4.mjs +22 -0
- package/dist/chunk-LWQ5CJC4.mjs.map +1 -0
- package/dist/chunk-MMVER6VO.js +1 -0
- package/dist/chunk-MMVER6VO.js.map +1 -0
- package/dist/chunk-MVLQR6RI.js +199 -0
- package/dist/chunk-MVLQR6RI.js.map +1 -0
- package/dist/chunk-NBWATZY4.js +157 -0
- package/dist/chunk-NBWATZY4.js.map +1 -0
- package/dist/chunk-NSSAF6CV.mjs +348 -0
- package/dist/chunk-NSSAF6CV.mjs.map +1 -0
- package/dist/chunk-OLVGVQEA.js +24 -0
- package/dist/chunk-OLVGVQEA.js.map +1 -0
- package/dist/chunk-OTRMAWWU.js +55 -0
- package/dist/chunk-OTRMAWWU.js.map +1 -0
- package/dist/chunk-Q2Y5CZT4.js +157 -0
- package/dist/chunk-Q2Y5CZT4.js.map +1 -0
- package/dist/chunk-Q7YPX4RJ.js +66 -0
- package/dist/chunk-Q7YPX4RJ.js.map +1 -0
- package/dist/chunk-R2M3HW3E.mjs +61 -0
- package/dist/chunk-R2M3HW3E.mjs.map +1 -0
- package/dist/chunk-R3ZW4OCR.js +61 -0
- package/dist/chunk-R3ZW4OCR.js.map +1 -0
- package/dist/chunk-R47XMJ32.js +1 -0
- package/dist/chunk-R47XMJ32.js.map +1 -0
- package/dist/chunk-R5GF6WFB.mjs +148 -0
- package/dist/chunk-R5GF6WFB.mjs.map +1 -0
- package/dist/chunk-RSCBYS6I.mjs +15 -0
- package/dist/chunk-RSCBYS6I.mjs.map +1 -0
- package/dist/chunk-TNPZITVL.mjs +1 -0
- package/dist/chunk-TNPZITVL.mjs.map +1 -0
- package/dist/chunk-U74INGIF.js +17 -0
- package/dist/chunk-U74INGIF.js.map +1 -0
- package/dist/chunk-V2PIS2OC.mjs +17 -0
- package/dist/chunk-V2PIS2OC.mjs.map +1 -0
- package/dist/chunk-VCF2YXCO.js +208 -0
- package/dist/chunk-VCF2YXCO.js.map +1 -0
- package/dist/chunk-XNVZRSGL.js +111 -0
- package/dist/chunk-XNVZRSGL.js.map +1 -0
- package/dist/chunk-XUGJXLWC.js +8 -0
- package/dist/chunk-XUGJXLWC.js.map +1 -0
- package/dist/chunk-XXJ7LQ44.js +1 -0
- package/dist/chunk-XXJ7LQ44.js.map +1 -0
- package/dist/chunk-YAVGI5BZ.mjs +24 -0
- package/dist/chunk-YAVGI5BZ.mjs.map +1 -0
- package/dist/chunk-Z7Y7COJM.mjs +208 -0
- package/dist/chunk-Z7Y7COJM.mjs.map +1 -0
- package/dist/components/embed/index.js +16 -1
- package/dist/components/embed/index.js.map +1 -0
- package/dist/components/embed/index.mjs +16 -1
- package/dist/components/embed/index.mjs.map +1 -0
- package/dist/components/embed/v3/CrossmintEmbeddedCheckoutV3.js +14 -1
- package/dist/components/embed/v3/CrossmintEmbeddedCheckoutV3.js.map +1 -0
- package/dist/components/embed/v3/CrossmintEmbeddedCheckoutV3.mjs +14 -1
- package/dist/components/embed/v3/CrossmintEmbeddedCheckoutV3.mjs.map +1 -0
- package/dist/components/embed/v3/EmbeddedCheckoutV3WebView.js +13 -1
- package/dist/components/embed/v3/EmbeddedCheckoutV3WebView.js.map +1 -0
- package/dist/components/embed/v3/EmbeddedCheckoutV3WebView.mjs +13 -1
- package/dist/components/embed/v3/EmbeddedCheckoutV3WebView.mjs.map +1 -0
- package/dist/components/embed/v3/crypto/PayerConnectionHandler.js +8 -1
- package/dist/components/embed/v3/crypto/PayerConnectionHandler.js.map +1 -0
- package/dist/components/embed/v3/crypto/PayerConnectionHandler.mjs +8 -1
- package/dist/components/embed/v3/crypto/PayerConnectionHandler.mjs.map +1 -0
- package/dist/components/embed/v3/index.js +15 -1
- package/dist/components/embed/v3/index.js.map +1 -0
- package/dist/components/embed/v3/index.mjs +15 -1
- package/dist/components/embed/v3/index.mjs.map +1 -0
- package/dist/components/index.js +34 -1
- package/dist/components/index.js.map +1 -0
- package/dist/components/index.mjs +34 -1
- package/dist/components/index.mjs.map +1 -0
- package/dist/components/signers/BaseCodeInput.js +9 -1
- package/dist/components/signers/BaseCodeInput.js.map +1 -0
- package/dist/components/signers/BaseCodeInput.mjs +9 -1
- package/dist/components/signers/BaseCodeInput.mjs.map +1 -0
- package/dist/components/signers/BaseConfirmation.js +9 -1
- package/dist/components/signers/BaseConfirmation.js.map +1 -0
- package/dist/components/signers/BaseConfirmation.mjs +9 -1
- package/dist/components/signers/BaseConfirmation.mjs.map +1 -0
- package/dist/components/signers/EmailSignersDialog.js +11 -1
- package/dist/components/signers/EmailSignersDialog.js.map +1 -0
- package/dist/components/signers/EmailSignersDialog.mjs +11 -1
- package/dist/components/signers/EmailSignersDialog.mjs.map +1 -0
- package/dist/components/signers/PhoneSignersDialog.js +11 -1
- package/dist/components/signers/PhoneSignersDialog.js.map +1 -0
- package/dist/components/signers/PhoneSignersDialog.mjs +11 -1
- package/dist/components/signers/PhoneSignersDialog.mjs.map +1 -0
- package/dist/components/signers/index.js +16 -1
- package/dist/components/signers/index.js.map +1 -0
- package/dist/components/signers/index.mjs +16 -1
- package/dist/components/signers/index.mjs.map +1 -0
- package/dist/components/wallets/ExportPrivateKeyButton.js +8 -1
- package/dist/components/wallets/ExportPrivateKeyButton.js.map +1 -0
- package/dist/components/wallets/ExportPrivateKeyButton.mjs +8 -1
- package/dist/components/wallets/ExportPrivateKeyButton.mjs.map +1 -0
- package/dist/components/wallets/index.js +9 -1
- package/dist/components/wallets/index.js.map +1 -0
- package/dist/components/wallets/index.mjs +9 -1
- package/dist/components/wallets/index.mjs.map +1 -0
- package/dist/hooks/index.js +26 -1
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/index.mjs +26 -1
- package/dist/hooks/index.mjs.map +1 -0
- package/dist/hooks/useAuth.js +14 -1
- package/dist/hooks/useAuth.js.map +1 -0
- package/dist/hooks/useAuth.mjs +14 -1
- package/dist/hooks/useAuth.mjs.map +1 -0
- package/dist/hooks/useCrossmintCheckout.js +11 -1
- package/dist/hooks/useCrossmintCheckout.js.map +1 -0
- package/dist/hooks/useCrossmintCheckout.mjs +11 -1
- package/dist/hooks/useCrossmintCheckout.mjs.map +1 -0
- package/dist/hooks/useWalletEmailSigner.js +8 -1
- package/dist/hooks/useWalletEmailSigner.js.map +1 -0
- package/dist/hooks/useWalletEmailSigner.mjs +8 -1
- package/dist/hooks/useWalletEmailSigner.mjs.map +1 -0
- package/dist/index.js +79 -1
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +79 -1
- package/dist/index.mjs.map +1 -0
- package/dist/logger/init.js +9 -1
- package/dist/logger/init.js.map +1 -0
- package/dist/logger/init.mjs +9 -1
- package/dist/logger/init.mjs.map +1 -0
- package/dist/plugin/mods/addQueryToAndroidManifest.js +8 -1
- package/dist/plugin/mods/addQueryToAndroidManifest.js.map +1 -0
- package/dist/plugin/mods/addQueryToAndroidManifest.mjs +8 -1
- package/dist/plugin/mods/addQueryToAndroidManifest.mjs.map +1 -0
- package/dist/plugin/withGooglePay.js +57 -1
- package/dist/plugin/withGooglePay.js.map +1 -0
- package/dist/plugin/withGooglePay.mjs +57 -1
- package/dist/plugin/withGooglePay.mjs.map +1 -0
- package/dist/providers/CrossmintAuthProvider.js +14 -1
- package/dist/providers/CrossmintAuthProvider.js.map +1 -0
- package/dist/providers/CrossmintAuthProvider.mjs +14 -1
- package/dist/providers/CrossmintAuthProvider.mjs.map +1 -0
- package/dist/providers/CrossmintProvider.js +12 -1
- package/dist/providers/CrossmintProvider.js.map +1 -0
- package/dist/providers/CrossmintProvider.mjs +12 -1
- package/dist/providers/CrossmintProvider.mjs.map +1 -0
- package/dist/providers/CrossmintWalletProvider.js +16 -1
- package/dist/providers/CrossmintWalletProvider.js.map +1 -0
- package/dist/providers/CrossmintWalletProvider.mjs +16 -1
- package/dist/providers/CrossmintWalletProvider.mjs.map +1 -0
- package/dist/providers/index.js +28 -1
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/index.mjs +28 -1
- package/dist/providers/index.mjs.map +1 -0
- package/dist/styles/index.js +8 -1
- package/dist/styles/index.js.map +1 -0
- package/dist/styles/index.mjs +8 -1
- package/dist/styles/index.mjs.map +1 -0
- package/dist/styles/theme.js +8 -1
- package/dist/styles/theme.js.map +1 -0
- package/dist/styles/theme.mjs +8 -1
- package/dist/styles/theme.mjs.map +1 -0
- package/dist/types/auth.js +1 -1
- package/dist/types/auth.js.map +1 -0
- package/dist/types/auth.mjs +1 -0
- package/dist/types/auth.mjs.map +1 -0
- package/dist/utils/SecureStorage.js +8 -1
- package/dist/utils/SecureStorage.js.map +1 -0
- package/dist/utils/SecureStorage.mjs +8 -1
- package/dist/utils/SecureStorage.mjs.map +1 -0
- package/dist/utils/createCrossmintApiClient.js +9 -1
- package/dist/utils/createCrossmintApiClient.js.map +1 -0
- package/dist/utils/createCrossmintApiClient.mjs +9 -1
- package/dist/utils/createCrossmintApiClient.mjs.map +1 -0
- package/dist/utils/embed/userAgent.js +12 -1
- package/dist/utils/embed/userAgent.js.map +1 -0
- package/dist/utils/embed/userAgent.mjs +12 -1
- package/dist/utils/embed/userAgent.mjs.map +1 -0
- package/dist/utils/eventEmitter.js +8 -1
- package/dist/utils/eventEmitter.js.map +1 -0
- package/dist/utils/eventEmitter.mjs +8 -1
- package/dist/utils/eventEmitter.mjs.map +1 -0
- package/package.json +58 -54
|
@@ -0,0 +1 @@
|
|
|
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":[]}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
2
|
+
|
|
3
|
+
var _chunkIBQK5B7Bjs = require('./chunk-IBQK5B7B.js');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
var _chunkQ7YPX4RJjs = require('./chunk-Q7YPX4RJ.js');
|
|
8
|
+
|
|
9
|
+
// src/providers/CrossmintAuthProvider.tsx
|
|
10
|
+
var _react = require('react');
|
|
11
|
+
var _expowebbrowser = require('expo-web-browser'); var WebBrowser = _interopRequireWildcard(_expowebbrowser);
|
|
12
|
+
var _expoconstants = require('expo-constants'); var _expoconstants2 = _interopRequireDefault(_expoconstants);
|
|
13
|
+
var _reactnative = require('react-native');
|
|
14
|
+
var _clientsdkreactbase = require('@crossmint/client-sdk-react-base');
|
|
15
|
+
|
|
16
|
+
// src/hooks/index.ts
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
// src/hooks/useAuth.ts
|
|
20
|
+
|
|
21
|
+
function useCrossmintAuth() {
|
|
22
|
+
const context = _react.useContext.call(void 0, AuthContext);
|
|
23
|
+
if (context == null) {
|
|
24
|
+
throw new Error("useCrossmintAuth must be used within a CrossmintAuthProvider");
|
|
25
|
+
}
|
|
26
|
+
return context;
|
|
27
|
+
}
|
|
28
|
+
var useAuth = useCrossmintAuth;
|
|
29
|
+
|
|
30
|
+
// src/providers/CrossmintAuthProvider.tsx
|
|
31
|
+
var _jsxruntime = require('react/jsx-runtime');
|
|
32
|
+
var initialOAuthUrlMap = {
|
|
33
|
+
google: null,
|
|
34
|
+
twitter: null
|
|
35
|
+
};
|
|
36
|
+
var defaultContextValue = {
|
|
37
|
+
crossmintAuth: void 0,
|
|
38
|
+
login: () => {
|
|
39
|
+
},
|
|
40
|
+
logout: () => _chunkQ7YPX4RJjs.__async.call(void 0, void 0, null, function* () {
|
|
41
|
+
}),
|
|
42
|
+
jwt: void 0,
|
|
43
|
+
user: void 0,
|
|
44
|
+
status: "initializing",
|
|
45
|
+
getUser: () => {
|
|
46
|
+
},
|
|
47
|
+
loginWithOAuth: () => Promise.resolve(),
|
|
48
|
+
createAuthSession: () => Promise.resolve(null)
|
|
49
|
+
};
|
|
50
|
+
var AuthContext = _react.createContext.call(void 0, defaultContextValue);
|
|
51
|
+
function CrossmintAuthSync({ children }) {
|
|
52
|
+
const { experimental_setCustomAuth, experimental_customAuth } = _clientsdkreactbase.useCrossmint.call(void 0, );
|
|
53
|
+
const { user, jwt } = useAuth();
|
|
54
|
+
_react.useEffect.call(void 0, () => {
|
|
55
|
+
if (jwt == null && (experimental_customAuth == null ? void 0 : experimental_customAuth.jwt) != null) {
|
|
56
|
+
experimental_setCustomAuth(void 0);
|
|
57
|
+
}
|
|
58
|
+
if (jwt != null) {
|
|
59
|
+
experimental_setCustomAuth({
|
|
60
|
+
jwt,
|
|
61
|
+
email: user == null ? void 0 : user.email
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}, [experimental_setCustomAuth, jwt, user]);
|
|
65
|
+
return children;
|
|
66
|
+
}
|
|
67
|
+
function CrossmintAuthProviderContent({
|
|
68
|
+
children,
|
|
69
|
+
appSchema
|
|
70
|
+
}) {
|
|
71
|
+
const baseAuth = _clientsdkreactbase.useCrossmintAuthBase.call(void 0, );
|
|
72
|
+
const [oauthUrlMap, setOauthUrlMap] = _react.useState.call(void 0, initialOAuthUrlMap);
|
|
73
|
+
const [inProgress, setInProgress] = _react.useState.call(void 0, false);
|
|
74
|
+
const singleAppSchema = Array.isArray(appSchema) ? appSchema[0] : appSchema;
|
|
75
|
+
const isRunningInExpoGo = _expoconstants2.default.executionEnvironment === "storeClient" || _expoconstants2.default.appOwnership === "expo" || !!_expoconstants2.default.expoVersion;
|
|
76
|
+
const resolvedAppSchema = isRunningInExpoGo ? "exp://127.0.0.1:8081" : singleAppSchema;
|
|
77
|
+
const preFetchAndSetOauthUrl = _react.useCallback.call(void 0, () => _chunkQ7YPX4RJjs.__async.call(void 0, this, null, function* () {
|
|
78
|
+
try {
|
|
79
|
+
const oauthProviders = Object.keys(initialOAuthUrlMap);
|
|
80
|
+
const oauthPromiseList = oauthProviders.map((provider) => _chunkQ7YPX4RJjs.__async.call(void 0, this, null, function* () {
|
|
81
|
+
var _a;
|
|
82
|
+
const url = yield (_a = baseAuth.crossmintAuth) == null ? void 0 : _a.getOAuthUrl(provider, {
|
|
83
|
+
appSchema: resolvedAppSchema
|
|
84
|
+
});
|
|
85
|
+
return { [provider]: url };
|
|
86
|
+
}));
|
|
87
|
+
const oauthUrlMap2 = Object.assign({}, ...yield Promise.all(oauthPromiseList));
|
|
88
|
+
setOauthUrlMap(oauthUrlMap2);
|
|
89
|
+
} catch (error) {
|
|
90
|
+
console.error(error);
|
|
91
|
+
}
|
|
92
|
+
}), [baseAuth.crossmintAuth, resolvedAppSchema]);
|
|
93
|
+
_react.useEffect.call(void 0, () => {
|
|
94
|
+
if (baseAuth.user == null) {
|
|
95
|
+
preFetchAndSetOauthUrl();
|
|
96
|
+
}
|
|
97
|
+
}, [preFetchAndSetOauthUrl, baseAuth.user]);
|
|
98
|
+
const getAuthStatus = () => {
|
|
99
|
+
if (baseAuth.status === "initializing") {
|
|
100
|
+
return "initializing";
|
|
101
|
+
}
|
|
102
|
+
if (inProgress) {
|
|
103
|
+
return "in-progress";
|
|
104
|
+
}
|
|
105
|
+
if (baseAuth.jwt != null) {
|
|
106
|
+
return "logged-in";
|
|
107
|
+
}
|
|
108
|
+
return "logged-out";
|
|
109
|
+
};
|
|
110
|
+
const loginWithOAuth = (provider) => _chunkQ7YPX4RJjs.__async.call(void 0, this, null, function* () {
|
|
111
|
+
var _a, _b;
|
|
112
|
+
try {
|
|
113
|
+
setInProgress(true);
|
|
114
|
+
const oauthUrl = (_b = oauthUrlMap[provider]) != null ? _b : yield (_a = baseAuth.crossmintAuth) == null ? void 0 : _a.getOAuthUrl(provider, { appSchema: resolvedAppSchema });
|
|
115
|
+
yield WebBrowser.warmUpAsync();
|
|
116
|
+
const baseUrl = new URL(oauthUrl);
|
|
117
|
+
if (provider === "google") {
|
|
118
|
+
baseUrl.searchParams.append("provider_prompt", "select_account");
|
|
119
|
+
}
|
|
120
|
+
if (_reactnative.Platform.OS === "android") {
|
|
121
|
+
yield WebBrowser.openBrowserAsync(baseUrl.toString());
|
|
122
|
+
} else {
|
|
123
|
+
const result = yield WebBrowser.openAuthSessionAsync(baseUrl.toString());
|
|
124
|
+
if (result.type === "success") {
|
|
125
|
+
yield createAuthSession(result.url);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
yield WebBrowser.coolDownAsync();
|
|
129
|
+
} catch (error) {
|
|
130
|
+
console.error("[CrossmintAuthProvider] Error during OAuth login:", error);
|
|
131
|
+
throw new Error(`Error during OAuth login: ${error}`);
|
|
132
|
+
} finally {
|
|
133
|
+
setInProgress(false);
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
const createAuthSession = _react.useCallback.call(void 0,
|
|
137
|
+
(urlOrOneTimeSecret) => _chunkQ7YPX4RJjs.__async.call(void 0, this, null, function* () {
|
|
138
|
+
var _a;
|
|
139
|
+
const oneTimeSecret = urlOrOneTimeSecret.includes("://") ? extractOneTimeSecretFromUrl(urlOrOneTimeSecret) : urlOrOneTimeSecret;
|
|
140
|
+
if (oneTimeSecret != null) {
|
|
141
|
+
try {
|
|
142
|
+
setInProgress(true);
|
|
143
|
+
const authMaterial = yield (_a = baseAuth.crossmintAuth) == null ? void 0 : _a.handleRefreshAuthMaterial(oneTimeSecret);
|
|
144
|
+
return authMaterial;
|
|
145
|
+
} catch (error) {
|
|
146
|
+
throw error;
|
|
147
|
+
} finally {
|
|
148
|
+
setInProgress(false);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return null;
|
|
152
|
+
}),
|
|
153
|
+
[baseAuth.crossmintAuth]
|
|
154
|
+
);
|
|
155
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
156
|
+
AuthContext.Provider,
|
|
157
|
+
{
|
|
158
|
+
value: {
|
|
159
|
+
crossmintAuth: baseAuth.crossmintAuth,
|
|
160
|
+
logout: baseAuth.logout,
|
|
161
|
+
jwt: baseAuth.jwt,
|
|
162
|
+
user: baseAuth.user,
|
|
163
|
+
status: getAuthStatus(),
|
|
164
|
+
getUser: baseAuth.getUser,
|
|
165
|
+
login: () => {
|
|
166
|
+
},
|
|
167
|
+
loginWithOAuth,
|
|
168
|
+
createAuthSession
|
|
169
|
+
},
|
|
170
|
+
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, CrossmintAuthSync, { children })
|
|
171
|
+
}
|
|
172
|
+
);
|
|
173
|
+
}
|
|
174
|
+
function CrossmintAuthProvider(_a) {
|
|
175
|
+
var _b = _a, { children } = _b, props = _chunkQ7YPX4RJjs.__objRest.call(void 0, _b, ["children"]);
|
|
176
|
+
var _a2, _b2;
|
|
177
|
+
const appSchema = (_b2 = props.appSchema) != null ? _b2 : (_a2 = _expoconstants2.default.expoConfig) == null ? void 0 : _a2.scheme;
|
|
178
|
+
const customStorageProvider = _react.useMemo.call(void 0, () => {
|
|
179
|
+
var _a3;
|
|
180
|
+
return (_a3 = props.storageProvider) != null ? _a3 : new (0, _chunkIBQK5B7Bjs.SecureStorage)();
|
|
181
|
+
}, [props.storageProvider]);
|
|
182
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
183
|
+
_clientsdkreactbase.CrossmintAuthBaseProvider,
|
|
184
|
+
{
|
|
185
|
+
onLoginSuccess: props.onLoginSuccess,
|
|
186
|
+
refreshRoute: props.refreshRoute,
|
|
187
|
+
logoutRoute: props.logoutRoute,
|
|
188
|
+
storageProvider: customStorageProvider,
|
|
189
|
+
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, CrossmintAuthProviderContent, { appSchema, children })
|
|
190
|
+
}
|
|
191
|
+
);
|
|
192
|
+
}
|
|
193
|
+
var extractOneTimeSecretFromUrl = (url) => {
|
|
194
|
+
const regex = /[?&]oneTimeSecret=([^&#]+)/;
|
|
195
|
+
const match = url.match(regex);
|
|
196
|
+
const secret = match ? decodeURIComponent(match[1]) : void 0;
|
|
197
|
+
return secret;
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
exports.AuthContext = AuthContext; exports.CrossmintAuthProvider = CrossmintAuthProvider; exports.useCrossmintAuth = useCrossmintAuth; exports.useAuth = useAuth; exports.useCrossmint = _clientsdkreactbase.useCrossmint; exports.useWallet = _clientsdkreactbase.useWallet;
|
|
208
|
+
//# sourceMappingURL=chunk-VCF2YXCO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/providers/CrossmintAuthProvider.tsx","../src/hooks/index.ts","../src/hooks/useAuth.ts"],"names":["oauthUrlMap","_a","_b"],"mappings":"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","sourcesContent":["import { type ReactNode, createContext, useEffect, useMemo, useState, useCallback } from \"react\";\nimport * as WebBrowser from \"expo-web-browser\";\nimport Constants from \"expo-constants\";\nimport { Platform } from \"react-native\";\nimport type { OAuthProvider } from \"@crossmint/common-sdk-auth\";\nimport { type AuthStatus, CrossmintAuthBaseProvider, useCrossmintAuthBase } from \"@crossmint/client-sdk-react-base\";\nimport { useAuth, useCrossmint } from \"../hooks\";\nimport { SecureStorage } from \"../utils/SecureStorage\";\nimport type { RNAuthContext, RNCrossmintAuthProviderProps } from \"@/types/auth\";\n\ntype OAuthUrlMap = Record<OAuthProvider, string | null>;\nconst initialOAuthUrlMap: OAuthUrlMap = {\n google: null,\n twitter: null,\n};\n\nconst defaultContextValue: RNAuthContext = {\n crossmintAuth: undefined,\n login: () => {},\n logout: async () => {},\n jwt: undefined,\n user: undefined,\n status: \"initializing\",\n getUser: () => {},\n loginWithOAuth: () => Promise.resolve(),\n createAuthSession: () => Promise.resolve(null),\n};\n\nexport const AuthContext = createContext<RNAuthContext>(defaultContextValue);\n\nfunction CrossmintAuthSync({ children }: { children: ReactNode }) {\n const { experimental_setCustomAuth, experimental_customAuth } = useCrossmint();\n const { user, jwt } = useAuth();\n\n useEffect(() => {\n if (jwt == null && experimental_customAuth?.jwt != null) {\n experimental_setCustomAuth(undefined);\n }\n if (jwt != null) {\n experimental_setCustomAuth({\n jwt,\n email: user?.email,\n });\n }\n }, [experimental_setCustomAuth, jwt, user]);\n\n return children;\n}\n\nfunction CrossmintAuthProviderContent({\n children,\n appSchema,\n}: {\n children: ReactNode;\n appSchema?: string | string[];\n}) {\n const baseAuth = useCrossmintAuthBase();\n const [oauthUrlMap, setOauthUrlMap] = useState<OAuthUrlMap>(initialOAuthUrlMap);\n const [inProgress, setInProgress] = useState(false);\n\n const singleAppSchema = Array.isArray(appSchema) ? appSchema[0] : appSchema;\n const isRunningInExpoGo =\n Constants.executionEnvironment === \"storeClient\" ||\n Constants.appOwnership === \"expo\" ||\n !!Constants.expoVersion;\n const resolvedAppSchema = isRunningInExpoGo ? \"exp://127.0.0.1:8081\" : singleAppSchema;\n\n const preFetchAndSetOauthUrl = useCallback(async () => {\n try {\n const oauthProviders = Object.keys(initialOAuthUrlMap);\n\n const oauthPromiseList = oauthProviders.map(async (provider) => {\n const url = await baseAuth.crossmintAuth?.getOAuthUrl(provider as OAuthProvider, {\n appSchema: resolvedAppSchema,\n });\n return { [provider]: url };\n });\n\n const oauthUrlMap = Object.assign({}, ...(await Promise.all(oauthPromiseList)));\n setOauthUrlMap(oauthUrlMap);\n } catch (error) {\n console.error(error);\n }\n }, [baseAuth.crossmintAuth, resolvedAppSchema]);\n\n useEffect(() => {\n if (baseAuth.user == null) {\n preFetchAndSetOauthUrl();\n }\n }, [preFetchAndSetOauthUrl, baseAuth.user]);\n\n const getAuthStatus = (): AuthStatus => {\n if (baseAuth.status === \"initializing\") {\n return \"initializing\";\n }\n if (inProgress) {\n return \"in-progress\";\n }\n if (baseAuth.jwt != null) {\n return \"logged-in\";\n }\n return \"logged-out\";\n };\n\n const loginWithOAuth = async (provider: OAuthProvider) => {\n try {\n setInProgress(true);\n const oauthUrl =\n oauthUrlMap[provider] ??\n (await baseAuth.crossmintAuth?.getOAuthUrl(provider, { appSchema: resolvedAppSchema }));\n\n await WebBrowser.warmUpAsync();\n const baseUrl = new URL(oauthUrl);\n if (provider === \"google\") {\n baseUrl.searchParams.append(\"provider_prompt\", \"select_account\");\n }\n\n if (Platform.OS === \"android\") {\n await WebBrowser.openBrowserAsync(baseUrl.toString());\n } else {\n const result = await WebBrowser.openAuthSessionAsync(baseUrl.toString());\n if (result.type === \"success\") {\n await createAuthSession(result.url);\n }\n }\n await WebBrowser.coolDownAsync();\n } catch (error) {\n console.error(\"[CrossmintAuthProvider] Error during OAuth login:\", error);\n throw new Error(`Error during OAuth login: ${error}`);\n } finally {\n setInProgress(false);\n }\n };\n\n const createAuthSession = useCallback(\n async (urlOrOneTimeSecret: string) => {\n const oneTimeSecret = urlOrOneTimeSecret.includes(\"://\")\n ? extractOneTimeSecretFromUrl(urlOrOneTimeSecret)\n : urlOrOneTimeSecret;\n\n if (oneTimeSecret != null) {\n try {\n setInProgress(true);\n const authMaterial = await baseAuth.crossmintAuth?.handleRefreshAuthMaterial(oneTimeSecret);\n return authMaterial;\n } catch (error) {\n throw error;\n } finally {\n setInProgress(false);\n }\n }\n return null;\n },\n [baseAuth.crossmintAuth]\n );\n\n return (\n <AuthContext.Provider\n value={{\n crossmintAuth: baseAuth.crossmintAuth,\n logout: baseAuth.logout,\n jwt: baseAuth.jwt,\n user: baseAuth.user,\n status: getAuthStatus(),\n getUser: baseAuth.getUser,\n login: () => {},\n loginWithOAuth,\n createAuthSession,\n }}\n >\n <CrossmintAuthSync>{children}</CrossmintAuthSync>\n </AuthContext.Provider>\n );\n}\n\nexport function CrossmintAuthProvider({ children, ...props }: RNCrossmintAuthProviderProps) {\n const appSchema = props.appSchema ?? Constants.expoConfig?.scheme;\n const customStorageProvider = useMemo(() => props.storageProvider ?? new SecureStorage(), [props.storageProvider]);\n\n return (\n <CrossmintAuthBaseProvider\n onLoginSuccess={props.onLoginSuccess}\n refreshRoute={props.refreshRoute}\n logoutRoute={props.logoutRoute}\n storageProvider={customStorageProvider}\n >\n <CrossmintAuthProviderContent appSchema={appSchema}>{children}</CrossmintAuthProviderContent>\n </CrossmintAuthBaseProvider>\n );\n}\n\nconst extractOneTimeSecretFromUrl = (url: string): string | undefined => {\n const regex = /[?&]oneTimeSecret=([^&#]+)/;\n const match = url.match(regex);\n const secret = match ? decodeURIComponent(match[1]) : undefined;\n return secret;\n};\n","export { useCrossmint, useWallet } from \"@crossmint/client-sdk-react-base\";\nexport * from \"./useWalletEmailSigner\";\nexport * from \"./useCrossmintCheckout\";\nexport * from \"./useAuth\";\n","import { useContext } from \"react\";\nimport type { CrossmintAuthBaseContextType } from \"@crossmint/client-sdk-react-base\";\nimport type { AuthMaterialWithUser, OAuthProvider } from \"@crossmint/common-sdk-auth\";\nimport { AuthContext } from \"@/providers/CrossmintAuthProvider\";\n\ninterface RNCrossmintAuthContext extends CrossmintAuthBaseContextType {\n loginWithOAuth: (provider: OAuthProvider) => Promise<void>;\n createAuthSession: (urlOrOneTimeSecret: string) => Promise<AuthMaterialWithUser | null>;\n}\n\nexport function useCrossmintAuth(): RNCrossmintAuthContext {\n const context = useContext(AuthContext);\n if (context == null) {\n throw new Error(\"useCrossmintAuth must be used within a CrossmintAuthProvider\");\n }\n return context;\n}\n\nexport const useAuth = useCrossmintAuth;\n"]}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
var _chunkQ7YPX4RJjs = require('./chunk-Q7YPX4RJ.js');
|
|
4
|
+
|
|
5
|
+
// src/components/wallets/ExportPrivateKeyButton.tsx
|
|
6
|
+
var _react = require('react');
|
|
7
|
+
var _reactnative = require('react-native');
|
|
8
|
+
var _clientsdkreactbase = require('@crossmint/client-sdk-react-base');
|
|
9
|
+
var _clientsigners = require('@crossmint/client-signers');
|
|
10
|
+
var _walletssdk = require('@crossmint/wallets-sdk');
|
|
11
|
+
var _commonsdkbase = require('@crossmint/common-sdk-base');
|
|
12
|
+
var _clientsdkrnwindow = require('@crossmint/client-sdk-rn-window');
|
|
13
|
+
var _jsxruntime = require('react/jsx-runtime');
|
|
14
|
+
function ExportPrivateKeyButton({ appearance }) {
|
|
15
|
+
const { wallet } = _clientsdkreactbase.useWallet.call(void 0, );
|
|
16
|
+
const { crossmint } = _clientsdkreactbase.useCrossmint.call(void 0, );
|
|
17
|
+
const webViewRef = _react.useRef.call(void 0, null);
|
|
18
|
+
const connectionRef = _react.useRef.call(void 0, null);
|
|
19
|
+
const [frameUrl, setFrameUrl] = _react.useState.call(void 0, "");
|
|
20
|
+
_react.useEffect.call(void 0, () => {
|
|
21
|
+
if (crossmint != null) {
|
|
22
|
+
try {
|
|
23
|
+
const parsedAPIKey = _commonsdkbase.validateAPIKey.call(void 0, crossmint.apiKey);
|
|
24
|
+
if (parsedAPIKey.isValid) {
|
|
25
|
+
const baseUrl = _clientsigners.environmentUrlConfig[parsedAPIKey.environment];
|
|
26
|
+
setFrameUrl(`${baseUrl}/export`);
|
|
27
|
+
}
|
|
28
|
+
} catch (error) {
|
|
29
|
+
console.error("Failed to get TEE URL:", error);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}, [crossmint]);
|
|
33
|
+
const handleWebViewLoadEnd = _react.useCallback.call(void 0,
|
|
34
|
+
(syntheticEvent) => _chunkQ7YPX4RJjs.__async.call(void 0, this, null, function* () {
|
|
35
|
+
if (wallet == null || webViewRef.current == null || syntheticEvent.nativeEvent.loading) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
if (_walletssdk.isExportableSigner.call(void 0, wallet.signer)) {
|
|
40
|
+
const connection = new (0, _clientsdkrnwindow.WebViewParent)(webViewRef, {
|
|
41
|
+
incomingEvents: _clientsigners.exportSignerOutboundEvents,
|
|
42
|
+
outgoingEvents: _clientsigners.exportSignerInboundEvents
|
|
43
|
+
});
|
|
44
|
+
connectionRef.current = connection;
|
|
45
|
+
yield connection.handshakeWithChild();
|
|
46
|
+
yield wallet.signer._exportPrivateKey(connection);
|
|
47
|
+
}
|
|
48
|
+
} catch (error) {
|
|
49
|
+
console.error("Failed to export private key:", error);
|
|
50
|
+
_reactnative.Alert.alert("Export Failed", "Failed to export private key. Please try again.");
|
|
51
|
+
}
|
|
52
|
+
}),
|
|
53
|
+
[wallet]
|
|
54
|
+
);
|
|
55
|
+
const handleWebViewError = _react.useCallback.call(void 0, (syntheticEvent) => {
|
|
56
|
+
const { nativeEvent } = syntheticEvent;
|
|
57
|
+
console.error("WebView error:", nativeEvent);
|
|
58
|
+
_reactnative.Alert.alert("Export Failed", "Failed to load export interface. Please try again.");
|
|
59
|
+
}, []);
|
|
60
|
+
const handleMessage = _react.useCallback.call(void 0, (event) => {
|
|
61
|
+
if (connectionRef.current) {
|
|
62
|
+
connectionRef.current.handleMessage(event);
|
|
63
|
+
}
|
|
64
|
+
}, []);
|
|
65
|
+
if (frameUrl === "" || wallet == null || !_walletssdk.isExportableSigner.call(void 0, wallet.signer)) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _reactnative.View, { style: styles.webViewContainer, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
69
|
+
_clientsdkrnwindow.RNWebView,
|
|
70
|
+
{
|
|
71
|
+
ref: webViewRef,
|
|
72
|
+
source: { uri: frameUrl },
|
|
73
|
+
style: styles.webView,
|
|
74
|
+
javaScriptEnabled: true,
|
|
75
|
+
domStorageEnabled: true,
|
|
76
|
+
onLoadEnd: handleWebViewLoadEnd,
|
|
77
|
+
onError: handleWebViewError,
|
|
78
|
+
onHttpError: handleWebViewError,
|
|
79
|
+
onMessage: handleMessage,
|
|
80
|
+
startInLoadingState: true,
|
|
81
|
+
renderLoading: () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _reactnative.View, { style: styles.loadingContainer, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _reactnative.Text, { style: styles.loadingText, children: "Loading..." }) })
|
|
82
|
+
}
|
|
83
|
+
) });
|
|
84
|
+
}
|
|
85
|
+
var styles = _reactnative.StyleSheet.create({
|
|
86
|
+
webViewContainer: {
|
|
87
|
+
height: 56,
|
|
88
|
+
borderWidth: 1,
|
|
89
|
+
borderColor: "#E5E5E5",
|
|
90
|
+
borderRadius: 12,
|
|
91
|
+
overflow: "hidden"
|
|
92
|
+
},
|
|
93
|
+
webView: {
|
|
94
|
+
flex: 1
|
|
95
|
+
},
|
|
96
|
+
loadingContainer: {
|
|
97
|
+
flex: 1,
|
|
98
|
+
justifyContent: "center",
|
|
99
|
+
alignItems: "center",
|
|
100
|
+
backgroundColor: "#F5F5F5"
|
|
101
|
+
},
|
|
102
|
+
loadingText: {
|
|
103
|
+
fontSize: 16,
|
|
104
|
+
color: "#666666"
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
exports.ExportPrivateKeyButton = ExportPrivateKeyButton;
|
|
111
|
+
//# sourceMappingURL=chunk-XNVZRSGL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/wallets/ExportPrivateKeyButton.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useState, useCallback, useRef, useEffect } from \"react\";\nimport { View, Text, StyleSheet, Alert } from \"react-native\";\nimport type { WebView, WebViewMessageEvent } from \"react-native-webview\";\nimport { useWallet, useCrossmint } from \"@crossmint/client-sdk-react-base\";\nimport { environmentUrlConfig, exportSignerInboundEvents, exportSignerOutboundEvents } from \"@crossmint/client-signers\";\nimport { isExportableSigner } from \"@crossmint/wallets-sdk\";\nimport { validateAPIKey } from \"@crossmint/common-sdk-base\";\nimport type { UIConfig } from \"@crossmint/common-sdk-base\";\nimport { WebViewParent, RNWebView } from \"@crossmint/client-sdk-rn-window\";\n\nexport interface ExportPrivateKeyButtonProps {\n /** Optional appearance configuration for styling the export button. */\n appearance?: UIConfig;\n}\n\n/**\n * Renders a button that allows the user to export their wallet's private key.\n * Only works with email and phone signers. Will not render for passkey or external wallet signers.\n */\nexport function ExportPrivateKeyButton({ appearance }: ExportPrivateKeyButtonProps) {\n const { wallet } = useWallet();\n const { crossmint } = useCrossmint();\n const webViewRef = useRef<WebView>(null);\n const connectionRef = useRef<WebViewParent<\n typeof exportSignerOutboundEvents,\n typeof exportSignerInboundEvents\n > | null>(null);\n const [frameUrl, setFrameUrl] = useState<string>(\"\");\n\n useEffect(() => {\n if (crossmint != null) {\n try {\n const parsedAPIKey = validateAPIKey(crossmint.apiKey);\n if (parsedAPIKey.isValid) {\n const baseUrl = environmentUrlConfig[parsedAPIKey.environment];\n setFrameUrl(`${baseUrl}/export`);\n }\n } catch (error) {\n console.error(\"Failed to get TEE URL:\", error);\n }\n }\n }, [crossmint]);\n\n const handleWebViewLoadEnd = useCallback(\n async (syntheticEvent: { nativeEvent: { loading: boolean } }) => {\n if (wallet == null || webViewRef.current == null || syntheticEvent.nativeEvent.loading) {\n return;\n }\n\n try {\n if (isExportableSigner(wallet.signer)) {\n const connection = new WebViewParent(webViewRef, {\n incomingEvents: exportSignerOutboundEvents,\n outgoingEvents: exportSignerInboundEvents,\n });\n connectionRef.current = connection;\n await connection.handshakeWithChild();\n await wallet.signer._exportPrivateKey(connection);\n }\n } catch (error) {\n console.error(\"Failed to export private key:\", error);\n Alert.alert(\"Export Failed\", \"Failed to export private key. Please try again.\");\n }\n },\n [wallet]\n );\n\n const handleWebViewError = useCallback((syntheticEvent: { nativeEvent: unknown }) => {\n const { nativeEvent } = syntheticEvent;\n console.error(\"WebView error:\", nativeEvent);\n Alert.alert(\"Export Failed\", \"Failed to load export interface. Please try again.\");\n }, []);\n\n const handleMessage = useCallback((event: WebViewMessageEvent) => {\n if (connectionRef.current) {\n connectionRef.current.handleMessage(event);\n }\n }, []);\n\n if (frameUrl === \"\" || wallet == null || !isExportableSigner(wallet.signer)) {\n return null;\n }\n\n return (\n <View style={styles.webViewContainer}>\n <RNWebView\n ref={webViewRef}\n source={{ uri: frameUrl }}\n style={styles.webView}\n javaScriptEnabled={true}\n domStorageEnabled={true}\n onLoadEnd={handleWebViewLoadEnd}\n onError={handleWebViewError}\n onHttpError={handleWebViewError}\n onMessage={handleMessage}\n startInLoadingState={true}\n renderLoading={() => (\n <View style={styles.loadingContainer}>\n <Text style={styles.loadingText}>Loading...</Text>\n </View>\n )}\n />\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n webViewContainer: {\n height: 56,\n borderWidth: 1,\n borderColor: \"#E5E5E5\",\n borderRadius: 12,\n overflow: \"hidden\",\n },\n webView: {\n flex: 1,\n },\n loadingContainer: {\n flex: 1,\n justifyContent: \"center\",\n alignItems: \"center\",\n backgroundColor: \"#F5F5F5\",\n },\n loadingText: {\n fontSize: 16,\n color: \"#666666\",\n },\n});\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }// src/utils/eventEmitter.ts
|
|
2
|
+
var _mitt = require('mitt'); var _mitt2 = _interopRequireDefault(_mitt);
|
|
3
|
+
var localEventEmitter = _mitt2.default.call(void 0, );
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
exports.localEventEmitter = localEventEmitter;
|
|
8
|
+
//# sourceMappingURL=chunk-XUGJXLWC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/eventEmitter.ts"],"names":[],"mappings":";AACA,OAAO,UAAU;AAaV,IAAM,oBAAoB,KAA8B","sourcesContent":["import type { Order } from \"@crossmint/client-sdk-base\";\nimport mitt from \"mitt\";\n\nexport type LocalEventEmitterEvents = {\n \"order:updated\": {\n order?: Order;\n orderClientSecret?: string;\n };\n \"order:creation-failed\": {\n errorMessage: string;\n };\n};\n\n// Create a singleton instance for global use\nexport const localEventEmitter = mitt<LocalEventEmitterEvents>();\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";//# sourceMappingURL=chunk-XXJ7LQ44.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import {
|
|
2
|
+
initReactNativeLogger
|
|
3
|
+
} from "./chunk-2YRJHM46.mjs";
|
|
4
|
+
|
|
5
|
+
// src/providers/CrossmintProvider.tsx
|
|
6
|
+
import { useMemo } from "react";
|
|
7
|
+
import Constants from "expo-constants";
|
|
8
|
+
import { CrossmintProvider as BaseCrossmintProvider, createLoggerContext } from "@crossmint/client-sdk-react-base";
|
|
9
|
+
import { jsx } from "react/jsx-runtime";
|
|
10
|
+
var LoggerContext = createLoggerContext();
|
|
11
|
+
function CrossmintProvider({ children, apiKey, overrideBaseUrl, consoleLogLevel }) {
|
|
12
|
+
var _a, _b, _c, _d, _e;
|
|
13
|
+
const logger = useMemo(() => {
|
|
14
|
+
return initReactNativeLogger(apiKey, consoleLogLevel);
|
|
15
|
+
}, [apiKey, consoleLogLevel]);
|
|
16
|
+
const appId = (_e = (_b = (_a = Constants.expoConfig) == null ? void 0 : _a.ios) == null ? void 0 : _b.bundleIdentifier) != null ? _e : (_d = (_c = Constants.expoConfig) == null ? void 0 : _c.android) == null ? void 0 : _d.package;
|
|
17
|
+
return /* @__PURE__ */ jsx(LoggerContext.Provider, { value: logger, children: /* @__PURE__ */ jsx(BaseCrossmintProvider, { apiKey, appId, overrideBaseUrl, children }) });
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export {
|
|
21
|
+
LoggerContext,
|
|
22
|
+
CrossmintProvider
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=chunk-YAVGI5BZ.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/providers/CrossmintProvider.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport type { ReactNode } from \"react\";\nimport Constants from \"expo-constants\";\nimport { CrossmintProvider as BaseCrossmintProvider, createLoggerContext } from \"@crossmint/client-sdk-react-base\";\nimport type { CrossmintConfig, ConsoleLogLevel } from \"@crossmint/common-sdk-base\";\nimport { initReactNativeLogger } from \"../logger/init\";\n\nexport const LoggerContext = createLoggerContext();\n\nexport interface CrossmintProviderProps extends Pick<CrossmintConfig, \"apiKey\" | \"overrideBaseUrl\"> {\n /**\n * Minimum log level for console output (or \"silent\" to suppress all output).\n * Logs below this level will not be written to the console.\n * Set to \"silent\" to completely suppress console output.\n * Defaults to \"debug\" (all logs shown) for backward compatibility.\n */\n consoleLogLevel?: ConsoleLogLevel;\n /** @internal */\n children: ReactNode;\n}\n\n/**\n * Root provider for the Crossmint SDK. Must wrap your entire application.\n * Initializes the SDK with your API key and sets up logging.\n */\nexport function CrossmintProvider({ children, apiKey, overrideBaseUrl, consoleLogLevel }: CrossmintProviderProps) {\n const logger = useMemo(() => {\n return initReactNativeLogger(apiKey, consoleLogLevel);\n }, [apiKey, consoleLogLevel]);\n\n // Get app ID from Expo constants\n const appId = Constants.expoConfig?.ios?.bundleIdentifier ?? Constants.expoConfig?.android?.package;\n\n return (\n <LoggerContext.Provider value={logger}>\n <BaseCrossmintProvider apiKey={apiKey} appId={appId} overrideBaseUrl={overrideBaseUrl}>\n {children}\n </BaseCrossmintProvider>\n </LoggerContext.Provider>\n );\n}\n"],"mappings":";;;;;AAAA,SAAS,eAAe;AAExB,OAAO,eAAe;AACtB,SAAS,qBAAqB,uBAAuB,2BAA2B;AAgCpE;AA5BL,IAAM,gBAAgB,oBAAoB;AAkB1C,SAAS,kBAAkB,EAAE,UAAU,QAAQ,iBAAiB,gBAAgB,GAA2B;AAzBlH;AA0BI,QAAM,SAAS,QAAQ,MAAM;AACzB,WAAO,sBAAsB,QAAQ,eAAe;AAAA,EACxD,GAAG,CAAC,QAAQ,eAAe,CAAC;AAG5B,QAAM,SAAQ,2BAAU,eAAV,mBAAsB,QAAtB,mBAA2B,qBAA3B,aAA+C,qBAAU,eAAV,mBAAsB,YAAtB,mBAA+B;AAE5F,SACI,oBAAC,cAAc,UAAd,EAAuB,OAAO,QAC3B,8BAAC,yBAAsB,QAAgB,OAAc,iBAChD,UACL,GACJ;AAER;","names":[]}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import {
|
|
2
|
+
SecureStorage
|
|
3
|
+
} from "./chunk-EKXEDMRD.mjs";
|
|
4
|
+
import {
|
|
5
|
+
__async,
|
|
6
|
+
__objRest
|
|
7
|
+
} from "./chunk-7SPIOD4K.mjs";
|
|
8
|
+
|
|
9
|
+
// src/providers/CrossmintAuthProvider.tsx
|
|
10
|
+
import { createContext, useEffect, useMemo, useState, useCallback } from "react";
|
|
11
|
+
import * as WebBrowser from "expo-web-browser";
|
|
12
|
+
import Constants from "expo-constants";
|
|
13
|
+
import { Platform } from "react-native";
|
|
14
|
+
import { CrossmintAuthBaseProvider, useCrossmintAuthBase } from "@crossmint/client-sdk-react-base";
|
|
15
|
+
|
|
16
|
+
// src/hooks/index.ts
|
|
17
|
+
import { useCrossmint, useWallet } from "@crossmint/client-sdk-react-base";
|
|
18
|
+
|
|
19
|
+
// src/hooks/useAuth.ts
|
|
20
|
+
import { useContext } from "react";
|
|
21
|
+
function useCrossmintAuth() {
|
|
22
|
+
const context = useContext(AuthContext);
|
|
23
|
+
if (context == null) {
|
|
24
|
+
throw new Error("useCrossmintAuth must be used within a CrossmintAuthProvider");
|
|
25
|
+
}
|
|
26
|
+
return context;
|
|
27
|
+
}
|
|
28
|
+
var useAuth = useCrossmintAuth;
|
|
29
|
+
|
|
30
|
+
// src/providers/CrossmintAuthProvider.tsx
|
|
31
|
+
import { jsx } from "react/jsx-runtime";
|
|
32
|
+
var initialOAuthUrlMap = {
|
|
33
|
+
google: null,
|
|
34
|
+
twitter: null
|
|
35
|
+
};
|
|
36
|
+
var defaultContextValue = {
|
|
37
|
+
crossmintAuth: void 0,
|
|
38
|
+
login: () => {
|
|
39
|
+
},
|
|
40
|
+
logout: () => __async(void 0, null, function* () {
|
|
41
|
+
}),
|
|
42
|
+
jwt: void 0,
|
|
43
|
+
user: void 0,
|
|
44
|
+
status: "initializing",
|
|
45
|
+
getUser: () => {
|
|
46
|
+
},
|
|
47
|
+
loginWithOAuth: () => Promise.resolve(),
|
|
48
|
+
createAuthSession: () => Promise.resolve(null)
|
|
49
|
+
};
|
|
50
|
+
var AuthContext = createContext(defaultContextValue);
|
|
51
|
+
function CrossmintAuthSync({ children }) {
|
|
52
|
+
const { experimental_setCustomAuth, experimental_customAuth } = useCrossmint();
|
|
53
|
+
const { user, jwt } = useAuth();
|
|
54
|
+
useEffect(() => {
|
|
55
|
+
if (jwt == null && (experimental_customAuth == null ? void 0 : experimental_customAuth.jwt) != null) {
|
|
56
|
+
experimental_setCustomAuth(void 0);
|
|
57
|
+
}
|
|
58
|
+
if (jwt != null) {
|
|
59
|
+
experimental_setCustomAuth({
|
|
60
|
+
jwt,
|
|
61
|
+
email: user == null ? void 0 : user.email
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}, [experimental_setCustomAuth, jwt, user]);
|
|
65
|
+
return children;
|
|
66
|
+
}
|
|
67
|
+
function CrossmintAuthProviderContent({
|
|
68
|
+
children,
|
|
69
|
+
appSchema
|
|
70
|
+
}) {
|
|
71
|
+
const baseAuth = useCrossmintAuthBase();
|
|
72
|
+
const [oauthUrlMap, setOauthUrlMap] = useState(initialOAuthUrlMap);
|
|
73
|
+
const [inProgress, setInProgress] = useState(false);
|
|
74
|
+
const singleAppSchema = Array.isArray(appSchema) ? appSchema[0] : appSchema;
|
|
75
|
+
const isRunningInExpoGo = Constants.executionEnvironment === "storeClient" || Constants.appOwnership === "expo" || !!Constants.expoVersion;
|
|
76
|
+
const resolvedAppSchema = isRunningInExpoGo ? "exp://127.0.0.1:8081" : singleAppSchema;
|
|
77
|
+
const preFetchAndSetOauthUrl = useCallback(() => __async(this, null, function* () {
|
|
78
|
+
try {
|
|
79
|
+
const oauthProviders = Object.keys(initialOAuthUrlMap);
|
|
80
|
+
const oauthPromiseList = oauthProviders.map((provider) => __async(this, null, function* () {
|
|
81
|
+
var _a;
|
|
82
|
+
const url = yield (_a = baseAuth.crossmintAuth) == null ? void 0 : _a.getOAuthUrl(provider, {
|
|
83
|
+
appSchema: resolvedAppSchema
|
|
84
|
+
});
|
|
85
|
+
return { [provider]: url };
|
|
86
|
+
}));
|
|
87
|
+
const oauthUrlMap2 = Object.assign({}, ...yield Promise.all(oauthPromiseList));
|
|
88
|
+
setOauthUrlMap(oauthUrlMap2);
|
|
89
|
+
} catch (error) {
|
|
90
|
+
console.error(error);
|
|
91
|
+
}
|
|
92
|
+
}), [baseAuth.crossmintAuth, resolvedAppSchema]);
|
|
93
|
+
useEffect(() => {
|
|
94
|
+
if (baseAuth.user == null) {
|
|
95
|
+
preFetchAndSetOauthUrl();
|
|
96
|
+
}
|
|
97
|
+
}, [preFetchAndSetOauthUrl, baseAuth.user]);
|
|
98
|
+
const getAuthStatus = () => {
|
|
99
|
+
if (baseAuth.status === "initializing") {
|
|
100
|
+
return "initializing";
|
|
101
|
+
}
|
|
102
|
+
if (inProgress) {
|
|
103
|
+
return "in-progress";
|
|
104
|
+
}
|
|
105
|
+
if (baseAuth.jwt != null) {
|
|
106
|
+
return "logged-in";
|
|
107
|
+
}
|
|
108
|
+
return "logged-out";
|
|
109
|
+
};
|
|
110
|
+
const loginWithOAuth = (provider) => __async(this, null, function* () {
|
|
111
|
+
var _a, _b;
|
|
112
|
+
try {
|
|
113
|
+
setInProgress(true);
|
|
114
|
+
const oauthUrl = (_b = oauthUrlMap[provider]) != null ? _b : yield (_a = baseAuth.crossmintAuth) == null ? void 0 : _a.getOAuthUrl(provider, { appSchema: resolvedAppSchema });
|
|
115
|
+
yield WebBrowser.warmUpAsync();
|
|
116
|
+
const baseUrl = new URL(oauthUrl);
|
|
117
|
+
if (provider === "google") {
|
|
118
|
+
baseUrl.searchParams.append("provider_prompt", "select_account");
|
|
119
|
+
}
|
|
120
|
+
if (Platform.OS === "android") {
|
|
121
|
+
yield WebBrowser.openBrowserAsync(baseUrl.toString());
|
|
122
|
+
} else {
|
|
123
|
+
const result = yield WebBrowser.openAuthSessionAsync(baseUrl.toString());
|
|
124
|
+
if (result.type === "success") {
|
|
125
|
+
yield createAuthSession(result.url);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
yield WebBrowser.coolDownAsync();
|
|
129
|
+
} catch (error) {
|
|
130
|
+
console.error("[CrossmintAuthProvider] Error during OAuth login:", error);
|
|
131
|
+
throw new Error(`Error during OAuth login: ${error}`);
|
|
132
|
+
} finally {
|
|
133
|
+
setInProgress(false);
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
const createAuthSession = useCallback(
|
|
137
|
+
(urlOrOneTimeSecret) => __async(this, null, function* () {
|
|
138
|
+
var _a;
|
|
139
|
+
const oneTimeSecret = urlOrOneTimeSecret.includes("://") ? extractOneTimeSecretFromUrl(urlOrOneTimeSecret) : urlOrOneTimeSecret;
|
|
140
|
+
if (oneTimeSecret != null) {
|
|
141
|
+
try {
|
|
142
|
+
setInProgress(true);
|
|
143
|
+
const authMaterial = yield (_a = baseAuth.crossmintAuth) == null ? void 0 : _a.handleRefreshAuthMaterial(oneTimeSecret);
|
|
144
|
+
return authMaterial;
|
|
145
|
+
} catch (error) {
|
|
146
|
+
throw error;
|
|
147
|
+
} finally {
|
|
148
|
+
setInProgress(false);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return null;
|
|
152
|
+
}),
|
|
153
|
+
[baseAuth.crossmintAuth]
|
|
154
|
+
);
|
|
155
|
+
return /* @__PURE__ */ jsx(
|
|
156
|
+
AuthContext.Provider,
|
|
157
|
+
{
|
|
158
|
+
value: {
|
|
159
|
+
crossmintAuth: baseAuth.crossmintAuth,
|
|
160
|
+
logout: baseAuth.logout,
|
|
161
|
+
jwt: baseAuth.jwt,
|
|
162
|
+
user: baseAuth.user,
|
|
163
|
+
status: getAuthStatus(),
|
|
164
|
+
getUser: baseAuth.getUser,
|
|
165
|
+
login: () => {
|
|
166
|
+
},
|
|
167
|
+
loginWithOAuth,
|
|
168
|
+
createAuthSession
|
|
169
|
+
},
|
|
170
|
+
children: /* @__PURE__ */ jsx(CrossmintAuthSync, { children })
|
|
171
|
+
}
|
|
172
|
+
);
|
|
173
|
+
}
|
|
174
|
+
function CrossmintAuthProvider(_a) {
|
|
175
|
+
var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
|
|
176
|
+
var _a2, _b2;
|
|
177
|
+
const appSchema = (_b2 = props.appSchema) != null ? _b2 : (_a2 = Constants.expoConfig) == null ? void 0 : _a2.scheme;
|
|
178
|
+
const customStorageProvider = useMemo(() => {
|
|
179
|
+
var _a3;
|
|
180
|
+
return (_a3 = props.storageProvider) != null ? _a3 : new SecureStorage();
|
|
181
|
+
}, [props.storageProvider]);
|
|
182
|
+
return /* @__PURE__ */ jsx(
|
|
183
|
+
CrossmintAuthBaseProvider,
|
|
184
|
+
{
|
|
185
|
+
onLoginSuccess: props.onLoginSuccess,
|
|
186
|
+
refreshRoute: props.refreshRoute,
|
|
187
|
+
logoutRoute: props.logoutRoute,
|
|
188
|
+
storageProvider: customStorageProvider,
|
|
189
|
+
children: /* @__PURE__ */ jsx(CrossmintAuthProviderContent, { appSchema, children })
|
|
190
|
+
}
|
|
191
|
+
);
|
|
192
|
+
}
|
|
193
|
+
var extractOneTimeSecretFromUrl = (url) => {
|
|
194
|
+
const regex = /[?&]oneTimeSecret=([^&#]+)/;
|
|
195
|
+
const match = url.match(regex);
|
|
196
|
+
const secret = match ? decodeURIComponent(match[1]) : void 0;
|
|
197
|
+
return secret;
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
export {
|
|
201
|
+
AuthContext,
|
|
202
|
+
CrossmintAuthProvider,
|
|
203
|
+
useCrossmintAuth,
|
|
204
|
+
useAuth,
|
|
205
|
+
useCrossmint,
|
|
206
|
+
useWallet
|
|
207
|
+
};
|
|
208
|
+
//# sourceMappingURL=chunk-Z7Y7COJM.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/providers/CrossmintAuthProvider.tsx","../src/hooks/index.ts","../src/hooks/useAuth.ts"],"sourcesContent":["import { type ReactNode, createContext, useEffect, useMemo, useState, useCallback } from \"react\";\nimport * as WebBrowser from \"expo-web-browser\";\nimport Constants from \"expo-constants\";\nimport { Platform } from \"react-native\";\nimport type { OAuthProvider } from \"@crossmint/common-sdk-auth\";\nimport { type AuthStatus, CrossmintAuthBaseProvider, useCrossmintAuthBase } from \"@crossmint/client-sdk-react-base\";\nimport { useAuth, useCrossmint } from \"../hooks\";\nimport { SecureStorage } from \"../utils/SecureStorage\";\nimport type { RNAuthContext, RNCrossmintAuthProviderProps } from \"@/types/auth\";\n\ntype OAuthUrlMap = Record<OAuthProvider, string | null>;\nconst initialOAuthUrlMap: OAuthUrlMap = {\n google: null,\n twitter: null,\n};\n\nconst defaultContextValue: RNAuthContext = {\n crossmintAuth: undefined,\n login: () => {},\n logout: async () => {},\n jwt: undefined,\n user: undefined,\n status: \"initializing\",\n getUser: () => {},\n loginWithOAuth: () => Promise.resolve(),\n createAuthSession: () => Promise.resolve(null),\n};\n\nexport const AuthContext = createContext<RNAuthContext>(defaultContextValue);\n\nfunction CrossmintAuthSync({ children }: { children: ReactNode }) {\n const { experimental_setCustomAuth, experimental_customAuth } = useCrossmint();\n const { user, jwt } = useAuth();\n\n useEffect(() => {\n if (jwt == null && experimental_customAuth?.jwt != null) {\n experimental_setCustomAuth(undefined);\n }\n if (jwt != null) {\n experimental_setCustomAuth({\n jwt,\n email: user?.email,\n });\n }\n }, [experimental_setCustomAuth, jwt, user]);\n\n return children;\n}\n\nfunction CrossmintAuthProviderContent({\n children,\n appSchema,\n}: {\n children: ReactNode;\n appSchema?: string | string[];\n}) {\n const baseAuth = useCrossmintAuthBase();\n const [oauthUrlMap, setOauthUrlMap] = useState<OAuthUrlMap>(initialOAuthUrlMap);\n const [inProgress, setInProgress] = useState(false);\n\n const singleAppSchema = Array.isArray(appSchema) ? appSchema[0] : appSchema;\n const isRunningInExpoGo =\n Constants.executionEnvironment === \"storeClient\" ||\n Constants.appOwnership === \"expo\" ||\n !!Constants.expoVersion;\n const resolvedAppSchema = isRunningInExpoGo ? \"exp://127.0.0.1:8081\" : singleAppSchema;\n\n const preFetchAndSetOauthUrl = useCallback(async () => {\n try {\n const oauthProviders = Object.keys(initialOAuthUrlMap);\n\n const oauthPromiseList = oauthProviders.map(async (provider) => {\n const url = await baseAuth.crossmintAuth?.getOAuthUrl(provider as OAuthProvider, {\n appSchema: resolvedAppSchema,\n });\n return { [provider]: url };\n });\n\n const oauthUrlMap = Object.assign({}, ...(await Promise.all(oauthPromiseList)));\n setOauthUrlMap(oauthUrlMap);\n } catch (error) {\n console.error(error);\n }\n }, [baseAuth.crossmintAuth, resolvedAppSchema]);\n\n useEffect(() => {\n if (baseAuth.user == null) {\n preFetchAndSetOauthUrl();\n }\n }, [preFetchAndSetOauthUrl, baseAuth.user]);\n\n const getAuthStatus = (): AuthStatus => {\n if (baseAuth.status === \"initializing\") {\n return \"initializing\";\n }\n if (inProgress) {\n return \"in-progress\";\n }\n if (baseAuth.jwt != null) {\n return \"logged-in\";\n }\n return \"logged-out\";\n };\n\n const loginWithOAuth = async (provider: OAuthProvider) => {\n try {\n setInProgress(true);\n const oauthUrl =\n oauthUrlMap[provider] ??\n (await baseAuth.crossmintAuth?.getOAuthUrl(provider, { appSchema: resolvedAppSchema }));\n\n await WebBrowser.warmUpAsync();\n const baseUrl = new URL(oauthUrl);\n if (provider === \"google\") {\n baseUrl.searchParams.append(\"provider_prompt\", \"select_account\");\n }\n\n if (Platform.OS === \"android\") {\n await WebBrowser.openBrowserAsync(baseUrl.toString());\n } else {\n const result = await WebBrowser.openAuthSessionAsync(baseUrl.toString());\n if (result.type === \"success\") {\n await createAuthSession(result.url);\n }\n }\n await WebBrowser.coolDownAsync();\n } catch (error) {\n console.error(\"[CrossmintAuthProvider] Error during OAuth login:\", error);\n throw new Error(`Error during OAuth login: ${error}`);\n } finally {\n setInProgress(false);\n }\n };\n\n const createAuthSession = useCallback(\n async (urlOrOneTimeSecret: string) => {\n const oneTimeSecret = urlOrOneTimeSecret.includes(\"://\")\n ? extractOneTimeSecretFromUrl(urlOrOneTimeSecret)\n : urlOrOneTimeSecret;\n\n if (oneTimeSecret != null) {\n try {\n setInProgress(true);\n const authMaterial = await baseAuth.crossmintAuth?.handleRefreshAuthMaterial(oneTimeSecret);\n return authMaterial;\n } catch (error) {\n throw error;\n } finally {\n setInProgress(false);\n }\n }\n return null;\n },\n [baseAuth.crossmintAuth]\n );\n\n return (\n <AuthContext.Provider\n value={{\n crossmintAuth: baseAuth.crossmintAuth,\n logout: baseAuth.logout,\n jwt: baseAuth.jwt,\n user: baseAuth.user,\n status: getAuthStatus(),\n getUser: baseAuth.getUser,\n login: () => {},\n loginWithOAuth,\n createAuthSession,\n }}\n >\n <CrossmintAuthSync>{children}</CrossmintAuthSync>\n </AuthContext.Provider>\n );\n}\n\nexport function CrossmintAuthProvider({ children, ...props }: RNCrossmintAuthProviderProps) {\n const appSchema = props.appSchema ?? Constants.expoConfig?.scheme;\n const customStorageProvider = useMemo(() => props.storageProvider ?? new SecureStorage(), [props.storageProvider]);\n\n return (\n <CrossmintAuthBaseProvider\n onLoginSuccess={props.onLoginSuccess}\n refreshRoute={props.refreshRoute}\n logoutRoute={props.logoutRoute}\n storageProvider={customStorageProvider}\n >\n <CrossmintAuthProviderContent appSchema={appSchema}>{children}</CrossmintAuthProviderContent>\n </CrossmintAuthBaseProvider>\n );\n}\n\nconst extractOneTimeSecretFromUrl = (url: string): string | undefined => {\n const regex = /[?&]oneTimeSecret=([^&#]+)/;\n const match = url.match(regex);\n const secret = match ? decodeURIComponent(match[1]) : undefined;\n return secret;\n};\n","export { useCrossmint, useWallet } from \"@crossmint/client-sdk-react-base\";\nexport * from \"./useWalletEmailSigner\";\nexport * from \"./useCrossmintCheckout\";\nexport * from \"./useAuth\";\n","import { useContext } from \"react\";\nimport type { CrossmintAuthBaseContextType } from \"@crossmint/client-sdk-react-base\";\nimport type { AuthMaterialWithUser, OAuthProvider } from \"@crossmint/common-sdk-auth\";\nimport { AuthContext } from \"@/providers/CrossmintAuthProvider\";\n\ninterface RNCrossmintAuthContext extends CrossmintAuthBaseContextType {\n loginWithOAuth: (provider: OAuthProvider) => Promise<void>;\n createAuthSession: (urlOrOneTimeSecret: string) => Promise<AuthMaterialWithUser | null>;\n}\n\nexport function useCrossmintAuth(): RNCrossmintAuthContext {\n const context = useContext(AuthContext);\n if (context == null) {\n throw new Error(\"useCrossmintAuth must be used within a CrossmintAuthProvider\");\n }\n return context;\n}\n\nexport const useAuth = useCrossmintAuth;\n"],"mappings":"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","names":["oauthUrlMap","_a","_b"]}
|