@tuwaio/nova-connect 0.7.4 → 0.8.0

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/index.cjs CHANGED
@@ -1 +1 @@
1
- 'use strict';var chunkQ4FCNEIJ_cjs=require('./chunk-Q4FCNEIJ.cjs'),chunkZVUCC2QP_cjs=require('./chunk-ZVUCC2QP.cjs'),chunkR5V3K52O_cjs=require('./chunk-R5V3K52O.cjs'),chunkEGATOYHY_cjs=require('./chunk-EGATOYHY.cjs');require('./chunk-YJRNNNR6.cjs');var novaCore=require('@tuwaio/nova-core'),react=require('react'),reactToastify=require('react-toastify'),jsxRuntime=require('react/jsx-runtime'),siwxReact=require('@tuwaio/siwx-react');var Be=({title:e,rawError:r,onCopyComplete:i,errorType:u,isConnected:n,...m})=>jsxRuntime.jsx(chunkQ4FCNEIJ_cjs.H,{title:e,rawError:r,onCopyComplete:i,customization:m.customization}),We=e=>{let r=chunkZVUCC2QP_cjs.h();return jsxRuntime.jsx(reactToastify.ToastContainer,{...e,role:"alert","aria-live":"assertive","aria-label":r.somethingWentWrong})},ze=(e,r)=>{e(r.title,r.rawError,r.errorKey);},He=e=>{e();},Ie=(e,r)=>{if(e&&process.env.NODE_ENV==="development"){let i=typeof r=="string"?r:r.message;console.log("Error copied to clipboard:",i.substring(0,100));}},Ae=e=>e,Fe=e=>e;function Z({containerId:e="nova-connect-errors",position:r="top-center",autoClose:i=7e3,draggable:u=false,customization:n}){let m=chunkZVUCC2QP_cjs.h(),B=chunkEGATOYHY_cjs.d(a=>a.switchNetworkError),A=chunkEGATOYHY_cjs.d(a=>a.activeConnection),W=chunkEGATOYHY_cjs.d(a=>a.connectionError),{ToastError:z=Be,Container:F=We}=n?.components??{},{showError:H=ze,dismissError:L=He,onCopyComplete:p=Ie}=n?.handlers??{},{errorTitle:V=Ae,errorHash:o=Fe}=n??{},y=react.useRef(new Set),v=react.useRef(null),M=!!W,f=!!B,c=!!A?.isConnected,w=M||f,b=W||B||null,l=M?"wallet":f?"switch":null,s={hasWalletError:M,hasSwitchError:f,isConnected:c,hasAnyError:w,primaryError:b,errorType:l},O=m.somethingWentWrong;switch(s.errorType){case "wallet":O=m.connectionError;break;case "switch":O=m.errorWhenChainSwitching;break}let S=V(O,{errorType:s.errorType}),t=s.primaryError?`${s.errorType}-${s.primaryError.message.substring(0,50)}`:null,d=o(t,{primaryError:s.primaryError,errorType:s.errorType}),C=react.useCallback(()=>{L(()=>{v.current&&(reactToastify.toast.dismiss(v.current),v.current=null),reactToastify.toast.dismiss({containerId:e});});},[e,L]),x=react.useCallback((a,P)=>{p(a,P,l);},[p,l]),R=react.useCallback((a,P,h)=>{if(C(),!y.current.has(h))try{let k={containerId:e,toastId:h,onClose:()=>{y.current.delete(h),v.current=null;}},U=n?.toastOptions?.error?.({title:a,rawError:P,errorType:s.errorType,isConnected:s.isConnected}),K={...k,...U};reactToastify.toast.error(jsxRuntime.jsx(z,{title:a,rawError:P,errorType:s.errorType,isConnected:s.isConnected,onCopyComplete:_=>x(_,P),customization:n?.toastErrorCustomization}),K),y.current.add(h),v.current=h;}catch(k){console.error("Failed to show error toast:",k);}},[C,e,n?.toastOptions?.error,n?.toastErrorCustomization,z,s.errorType,s.isConnected,x]),N=react.useCallback((a,P,h)=>{H(R,{title:a,rawError:P,errorKey:h,errorType:l});},[R,H,l]);react.useEffect(()=>{if(c&&!w){C(),y.current.clear();return}if(w&&b&&d){if(c&&l!=="switch")return;N(S,b,d);}},[w,c,b,l,S,d,N,C]),react.useEffect(()=>()=>{C(),y.current.clear();},[C]);let I=n?.classNames?.container?n.classNames.container({hasErrors:s.hasAnyError,errorType:s.errorType}):"novacon:p-0 novacon:bg-transparent",D=react.useMemo(()=>{let a=n?.toastCloseButton;return a?({closeToast:P})=>jsxRuntime.jsx(novaCore.ToastCloseButton,{closeToast:P,...a}):novaCore.ToastCloseButton},[n?.toastCloseButton]),$={...{containerId:e,position:r,closeOnClick:false,icon:false,closeButton:D,autoClose:i,hideProgressBar:false,newestOnTop:false,pauseOnFocusLoss:false,draggable:u,pauseOnHover:true,theme:"light",transition:reactToastify.Bounce},...n?.containerProps,className:I};return jsxRuntime.jsx(F,{...$})}Z.displayName="ErrorsProvider";function ee({labels:e,children:r}){let i=react.useMemo(()=>e,[e]);if(process.env.NODE_ENV==="development"){(!e||typeof e!="object")&&console.warn("NovaConnectLabelsProvider: labels prop should be an object");let n=["connectWallet","disconnect","connecting","connected","error","success"].filter(m=>!(m in e));n.length>0&&console.warn(`NovaConnectLabelsProvider: Missing required labels: ${n.join(", ")}`);}return jsxRuntime.jsx(chunkZVUCC2QP_cjs.g.Provider,{value:i,children:r})}ee.displayName="NovaConnectLabelsProvider";function be(e){let{enabled:r=true,getNonce:i,verifier:u,destroyer:n,domain:m,uri:B,statement:A,expirationTime:W,expirationSeconds:z,notBefore:F,requestId:H,resources:L,onSuccess:p,onError:V}=e,o=chunkEGATOYHY_cjs.d(t=>t.activeConnection),y=chunkEGATOYHY_cjs.d(t=>t.disconnect),v=chunkEGATOYHY_cjs.d(t=>t.isAutoConnectFinished),{signIn:M}=siwxReact.useSiwx(),f=siwxReact.useSiwxSessionStore(t=>t.session),c=siwxReact.useSiwxSessionStore(t=>t.status),w=siwxReact.useSiwxSessionStore(t=>t.reset),b=react.useRef(null),l=react.useRef(false),s=react.useEffectEvent(()=>{w(),n&&n().catch(t=>{console.warn("[NovaSiwxWatcher] Failed to execute session destroyer:",t);});});react.useEffect(()=>{if(!o?.isConnected||!o?.address){if(b.current=null,v===false)return;(c==="authenticated"||f)&&s();}},[o?.isConnected,o?.address,v,c,f]);let O=react.useEffectEvent((t,d)=>o?.connectorType===t&&o.address===d),S=react.useEffectEvent(()=>{if(!(!o?.isConnected||!o.address||!o.signMessage))try{let t={address:String(o.address),chainId:o.chainId,signMessage:o.signMessage,isConnected:o.isConnected},d=siwxReact.getSatelliteSiwxFields(t,{domain:m,uri:B,statement:A,expirationTime:W,expirationSeconds:z,notBefore:F,requestId:H,resources:L});if(c==="authenticated"&&f?.address===d.address||b.current===d.address)return;if(b.current=d.address,!u){console.warn("[NovaSiwxWatcher] Verifier not provided, skipping SIWX auto-authentication.");return}let{connectorType:C,address:x}=o,R=N=>{let I=N instanceof Error?N.message:String(N);console.warn("[NovaSiwxWatcher] SIWX authentication rejected or failed:",I),C&&O(C,x)&&y(C),w(),V?.(I);};l.current=!0,M({signer:o.signMessage,verifier:u,getNonce:i,fields:d,onSuccess:p,onError:R}).catch(R).finally(()=>{l.current=!1;});}catch(t){console.warn("[NovaSiwxWatcher] Failed to build SIWX fields:",t);}});return react.useEffect(()=>{!r||!o?.isConnected||!o?.address||!o?.chainId||o.signMessage&&(l.current||c==="building"||c==="signing"||c==="verifying"||S());},[o?.isConnected,o?.address,o?.chainId,o?.signMessage,o?.connectorType,r,c,f?.address]),null}var Ge=({labels:e,children:r})=>jsxRuntime.jsx(ee,{labels:e,children:r}),Xe=({customization:e})=>jsxRuntime.jsx(Z,{customization:e}),$e=(e,r)=>novaCore.deepMerge(e,r||{}),Ue=e=>e,_e=e=>e,je=(e,r,i)=>e;function Je({labels:e,children:r,appChains:i,solanaRPCUrls:u,transactionPool:n,pulsarAdapter:m,withImpersonated:B,withBalance:A,withChain:W,popularConnectors:z,customConnectorGroups:F,legal:H,siwx:L,customization:p,pagination:V}){let o=chunkEGATOYHY_cjs.d(J=>J.activeConnection),y=chunkEGATOYHY_cjs.d(J=>J.connectionError),{LabelsProvider:v=Ge,ErrorsProvider:M=Xe}=p?.components??{},{merge:f=$e,transform:c=Ue}=p?.labels??{},{transform:w=_e}=p?.contextValue??{},{providerTree:b=je}=p?.rendering??{},l=react.useMemo(()=>f(chunkR5V3K52O_cjs.a,e||{}),[e,f]),[s,O]=react.useState(false),[S,t]=react.useState(false),[d,C]=react.useState(false),[x,R]=react.useState(false),[N,I]=react.useState("idle"),[D,se]=react.useState("connectors"),[$,a]=react.useState(void 0),[P,h]=react.useState(void 0),[k,U]=react.useState(""),[K,_]=react.useState(false),[j,Ne]=react.useState("main"),we={appChains:i,solanaRPCUrls:u,withImpersonated:B,popularConnectors:z,customConnectorGroups:F,withBalance:A,withChain:W,isConnectModalOpen:s,setIsConnectModalOpen:O,isConnectedModalOpen:S,setIsConnectedModalOpen:t,isChainsListOpen:d,setIsChainsListOpen:C,isChainsListOpenMobile:x,setIsChainsListOpenMobile:R,connectedButtonStatus:N,setConnectedButtonStatus:I,connectedModalContentType:j,setConnectedModalContentType:Ne,connectModalContentType:D,setConnectModalContentType:se,selectedAdapter:$,setSelectedAdapter:a,activeConnector:P,setActiveConnector:h,impersonatedAddress:k,setImpersonatedAddress:U,isConnected:K,setIsConnected:_,legal:H},G=react.useMemo(()=>({isConnected:K,activeConnection:o,connectionError:y,modalStates:{isConnectModalOpen:s,isConnectedModalOpen:S,isChainsListOpen:d,isChainsListOpenMobile:x},contentTypes:{connectModal:D,connectedModal:j},statuses:{connectedButton:N}}),[K,o,y,s,S,d,x,D,j,N]),ae=react.useMemo(()=>c(l,G),[l,c,G]),he=w(we,G),ie=jsxRuntime.jsx(M,{customization:p?.errors}),Se=jsxRuntime.jsx(v,{labels:ae,children:r}),ce=i||u?jsxRuntime.jsx(chunkQ4FCNEIJ_cjs.G,{solanaRPCUrls:u,appChains:i,customization:p?.modals?.connectModal}):null,le=i||u?jsxRuntime.jsx(chunkQ4FCNEIJ_cjs.t,{solanaRPCUrls:u,appChains:i,transactionPool:n,pulsarAdapter:m,customization:p?.modals?.connectedModal,pagination:V}):null,xe=L?jsxRuntime.jsx(be,{...L}):null,de=jsxRuntime.jsx(chunkZVUCC2QP_cjs.c.Provider,{value:he,children:jsxRuntime.jsxs(v,{labels:ae,children:[xe,ie,r,ce,le]})}),Le=b(de,{ErrorsProvider:ie,LabelsProvider:Se,MainContent:de,ConnectModal:ce||jsxRuntime.jsx(jsxRuntime.Fragment,{}),ConnectedModal:le||jsxRuntime.jsx(jsxRuntime.Fragment,{})},G);return jsxRuntime.jsx(jsxRuntime.Fragment,{children:Le})}Je.displayName="NovaConnectProvider";Object.defineProperty(exports,"NovaConnectLabelsContext",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.g}});Object.defineProperty(exports,"NovaConnectProviderContext",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.c}});Object.defineProperty(exports,"NovaConnectProviderError",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.b}});Object.defineProperty(exports,"createLabelsSubset",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.o}});Object.defineProperty(exports,"getAvailableChainIds",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.v}});Object.defineProperty(exports,"getChainsListByConnectorType",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.q}});Object.defineProperty(exports,"getConnectChainId",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.u}});Object.defineProperty(exports,"getFilteredConnectors",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.y}});Object.defineProperty(exports,"getGroupedConnectors",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.w}});Object.defineProperty(exports,"getLabelWithFallback",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.n}});Object.defineProperty(exports,"getWalletChains",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.t}});Object.defineProperty(exports,"hasAvailableConnectors",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.x}});Object.defineProperty(exports,"hasConnectorsForAdapter",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.z}});Object.defineProperty(exports,"hasLabel",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.k}});Object.defineProperty(exports,"isDefaultLabels",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.m}});Object.defineProperty(exports,"isEvmChainList",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.r}});Object.defineProperty(exports,"isSolanaChainList",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.s}});Object.defineProperty(exports,"useGetWalletNameAndAvatar",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.a}});Object.defineProperty(exports,"useHasNovaConnectContext",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.e}});Object.defineProperty(exports,"useLabelsByCategory",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.l}});Object.defineProperty(exports,"useNovaConnect",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.d}});Object.defineProperty(exports,"useNovaConnectLabel",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.i}});Object.defineProperty(exports,"useNovaConnectLabels",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.h}});Object.defineProperty(exports,"useNovaConnectLabelsSubset",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.j}});Object.defineProperty(exports,"useNovaConnectOptional",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.f}});Object.defineProperty(exports,"useNovaSiwx",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.p}});Object.defineProperty(exports,"useWalletChainsList",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.A}});Object.defineProperty(exports,"useWalletNativeBalance",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.B}});exports.ErrorsProvider=Z;exports.NovaConnectLabelsProvider=ee;exports.NovaConnectProvider=Je;exports.NovaSiwxWatcher=be;
1
+ 'use strict';var chunkJYTCPJH7_cjs=require('./chunk-JYTCPJH7.cjs'),chunkZVUCC2QP_cjs=require('./chunk-ZVUCC2QP.cjs'),chunkR5V3K52O_cjs=require('./chunk-R5V3K52O.cjs'),chunkEGATOYHY_cjs=require('./chunk-EGATOYHY.cjs');require('./chunk-YJRNNNR6.cjs');var novaCore=require('@tuwaio/nova-core'),react=require('react'),reactToastify=require('react-toastify'),jsxRuntime=require('react/jsx-runtime'),siwxReact=require('@tuwaio/siwx-react');var Be=({title:e,rawError:r,onCopyComplete:i,errorType:u,isConnected:n,...m})=>jsxRuntime.jsx(chunkJYTCPJH7_cjs.H,{title:e,rawError:r,onCopyComplete:i,customization:m.customization}),We=e=>{let r=chunkZVUCC2QP_cjs.h();return jsxRuntime.jsx(reactToastify.ToastContainer,{...e,role:"alert","aria-live":"assertive","aria-label":r.somethingWentWrong})},ze=(e,r)=>{e(r.title,r.rawError,r.errorKey);},He=e=>{e();},Ie=(e,r)=>{if(e&&process.env.NODE_ENV==="development"){let i=typeof r=="string"?r:r.message;console.log("Error copied to clipboard:",i.substring(0,100));}},Ae=e=>e,Fe=e=>e;function Z({containerId:e="nova-connect-errors",position:r="top-center",autoClose:i=7e3,draggable:u=false,customization:n}){let m=chunkZVUCC2QP_cjs.h(),B=chunkEGATOYHY_cjs.d(a=>a.switchNetworkError),A=chunkEGATOYHY_cjs.d(a=>a.activeConnection),W=chunkEGATOYHY_cjs.d(a=>a.connectionError),{ToastError:z=Be,Container:F=We}=n?.components??{},{showError:H=ze,dismissError:L=He,onCopyComplete:p=Ie}=n?.handlers??{},{errorTitle:V=Ae,errorHash:o=Fe}=n??{},y=react.useRef(new Set),v=react.useRef(null),M=!!W,f=!!B,c=!!A?.isConnected,w=M||f,b=W||B||null,l=M?"wallet":f?"switch":null,s={hasWalletError:M,hasSwitchError:f,isConnected:c,hasAnyError:w,primaryError:b,errorType:l},O=m.somethingWentWrong;switch(s.errorType){case "wallet":O=m.connectionError;break;case "switch":O=m.errorWhenChainSwitching;break}let S=V(O,{errorType:s.errorType}),t=s.primaryError?`${s.errorType}-${s.primaryError.message.substring(0,50)}`:null,d=o(t,{primaryError:s.primaryError,errorType:s.errorType}),C=react.useCallback(()=>{L(()=>{v.current&&(reactToastify.toast.dismiss(v.current),v.current=null),reactToastify.toast.dismiss({containerId:e});});},[e,L]),x=react.useCallback((a,P)=>{p(a,P,l);},[p,l]),R=react.useCallback((a,P,h)=>{if(C(),!y.current.has(h))try{let k={containerId:e,toastId:h,onClose:()=>{y.current.delete(h),v.current=null;}},U=n?.toastOptions?.error?.({title:a,rawError:P,errorType:s.errorType,isConnected:s.isConnected}),K={...k,...U};reactToastify.toast.error(jsxRuntime.jsx(z,{title:a,rawError:P,errorType:s.errorType,isConnected:s.isConnected,onCopyComplete:_=>x(_,P),customization:n?.toastErrorCustomization}),K),y.current.add(h),v.current=h;}catch(k){console.error("Failed to show error toast:",k);}},[C,e,n?.toastOptions?.error,n?.toastErrorCustomization,z,s.errorType,s.isConnected,x]),N=react.useCallback((a,P,h)=>{H(R,{title:a,rawError:P,errorKey:h,errorType:l});},[R,H,l]);react.useEffect(()=>{if(c&&!w){C(),y.current.clear();return}if(w&&b&&d){if(c&&l!=="switch")return;N(S,b,d);}},[w,c,b,l,S,d,N,C]),react.useEffect(()=>()=>{C(),y.current.clear();},[C]);let I=n?.classNames?.container?n.classNames.container({hasErrors:s.hasAnyError,errorType:s.errorType}):"novacon:p-0 novacon:bg-transparent",D=react.useMemo(()=>{let a=n?.toastCloseButton;return a?({closeToast:P})=>jsxRuntime.jsx(novaCore.ToastCloseButton,{closeToast:P,...a}):novaCore.ToastCloseButton},[n?.toastCloseButton]),$={...{containerId:e,position:r,closeOnClick:false,icon:false,closeButton:D,autoClose:i,hideProgressBar:false,newestOnTop:false,pauseOnFocusLoss:false,draggable:u,pauseOnHover:true,theme:"light",transition:reactToastify.Bounce},...n?.containerProps,className:I};return jsxRuntime.jsx(F,{...$})}Z.displayName="ErrorsProvider";function ee({labels:e,children:r}){let i=react.useMemo(()=>e,[e]);if(process.env.NODE_ENV==="development"){(!e||typeof e!="object")&&console.warn("NovaConnectLabelsProvider: labels prop should be an object");let n=["connectWallet","disconnect","connecting","connected","error","success"].filter(m=>!(m in e));n.length>0&&console.warn(`NovaConnectLabelsProvider: Missing required labels: ${n.join(", ")}`);}return jsxRuntime.jsx(chunkZVUCC2QP_cjs.g.Provider,{value:i,children:r})}ee.displayName="NovaConnectLabelsProvider";function be(e){let{enabled:r=true,getNonce:i,verifier:u,destroyer:n,domain:m,uri:B,statement:A,expirationTime:W,expirationSeconds:z,notBefore:F,requestId:H,resources:L,onSuccess:p,onError:V}=e,o=chunkEGATOYHY_cjs.d(t=>t.activeConnection),y=chunkEGATOYHY_cjs.d(t=>t.disconnect),v=chunkEGATOYHY_cjs.d(t=>t.isAutoConnectFinished),{signIn:M}=siwxReact.useSiwx(),f=siwxReact.useSiwxSessionStore(t=>t.session),c=siwxReact.useSiwxSessionStore(t=>t.status),w=siwxReact.useSiwxSessionStore(t=>t.reset),b=react.useRef(null),l=react.useRef(false),s=react.useEffectEvent(()=>{w(),n&&n().catch(t=>{console.warn("[NovaSiwxWatcher] Failed to execute session destroyer:",t);});});react.useEffect(()=>{if(!o?.isConnected||!o?.address){if(b.current=null,v===false)return;(c==="authenticated"||f)&&s();}},[o?.isConnected,o?.address,v,c,f]);let O=react.useEffectEvent((t,d)=>o?.connectorType===t&&o.address===d),S=react.useEffectEvent(()=>{if(!(!o?.isConnected||!o.address||!o.signMessage))try{let t={address:String(o.address),chainId:o.chainId,signMessage:o.signMessage,isConnected:o.isConnected},d=siwxReact.getSatelliteSiwxFields(t,{domain:m,uri:B,statement:A,expirationTime:W,expirationSeconds:z,notBefore:F,requestId:H,resources:L});if(c==="authenticated"&&siwxReact.isSessionMatchingConnection(f,t)||b.current===d.address)return;if(b.current=d.address,!u){console.warn("[NovaSiwxWatcher] Verifier not provided, skipping SIWX auto-authentication.");return}let{connectorType:C,address:x}=o,R=N=>{let I=N instanceof Error?N.message:String(N);console.warn("[NovaSiwxWatcher] SIWX authentication rejected or failed:",I),C&&O(C,x)&&y(C),w(),V?.(I);};l.current=!0,M({signer:o.signMessage,verifier:u,getNonce:i,fields:d,onSuccess:p,onError:R}).catch(R).finally(()=>{l.current=!1;});}catch(t){console.warn("[NovaSiwxWatcher] Failed to build SIWX fields:",t);}});return react.useEffect(()=>{!r||!o?.isConnected||!o?.address||!o?.chainId||o.signMessage&&(l.current||c==="building"||c==="signing"||c==="verifying"||S());},[o?.isConnected,o?.address,o?.chainId,o?.signMessage,o?.connectorType,r,c,f?.address]),null}var Xe=({labels:e,children:r})=>jsxRuntime.jsx(ee,{labels:e,children:r}),$e=({customization:e})=>jsxRuntime.jsx(Z,{customization:e}),Ue=(e,r)=>novaCore.deepMerge(e,r||{}),_e=e=>e,je=e=>e,Je=(e,r,i)=>e;function Qe({labels:e,children:r,appChains:i,solanaRPCUrls:u,transactionPool:n,pulsarAdapter:m,withImpersonated:B,withBalance:A,withChain:W,popularConnectors:z,customConnectorGroups:F,legal:H,siwx:L,customization:p,pagination:V}){let o=chunkEGATOYHY_cjs.d(J=>J.activeConnection),y=chunkEGATOYHY_cjs.d(J=>J.connectionError),{LabelsProvider:v=Xe,ErrorsProvider:M=$e}=p?.components??{},{merge:f=Ue,transform:c=_e}=p?.labels??{},{transform:w=je}=p?.contextValue??{},{providerTree:b=Je}=p?.rendering??{},l=react.useMemo(()=>f(chunkR5V3K52O_cjs.a,e||{}),[e,f]),[s,O]=react.useState(false),[S,t]=react.useState(false),[d,C]=react.useState(false),[x,R]=react.useState(false),[N,I]=react.useState("idle"),[D,se]=react.useState("connectors"),[$,a]=react.useState(void 0),[P,h]=react.useState(void 0),[k,U]=react.useState(""),[K,_]=react.useState(false),[j,Ne]=react.useState("main"),we={appChains:i,solanaRPCUrls:u,withImpersonated:B,popularConnectors:z,customConnectorGroups:F,withBalance:A,withChain:W,isConnectModalOpen:s,setIsConnectModalOpen:O,isConnectedModalOpen:S,setIsConnectedModalOpen:t,isChainsListOpen:d,setIsChainsListOpen:C,isChainsListOpenMobile:x,setIsChainsListOpenMobile:R,connectedButtonStatus:N,setConnectedButtonStatus:I,connectedModalContentType:j,setConnectedModalContentType:Ne,connectModalContentType:D,setConnectModalContentType:se,selectedAdapter:$,setSelectedAdapter:a,activeConnector:P,setActiveConnector:h,impersonatedAddress:k,setImpersonatedAddress:U,isConnected:K,setIsConnected:_,legal:H},G=react.useMemo(()=>({isConnected:K,activeConnection:o,connectionError:y,modalStates:{isConnectModalOpen:s,isConnectedModalOpen:S,isChainsListOpen:d,isChainsListOpenMobile:x},contentTypes:{connectModal:D,connectedModal:j},statuses:{connectedButton:N}}),[K,o,y,s,S,d,x,D,j,N]),ae=react.useMemo(()=>c(l,G),[l,c,G]),he=w(we,G),ie=jsxRuntime.jsx(M,{customization:p?.errors}),Se=jsxRuntime.jsx(v,{labels:ae,children:r}),ce=i||u?jsxRuntime.jsx(chunkJYTCPJH7_cjs.G,{solanaRPCUrls:u,appChains:i,customization:p?.modals?.connectModal}):null,le=i||u?jsxRuntime.jsx(chunkJYTCPJH7_cjs.t,{solanaRPCUrls:u,appChains:i,transactionPool:n,pulsarAdapter:m,customization:p?.modals?.connectedModal,pagination:V}):null,xe=L?jsxRuntime.jsx(be,{...L}):null,de=jsxRuntime.jsx(chunkZVUCC2QP_cjs.c.Provider,{value:he,children:jsxRuntime.jsxs(v,{labels:ae,children:[xe,ie,r,ce,le]})}),Le=b(de,{ErrorsProvider:ie,LabelsProvider:Se,MainContent:de,ConnectModal:ce||jsxRuntime.jsx(jsxRuntime.Fragment,{}),ConnectedModal:le||jsxRuntime.jsx(jsxRuntime.Fragment,{})},G);return jsxRuntime.jsx(jsxRuntime.Fragment,{children:Le})}Qe.displayName="NovaConnectProvider";Object.defineProperty(exports,"NovaConnectLabelsContext",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.g}});Object.defineProperty(exports,"NovaConnectProviderContext",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.c}});Object.defineProperty(exports,"NovaConnectProviderError",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.b}});Object.defineProperty(exports,"createLabelsSubset",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.o}});Object.defineProperty(exports,"getAvailableChainIds",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.v}});Object.defineProperty(exports,"getChainsListByConnectorType",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.q}});Object.defineProperty(exports,"getConnectChainId",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.u}});Object.defineProperty(exports,"getFilteredConnectors",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.y}});Object.defineProperty(exports,"getGroupedConnectors",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.w}});Object.defineProperty(exports,"getLabelWithFallback",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.n}});Object.defineProperty(exports,"getWalletChains",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.t}});Object.defineProperty(exports,"hasAvailableConnectors",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.x}});Object.defineProperty(exports,"hasConnectorsForAdapter",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.z}});Object.defineProperty(exports,"hasLabel",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.k}});Object.defineProperty(exports,"isDefaultLabels",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.m}});Object.defineProperty(exports,"isEvmChainList",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.r}});Object.defineProperty(exports,"isSolanaChainList",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.s}});Object.defineProperty(exports,"useGetWalletNameAndAvatar",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.a}});Object.defineProperty(exports,"useHasNovaConnectContext",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.e}});Object.defineProperty(exports,"useLabelsByCategory",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.l}});Object.defineProperty(exports,"useNovaConnect",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.d}});Object.defineProperty(exports,"useNovaConnectLabel",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.i}});Object.defineProperty(exports,"useNovaConnectLabels",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.h}});Object.defineProperty(exports,"useNovaConnectLabelsSubset",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.j}});Object.defineProperty(exports,"useNovaConnectOptional",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.f}});Object.defineProperty(exports,"useNovaSiwx",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.p}});Object.defineProperty(exports,"useWalletChainsList",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.A}});Object.defineProperty(exports,"useWalletNativeBalance",{enumerable:true,get:function(){return chunkZVUCC2QP_cjs.B}});exports.ErrorsProvider=Z;exports.NovaConnectLabelsProvider=ee;exports.NovaConnectProvider=Qe;exports.NovaSiwxWatcher=be;
package/dist/index.d.cts CHANGED
@@ -389,7 +389,10 @@ declare namespace NovaConnectProvider {
389
389
  interface GetChainsListByConnectorTypeParams extends InitialChains {
390
390
  /** Connector type whose network is used, for example `evm:metamask` */
391
391
  connectorType: ConnectorType;
392
- /** Solana only: keeps the clusters of these chain identifiers (for example `solana:devnet`) */
392
+ /**
393
+ * Solana only: keeps the clusters of these chain identifiers (Wallet Standard chains such as `solana:devnet`, or
394
+ * CAIP-2 chain IDs with the genesis hash)
395
+ */
393
396
  chains?: ChainIdentifierArray;
394
397
  }
395
398
  /**
@@ -433,7 +436,8 @@ declare function isEvmChainList(chains: (string | number)[]): boolean;
433
436
  */
434
437
  declare function isSolanaChainList(chains: (string | number)[]): boolean;
435
438
  /**
436
- * Reads `connectedWallet.chains` of a connection (the Wallet Standard wallet of a Solana connection).
439
+ * Reads `connectedWallet.chains` of a connection (the Wallet Standard wallet of a Solana connection). Wallets name
440
+ * their clusters in the Wallet Standard form (`solana:devnet`), not with the genesis hash.
437
441
  *
438
442
  * @param connection - A connection, or any other value.
439
443
  * @returns The chains, or `undefined` when the value has no such array.
package/dist/index.d.ts CHANGED
@@ -389,7 +389,10 @@ declare namespace NovaConnectProvider {
389
389
  interface GetChainsListByConnectorTypeParams extends InitialChains {
390
390
  /** Connector type whose network is used, for example `evm:metamask` */
391
391
  connectorType: ConnectorType;
392
- /** Solana only: keeps the clusters of these chain identifiers (for example `solana:devnet`) */
392
+ /**
393
+ * Solana only: keeps the clusters of these chain identifiers (Wallet Standard chains such as `solana:devnet`, or
394
+ * CAIP-2 chain IDs with the genesis hash)
395
+ */
393
396
  chains?: ChainIdentifierArray;
394
397
  }
