@gala-chain/launchpad-sdk 5.0.4-beta.20 → 5.0.4-beta.21

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/react.cjs.js DELETED
@@ -1 +0,0 @@
1
- "use strict";var e,t=require("react/jsx-runtime"),n=require("react"),s=require("ethers");class r extends Error{constructor(e,t,n){super(e),this.code=t,this.originalError=n,this.name="WalletProviderError"}}!function(e){e.USER_REJECTED="USER_REJECTED",e.NOT_CONNECTED="NOT_CONNECTED",e.CONNECTION_FAILED="CONNECTION_FAILED",e.SIGNING_FAILED="SIGNING_FAILED",e.PROVIDER_NOT_AVAILABLE="PROVIDER_NOT_AVAILABLE",e.PRIVATE_KEY_NOT_ACCESSIBLE="PRIVATE_KEY_NOT_ACCESSIBLE",e.INVALID_CONFIG="INVALID_CONFIG",e.CHAIN_MISMATCH="CHAIN_MISMATCH",e.UNKNOWN="UNKNOWN"}(e||(e={}));const i=4001,o=4100,a=4900,c=4901;class d{constructor(t){if(this.providerType="external",this.connectedAddress=null,this.accountsChangedHandler=null,this.disconnectHandler=null,null==t)throw new r("EIP-1193 provider is required",e.PROVIDER_NOT_AVAILABLE);this.provider=t,this.setupEventListeners()}setupEventListeners(){"function"==typeof this.provider.on&&(this.accountsChangedHandler=e=>{0===e.length?this.connectedAddress=null:this.connectedAddress=s.getAddress(e[0])},this.provider.on("accountsChanged",this.accountsChangedHandler),this.disconnectHandler=()=>{this.connectedAddress=null},this.provider.on("disconnect",this.disconnectHandler))}removeEventListeners(){"function"==typeof this.provider.removeListener&&(this.accountsChangedHandler&&(this.provider.removeListener("accountsChanged",this.accountsChangedHandler),this.accountsChangedHandler=null),this.disconnectHandler&&(this.provider.removeListener("disconnect",this.disconnectHandler),this.disconnectHandler=null))}handleProviderError(t,n){const s=t;if(s.code===i)throw new r(`User rejected ${n}`,e.USER_REJECTED,t instanceof Error?t:void 0);if(s.code===o)throw new r("Wallet is not authorized",e.NOT_CONNECTED,t instanceof Error?t:void 0);if(s.code===a||s.code===c)throw this.connectedAddress=null,new r("Wallet disconnected",e.NOT_CONNECTED,t instanceof Error?t:void 0);throw new r(s.message??`${n} failed`,n.includes("sign")?e.SIGNING_FAILED:e.UNKNOWN,t instanceof Error?t:void 0)}ensureConnected(){if(null===this.connectedAddress||void 0===this.connectedAddress)throw new r("Wallet is not connected. Call connect() first.",e.NOT_CONNECTED)}async connect(){try{const t=await this.provider.request({method:"eth_requestAccounts"});if(null==t||0===t.length)throw new r("No accounts returned from wallet",e.CONNECTION_FAILED);return this.connectedAddress=s.getAddress(t[0]),this.connectedAddress}catch(e){if(e instanceof r)throw e;return this.handleProviderError(e,"connect")}}async disconnect(){this.connectedAddress=null,this.removeEventListeners();try{await this.provider.request({method:"wallet_revokePermissions",params:[{eth_accounts:{}}]})}catch{}}isConnected(){return null!==this.connectedAddress}async signMessage(e){this.ensureConnected();try{const t=`0x${Buffer.from(e,"utf8").toString("hex")}`;return await this.provider.request({method:"personal_sign",params:[t,this.connectedAddress]})}catch(e){if(e instanceof r)throw e;return this.handleProviderError(e,"sign message")}}async signTypedData(e,t,n){this.ensureConnected();try{const s={types:{EIP712Domain:this.getEIP712DomainType(e),...t},primaryType:Object.keys(t)[0],domain:this.serializeDomain(e),message:n};return await this.provider.request({method:"eth_signTypedData_v4",params:[this.connectedAddress,JSON.stringify(s)]})}catch(e){if(e instanceof r)throw e;return this.handleProviderError(e,"sign typed data")}}getEIP712DomainType(e){const t=[];return void 0!==e.name&&t.push({name:"name",type:"string"}),void 0!==e.version&&t.push({name:"version",type:"string"}),void 0!==e.chainId&&t.push({name:"chainId",type:"uint256"}),void 0!==e.verifyingContract&&t.push({name:"verifyingContract",type:"address"}),void 0!==e.salt&&t.push({name:"salt",type:"bytes32"}),t}serializeDomain(e){const t={};return void 0!==e.name&&(t.name=e.name),void 0!==e.version&&(t.version=e.version),void 0!==e.chainId&&(t.chainId="bigint"==typeof e.chainId||"number"==typeof e.chainId?`0x${e.chainId.toString(16)}`:e.chainId),void 0!==e.verifyingContract&&(t.verifyingContract=e.verifyingContract),void 0!==e.salt&&(t.salt=e.salt),t}async getAddress(){return this.ensureConnected(),this.connectedAddress}async getGalaAddress(){return`eth|${(await this.getAddress()).slice(2)}`}async getPrivateKey(){throw new r("Private key is not accessible with external wallet providers. Use PrivateKeyProvider if you need private key access for @gala-chain operations.",e.PRIVATE_KEY_NOT_ACCESSIBLE)}getProvider(){return this.provider}}class l{constructor(t){if(this.providerType="external",this.connectedAddress=null,this.accountsChangedHandler=null,this.disconnectHandler=null,null==t)throw new r("Gala Wallet provider is required",e.PROVIDER_NOT_AVAILABLE);this.provider=t,this.setupEventListeners()}setupEventListeners(){"function"==typeof this.provider.on&&(this.accountsChangedHandler=e=>{0===e.length?this.connectedAddress=null:this.connectedAddress=s.getAddress(e[0])},this.provider.on("accountsChanged",this.accountsChangedHandler),this.disconnectHandler=()=>{this.connectedAddress=null},this.provider.on("disconnect",this.disconnectHandler))}removeEventListeners(){"function"==typeof this.provider.removeListener&&(this.accountsChangedHandler&&(this.provider.removeListener("accountsChanged",this.accountsChangedHandler),this.accountsChangedHandler=null),this.disconnectHandler&&(this.provider.removeListener("disconnect",this.disconnectHandler),this.disconnectHandler=null))}parseGalaError(e){if(e instanceof Error)try{const t=JSON.parse(e.message);if("object"==typeof t&&null!==t){const n=t,s={message:"string"==typeof n.message?n.message:e.message};return"number"==typeof n.code&&(s.code=n.code),s}return{message:e.message}}catch{return{message:e.message}}return{message:String(e)}}handleProviderError(t,n){const s=this.parseGalaError(t);if(4001===s.code)throw new r(`User rejected ${n}`,e.USER_REJECTED,t instanceof Error?t:void 0);if(4900===s.code)throw this.connectedAddress=null,new r("Wallet disconnected",e.NOT_CONNECTED,t instanceof Error?t:void 0);throw new r(void 0!==s.message&&""!==s.message?s.message:`${n} failed`,n.includes("sign")?e.SIGNING_FAILED:e.UNKNOWN,t instanceof Error?t:void 0)}ensureConnected(){if(null===this.connectedAddress||void 0===this.connectedAddress)throw new r("Wallet is not connected. Call connect() first.",e.NOT_CONNECTED)}async connect(){try{const t=await this.provider.request({method:"eth_requestAccounts"});if(null==t||0===t.length)throw new r("No accounts returned from Gala Wallet",e.CONNECTION_FAILED);return this.connectedAddress=s.getAddress(t[0]),this.connectedAddress}catch(e){if(e instanceof r)throw e;return this.handleProviderError(e,"connect")}}async disconnect(){this.connectedAddress=null,this.removeEventListeners();try{await this.provider.disconnect()}catch{}}isConnected(){return null!==this.connectedAddress}async signMessage(e){this.ensureConnected();try{await this.provider.setAddress(this.connectedAddress);const t=`0x${Buffer.from(e,"utf8").toString("hex")}`;return await this.provider.request({method:"personal_sign",params:[t,this.connectedAddress]})}catch(e){if(e instanceof r)throw e;return this.handleProviderError(e,"sign message")}}async signTypedData(e,t,n){this.ensureConnected();try{await this.provider.setAddress(this.connectedAddress);const s={types:{EIP712Domain:this.getEIP712DomainType(e),...t},primaryType:Object.keys(t)[0],domain:this.serializeDomain(e),message:n};return await this.provider.request({method:"eth_signTypedData_v4",params:[this.connectedAddress,JSON.stringify(s)]})}catch(e){if(e instanceof r)throw e;return this.handleProviderError(e,"sign typed data")}}getEIP712DomainType(e){const t=[];return void 0!==e.name&&t.push({name:"name",type:"string"}),void 0!==e.version&&t.push({name:"version",type:"string"}),void 0!==e.chainId&&t.push({name:"chainId",type:"uint256"}),void 0!==e.verifyingContract&&t.push({name:"verifyingContract",type:"address"}),void 0!==e.salt&&t.push({name:"salt",type:"bytes32"}),t}serializeDomain(e){const t={};return void 0!==e.name&&(t.name=e.name),void 0!==e.version&&(t.version=e.version),void 0!==e.chainId&&(t.chainId="bigint"==typeof e.chainId||"number"==typeof e.chainId?`0x${e.chainId.toString(16)}`:e.chainId),void 0!==e.verifyingContract&&(t.verifyingContract=e.verifyingContract),void 0!==e.salt&&(t.salt=e.salt),t}async getAddress(){return this.ensureConnected(),this.connectedAddress}async getGalaAddress(){return`eth|${(await this.getAddress()).slice(2)}`}async getPrivateKey(){throw new r("Private key is not accessible with Gala Wallet. Use PrivateKeyProvider if you need private key access for @gala-chain operations.",e.PRIVATE_KEY_NOT_ACCESSIBLE)}getProvider(){return this.provider}}const h={METAMASK:"io.metamask",METAMASK_FLASK:"io.metamask.flask",COINBASE:"com.coinbase.wallet",TRUST_WALLET:"com.trustwallet.app",PHANTOM:"app.phantom",RAINBOW:"me.rainbow",OKX:"com.okex.wallet",RABBY:"io.rabby",BRAVE:"com.brave.wallet",FRAME:"sh.frame",LEDGER:"com.ledger",ZERION:"io.zerion.wallet",GALA:"com.gala.wallet"},u={[h.METAMASK]:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIxLjU0IDQuMjJsLTguMzQgNi4yMSAxLjU0LTMuNjUtLTUuNTMtMi41MXoiIGZpbGw9IiNFMjc2MUIiLz48L3N2Zz4="};function v(){return"undefined"!=typeof window&&"function"==typeof window.dispatchEvent}async function w(e=500){const t=[],n=new Map;return v()?new Promise(s=>{const r=new Set,i=e=>{const s=e,{info:i,provider:o}=s.detail;if(r.has(i.uuid))return;r.add(i.uuid);const a={id:(i.rdns?.length??0)>0?i.rdns:i.uuid,name:i.name,rdns:(i.rdns?.length??0)>0?i.rdns:i.uuid,icon:i.icon??u[i.rdns??""]??"",provider:o,isInjected:!1};t.push(a),n.set(a.id,a)};window.addEventListener("eip6963:announceProvider",i),window.dispatchEvent(new Event("eip6963:requestProvider")),setTimeout(()=>{if(window.removeEventListener("eip6963:announceProvider",i),0===t.length){const e=v()?window.ethereum??null:null;if(e){const s=window;let r="Browser Wallet",i="injected";s.ethereum?.isMetaMask?(r="MetaMask",i=h.METAMASK):s.ethereum?.isCoinbaseWallet?(r="Coinbase Wallet",i=h.COINBASE):s.ethereum?.isTrust&&(r="Trust Wallet",i=h.TRUST_WALLET);const o={id:i,name:r,rdns:i,icon:u[i]??"",provider:e,isInjected:!0};t.push(o),n.set(o.id,o)}}s({wallets:t,byId:n,hasWallets:t.length>0,primary:t[0]})},e)}):{wallets:t,byId:n,hasWallets:!1}}const g={provider:null,address:null,galaAddress:null,isConnected:!1,isConnecting:!1,isDetecting:!1,error:null,detectedWallets:[],connect:async()=>{throw new Error("WalletContext not initialized")},connectDetected:async()=>{throw new Error("WalletContext not initialized")},disconnect:async()=>{throw new Error("WalletContext not initialized")},setProvider:()=>{throw new Error("WalletContext not initialized")},refreshWallets:async()=>{throw new Error("WalletContext not initialized")},clearError:()=>{throw new Error("WalletContext not initialized")}},E=n.createContext(g),p="undefined"!=typeof window;function y(){const e=n.useContext(E);if(e===g)throw new Error("useWalletContext must be used within a WalletProvider");return e}class f{constructor(t){this.providerType="privateKey",this.connected=!0;try{this.wallet=new s.Wallet(t)}catch(t){throw new r("Invalid private key provided",e.INVALID_CONFIG,t instanceof Error?t:void 0)}}static fromWallet(e){return new f(e.privateKey)}async signMessage(t){try{return await this.wallet.signMessage(t)}catch(t){throw new r("Failed to sign message",e.SIGNING_FAILED,t instanceof Error?t:void 0)}}async signTypedData(t,n,s){try{return await this.wallet.signTypedData(t,n,s)}catch(t){throw new r("Failed to sign typed data",e.SIGNING_FAILED,t instanceof Error?t:void 0)}}async getAddress(){return s.getAddress(this.wallet.address)}async getGalaAddress(){return`eth|${(await this.getAddress()).slice(2)}`}async connect(){return this.connected=!0,this.getAddress()}async disconnect(){this.connected=!1}isConnected(){return this.connected}async getPrivateKey(){return this.wallet.privateKey}getWallet(){return this.wallet}}let A=null;async function C(){if(!1===A)return null;try{const e=await import("@gala-chain/connect");return A=!0,e}catch{return A=!1,null}}class m{constructor(t){if(this.providerType="external",this.connectedAddress=null,null==t)throw new r("@gala-chain/connect client is required",e.INVALID_CONFIG);if("function"!=typeof t.signMessage)throw new r("Invalid @gala-chain/connect client: signMessage method is required",e.INVALID_CONFIG);this.client=t}static async createBrowserClient(t){const n=await C();if(null==n)throw new r("Failed to create BrowserConnectClient: @gala-chain/connect is not installed. Install it with: npm install @gala-chain/connect",e.PROVIDER_NOT_AVAILABLE);const{BrowserConnectClient:s}=n,i=s,o=t?new i(t):new i;return new m(o)}static async createTrustWalletClient(){const t=await C();if(null==t)throw new r("Failed to create TrustWalletConnectClient: @gala-chain/connect is not installed. Install it with: npm install @gala-chain/connect",e.PROVIDER_NOT_AVAILABLE);const{TrustWalletConnectClient:n}=t,s=new n;return new m(s)}static async isAvailable(){return null!==await C()}ensureConnected(){if(null===this.connectedAddress||void 0===this.connectedAddress)throw new r("Wallet is not connected. Call connect() first.",e.NOT_CONNECTED)}async connect(){try{if("function"==typeof this.client.connect){const e=await this.client.connect();if(null!=e&&e.length>0)return this.connectedAddress=s.getAddress(e),this.connectedAddress}if("function"==typeof this.client.getAccount){const e=await this.client.getAccount();if(null!=e&&e.length>0)return this.connectedAddress=s.getAddress(e),this.connectedAddress}throw new r("Failed to connect: no account returned",e.CONNECTION_FAILED)}catch(t){if(t instanceof r)throw t;const n=t instanceof Error?t.message:String(t);if(n.length>0&&(n.includes("rejected")||n.includes("denied")))throw new r("User rejected connection",e.USER_REJECTED,t instanceof Error?t:void 0);throw new r("Failed to connect to wallet",e.CONNECTION_FAILED,t instanceof Error?t:void 0)}}async disconnect(){"function"==typeof this.client.disconnect&&await this.client.disconnect(),this.connectedAddress=null}isConnected(){return null!==this.connectedAddress}async signMessage(t){this.ensureConnected();try{return await this.client.signMessage(t)}catch(t){const n=t instanceof Error?t.message:String(t);if(n.includes("rejected")||n.includes("denied"))throw new r("User rejected signing",e.USER_REJECTED,t instanceof Error?t:void 0);throw new r("Failed to sign message",e.SIGNING_FAILED,t instanceof Error?t:void 0)}}async signTypedData(t,n,s){throw new r("signTypedData is not supported by GalaChainConnectProvider. Use ExternalWalletProvider with the underlying EIP-1193 provider instead.",e.SIGNING_FAILED)}async getAddress(){return this.ensureConnected(),this.connectedAddress}async getGalaAddress(){return`eth|${(await this.getAddress()).slice(2)}`}async getPrivateKey(){throw new r("Private key is not accessible with @gala-chain/connect. Use PrivateKeyProvider if you need private key access.",e.PRIVATE_KEY_NOT_ACCESSIBLE)}getClient(){return this.client}}exports.ExternalWalletProvider=d,exports.GalaChainConnectProvider=m,exports.KNOWN_WALLET_RDNS=h,exports.PrivateKeyProvider=f,exports.WalletContext=E,exports.WalletProvider=function({children:e,autoDetect:s=p,initialProvider:r,autoConnect:i=!0,onConnect:o,onDisconnect:a,onError:c}){const[u,g]=n.useState(r??null),[y,f]=n.useState(null),[A,C]=n.useState(null),[m,I]=n.useState(!1),[N,T]=n.useState(!1),[L,_]=n.useState(null),[D,O]=n.useState([]),P=null!==u&&null!==y,W=n.useCallback(()=>{_(null)},[]),S=n.useCallback(e=>{g(e),e||(f(null),C(null))},[]),M=n.useCallback(async e=>{I(!0),_(null);try{e.isConnected()||await e.connect();const t=await e.getAddress(),n=await e.getGalaAddress();return g(e),f(t),C(n),o?.(t,e),t}catch(e){const t=e instanceof Error?e:new Error(String(e));throw _(t),c?.(t),t}finally{I(!1)}},[o,c]),G=n.useCallback(async e=>{if(e.rdns===h.GALA){const t=new l(e.provider);return M(t)}const t=new d(e.provider);return M(t)},[M]),x=n.useCallback(async()=>{if(u)try{await u.disconnect()}catch{}g(null),f(null),C(null),_(null),a?.()},[u,a]),R=n.useCallback(async()=>{if(p){T(!0);try{let e=[...(await w()).wallets];const t=window;if(void 0!==t.gala&&!e.some(e=>e.rdns===h.GALA)){e=[{id:h.GALA,name:"Gala Wallet",rdns:h.GALA,icon:"",provider:t.gala,isInjected:!0},...e]}O(e)}catch{O([])}finally{T(!1)}}},[]);n.useEffect(()=>{if(!s||!p)return;R();const e=function(e){if(!v())return()=>{};let t=!0,n={wallets:[],byId:new Map,hasWallets:!1};const s=s=>{if(!t)return;const r=s,{info:i,provider:o}=r.detail,a=(i.rdns?.length??0)>0?i.rdns:i.uuid;if(n.byId.has(a))return;const c={id:a,name:i.name,rdns:a,icon:i.icon??"",provider:o,isInjected:!1},d=[...n.wallets,c],l=new Map(n.byId);l.set(c.id,c),n={wallets:d,byId:l,hasWallets:!0,primary:d[0]},e(n)};return window.addEventListener("eip6963:announceProvider",s),w().then(s=>{t&&(n=s,e(s))}),()=>{t=!1,window.removeEventListener("eip6963:announceProvider",s)}}(e=>{O(e.wallets)});return()=>{e()}},[s,R]),n.useEffect(()=>{r&&i&&!P&&!m&&M(r)},[r,i,P,m,M]);const b=n.useMemo(()=>({provider:u,address:y,galaAddress:A,isConnected:P,isConnecting:m,isDetecting:N,error:L,detectedWallets:D,connect:M,connectDetected:G,disconnect:x,setProvider:S,refreshWallets:R,clearError:W}),[u,y,A,P,m,N,L,D,M,G,x,S,R,W]);return t.jsx(E.Provider,{value:b,children:e})},exports.detectWallets=w,exports.useGalaAddress=function(){const{galaAddress:e}=y();return e},exports.useIsWalletConnected=function(){const{isConnected:e}=y();return e},exports.useWallet=function(){return y()},exports.useWalletAddress=function(){const{address:e}=y();return e},exports.useWalletConnection=function(){const{isConnecting:e,isConnected:t,error:s,connect:r,connectDetected:i,disconnect:o,clearError:a}=y(),c=n.useMemo(()=>e?"connecting":s?"error":t?"connected":"disconnected",[e,s,t]);return n.useMemo(()=>({status:c,isConnecting:e,isConnected:t,error:s,connect:r,connectDetected:i,disconnect:o,clearError:a}),[c,e,t,s,r,i,o,a])},exports.useWalletContext=y,exports.useWalletDetection=function(){const{detectedWallets:e,isDetecting:t,refreshWallets:s}=y(),r=n.useMemo(()=>t=>e.some(e=>e.rdns===t),[e]),i=n.useMemo(()=>t=>e.find(e=>e.rdns===t),[e]),o=n.useMemo(()=>e.some(e=>e.rdns===h.METAMASK),[e]),a=n.useMemo(()=>e.some(e=>e.rdns===h.COINBASE),[e]),c=e.length>0;return n.useMemo(()=>({wallets:e,isDetecting:t,refresh:s,hasWallet:r,getWallet:i,hasMetaMask:o,hasCoinbaseWallet:a,hasAnyWallet:c}),[e,t,s,r,i,o,a,c])},exports.useWalletProvider=function(){const{provider:e}=y();return e};
@@ -1 +0,0 @@
1
- "use strict";var e,t=require("ethers");class r extends Error{constructor(e,t,r){super(e),this.code=t,this.originalError=r,this.name="WalletProviderError"}}exports.WalletProviderErrorCode=void 0,(e=exports.WalletProviderErrorCode||(exports.WalletProviderErrorCode={})).USER_REJECTED="USER_REJECTED",e.NOT_CONNECTED="NOT_CONNECTED",e.CONNECTION_FAILED="CONNECTION_FAILED",e.SIGNING_FAILED="SIGNING_FAILED",e.PROVIDER_NOT_AVAILABLE="PROVIDER_NOT_AVAILABLE",e.PRIVATE_KEY_NOT_ACCESSIBLE="PRIVATE_KEY_NOT_ACCESSIBLE",e.INVALID_CONFIG="INVALID_CONFIG",e.CHAIN_MISMATCH="CHAIN_MISMATCH",e.UNKNOWN="UNKNOWN";class n{constructor(e){this.providerType="privateKey",this.connected=!0;try{this.wallet=new t.Wallet(e)}catch(e){throw new r("Invalid private key provided",exports.WalletProviderErrorCode.INVALID_CONFIG,e instanceof Error?e:void 0)}}static fromWallet(e){return new n(e.privateKey)}async signMessage(e){try{return await this.wallet.signMessage(e)}catch(e){throw new r("Failed to sign message",exports.WalletProviderErrorCode.SIGNING_FAILED,e instanceof Error?e:void 0)}}async signTypedData(e,t,n){try{return await this.wallet.signTypedData(e,t,n)}catch(e){throw new r("Failed to sign typed data",exports.WalletProviderErrorCode.SIGNING_FAILED,e instanceof Error?e:void 0)}}async getAddress(){return t.getAddress(this.wallet.address)}async getGalaAddress(){return`eth|${(await this.getAddress()).slice(2)}`}async connect(){return this.connected=!0,this.getAddress()}async disconnect(){this.connected=!1}isConnected(){return this.connected}async getPrivateKey(){return this.wallet.privateKey}getWallet(){return this.wallet}}const s=4001,i=4100,o=4900,a=4901;class d{constructor(e){if(this.providerType="external",this.connectedAddress=null,this.accountsChangedHandler=null,this.disconnectHandler=null,null==e)throw new r("EIP-1193 provider is required",exports.WalletProviderErrorCode.PROVIDER_NOT_AVAILABLE);this.provider=e,this.setupEventListeners()}setupEventListeners(){"function"==typeof this.provider.on&&(this.accountsChangedHandler=e=>{0===e.length?this.connectedAddress=null:this.connectedAddress=t.getAddress(e[0])},this.provider.on("accountsChanged",this.accountsChangedHandler),this.disconnectHandler=()=>{this.connectedAddress=null},this.provider.on("disconnect",this.disconnectHandler))}removeEventListeners(){"function"==typeof this.provider.removeListener&&(this.accountsChangedHandler&&(this.provider.removeListener("accountsChanged",this.accountsChangedHandler),this.accountsChangedHandler=null),this.disconnectHandler&&(this.provider.removeListener("disconnect",this.disconnectHandler),this.disconnectHandler=null))}handleProviderError(e,t){const n=e;if(n.code===s)throw new r(`User rejected ${t}`,exports.WalletProviderErrorCode.USER_REJECTED,e instanceof Error?e:void 0);if(n.code===i)throw new r("Wallet is not authorized",exports.WalletProviderErrorCode.NOT_CONNECTED,e instanceof Error?e:void 0);if(n.code===o||n.code===a)throw this.connectedAddress=null,new r("Wallet disconnected",exports.WalletProviderErrorCode.NOT_CONNECTED,e instanceof Error?e:void 0);throw new r(n.message??`${t} failed`,t.includes("sign")?exports.WalletProviderErrorCode.SIGNING_FAILED:exports.WalletProviderErrorCode.UNKNOWN,e instanceof Error?e:void 0)}ensureConnected(){if(null===this.connectedAddress||void 0===this.connectedAddress)throw new r("Wallet is not connected. Call connect() first.",exports.WalletProviderErrorCode.NOT_CONNECTED)}async connect(){try{const e=await this.provider.request({method:"eth_requestAccounts"});if(null==e||0===e.length)throw new r("No accounts returned from wallet",exports.WalletProviderErrorCode.CONNECTION_FAILED);return this.connectedAddress=t.getAddress(e[0]),this.connectedAddress}catch(e){if(e instanceof r)throw e;return this.handleProviderError(e,"connect")}}async disconnect(){this.connectedAddress=null,this.removeEventListeners();try{await this.provider.request({method:"wallet_revokePermissions",params:[{eth_accounts:{}}]})}catch{}}isConnected(){return null!==this.connectedAddress}async signMessage(e){this.ensureConnected();try{const t=`0x${Buffer.from(e,"utf8").toString("hex")}`;return await this.provider.request({method:"personal_sign",params:[t,this.connectedAddress]})}catch(e){if(e instanceof r)throw e;return this.handleProviderError(e,"sign message")}}async signTypedData(e,t,n){this.ensureConnected();try{const r={types:{EIP712Domain:this.getEIP712DomainType(e),...t},primaryType:Object.keys(t)[0],domain:this.serializeDomain(e),message:n};return await this.provider.request({method:"eth_signTypedData_v4",params:[this.connectedAddress,JSON.stringify(r)]})}catch(e){if(e instanceof r)throw e;return this.handleProviderError(e,"sign typed data")}}getEIP712DomainType(e){const t=[];return void 0!==e.name&&t.push({name:"name",type:"string"}),void 0!==e.version&&t.push({name:"version",type:"string"}),void 0!==e.chainId&&t.push({name:"chainId",type:"uint256"}),void 0!==e.verifyingContract&&t.push({name:"verifyingContract",type:"address"}),void 0!==e.salt&&t.push({name:"salt",type:"bytes32"}),t}serializeDomain(e){const t={};return void 0!==e.name&&(t.name=e.name),void 0!==e.version&&(t.version=e.version),void 0!==e.chainId&&(t.chainId="bigint"==typeof e.chainId||"number"==typeof e.chainId?`0x${e.chainId.toString(16)}`:e.chainId),void 0!==e.verifyingContract&&(t.verifyingContract=e.verifyingContract),void 0!==e.salt&&(t.salt=e.salt),t}async getAddress(){return this.ensureConnected(),this.connectedAddress}async getGalaAddress(){return`eth|${(await this.getAddress()).slice(2)}`}async getPrivateKey(){throw new r("Private key is not accessible with external wallet providers. Use PrivateKeyProvider if you need private key access for @gala-chain operations.",exports.WalletProviderErrorCode.PRIVATE_KEY_NOT_ACCESSIBLE)}getProvider(){return this.provider}}let c=null;async function l(){if(!1===c)return null;try{const e=await import("@gala-chain/connect");return c=!0,e}catch{return c=!1,null}}class h{constructor(e){if(this.providerType="external",this.connectedAddress=null,null==e)throw new r("@gala-chain/connect client is required",exports.WalletProviderErrorCode.INVALID_CONFIG);if("function"!=typeof e.signMessage)throw new r("Invalid @gala-chain/connect client: signMessage method is required",exports.WalletProviderErrorCode.INVALID_CONFIG);this.client=e}static async createBrowserClient(e){const t=await l();if(null==t)throw new r("Failed to create BrowserConnectClient: @gala-chain/connect is not installed. Install it with: npm install @gala-chain/connect",exports.WalletProviderErrorCode.PROVIDER_NOT_AVAILABLE);const{BrowserConnectClient:n}=t,s=n,i=e?new s(e):new s;return new h(i)}static async createTrustWalletClient(){const e=await l();if(null==e)throw new r("Failed to create TrustWalletConnectClient: @gala-chain/connect is not installed. Install it with: npm install @gala-chain/connect",exports.WalletProviderErrorCode.PROVIDER_NOT_AVAILABLE);const{TrustWalletConnectClient:t}=e,n=new t;return new h(n)}static async isAvailable(){return null!==await l()}ensureConnected(){if(null===this.connectedAddress||void 0===this.connectedAddress)throw new r("Wallet is not connected. Call connect() first.",exports.WalletProviderErrorCode.NOT_CONNECTED)}async connect(){try{if("function"==typeof this.client.connect){const e=await this.client.connect();if(null!=e&&e.length>0)return this.connectedAddress=t.getAddress(e),this.connectedAddress}if("function"==typeof this.client.getAccount){const e=await this.client.getAccount();if(null!=e&&e.length>0)return this.connectedAddress=t.getAddress(e),this.connectedAddress}throw new r("Failed to connect: no account returned",exports.WalletProviderErrorCode.CONNECTION_FAILED)}catch(e){if(e instanceof r)throw e;const t=e instanceof Error?e.message:String(e);if(t.length>0&&(t.includes("rejected")||t.includes("denied")))throw new r("User rejected connection",exports.WalletProviderErrorCode.USER_REJECTED,e instanceof Error?e:void 0);throw new r("Failed to connect to wallet",exports.WalletProviderErrorCode.CONNECTION_FAILED,e instanceof Error?e:void 0)}}async disconnect(){"function"==typeof this.client.disconnect&&await this.client.disconnect(),this.connectedAddress=null}isConnected(){return null!==this.connectedAddress}async signMessage(e){this.ensureConnected();try{return await this.client.signMessage(e)}catch(e){const t=e instanceof Error?e.message:String(e);if(t.includes("rejected")||t.includes("denied"))throw new r("User rejected signing",exports.WalletProviderErrorCode.USER_REJECTED,e instanceof Error?e:void 0);throw new r("Failed to sign message",exports.WalletProviderErrorCode.SIGNING_FAILED,e instanceof Error?e:void 0)}}async signTypedData(e,t,n){throw new r("signTypedData is not supported by GalaChainConnectProvider. Use ExternalWalletProvider with the underlying EIP-1193 provider instead.",exports.WalletProviderErrorCode.SIGNING_FAILED)}async getAddress(){return this.ensureConnected(),this.connectedAddress}async getGalaAddress(){return`eth|${(await this.getAddress()).slice(2)}`}async getPrivateKey(){throw new r("Private key is not accessible with @gala-chain/connect. Use PrivateKeyProvider if you need private key access.",exports.WalletProviderErrorCode.PRIVATE_KEY_NOT_ACCESSIBLE)}getClient(){return this.client}}const u={METAMASK:"io.metamask",METAMASK_FLASK:"io.metamask.flask",COINBASE:"com.coinbase.wallet",TRUST_WALLET:"com.trustwallet.app",PHANTOM:"app.phantom",RAINBOW:"me.rainbow",OKX:"com.okex.wallet",RABBY:"io.rabby",BRAVE:"com.brave.wallet",FRAME:"sh.frame",LEDGER:"com.ledger",ZERION:"io.zerion.wallet",GALA:"com.gala.wallet"},v={[u.METAMASK]:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIxLjU0IDQuMjJsLTguMzQgNi4yMSAxLjU0LTMuNjUtLTUuNTMtMi41MXoiIGZpbGw9IiNFMjc2MUIiLz48L3N2Zz4="};function p(){return"undefined"!=typeof window&&"function"==typeof window.dispatchEvent}function E(){if(!p())return null;return window.ethereum??null}async function g(e=500){const t=[],r=new Map;return p()?new Promise(n=>{const s=new Set,i=e=>{const n=e,{info:i,provider:o}=n.detail;if(s.has(i.uuid))return;s.add(i.uuid);const a={id:(i.rdns?.length??0)>0?i.rdns:i.uuid,name:i.name,rdns:(i.rdns?.length??0)>0?i.rdns:i.uuid,icon:i.icon??v[i.rdns??""]??"",provider:o,isInjected:!1};t.push(a),r.set(a.id,a)};window.addEventListener("eip6963:announceProvider",i),window.dispatchEvent(new Event("eip6963:requestProvider")),setTimeout(()=>{if(window.removeEventListener("eip6963:announceProvider",i),0===t.length){const e=E();if(e){const n=window;let s="Browser Wallet",i="injected";n.ethereum?.isMetaMask?(s="MetaMask",i=u.METAMASK):n.ethereum?.isCoinbaseWallet?(s="Coinbase Wallet",i=u.COINBASE):n.ethereum?.isTrust&&(s="Trust Wallet",i=u.TRUST_WALLET);const o={id:i,name:s,rdns:i,icon:v[i]??"",provider:e,isInjected:!0};t.push(o),r.set(o.id,o)}}n({wallets:t,byId:r,hasWallets:t.length>0,primary:t[0]})},e)}):{wallets:t,byId:r,hasWallets:!1}}async function y(e,t){return(await g(t)).byId.get(e)??null}function w(e){return"privateKey"===e.providerType}function f(e){return"object"==typeof e&&null!==e&&"request"in e&&"function"==typeof e.request}exports.ExternalWalletProvider=d,exports.GalaChainConnectProvider=h,exports.GalaWalletProvider=class{constructor(e){if(this.providerType="external",this.connectedAddress=null,this.accountsChangedHandler=null,this.disconnectHandler=null,null==e)throw new r("Gala Wallet provider is required",exports.WalletProviderErrorCode.PROVIDER_NOT_AVAILABLE);this.provider=e,this.setupEventListeners()}setupEventListeners(){"function"==typeof this.provider.on&&(this.accountsChangedHandler=e=>{0===e.length?this.connectedAddress=null:this.connectedAddress=t.getAddress(e[0])},this.provider.on("accountsChanged",this.accountsChangedHandler),this.disconnectHandler=()=>{this.connectedAddress=null},this.provider.on("disconnect",this.disconnectHandler))}removeEventListeners(){"function"==typeof this.provider.removeListener&&(this.accountsChangedHandler&&(this.provider.removeListener("accountsChanged",this.accountsChangedHandler),this.accountsChangedHandler=null),this.disconnectHandler&&(this.provider.removeListener("disconnect",this.disconnectHandler),this.disconnectHandler=null))}parseGalaError(e){if(e instanceof Error)try{const t=JSON.parse(e.message);if("object"==typeof t&&null!==t){const r=t,n={message:"string"==typeof r.message?r.message:e.message};return"number"==typeof r.code&&(n.code=r.code),n}return{message:e.message}}catch{return{message:e.message}}return{message:String(e)}}handleProviderError(e,t){const n=this.parseGalaError(e);if(4001===n.code)throw new r(`User rejected ${t}`,exports.WalletProviderErrorCode.USER_REJECTED,e instanceof Error?e:void 0);if(4900===n.code)throw this.connectedAddress=null,new r("Wallet disconnected",exports.WalletProviderErrorCode.NOT_CONNECTED,e instanceof Error?e:void 0);throw new r(void 0!==n.message&&""!==n.message?n.message:`${t} failed`,t.includes("sign")?exports.WalletProviderErrorCode.SIGNING_FAILED:exports.WalletProviderErrorCode.UNKNOWN,e instanceof Error?e:void 0)}ensureConnected(){if(null===this.connectedAddress||void 0===this.connectedAddress)throw new r("Wallet is not connected. Call connect() first.",exports.WalletProviderErrorCode.NOT_CONNECTED)}async connect(){try{const e=await this.provider.request({method:"eth_requestAccounts"});if(null==e||0===e.length)throw new r("No accounts returned from Gala Wallet",exports.WalletProviderErrorCode.CONNECTION_FAILED);return this.connectedAddress=t.getAddress(e[0]),this.connectedAddress}catch(e){if(e instanceof r)throw e;return this.handleProviderError(e,"connect")}}async disconnect(){this.connectedAddress=null,this.removeEventListeners();try{await this.provider.disconnect()}catch{}}isConnected(){return null!==this.connectedAddress}async signMessage(e){this.ensureConnected();try{await this.provider.setAddress(this.connectedAddress);const t=`0x${Buffer.from(e,"utf8").toString("hex")}`;return await this.provider.request({method:"personal_sign",params:[t,this.connectedAddress]})}catch(e){if(e instanceof r)throw e;return this.handleProviderError(e,"sign message")}}async signTypedData(e,t,n){this.ensureConnected();try{await this.provider.setAddress(this.connectedAddress);const r={types:{EIP712Domain:this.getEIP712DomainType(e),...t},primaryType:Object.keys(t)[0],domain:this.serializeDomain(e),message:n};return await this.provider.request({method:"eth_signTypedData_v4",params:[this.connectedAddress,JSON.stringify(r)]})}catch(e){if(e instanceof r)throw e;return this.handleProviderError(e,"sign typed data")}}getEIP712DomainType(e){const t=[];return void 0!==e.name&&t.push({name:"name",type:"string"}),void 0!==e.version&&t.push({name:"version",type:"string"}),void 0!==e.chainId&&t.push({name:"chainId",type:"uint256"}),void 0!==e.verifyingContract&&t.push({name:"verifyingContract",type:"address"}),void 0!==e.salt&&t.push({name:"salt",type:"bytes32"}),t}serializeDomain(e){const t={};return void 0!==e.name&&(t.name=e.name),void 0!==e.version&&(t.version=e.version),void 0!==e.chainId&&(t.chainId="bigint"==typeof e.chainId||"number"==typeof e.chainId?`0x${e.chainId.toString(16)}`:e.chainId),void 0!==e.verifyingContract&&(t.verifyingContract=e.verifyingContract),void 0!==e.salt&&(t.salt=e.salt),t}async getAddress(){return this.ensureConnected(),this.connectedAddress}async getGalaAddress(){return`eth|${(await this.getAddress()).slice(2)}`}async getPrivateKey(){throw new r("Private key is not accessible with Gala Wallet. Use PrivateKeyProvider if you need private key access for @gala-chain operations.",exports.WalletProviderErrorCode.PRIVATE_KEY_NOT_ACCESSIBLE)}getProvider(){return this.provider}},exports.KNOWN_WALLET_RDNS=u,exports.PrivateKeyProvider=n,exports.WalletProviderError=r,exports.createProviderFromEip1193=function(e){return new d(e)},exports.createProviderFromWallet=function(e){return n.fromWallet(e)},exports.createWalletProvider=function(e){if(null!==e.privateKey&&void 0!==e.privateKey&&e.privateKey.length>0)return new n(e.privateKey);if(null!==e.eip1193Provider&&void 0!==e.eip1193Provider)return new d(e.eip1193Provider);throw new r("Invalid wallet provider config: must provide either privateKey or eip1193Provider",exports.WalletProviderErrorCode.INVALID_CONFIG)},exports.detectWallets=g,exports.ensureConnected=async function(e){return e.isConnected()?e.getAddress():e.connect()},exports.getInjectedEip1193Provider=function(){if("undefined"==typeof window)return null;const e=window.ethereum;return f(e)?e:null},exports.getPrivateKeyIfAvailable=async function(e){if(w(e))try{return await e.getPrivateKey()}catch{return}},exports.getWalletByRdns=y,exports.hasAnyWallet=function(){return null!==E()},exports.isEip1193Provider=f,exports.isExternalProvider=function(e){return"external"===e.providerType},exports.isPrivateKeyProvider=w,exports.isWalletAvailable=async function(e,t){return null!==await y(e,t)},exports.providerToWallet=function(e){if(e&&w(e))return e.getWallet()},exports.subscribeToWalletChanges=function(e){if(!p())return()=>{};let t=!0,r={wallets:[],byId:new Map,hasWallets:!1};const n=n=>{if(!t)return;const s=n,{info:i,provider:o}=s.detail,a=(i.rdns?.length??0)>0?i.rdns:i.uuid;if(r.byId.has(a))return;const d={id:a,name:i.name,rdns:a,icon:i.icon??"",provider:o,isInjected:!1},c=[...r.wallets,d],l=new Map(r.byId);l.set(d.id,d),r={wallets:c,byId:l,hasWallets:!0,primary:c[0]},e(r)};return window.addEventListener("eip6963:announceProvider",n),g().then(n=>{t&&(r=n,e(n))}),()=>{t=!1,window.removeEventListener("eip6963:announceProvider",n)}},exports.walletToProvider=function(e){if(e)return n.fromWallet(e)};