@crossmint/client-sdk-react-native-ui 0.4.6 → 0.4.8

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.
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkZ5PBXGAXcjs = require('./chunk-Z5PBXGAX.cjs');var _chunkKWIO2XXJcjs = require('./chunk-KWIO2XXJ.cjs');var _chunkO5AL6DBJcjs = require('./chunk-O5AL6DBJ.cjs');var _react = require('react');var _clientsdkreactbase = require('@crossmint/client-sdk-react-base');var _jsxruntime = require('react/jsx-runtime');var C=["experimental_needsAuth","experimental_createRecoveryKeySigner","experimental_sendEmailWithOtp","experimental_verifyOtp"];function u({children:n}){let r=_react.useContext.call(void 0, _clientsdkreactbase.WalletContext),o=_react.useContext.call(void 0, _chunkZ5PBXGAXcjs.a);if(r==null)throw new Error("BaseWalletContext not found. Ensure CrossmintWalletProvider structure is correct.");let s=_react.useMemo.call(void 0, ()=>{let e=_chunkO5AL6DBJcjs.a.call(void 0, {},r);if(o!=null)Object.assign(e,o);else for(let a of C)Object.defineProperty(e,a,{get(){throw new Error(`Cannot access '${a}'. Ensure 'experimental_enableRecoveryKeys={true}' is set on CrossmintWalletProvider.`)},enumerable:!0,configurable:!0});return e},[r,o]);return _jsxruntime.jsx.call(void 0, _chunkKWIO2XXJcjs.a.Provider,{value:s,children:n})}function b({children:n,experimental_enableRecoveryKeys:r=!1,experimental_secureEndpointUrl:o}){return _jsxruntime.jsx.call(void 0, _clientsdkreactbase.CrossmintWalletProvider,{children:_jsxruntime.jsx.call(void 0, ({children:e})=>r?_jsxruntime.jsx.call(void 0, _chunkZ5PBXGAXcjs.c,{experimental_secureEndpointUrl:o,children:e}):_jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:e}),{children:_jsxruntime.jsx.call(void 0, u,{children:n})})})}exports.a = b;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkGUWCOCRFcjs = require('./chunk-GUWCOCRF.cjs');var _chunkKWIO2XXJcjs = require('./chunk-KWIO2XXJ.cjs');var _chunkO5AL6DBJcjs = require('./chunk-O5AL6DBJ.cjs');var _react = require('react');var _clientsdkreactbase = require('@crossmint/client-sdk-react-base');var _jsxruntime = require('react/jsx-runtime');var C=["experimental_needsAuth","experimental_createRecoveryKeySigner","experimental_sendEmailWithOtp","experimental_verifyOtp"];function u({children:n}){let r=_react.useContext.call(void 0, _clientsdkreactbase.WalletContext),o=_react.useContext.call(void 0, _chunkGUWCOCRFcjs.a);if(r==null)throw new Error("BaseWalletContext not found. Ensure CrossmintWalletProvider structure is correct.");let s=_react.useMemo.call(void 0, ()=>{let e=_chunkO5AL6DBJcjs.a.call(void 0, {},r);if(o!=null)Object.assign(e,o);else for(let a of C)Object.defineProperty(e,a,{get(){throw new Error(`Cannot access '${a}'. Ensure 'experimental_enableRecoveryKeys={true}' is set on CrossmintWalletProvider.`)},enumerable:!0,configurable:!0});return e},[r,o]);return _jsxruntime.jsx.call(void 0, _chunkKWIO2XXJcjs.a.Provider,{value:s,children:n})}function b({children:n,experimental_enableRecoveryKeys:r=!1,experimental_secureEndpointUrl:o}){return _jsxruntime.jsx.call(void 0, _clientsdkreactbase.CrossmintWalletProvider,{children:_jsxruntime.jsx.call(void 0, ({children:e})=>r?_jsxruntime.jsx.call(void 0, _chunkGUWCOCRFcjs.c,{experimental_secureEndpointUrl:o,children:e}):_jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:e}),{children:_jsxruntime.jsx.call(void 0, u,{children:n})})})}exports.a = b;
@@ -1 +1 @@
1
- import{a as c,c as m}from"./chunk-FELGMFUD.js";import{a as l}from"./chunk-KZMAEKSM.js";import{a as i}from"./chunk-TKB736C5.js";import{useContext as v,useMemo as y}from"react";import{CrossmintWalletProvider as p,WalletContext as d}from"@crossmint/client-sdk-react-base";import{Fragment as W,jsx as t}from"react/jsx-runtime";var C=["experimental_needsAuth","experimental_createRecoveryKeySigner","experimental_sendEmailWithOtp","experimental_verifyOtp"];function u({children:n}){let r=v(d),o=v(c);if(r==null)throw new Error("BaseWalletContext not found. Ensure CrossmintWalletProvider structure is correct.");let s=y(()=>{let e=i({},r);if(o!=null)Object.assign(e,o);else for(let a of C)Object.defineProperty(e,a,{get(){throw new Error(`Cannot access '${a}'. Ensure 'experimental_enableRecoveryKeys={true}' is set on CrossmintWalletProvider.`)},enumerable:!0,configurable:!0});return e},[r,o]);return t(l.Provider,{value:s,children:n})}function h({children:n,experimental_enableRecoveryKeys:r=!1,experimental_secureEndpointUrl:o}){return t(p,{children:t(({children:e})=>r?t(m,{experimental_secureEndpointUrl:o,children:e}):t(W,{children:e}),{children:t(u,{children:n})})})}export{h as a};
1
+ import{a as c,c as m}from"./chunk-T2EP6TD5.js";import{a as l}from"./chunk-KZMAEKSM.js";import{a as i}from"./chunk-TKB736C5.js";import{useContext as v,useMemo as y}from"react";import{CrossmintWalletProvider as p,WalletContext as d}from"@crossmint/client-sdk-react-base";import{Fragment as W,jsx as t}from"react/jsx-runtime";var C=["experimental_needsAuth","experimental_createRecoveryKeySigner","experimental_sendEmailWithOtp","experimental_verifyOtp"];function u({children:n}){let r=v(d),o=v(c);if(r==null)throw new Error("BaseWalletContext not found. Ensure CrossmintWalletProvider structure is correct.");let s=y(()=>{let e=i({},r);if(o!=null)Object.assign(e,o);else for(let a of C)Object.defineProperty(e,a,{get(){throw new Error(`Cannot access '${a}'. Ensure 'experimental_enableRecoveryKeys={true}' is set on CrossmintWalletProvider.`)},enumerable:!0,configurable:!0});return e},[r,o]);return t(l.Provider,{value:s,children:n})}function h({children:n,experimental_enableRecoveryKeys:r=!1,experimental_secureEndpointUrl:o}){return t(p,{children:t(({children:e})=>r?t(m,{experimental_secureEndpointUrl:o,children:e}):t(W,{children:e}),{children:t(u,{children:n})})})}export{h as a};
@@ -0,0 +1,17 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var _chunkVIA5NAWDcjs = require('./chunk-VIA5NAWD.cjs');var _chunkO5AL6DBJcjs = require('./chunk-O5AL6DBJ.cjs');var _react = require('react'); var _react2 = _interopRequireDefault(_react);var _bs58 = require('bs58'); var _bs582 = _interopRequireDefault(_bs58);var _web3js = require('@solana/web3.js');var _clientsdkrnwindow = require('@crossmint/client-sdk-rn-window');var _clientsigners = require('@crossmint/client-signers');var _reactnative = require('react-native');var _commonsdkbase = require('@crossmint/common-sdk-base');var _clientsdkreactbase = require('@crossmint/client-sdk-react-base');var _jsxruntime = require('react/jsx-runtime');var J=_react2.default.createContext(null);function be(){let E=_react.useContext.call(void 0, J);if(E==null)throw new Error("useCrossmintRecoveryKey must be used within a CrossmintRecoveryKeyProvider");return E}var v={timeoutMs:1e4,intervalMs:5e3},N="https://crossmint-signer-frames.onrender.com";function Pe({children:E,experimental_secureEndpointUrl:$=N}){let{crossmint:{apiKey:a,jwt:s,appId:b}}=_chunkVIA5NAWDcjs.e.call(void 0, ),{getOrCreateWallet:P,clearWallet:L}=_react.useContext.call(void 0, _clientsdkreactbase.WalletContext),f=_react.useRef.call(void 0, null),p=_react.useRef.call(void 0, null),[y,R]=_react.useState.call(void 0, !1),[le,W]=_react.useState.call(void 0, null),[u,c]=_react.useState.call(void 0, !1),S=_react.useRef.call(void 0, !1),x=_react.useRef.call(void 0, !1),h=_react.useRef.call(void 0, null),B=_react.useMemo.call(void 0, ()=>b!=null?`window.crossmintAppId = '${b}';`:"",[b]);_react.useEffect.call(void 0, ()=>{f.current!=null&&p.current==null&&(p.current=new (0, _clientsdkrnwindow.WebViewParent)(f,{incomingEvents:_clientsigners.signerOutboundEvents,outgoingEvents:_clientsigners.signerInboundEvents}))},[]),_react.useEffect.call(void 0, ()=>{s==null&&!S.current?(c(!1),W(null),L(),S.current=!0):s!=null&&(S.current=!1,y&&z())},[s,y]),_react.useEffect.call(void 0, ()=>{x.current=u},[u]);let A=_react.useCallback.call(void 0, ()=>_chunkO5AL6DBJcjs.b.call(void 0, this,null,function*(){if(console.log("handleAuthRequired needsAuth",x.current),!x.current)return;let t,n,o=new Promise((e,r)=>{t=e,n=r});h.current={promise:o,resolve:t,reject:n};try{console.log("Waiting for auth promise"),yield h.current.promise,console.log("Auth promise resolved")}catch(e){throw e}}),[]),T=_react.useCallback.call(void 0, t=>_chunkO5AL6DBJcjs.b.call(void 0, this,null,function*(){var e;let n=p.current;if(n==null||!y)throw new Error("[sendEmailWithOtp] WebViewParent not ready or handshake incomplete.");if(s==null||a==null)throw new Error("[sendEmailWithOtp] Missing authentication credentials (JWT or API Key).");if(!u)throw new Error("OTP email request is not applicable in the current state.");W(t);let o=`email:${t}`;try{let r=yield n.sendAction({event:"request:create-signer",responseEvent:"response:create-signer",data:{authData:{jwt:s,apiKey:a},data:{authId:o,chainLayer:"solana"}},options:v});if((r==null?void 0:r.status)==="success"&&r.address){c(!1);return}if((r==null?void 0:r.status)==="error")throw console.error("[sendEmailWithOtp] Failed to send OTP:",r),new Error(r.error||"Failed to initiate OTP process.");console.log("[sendEmailWithOtp] OTP process likely initiated. Waiting for verification.")}catch(r){throw console.error("[sendEmailWithOtp] Error sending create-signer request:",r),(e=h.current)==null||e.reject(r),r}}),[y,s,a,u]),V=_react.useCallback.call(void 0, t=>_chunkO5AL6DBJcjs.b.call(void 0, this,null,function*(){var o,e,r;let n=p.current;if(n==null||!y)throw new Error("[verifyOtp] WebViewParent not ready or handshake incomplete.");if(s==null||a==null)throw new Error("[verifyOtp] Missing authentication credentials (JWT or API Key).");if(!u)throw new Error("Not currently awaiting OTP validation.");try{let i=yield n.sendAction({event:"request:send-otp",responseEvent:"response:send-otp",data:{authData:{jwt:s,apiKey:a},data:{chainLayer:"solana",encryptedOtp:t}},options:v});if((i==null?void 0:i.status)==="success"&&i.address){console.log("[verifyOtp] OTP validation successful. Signer address:",i.address),c(!1),(o=h.current)==null||o.resolve();return}else{console.error("[verifyOtp] Failed to validate OTP:",i),c(!0);let l=i&&i.status==="error"?i.error:"Failed to validate encrypted OTP";throw(e=h.current)==null||e.reject(new Error(l)),new Error(l)}}catch(i){throw console.error("[verifyOtp] Error sending OTP validation request:",i),c(!0),(r=h.current)==null||r.reject(i),i}}),[y,s,a,u]),G=_react.useRef.call(void 0, null),q=_react.useCallback.call(void 0, t=>{G.current=t},[]),O=_react.useCallback.call(void 0, t=>{let n=p.current;if(n==null||s==null||a==null)throw new Error("Cannot build signer: Missing prerequisites (parent, jwt, apiKey).");return{type:"solana-keypair",address:t,signer:{signMessage:o=>_chunkO5AL6DBJcjs.b.call(void 0, this,null,function*(){yield A();try{let e=yield n.sendAction({event:"request:sign",responseEvent:"response:sign",data:{authData:{jwt:s,apiKey:a},data:{bytes:_bs582.default.encode(o),keyType:"ed25519",encoding:"base58"}},options:v});if(e==null||e.status==="error"||e.signature==null)throw console.error("Failed signMessage response:",e),new Error("Failed to sign message");return _bs582.default.decode(e.signature)}catch(e){throw console.error("Error during signMessage:",e),e}}),signTransaction:o=>_chunkO5AL6DBJcjs.b.call(void 0, this,null,function*(){yield A();try{let e=o.message.serialize(),r=yield n.sendAction({event:"request:sign",responseEvent:"response:sign",data:{authData:{jwt:s,apiKey:a},data:{bytes:_bs582.default.encode(e),keyType:"ed25519",encoding:"base58"}},options:v});if(r==null||r.status==="error"||r.signature==null)throw new Error("Failed to sign transaction: No signature returned");return o.addSignature(new (0, _web3js.PublicKey)(t),_bs582.default.decode(r.signature)),o}catch(e){throw console.error("Error during signTransaction:",e),e}})}}},[s,a,A]),z=_react.useCallback.call(void 0, ()=>_chunkO5AL6DBJcjs.b.call(void 0, this,null,function*(){let t=p.current;if(t==null||!y||s==null||a==null){console.warn("[checkSignerExists] Prerequisites not met (WebView, JWT, API Key). Status:",{isWebViewReady:y,hasJwt:s!=null,hasApiKey:a!=null}),c(!1);return}try{let n=yield t.sendAction({event:"request:get-public-key",responseEvent:"response:get-public-key",data:{authData:{jwt:s,apiKey:a},data:{chainLayer:"solana"}},options:v});if((n==null?void 0:n.status)==="success"&&n.publicKey){let o=O(n.publicKey);c(!1),yield P({type:"solana-smart-wallet",args:{adminSigner:o}})}else console.log("checkSignerExists needsAuth true",u),c(!0)}catch(n){console.error("[checkSignerExists] Error checking for signer:",n),c(!0)}}),[y,s,a,O,P]),H=_react.useCallback.call(void 0, ()=>_chunkO5AL6DBJcjs.b.call(void 0, this,null,function*(){let t=p.current;if(t!=null)try{yield t.handshakeWithChild(),R(!0)}catch(n){console.error("[RN] handshakeWithChild error:",n),R(!1)}}),[]),Q=_react.useCallback.call(void 0, t=>{let n=p.current;if(n!=null){try{let o=JSON.parse(t.nativeEvent.data);if(o&&typeof o.type=="string"&&o.type.startsWith("console.")){let e=o.type.split(".")[1],r=(o.data||[]).map(l=>{try{return l==="[Function]"||l==="[Circular Reference]"||l==="[Unserializable Object]"?l:JSON.parse(l)}catch(_){return l}}),i=`[WebView:${e.toUpperCase()}]`;switch(e){case"log":console.log(i,...r);break;case"error":console.error(i,...r);break;case"warn":console.warn(i,...r);break;case"info":console.info(i,...r);break;default:console.log(`[WebView Unknown:${e}]`,...r)}return}}catch(o){}n.handleMessage(t)}},[]),M=_react.useCallback.call(void 0, t=>_chunkO5AL6DBJcjs.b.call(void 0, this,null,function*(){if(s==null||a==null)return console.warn("[createRecoveryKeySigner] Prerequisites not met (WebView ready, JWT, API Key). Cannot proceed."),c(!1),null;if(W(t),p.current==null)return console.error("[createRecoveryKeySigner] WebView parent disappeared unexpectedly."),c(!1),null;try{let o=_commonsdkbase.validateApiKeyAndGetCrossmintBaseUrl.call(void 0, a),e=yield fetch(`${o}api/unstable/wallets/ncs/irrelevant/public-key`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${s}`,"x-api-key":a,"x-app-identifier":b},body:JSON.stringify({authId:`email:${t}`,signingAlgorithm:"EDDSA_ED25519"})});if(!e.ok){let k=yield e.text();throw new Error(`Failed to fetch public key: ${e.status} ${k}`)}let r=yield e.json();if(!r.publicKey)throw new Error("Fetched data does not contain a public key.");let i=r.publicKey,l=Uint8Array.from(atob(i),k=>k.charCodeAt(0)),_=_bs582.default.encode(l),Y=O(_);return yield P({type:"solana-smart-wallet",args:{adminSigner:Y}}),console.log("createRecoveryKeySigner needsAuth true",u),c(!0),null}catch(o){return console.error("[createRecoveryKeySigner] Error during public key fetch or processing:",o),c(!0),null}}),[s,a,O,P]),D=_react.useCallback.call(void 0, ()=>{if(f.current==null)return;f.current.injectJavaScript(`
2
+ try {
3
+ localStorage.clear();
4
+ sessionStorage.clear();
5
+ const cookies = document.cookie.split(';');
6
+ for (let i = 0; i < cookies.length; i++) {
7
+ const cookie = cookies[i];
8
+ const eqPos = cookie.indexOf('=');
9
+ const name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
10
+ document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/';
11
+ }
12
+ indexedDB.deleteDatabase('crossmint');
13
+ indexedDB.deleteDatabase('crossmint-signer');
14
+ } catch (error) {
15
+ console.error('Error clearing storage:', error);
16
+ }
17
+ `)},[]),X=_react.useMemo.call(void 0, ()=>({experimental_needsAuth:u,experimental_createRecoveryKeySigner:M,experimental_sendEmailWithOtp:T,experimental_verifyOtp:V,onAuthRequired:q,experimental_clearStorage:D}),[u,M,T,V,q,D]);return _jsxruntime.jsxs.call(void 0, J.Provider,{value:X,children:[E,_jsxruntime.jsx.call(void 0, _reactnative.View,{style:{position:"absolute",width:0,height:0,overflow:"hidden"},children:_jsxruntime.jsx.call(void 0, _clientsdkrnwindow.RNWebView,{ref:f,source:{uri:$},injectedGlobals:B,onLoadEnd:H,onMessage:Q,onError:t=>{console.error("WebView onError:",t.nativeEvent),R(!1),c(!1)},onHttpError:t=>{console.error("WebView onHttpError:",t.nativeEvent),R(!1),c(!1)},style:{width:1,height:1},javaScriptCanOpenWindowsAutomatically:!1,thirdPartyCookiesEnabled:!1,sharedCookiesEnabled:!1,incognito:!1,setSupportMultipleWindows:!1,originWhitelist:[N]})})]})}exports.a = J; exports.b = be; exports.c = Pe;
@@ -0,0 +1,17 @@
1
+ import{e as j}from"./chunk-T3Q4KTE4.js";import{b as g}from"./chunk-TKB736C5.js";import Z,{useCallback as d,useContext as I,useEffect as C,useRef as m,useState as K,useMemo as U}from"react";import w from"bs58";import{PublicKey as ee}from"@solana/web3.js";import{RNWebView as re}from"@crossmint/client-sdk-rn-window";import{WebViewParent as te}from"@crossmint/client-sdk-rn-window";import{signerInboundEvents as ne,signerOutboundEvents as oe}from"@crossmint/client-signers";import{View as se}from"react-native";import{validateApiKeyAndGetCrossmintBaseUrl as ie}from"@crossmint/common-sdk-base";import{WalletContext as ae}from"@crossmint/client-sdk-react-base";import{jsx as F,jsxs as ce}from"react/jsx-runtime";var J=Z.createContext(null);function Pe(){let E=I(J);if(E==null)throw new Error("useCrossmintRecoveryKey must be used within a CrossmintRecoveryKeyProvider");return E}var v={timeoutMs:1e4,intervalMs:5e3},N="https://crossmint-signer-frames.onrender.com";function Re({children:E,experimental_secureEndpointUrl:$=N}){let{crossmint:{apiKey:a,jwt:s,appId:b}}=j(),{getOrCreateWallet:P,clearWallet:L}=I(ae),f=m(null),p=m(null),[y,R]=K(!1),[le,W]=K(null),[u,c]=K(!1),S=m(!1),x=m(!1),h=m(null),B=U(()=>b!=null?`window.crossmintAppId = '${b}';`:"",[b]);C(()=>{f.current!=null&&p.current==null&&(p.current=new te(f,{incomingEvents:oe,outgoingEvents:ne}))},[]),C(()=>{s==null&&!S.current?(c(!1),W(null),L(),S.current=!0):s!=null&&(S.current=!1,y&&z())},[s,y]),C(()=>{x.current=u},[u]);let A=d(()=>g(this,null,function*(){if(console.log("handleAuthRequired needsAuth",x.current),!x.current)return;let t,n,o=new Promise((e,r)=>{t=e,n=r});h.current={promise:o,resolve:t,reject:n};try{console.log("Waiting for auth promise"),yield h.current.promise,console.log("Auth promise resolved")}catch(e){throw e}}),[]),T=d(t=>g(this,null,function*(){var e;let n=p.current;if(n==null||!y)throw new Error("[sendEmailWithOtp] WebViewParent not ready or handshake incomplete.");if(s==null||a==null)throw new Error("[sendEmailWithOtp] Missing authentication credentials (JWT or API Key).");if(!u)throw new Error("OTP email request is not applicable in the current state.");W(t);let o=`email:${t}`;try{let r=yield n.sendAction({event:"request:create-signer",responseEvent:"response:create-signer",data:{authData:{jwt:s,apiKey:a},data:{authId:o,chainLayer:"solana"}},options:v});if((r==null?void 0:r.status)==="success"&&r.address){c(!1);return}if((r==null?void 0:r.status)==="error")throw console.error("[sendEmailWithOtp] Failed to send OTP:",r),new Error(r.error||"Failed to initiate OTP process.");console.log("[sendEmailWithOtp] OTP process likely initiated. Waiting for verification.")}catch(r){throw console.error("[sendEmailWithOtp] Error sending create-signer request:",r),(e=h.current)==null||e.reject(r),r}}),[y,s,a,u]),V=d(t=>g(this,null,function*(){var o,e,r;let n=p.current;if(n==null||!y)throw new Error("[verifyOtp] WebViewParent not ready or handshake incomplete.");if(s==null||a==null)throw new Error("[verifyOtp] Missing authentication credentials (JWT or API Key).");if(!u)throw new Error("Not currently awaiting OTP validation.");try{let i=yield n.sendAction({event:"request:send-otp",responseEvent:"response:send-otp",data:{authData:{jwt:s,apiKey:a},data:{chainLayer:"solana",encryptedOtp:t}},options:v});if((i==null?void 0:i.status)==="success"&&i.address){console.log("[verifyOtp] OTP validation successful. Signer address:",i.address),c(!1),(o=h.current)==null||o.resolve();return}else{console.error("[verifyOtp] Failed to validate OTP:",i),c(!0);let l=i&&i.status==="error"?i.error:"Failed to validate encrypted OTP";throw(e=h.current)==null||e.reject(new Error(l)),new Error(l)}}catch(i){throw console.error("[verifyOtp] Error sending OTP validation request:",i),c(!0),(r=h.current)==null||r.reject(i),i}}),[y,s,a,u]),G=m(null),q=d(t=>{G.current=t},[]),O=d(t=>{let n=p.current;if(n==null||s==null||a==null)throw new Error("Cannot build signer: Missing prerequisites (parent, jwt, apiKey).");return{type:"solana-keypair",address:t,signer:{signMessage:o=>g(this,null,function*(){yield A();try{let e=yield n.sendAction({event:"request:sign",responseEvent:"response:sign",data:{authData:{jwt:s,apiKey:a},data:{bytes:w.encode(o),keyType:"ed25519",encoding:"base58"}},options:v});if(e==null||e.status==="error"||e.signature==null)throw console.error("Failed signMessage response:",e),new Error("Failed to sign message");return w.decode(e.signature)}catch(e){throw console.error("Error during signMessage:",e),e}}),signTransaction:o=>g(this,null,function*(){yield A();try{let e=o.message.serialize(),r=yield n.sendAction({event:"request:sign",responseEvent:"response:sign",data:{authData:{jwt:s,apiKey:a},data:{bytes:w.encode(e),keyType:"ed25519",encoding:"base58"}},options:v});if(r==null||r.status==="error"||r.signature==null)throw new Error("Failed to sign transaction: No signature returned");return o.addSignature(new ee(t),w.decode(r.signature)),o}catch(e){throw console.error("Error during signTransaction:",e),e}})}}},[s,a,A]),z=d(()=>g(this,null,function*(){let t=p.current;if(t==null||!y||s==null||a==null){console.warn("[checkSignerExists] Prerequisites not met (WebView, JWT, API Key). Status:",{isWebViewReady:y,hasJwt:s!=null,hasApiKey:a!=null}),c(!1);return}try{let n=yield t.sendAction({event:"request:get-public-key",responseEvent:"response:get-public-key",data:{authData:{jwt:s,apiKey:a},data:{chainLayer:"solana"}},options:v});if((n==null?void 0:n.status)==="success"&&n.publicKey){let o=O(n.publicKey);c(!1),yield P({type:"solana-smart-wallet",args:{adminSigner:o}})}else console.log("checkSignerExists needsAuth true",u),c(!0)}catch(n){console.error("[checkSignerExists] Error checking for signer:",n),c(!0)}}),[y,s,a,O,P]),H=d(()=>g(this,null,function*(){let t=p.current;if(t!=null)try{yield t.handshakeWithChild(),R(!0)}catch(n){console.error("[RN] handshakeWithChild error:",n),R(!1)}}),[]),Q=d(t=>{let n=p.current;if(n!=null){try{let o=JSON.parse(t.nativeEvent.data);if(o&&typeof o.type=="string"&&o.type.startsWith("console.")){let e=o.type.split(".")[1],r=(o.data||[]).map(l=>{try{return l==="[Function]"||l==="[Circular Reference]"||l==="[Unserializable Object]"?l:JSON.parse(l)}catch(_){return l}}),i=`[WebView:${e.toUpperCase()}]`;switch(e){case"log":console.log(i,...r);break;case"error":console.error(i,...r);break;case"warn":console.warn(i,...r);break;case"info":console.info(i,...r);break;default:console.log(`[WebView Unknown:${e}]`,...r)}return}}catch(o){}n.handleMessage(t)}},[]),M=d(t=>g(this,null,function*(){if(s==null||a==null)return console.warn("[createRecoveryKeySigner] Prerequisites not met (WebView ready, JWT, API Key). Cannot proceed."),c(!1),null;if(W(t),p.current==null)return console.error("[createRecoveryKeySigner] WebView parent disappeared unexpectedly."),c(!1),null;try{let o=ie(a),e=yield fetch(`${o}api/unstable/wallets/ncs/irrelevant/public-key`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${s}`,"x-api-key":a,"x-app-identifier":b},body:JSON.stringify({authId:`email:${t}`,signingAlgorithm:"EDDSA_ED25519"})});if(!e.ok){let k=yield e.text();throw new Error(`Failed to fetch public key: ${e.status} ${k}`)}let r=yield e.json();if(!r.publicKey)throw new Error("Fetched data does not contain a public key.");let i=r.publicKey,l=Uint8Array.from(atob(i),k=>k.charCodeAt(0)),_=w.encode(l),Y=O(_);return yield P({type:"solana-smart-wallet",args:{adminSigner:Y}}),console.log("createRecoveryKeySigner needsAuth true",u),c(!0),null}catch(o){return console.error("[createRecoveryKeySigner] Error during public key fetch or processing:",o),c(!0),null}}),[s,a,O,P]),D=d(()=>{if(f.current==null)return;f.current.injectJavaScript(`
2
+ try {
3
+ localStorage.clear();
4
+ sessionStorage.clear();
5
+ const cookies = document.cookie.split(';');
6
+ for (let i = 0; i < cookies.length; i++) {
7
+ const cookie = cookies[i];
8
+ const eqPos = cookie.indexOf('=');
9
+ const name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
10
+ document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/';
11
+ }
12
+ indexedDB.deleteDatabase('crossmint');
13
+ indexedDB.deleteDatabase('crossmint-signer');
14
+ } catch (error) {
15
+ console.error('Error clearing storage:', error);
16
+ }
17
+ `)},[]),X=U(()=>({experimental_needsAuth:u,experimental_createRecoveryKeySigner:M,experimental_sendEmailWithOtp:T,experimental_verifyOtp:V,onAuthRequired:q,experimental_clearStorage:D}),[u,M,T,V,q,D]);return ce(J.Provider,{value:X,children:[E,F(se,{style:{position:"absolute",width:0,height:0,overflow:"hidden"},children:F(re,{ref:f,source:{uri:$},injectedGlobals:B,onLoadEnd:H,onMessage:Q,onError:t=>{console.error("WebView onError:",t.nativeEvent),R(!1),c(!1)},onHttpError:t=>{console.error("WebView onHttpError:",t.nativeEvent),R(!1),c(!1)},style:{width:1,height:1},javaScriptCanOpenWindowsAutomatically:!1,thirdPartyCookiesEnabled:!1,sharedCookiesEnabled:!1,incognito:!1,setSupportMultipleWindows:!1,originWhitelist:[N]})})]})}export{J as a,Pe as b,Re as c};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkZ5PBXGAXcjs = require('../chunk-Z5PBXGAX.cjs');require('../chunk-VIA5NAWD.cjs');require('../chunk-BZACBNUH.cjs');require('../chunk-KWIO2XXJ.cjs');require('../chunk-O5AL6DBJ.cjs');var _react = require('react');function a(){let e=_react.useContext.call(void 0, _chunkZ5PBXGAXcjs.a);if(e==null)throw new Error("useWalletsAuth must be used within a CrossmintWalletProvider with experimental_enableRecoveryKeys enabled.");return{experimental_needsAuth:e.experimental_needsAuth,experimental_createRecoveryKeySigner:e.experimental_createRecoveryKeySigner,experimental_sendEmailWithOtp:e.experimental_sendEmailWithOtp,experimental_verifyOtp:e.experimental_verifyOtp,experimental_clearStorage:e.experimental_clearStorage,onAuthRequired:e.onAuthRequired}}exports.useWalletsAuth = a;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkGUWCOCRFcjs = require('../chunk-GUWCOCRF.cjs');require('../chunk-VIA5NAWD.cjs');require('../chunk-BZACBNUH.cjs');require('../chunk-KWIO2XXJ.cjs');require('../chunk-O5AL6DBJ.cjs');var _react = require('react');function a(){let e=_react.useContext.call(void 0, _chunkGUWCOCRFcjs.a);if(e==null)throw new Error("useWalletsAuth must be used within a CrossmintWalletProvider with experimental_enableRecoveryKeys enabled.");return{experimental_needsAuth:e.experimental_needsAuth,experimental_createRecoveryKeySigner:e.experimental_createRecoveryKeySigner,experimental_sendEmailWithOtp:e.experimental_sendEmailWithOtp,experimental_verifyOtp:e.experimental_verifyOtp,experimental_clearStorage:e.experimental_clearStorage,onAuthRequired:e.onAuthRequired}}exports.useWalletsAuth = a;
@@ -1 +1 @@
1
- import{a as t}from"../chunk-FELGMFUD.js";import"../chunk-T3Q4KTE4.js";import"../chunk-ZRIYUAKZ.js";import"../chunk-KZMAEKSM.js";import"../chunk-TKB736C5.js";import{useContext as r}from"react";function l(){let e=r(t);if(e==null)throw new Error("useWalletsAuth must be used within a CrossmintWalletProvider with experimental_enableRecoveryKeys enabled.");return{experimental_needsAuth:e.experimental_needsAuth,experimental_createRecoveryKeySigner:e.experimental_createRecoveryKeySigner,experimental_sendEmailWithOtp:e.experimental_sendEmailWithOtp,experimental_verifyOtp:e.experimental_verifyOtp,experimental_clearStorage:e.experimental_clearStorage,onAuthRequired:e.onAuthRequired}}export{l as useWalletsAuth};
1
+ import{a as t}from"../chunk-T2EP6TD5.js";import"../chunk-T3Q4KTE4.js";import"../chunk-ZRIYUAKZ.js";import"../chunk-KZMAEKSM.js";import"../chunk-TKB736C5.js";import{useContext as r}from"react";function l(){let e=r(t);if(e==null)throw new Error("useWalletsAuth must be used within a CrossmintWalletProvider with experimental_enableRecoveryKeys enabled.");return{experimental_needsAuth:e.experimental_needsAuth,experimental_createRecoveryKeySigner:e.experimental_createRecoveryKeySigner,experimental_sendEmailWithOtp:e.experimental_sendEmailWithOtp,experimental_verifyOtp:e.experimental_verifyOtp,experimental_clearStorage:e.experimental_clearStorage,onAuthRequired:e.onAuthRequired}}export{l as useWalletsAuth};
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-ZR6BLDCD.cjs');var _chunkDFJPWWN7cjs = require('./chunk-DFJPWWN7.cjs');require('./chunk-Z5PBXGAX.cjs');var _chunkVIA5NAWDcjs = require('./chunk-VIA5NAWD.cjs');require('./chunk-BZACBNUH.cjs');var _chunkKWIO2XXJcjs = require('./chunk-KWIO2XXJ.cjs');var _chunk4L2OHRE5cjs = require('./chunk-4L2OHRE5.cjs');require('./chunk-O5AL6DBJ.cjs');exports.CrossmintAuthProvider = _chunkVIA5NAWDcjs.b; exports.CrossmintProvider = _chunk4L2OHRE5cjs.a; exports.CrossmintWalletProvider = _chunkDFJPWWN7cjs.a; exports.WalletContext = _chunkKWIO2XXJcjs.a; exports.useAuth = _chunkVIA5NAWDcjs.d; exports.useCrossmint = _chunkVIA5NAWDcjs.e; exports.useCrossmintAuth = _chunkVIA5NAWDcjs.c; exports.useWallet = _chunkKWIO2XXJcjs.b;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-ZR6BLDCD.cjs');var _chunk2XCYXOKDcjs = require('./chunk-2XCYXOKD.cjs');require('./chunk-GUWCOCRF.cjs');var _chunkVIA5NAWDcjs = require('./chunk-VIA5NAWD.cjs');require('./chunk-BZACBNUH.cjs');var _chunkKWIO2XXJcjs = require('./chunk-KWIO2XXJ.cjs');var _chunk4L2OHRE5cjs = require('./chunk-4L2OHRE5.cjs');require('./chunk-O5AL6DBJ.cjs');exports.CrossmintAuthProvider = _chunkVIA5NAWDcjs.b; exports.CrossmintProvider = _chunk4L2OHRE5cjs.a; exports.CrossmintWalletProvider = _chunk2XCYXOKDcjs.a; exports.WalletContext = _chunkKWIO2XXJcjs.a; exports.useAuth = _chunkVIA5NAWDcjs.d; exports.useCrossmint = _chunkVIA5NAWDcjs.e; exports.useCrossmintAuth = _chunkVIA5NAWDcjs.c; exports.useWallet = _chunkKWIO2XXJcjs.b;
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import"./chunk-C62HRWJA.js";import{a as l}from"./chunk-HIEJCBBW.js";import"./chunk-FELGMFUD.js";import{b as t,c as e,d as r,e as a}from"./chunk-T3Q4KTE4.js";import"./chunk-ZRIYUAKZ.js";import{a as o,b as s}from"./chunk-KZMAEKSM.js";import{a as m}from"./chunk-I52CP62R.js";import"./chunk-TKB736C5.js";export{t as CrossmintAuthProvider,m as CrossmintProvider,l as CrossmintWalletProvider,o as WalletContext,r as useAuth,a as useCrossmint,e as useCrossmintAuth,s as useWallet};
1
+ import"./chunk-C62HRWJA.js";import{a as l}from"./chunk-E4U7RNSA.js";import"./chunk-T2EP6TD5.js";import{b as t,c as e,d as r,e as a}from"./chunk-T3Q4KTE4.js";import"./chunk-ZRIYUAKZ.js";import{a as o,b as s}from"./chunk-KZMAEKSM.js";import{a as m}from"./chunk-I52CP62R.js";import"./chunk-TKB736C5.js";export{t as CrossmintAuthProvider,m as CrossmintProvider,l as CrossmintWalletProvider,o as WalletContext,r as useAuth,a as useCrossmint,e as useCrossmintAuth,s as useWallet};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkZ5PBXGAXcjs = require('../chunk-Z5PBXGAX.cjs');require('../chunk-VIA5NAWD.cjs');require('../chunk-BZACBNUH.cjs');require('../chunk-KWIO2XXJ.cjs');require('../chunk-O5AL6DBJ.cjs');exports.CrossmintRecoveryKeyContext = _chunkZ5PBXGAXcjs.a; exports.CrossmintRecoveryKeyProvider = _chunkZ5PBXGAXcjs.c; exports.useCrossmintRecoveryKey = _chunkZ5PBXGAXcjs.b;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkGUWCOCRFcjs = require('../chunk-GUWCOCRF.cjs');require('../chunk-VIA5NAWD.cjs');require('../chunk-BZACBNUH.cjs');require('../chunk-KWIO2XXJ.cjs');require('../chunk-O5AL6DBJ.cjs');exports.CrossmintRecoveryKeyContext = _chunkGUWCOCRFcjs.a; exports.CrossmintRecoveryKeyProvider = _chunkGUWCOCRFcjs.c; exports.useCrossmintRecoveryKey = _chunkGUWCOCRFcjs.b;
@@ -1 +1 @@
1
- import{a,b,c}from"../chunk-FELGMFUD.js";import"../chunk-T3Q4KTE4.js";import"../chunk-ZRIYUAKZ.js";import"../chunk-KZMAEKSM.js";import"../chunk-TKB736C5.js";export{a as CrossmintRecoveryKeyContext,c as CrossmintRecoveryKeyProvider,b as useCrossmintRecoveryKey};
1
+ import{a,b,c}from"../chunk-T2EP6TD5.js";import"../chunk-T3Q4KTE4.js";import"../chunk-ZRIYUAKZ.js";import"../chunk-KZMAEKSM.js";import"../chunk-TKB736C5.js";export{a as CrossmintRecoveryKeyContext,c as CrossmintRecoveryKeyProvider,b as useCrossmintRecoveryKey};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkDFJPWWN7cjs = require('../chunk-DFJPWWN7.cjs');require('../chunk-Z5PBXGAX.cjs');require('../chunk-VIA5NAWD.cjs');require('../chunk-BZACBNUH.cjs');require('../chunk-KWIO2XXJ.cjs');require('../chunk-O5AL6DBJ.cjs');exports.CrossmintWalletProvider = _chunkDFJPWWN7cjs.a;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunk2XCYXOKDcjs = require('../chunk-2XCYXOKD.cjs');require('../chunk-GUWCOCRF.cjs');require('../chunk-VIA5NAWD.cjs');require('../chunk-BZACBNUH.cjs');require('../chunk-KWIO2XXJ.cjs');require('../chunk-O5AL6DBJ.cjs');exports.CrossmintWalletProvider = _chunk2XCYXOKDcjs.a;
@@ -1 +1 @@
1
- import{a}from"../chunk-HIEJCBBW.js";import"../chunk-FELGMFUD.js";import"../chunk-T3Q4KTE4.js";import"../chunk-ZRIYUAKZ.js";import"../chunk-KZMAEKSM.js";import"../chunk-TKB736C5.js";export{a as CrossmintWalletProvider};
1
+ import{a}from"../chunk-E4U7RNSA.js";import"../chunk-T2EP6TD5.js";import"../chunk-T3Q4KTE4.js";import"../chunk-ZRIYUAKZ.js";import"../chunk-KZMAEKSM.js";import"../chunk-TKB736C5.js";export{a as CrossmintWalletProvider};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('../chunk-ZR6BLDCD.cjs');var _chunkDFJPWWN7cjs = require('../chunk-DFJPWWN7.cjs');require('../chunk-Z5PBXGAX.cjs');var _chunkVIA5NAWDcjs = require('../chunk-VIA5NAWD.cjs');require('../chunk-BZACBNUH.cjs');require('../chunk-KWIO2XXJ.cjs');var _chunk4L2OHRE5cjs = require('../chunk-4L2OHRE5.cjs');require('../chunk-O5AL6DBJ.cjs');exports.CrossmintAuthProvider = _chunkVIA5NAWDcjs.b; exports.CrossmintProvider = _chunk4L2OHRE5cjs.a; exports.CrossmintWalletProvider = _chunkDFJPWWN7cjs.a;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('../chunk-ZR6BLDCD.cjs');var _chunk2XCYXOKDcjs = require('../chunk-2XCYXOKD.cjs');require('../chunk-GUWCOCRF.cjs');var _chunkVIA5NAWDcjs = require('../chunk-VIA5NAWD.cjs');require('../chunk-BZACBNUH.cjs');require('../chunk-KWIO2XXJ.cjs');var _chunk4L2OHRE5cjs = require('../chunk-4L2OHRE5.cjs');require('../chunk-O5AL6DBJ.cjs');exports.CrossmintAuthProvider = _chunkVIA5NAWDcjs.b; exports.CrossmintProvider = _chunk4L2OHRE5cjs.a; exports.CrossmintWalletProvider = _chunk2XCYXOKDcjs.a;
@@ -1 +1 @@
1
- import"../chunk-C62HRWJA.js";import{a as c}from"../chunk-HIEJCBBW.js";import"../chunk-FELGMFUD.js";import{b as a}from"../chunk-T3Q4KTE4.js";import"../chunk-ZRIYUAKZ.js";import"../chunk-KZMAEKSM.js";import{a as b}from"../chunk-I52CP62R.js";import"../chunk-TKB736C5.js";export{a as CrossmintAuthProvider,b as CrossmintProvider,c as CrossmintWalletProvider};
1
+ import"../chunk-C62HRWJA.js";import{a as c}from"../chunk-E4U7RNSA.js";import"../chunk-T2EP6TD5.js";import{b as a}from"../chunk-T3Q4KTE4.js";import"../chunk-ZRIYUAKZ.js";import"../chunk-KZMAEKSM.js";import{a as b}from"../chunk-I52CP62R.js";import"../chunk-TKB736C5.js";export{a as CrossmintAuthProvider,b as CrossmintProvider,c as CrossmintWalletProvider};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crossmint/client-sdk-react-native-ui",
3
- "version": "0.4.6",
3
+ "version": "0.4.8",
4
4
  "repository": "https://github.com/Crossmint/crossmint-sdk",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Paella Labs Inc",