395
398
  /**
@@ -433,7 +436,8 @@ declare function isEvmChainList(chains: (string | number)[]): boolean;
433
436
  */
434
437
  declare function isSolanaChainList(chains: (string | number)[]): boolean;
435
438
  /**
436
- * Reads `connectedWallet.chains` of a connection (the Wallet Standard wallet of a Solana connection).
439
+ * Reads `connectedWallet.chains` of a connection (the Wallet Standard wallet of a Solana connection). Wallets name
440
+ * their clusters in the Wallet Standard form (`solana:devnet`), not with the genesis hash.
437
441
  *
438
442
  * @param connection - A connection, or any other value.
439
443
  * @returns The chains, or `undefined` when the value has no such array.
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import {G,t,H}from'./chunk-ENXSDTRV.js';import {h,g,c}from'./chunk-AGE6EFTV.js';export{g as NovaConnectLabelsContext,c as NovaConnectProviderContext,b as NovaConnectProviderError,o as createLabelsSubset,v as getAvailableChainIds,q as getChainsListByConnectorType,u as getConnectChainId,y as getFilteredConnectors,w as getGroupedConnectors,n as getLabelWithFallback,t as getWalletChains,x as hasAvailableConnectors,z as hasConnectorsForAdapter,k as hasLabel,m as isDefaultLabels,r as isEvmChainList,s as isSolanaChainList,a as useGetWalletNameAndAvatar,e as useHasNovaConnectContext,l as useLabelsByCategory,d as useNovaConnect,i as useNovaConnectLabel,h as useNovaConnectLabels,j as useNovaConnectLabelsSubset,f as useNovaConnectOptional,p as useNovaSiwx,A as useWalletChainsList,B as useWalletNativeBalance}from'./chunk-AGE6EFTV.js';import {a}from'./chunk-6EDQ7JRZ.js';import {d}from'./chunk-ZVADGOGQ.js';import'./chunk-3LWAAUG4.js';import {ToastCloseButton,deepMerge}from'@tuwaio/nova-core';import {useRef,useCallback,useEffect,useMemo,useEffectEvent,useState}from'react';import {toast,Bounce,ToastContainer}from'react-toastify';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {useSiwx,useSiwxSessionStore,getSatelliteSiwxFields}from'@tuwaio/siwx-react';var Be=({title:e,rawError:r,onCopyComplete:i,errorType:u,isConnected:n,...m})=>jsx(H,{title:e,rawError:r,onCopyComplete:i,customization:m.customization}),We=e=>{let r=h();return jsx(ToastContainer,{...e,role:"alert","aria-live":"assertive","aria-label":r.somethingWentWrong})},ze=(e,r)=>{e(r.title,r.rawError,r.errorKey);},He=e=>{e();},Ie=(e,r)=>{if(e&&process.env.NODE_ENV==="development"){let i=typeof r=="string"?r:r.message;console.log("Error copied to clipboard:",i.substring(0,100));}},Ae=e=>e,Fe=e=>e;function Z({containerId:e="nova-connect-errors",position:r="top-center",autoClose:i=7e3,draggable:u=false,customization:n}){let m=h(),B=d(a=>a.switchNetworkError),A=d(a=>a.activeConnection),W=d(a=>a.connectionError),{ToastError:z=Be,Container:F=We}=n?.components??{},{showError:H=ze,dismissError:L=He,onCopyComplete:p=Ie}=n?.handlers??{},{errorTitle:V=Ae,errorHash:o=Fe}=n??{},y=useRef(new Set),v=useRef(null),M=!!W,f=!!B,c=!!A?.isConnected,w=M||f,b=W||B||null,l=M?"wallet":f?"switch":null,s={hasWalletError:M,hasSwitchError:f,isConnected:c,hasAnyError:w,primaryError:b,errorType:l},O=m.somethingWentWrong;switch(s.errorType){case "wallet":O=m.connectionError;break;case "switch":O=m.errorWhenChainSwitching;break}let S=V(O,{errorType:s.errorType}),t=s.primaryError?`${s.errorType}-${s.primaryError.message.substring(0,50)}`:null,d$1=o(t,{primaryError:s.primaryError,errorType:s.errorType}),C=useCallback(()=>{L(()=>{v.current&&(toast.dismiss(v.current),v.current=null),toast.dismiss({containerId:e});});},[e,L]),x=useCallback((a,P)=>{p(a,P,l);},[p,l]),R=useCallback((a,P,h)=>{if(C(),!y.current.has(h))try{let k={containerId:e,toastId:h,onClose:()=>{y.current.delete(h),v.current=null;}},U=n?.toastOptions?.error?.({title:a,rawError:P,errorType:s.errorType,isConnected:s.isConnected}),K={...k,...U};toast.error(jsx(z,{title:a,rawError:P,errorType:s.errorType,isConnected:s.isConnected,onCopyComplete:_=>x(_,P),customization:n?.toastErrorCustomization}),K),y.current.add(h),v.current=h;}catch(k){console.error("Failed to show error toast:",k);}},[C,e,n?.toastOptions?.error,n?.toastErrorCustomization,z,s.errorType,s.isConnected,x]),N=useCallback((a,P,h)=>{H(R,{title:a,rawError:P,errorKey:h,errorType:l});},[R,H,l]);useEffect(()=>{if(c&&!w){C(),y.current.clear();return}if(w&&b&&d$1){if(c&&l!=="switch")return;N(S,b,d$1);}},[w,c,b,l,S,d$1,N,C]),useEffect(()=>()=>{C(),y.current.clear();},[C]);let I=n?.classNames?.container?n.classNames.container({hasErrors:s.hasAnyError,errorType:s.errorType}):"novacon:p-0 novacon:bg-transparent",D=useMemo(()=>{let a=n?.toastCloseButton;return a?({closeToast:P})=>jsx(ToastCloseButton,{closeToast:P,...a}):ToastCloseButton},[n?.toastCloseButton]),$={...{containerId:e,position:r,closeOnClick:false,icon:false,closeButton:D,autoClose:i,hideProgressBar:false,newestOnTop:false,pauseOnFocusLoss:false,draggable:u,pauseOnHover:true,theme:"light",transition:Bounce},...n?.containerProps,className:I};return jsx(F,{...$})}Z.displayName="ErrorsProvider";function ee({labels:e,children:r}){let i=useMemo(()=>e,[e]);if(process.env.NODE_ENV==="development"){(!e||typeof e!="object")&&console.warn("NovaConnectLabelsProvider: labels prop should be an object");let n=["connectWallet","disconnect","connecting","connected","error","success"].filter(m=>!(m in e));n.length>0&&console.warn(`NovaConnectLabelsProvider: Missing required labels: ${n.join(", ")}`);}return jsx(g.Provider,{value:i,children:r})}ee.displayName="NovaConnectLabelsProvider";function be(e){let{enabled:r=true,getNonce:i,verifier:u,destroyer:n,domain:m,uri:B,statement:A,expirationTime:W,expirationSeconds:z,notBefore:F,requestId:H,resources:L,onSuccess:p,onError:V}=e,o=d(t=>t.activeConnection),y=d(t=>t.disconnect),v=d(t=>t.isAutoConnectFinished),{signIn:M}=useSiwx(),f=useSiwxSessionStore(t=>t.session),c=useSiwxSessionStore(t=>t.status),w=useSiwxSessionStore(t=>t.reset),b=useRef(null),l=useRef(false),s=useEffectEvent(()=>{w(),n&&n().catch(t=>{console.warn("[NovaSiwxWatcher] Failed to execute session destroyer:",t);});});useEffect(()=>{if(!o?.isConnected||!o?.address){if(b.current=null,v===false)return;(c==="authenticated"||f)&&s();}},[o?.isConnected,o?.address,v,c,f]);let O=useEffectEvent((t,d)=>o?.connectorType===t&&o.address===d),S=useEffectEvent(()=>{if(!(!o?.isConnected||!o.address||!o.signMessage))try{let t={address:String(o.address),chainId:o.chainId,signMessage:o.signMessage,isConnected:o.isConnected},d=getSatelliteSiwxFields(t,{domain:m,uri:B,statement:A,expirationTime:W,expirationSeconds:z,notBefore:F,requestId:H,resources:L});if(c==="authenticated"&&f?.address===d.address||b.current===d.address)return;if(b.current=d.address,!u){console.warn("[NovaSiwxWatcher] Verifier not provided, skipping SIWX auto-authentication.");return}let{connectorType:C,address:x}=o,R=N=>{let I=N instanceof Error?N.message:String(N);console.warn("[NovaSiwxWatcher] SIWX authentication rejected or failed:",I),C&&O(C,x)&&y(C),w(),V?.(I);};l.current=!0,M({signer:o.signMessage,verifier:u,getNonce:i,fields:d,onSuccess:p,onError:R}).catch(R).finally(()=>{l.current=!1;});}catch(t){console.warn("[NovaSiwxWatcher] Failed to build SIWX fields:",t);}});return useEffect(()=>{!r||!o?.isConnected||!o?.address||!o?.chainId||o.signMessage&&(l.current||c==="building"||c==="signing"||c==="verifying"||S());},[o?.isConnected,o?.address,o?.chainId,o?.signMessage,o?.connectorType,r,c,f?.address]),null}var Ge=({labels:e,children:r})=>jsx(ee,{labels:e,children:r}),Xe=({customization:e})=>jsx(Z,{customization:e}),$e=(e,r)=>deepMerge(e,r||{}),Ue=e=>e,_e=e=>e,je=(e,r,i)=>e;function Je({labels:e,children:r,appChains:i,solanaRPCUrls:u,transactionPool:n,pulsarAdapter:m,withImpersonated:B,withBalance:A,withChain:W,popularConnectors:z,customConnectorGroups:F,legal:H,siwx:L,customization:p,pagination:V}){let o=d(J=>J.activeConnection),y=d(J=>J.connectionError),{LabelsProvider:v=Ge,ErrorsProvider:M=Xe}=p?.components??{},{merge:f=$e,transform:c$1=Ue}=p?.labels??{},{transform:w=_e}=p?.contextValue??{},{providerTree:b=je}=p?.rendering??{},l=useMemo(()=>f(a,e||{}),[e,f]),[s,O]=useState(false),[S,t$1]=useState(false),[d$1,C]=useState(false),[x,R]=useState(false),[N,I]=useState("idle"),[D,se]=useState("connectors"),[$,a$1]=useState(void 0),[P,h]=useState(void 0),[k,U]=useState(""),[K,_]=useState(false),[j,Ne]=useState("main"),we={appChains:i,solanaRPCUrls:u,withImpersonated:B,popularConnectors:z,customConnectorGroups:F,withBalance:A,withChain:W,isConnectModalOpen:s,setIsConnectModalOpen:O,isConnectedModalOpen:S,setIsConnectedModalOpen:t$1,isChainsListOpen:d$1,setIsChainsListOpen:C,isChainsListOpenMobile:x,setIsChainsListOpenMobile:R,connectedButtonStatus:N,setConnectedButtonStatus:I,connectedModalContentType:j,setConnectedModalContentType:Ne,connectModalContentType:D,setConnectModalContentType:se,selectedAdapter:$,setSelectedAdapter:a$1,activeConnector:P,setActiveConnector:h,impersonatedAddress:k,setImpersonatedAddress:U,isConnected:K,setIsConnected:_,legal:H},G$1=useMemo(()=>({isConnected:K,activeConnection:o,connectionError:y,modalStates:{isConnectModalOpen:s,isConnectedModalOpen:S,isChainsListOpen:d$1,isChainsListOpenMobile:x},contentTypes:{connectModal:D,connectedModal:j},statuses:{connectedButton:N}}),[K,o,y,s,S,d$1,x,D,j,N]),ae=useMemo(()=>c$1(l,G$1),[l,c$1,G$1]),he=w(we,G$1),ie=jsx(M,{customization:p?.errors}),Se=jsx(v,{labels:ae,children:r}),ce=i||u?jsx(G,{solanaRPCUrls:u,appChains:i,customization:p?.modals?.connectModal}):null,le=i||u?jsx(t,{solanaRPCUrls:u,appChains:i,transactionPool:n,pulsarAdapter:m,customization:p?.modals?.connectedModal,pagination:V}):null,xe=L?jsx(be,{...L}):null,de=jsx(c.Provider,{value:he,children:jsxs(v,{labels:ae,children:[xe,ie,r,ce,le]})}),Le=b(de,{ErrorsProvider:ie,LabelsProvider:Se,MainContent:de,ConnectModal:ce||jsx(Fragment,{}),ConnectedModal:le||jsx(Fragment,{})},G$1);return jsx(Fragment,{children:Le})}Je.displayName="NovaConnectProvider";export{Z as ErrorsProvider,ee as NovaConnectLabelsProvider,Je as NovaConnectProvider,be as NovaSiwxWatcher};
1
+ import {G,t,H}from'./chunk-QCJQXXGY.js';import {h,g,c}from'./chunk-AGE6EFTV.js';export{g as NovaConnectLabelsContext,c as NovaConnectProviderContext,b as NovaConnectProviderError,o as createLabelsSubset,v as getAvailableChainIds,q as getChainsListByConnectorType,u as getConnectChainId,y as getFilteredConnectors,w as getGroupedConnectors,n as getLabelWithFallback,t as getWalletChains,x as hasAvailableConnectors,z as hasConnectorsForAdapter,k as hasLabel,m as isDefaultLabels,r as isEvmChainList,s as isSolanaChainList,a as useGetWalletNameAndAvatar,e as useHasNovaConnectContext,l as useLabelsByCategory,d as useNovaConnect,i as useNovaConnectLabel,h as useNovaConnectLabels,j as useNovaConnectLabelsSubset,f as useNovaConnectOptional,p as useNovaSiwx,A as useWalletChainsList,B as useWalletNativeBalance}from'./chunk-AGE6EFTV.js';import {a}from'./chunk-6EDQ7JRZ.js';import {d}from'./chunk-ZVADGOGQ.js';import'./chunk-3LWAAUG4.js';import {ToastCloseButton,deepMerge}from'@tuwaio/nova-core';import {useRef,useCallback,useEffect,useMemo,useEffectEvent,useState}from'react';import {toast,Bounce,ToastContainer}from'react-toastify';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {useSiwx,useSiwxSessionStore,getSatelliteSiwxFields,isSessionMatchingConnection}from'@tuwaio/siwx-react';var Be=({title:e,rawError:r,onCopyComplete:i,errorType:u,isConnected:n,...m})=>jsx(H,{title:e,rawError:r,onCopyComplete:i,customization:m.customization}),We=e=>{let r=h();return jsx(ToastContainer,{...e,role:"alert","aria-live":"assertive","aria-label":r.somethingWentWrong})},ze=(e,r)=>{e(r.title,r.rawError,r.errorKey);},He=e=>{e();},Ie=(e,r)=>{if(e&&process.env.NODE_ENV==="development"){let i=typeof r=="string"?r:r.message;console.log("Error copied to clipboard:",i.substring(0,100));}},Ae=e=>e,Fe=e=>e;function Z({containerId:e="nova-connect-errors",position:r="top-center",autoClose:i=7e3,draggable:u=false,customization:n}){let m=h(),B=d(a=>a.switchNetworkError),A=d(a=>a.activeConnection),W=d(a=>a.connectionError),{ToastError:z=Be,Container:F=We}=n?.components??{},{showError:H=ze,dismissError:L=He,onCopyComplete:p=Ie}=n?.handlers??{},{errorTitle:V=Ae,errorHash:o=Fe}=n??{},y=useRef(new Set),v=useRef(null),M=!!W,f=!!B,c=!!A?.isConnected,w=M||f,b=W||B||null,l=M?"wallet":f?"switch":null,s={hasWalletError:M,hasSwitchError:f,isConnected:c,hasAnyError:w,primaryError:b,errorType:l},O=m.somethingWentWrong;switch(s.errorType){case "wallet":O=m.connectionError;break;case "switch":O=m.errorWhenChainSwitching;break}let S=V(O,{errorType:s.errorType}),t=s.primaryError?`${s.errorType}-${s.primaryError.message.substring(0,50)}`:null,d$1=o(t,{primaryError:s.primaryError,errorType:s.errorType}),C=useCallback(()=>{L(()=>{v.current&&(toast.dismiss(v.current),v.current=null),toast.dismiss({containerId:e});});},[e,L]),x=useCallback((a,P)=>{p(a,P,l);},[p,l]),R=useCallback((a,P,h)=>{if(C(),!y.current.has(h))try{let k={containerId:e,toastId:h,onClose:()=>{y.current.delete(h),v.current=null;}},U=n?.toastOptions?.error?.({title:a,rawError:P,errorType:s.errorType,isConnected:s.isConnected}),K={...k,...U};toast.error(jsx(z,{title:a,rawError:P,errorType:s.errorType,isConnected:s.isConnected,onCopyComplete:_=>x(_,P),customization:n?.toastErrorCustomization}),K),y.current.add(h),v.current=h;}catch(k){console.error("Failed to show error toast:",k);}},[C,e,n?.toastOptions?.error,n?.toastErrorCustomization,z,s.errorType,s.isConnected,x]),N=useCallback((a,P,h)=>{H(R,{title:a,rawError:P,errorKey:h,errorType:l});},[R,H,l]);useEffect(()=>{if(c&&!w){C(),y.current.clear();return}if(w&&b&&d$1){if(c&&l!=="switch")return;N(S,b,d$1);}},[w,c,b,l,S,d$1,N,C]),useEffect(()=>()=>{C(),y.current.clear();},[C]);let I=n?.classNames?.container?n.classNames.container({hasErrors:s.hasAnyError,errorType:s.errorType}):"novacon:p-0 novacon:bg-transparent",D=useMemo(()=>{let a=n?.toastCloseButton;return a?({closeToast:P})=>jsx(ToastCloseButton,{closeToast:P,...a}):ToastCloseButton},[n?.toastCloseButton]),$={...{containerId:e,position:r,closeOnClick:false,icon:false,closeButton:D,autoClose:i,hideProgressBar:false,newestOnTop:false,pauseOnFocusLoss:false,draggable:u,pauseOnHover:true,theme:"light",transition:Bounce},...n?.containerProps,className:I};return jsx(F,{...$})}Z.displayName="ErrorsProvider";function ee({labels:e,children:r}){let i=useMemo(()=>e,[e]);if(process.env.NODE_ENV==="development"){(!e||typeof e!="object")&&console.warn("NovaConnectLabelsProvider: labels prop should be an object");let n=["connectWallet","disconnect","connecting","connected","error","success"].filter(m=>!(m in e));n.length>0&&console.warn(`NovaConnectLabelsProvider: Missing required labels: ${n.join(", ")}`);}return jsx(g.Provider,{value:i,children:r})}ee.displayName="NovaConnectLabelsProvider";function be(e){let{enabled:r=true,getNonce:i,verifier:u,destroyer:n,domain:m,uri:B,statement:A,expirationTime:W,expirationSeconds:z,notBefore:F,requestId:H,resources:L,onSuccess:p,onError:V}=e,o=d(t=>t.activeConnection),y=d(t=>t.disconnect),v=d(t=>t.isAutoConnectFinished),{signIn:M}=useSiwx(),f=useSiwxSessionStore(t=>t.session),c=useSiwxSessionStore(t=>t.status),w=useSiwxSessionStore(t=>t.reset),b=useRef(null),l=useRef(false),s=useEffectEvent(()=>{w(),n&&n().catch(t=>{console.warn("[NovaSiwxWatcher] Failed to execute session destroyer:",t);});});useEffect(()=>{if(!o?.isConnected||!o?.address){if(b.current=null,v===false)return;(c==="authenticated"||f)&&s();}},[o?.isConnected,o?.address,v,c,f]);let O=useEffectEvent((t,d)=>o?.connectorType===t&&o.address===d),S=useEffectEvent(()=>{if(!(!o?.isConnected||!o.address||!o.signMessage))try{let t={address:String(o.address),chainId:o.chainId,signMessage:o.signMessage,isConnected:o.isConnected},d=getSatelliteSiwxFields(t,{domain:m,uri:B,statement:A,expirationTime:W,expirationSeconds:z,notBefore:F,requestId:H,resources:L});if(c==="authenticated"&&isSessionMatchingConnection(f,t)||b.current===d.address)return;if(b.current=d.address,!u){console.warn("[NovaSiwxWatcher] Verifier not provided, skipping SIWX auto-authentication.");return}let{connectorType:C,address:x}=o,R=N=>{let I=N instanceof Error?N.message:String(N);console.warn("[NovaSiwxWatcher] SIWX authentication rejected or failed:",I),C&&O(C,x)&&y(C),w(),V?.(I);};l.current=!0,M({signer:o.signMessage,verifier:u,getNonce:i,fields:d,onSuccess:p,onError:R}).catch(R).finally(()=>{l.current=!1;});}catch(t){console.warn("[NovaSiwxWatcher] Failed to build SIWX fields:",t);}});return useEffect(()=>{!r||!o?.isConnected||!o?.address||!o?.chainId||o.signMessage&&(l.current||c==="building"||c==="signing"||c==="verifying"||S());},[o?.isConnected,o?.address,o?.chainId,o?.signMessage,o?.connectorType,r,c,f?.address]),null}var Xe=({labels:e,children:r})=>jsx(ee,{labels:e,children:r}),$e=({customization:e})=>jsx(Z,{customization:e}),Ue=(e,r)=>deepMerge(e,r||{}),_e=e=>e,je=e=>e,Je=(e,r,i)=>e;function Qe({labels:e,children:r,appChains:i,solanaRPCUrls:u,transactionPool:n,pulsarAdapter:m,withImpersonated:B,withBalance:A,withChain:W,popularConnectors:z,customConnectorGroups:F,legal:H,siwx:L,customization:p,pagination:V}){let o=d(J=>J.activeConnection),y=d(J=>J.connectionError),{LabelsProvider:v=Xe,ErrorsProvider:M=$e}=p?.components??{},{merge:f=Ue,transform:c$1=_e}=p?.labels??{},{transform:w=je}=p?.contextValue??{},{providerTree:b=Je}=p?.rendering??{},l=useMemo(()=>f(a,e||{}),[e,f]),[s,O]=useState(false),[S,t$1]=useState(false),[d$1,C]=useState(false),[x,R]=useState(false),[N,I]=useState("idle"),[D,se]=useState("connectors"),[$,a$1]=useState(void 0),[P,h]=useState(void 0),[k,U]=useState(""),[K,_]=useState(false),[j,Ne]=useState("main"),we={appChains:i,solanaRPCUrls:u,withImpersonated:B,popularConnectors:z,customConnectorGroups:F,withBalance:A,withChain:W,isConnectModalOpen:s,setIsConnectModalOpen:O,isConnectedModalOpen:S,setIsConnectedModalOpen:t$1,isChainsListOpen:d$1,setIsChainsListOpen:C,isChainsListOpenMobile:x,setIsChainsListOpenMobile:R,connectedButtonStatus:N,setConnectedButtonStatus:I,connectedModalContentType:j,setConnectedModalContentType:Ne,connectModalContentType:D,setConnectModalContentType:se,selectedAdapter:$,setSelectedAdapter:a$1,activeConnector:P,setActiveConnector:h,impersonatedAddress:k,setImpersonatedAddress:U,isConnected:K,setIsConnected:_,legal:H},G$1=useMemo(()=>({isConnected:K,activeConnection:o,connectionError:y,modalStates:{isConnectModalOpen:s,isConnectedModalOpen:S,isChainsListOpen:d$1,isChainsListOpenMobile:x},contentTypes:{connectModal:D,connectedModal:j},statuses:{connectedButton:N}}),[K,o,y,s,S,d$1,x,D,j,N]),ae=useMemo(()=>c$1(l,G$1),[l,c$1,G$1]),he=w(we,G$1),ie=jsx(M,{customization:p?.errors}),Se=jsx(v,{labels:ae,children:r}),ce=i||u?jsx(G,{solanaRPCUrls:u,appChains:i,customization:p?.modals?.connectModal}):null,le=i||u?jsx(t,{solanaRPCUrls:u,appChains:i,transactionPool:n,pulsarAdapter:m,customization:p?.modals?.connectedModal,pagination:V}):null,xe=L?jsx(be,{...L}):null,de=jsx(c.Provider,{value:he,children:jsxs(v,{labels:ae,children:[xe,ie,r,ce,le]})}),Le=b(de,{ErrorsProvider:ie,LabelsProvider:Se,MainContent:de,ConnectModal:ce||jsx(Fragment,{}),ConnectedModal:le||jsx(Fragment,{})},G$1);return jsx(Fragment,{children:Le})}Qe.displayName="NovaConnectProvider";export{Z as ErrorsProvider,ee as NovaConnectLabelsProvider,Qe as NovaConnectProvider,be as NovaSiwxWatcher};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tuwaio/nova-connect",
3
- "version": "0.7.4",
3
+ "version": "0.8.0",
4
4
  "private": false,
5
5
  "author": "Oleksandr Tkach",
6
6
  "license": "Apache-2.0",
@@ -88,19 +88,19 @@
88
88
  "peerDependencies": {
89
89
  "@heroicons/react": "2.x.x",
90
90
  "@radix-ui/react-select": "2.x.x",
91
- "@tuwaio/orbit-core": ">=0.3",
91
+ "@tuwaio/orbit-core": ">=0.4",
92
92
  "@tuwaio/orbit-evm": ">=0.3",
93
- "@tuwaio/orbit-solana": ">=0.3",
94
- "@tuwaio/satellite-core": ">=0.5",
95
- "@tuwaio/satellite-evm": ">=0.5",
96
- "@tuwaio/satellite-solana": ">=0.5",
97
- "@tuwaio/satellite-react": ">=0.6.3",
98
- "@tuwaio/siwx-react": ">=0.3",
99
- "@tuwaio/pulsar-core": ">=0.7",
100
- "@tuwaio/nova-core": "^0.7.3",
101
- "@tuwaio/nova-transactions": "^0.7.4",
93
+ "@tuwaio/orbit-solana": ">=0.4",
94
+ "@tuwaio/satellite-core": ">=0.7",
95
+ "@tuwaio/satellite-evm": ">=0.7",
96
+ "@tuwaio/satellite-solana": ">=0.7",
97
+ "@tuwaio/satellite-react": ">=0.7",
98
+ "@tuwaio/siwx-react": ">=0.5",
99
+ "@tuwaio/pulsar-core": ">=0.9",
100
+ "@tuwaio/nova-core": ">=0.8",
101
+ "@tuwaio/nova-transactions": ">=0.8",
102
102
  "ethereum-blockies-base64": "1.x.x",
103
- "framer-motion": "12.x.x || 13.x.x",
103
+ "framer-motion": "12.x.x || 13.x.x || 14.x.x",
104
104
  "react": ">=19.2.3",
105
105
  "react-toastify": "11.x.x",
106
106
  "viem": "2.x.x"
@@ -165,17 +165,17 @@
165
165
  "@heroicons/react": "^2.2.0",
166
166
  "@radix-ui/react-dialog": "^1.1.23",
167
167
  "@radix-ui/react-select": "^2.3.7",
168
- "@tuwaio/orbit-core": "0.3.1",
168
+ "@tuwaio/orbit-core": "0.4.0",
169
169
  "@tuwaio/orbit-evm": "0.3.2",
170
- "@tuwaio/orbit-solana": "0.3.3",
171
- "@tuwaio/satellite-react": "0.6.3",
172
- "@tuwaio/satellite-core": "0.6.2",
173
- "@tuwaio/satellite-evm": "0.6.2",
174
- "@tuwaio/satellite-solana": "0.6.1",
175
- "@tuwaio/siwx-react": "0.4.1",
176
- "@tuwaio/pulsar-core": "0.8.3",
177
- "@tuwaio/nova-core": "^0.7.3",
178
- "@tuwaio/nova-transactions": "^0.7.4",
170
+ "@tuwaio/orbit-solana": "0.4.0",
171
+ "@tuwaio/satellite-react": "0.7.0",
172
+ "@tuwaio/satellite-core": "0.7.0",
173
+ "@tuwaio/satellite-evm": "0.7.0",
174
+ "@tuwaio/satellite-solana": "0.7.0",
175
+ "@tuwaio/siwx-react": "0.5.1",
176
+ "@tuwaio/pulsar-core": "0.9.0",
177
+ "@tuwaio/nova-core": "^0.8.0",
178
+ "@tuwaio/nova-transactions": "^0.8.0",
179
179
  "@wallet-standard/react": "^1.0.3",
180
180
  "@wagmi/core": "^3.6.5",
181
181
  "@web3icons/react": "^4.1.23",
@@ -185,7 +185,7 @@
185
185
  "dayjs": "^1.11.23",
186
186
  "immer": "^11.1.18",
187
187
  "ethereum-blockies-base64": "^1.0.2",
188
- "framer-motion": "13.5.1",
188
+ "framer-motion": "14.0.0",
189
189
  "react": "^19.3.0",
190
190
  "react-toastify": "^11.1.0",
191
191
  "tailwind-merge": "^3.7.0",