@idosgames/wallet 0.1.4 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- 'use strict';var wagmi=require('wagmi'),connectors=require('wagmi/connectors'),reactQuery=require('@tanstack/react-query'),react=require('react'),jsxRuntime=require('react/jsx-runtime'),viem=require('viem'),core=require('@idosgames/core'),actions=require('wagmi/actions'),walletAdapterReact=require('@solana/wallet-adapter-react');function re(t){let{chains:e,walletConnectProjectId:n,appName:r,appUrl:i,appIcon:o,transports:l,connectors:c}=t,a=r||i?{name:r??"iDosGames",description:r??"iDosGames game",url:i??"",icons:o?[o]:[]}:void 0,m=c??[connectors.injected(),connectors.coinbaseWallet({appName:r??"iDosGames"}),...n?[connectors.walletConnect({projectId:n,metadata:a,showQrModal:true})]:[]],d={};for(let p of e)d[p.id]=l?.[p.id]??wagmi.http();return wagmi.createConfig({chains:e,connectors:m,transports:d})}function P(t){let{wagmiConfig:e,queryClient:n,children:r}=t,[i]=react.useState(()=>n??new reactQuery.QueryClient);return jsxRuntime.jsx(wagmi.WagmiProvider,{config:e,children:jsxRuntime.jsx(reactQuery.QueryClientProvider,{client:i,children:r})})}var D=[{type:"function",name:"depositERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"amount",type:"uint256"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"withdrawERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"amount",type:"uint256"},{name:"burnAmount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC1155",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],G=[{type:"function",name:"withdrawERC1155Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],x=[{type:"function",name:"approve",stateMutability:"nonpayable",inputs:[{name:"spender",type:"address"},{name:"amount",type:"uint256"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"allowance",stateMutability:"view",inputs:[{name:"owner",type:"address"},{name:"spender",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"decimals",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint8"}]},{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]}],O=[{type:"function",name:"safeTransferFrom",stateMutability:"nonpayable",inputs:[{name:"from",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]},{type:"function",name:"isApprovedForAll",stateMutability:"view",inputs:[{name:"account",type:"address"},{name:"operator",type:"address"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"setApprovalForAll",stateMutability:"nonpayable",inputs:[{name:"operator",type:"address"},{name:"approved",type:"bool"}],outputs:[]},{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"},{name:"id",type:"uint256"}],outputs:[{name:"",type:"uint256"}]}];function q(t,e,n){return viem.encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[t,e,core.normalizeBlockchainCategory(n)])}async function w(t,e){let{walletClient:n,publicClient:r,account:i}=t,o=await n.writeContract({address:e.address,abi:e.abi,functionName:e.functionName,args:e.args,account:i,chain:n.chain,value:e.value});if((await r.waitForTransactionReceipt({hash:o})).status==="reverted")throw new Error(`On-chain transaction reverted (${o}).`);return o}function g(t){return t instanceof viem.BaseError?t.shortMessage:t instanceof Error?t.message:String(t)}function s(t,e,n){return {ok:false,stage:t,error:e,...n}}function f(t,e){return {ok:false,stage:t,error:e}}function U(t){let e=t.RewardPoolAddress;return e||null}async function j(t,e,n,r){return await t.publicClient.readContract({address:e,abi:x,functionName:"allowance",args:[t.account,n]})>=r?null:w(t,{address:e,abi:x,functionName:"approve",args:[n,r]})}async function I(t){let{client:e,clients:n,network:r,tokenAddress:i,amount:o,titleID:l,category:c}=t,a=e.auth.context?.userID;if(!a)return s("approve","Not logged in.");let m=U(r);if(!m)return s("approve","Network has no RewardPoolAddress.");if(o<=0n)return s("approve","Amount must be positive.");try{await j(n,i,m,o);}catch(u){return s("approve",g(u))}let d;try{d=await w(n,{address:m,abi:D,functionName:"depositERC20",args:[i,o,a,l,c??""]});}catch(u){return s("deposit-onchain",g(u))}let p=await e.blockchain.depositToken(r.NetworkID??"",d);return p.ok?{ok:true,onChainTxHash:d,data:p.data}:s("report",p.error,{onChainTxHash:d})}async function E(t){let{client:e,clients:n,network:r,nftContractAddress:i,tokenId:o,amount:l,titleID:c,category:a}=t,m=e.auth.context?.userID;if(!m)return s("deposit-onchain","Not logged in.");let d=U(r);if(!d)return s("deposit-onchain","Network has no RewardPoolAddress.");if(l<=0n)return s("deposit-onchain","Amount must be positive.");let p=q(m,c,a),u;try{u=await w(n,{address:i,abi:O,functionName:"safeTransferFrom",args:[n.account,d,o,l,p]});}catch(W){return s("deposit-onchain",g(W))}let y=await e.blockchain.depositNFT(r.NetworkID??"",u);return y.ok?{ok:true,onChainTxHash:u,data:y.data}:s("report",y.error,{onChainTxHash:u})}async function Q(t,e){return w(t,{address:e.ContractAddress,abi:D,functionName:"withdrawERC20",args:[e.TokenAddress,e.WalletAddress,BigInt(e.Amount??"0"),BigInt(e.BurnAmount??"0"),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function z(t,e){return w(t,{address:e.ContractAddress,abi:G,functionName:"withdrawERC1155Mint",args:[e.TokenAddress,e.WalletAddress,BigInt(e.TokenId??"0"),BigInt(e.Amount??"0"),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function N(t){let{client:e,clients:n,currencyID:r,networkID:i,walletAddress:o,amount:l,category:c}=t,a=await e.blockchain.requestTokenWithdrawal(r,i,o,l,c);if(!a.ok)return s("request",a.error);let m=a.data.EvmSignature,d=a.data.TitleTransactionID??void 0;if(!m)return s("request","Withdrawal response carried no EVM signature.",{titleTransactionID:d});let p;try{p=await Q(n,m);}catch(y){return s("withdraw-onchain",g(y),{titleTransactionID:d})}let u=await V(e,d,p);return u.ok?{ok:true,onChainTxHash:p,data:a.data}:u}async function B(t){let{client:e,clients:n,itemID:r,networkID:i,walletAddress:o,amount:l,category:c}=t,a=await e.blockchain.requestNFTWithdrawal(r,i,o,l,c);if(!a.ok)return s("request",a.error);let m=a.data.EvmSignature,d=a.data.TitleTransactionID??void 0;if(!m)return s("request","Withdrawal response carried no EVM signature.",{titleTransactionID:d});let p;try{p=await z(n,m);}catch(y){return s("withdraw-onchain",g(y),{titleTransactionID:d})}let u=await V(e,d,p);return u.ok?{ok:true,onChainTxHash:p,data:a.data}:u}async function V(t,e,n){if(!e)return s("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let r=await t.blockchain.confirmWithdrawal(e,n);return r.ok?{ok:true,onChainTxHash:n,data:r.data}:s("confirm",r.error,{onChainTxHash:n,titleTransactionID:e})}async function k(t){let{client:e,clients:n,networkID:r}=t,i=t.walletAddress??n.account,o=await e.auth.requestWalletChallenge(i,r);if(!o.ok)return f("challenge",o.error);let l;try{l=await n.walletClient.signMessage({account:n.account,message:o.data.Message});}catch(a){return f("sign",g(a))}let c=await e.auth.loginWithWallet(i,r,l);return c.ok?{ok:true,data:c.data}:f("login",c.error)}function b(){let{address:t}=wagmi.useAccount(),e=wagmi.usePublicClient(),{data:n}=wagmi.useWalletClient();return !t||!e||!n?null:{account:t,publicClient:e,walletClient:n}}var C="Wallet not connected.";function ge(t,e){let n=b();return {connected:!!n,account:n?.account??null,loginWithWallet:(r,i)=>n?k({client:t,clients:n,networkID:r,walletAddress:i}):Promise.resolve(f("challenge",C)),depositToken:r=>n?I({client:t,clients:n,titleID:e,...r}):Promise.resolve(s("approve",C)),depositNft:r=>n?E({client:t,clients:n,titleID:e,...r}):Promise.resolve(s("deposit-onchain",C)),withdrawToken:r=>n?N({client:t,clients:n,...r}):Promise.resolve(s("withdraw-onchain",C)),withdrawNft:r=>n?B({client:t,clients:n,...r}):Promise.resolve(s("withdraw-onchain",C))}}function Ce(t){let{wagmiConfig:e,...n}=t;return jsxRuntime.jsx(P,{wagmiConfig:e,children:jsxRuntime.jsx(K,{...n})})}function We(t){return t instanceof Error&&(t.name==="ConnectorAlreadyConnectedError"||t.message.includes("already connected"))}function ve(t){let e="Wallet sign-in failed. Please try again.";return t instanceof Error?t.name==="ProviderNotFoundError"||/provider not found/i.test(t.message)?"No crypto wallet found in this browser. Install a wallet extension (e.g. MetaMask) or open this page in your wallet's browser, then try again.":t.name==="UserRejectedRequestError"||/user (rejected|denied|cancelled|canceled)/i.test(t.message)?"Request declined in the wallet.":/timed? ?out/i.test(t.message)?"The wallet did not respond. Open your wallet and try again.":e:e}async function De(t){let e=await actions.getWalletClient(t).catch(()=>null);if(!e)return null;let n=actions.getPublicClient(t);return n?{account:e.account.address,publicClient:n,walletClient:e}:null}function be(t){let e=i=>t.find(o=>o.id===i||o.type===i),n=e("injected"),r=typeof window<"u"&&window.ethereum!=null;return n&&r?n:e("walletConnect")??n??t[0]}function K(t){let{client:e,networkID:n,onAuthenticated:r,disabled:i,label:o,style:l}=t,c=wagmi.useConfig(),{isConnected:a}=wagmi.useAccount(),{connectAsync:m,connectors:d}=wagmi.useConnect(),p=b(),[u,y]=react.useState(false),[W,h]=react.useState(null),X=async()=>{y(true),h(null);try{if(!a){let M=be(d);if(!M){h("No wallet connector is configured.");return}try{await m({connector:M});}catch(L){if(!We(L))throw L}}let v=p??await De(c);if(!v){h("Wallet client is not available.");return}let A=await k({client:e,clients:v,networkID:n});if(A.ok){r();return}h(A.stage==="sign"?"Signature declined.":A.error??"Wallet sign-in failed.");}catch(v){h(ve(v));}finally{y(false);}};return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:()=>{X();},disabled:i||u,style:{...Te,...i||u?{opacity:.6,cursor:"default"}:null,...l},children:u?"Check your wallet\u2026":a?o??"Sign in with wallet":"Connect wallet"}),W&&jsxRuntime.jsx("span",{role:"alert",style:Ae,children:W})]})}var Te={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},Ae={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};function Ne(t){let{endpoint:e,wallets:n,autoConnect:r=true,children:i}=t;return jsxRuntime.jsx(walletAdapterReact.ConnectionProvider,{endpoint:e,children:jsxRuntime.jsx(walletAdapterReact.WalletProvider,{wallets:n,autoConnect:r,children:i})})}async function S(t){let{client:e,adapter:n,network:r,mint:i,amountRaw:o,titleID:l,category:c}=t,a=e.auth.context?.userID;if(!a)return s("deposit-onchain","Not logged in.");if(o<=0n)return s("deposit-onchain","Amount must be positive.");let m;try{m=await n.depositSpl({mint:i,amountRaw:o,userID:a,titleID:l,category:core.normalizeBlockchainCategory(c)});}catch(p){return s("deposit-onchain",g(p))}let d=await e.blockchain.depositToken(r.NetworkID??"",m);return d.ok?{ok:true,onChainTxHash:m,data:d.data}:s("report",d.error,{onChainTxHash:m})}async function R(t){let{client:e,adapter:n,currencyID:r,networkID:i,walletAddress:o,amount:l,category:c}=t,a=await e.blockchain.requestTokenWithdrawal(r,i,o,l,c);if(!a.ok)return s("request",a.error);let m=a.data.SolanaSignature,d=a.data.TitleTransactionID??void 0;if(!m)return s("request","Withdrawal response carried no Solana signature.",{titleTransactionID:d});let p;try{p=await n.submitWithdrawal(m);}catch(y){return s("withdraw-onchain",g(y),{titleTransactionID:d})}if(!d)return s("confirm","Missing TitleTransactionID.",{onChainTxHash:p});let u=await e.blockchain.confirmWithdrawal(d,p);return u.ok?{ok:true,onChainTxHash:p,data:a.data}:s("confirm",u.error,{onChainTxHash:p,titleTransactionID:d})}async function F(t){let{client:e,networkID:n,walletAddress:r,signMessage:i}=t,o=await e.auth.requestWalletChallenge(r,n);if(!o.ok)return f("challenge",o.error);let l;try{let a=await i(new TextEncoder().encode(o.data.Message));l=Se(a);}catch(a){return f("sign",g(a))}let c=await e.auth.loginWithWallet(r,n,l);return c.ok?{ok:true,data:c.data}:f("login",c.error)}function Se(t){let e="0x";for(let n of t)e+=n.toString(16).padStart(2,"0");return e}var J="Wallet not connected.";function Fe(t,e,n){let{publicKey:r,signMessage:i}=walletAdapterReact.useWallet(),o=r?.toBase58()??null;return {connected:!!o,account:o,loginWithWallet:(l,c)=>{let a=c??o;return a?i?F({client:t,networkID:l,walletAddress:a,signMessage:i}):Promise.resolve(f("sign","The connected wallet does not support message signing.")):Promise.resolve(f("challenge",J))},depositToken:l=>S({client:t,adapter:n,titleID:e,...l}),withdrawToken:l=>{let c=l.walletAddress??o;return c?R({client:t,adapter:n,...l,walletAddress:c}):Promise.resolve(s("request",J))}}}exports.IDosGamesWalletProvider=P;exports.SolanaWalletBridgeProvider=Ne;exports.WalletLogin=Ce;exports.WalletLoginButton=K;exports.createEvmWalletConfig=re;exports.useEvmBridge=ge;exports.useEvmBridgeClients=b;exports.useSolanaBridge=Fe;
1
+ 'use strict';var wagmi=require('wagmi'),connectors=require('wagmi/connectors'),reactQuery=require('@tanstack/react-query'),react=require('react'),jsxRuntime=require('react/jsx-runtime'),viem=require('viem'),core=require('@idosgames/core'),actions=require('wagmi/actions'),walletAdapterReact=require('@solana/wallet-adapter-react');function re(t){let{chains:e,walletConnectProjectId:n,appName:r,appUrl:i,appIcon:o,transports:l,connectors:c}=t,a=r||i?{name:r??"iDosGames",description:r??"iDosGames game",url:i??"",icons:o?[o]:[]}:void 0,m=c??[connectors.injected(),connectors.coinbaseWallet({appName:r??"iDosGames"}),...n?[connectors.walletConnect({projectId:n,metadata:a,showQrModal:true})]:[]],d={};for(let p of e)d[p.id]=l?.[p.id]??wagmi.http();return wagmi.createConfig({chains:e,connectors:m,transports:d})}function P(t){let{wagmiConfig:e,queryClient:n,children:r}=t,[i]=react.useState(()=>n??new reactQuery.QueryClient);return jsxRuntime.jsx(wagmi.WagmiProvider,{config:e,children:jsxRuntime.jsx(reactQuery.QueryClientProvider,{client:i,children:r})})}var D=[{type:"function",name:"depositERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"amount",type:"uint256"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"withdrawERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"amount",type:"uint256"},{name:"burnAmount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC1155",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],G=[{type:"function",name:"withdrawERC1155Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],x=[{type:"function",name:"approve",stateMutability:"nonpayable",inputs:[{name:"spender",type:"address"},{name:"amount",type:"uint256"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"allowance",stateMutability:"view",inputs:[{name:"owner",type:"address"},{name:"spender",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"decimals",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint8"}]},{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]}],O=[{type:"function",name:"safeTransferFrom",stateMutability:"nonpayable",inputs:[{name:"from",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]},{type:"function",name:"isApprovedForAll",stateMutability:"view",inputs:[{name:"account",type:"address"},{name:"operator",type:"address"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"setApprovalForAll",stateMutability:"nonpayable",inputs:[{name:"operator",type:"address"},{name:"approved",type:"bool"}],outputs:[]},{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"},{name:"id",type:"uint256"}],outputs:[{name:"",type:"uint256"}]}];function q(t,e,n){return viem.encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[t,e,core.normalizeBlockchainCategory(n)])}async function w(t,e){let{walletClient:n,publicClient:r,account:i}=t,o=await n.writeContract({address:e.address,abi:e.abi,functionName:e.functionName,args:e.args,account:i,chain:n.chain,value:e.value});if((await r.waitForTransactionReceipt({hash:o})).status==="reverted")throw new Error(`On-chain transaction reverted (${o}).`);return o}function g(t){return t instanceof viem.BaseError?t.shortMessage:t instanceof Error?t.message:String(t)}function s(t,e,n){return {ok:false,stage:t,error:e,...n}}function f(t,e){return {ok:false,stage:t,error:e}}function U(t){let e=t.RewardPoolAddress;return e||null}async function j(t,e,n,r){return await t.publicClient.readContract({address:e,abi:x,functionName:"allowance",args:[t.account,n]})>=r?null:w(t,{address:e,abi:x,functionName:"approve",args:[n,r]})}async function I(t){let{client:e,clients:n,network:r,tokenAddress:i,amount:o,titleID:l,category:c}=t,a=e.auth.context?.userID;if(!a)return s("approve","Not logged in.");let m=U(r);if(!m)return s("approve","Network has no RewardPoolAddress.");if(o<=0n)return s("approve","Amount must be positive.");try{await j(n,i,m,o);}catch(u){return s("approve",g(u))}let d;try{d=await w(n,{address:m,abi:D,functionName:"depositERC20",args:[i,o,a,l,c??""]});}catch(u){return s("deposit-onchain",g(u))}let p=await e.blockchain.depositToken(r.NetworkID??"",d);return p.ok?{ok:true,onChainTxHash:d,data:p.data}:s("report",p.error,{onChainTxHash:d})}async function E(t){let{client:e,clients:n,network:r,nftContractAddress:i,tokenId:o,amount:l,titleID:c,category:a}=t,m=e.auth.context?.userID;if(!m)return s("deposit-onchain","Not logged in.");let d=U(r);if(!d)return s("deposit-onchain","Network has no RewardPoolAddress.");if(l<=0n)return s("deposit-onchain","Amount must be positive.");let p=q(m,c,a),u;try{u=await w(n,{address:i,abi:O,functionName:"safeTransferFrom",args:[n.account,d,o,l,p]});}catch(v){return s("deposit-onchain",g(v))}let y=await e.blockchain.depositNFT(r.NetworkID??"",u);return y.ok?{ok:true,onChainTxHash:u,data:y.data}:s("report",y.error,{onChainTxHash:u})}async function Q(t,e){return w(t,{address:e.ContractAddress,abi:D,functionName:"withdrawERC20",args:[e.TokenAddress,e.WalletAddress,BigInt(e.Amount??"0"),BigInt(e.BurnAmount??"0"),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function z(t,e){return w(t,{address:e.ContractAddress,abi:G,functionName:"withdrawERC1155Mint",args:[e.TokenAddress,e.WalletAddress,BigInt(e.TokenId??"0"),BigInt(e.Amount??"0"),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function N(t){let{client:e,clients:n,currencyID:r,networkID:i,walletAddress:o,amount:l,category:c}=t,a=await e.blockchain.requestTokenWithdrawal(r,i,o,l,c);if(!a.ok)return s("request",a.error);let m=a.data.EvmSignature,d=a.data.TitleTransactionID??void 0;if(!m)return s("request","Withdrawal response carried no EVM signature.",{titleTransactionID:d});let p;try{p=await Q(n,m);}catch(y){return s("withdraw-onchain",g(y),{titleTransactionID:d})}let u=await V(e,d,p);return u.ok?{ok:true,onChainTxHash:p,data:a.data}:u}async function B(t){let{client:e,clients:n,itemID:r,networkID:i,walletAddress:o,amount:l,category:c}=t,a=await e.blockchain.requestNFTWithdrawal(r,i,o,l,c);if(!a.ok)return s("request",a.error);let m=a.data.EvmSignature,d=a.data.TitleTransactionID??void 0;if(!m)return s("request","Withdrawal response carried no EVM signature.",{titleTransactionID:d});let p;try{p=await z(n,m);}catch(y){return s("withdraw-onchain",g(y),{titleTransactionID:d})}let u=await V(e,d,p);return u.ok?{ok:true,onChainTxHash:p,data:a.data}:u}async function V(t,e,n){if(!e)return s("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let r=await t.blockchain.confirmWithdrawal(e,n);return r.ok?{ok:true,onChainTxHash:n,data:r.data}:s("confirm",r.error,{onChainTxHash:n,titleTransactionID:e})}async function C(t){let{client:e,clients:n,networkID:r}=t,i=t.walletAddress??n.account,o=await e.auth.requestWalletChallenge(i,r);if(!o.ok)return f("challenge",o.error);let l;try{l=await n.walletClient.signMessage({account:n.account,message:o.data.Message});}catch(a){return f("sign",g(a))}let c=await e.auth.loginWithWallet(i,r,l);return c.ok?{ok:true,data:c.data}:f("login",c.error)}function b(){let{address:t}=wagmi.useAccount(),e=wagmi.usePublicClient(),{data:n}=wagmi.useWalletClient();return !t||!e||!n?null:{account:t,publicClient:e,walletClient:n}}var W="Wallet not connected.";function ge(t,e){let n=b();return {connected:!!n,account:n?.account??null,loginWithWallet:(r,i)=>n?C({client:t,clients:n,networkID:r,walletAddress:i}):Promise.resolve(f("challenge",W)),depositToken:r=>n?I({client:t,clients:n,titleID:e,...r}):Promise.resolve(s("approve",W)),depositNft:r=>n?E({client:t,clients:n,titleID:e,...r}):Promise.resolve(s("deposit-onchain",W)),withdrawToken:r=>n?N({client:t,clients:n,...r}):Promise.resolve(s("withdraw-onchain",W)),withdrawNft:r=>n?B({client:t,clients:n,...r}):Promise.resolve(s("withdraw-onchain",W))}}function Ce(t){let{wagmiConfig:e,...n}=t;return jsxRuntime.jsx(P,{wagmiConfig:e,children:jsxRuntime.jsx(K,{...n})})}function We(t){return t instanceof Error&&(t.name==="ConnectorAlreadyConnectedError"||t.message.includes("already connected"))}function ve(t){let e="Wallet sign-in failed. Please try again.";return t instanceof Error?t.name==="ProviderNotFoundError"||/provider not found/i.test(t.message)?"No crypto wallet found in this browser. Install a wallet extension (e.g. MetaMask) or open this page in your wallet's browser, then try again.":t.name==="UserRejectedRequestError"||/user (rejected|denied|cancelled|canceled)/i.test(t.message)?"Request declined in the wallet.":/timed? ?out/i.test(t.message)?"The wallet did not respond. Open your wallet and try again.":e:e}async function De(t){let e=await actions.getWalletClient(t).catch(()=>null);if(!e)return null;let n=actions.getPublicClient(t);return n?{account:e.account.address,publicClient:n,walletClient:e}:null}function be(t){let e=i=>t.find(o=>o.id===i||o.type===i),n=e("injected"),r=typeof window<"u"&&window.ethereum!=null;return n&&r?n:e("walletConnect")??n??t[0]}function K(t){let{client:e,networkID:n,onAuthenticated:r,disabled:i,label:o,style:l}=t,c=wagmi.useConfig(),{isConnected:a}=wagmi.useAccount(),{connectAsync:m,connectors:d}=wagmi.useConnect(),p=b(),[u,y]=react.useState(false),[v,h]=react.useState(null),X=async()=>{y(true),h(null);try{if(!a){let M=be(d);if(!M){h("No wallet connector is configured.");return}try{await m({connector:M});}catch(L){if(!We(L))throw L}}let k=p??await De(c);if(!k){h("Wallet client is not available.");return}let A=await C({client:e,clients:k,networkID:n});if(A.ok){r();return}h(A.stage==="sign"?"Signature declined.":A.error??"Wallet sign-in failed.");}catch(k){console.error("[idosgames/wallet] wallet sign-in failed:",k),h(ve(k));}finally{y(false);}};return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:()=>{X();},disabled:i||u,style:{...Te,...i||u?{opacity:.6,cursor:"default"}:null,...l},children:u?"Check your wallet\u2026":a?o??"Sign in with wallet":"Connect wallet"}),v&&jsxRuntime.jsx("span",{role:"alert",style:Ae,children:v})]})}var Te={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},Ae={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};function Ne(t){let{endpoint:e,wallets:n,autoConnect:r=true,children:i}=t;return jsxRuntime.jsx(walletAdapterReact.ConnectionProvider,{endpoint:e,children:jsxRuntime.jsx(walletAdapterReact.WalletProvider,{wallets:n,autoConnect:r,children:i})})}async function S(t){let{client:e,adapter:n,network:r,mint:i,amountRaw:o,titleID:l,category:c}=t,a=e.auth.context?.userID;if(!a)return s("deposit-onchain","Not logged in.");if(o<=0n)return s("deposit-onchain","Amount must be positive.");let m;try{m=await n.depositSpl({mint:i,amountRaw:o,userID:a,titleID:l,category:core.normalizeBlockchainCategory(c)});}catch(p){return s("deposit-onchain",g(p))}let d=await e.blockchain.depositToken(r.NetworkID??"",m);return d.ok?{ok:true,onChainTxHash:m,data:d.data}:s("report",d.error,{onChainTxHash:m})}async function R(t){let{client:e,adapter:n,currencyID:r,networkID:i,walletAddress:o,amount:l,category:c}=t,a=await e.blockchain.requestTokenWithdrawal(r,i,o,l,c);if(!a.ok)return s("request",a.error);let m=a.data.SolanaSignature,d=a.data.TitleTransactionID??void 0;if(!m)return s("request","Withdrawal response carried no Solana signature.",{titleTransactionID:d});let p;try{p=await n.submitWithdrawal(m);}catch(y){return s("withdraw-onchain",g(y),{titleTransactionID:d})}if(!d)return s("confirm","Missing TitleTransactionID.",{onChainTxHash:p});let u=await e.blockchain.confirmWithdrawal(d,p);return u.ok?{ok:true,onChainTxHash:p,data:a.data}:s("confirm",u.error,{onChainTxHash:p,titleTransactionID:d})}async function F(t){let{client:e,networkID:n,walletAddress:r,signMessage:i}=t,o=await e.auth.requestWalletChallenge(r,n);if(!o.ok)return f("challenge",o.error);let l;try{let a=await i(new TextEncoder().encode(o.data.Message));l=Se(a);}catch(a){return f("sign",g(a))}let c=await e.auth.loginWithWallet(r,n,l);return c.ok?{ok:true,data:c.data}:f("login",c.error)}function Se(t){let e="0x";for(let n of t)e+=n.toString(16).padStart(2,"0");return e}var J="Wallet not connected.";function Fe(t,e,n){let{publicKey:r,signMessage:i}=walletAdapterReact.useWallet(),o=r?.toBase58()??null;return {connected:!!o,account:o,loginWithWallet:(l,c)=>{let a=c??o;return a?i?F({client:t,networkID:l,walletAddress:a,signMessage:i}):Promise.resolve(f("sign","The connected wallet does not support message signing.")):Promise.resolve(f("challenge",J))},depositToken:l=>S({client:t,adapter:n,titleID:e,...l}),withdrawToken:l=>{let c=l.walletAddress??o;return c?R({client:t,adapter:n,...l,walletAddress:c}):Promise.resolve(s("request",J))}}}exports.IDosGamesWalletProvider=P;exports.SolanaWalletBridgeProvider=Ne;exports.WalletLogin=Ce;exports.WalletLoginButton=K;exports.createEvmWalletConfig=re;exports.useEvmBridge=ge;exports.useEvmBridgeClients=b;exports.useSolanaBridge=Fe;
@@ -1 +1 @@
1
- import {r,b,q,l,k,s,c,u,t,v}from'../chunk-YV6AQWSH.js';import {http,createConfig,WagmiProvider,useAccount,usePublicClient,useWalletClient,useConfig,useConnect}from'wagmi';import {injected,coinbaseWallet,walletConnect}from'wagmi/connectors';import {QueryClient,QueryClientProvider}from'@tanstack/react-query';import {useState}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {getWalletClient,getPublicClient}from'wagmi/actions';import {ConnectionProvider,WalletProvider,useWallet}from'@solana/wallet-adapter-react';function _(e){let{chains:o,walletConnectProjectId:t,appName:n,appUrl:r,appIcon:i,transports:a,connectors:s}=e,l=n||r?{name:n??"iDosGames",description:n??"iDosGames game",url:r??"",icons:i?[i]:[]}:void 0,y=s??[injected(),coinbaseWallet({appName:n??"iDosGames"}),...t?[walletConnect({projectId:t,metadata:l,showQrModal:true})]:[]],g={};for(let u of o)g[u.id]=a?.[u.id]??http();return createConfig({chains:o,connectors:y,transports:g})}function h(e){let{wagmiConfig:o,queryClient:t,children:n}=e,[r]=useState(()=>t??new QueryClient);return jsx(WagmiProvider,{config:o,children:jsx(QueryClientProvider,{client:r,children:n})})}function C(){let{address:e}=useAccount(),o=usePublicClient(),{data:t}=useWalletClient();return !e||!o||!t?null:{account:e,publicClient:o,walletClient:t}}var m="Wallet not connected.";function $(e,o){let t=C();return {connected:!!t,account:t?.account??null,loginWithWallet:(n,r)=>t?s({client:e,clients:t,networkID:n,walletAddress:r}):Promise.resolve(c("challenge",m)),depositToken:n=>t?k({client:e,clients:t,titleID:o,...n}):Promise.resolve(b("approve",m)),depositNft:n=>t?l({client:e,clients:t,titleID:o,...n}):Promise.resolve(b("deposit-onchain",m)),withdrawToken:n=>t?q({client:e,clients:t,...n}):Promise.resolve(b("withdraw-onchain",m)),withdrawNft:n=>t?r({client:e,clients:t,...n}):Promise.resolve(b("withdraw-onchain",m))}}function ie(e){let{wagmiConfig:o,...t}=e;return jsx(h,{wagmiConfig:o,children:jsx(G,{...t})})}function ae(e){return e instanceof Error&&(e.name==="ConnectorAlreadyConnectedError"||e.message.includes("already connected"))}function se(e){let o="Wallet sign-in failed. Please try again.";return e instanceof Error?e.name==="ProviderNotFoundError"||/provider not found/i.test(e.message)?"No crypto wallet found in this browser. Install a wallet extension (e.g. MetaMask) or open this page in your wallet's browser, then try again.":e.name==="UserRejectedRequestError"||/user (rejected|denied|cancelled|canceled)/i.test(e.message)?"Request declined in the wallet.":/timed? ?out/i.test(e.message)?"The wallet did not respond. Open your wallet and try again.":o:o}async function le(e){let o=await getWalletClient(e).catch(()=>null);if(!o)return null;let t=getPublicClient(e);return t?{account:o.account.address,publicClient:t,walletClient:o}:null}function de(e){let o=r=>e.find(i=>i.id===r||i.type===r),t=o("injected"),n=typeof window<"u"&&window.ethereum!=null;return t&&n?t:o("walletConnect")??t??e[0]}function G(e){let{client:o,networkID:t,onAuthenticated:n,disabled:r,label:i,style:a}=e,s$1=useConfig(),{isConnected:l}=useAccount(),{connectAsync:y,connectors:g}=useConnect(),u=C(),[P,k]=useState(false),[T,c]=useState(null),j=async()=>{k(true),c(null);try{if(!l){let E=de(g);if(!E){c("No wallet connector is configured.");return}try{await y({connector:E});}catch(D){if(!ae(D))throw D}}let f=u??await le(s$1);if(!f){c("Wallet client is not available.");return}let v=await s({client:o,clients:f,networkID:t});if(v.ok){n();return}c(v.stage==="sign"?"Signature declined.":v.error??"Wallet sign-in failed.");}catch(f){c(se(f));}finally{k(false);}};return jsxs(Fragment,{children:[jsx("button",{type:"button",onClick:()=>{j();},disabled:r||P,style:{...ce,...r||P?{opacity:.6,cursor:"default"}:null,...a},children:P?"Check your wallet\u2026":l?i??"Sign in with wallet":"Connect wallet"}),T&&jsx("span",{role:"alert",style:pe,children:T})]})}var ce={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},pe={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};function we(e){let{endpoint:o,wallets:t,autoConnect:n=true,children:r}=e;return jsx(ConnectionProvider,{endpoint:o,children:jsx(WalletProvider,{wallets:t,autoConnect:n,children:r})})}var F="Wallet not connected.";function We(e,o,t$1){let{publicKey:n,signMessage:r}=useWallet(),i=n?.toBase58()??null;return {connected:!!i,account:i,loginWithWallet:(a,s)=>{let l=s??i;return l?r?v({client:e,networkID:a,walletAddress:l,signMessage:r}):Promise.resolve(c("sign","The connected wallet does not support message signing.")):Promise.resolve(c("challenge",F))},depositToken:a=>t({client:e,adapter:t$1,titleID:o,...a}),withdrawToken:a=>{let s=a.walletAddress??i;return s?u({client:e,adapter:t$1,...a,walletAddress:s}):Promise.resolve(b("request",F))}}}export{h as IDosGamesWalletProvider,we as SolanaWalletBridgeProvider,ie as WalletLogin,G as WalletLoginButton,_ as createEvmWalletConfig,$ as useEvmBridge,C as useEvmBridgeClients,We as useSolanaBridge};
1
+ import {r,b,q,l,k,s,c,u,t,v}from'../chunk-YV6AQWSH.js';import {http,createConfig,WagmiProvider,useAccount,usePublicClient,useWalletClient,useConfig,useConnect}from'wagmi';import {injected,coinbaseWallet,walletConnect}from'wagmi/connectors';import {QueryClient,QueryClientProvider}from'@tanstack/react-query';import {useState}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {getWalletClient,getPublicClient}from'wagmi/actions';import {ConnectionProvider,WalletProvider,useWallet}from'@solana/wallet-adapter-react';function _(e){let{chains:o,walletConnectProjectId:t,appName:n,appUrl:r,appIcon:i,transports:a,connectors:s}=e,l=n||r?{name:n??"iDosGames",description:n??"iDosGames game",url:r??"",icons:i?[i]:[]}:void 0,y=s??[injected(),coinbaseWallet({appName:n??"iDosGames"}),...t?[walletConnect({projectId:t,metadata:l,showQrModal:true})]:[]],u={};for(let f of o)u[f.id]=a?.[f.id]??http();return createConfig({chains:o,connectors:y,transports:u})}function h(e){let{wagmiConfig:o,queryClient:t,children:n}=e,[r]=useState(()=>t??new QueryClient);return jsx(WagmiProvider,{config:o,children:jsx(QueryClientProvider,{client:r,children:n})})}function C(){let{address:e}=useAccount(),o=usePublicClient(),{data:t}=useWalletClient();return !e||!o||!t?null:{account:e,publicClient:o,walletClient:t}}var g="Wallet not connected.";function $(e,o){let t=C();return {connected:!!t,account:t?.account??null,loginWithWallet:(n,r)=>t?s({client:e,clients:t,networkID:n,walletAddress:r}):Promise.resolve(c("challenge",g)),depositToken:n=>t?k({client:e,clients:t,titleID:o,...n}):Promise.resolve(b("approve",g)),depositNft:n=>t?l({client:e,clients:t,titleID:o,...n}):Promise.resolve(b("deposit-onchain",g)),withdrawToken:n=>t?q({client:e,clients:t,...n}):Promise.resolve(b("withdraw-onchain",g)),withdrawNft:n=>t?r({client:e,clients:t,...n}):Promise.resolve(b("withdraw-onchain",g))}}function ie(e){let{wagmiConfig:o,...t}=e;return jsx(h,{wagmiConfig:o,children:jsx(G,{...t})})}function ae(e){return e instanceof Error&&(e.name==="ConnectorAlreadyConnectedError"||e.message.includes("already connected"))}function se(e){let o="Wallet sign-in failed. Please try again.";return e instanceof Error?e.name==="ProviderNotFoundError"||/provider not found/i.test(e.message)?"No crypto wallet found in this browser. Install a wallet extension (e.g. MetaMask) or open this page in your wallet's browser, then try again.":e.name==="UserRejectedRequestError"||/user (rejected|denied|cancelled|canceled)/i.test(e.message)?"Request declined in the wallet.":/timed? ?out/i.test(e.message)?"The wallet did not respond. Open your wallet and try again.":o:o}async function le(e){let o=await getWalletClient(e).catch(()=>null);if(!o)return null;let t=getPublicClient(e);return t?{account:o.account.address,publicClient:t,walletClient:o}:null}function de(e){let o=r=>e.find(i=>i.id===r||i.type===r),t=o("injected"),n=typeof window<"u"&&window.ethereum!=null;return t&&n?t:o("walletConnect")??t??e[0]}function G(e){let{client:o,networkID:t,onAuthenticated:n,disabled:r,label:i,style:a}=e,s$1=useConfig(),{isConnected:l}=useAccount(),{connectAsync:y,connectors:u}=useConnect(),f=C(),[P,k]=useState(false),[T,c]=useState(null),j=async()=>{k(true),c(null);try{if(!l){let E=de(u);if(!E){c("No wallet connector is configured.");return}try{await y({connector:E});}catch(D){if(!ae(D))throw D}}let p=f??await le(s$1);if(!p){c("Wallet client is not available.");return}let v=await s({client:o,clients:p,networkID:t});if(v.ok){n();return}c(v.stage==="sign"?"Signature declined.":v.error??"Wallet sign-in failed.");}catch(p){console.error("[idosgames/wallet] wallet sign-in failed:",p),c(se(p));}finally{k(false);}};return jsxs(Fragment,{children:[jsx("button",{type:"button",onClick:()=>{j();},disabled:r||P,style:{...ce,...r||P?{opacity:.6,cursor:"default"}:null,...a},children:P?"Check your wallet\u2026":l?i??"Sign in with wallet":"Connect wallet"}),T&&jsx("span",{role:"alert",style:pe,children:T})]})}var ce={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},pe={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};function we(e){let{endpoint:o,wallets:t,autoConnect:n=true,children:r}=e;return jsx(ConnectionProvider,{endpoint:o,children:jsx(WalletProvider,{wallets:t,autoConnect:n,children:r})})}var F="Wallet not connected.";function We(e,o,t$1){let{publicKey:n,signMessage:r}=useWallet(),i=n?.toBase58()??null;return {connected:!!i,account:i,loginWithWallet:(a,s)=>{let l=s??i;return l?r?v({client:e,networkID:a,walletAddress:l,signMessage:r}):Promise.resolve(c("sign","The connected wallet does not support message signing.")):Promise.resolve(c("challenge",F))},depositToken:a=>t({client:e,adapter:t$1,titleID:o,...a}),withdrawToken:a=>{let s=a.walletAddress??i;return s?u({client:e,adapter:t$1,...a,walletAddress:s}):Promise.resolve(b("request",F))}}}export{h as IDosGamesWalletProvider,we as SolanaWalletBridgeProvider,ie as WalletLogin,G as WalletLoginButton,_ as createEvmWalletConfig,$ as useEvmBridge,C as useEvmBridgeClients,We as useSolanaBridge};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@idosgames/wallet",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "description": "Wallet-bridge companion to @idosgames/core: connect browser & mobile wallets (EVM via wagmi/viem/WalletConnect, Solana via wallet-adapter) and move tokens/NFTs in and out of the game through client.blockchain.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -57,6 +57,7 @@
57
57
  "dependencies": {
58
58
  "@idosgames/core": "^0.1.1",
59
59
  "@solana/web3.js": "^1.98.4",
60
+ "@walletconnect/ethereum-provider": "^2.21.1",
60
61
  "viem": "^2.55.2"
61
62
  },
62
63
  "peerDependencies": {