@@ -24,14 +24,14 @@
24
24
  "expo-secure-store": "14.0.1",
25
25
  "expo-web-browser": "~14.0.2",
26
26
  "react-native-webview": "13.12.5",
27
- "@crossmint/client-sdk-auth": "1.2.5",
28
- "@crossmint/client-sdk-base": "1.4.19",
29
- "@crossmint/client-sdk-react-base": "0.2.11",
30
- "@crossmint/client-signers": "0.0.8",
27
+ "@crossmint/client-sdk-auth": "1.2.6",
28
+ "@crossmint/client-sdk-base": "1.4.20",
29
+ "@crossmint/client-sdk-react-base": "0.2.12",
31
30
  "@crossmint/client-sdk-rn-window": "0.2.2",
32
- "@crossmint/common-sdk-auth": "1.0.28",
33
- "@crossmint/common-sdk-base": "0.4.0",
34
- "@crossmint/wallets-sdk": "0.7.5"
31
+ "@crossmint/client-signers": "0.0.8",
32
+ "@crossmint/common-sdk-auth": "1.0.29",
33
+ "@crossmint/common-sdk-base": "0.4.1",
34
+ "@crossmint/wallets-sdk": "0.7.6"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@types/react": "19.0.12"
@@ -1,17 +0,0 @@
1
- import{e as D}from"./chunk-T3Q4KTE4.js";import{b as y}from"./chunk-TKB736C5.js";import Y,{useCallback as d,useContext as F,useEffect as _,useRef as f,useState as A,useMemo as j}from"react";import w from"bs58";import{PublicKey as Z}from"@solana/web3.js";import{RNWebView as ee}from"@crossmint/client-sdk-rn-window";import{WebViewParent as re}from"@crossmint/client-sdk-rn-window";import{signerInboundEvents as te,signerOutboundEvents as ne}from"@crossmint/client-signers";import{View as oe}from"react-native";import{validateApiKeyAndGetCrossmintBaseUrl as se}from"@crossmint/common-sdk-base";import{WalletContext as ie}from"@crossmint/client-sdk-react-base";import{jsx as N,jsxs as ae}from"react/jsx-runtime";var I=Y.createContext(null);function be(){let E=F(I);if(E==null)throw new Error("useCrossmintRecoveryKey must be used within a CrossmintRecoveryKeyProvider");return E}var v={timeoutMs:1e4,intervalMs:5e3},U="https://crossmint-signer-frames.onrender.com";function Pe({children:E,experimental_secureEndpointUrl:J=U}){let{crossmint:{apiKey:a,jwt:s,appId:b}}=D(),{getOrCreateWallet:P,clearWallet:$}=F(ie),m=f(null),p=f(null),[l,R]=A(!1),[ce,W]=A(null),[g,c]=A(!1),S=f(!1),h=f(null),L=j(()=>b!=null?`window.crossmintAppId = '${b}';`:"",[b]);_(()=>{m.current!=null&&p.current==null&&(p.current=new re(m,{incomingEvents:ne,outgoingEvents:te}))},[]),_(()=>{s==null&&!S.current?(c(!1),W(null),$(),S.current=!0):s!=null&&(S.current=!1,l&&G())},[s,l]);let x=d(()=>y(this,null,function*(){if(!g)return;let t,n,o=new Promise((e,r)=>{t=e,n=r});h.current={promise:o,resolve:t,reject:n};try{console.log("Waiting for auth promise"),yield h.current.promise,console.log("Auth promise resolved")}catch(e){throw e}}),[g]),C=d(t=>y(this,null,function*(){var e;let n=p.current;if(n==null||!l)throw new Error("[sendEmailWithOtp] WebViewParent not ready or handshake incomplete.");if(s==null||a==null)throw new Error("[sendEmailWithOtp] Missing authentication credentials (JWT or API Key).");if(!g)throw new Error("OTP email request is not applicable in the current state.");W(t);let o=`email:${t}`;try{let r=yield n.sendAction({event:"request:create-signer",responseEvent:"response:create-signer",data:{authData:{jwt:s,apiKey:a},data:{authId:o,chainLayer:"solana"}},options:v});if((r==null?void 0:r.status)==="success"&&r.address){c(!1);return}if((r==null?void 0:r.status)==="error")throw console.error("[sendEmailWithOtp] Failed to send OTP:",r),new Error(r.error||"Failed to initiate OTP process.");console.log("[sendEmailWithOtp] OTP process likely initiated. Waiting for verification.")}catch(r){throw console.error("[sendEmailWithOtp] Error sending create-signer request:",r),(e=h.current)==null||e.reject(r),r}}),[l,s,a,g]),K=d(t=>y(this,null,function*(){var o,e,r;let n=p.current;if(n==null||!l)throw new Error("[verifyOtp] WebViewParent not ready or handshake incomplete.");if(s==null||a==null)throw new Error("[verifyOtp] Missing authentication credentials (JWT or API Key).");if(!g)throw new Error("Not currently awaiting OTP validation.");try{let i=yield n.sendAction({event:"request:send-otp",responseEvent:"response:send-otp",data:{authData:{jwt:s,apiKey:a},data:{chainLayer:"solana",encryptedOtp:t}},options:v});if((i==null?void 0:i.status)==="success"&&i.address){console.log("[verifyOtp] OTP validation successful. Signer address:",i.address),c(!1),(o=h.current)==null||o.resolve();return}else{console.error("[verifyOtp] Failed to validate OTP:",i),c(!0);let u=i&&i.status==="error"?i.error:"Failed to validate encrypted OTP";throw(e=h.current)==null||e.reject(new Error(u)),new Error(u)}}catch(i){throw console.error("[verifyOtp] Error sending OTP validation request:",i),c(!0),(r=h.current)==null||r.reject(i),i}}),[l,s,a,g]),B=f(null),T=d(t=>{B.current=t},[]),O=d(t=>{let n=p.current;if(n==null||s==null||a==null)throw new Error("Cannot build signer: Missing prerequisites (parent, jwt, apiKey).");return{type:"solana-keypair",address:t,signer:{signMessage:o=>y(this,null,function*(){yield x();try{let e=yield n.sendAction({event:"request:sign",responseEvent:"response:sign",data:{authData:{jwt:s,apiKey:a},data:{bytes:w.encode(o),keyType:"ed25519",encoding:"base58"}},options:v});if(e==null||e.status==="error"||e.signature==null)throw console.error("Failed signMessage response:",e),new Error("Failed to sign message");return w.decode(e.signature)}catch(e){throw console.error("Error during signMessage:",e),e}}),signTransaction:o=>y(this,null,function*(){yield x();try{let e=o.message.serialize(),r=yield n.sendAction({event:"request:sign",responseEvent:"response:sign",data:{authData:{jwt:s,apiKey:a},data:{bytes:w.encode(e),keyType:"ed25519",encoding:"base58"}},options:v});if(r==null||r.status==="error"||r.signature==null)throw new Error("Failed to sign transaction: No signature returned");return o.addSignature(new Z(t),w.decode(r.signature)),o}catch(e){throw console.error("Error during signTransaction:",e),e}})}}},[s,a,x]),G=d(()=>y(this,null,function*(){let t=p.current;if(t==null||!l||s==null||a==null){console.warn("[checkSignerExists] Prerequisites not met (WebView, JWT, API Key). Status:",{isWebViewReady:l,hasJwt:s!=null,hasApiKey:a!=null}),c(!1);return}try{let n=yield t.sendAction({event:"request:get-public-key",responseEvent:"response:get-public-key",data:{authData:{jwt:s,apiKey:a},data:{chainLayer:"solana"}},options:v});if((n==null?void 0:n.status)==="success"&&n.publicKey){let o=O(n.publicKey);c(!1),yield P({type:"solana-smart-wallet",args:{adminSigner:o}})}else c(!0)}catch(n){console.error("[checkSignerExists] Error checking for signer:",n),c(!0)}}),[l,s,a,O,P]),z=d(()=>y(this,null,function*(){let t=p.current;if(t!=null)try{yield t.handshakeWithChild(),R(!0)}catch(n){console.error("[RN] handshakeWithChild error:",n),R(!1)}}),[]),H=d(t=>{let n=p.current;if(n!=null){try{let o=JSON.parse(t.nativeEvent.data);if(o&&typeof o.type=="string"&&o.type.startsWith("console.")){let e=o.type.split(".")[1],r=(o.data||[]).map(u=>{try{return u==="[Function]"||u==="[Circular Reference]"||u==="[Unserializable Object]"?u:JSON.parse(u)}catch(M){return u}}),i=`[WebView:${e.toUpperCase()}]`;switch(e){case"log":console.log(i,...r);break;case"error":console.error(i,...r);break;case"warn":console.warn(i,...r);break;case"info":console.info(i,...r);break;default:console.log(`[WebView Unknown:${e}]`,...r)}return}}catch(o){}n.handleMessage(t)}},[]),V=d(t=>y(this,null,function*(){if(!l||s==null||a==null)return console.warn("[createRecoveryKeySigner] Prerequisites not met (WebView ready, JWT, API Key). Cannot proceed."),c(!1),null;if(W(t),p.current==null)return console.error("[createRecoveryKeySigner] WebView parent disappeared unexpectedly."),c(!1),null;try{let o=se(a),e=yield fetch(`${o}api/unstable/wallets/ncs/irrelevant/public-key`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${s}`,"x-api-key":a,"x-app-identifier":b},body:JSON.stringify({authId:`email:${t}`,signingAlgorithm:"EDDSA_ED25519"})});if(!e.ok){let k=yield e.text();throw new Error(`Failed to fetch public key: ${e.status} ${k}`)}let r=yield e.json();if(!r.publicKey)throw new Error("Fetched data does not contain a public key.");let i=r.publicKey,u=Uint8Array.from(atob(i),k=>k.charCodeAt(0)),M=w.encode(u),X=O(M);return yield P({type:"solana-smart-wallet",args:{adminSigner:X}}),c(!0),null}catch(o){return console.error("[createRecoveryKeySigner] Error during public key fetch or processing:",o),c(!0),null}}),[l,s,a,O,P]),q=d(()=>{if(m.current==null)return;m.current.injectJavaScript(`
2
- try {
3
- localStorage.clear();
4
- sessionStorage.clear();
5
- const cookies = document.cookie.split(';');
6
- for (let i = 0; i < cookies.length; i++) {
7
- const cookie = cookies[i];
8
- const eqPos = cookie.indexOf('=');
9
- const name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
10
- document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/';
11
- }
12
- indexedDB.deleteDatabase('crossmint');
13
- indexedDB.deleteDatabase('crossmint-signer');
14
- } catch (error) {
15
- console.error('Error clearing storage:', error);
16
- }
17
- `)},[]),Q=j(()=>({experimental_needsAuth:g,experimental_createRecoveryKeySigner:V,experimental_sendEmailWithOtp:C,experimental_verifyOtp:K,onAuthRequired:T,experimental_clearStorage:q}),[g,V,C,K,T,q]);return ae(I.Provider,{value:Q,children:[E,N(oe,{style:{position:"absolute",width:0,height:0,overflow:"hidden"},children:N(ee,{ref:m,source:{uri:J},injectedGlobals:L,onLoadEnd:z,onMessage:H,onError:t=>{console.error("WebView onError:",t.nativeEvent),R(!1),c(!1)},onHttpError:t=>{console.error("WebView onHttpError:",t.nativeEvent),R(!1),c(!1)},style:{width:1,height:1},javaScriptCanOpenWindowsAutomatically:!1,thirdPartyCookiesEnabled:!1,sharedCookiesEnabled:!1,incognito:!1,setSupportMultipleWindows:!1,originWhitelist:[U]})})]})}export{I as a,be as b,Pe as c};
@@ -1,17 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var _chunkVIA5NAWDcjs = require('./chunk-VIA5NAWD.cjs');var _chunkO5AL6DBJcjs = require('./chunk-O5AL6DBJ.cjs');var _react = require('react'); var _react2 = _interopRequireDefault(_react);var _bs58 = require('bs58'); var _bs582 = _interopRequireDefault(_bs58);var _web3js = require('@solana/web3.js');var _clientsdkrnwindow = require('@crossmint/client-sdk-rn-window');var _clientsigners = require('@crossmint/client-signers');var _reactnative = require('react-native');var _commonsdkbase = require('@crossmint/common-sdk-base');var _clientsdkreactbase = require('@crossmint/client-sdk-react-base');var _jsxruntime = require('react/jsx-runtime');var I=_react2.default.createContext(null);function Ee(){let E=_react.useContext.call(void 0, I);if(E==null)throw new Error("useCrossmintRecoveryKey must be used within a CrossmintRecoveryKeyProvider");return E}var v={timeoutMs:1e4,intervalMs:5e3},U="https://crossmint-signer-frames.onrender.com";function be({children:E,experimental_secureEndpointUrl:J=U}){let{crossmint:{apiKey:a,jwt:s,appId:b}}=_chunkVIA5NAWDcjs.e.call(void 0, ),{getOrCreateWallet:P,clearWallet:$}=_react.useContext.call(void 0, _clientsdkreactbase.WalletContext),m=_react.useRef.call(void 0, null),p=_react.useRef.call(void 0, null),[l,R]=_react.useState.call(void 0, !1),[ce,W]=_react.useState.call(void 0, null),[g,c]=_react.useState.call(void 0, !1),S=_react.useRef.call(void 0, !1),h=_react.useRef.call(void 0, null),L=_react.useMemo.call(void 0, ()=>b!=null?`window.crossmintAppId = '${b}';`:"",[b]);_react.useEffect.call(void 0, ()=>{m.current!=null&&p.current==null&&(p.current=new (0, _clientsdkrnwindow.WebViewParent)(m,{incomingEvents:_clientsigners.signerOutboundEvents,outgoingEvents:_clientsigners.signerInboundEvents}))},[]),_react.useEffect.call(void 0, ()=>{s==null&&!S.current?(c(!1),W(null),$(),S.current=!0):s!=null&&(S.current=!1,l&&G())},[s,l]);let x=_react.useCallback.call(void 0, ()=>_chunkO5AL6DBJcjs.b.call(void 0, this,null,function*(){if(!g)return;let t,n,o=new Promise((e,r)=>{t=e,n=r});h.current={promise:o,resolve:t,reject:n};try{console.log("Waiting for auth promise"),yield h.current.promise,console.log("Auth promise resolved")}catch(e){throw e}}),[g]),C=_react.useCallback.call(void 0, t=>_chunkO5AL6DBJcjs.b.call(void 0, this,null,function*(){var e;let n=p.current;if(n==null||!l)throw new Error("[sendEmailWithOtp] WebViewParent not ready or handshake incomplete.");if(s==null||a==null)throw new Error("[sendEmailWithOtp] Missing authentication credentials (JWT or API Key).");if(!g)throw new Error("OTP email request is not applicable in the current state.");W(t);let o=`email:${t}`;try{let r=yield n.sendAction({event:"request:create-signer",responseEvent:"response:create-signer",data:{authData:{jwt:s,apiKey:a},data:{authId:o,chainLayer:"solana"}},options:v});if((r==null?void 0:r.status)==="success"&&r.address){c(!1);return}if((r==null?void 0:r.status)==="error")throw console.error("[sendEmailWithOtp] Failed to send OTP:",r),new Error(r.error||"Failed to initiate OTP process.");console.log("[sendEmailWithOtp] OTP process likely initiated. Waiting for verification.")}catch(r){throw console.error("[sendEmailWithOtp] Error sending create-signer request:",r),(e=h.current)==null||e.reject(r),r}}),[l,s,a,g]),K=_react.useCallback.call(void 0, t=>_chunkO5AL6DBJcjs.b.call(void 0, this,null,function*(){var o,e,r;let n=p.current;if(n==null||!l)throw new Error("[verifyOtp] WebViewParent not ready or handshake incomplete.");if(s==null||a==null)throw new Error("[verifyOtp] Missing authentication credentials (JWT or API Key).");if(!g)throw new Error("Not currently awaiting OTP validation.");try{let i=yield n.sendAction({event:"request:send-otp",responseEvent:"response:send-otp",data:{authData:{jwt:s,apiKey:a},data:{chainLayer:"solana",encryptedOtp:t}},options:v});if((i==null?void 0:i.status)==="success"&&i.address){console.log("[verifyOtp] OTP validation successful. Signer address:",i.address),c(!1),(o=h.current)==null||o.resolve();return}else{console.error("[verifyOtp] Failed to validate OTP:",i),c(!0);let u=i&&i.status==="error"?i.error:"Failed to validate encrypted OTP";throw(e=h.current)==null||e.reject(new Error(u)),new Error(u)}}catch(i){throw console.error("[verifyOtp] Error sending OTP validation request:",i),c(!0),(r=h.current)==null||r.reject(i),i}}),[l,s,a,g]),B=_react.useRef.call(void 0, null),T=_react.useCallback.call(void 0, t=>{B.current=t},[]),O=_react.useCallback.call(void 0, t=>{let n=p.current;if(n==null||s==null||a==null)throw new Error("Cannot build signer: Missing prerequisites (parent, jwt, apiKey).");return{type:"solana-keypair",address:t,signer:{signMessage:o=>_chunkO5AL6DBJcjs.b.call(void 0, this,null,function*(){yield x();try{let e=yield n.sendAction({event:"request:sign",responseEvent:"response:sign",data:{authData:{jwt:s,apiKey:a},data:{bytes:_bs582.default.encode(o),keyType:"ed25519",encoding:"base58"}},options:v});if(e==null||e.status==="error"||e.signature==null)throw console.error("Failed signMessage response:",e),new Error("Failed to sign message");return _bs582.default.decode(e.signature)}catch(e){throw console.error("Error during signMessage:",e),e}}),signTransaction:o=>_chunkO5AL6DBJcjs.b.call(void 0, this,null,function*(){yield x();try{let e=o.message.serialize(),r=yield n.sendAction({event:"request:sign",responseEvent:"response:sign",data:{authData:{jwt:s,apiKey:a},data:{bytes:_bs582.default.encode(e),keyType:"ed25519",encoding:"base58"}},options:v});if(r==null||r.status==="error"||r.signature==null)throw new Error("Failed to sign transaction: No signature returned");return o.addSignature(new (0, _web3js.PublicKey)(t),_bs582.default.decode(r.signature)),o}catch(e){throw console.error("Error during signTransaction:",e),e}})}}},[s,a,x]),G=_react.useCallback.call(void 0, ()=>_chunkO5AL6DBJcjs.b.call(void 0, this,null,function*(){let t=p.current;if(t==null||!l||s==null||a==null){console.warn("[checkSignerExists] Prerequisites not met (WebView, JWT, API Key). Status:",{isWebViewReady:l,hasJwt:s!=null,hasApiKey:a!=null}),c(!1);return}try{let n=yield t.sendAction({event:"request:get-public-key",responseEvent:"response:get-public-key",data:{authData:{jwt:s,apiKey:a},data:{chainLayer:"solana"}},options:v});if((n==null?void 0:n.status)==="success"&&n.publicKey){let o=O(n.publicKey);c(!1),yield P({type:"solana-smart-wallet",args:{adminSigner:o}})}else c(!0)}catch(n){console.error("[checkSignerExists] Error checking for signer:",n),c(!0)}}),[l,s,a,O,P]),z=_react.useCallback.call(void 0, ()=>_chunkO5AL6DBJcjs.b.call(void 0, this,null,function*(){let t=p.current;if(t!=null)try{yield t.handshakeWithChild(),R(!0)}catch(n){console.error("[RN] handshakeWithChild error:",n),R(!1)}}),[]),H=_react.useCallback.call(void 0, t=>{let n=p.current;if(n!=null){try{let o=JSON.parse(t.nativeEvent.data);if(o&&typeof o.type=="string"&&o.type.startsWith("console.")){let e=o.type.split(".")[1],r=(o.data||[]).map(u=>{try{return u==="[Function]"||u==="[Circular Reference]"||u==="[Unserializable Object]"?u:JSON.parse(u)}catch(M){return u}}),i=`[WebView:${e.toUpperCase()}]`;switch(e){case"log":console.log(i,...r);break;case"error":console.error(i,...r);break;case"warn":console.warn(i,...r);break;case"info":console.info(i,...r);break;default:console.log(`[WebView Unknown:${e}]`,...r)}return}}catch(o){}n.handleMessage(t)}},[]),V=_react.useCallback.call(void 0, t=>_chunkO5AL6DBJcjs.b.call(void 0, this,null,function*(){if(!l||s==null||a==null)return console.warn("[createRecoveryKeySigner] Prerequisites not met (WebView ready, JWT, API Key). Cannot proceed."),c(!1),null;if(W(t),p.current==null)return console.error("[createRecoveryKeySigner] WebView parent disappeared unexpectedly."),c(!1),null;try{let o=_commonsdkbase.validateApiKeyAndGetCrossmintBaseUrl.call(void 0, a),e=yield fetch(`${o}api/unstable/wallets/ncs/irrelevant/public-key`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${s}`,"x-api-key":a,"x-app-identifier":b},body:JSON.stringify({authId:`email:${t}`,signingAlgorithm:"EDDSA_ED25519"})});if(!e.ok){let k=yield e.text();throw new Error(`Failed to fetch public key: ${e.status} ${k}`)}let r=yield e.json();if(!r.publicKey)throw new Error("Fetched data does not contain a public key.");let i=r.publicKey,u=Uint8Array.from(atob(i),k=>k.charCodeAt(0)),M=_bs582.default.encode(u),X=O(M);return yield P({type:"solana-smart-wallet",args:{adminSigner:X}}),c(!0),null}catch(o){return console.error("[createRecoveryKeySigner] Error during public key fetch or processing:",o),c(!0),null}}),[l,s,a,O,P]),q=_react.useCallback.call(void 0, ()=>{if(m.current==null)return;m.current.injectJavaScript(`
2
- try {
3
- localStorage.clear();
4
- sessionStorage.clear();
5
- const cookies = document.cookie.split(';');
6
- for (let i = 0; i < cookies.length; i++) {
7
- const cookie = cookies[i];
8
- const eqPos = cookie.indexOf('=');
9
- const name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
10
- document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/';
11
- }
12
- indexedDB.deleteDatabase('crossmint');
13
- indexedDB.deleteDatabase('crossmint-signer');
14
- } catch (error) {
15
- console.error('Error clearing storage:', error);
16
- }
17
- `)},[]),Q=_react.useMemo.call(void 0, ()=>({experimental_needsAuth:g,experimental_createRecoveryKeySigner:V,experimental_sendEmailWithOtp:C,experimental_verifyOtp:K,onAuthRequired:T,experimental_clearStorage:q}),[g,V,C,K,T,q]);return _jsxruntime.jsxs.call(void 0, I.Provider,{value:Q,children:[E,_jsxruntime.jsx.call(void 0, _reactnative.View,{style:{position:"absolute",width:0,height:0,overflow:"hidden"},children:_jsxruntime.jsx.call(void 0, _clientsdkrnwindow.RNWebView,{ref:m,source:{uri:J},injectedGlobals:L,onLoadEnd:z,onMessage:H,onError:t=>{console.error("WebView onError:",t.nativeEvent),R(!1),c(!1)},onHttpError:t=>{console.error("WebView onHttpError:",t.nativeEvent),R(!1),c(!1)},style:{width:1,height:1},javaScriptCanOpenWindowsAutomatically:!1,thirdPartyCookiesEnabled:!1,sharedCookiesEnabled:!1,incognito:!1,setSupportMultipleWindows:!1,originWhitelist:[U]})})]})}exports.a = I; exports.b = Ee; exports.c = be;