@tuwaio/nova-connect 0.5.7 → 0.5.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.
@@ -0,0 +1 @@
1
+ 'use strict';var chunkK44IHM6B_cjs=require('./chunk-K44IHM6B.cjs'),chunkMGBN4EIT_cjs=require('./chunk-MGBN4EIT.cjs'),chunkV6XDFRWV_cjs=require('./chunk-V6XDFRWV.cjs'),novaCore=require('@tuwaio/nova-core'),orbitCore=require('@tuwaio/orbit-core'),react=require('react'),siwxReact=require('@tuwaio/siwx-react');function be(e){let{abbreviateSymbols:t=12,maxNameLength:o=30,autoRetry:n=false,retryDelay:s=3e3}=e,a=chunkV6XDFRWV_cjs.d(L=>L.activeConnection),c=chunkV6XDFRWV_cjs.d(L=>L.getAdapter),r=a?.address,u=a?.connectorType,i=u?c(orbitCore.getAdapterFromConnectorType(u)):null,[l,f]=react.useState(null),[O,p]=react.useState(null),[y,C]=react.useState(false),[x,g]=react.useState(null),N=react.useRef(null),w=react.useRef(null),F=!!(i&&"getName"in i&&typeof i.getName=="function"),G=!!(i&&"getAvatar"in i&&typeof i.getAvatar=="function"),h=react.useCallback(()=>{N.current&&(N.current.abort(),N.current=null),w.current!==null&&(clearTimeout(w.current),w.current=null);},[]),T=react.useCallback(async function L(){if(h(),!r||!i||!F){f(null),p(null),C(false),g(null);return}N.current=new AbortController;let{signal:A}=N.current;C(true),g(null),f(null),p(null);try{if(A.aborted)return;let v=await i.getName?.(r);if(A.aborted)return;if(v&&(f(v),G))try{let S=await i.getAvatar?.(v);A.aborted||p(S??null);}catch(S){console.warn("Failed to fetch avatar:",S),A.aborted||p(null);}}catch(v){if(A.aborted)return;let S=v instanceof Error?v.message:"Failed to fetch name service data";console.error("Failed to fetch name service data:",v),g(S),f(null),p(null),n&&(w.current=setTimeout(()=>{L();},s));}finally{A.aborted||C(false);}},[r,i,F,G,n,s,h]),Q=react.useCallback(()=>{g(null),T();},[T]);react.useEffect(()=>(T(),h),[T,h]),react.useEffect(()=>h,[h]);let Y=l?l.length>o?novaCore.textCenterEllipsis(l,t,t):l:r?novaCore.textCenterEllipsis(r,t,t):void 0;return {ensName:l,ensAvatar:O,isLoading:y,ensNameAbbreviated:Y,error:x,retry:Q}}var P=class extends Error{constructor(t="useNovaConnect must be used within NovaConnectProvider"){super(t),this.name="NovaConnectProviderError";}},R=react.createContext(void 0),ye=()=>{let e=react.useContext(R);if(!e)throw new P;return e},he=()=>react.useContext(R)!==void 0,Ae=()=>react.useContext(R)??null;var oe=react.createContext(chunkMGBN4EIT_cjs.a),V=()=>react.useContext(oe),Oe=e=>V()[e],we=e=>{let t=V(),o={};for(let n of e)o[n]=t[n];return o},Te=(e,t)=>!!e[t]?.trim(),ke=e=>{let t=V(),n={actions:["connectWallet","disconnect","connecting","connected","tryAgain","back","connect","close"],states:["success","error","replaced","loading","idle"],accessibility:["chainSelector","closeModal","selectChain","walletControls","openWalletModal"],transactions:["transactionLoading","transactionSuccess","transactionError","transactionReplaced","recent"]}[e],s={};for(let a of n)s[a]=t[a];return s},Ee=e=>e===chunkMGBN4EIT_cjs.a,Ie=(e,t,o)=>{let n=e[t];return n&&n.trim()?n:o||chunkMGBN4EIT_cjs.a[t]||t.toString()},Be=(e,t)=>{let o={};for(let n of t)o[n]=e[n];return o};function Ve(e){let t=chunkV6XDFRWV_cjs.d(r=>r.activeConnection),{signIn:o,signOut:n}=siwxReact.useSiwx(),s=react.useCallback(async(r,u)=>{let i=r??t;if(!i?.address||!i?.chainId)throw new Error("[useNovaSiwx] No active connection available.");if(!i.signMessage)throw new Error("[useNovaSiwx] Connection missing signMessage capability.");let l=u??e?.verifier;if(!l)throw new Error("[useNovaSiwx] Verifier callback required to complete SIWX sign in.");let f={address:String(i.address),chainId:i.chainId,signMessage:i.signMessage,isConnected:i.isConnected},O=siwxReact.getSatelliteSiwxFields(f,e);return o({signer:i.signMessage,verifier:l,fields:O})},[t,o,e]),a=e?.destroyer,c=react.useCallback(async()=>{if(n(),a)try{await a();}catch(r){console.warn("[useNovaSiwx] Failed to execute session destroyer on signOut:",r);}},[n,a]);return {signIn:s,signOut:c}}var b={[orbitCore.OrbitAdapter.EVM]:1,[orbitCore.OrbitAdapter.SOLANA]:"mainnet",[orbitCore.OrbitAdapter.Starknet]:"0x534e5f4d41494e"};function Ge({selectedAdapter:e,appChains:t,solanaRPCUrls:o}){switch(e){case orbitCore.OrbitAdapter.EVM:{let n=t?.[0];return n?.id&&typeof n.id=="number"?n.id:(process.env.NODE_ENV==="development"&&!t?.length&&console.warn("getConnectChainId: No EVM chains configured, using Ethereum Mainnet"),b[orbitCore.OrbitAdapter.EVM])}case orbitCore.OrbitAdapter.SOLANA:{if(o&&typeof o=="object"){let n=Object.keys(o);if(n.length>0)return n[0]}return process.env.NODE_ENV==="development"&&!o&&console.warn("getConnectChainId: No Solana RPC URLs configured, using mainnet"),b[orbitCore.OrbitAdapter.SOLANA]}case orbitCore.OrbitAdapter.Starknet:return process.env.NODE_ENV==="development"&&console.info("getConnectChainId: Using default Starknet chain ID"),b[orbitCore.OrbitAdapter.Starknet];default:return process.env.NODE_ENV==="development"&&console.error("getConnectChainId: Unknown adapter:",e),b[orbitCore.OrbitAdapter.EVM]}}function Ke({selectedAdapter:e,appChains:t,solanaRPCUrls:o}){switch(e){case orbitCore.OrbitAdapter.EVM:return t?.map(n=>n.id).filter(Boolean)??[b[orbitCore.OrbitAdapter.EVM]];case orbitCore.OrbitAdapter.SOLANA:return o?Object.keys(o):[b[orbitCore.OrbitAdapter.SOLANA]];case orbitCore.OrbitAdapter.Starknet:return [b[orbitCore.OrbitAdapter.Starknet]];default:return [b[orbitCore.OrbitAdapter.EVM]]}}function se(e,t){if(!e||typeof e!="object")return null;let o=e;if(!o.name||typeof o.name!="string")return null;let n;if("icon"in o){let s=o.icon;if(typeof s=="string")n=s;else if(s&&typeof s=="object"&&"toString"in s&&typeof s.toString=="function")try{n=s.toString();}catch{}}return {name:o.name,icon:n,adapter:t,originalConnector:o}}function $({connectors:e,excludeConnectors:t=["injected"]}={connectors:{}}){if(!e||Object.keys(e).length===0)return [];let o=new Set(t.map(a=>orbitCore.formatConnectorName(a))),n=[];Object.entries(e).forEach(([a,c])=>{if(Array.isArray(c)){let r=a;c.forEach(u=>{let i=se(u,r);if(i){let l=orbitCore.formatConnectorName(i.name);o.has(l)||n.push(i);}});}});let s=new Map;return n.forEach(a=>{let c=orbitCore.formatConnectorName(a.name);s.has(c)||s.set(c,{name:a.name,icon:a.icon,adapters:[],connectors:[]});let r=s.get(c);r.adapters.includes(a.adapter)||r.adapters.push(a.adapter);let u=Object.assign({},a.originalConnector,{adapter:a.adapter});r.connectors.push(u),!r.icon&&a.icon&&(r.icon=a.icon);}),Array.from(s.values()).sort((a,c)=>a.name.localeCompare(c.name,void 0,{sensitivity:"base"}))}function $e(e){return Object.values(e).some(t=>Array.isArray(t)&&t.length>0)}function ie(e){try{if(e&&typeof e=="object"&&e.adapter)return e.adapter}catch{}}function H(e,t){return ie(e)===t}function ze({connectors:e,selectedAdapter:t}){if(!e||Object.keys(e).length===0)return [];let o=$({connectors:e});return t?o.filter(n=>n.adapters.includes(t)&&n.connectors.some(s=>H(s,t))).map(n=>{let s=n.connectors.filter(a=>H(a,t));return {...n,adapters:[t],connectors:s}}).filter(n=>n.connectors.length>0):o}function Je(e,t){let o=e[t];return Array.isArray(o)&&o.length>0}function ct(){return console.warn("getAvailableSolanaClusters: Using synchronous fallback with limited functionality. Use getAvailableSolanaClustersAsync for complete cluster detection."),[]}function lt(e){return console.warn("isValidSolanaCluster: Using synchronous fallback with basic validation. Use isValidSolanaClusterAsync for comprehensive cluster validation."),["mainnet","devnet","testnet","localnet"].includes(e)}function xt({activeConnection:e,appChains:t,solanaRPCUrls:o}){let[n,s]=react.useState([]),[a,c]=react.useState(false);return react.useEffect(()=>{let r=true;return (async()=>{c(true);try{if(!e){let f=await chunkK44IHM6B_cjs.a({connectorType:`${orbitCore.OrbitAdapter.EVM}:not-connected`,appChains:t,solanaRPCUrls:o,chains:[]});r&&s(f);return}let i=chunkK44IHM6B_cjs.i(e),l=await chunkK44IHM6B_cjs.a({connectorType:e.connectorType,appChains:t,solanaRPCUrls:o,chains:i});r&&s(l);}catch(i){console.error("Failed to fetch chains list:",i),r&&s([]);}finally{r&&c(false);}})(),()=>{r=false;}},[e,t,o]),{chainsList:n,isLoading:a}}function wt(){let[e,t]=react.useState({}),[o,n]=react.useState(false),s=react.useRef(null),a=chunkV6XDFRWV_cjs.d(p=>p.activeConnection),c=chunkV6XDFRWV_cjs.d(p=>p.getAdapter),r=a?.chainId&&a?.address?`${a.address}-${a.chainId}`:null,u=a?.connectorType?c(orbitCore.getAdapterFromConnectorType(a.connectorType)):null,i=u&&"getBalance"in u&&typeof u.getBalance=="function",l=react.useCallback(async(p=false)=>{if(!a?.address||!u||!a?.chainId||!r||!i){n(false);return}let y=`${r}-${Date.now()}`;if(s.current=y,!p&&e[r]){n(false);return}n(true);try{let C=await u.getBalance(a.address,a.chainId);s.current===y&&t(x=>({...x,[r]:C}));}catch(C){console.error(`Failed to fetch native balance for ${r}:`,C),p&&s.current===y&&t(x=>{let g={...x};return delete g[r],g});}finally{s.current===y&&n(false);}},[a,u,r,i,e]),f=react.useCallback(()=>{l(true);},[l]);return react.useEffect(()=>{r&&i&&!e[r]?l(false):(!r||!i)&&n(false);},[r,i,e,l]),react.useEffect(()=>()=>{s.current=null;},[]),{balance:r&&e[r]||null,isLoading:o,refetch:f}}exports.a=be;exports.b=P;exports.c=R;exports.d=ye;exports.e=he;exports.f=Ae;exports.g=oe;exports.h=V;exports.i=Oe;exports.j=we;exports.k=Te;exports.l=ke;exports.m=Ee;exports.n=Ie;exports.o=Be;exports.p=Ve;exports.q=Ge;exports.r=Ke;exports.s=$;exports.t=$e;exports.u=ze;exports.v=Je;exports.w=ct;exports.x=lt;exports.y=xt;exports.z=wt;
@@ -0,0 +1 @@
1
+ import {a as a$1,i}from'./chunk-S3IRVZMG.js';import {a}from'./chunk-NQ5AECZQ.js';import {d}from'./chunk-EYP534IS.js';import {textCenterEllipsis}from'@tuwaio/nova-core';import {OrbitAdapter,getAdapterFromConnectorType,formatConnectorName}from'@tuwaio/orbit-core';import {createContext,useState,useRef,useCallback,useEffect,useContext}from'react';import {useSiwx,getSatelliteSiwxFields}from'@tuwaio/siwx-react';function be(e){let{abbreviateSymbols:t=12,maxNameLength:o=30,autoRetry:n=false,retryDelay:s=3e3}=e,a=d(L=>L.activeConnection),c=d(L=>L.getAdapter),r=a?.address,u=a?.connectorType,i=u?c(getAdapterFromConnectorType(u)):null,[l,f]=useState(null),[O,p]=useState(null),[y,C]=useState(false),[x,g]=useState(null),N=useRef(null),w=useRef(null),F=!!(i&&"getName"in i&&typeof i.getName=="function"),G=!!(i&&"getAvatar"in i&&typeof i.getAvatar=="function"),h=useCallback(()=>{N.current&&(N.current.abort(),N.current=null),w.current!==null&&(clearTimeout(w.current),w.current=null);},[]),T=useCallback(async function L(){if(h(),!r||!i||!F){f(null),p(null),C(false),g(null);return}N.current=new AbortController;let{signal:A}=N.current;C(true),g(null),f(null),p(null);try{if(A.aborted)return;let v=await i.getName?.(r);if(A.aborted)return;if(v&&(f(v),G))try{let S=await i.getAvatar?.(v);A.aborted||p(S??null);}catch(S){console.warn("Failed to fetch avatar:",S),A.aborted||p(null);}}catch(v){if(A.aborted)return;let S=v instanceof Error?v.message:"Failed to fetch name service data";console.error("Failed to fetch name service data:",v),g(S),f(null),p(null),n&&(w.current=setTimeout(()=>{L();},s));}finally{A.aborted||C(false);}},[r,i,F,G,n,s,h]),Q=useCallback(()=>{g(null),T();},[T]);useEffect(()=>(T(),h),[T,h]),useEffect(()=>h,[h]);let Y=l?l.length>o?textCenterEllipsis(l,t,t):l:r?textCenterEllipsis(r,t,t):void 0;return {ensName:l,ensAvatar:O,isLoading:y,ensNameAbbreviated:Y,error:x,retry:Q}}var P=class extends Error{constructor(t="useNovaConnect must be used within NovaConnectProvider"){super(t),this.name="NovaConnectProviderError";}},R=createContext(void 0),ye=()=>{let e=useContext(R);if(!e)throw new P;return e},he=()=>useContext(R)!==void 0,Ae=()=>useContext(R)??null;var oe=createContext(a),V=()=>useContext(oe),Oe=e=>V()[e],we=e=>{let t=V(),o={};for(let n of e)o[n]=t[n];return o},Te=(e,t)=>!!e[t]?.trim(),ke=e=>{let t=V(),n={actions:["connectWallet","disconnect","connecting","connected","tryAgain","back","connect","close"],states:["success","error","replaced","loading","idle"],accessibility:["chainSelector","closeModal","selectChain","walletControls","openWalletModal"],transactions:["transactionLoading","transactionSuccess","transactionError","transactionReplaced","recent"]}[e],s={};for(let a of n)s[a]=t[a];return s},Ee=e=>e===a,Ie=(e,t,o)=>{let n=e[t];return n&&n.trim()?n:o||a[t]||t.toString()},Be=(e,t)=>{let o={};for(let n of t)o[n]=e[n];return o};function Ve(e){let t=d(r=>r.activeConnection),{signIn:o,signOut:n}=useSiwx(),s=useCallback(async(r,u)=>{let i=r??t;if(!i?.address||!i?.chainId)throw new Error("[useNovaSiwx] No active connection available.");if(!i.signMessage)throw new Error("[useNovaSiwx] Connection missing signMessage capability.");let l=u??e?.verifier;if(!l)throw new Error("[useNovaSiwx] Verifier callback required to complete SIWX sign in.");let f={address:String(i.address),chainId:i.chainId,signMessage:i.signMessage,isConnected:i.isConnected},O=getSatelliteSiwxFields(f,e);return o({signer:i.signMessage,verifier:l,fields:O})},[t,o,e]),a=e?.destroyer,c=useCallback(async()=>{if(n(),a)try{await a();}catch(r){console.warn("[useNovaSiwx] Failed to execute session destroyer on signOut:",r);}},[n,a]);return {signIn:s,signOut:c}}var b={[OrbitAdapter.EVM]:1,[OrbitAdapter.SOLANA]:"mainnet",[OrbitAdapter.Starknet]:"0x534e5f4d41494e"};function Ge({selectedAdapter:e,appChains:t,solanaRPCUrls:o}){switch(e){case OrbitAdapter.EVM:{let n=t?.[0];return n?.id&&typeof n.id=="number"?n.id:(process.env.NODE_ENV==="development"&&!t?.length&&console.warn("getConnectChainId: No EVM chains configured, using Ethereum Mainnet"),b[OrbitAdapter.EVM])}case OrbitAdapter.SOLANA:{if(o&&typeof o=="object"){let n=Object.keys(o);if(n.length>0)return n[0]}return process.env.NODE_ENV==="development"&&!o&&console.warn("getConnectChainId: No Solana RPC URLs configured, using mainnet"),b[OrbitAdapter.SOLANA]}case OrbitAdapter.Starknet:return process.env.NODE_ENV==="development"&&console.info("getConnectChainId: Using default Starknet chain ID"),b[OrbitAdapter.Starknet];default:return process.env.NODE_ENV==="development"&&console.error("getConnectChainId: Unknown adapter:",e),b[OrbitAdapter.EVM]}}function Ke({selectedAdapter:e,appChains:t,solanaRPCUrls:o}){switch(e){case OrbitAdapter.EVM:return t?.map(n=>n.id).filter(Boolean)??[b[OrbitAdapter.EVM]];case OrbitAdapter.SOLANA:return o?Object.keys(o):[b[OrbitAdapter.SOLANA]];case OrbitAdapter.Starknet:return [b[OrbitAdapter.Starknet]];default:return [b[OrbitAdapter.EVM]]}}function se(e,t){if(!e||typeof e!="object")return null;let o=e;if(!o.name||typeof o.name!="string")return null;let n;if("icon"in o){let s=o.icon;if(typeof s=="string")n=s;else if(s&&typeof s=="object"&&"toString"in s&&typeof s.toString=="function")try{n=s.toString();}catch{}}return {name:o.name,icon:n,adapter:t,originalConnector:o}}function $({connectors:e,excludeConnectors:t=["injected"]}={connectors:{}}){if(!e||Object.keys(e).length===0)return [];let o=new Set(t.map(a=>formatConnectorName(a))),n=[];Object.entries(e).forEach(([a,c])=>{if(Array.isArray(c)){let r=a;c.forEach(u=>{let i=se(u,r);if(i){let l=formatConnectorName(i.name);o.has(l)||n.push(i);}});}});let s=new Map;return n.forEach(a=>{let c=formatConnectorName(a.name);s.has(c)||s.set(c,{name:a.name,icon:a.icon,adapters:[],connectors:[]});let r=s.get(c);r.adapters.includes(a.adapter)||r.adapters.push(a.adapter);let u=Object.assign({},a.originalConnector,{adapter:a.adapter});r.connectors.push(u),!r.icon&&a.icon&&(r.icon=a.icon);}),Array.from(s.values()).sort((a,c)=>a.name.localeCompare(c.name,void 0,{sensitivity:"base"}))}function $e(e){return Object.values(e).some(t=>Array.isArray(t)&&t.length>0)}function ie(e){try{if(e&&typeof e=="object"&&e.adapter)return e.adapter}catch{}}function H(e,t){return ie(e)===t}function ze({connectors:e,selectedAdapter:t}){if(!e||Object.keys(e).length===0)return [];let o=$({connectors:e});return t?o.filter(n=>n.adapters.includes(t)&&n.connectors.some(s=>H(s,t))).map(n=>{let s=n.connectors.filter(a=>H(a,t));return {...n,adapters:[t],connectors:s}}).filter(n=>n.connectors.length>0):o}function Je(e,t){let o=e[t];return Array.isArray(o)&&o.length>0}function ct(){return console.warn("getAvailableSolanaClusters: Using synchronous fallback with limited functionality. Use getAvailableSolanaClustersAsync for complete cluster detection."),[]}function lt(e){return console.warn("isValidSolanaCluster: Using synchronous fallback with basic validation. Use isValidSolanaClusterAsync for comprehensive cluster validation."),["mainnet","devnet","testnet","localnet"].includes(e)}function xt({activeConnection:e,appChains:t,solanaRPCUrls:o}){let[n,s]=useState([]),[a,c]=useState(false);return useEffect(()=>{let r=true;return (async()=>{c(true);try{if(!e){let f=await a$1({connectorType:`${OrbitAdapter.EVM}:not-connected`,appChains:t,solanaRPCUrls:o,chains:[]});r&&s(f);return}let i$1=i(e),l=await a$1({connectorType:e.connectorType,appChains:t,solanaRPCUrls:o,chains:i$1});r&&s(l);}catch(i){console.error("Failed to fetch chains list:",i),r&&s([]);}finally{r&&c(false);}})(),()=>{r=false;}},[e,t,o]),{chainsList:n,isLoading:a}}function wt(){let[e,t]=useState({}),[o,n]=useState(false),s=useRef(null),a=d(p=>p.activeConnection),c=d(p=>p.getAdapter),r=a?.chainId&&a?.address?`${a.address}-${a.chainId}`:null,u=a?.connectorType?c(getAdapterFromConnectorType(a.connectorType)):null,i=u&&"getBalance"in u&&typeof u.getBalance=="function",l=useCallback(async(p=false)=>{if(!a?.address||!u||!a?.chainId||!r||!i){n(false);return}let y=`${r}-${Date.now()}`;if(s.current=y,!p&&e[r]){n(false);return}n(true);try{let C=await u.getBalance(a.address,a.chainId);s.current===y&&t(x=>({...x,[r]:C}));}catch(C){console.error(`Failed to fetch native balance for ${r}:`,C),p&&s.current===y&&t(x=>{let g={...x};return delete g[r],g});}finally{s.current===y&&n(false);}},[a,u,r,i,e]),f=useCallback(()=>{l(true);},[l]);return useEffect(()=>{r&&i&&!e[r]?l(false):(!r||!i)&&n(false);},[r,i,e,l]),useEffect(()=>()=>{s.current=null;},[]),{balance:r&&e[r]||null,isLoading:o,refetch:f}}export{be as a,P as b,R as c,ye as d,he as e,Ae as f,oe as g,V as h,Oe as i,we as j,Te as k,ke as l,Ee as m,Ie as n,Be as o,Ve as p,Ge as q,Ke as r,$ as s,$e as t,ze as u,Je as v,ct as w,lt as x,xt as y,wt as z};