@idosgames/wallet 0.6.3 → 0.6.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
- import {f,h as h$1,b,a,i,c}from'./chunk-K3THMWU2.js';import {encodeAbiParameters,parseUnits}from'viem';import {normalizeBlockchainCategory}from'@idosgames/core';var k=[{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:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{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:"withdrawERC1155",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{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:[]}],I=[{type:"function",name:"withdrawERC1155Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{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:[]}],v=[{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"}]}],E=[{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"}]}],x=[{type:"function",name:"safeTransferFrom",stateMutability:"nonpayable",inputs:[{name:"from",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]}];function D(e,t,n){return encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[e,t,normalizeBlockchainCategory(n)])}async function h(e,t){let{walletClient:n,publicClient:r,account:s}=e,o=await n.writeContract({address:t.address,abi:t.abi,functionName:t.functionName,args:t.args,account:s,chain:n.chain,value:t.value});if((await r.waitForTransactionReceipt({hash:o})).status==="reverted")throw new Error(`On-chain transaction reverted (${o}).`);return o}function T(e){let t=e.RewardPoolAddress;return t||null}async function W(e,t,n,r){return await e.publicClient.readContract({address:t,abi:v,functionName:"allowance",args:[e.account,n]})>=r?null:h(e,{address:t,abi:v,functionName:"approve",args:[n,r]})}async function N(e){let{client:t,clients:n,network:r,tokenAddress:s,amount:o,titleID:m,category:d}=e;if(f())return h$1("approve");let i=t.auth.context?.userID;if(!i)return b("approve","Not logged in.");let u=T(r);if(!u)return b("approve","Network has no RewardPoolAddress.");if(o<=0n)return b("approve","Amount must be positive.");try{await W(n,s,u,o);}catch(l){return b("approve",a(l))}let c;try{c=await h(n,{address:u,abi:k,functionName:"depositERC20",args:[s,o,i,m,d??""]});}catch(l){return b("deposit-onchain",a(l))}let p=await t.blockchain.depositToken(r.NetworkID??"",c);return p.ok?{ok:true,onChainTxHash:c,data:p.data}:b("report",p.error,{onChainTxHash:c})}async function S(e){let{clients:t,poolAddress:n,tokenAddress:r,amount:s,userID:o,titleID:m,category:d}=e;if(f())return h$1("approve");if(!o)return b("approve","userID is required.");if(s<=0n)return b("approve","Amount must be positive.");try{await W(t,r,n,s);}catch(i){return b("approve",a(i))}try{let i=await h(t,{address:n,abi:k,functionName:"depositERC20",args:[r,s,o,m,d??""]});return {ok:!0,onChainTxHash:i,data:{txHash:i}}}catch(i){return b("deposit-onchain",a(i))}}async function L(e){let{client:t,clients:n,network:r,nftContractAddress:s,tokenId:o,amount:m,titleID:d,category:i}=e;if(f())return h$1("deposit-onchain");let u=t.auth.context?.userID;if(!u)return b("deposit-onchain","Not logged in.");let c=T(r);if(!c)return b("deposit-onchain","Network has no RewardPoolAddress.");if(m<=0n)return b("deposit-onchain","Amount must be positive.");let p=D(u,d,i),l;try{l=await h(n,{address:s,abi:E,functionName:"safeTransferFrom",args:[n.account,c,o,m,p]});}catch(A){return b("deposit-onchain",a(A))}let f$1=await t.blockchain.depositNFT(r.NetworkID??"",l);return f$1.ok?{ok:true,onChainTxHash:l,data:f$1.data}:b("report",f$1.error,{onChainTxHash:l})}async function O(e){let{client:t,clients:n,network:r,nftContractAddress:s,tokenId:o,titleID:m,category:d}=e;if(f())return h$1("deposit-onchain");let i=t.auth.context?.userID;if(!i)return b("deposit-onchain","Not logged in.");let u=T(r);if(!u)return b("deposit-onchain","Network has no RewardPoolAddress.");let c=D(i,m,d),p;try{p=await h(n,{address:s,abi:x,functionName:"safeTransferFrom",args:[n.account,u,o,c]});}catch(f){return b("deposit-onchain",a(f))}let l=await t.blockchain.depositNFT(r.NetworkID??"",p);return l.ok?{ok:true,onChainTxHash:p,data:l.data}:b("report",l.error,{onChainTxHash:p})}function P(e){return (e.Splits??[]).map(t=>({to:t.To,amount:BigInt(t.Amount??"0")}))}async function B(e,t){return h(e,{address:t.ContractAddress,abi:k,functionName:"withdrawERC20",args:[t.TokenAddress,t.WalletAddress,BigInt(t.Amount??"0"),BigInt(t.BurnAmount??"0"),P(t),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function R(e,t){return h(e,{address:t.ContractAddress,abi:I,functionName:"withdrawERC1155Mint",args:[t.TokenAddress,t.WalletAddress,BigInt(t.TokenId??"0"),BigInt(t.Amount??"0"),P(t),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function q(e,t){return h(e,{address:t.ContractAddress,abi:I,functionName:"withdrawERC721Mint",args:[t.TokenAddress,t.WalletAddress,BigInt(t.TokenId??"0"),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function U(e){let{client:t,clients:n,currencyID:r,networkID:s,walletAddress:o,amount:m,category:d}=e;if(f())return h$1("request");let i=await t.blockchain.requestTokenWithdrawal(r,s,o,m,d);if(!i.ok)return b("request",i.error);let u=i.data.EvmSignature,c=i.data.TitleTransactionID??void 0;if(!u)return b("request","Withdrawal response carried no EVM signature.",{titleTransactionID:c});let p;try{p=await B(n,u);}catch(f){return b("withdraw-onchain",a(f),{titleTransactionID:c})}let l=await H(t,c,p);return l.ok?{ok:true,onChainTxHash:p,data:i.data}:l}async function $(e){let{client:t,clients:n,itemID:r,networkID:s,walletAddress:o,amount:m,category:d}=e;if(f())return h$1("request");let i=await t.blockchain.requestNFTWithdrawal(r,s,o,m,d);if(!i.ok)return b("request",i.error);let u=i.data.EvmSignature,c=i.data.TitleTransactionID??void 0;if(!u)return b("request","Withdrawal response carried no EVM signature.",{titleTransactionID:c});let p;try{p=await R(n,u);}catch(f){return b("withdraw-onchain",a(f),{titleTransactionID:c})}let l=await H(t,c,p);return l.ok?{ok:true,onChainTxHash:p,data:i.data}:l}async function H(e,t,n){if(!t)return b("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let r=await e.blockchain.confirmWithdrawal(t,n);return r.ok?{ok:true,onChainTxHash:n,data:r.data}:b("confirm",r.error,{onChainTxHash:n,titleTransactionID:t})}async function V(e){let{client:t,clients:n,networkID:r}=e;if(f())return i("challenge");let s=e.walletAddress??n.account,o=await t.auth.requestWalletChallenge(s,r);if(!o.ok)return c("challenge",o.error);let m;try{m=await n.walletClient.signMessage({account:n.account,message:o.data.Message});}catch(i){return c("sign",a(i))}let d=await t.auth.loginWithWallet(s,r,m);return d.ok?{ok:true,data:d.data}:c("login",d.error)}async function z(e){let{client:t,clients:n,networkID:r}=e;if(f())return i("challenge");let s=e.walletAddress??n.account,o=await t.auth.linkWallet(s,r);if(!o.ok)return c("challenge",o.error);if(!o.data.Challenge)return c("challenge","No challenge was issued.");let m;try{m=await n.walletClient.signMessage({account:n.account,message:o.data.Challenge});}catch(i){return c("sign",a(i))}let d=await t.auth.linkWallet(s,r,m);return d.ok?{ok:true,data:d.data}:c("login",d.error)}async function J(e){let{client:t,clients:n,network:r,tokenAddress:s,decimals:o,titleID:m,shortfall:d,completePurchase:i,bufferRatio:u=0,category:c}=e;if(f())return h$1("approve");if(d.missing<=0)return b("approve","Nothing to deposit.");let p=d.missing*(1+Math.max(0,u)),l;try{l=parseUnits(K(p,o),o);}catch(F){return b("approve",a(F))}let f$1=await N({client:t,clients:n,network:r,tokenAddress:s,amount:l,titleID:m,category:c});if(!f$1.ok)return f$1;let A=await i();return A.ok?{ok:true,onChainTxHash:f$1.onChainTxHash,data:A.data}:b("report",A.error,{onChainTxHash:f$1.onChainTxHash})}function K(e,t){return e.toFixed(Math.min(t,18)).replace(/0+$/,"").replace(/\.$/,"")||"0"}export{k as a,v as b,E as c,x as d,D as e,h as f,W as g,N as h,S as i,L as j,O as k,B as l,R as m,q as n,U as o,$ as p,V as q,z as r,J as s};
1
+ import {f,h as h$1,b,a,i,c}from'./chunk-K3THMWU2.js';import {encodeAbiParameters,parseUnits}from'viem';import {normalizeBlockchainCategory}from'@idosgames/core';var k=[{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:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{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:"withdrawERC1155",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{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:[]}],I=[{type:"function",name:"withdrawERC1155Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{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:[]}],v=[{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"}]}],E=[{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"}]}],x=[{type:"function",name:"safeTransferFrom",stateMutability:"nonpayable",inputs:[{name:"from",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]}];function D(n,t,e){return encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[n,t,normalizeBlockchainCategory(e)])}async function h(n,t){let{walletClient:e,publicClient:r,account:s}=n,o=await e.writeContract({address:t.address,abi:t.abi,functionName:t.functionName,args:t.args,account:s,chain:e.chain,value:t.value});if((await r.waitForTransactionReceipt({hash:o})).status==="reverted")throw new Error(`On-chain transaction reverted (${o}).`);return o}function T(n){let t=n.RewardPoolAddress;return t||null}async function W(n,t,e,r){return await n.publicClient.readContract({address:t,abi:v,functionName:"allowance",args:[n.account,e]})>=r?null:h(n,{address:t,abi:v,functionName:"approve",args:[e,r]})}async function N(n){let{client:t,clients:e,network:r,tokenAddress:s,amount:o,titleID:m,category:d}=n;if(f())return h$1("approve");let i=t.auth.context?.userID;if(!i)return b("approve","Not logged in.");let u=T(r);if(!u)return b("approve","Network has no RewardPoolAddress.");if(o<=0n)return b("approve","Amount must be positive.");try{await W(e,s,u,o);}catch(l){return b("approve",a(l))}let c;try{c=await h(e,{address:u,abi:k,functionName:"depositERC20",args:[s,o,i,m,d??""]});}catch(l){return b("deposit-onchain",a(l))}let p=await t.blockchain.depositToken(r.NetworkID??"",c);return p.ok?{ok:true,onChainTxHash:c,data:p.data}:b("report",p.error,{onChainTxHash:c})}async function S(n){let{clients:t,poolAddress:e,tokenAddress:r,amount:s,userID:o,titleID:m,category:d}=n;if(f())return h$1("approve");if(!o)return b("approve","userID is required.");if(s<=0n)return b("approve","Amount must be positive.");try{await W(t,r,e,s);}catch(i){return b("approve",a(i))}try{let i=await h(t,{address:e,abi:k,functionName:"depositERC20",args:[r,s,o,m,d??""]});return {ok:!0,onChainTxHash:i,data:{txHash:i}}}catch(i){return b("deposit-onchain",a(i))}}async function L(n){let{client:t,clients:e,network:r,nftContractAddress:s,tokenId:o,amount:m,titleID:d,category:i}=n;if(f())return h$1("deposit-onchain");let u=t.auth.context?.userID;if(!u)return b("deposit-onchain","Not logged in.");let c=T(r);if(!c)return b("deposit-onchain","Network has no RewardPoolAddress.");if(m<=0n)return b("deposit-onchain","Amount must be positive.");let p=D(u,d,i),l;try{l=await h(e,{address:s,abi:E,functionName:"safeTransferFrom",args:[e.account,c,o,m,p]});}catch(A){return b("deposit-onchain",a(A))}let f$1=await t.blockchain.depositNFT(r.NetworkID??"",l);return f$1.ok?{ok:true,onChainTxHash:l,data:f$1.data}:b("report",f$1.error,{onChainTxHash:l})}async function O(n){let{client:t,clients:e,network:r,nftContractAddress:s,tokenId:o,titleID:m,category:d}=n;if(f())return h$1("deposit-onchain");let i=t.auth.context?.userID;if(!i)return b("deposit-onchain","Not logged in.");let u=T(r);if(!u)return b("deposit-onchain","Network has no RewardPoolAddress.");let c=D(i,m,d),p;try{p=await h(e,{address:s,abi:x,functionName:"safeTransferFrom",args:[e.account,u,o,c]});}catch(f){return b("deposit-onchain",a(f))}let l=await t.blockchain.depositNFT(r.NetworkID??"",p);return l.ok?{ok:true,onChainTxHash:p,data:l.data}:b("report",l.error,{onChainTxHash:p})}function P(n){return (n.Splits??[]).map(t=>({to:t.To,amount:BigInt(t.Amount??"0")}))}async function B(n,t){return h(n,{address:t.ContractAddress,abi:k,functionName:"withdrawERC20",args:[t.TokenAddress,t.WalletAddress,BigInt(t.Amount??"0"),BigInt(t.BurnAmount??"0"),P(t),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function R(n,t){return h(n,{address:t.ContractAddress,abi:I,functionName:"withdrawERC1155Mint",args:[t.TokenAddress,t.WalletAddress,BigInt(t.TokenId??"0"),BigInt(t.Amount??"0"),P(t),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function q(n,t){return h(n,{address:t.ContractAddress,abi:I,functionName:"withdrawERC721Mint",args:[t.TokenAddress,t.WalletAddress,BigInt(t.TokenId??"0"),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function U(n){let{client:t,clients:e,currencyID:r,networkID:s,walletAddress:o,amount:m,category:d}=n;if(f())return h$1("request");let i=await t.blockchain.requestTokenWithdrawal(r,s,o,m,d);if(!i.ok)return b("request",i.error);let u=i.data.EvmSignature,c=i.data.TitleTransactionID??void 0;if(!u)return b("request","Withdrawal response carried no EVM signature.",{titleTransactionID:c});let p;try{p=await B(e,u);}catch(f){return b("withdraw-onchain",a(f),{titleTransactionID:c})}let l=await H(t,c,p);return l.ok?{ok:true,onChainTxHash:p,data:i.data}:l}async function $(n){let{client:t,clients:e,itemID:r,networkID:s,walletAddress:o,amount:m,category:d}=n;if(f())return h$1("request");let i=await t.blockchain.requestNFTWithdrawal(r,s,o,m,d);if(!i.ok)return b("request",i.error);let u=i.data.EvmSignature,c=i.data.TitleTransactionID??void 0;if(!u)return b("request","Withdrawal response carried no EVM signature.",{titleTransactionID:c});let p;try{p=await R(e,u);}catch(f){return b("withdraw-onchain",a(f),{titleTransactionID:c})}let l=await H(t,c,p);return l.ok?{ok:true,onChainTxHash:p,data:i.data}:l}async function H(n,t,e){if(!t)return b("confirm","Missing TitleTransactionID.",{onChainTxHash:e});let r=await n.blockchain.confirmWithdrawal(t,e);return r.ok?{ok:true,onChainTxHash:e,data:r.data}:b("confirm",r.error,{onChainTxHash:e,titleTransactionID:t})}async function V(n){let{client:t,clients:e,networkID:r}=n;if(f())return i("challenge");let s=n.walletAddress??e.account,o=await t.auth.requestWalletChallenge(s,r);if(!o.ok)return c("challenge",o.error);let m;try{m=await e.walletClient.signMessage({account:e.account,message:o.data.Message});}catch(i){return c("sign",a(i))}let d=await t.auth.loginWithWallet(s,r,m);return d.ok?{ok:true,data:d.data}:c("login",d.error)}async function z(n){let{client:t,clients:e,networkID:r}=n;if(f())return i("challenge");let s=n.walletAddress??e.account,o=await t.auth.linkWallet(s,r);if(!o.ok)return c("challenge",o.error);if(!o.data.Challenge)return c("challenge","No challenge was issued.");let m;try{m=await e.walletClient.signMessage({account:e.account,message:o.data.Challenge});}catch(i){return c("sign",a(i))}let d=await t.auth.linkWallet(s,r,m);return d.ok?{ok:true,data:d.data}:c("login",d.error)}async function J(n){let{client:t,clients:e,network:r,tokenAddress:s,decimals:o,titleID:m,shortfall:d,completePurchase:i,bufferRatio:u=0,category:c}=n;if(f())return h$1("approve");if(d.missing<=0)return b("approve","Nothing to deposit.");let p=d.missing*(1+Math.max(0,u)),l;try{l=parseUnits(K(p,o),o);}catch(F){return b("approve",a(F))}let f$1=await N({client:t,clients:e,network:r,tokenAddress:s,amount:l,titleID:m,category:c});if(!f$1.ok)return f$1;let A=await i();return A.ok?{ok:true,onChainTxHash:f$1.onChainTxHash,data:A.data}:b("report",A.error,{onChainTxHash:f$1.onChainTxHash})}function K(n,t){let e=n.toFixed(Math.min(t,18));return e.includes(".")?e.replace(/0+$/,"").replace(/\.$/,"")||"0":e}export{k as a,v as b,E as c,x as d,D as e,h as f,W as g,N as h,S as i,L as j,O as k,B as l,R as m,q as n,U as o,$ as p,V as q,z as r,J as s};
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var viem=require('viem'),core=require('@idosgames/core');function f(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 g(t,e){return {ok:false,stage:t,error:e}}var I="WALLET_USE_SITE_PANEL",V=/^[a-z0-9]{8}-preview\.idos\.games$/;function N(t=typeof window>"u"?"":window.location.hostname){let e=t.toLowerCase();return V.test(e)?true:e!=="localhost"&&e!=="127.0.0.1"?false:globalThis.__IDOS_PREVIEW__!=null}function y(){if(typeof window>"u"||N())return false;try{return window.self!==window.top}catch{return true}}function K(){if(typeof window>"u")return false;try{return window.parent!==window.top}catch{return true}}function w(t){return s(t,I)}function A(t){return g(t,I)}var $=core.PLATFORM_ORIGINS;function Y(t){if(typeof window>"u")return ()=>{};let e=n=>{$.includes(n.origin)&&n.data?.type==="IDOS_WALLET_BALANCE_CHANGED"&&t();};return window.addEventListener("message",e),()=>window.removeEventListener("message",e)}var E={addressRequest:"IDOS_PLATFORM_WALLET_ADDRESS_REQUEST",addressResponse:"IDOS_PLATFORM_WALLET_ADDRESS_RESPONSE",signRequest:"IDOS_PLATFORM_WALLET_SIGN_REQUEST",signResponse:"IDOS_PLATFORM_WALLET_SIGN_RESPONSE",ack:core.PLATFORM_BRIDGE_ACK,openRequest:"IDOS_PLATFORM_WALLET_OPEN_REQUEST",openResponse:"IDOS_PLATFORM_WALLET_OPEN_RESPONSE"},J=core.PLATFORM_PAGE_UNAVAILABLE;async function C(t,e,n){let a=await core.askPlatformPage(t,e,n),{address:o,signature:i}=a.data;return {ok:a.ok,error:a.error,address:typeof o=="string"?o:void 0,signature:typeof i=="string"?i:void 0}}async function j(){return (await C(E.openRequest,E.openResponse,{})).ok}async function X(t){let{client:e,networkID:n}=t;return B(t,async a=>{let o=await e.auth.requestWalletChallenge(a,n);return o.ok?{ok:true,message:o.data.Message}:{ok:false,error:o.error}},(a,o)=>e.auth.loginWithWallet(a,n,o))}async function ee(t){let{client:e,networkID:n}=t;return B(t,async a=>{let o=await e.auth.linkWallet(a,n);return o.ok?o.data.Challenge?{ok:true,message:o.data.Challenge}:{ok:false,error:"No challenge was issued."}:{ok:false,error:o.error}},(a,o)=>e.auth.linkWallet(a,n,o))}async function B(t,e,n){let{client:a,family:o}=t,i=a.titleID,d=await C(E.addressRequest,E.addressResponse,{titleID:i,family:o});if(!d.ok||!d.address)return g("challenge",d.error??"NO_WALLET");let l=d.address,r=await e(l);if(!r.ok)return g("challenge",r.error);let p=await C(E.signRequest,E.signResponse,{titleID:i,family:o,address:l,message:r.message});if(!p.ok||!p.signature)return g("sign",p.error??"SIGN_FAILED");let c=await n(l,p.signature);return c.ok?{ok:true,data:c.data}:g("login",c.error)}var te={id:1,name:"Ethereum",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://eth.llamarpc.com"]}},blockExplorers:{default:{name:"Etherscan",url:"https://etherscan.io"}}},ne={id:56,name:"BNB Smart Chain",nativeCurrency:{name:"BNB",symbol:"BNB",decimals:18},rpcUrls:{default:{http:["https://bsc-dataseed.binance.org"]}},blockExplorers:{default:{name:"BscScan",url:"https://bscscan.com"}}},ae={id:137,name:"Polygon",nativeCurrency:{name:"POL",symbol:"POL",decimals:18},rpcUrls:{default:{http:["https://polygon-rpc.com"]}},blockExplorers:{default:{name:"PolygonScan",url:"https://polygonscan.com"}}},re={id:8453,name:"Base",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://mainnet.base.org"]}},blockExplorers:{default:{name:"BaseScan",url:"https://basescan.org"}}},oe={id:42161,name:"Arbitrum One",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://arb1.arbitrum.io/rpc"]}},blockExplorers:{default:{name:"Arbiscan",url:"https://arbiscan.io"}}},ie={id:10,name:"OP Mainnet",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://mainnet.optimism.io"]}},blockExplorers:{default:{name:"Optimistic Etherscan",url:"https://optimistic.etherscan.io"}}},se={id:11155111,name:"Sepolia",testnet:true,nativeCurrency:{name:"Sepolia Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.sepolia.org"]}},blockExplorers:{default:{name:"Etherscan",url:"https://sepolia.etherscan.io"}}},le={id:80002,name:"Polygon Amoy",testnet:true,nativeCurrency:{name:"POL",symbol:"POL",decimals:18},rpcUrls:{default:{http:["https://rpc-amoy.polygon.technology"]}},blockExplorers:{default:{name:"PolygonScan",url:"https://amoy.polygonscan.com"}}},de={mainnet:te,bsc:ne,polygon:ae,base:re,arbitrum:oe,optimism:ie,sepolia:se,polygonAmoy:le};function Fe(t){return Object.values(de).find(e=>e.id===t)}function Me(t){return {...t,chainNamespace:"eip155",caipNetworkId:`eip155:${t.id}`}}var _e={id:"5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",name:"Solana",network:"solana-mainnet",nativeCurrency:{name:"Solana",symbol:"SOL",decimals:9},rpcUrls:{default:{http:["https://api.mainnet-beta.solana.com"]}},blockExplorers:{default:{name:"Solscan",url:"https://solscan.io"}},testnet:false,chainNamespace:"solana",caipNetworkId:"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp"},He={id:"EtWTRABZaYq6iMfeYKouRu166VU2xqa1",name:"Solana Devnet",network:"solana-devnet",nativeCurrency:{name:"Solana",symbol:"SOL",decimals:9},rpcUrls:{default:{http:["https://api.devnet.solana.com"]}},blockExplorers:{default:{name:"Solscan",url:"https://solscan.io"}},testnet:true,chainNamespace:"solana",caipNetworkId:"solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1"};var b=[{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:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{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:"withdrawERC1155",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{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:[]}],D=[{type:"function",name:"withdrawERC1155Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{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"}]}],P=[{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"}]}],v=[{type:"function",name:"safeTransferFrom",stateMutability:"nonpayable",inputs:[{name:"from",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]}];function T(t,e,n){return viem.encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[t,e,core.normalizeBlockchainCategory(n)])}async function k(t,e){let{walletClient:n,publicClient:a,account:o}=t,i=await n.writeContract({address:e.address,abi:e.abi,functionName:e.functionName,args:e.args,account:o,chain:n.chain,value:e.value});if((await a.waitForTransactionReceipt({hash:i})).status==="reverted")throw new Error(`On-chain transaction reverted (${i}).`);return i}function S(t){let e=t.RewardPoolAddress;return e||null}async function R(t,e,n,a){return await t.publicClient.readContract({address:e,abi:x,functionName:"allowance",args:[t.account,n]})>=a?null:k(t,{address:e,abi:x,functionName:"approve",args:[n,a]})}async function L(t){let{client:e,clients:n,network:a,tokenAddress:o,amount:i,titleID:d,category:l}=t;if(y())return w("approve");let r=e.auth.context?.userID;if(!r)return s("approve","Not logged in.");let p=S(a);if(!p)return s("approve","Network has no RewardPoolAddress.");if(i<=0n)return s("approve","Amount must be positive.");try{await R(n,o,p,i);}catch(m){return s("approve",f(m))}let c;try{c=await k(n,{address:p,abi:b,functionName:"depositERC20",args:[o,i,r,d,l??""]});}catch(m){return s("deposit-onchain",f(m))}let u=await e.blockchain.depositToken(a.NetworkID??"",c);return u.ok?{ok:true,onChainTxHash:c,data:u.data}:s("report",u.error,{onChainTxHash:c})}async function ue(t){let{clients:e,poolAddress:n,tokenAddress:a,amount:o,userID:i,titleID:d,category:l}=t;if(y())return w("approve");if(!i)return s("approve","userID is required.");if(o<=0n)return s("approve","Amount must be positive.");try{await R(e,a,n,o);}catch(r){return s("approve",f(r))}try{let r=await k(e,{address:n,abi:b,functionName:"depositERC20",args:[a,o,i,d,l??""]});return {ok:!0,onChainTxHash:r,data:{txHash:r}}}catch(r){return s("deposit-onchain",f(r))}}async function me(t){let{client:e,clients:n,network:a,nftContractAddress:o,tokenId:i,amount:d,titleID:l,category:r}=t;if(y())return w("deposit-onchain");let p=e.auth.context?.userID;if(!p)return s("deposit-onchain","Not logged in.");let c=S(a);if(!c)return s("deposit-onchain","Network has no RewardPoolAddress.");if(d<=0n)return s("deposit-onchain","Amount must be positive.");let u=T(p,l,r),m;try{m=await k(n,{address:o,abi:P,functionName:"safeTransferFrom",args:[n.account,c,i,d,u]});}catch(W){return s("deposit-onchain",f(W))}let h=await e.blockchain.depositNFT(a.NetworkID??"",m);return h.ok?{ok:true,onChainTxHash:m,data:h.data}:s("report",h.error,{onChainTxHash:m})}async function ge(t){let{client:e,clients:n,network:a,nftContractAddress:o,tokenId:i,titleID:d,category:l}=t;if(y())return w("deposit-onchain");let r=e.auth.context?.userID;if(!r)return s("deposit-onchain","Not logged in.");let p=S(a);if(!p)return s("deposit-onchain","Network has no RewardPoolAddress.");let c=T(r,d,l),u;try{u=await k(n,{address:o,abi:v,functionName:"safeTransferFrom",args:[n.account,p,i,c]});}catch(h){return s("deposit-onchain",f(h))}let m=await e.blockchain.depositNFT(a.NetworkID??"",u);return m.ok?{ok:true,onChainTxHash:u,data:m.data}:s("report",m.error,{onChainTxHash:u})}function F(t){return (t.Splits??[]).map(e=>({to:e.To,amount:BigInt(e.Amount??"0")}))}async function M(t,e){return k(t,{address:e.ContractAddress,abi:b,functionName:"withdrawERC20",args:[e.TokenAddress,e.WalletAddress,BigInt(e.Amount??"0"),BigInt(e.BurnAmount??"0"),F(e),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function _(t,e){return k(t,{address:e.ContractAddress,abi:D,functionName:"withdrawERC1155Mint",args:[e.TokenAddress,e.WalletAddress,BigInt(e.TokenId??"0"),BigInt(e.Amount??"0"),F(e),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function fe(t,e){return k(t,{address:e.ContractAddress,abi:D,functionName:"withdrawERC721Mint",args:[e.TokenAddress,e.WalletAddress,BigInt(e.TokenId??"0"),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function ye(t){let{client:e,clients:n,currencyID:a,networkID:o,walletAddress:i,amount:d,category:l}=t;if(y())return w("request");let r=await e.blockchain.requestTokenWithdrawal(a,o,i,d,l);if(!r.ok)return s("request",r.error);let p=r.data.EvmSignature,c=r.data.TitleTransactionID??void 0;if(!p)return s("request","Withdrawal response carried no EVM signature.",{titleTransactionID:c});let u;try{u=await M(n,p);}catch(h){return s("withdraw-onchain",f(h),{titleTransactionID:c})}let m=await H(e,c,u);return m.ok?{ok:true,onChainTxHash:u,data:r.data}:m}async function he(t){let{client:e,clients:n,itemID:a,networkID:o,walletAddress:i,amount:d,category:l}=t;if(y())return w("request");let r=await e.blockchain.requestNFTWithdrawal(a,o,i,d,l);if(!r.ok)return s("request",r.error);let p=r.data.EvmSignature,c=r.data.TitleTransactionID??void 0;if(!p)return s("request","Withdrawal response carried no EVM signature.",{titleTransactionID:c});let u;try{u=await _(n,p);}catch(h){return s("withdraw-onchain",f(h),{titleTransactionID:c})}let m=await H(e,c,u);return m.ok?{ok:true,onChainTxHash:u,data:r.data}:m}async function H(t,e,n){if(!e)return s("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let a=await t.blockchain.confirmWithdrawal(e,n);return a.ok?{ok:true,onChainTxHash:n,data:a.data}:s("confirm",a.error,{onChainTxHash:n,titleTransactionID:e})}async function we(t){let{client:e,clients:n,networkID:a}=t;if(y())return A("challenge");let o=t.walletAddress??n.account,i=await e.auth.requestWalletChallenge(o,a);if(!i.ok)return g("challenge",i.error);let d;try{d=await n.walletClient.signMessage({account:n.account,message:i.data.Message});}catch(r){return g("sign",f(r))}let l=await e.auth.loginWithWallet(o,a,d);return l.ok?{ok:true,data:l.data}:g("login",l.error)}async function ke(t){let{client:e,clients:n,networkID:a}=t;if(y())return A("challenge");let o=t.walletAddress??n.account,i=await e.auth.linkWallet(o,a);if(!i.ok)return g("challenge",i.error);if(!i.data.Challenge)return g("challenge","No challenge was issued.");let d;try{d=await n.walletClient.signMessage({account:n.account,message:i.data.Challenge});}catch(r){return g("sign",f(r))}let l=await e.auth.linkWallet(o,a,d);return l.ok?{ok:true,data:l.data}:g("login",l.error)}async function Ae(t){let{client:e,clients:n,network:a,tokenAddress:o,decimals:i,titleID:d,shortfall:l,completePurchase:r,bufferRatio:p=0,category:c}=t;if(y())return w("approve");if(l.missing<=0)return s("approve","Nothing to deposit.");let u=l.missing*(1+Math.max(0,p)),m;try{m=viem.parseUnits(be(u,i),i);}catch(G){return s("approve",f(G))}let h=await L({client:e,clients:n,network:a,tokenAddress:o,amount:m,titleID:d,category:c});if(!h.ok)return h;let W=await r();return W.ok?{ok:true,onChainTxHash:h.onChainTxHash,data:W.data}:s("report",W.error,{onChainTxHash:h.onChainTxHash})}function be(t,e){return t.toFixed(Math.min(e,18)).replace(/0+$/,"").replace(/\.$/,"")||"0"}async function xe(t){let{client:e,adapter:n,network:a,mint:o,amountRaw:i,titleID:d,category:l}=t;if(y())return w("deposit-onchain");let r=e.auth.context?.userID;if(!r)return s("deposit-onchain","Not logged in.");if(i<=0n)return s("deposit-onchain","Amount must be positive.");let p;try{p=await n.depositSpl({mint:o,amountRaw:i,userID:r,titleID:d,category:core.normalizeBlockchainCategory(l)});}catch(u){return s("deposit-onchain",f(u))}let c=await e.blockchain.depositToken(a.NetworkID??"",p);return c.ok?{ok:true,onChainTxHash:p,data:c.data}:s("report",c.error,{onChainTxHash:p})}async function Te(t){let{client:e,adapter:n,currencyID:a,networkID:o,walletAddress:i,amount:d,category:l}=t;if(y())return w("request");let r=await e.blockchain.requestTokenWithdrawal(a,o,i,d,l);if(!r.ok)return s("request",r.error);let p=r.data.SolanaSignature,c=r.data.TitleTransactionID??void 0;if(!p)return s("request","Withdrawal response carried no Solana signature.",{titleTransactionID:c});let u;try{u=await n.submitWithdrawal(p);}catch(h){return s("withdraw-onchain",f(h),{titleTransactionID:c})}if(!c)return s("confirm","Missing TitleTransactionID.",{onChainTxHash:u});let m=await e.blockchain.confirmWithdrawal(c,u);return m.ok?{ok:true,onChainTxHash:u,data:r.data}:s("confirm",m.error,{onChainTxHash:u,titleTransactionID:c})}async function Ie(t){let{client:e,networkID:n,walletAddress:a,signMessage:o}=t;if(y())return A("challenge");let i=await e.auth.requestWalletChallenge(a,n);if(!i.ok)return g("challenge",i.error);let d;try{let r=await o(new TextEncoder().encode(i.data.Message));d=O(r);}catch(r){return g("sign",f(r))}let l=await e.auth.loginWithWallet(a,n,d);return l.ok?{ok:true,data:l.data}:g("login",l.error)}async function Ce(t){let{client:e,networkID:n,walletAddress:a,signMessage:o}=t;if(y())return A("challenge");let i=await e.auth.linkWallet(a,n);if(!i.ok)return g("challenge",i.error);if(!i.data.Challenge)return g("challenge","No challenge was issued.");let d;try{let r=await o(new TextEncoder().encode(i.data.Challenge));d=O(r);}catch(r){return g("sign",f(r))}let l=await e.auth.linkWallet(a,n,d);return l.ok?{ok:true,data:l.data}:g("login",l.error)}function O(t){let e="0x";for(let n of t)e+=n.toString(16).padStart(2,"0");return e}
1
+ 'use strict';var viem=require('viem'),core=require('@idosgames/core');function f(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 g(t,e){return {ok:false,stage:t,error:e}}var I="WALLET_USE_SITE_PANEL",V=/^[a-z0-9]{8}-preview\.idos\.games$/;function N(t=typeof window>"u"?"":window.location.hostname){let e=t.toLowerCase();return V.test(e)?true:e!=="localhost"&&e!=="127.0.0.1"?false:globalThis.__IDOS_PREVIEW__!=null}function y(){if(typeof window>"u"||N())return false;try{return window.self!==window.top}catch{return true}}function K(){if(typeof window>"u")return false;try{return window.parent!==window.top}catch{return true}}function w(t){return s(t,I)}function A(t){return g(t,I)}var $=core.PLATFORM_ORIGINS;function Y(t){if(typeof window>"u")return ()=>{};let e=n=>{$.includes(n.origin)&&n.data?.type==="IDOS_WALLET_BALANCE_CHANGED"&&t();};return window.addEventListener("message",e),()=>window.removeEventListener("message",e)}var E={addressRequest:"IDOS_PLATFORM_WALLET_ADDRESS_REQUEST",addressResponse:"IDOS_PLATFORM_WALLET_ADDRESS_RESPONSE",signRequest:"IDOS_PLATFORM_WALLET_SIGN_REQUEST",signResponse:"IDOS_PLATFORM_WALLET_SIGN_RESPONSE",ack:core.PLATFORM_BRIDGE_ACK,openRequest:"IDOS_PLATFORM_WALLET_OPEN_REQUEST",openResponse:"IDOS_PLATFORM_WALLET_OPEN_RESPONSE"},J=core.PLATFORM_PAGE_UNAVAILABLE;async function C(t,e,n){let a=await core.askPlatformPage(t,e,n),{address:o,signature:i}=a.data;return {ok:a.ok,error:a.error,address:typeof o=="string"?o:void 0,signature:typeof i=="string"?i:void 0}}async function j(){return (await C(E.openRequest,E.openResponse,{})).ok}async function X(t){let{client:e,networkID:n}=t;return B(t,async a=>{let o=await e.auth.requestWalletChallenge(a,n);return o.ok?{ok:true,message:o.data.Message}:{ok:false,error:o.error}},(a,o)=>e.auth.loginWithWallet(a,n,o))}async function ee(t){let{client:e,networkID:n}=t;return B(t,async a=>{let o=await e.auth.linkWallet(a,n);return o.ok?o.data.Challenge?{ok:true,message:o.data.Challenge}:{ok:false,error:"No challenge was issued."}:{ok:false,error:o.error}},(a,o)=>e.auth.linkWallet(a,n,o))}async function B(t,e,n){let{client:a,family:o}=t,i=a.titleID,d=await C(E.addressRequest,E.addressResponse,{titleID:i,family:o});if(!d.ok||!d.address)return g("challenge",d.error??"NO_WALLET");let l=d.address,r=await e(l);if(!r.ok)return g("challenge",r.error);let p=await C(E.signRequest,E.signResponse,{titleID:i,family:o,address:l,message:r.message});if(!p.ok||!p.signature)return g("sign",p.error??"SIGN_FAILED");let c=await n(l,p.signature);return c.ok?{ok:true,data:c.data}:g("login",c.error)}var te={id:1,name:"Ethereum",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://eth.llamarpc.com"]}},blockExplorers:{default:{name:"Etherscan",url:"https://etherscan.io"}}},ne={id:56,name:"BNB Smart Chain",nativeCurrency:{name:"BNB",symbol:"BNB",decimals:18},rpcUrls:{default:{http:["https://bsc-dataseed.binance.org"]}},blockExplorers:{default:{name:"BscScan",url:"https://bscscan.com"}}},ae={id:137,name:"Polygon",nativeCurrency:{name:"POL",symbol:"POL",decimals:18},rpcUrls:{default:{http:["https://polygon-rpc.com"]}},blockExplorers:{default:{name:"PolygonScan",url:"https://polygonscan.com"}}},re={id:8453,name:"Base",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://mainnet.base.org"]}},blockExplorers:{default:{name:"BaseScan",url:"https://basescan.org"}}},oe={id:42161,name:"Arbitrum One",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://arb1.arbitrum.io/rpc"]}},blockExplorers:{default:{name:"Arbiscan",url:"https://arbiscan.io"}}},ie={id:10,name:"OP Mainnet",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://mainnet.optimism.io"]}},blockExplorers:{default:{name:"Optimistic Etherscan",url:"https://optimistic.etherscan.io"}}},se={id:11155111,name:"Sepolia",testnet:true,nativeCurrency:{name:"Sepolia Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.sepolia.org"]}},blockExplorers:{default:{name:"Etherscan",url:"https://sepolia.etherscan.io"}}},le={id:80002,name:"Polygon Amoy",testnet:true,nativeCurrency:{name:"POL",symbol:"POL",decimals:18},rpcUrls:{default:{http:["https://rpc-amoy.polygon.technology"]}},blockExplorers:{default:{name:"PolygonScan",url:"https://amoy.polygonscan.com"}}},de={mainnet:te,bsc:ne,polygon:ae,base:re,arbitrum:oe,optimism:ie,sepolia:se,polygonAmoy:le};function Fe(t){return Object.values(de).find(e=>e.id===t)}function Me(t){return {...t,chainNamespace:"eip155",caipNetworkId:`eip155:${t.id}`}}var _e={id:"5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",name:"Solana",network:"solana-mainnet",nativeCurrency:{name:"Solana",symbol:"SOL",decimals:9},rpcUrls:{default:{http:["https://api.mainnet-beta.solana.com"]}},blockExplorers:{default:{name:"Solscan",url:"https://solscan.io"}},testnet:false,chainNamespace:"solana",caipNetworkId:"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp"},He={id:"EtWTRABZaYq6iMfeYKouRu166VU2xqa1",name:"Solana Devnet",network:"solana-devnet",nativeCurrency:{name:"Solana",symbol:"SOL",decimals:9},rpcUrls:{default:{http:["https://api.devnet.solana.com"]}},blockExplorers:{default:{name:"Solscan",url:"https://solscan.io"}},testnet:true,chainNamespace:"solana",caipNetworkId:"solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1"};var b=[{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:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{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:"withdrawERC1155",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{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:[]}],D=[{type:"function",name:"withdrawERC1155Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{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"}]}],P=[{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"}]}],v=[{type:"function",name:"safeTransferFrom",stateMutability:"nonpayable",inputs:[{name:"from",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]}];function T(t,e,n){return viem.encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[t,e,core.normalizeBlockchainCategory(n)])}async function k(t,e){let{walletClient:n,publicClient:a,account:o}=t,i=await n.writeContract({address:e.address,abi:e.abi,functionName:e.functionName,args:e.args,account:o,chain:n.chain,value:e.value});if((await a.waitForTransactionReceipt({hash:i})).status==="reverted")throw new Error(`On-chain transaction reverted (${i}).`);return i}function S(t){let e=t.RewardPoolAddress;return e||null}async function R(t,e,n,a){return await t.publicClient.readContract({address:e,abi:x,functionName:"allowance",args:[t.account,n]})>=a?null:k(t,{address:e,abi:x,functionName:"approve",args:[n,a]})}async function L(t){let{client:e,clients:n,network:a,tokenAddress:o,amount:i,titleID:d,category:l}=t;if(y())return w("approve");let r=e.auth.context?.userID;if(!r)return s("approve","Not logged in.");let p=S(a);if(!p)return s("approve","Network has no RewardPoolAddress.");if(i<=0n)return s("approve","Amount must be positive.");try{await R(n,o,p,i);}catch(m){return s("approve",f(m))}let c;try{c=await k(n,{address:p,abi:b,functionName:"depositERC20",args:[o,i,r,d,l??""]});}catch(m){return s("deposit-onchain",f(m))}let u=await e.blockchain.depositToken(a.NetworkID??"",c);return u.ok?{ok:true,onChainTxHash:c,data:u.data}:s("report",u.error,{onChainTxHash:c})}async function ue(t){let{clients:e,poolAddress:n,tokenAddress:a,amount:o,userID:i,titleID:d,category:l}=t;if(y())return w("approve");if(!i)return s("approve","userID is required.");if(o<=0n)return s("approve","Amount must be positive.");try{await R(e,a,n,o);}catch(r){return s("approve",f(r))}try{let r=await k(e,{address:n,abi:b,functionName:"depositERC20",args:[a,o,i,d,l??""]});return {ok:!0,onChainTxHash:r,data:{txHash:r}}}catch(r){return s("deposit-onchain",f(r))}}async function me(t){let{client:e,clients:n,network:a,nftContractAddress:o,tokenId:i,amount:d,titleID:l,category:r}=t;if(y())return w("deposit-onchain");let p=e.auth.context?.userID;if(!p)return s("deposit-onchain","Not logged in.");let c=S(a);if(!c)return s("deposit-onchain","Network has no RewardPoolAddress.");if(d<=0n)return s("deposit-onchain","Amount must be positive.");let u=T(p,l,r),m;try{m=await k(n,{address:o,abi:P,functionName:"safeTransferFrom",args:[n.account,c,i,d,u]});}catch(W){return s("deposit-onchain",f(W))}let h=await e.blockchain.depositNFT(a.NetworkID??"",m);return h.ok?{ok:true,onChainTxHash:m,data:h.data}:s("report",h.error,{onChainTxHash:m})}async function ge(t){let{client:e,clients:n,network:a,nftContractAddress:o,tokenId:i,titleID:d,category:l}=t;if(y())return w("deposit-onchain");let r=e.auth.context?.userID;if(!r)return s("deposit-onchain","Not logged in.");let p=S(a);if(!p)return s("deposit-onchain","Network has no RewardPoolAddress.");let c=T(r,d,l),u;try{u=await k(n,{address:o,abi:v,functionName:"safeTransferFrom",args:[n.account,p,i,c]});}catch(h){return s("deposit-onchain",f(h))}let m=await e.blockchain.depositNFT(a.NetworkID??"",u);return m.ok?{ok:true,onChainTxHash:u,data:m.data}:s("report",m.error,{onChainTxHash:u})}function F(t){return (t.Splits??[]).map(e=>({to:e.To,amount:BigInt(e.Amount??"0")}))}async function M(t,e){return k(t,{address:e.ContractAddress,abi:b,functionName:"withdrawERC20",args:[e.TokenAddress,e.WalletAddress,BigInt(e.Amount??"0"),BigInt(e.BurnAmount??"0"),F(e),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function _(t,e){return k(t,{address:e.ContractAddress,abi:D,functionName:"withdrawERC1155Mint",args:[e.TokenAddress,e.WalletAddress,BigInt(e.TokenId??"0"),BigInt(e.Amount??"0"),F(e),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function fe(t,e){return k(t,{address:e.ContractAddress,abi:D,functionName:"withdrawERC721Mint",args:[e.TokenAddress,e.WalletAddress,BigInt(e.TokenId??"0"),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function ye(t){let{client:e,clients:n,currencyID:a,networkID:o,walletAddress:i,amount:d,category:l}=t;if(y())return w("request");let r=await e.blockchain.requestTokenWithdrawal(a,o,i,d,l);if(!r.ok)return s("request",r.error);let p=r.data.EvmSignature,c=r.data.TitleTransactionID??void 0;if(!p)return s("request","Withdrawal response carried no EVM signature.",{titleTransactionID:c});let u;try{u=await M(n,p);}catch(h){return s("withdraw-onchain",f(h),{titleTransactionID:c})}let m=await H(e,c,u);return m.ok?{ok:true,onChainTxHash:u,data:r.data}:m}async function he(t){let{client:e,clients:n,itemID:a,networkID:o,walletAddress:i,amount:d,category:l}=t;if(y())return w("request");let r=await e.blockchain.requestNFTWithdrawal(a,o,i,d,l);if(!r.ok)return s("request",r.error);let p=r.data.EvmSignature,c=r.data.TitleTransactionID??void 0;if(!p)return s("request","Withdrawal response carried no EVM signature.",{titleTransactionID:c});let u;try{u=await _(n,p);}catch(h){return s("withdraw-onchain",f(h),{titleTransactionID:c})}let m=await H(e,c,u);return m.ok?{ok:true,onChainTxHash:u,data:r.data}:m}async function H(t,e,n){if(!e)return s("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let a=await t.blockchain.confirmWithdrawal(e,n);return a.ok?{ok:true,onChainTxHash:n,data:a.data}:s("confirm",a.error,{onChainTxHash:n,titleTransactionID:e})}async function we(t){let{client:e,clients:n,networkID:a}=t;if(y())return A("challenge");let o=t.walletAddress??n.account,i=await e.auth.requestWalletChallenge(o,a);if(!i.ok)return g("challenge",i.error);let d;try{d=await n.walletClient.signMessage({account:n.account,message:i.data.Message});}catch(r){return g("sign",f(r))}let l=await e.auth.loginWithWallet(o,a,d);return l.ok?{ok:true,data:l.data}:g("login",l.error)}async function ke(t){let{client:e,clients:n,networkID:a}=t;if(y())return A("challenge");let o=t.walletAddress??n.account,i=await e.auth.linkWallet(o,a);if(!i.ok)return g("challenge",i.error);if(!i.data.Challenge)return g("challenge","No challenge was issued.");let d;try{d=await n.walletClient.signMessage({account:n.account,message:i.data.Challenge});}catch(r){return g("sign",f(r))}let l=await e.auth.linkWallet(o,a,d);return l.ok?{ok:true,data:l.data}:g("login",l.error)}async function Ae(t){let{client:e,clients:n,network:a,tokenAddress:o,decimals:i,titleID:d,shortfall:l,completePurchase:r,bufferRatio:p=0,category:c}=t;if(y())return w("approve");if(l.missing<=0)return s("approve","Nothing to deposit.");let u=l.missing*(1+Math.max(0,p)),m;try{m=viem.parseUnits(be(u,i),i);}catch(G){return s("approve",f(G))}let h=await L({client:e,clients:n,network:a,tokenAddress:o,amount:m,titleID:d,category:c});if(!h.ok)return h;let W=await r();return W.ok?{ok:true,onChainTxHash:h.onChainTxHash,data:W.data}:s("report",W.error,{onChainTxHash:h.onChainTxHash})}function be(t,e){let n=t.toFixed(Math.min(e,18));return n.includes(".")?n.replace(/0+$/,"").replace(/\.$/,"")||"0":n}async function xe(t){let{client:e,adapter:n,network:a,mint:o,amountRaw:i,titleID:d,category:l}=t;if(y())return w("deposit-onchain");let r=e.auth.context?.userID;if(!r)return s("deposit-onchain","Not logged in.");if(i<=0n)return s("deposit-onchain","Amount must be positive.");let p;try{p=await n.depositSpl({mint:o,amountRaw:i,userID:r,titleID:d,category:core.normalizeBlockchainCategory(l)});}catch(u){return s("deposit-onchain",f(u))}let c=await e.blockchain.depositToken(a.NetworkID??"",p);return c.ok?{ok:true,onChainTxHash:p,data:c.data}:s("report",c.error,{onChainTxHash:p})}async function Te(t){let{client:e,adapter:n,currencyID:a,networkID:o,walletAddress:i,amount:d,category:l}=t;if(y())return w("request");let r=await e.blockchain.requestTokenWithdrawal(a,o,i,d,l);if(!r.ok)return s("request",r.error);let p=r.data.SolanaSignature,c=r.data.TitleTransactionID??void 0;if(!p)return s("request","Withdrawal response carried no Solana signature.",{titleTransactionID:c});let u;try{u=await n.submitWithdrawal(p);}catch(h){return s("withdraw-onchain",f(h),{titleTransactionID:c})}if(!c)return s("confirm","Missing TitleTransactionID.",{onChainTxHash:u});let m=await e.blockchain.confirmWithdrawal(c,u);return m.ok?{ok:true,onChainTxHash:u,data:r.data}:s("confirm",m.error,{onChainTxHash:u,titleTransactionID:c})}async function Ie(t){let{client:e,networkID:n,walletAddress:a,signMessage:o}=t;if(y())return A("challenge");let i=await e.auth.requestWalletChallenge(a,n);if(!i.ok)return g("challenge",i.error);let d;try{let r=await o(new TextEncoder().encode(i.data.Message));d=O(r);}catch(r){return g("sign",f(r))}let l=await e.auth.loginWithWallet(a,n,d);return l.ok?{ok:true,data:l.data}:g("login",l.error)}async function Ce(t){let{client:e,networkID:n,walletAddress:a,signMessage:o}=t;if(y())return A("challenge");let i=await e.auth.linkWallet(a,n);if(!i.ok)return g("challenge",i.error);if(!i.data.Challenge)return g("challenge","No challenge was issued.");let d;try{let r=await o(new TextEncoder().encode(i.data.Challenge));d=O(r);}catch(r){return g("sign",f(r))}let l=await e.auth.linkWallet(a,n,d);return l.ok?{ok:true,data:l.data}:g("login",l.error)}function O(t){let e="0x";for(let n of t)e+=n.toString(16).padStart(2,"0");return e}
2
2
  exports.PLATFORM_WALLET_MESSAGES=E;exports.PLATFORM_WALLET_UNAVAILABLE=J;exports.WALLET_USE_SITE_PANEL=I;exports.arbitrum=oe;exports.base=re;exports.bridgeFail=s;exports.bsc=ne;exports.chainById=Fe;exports.depositNftEvm=me;exports.depositNftEvm721=ge;exports.depositTokenEvm=L;exports.depositTokenOnChainEvm=ue;exports.depositTokenSolana=xe;exports.encodeNftDepositData=T;exports.ensureErc20Allowance=R;exports.erc1155Abi=P;exports.erc20Abi=x;exports.erc721Abi=v;exports.idosChains=de;exports.isAiCoderPreview=N;exports.isEmbeddedInPlatform=y;exports.isEmbeddedOnForeignSite=K;exports.linkWalletEvm=ke;exports.linkWalletSolana=Ce;exports.linkWalletViaPlatform=ee;exports.loginWithWalletEvm=we;exports.loginWithWalletSolana=Ie;exports.loginWithWalletViaPlatform=X;exports.mainnet=te;exports.onWalletBalanceChanged=Y;exports.openPlatformWalletPanel=j;exports.optimism=ie;exports.payWithWalletEvm=Ae;exports.polygon=ae;exports.polygonAmoy=le;exports.rewardPoolAbi=b;exports.sepolia=se;exports.solanaDevnet=He;exports.solanaMainnet=_e;exports.submitEvmNftWithdrawal=_;exports.submitEvmNftWithdrawal721=fe;exports.submitEvmTokenWithdrawal=M;exports.toAppKitNetwork=Me;exports.toErrorMessage=f;exports.walletLoginFail=g;exports.withdrawNftEvm=he;exports.withdrawTokenEvm=ye;exports.withdrawTokenSolana=Te;exports.writeAndWait=k;
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- export{j as depositNftEvm,k as depositNftEvm721,h as depositTokenEvm,i as depositTokenOnChainEvm,e as encodeNftDepositData,g as ensureErc20Allowance,c as erc1155Abi,b as erc20Abi,d as erc721Abi,r as linkWalletEvm,q as loginWithWalletEvm,s as payWithWalletEvm,a as rewardPoolAbi,m as submitEvmNftWithdrawal,n as submitEvmNftWithdrawal721,l as submitEvmTokenWithdrawal,p as withdrawNftEvm,o as withdrawTokenEvm,f as writeAndWait}from'./chunk-YTTVLBAW.js';export{a as PLATFORM_WALLET_MESSAGES,b as PLATFORM_WALLET_UNAVAILABLE,e as linkWalletViaPlatform,d as loginWithWalletViaPlatform,c as openPlatformWalletPanel}from'./chunk-B4KT5CVC.js';export{a as depositTokenSolana,d as linkWalletSolana,c as loginWithWalletSolana,b as withdrawTokenSolana}from'./chunk-MLIXKTS6.js';export{d as WALLET_USE_SITE_PANEL,o as arbitrum,n as base,b as bridgeFail,l as bsc,t as chainById,s as idosChains,e as isAiCoderPreview,f as isEmbeddedInPlatform,g as isEmbeddedOnForeignSite,k as mainnet,j as onWalletBalanceChanged,p as optimism,m as polygon,r as polygonAmoy,q as sepolia,w as solanaDevnet,v as solanaMainnet,u as toAppKitNetwork,a as toErrorMessage,c as walletLoginFail}from'./chunk-K3THMWU2.js';
1
+ export{j as depositNftEvm,k as depositNftEvm721,h as depositTokenEvm,i as depositTokenOnChainEvm,e as encodeNftDepositData,g as ensureErc20Allowance,c as erc1155Abi,b as erc20Abi,d as erc721Abi,r as linkWalletEvm,q as loginWithWalletEvm,s as payWithWalletEvm,a as rewardPoolAbi,m as submitEvmNftWithdrawal,n as submitEvmNftWithdrawal721,l as submitEvmTokenWithdrawal,p as withdrawNftEvm,o as withdrawTokenEvm,f as writeAndWait}from'./chunk-IUJSUGBX.js';export{a as PLATFORM_WALLET_MESSAGES,b as PLATFORM_WALLET_UNAVAILABLE,e as linkWalletViaPlatform,d as loginWithWalletViaPlatform,c as openPlatformWalletPanel}from'./chunk-B4KT5CVC.js';export{a as depositTokenSolana,d as linkWalletSolana,c as loginWithWalletSolana,b as withdrawTokenSolana}from'./chunk-MLIXKTS6.js';export{d as WALLET_USE_SITE_PANEL,o as arbitrum,n as base,b as bridgeFail,l as bsc,t as chainById,s as idosChains,e as isAiCoderPreview,f as isEmbeddedInPlatform,g as isEmbeddedOnForeignSite,k as mainnet,j as onWalletBalanceChanged,p as optimism,m as polygon,r as polygonAmoy,q as sepolia,w as solanaDevnet,v as solanaMainnet,u as toAppKitNetwork,a as toErrorMessage,c as walletLoginFail}from'./chunk-K3THMWU2.js';
@@ -1,2 +1,2 @@
1
- 'use strict';var wagmi=require('wagmi'),connectors=require('wagmi/connectors'),appkitAdapterWagmi=require('@reown/appkit-adapter-wagmi'),react=require('@reown/appkit/react'),reactQuery=require('@tanstack/react-query'),react$1=require('react'),jsxRuntime=require('react/jsx-runtime'),viem=require('viem'),core=require('@idosgames/core'),actions=require('wagmi/actions');var se={id:1,name:"Ethereum",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://eth.llamarpc.com"]}},blockExplorers:{default:{name:"Etherscan",url:"https://etherscan.io"}}},le={id:56,name:"BNB Smart Chain",nativeCurrency:{name:"BNB",symbol:"BNB",decimals:18},rpcUrls:{default:{http:["https://bsc-dataseed.binance.org"]}},blockExplorers:{default:{name:"BscScan",url:"https://bscscan.com"}}},ce={id:137,name:"Polygon",nativeCurrency:{name:"POL",symbol:"POL",decimals:18},rpcUrls:{default:{http:["https://polygon-rpc.com"]}},blockExplorers:{default:{name:"PolygonScan",url:"https://polygonscan.com"}}},de={id:8453,name:"Base",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://mainnet.base.org"]}},blockExplorers:{default:{name:"BaseScan",url:"https://basescan.org"}}},pe={id:42161,name:"Arbitrum One",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://arb1.arbitrum.io/rpc"]}},blockExplorers:{default:{name:"Arbiscan",url:"https://arbiscan.io"}}},ue={id:10,name:"OP Mainnet",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://mainnet.optimism.io"]}},blockExplorers:{default:{name:"Optimistic Etherscan",url:"https://optimistic.etherscan.io"}}},me={id:11155111,name:"Sepolia",testnet:true,nativeCurrency:{name:"Sepolia Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.sepolia.org"]}},blockExplorers:{default:{name:"Etherscan",url:"https://sepolia.etherscan.io"}}},fe={id:80002,name:"Polygon Amoy",testnet:true,nativeCurrency:{name:"POL",symbol:"POL",decimals:18},rpcUrls:{default:{http:["https://rpc-amoy.polygon.technology"]}},blockExplorers:{default:{name:"PolygonScan",url:"https://amoy.polygonscan.com"}}},je={mainnet:se,bsc:le,polygon:ce,base:de,arbitrum:pe,optimism:ue,sepolia:me,polygonAmoy:fe};function St(t){return Object.values(je).find(e=>e.id===t)}function Ve(t){return {...t,chainNamespace:"eip155",caipNetworkId:`eip155:${t.id}`}}var Ye=null;function Qe(t){Ye=t;}function ve(){return Ye}var Ze=[se,le,ce,de,pe,ue,me,fe],De=new Map;function Ee(t){let{chains:e=Ze,walletConnectProjectId:n,appName:o,appUrl:r,appIcon:i,transports:p,connectors:l}=t,c=n??"__extension_only__";if(!l){let u=De.get(c);if(u)return u}let y={};for(let u of e)y[u.id]=p?.[u.id]??wagmi.http();let m=r??(typeof window<"u"?window.location.origin:""),k={name:o??"iDosGames",description:o??"iDosGames game",url:m,icons:i?[i]:[]};if(n&&!l){let u=e.map(Ve),A=new appkitAdapterWagmi.WagmiAdapter({networks:u,projectId:n,transports:y});return Qe(react.createAppKit({adapters:[A],networks:u,projectId:n,metadata:k,features:{analytics:false,email:false,socials:false}})),De.set(c,A.wagmiConfig),A.wagmiConfig}let w=l??[connectors.injected(),connectors.coinbaseWallet({appName:o??"iDosGames"})],T=wagmi.createConfig({chains:e,connectors:w,transports:y});return l||De.set(c,T),T}function X(t){let{wagmiConfig:e,queryClient:n,children:o}=t,[r]=react$1.useState(()=>n??new reactQuery.QueryClient);return jsxRuntime.jsx(wagmi.WagmiProvider,{config:e,children:jsxRuntime.jsx(reactQuery.QueryClientProvider,{client:r,children:o})})}var ge=[{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:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{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:"withdrawERC1155",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{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:[]}],Xe=[{type:"function",name:"withdrawERC1155Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{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:[]}],Te=[{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"}]}],et=[{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 tt(t,e,n){return viem.encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[t,e,core.normalizeBlockchainCategory(n)])}async function _(t,e){let{walletClient:n,publicClient:o,account:r}=t,i=await n.writeContract({address:e.address,abi:e.abi,functionName:e.functionName,args:e.args,account:r,chain:n.chain,value:e.value});if((await o.waitForTransactionReceipt({hash:i})).status==="reverted")throw new Error(`On-chain transaction reverted (${i}).`);return i}function H(t){return t instanceof viem.BaseError?t.shortMessage:t instanceof Error?t.message:String(t)}function f(t,e,n){return {ok:false,stage:t,error:e,...n}}function S(t,e){return {ok:false,stage:t,error:e}}var nt="WALLET_USE_SITE_PANEL",Kt=/^[a-z0-9]{8}-preview\.idos\.games$/;function jt(t=typeof window>"u"?"":window.location.hostname){let e=t.toLowerCase();return Kt.test(e)?true:e!=="localhost"&&e!=="127.0.0.1"?false:globalThis.__IDOS_PREVIEW__!=null}function R(){if(typeof window>"u"||jt())return false;try{return window.self!==window.top}catch{return true}}function ot(){if(typeof window>"u")return false;try{return window.parent!==window.top}catch{return true}}function Y(t){return f(t,nt)}function Ie(t){return S(t,nt)}function rt(t){let e=t.RewardPoolAddress;return e||null}async function it(t,e,n,o){return await t.publicClient.readContract({address:e,abi:Te,functionName:"allowance",args:[t.account,n]})>=o?null:_(t,{address:e,abi:Te,functionName:"approve",args:[n,o]})}async function Ne(t){let{client:e,clients:n,network:o,tokenAddress:r,amount:i,titleID:p,category:l}=t;if(R())return Y("approve");let c=e.auth.context?.userID;if(!c)return f("approve","Not logged in.");let y=rt(o);if(!y)return f("approve","Network has no RewardPoolAddress.");if(i<=0n)return f("approve","Amount must be positive.");try{await it(n,r,y,i);}catch(w){return f("approve",H(w))}let m;try{m=await _(n,{address:y,abi:ge,functionName:"depositERC20",args:[r,i,c,p,l??""]});}catch(w){return f("deposit-onchain",H(w))}let k=await e.blockchain.depositToken(o.NetworkID??"",m);return k.ok?{ok:true,onChainTxHash:m,data:k.data}:f("report",k.error,{onChainTxHash:m})}async function Ae(t){let{client:e,clients:n,network:o,nftContractAddress:r,tokenId:i,amount:p,titleID:l,category:c}=t;if(R())return Y("deposit-onchain");let y=e.auth.context?.userID;if(!y)return f("deposit-onchain","Not logged in.");let m=rt(o);if(!m)return f("deposit-onchain","Network has no RewardPoolAddress.");if(p<=0n)return f("deposit-onchain","Amount must be positive.");let k=tt(y,l,c),w;try{w=await _(n,{address:r,abi:et,functionName:"safeTransferFrom",args:[n.account,m,i,p,k]});}catch(u){return f("deposit-onchain",H(u))}let T=await e.blockchain.depositNFT(o.NetworkID??"",w);return T.ok?{ok:true,onChainTxHash:w,data:T.data}:f("report",T.error,{onChainTxHash:w})}function at(t){return (t.Splits??[]).map(e=>({to:e.To,amount:BigInt(e.Amount??"0")}))}async function st(t,e){return _(t,{address:e.ContractAddress,abi:ge,functionName:"withdrawERC20",args:[e.TokenAddress,e.WalletAddress,BigInt(e.Amount??"0"),BigInt(e.BurnAmount??"0"),at(e),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function lt(t,e){return _(t,{address:e.ContractAddress,abi:Xe,functionName:"withdrawERC1155Mint",args:[e.TokenAddress,e.WalletAddress,BigInt(e.TokenId??"0"),BigInt(e.Amount??"0"),at(e),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function Pe(t){let{client:e,clients:n,currencyID:o,networkID:r,walletAddress:i,amount:p,category:l}=t;if(R())return Y("request");let c=await e.blockchain.requestTokenWithdrawal(o,r,i,p,l);if(!c.ok)return f("request",c.error);let y=c.data.EvmSignature,m=c.data.TitleTransactionID??void 0;if(!y)return f("request","Withdrawal response carried no EVM signature.",{titleTransactionID:m});let k;try{k=await st(n,y);}catch(T){return f("withdraw-onchain",H(T),{titleTransactionID:m})}let w=await ct(e,m,k);return w.ok?{ok:true,onChainTxHash:k,data:c.data}:w}async function We(t){let{client:e,clients:n,itemID:o,networkID:r,walletAddress:i,amount:p,category:l}=t;if(R())return Y("request");let c=await e.blockchain.requestNFTWithdrawal(o,r,i,p,l);if(!c.ok)return f("request",c.error);let y=c.data.EvmSignature,m=c.data.TitleTransactionID??void 0;if(!y)return f("request","Withdrawal response carried no EVM signature.",{titleTransactionID:m});let k;try{k=await lt(n,y);}catch(T){return f("withdraw-onchain",H(T),{titleTransactionID:m})}let w=await ct(e,m,k);return w.ok?{ok:true,onChainTxHash:k,data:c.data}:w}async function ct(t,e,n){if(!e)return f("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let o=await t.blockchain.confirmWithdrawal(e,n);return o.ok?{ok:true,onChainTxHash:n,data:o.data}:f("confirm",o.error,{onChainTxHash:n,titleTransactionID:e})}async function ee(t){let{client:e,clients:n,networkID:o}=t;if(R())return Ie("challenge");let r=t.walletAddress??n.account,i=await e.auth.requestWalletChallenge(r,o);if(!i.ok)return S("challenge",i.error);let p;try{p=await n.walletClient.signMessage({account:n.account,message:i.data.Message});}catch(c){return S("sign",H(c))}let l=await e.auth.loginWithWallet(r,o,p);return l.ok?{ok:true,data:l.data}:S("login",l.error)}async function Se(t){let{client:e,clients:n,networkID:o}=t;if(R())return Ie("challenge");let r=t.walletAddress??n.account,i=await e.auth.linkWallet(r,o);if(!i.ok)return S("challenge",i.error);if(!i.data.Challenge)return S("challenge","No challenge was issued.");let p;try{p=await n.walletClient.signMessage({account:n.account,message:i.data.Challenge});}catch(c){return S("sign",H(c))}let l=await e.auth.linkWallet(r,o,p);return l.ok?{ok:true,data:l.data}:S("login",l.error)}function ye(){let{address:t}=wagmi.useAccount(),e=wagmi.usePublicClient(),{data:n}=wagmi.useWalletClient();return !t||!e||!n?null:{account:t,publicClient:e,walletClient:n}}var te="Wallet not connected.";function Re(t,e){let n=ye();return {connected:!!n,account:n?.account??null,loginWithWallet:(o,r)=>n?ee({client:t,clients:n,networkID:o,walletAddress:r}):Promise.resolve(S("challenge",te)),depositToken:o=>n?Ne({client:t,clients:n,titleID:e,...o}):Promise.resolve(f("approve",te)),depositNft:o=>n?Ae({client:t,clients:n,titleID:e,...o}):Promise.resolve(f("deposit-onchain",te)),withdrawToken:o=>n?Pe({client:t,clients:n,...o}):Promise.resolve(f("withdraw-onchain",te)),withdrawNft:o=>n?We({client:t,clients:n,...o}):Promise.resolve(f("withdraw-onchain",te))}}function on(t){let{wagmiConfig:e,...n}=t;return jsxRuntime.jsx(X,{wagmiConfig:e,children:jsxRuntime.jsx(yt,{...n})})}function rn(t){return t instanceof Error&&(t.name==="ConnectorAlreadyConnectedError"||t.message.includes("already connected"))}function an(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 ut(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 sn(t,e=18e4){return actions.getAccount(t).isConnected?Promise.resolve(true):new Promise(n=>{let o=false,r=l=>{o||(o=true,i(),clearTimeout(p),n(l));},i=actions.watchAccount(t,{onChange:l=>{l.isConnected&&r(true);}}),p=setTimeout(()=>r(false),e);})}function ln(t,e=8e3){let n=o=>o==="reconnecting"||o==="connecting";return n(actions.getAccount(t).status)?new Promise(o=>{let r=false,i=()=>{r||(r=true,p(),clearTimeout(l),o());},p=actions.watchAccount(t,{onChange:c=>{n(c.status)||i();}}),l=setTimeout(i,e);}):Promise.resolve()}function cn(t){let e=r=>t.find(i=>i.id===r||i.type===r),n=e("injected"),o=typeof window<"u"&&window.ethereum!=null;return n&&o?n:e("walletConnect")??n??t[0]}var mt=9e4;async function dn(t){try{let o=(await actions.getAccount(t).connector?.getProvider?.())?.session?.peer?.metadata?.redirect,r=o?.native||o?.universal;return !r||typeof window>"u"?!1:(window.location.href=r,!0)}catch{return false}}function ft(t,e){return new Promise((n,o)=>{let r=setTimeout(()=>o(new Error("The wallet request timed out.")),e);t.then(i=>{clearTimeout(r),n(i);},i=>{clearTimeout(r),o(i instanceof Error?i:new Error(String(i)));});})}function yt(t){let{client:e,networkID:n,onAuthenticated:o,disabled:r,label:i,style:p,autoStart:l,mode:c="login",onLinked:y}=t,m=wagmi.useConfig(),{isConnected:k}=wagmi.useAccount(),{connectAsync:w,connectors:T}=wagmi.useConnect(),u=ye(),[A,C]=react$1.useState(false),[F,P]=react$1.useState(null),[O,$]=react$1.useState(false),Z=react$1.useRef(0),q=react$1.useRef(false),z=async()=>{let re=++Z.current,W=()=>Z.current===re;C(true),P(null);try{if(await ln(m),!W())return;if(!actions.getAccount(m).isConnected){let x=ve();if(x){if(await x.open(),!await sn(m)){P("No wallet was connected.");return}}else {let K=cn(T);if(!K){P("No wallet connector is configured.");return}try{await w({connector:K});}catch(j){if(!rn(j))throw j}}}let I=u??await ut(m);if(!I&&actions.getAccount(m).isConnected&&(await new Promise(x=>setTimeout(x,300)),I=await ut(m),!W()))return;if(!I){P("Wallet client is not available.");return}if($(!0),c==="link"){let x=await ft(Se({client:e,clients:I,networkID:n}),mt);if(!W())return;if(x.ok){y?.(x.data.PlayAccess??null);return}P(x.stage==="sign"?"Signature declined.":core.authErrorText(x.error,"Could not link the wallet."));return}let M=await ft(ee({client:e,clients:I,networkID:n}),mt);if(!W())return;if(M.ok){o();return}P(M.stage==="sign"?"Signature declined.":core.authErrorText(M.error,"Wallet sign-in failed."));}catch(I){if(!W())return;console.error("[idosgames/wallet] wallet sign-in failed:",I),P(an(I));}finally{W()&&(C(false),$(false));}};react$1.useEffect(()=>{!l||q.current||(q.current=true,z());},[l]);let he=async()=>{await dn(m)||await ve()?.open();};return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:()=>{O?he():z();},disabled:r,style:{...pn,...r?{opacity:.6,cursor:"default"}:null,...p},children:O?"Waiting for signature \u2014 tap to open wallet":A?"Check your wallet\u2026":k?i??(c==="link"?"Link wallet":"Sign in with wallet"):"Connect wallet"}),F&&jsxRuntime.jsx("span",{role:"alert",style:un,children:F})]})}var pn={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},un={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};var b=(t,e)=>`var(--idos-ui-${t}, ${e})`,a={panel:b("panel","#2c3480"),panelDeep:b("panel-deep","#1d2360"),panelEdge:b("panel-edge","#4f5bc9"),text:b("text","#ffffff"),textDim:b("text-dim","#aeb6f0"),gold:b("gold","#ffd24a"),goldDeep:b("gold-deep","#e89a12"),green:b("green","#59d35b"),greenDeep:b("green-deep","#2b9936"),blue:b("blue","#4fb1ff"),blueDeep:b("blue-deep","#2276d6"),red:b("red","#ff5a5a"),redDeep:b("red-deep","#b83232"),onGreen:b("on-green","#ffffff"),onBlue:b("on-blue","#ffffff"),onGold:b("on-gold","#ffffff"),textOutline:b("text-outline","0 2px 0 rgba(0,0,0,.45), 0 0 1px rgba(0,0,0,.6)"),well:b("well","rgba(8, 10, 40, 0.6)"),wellSoft:b("well-soft","rgba(0, 0, 0, 0.3)"),wellShadow:b("well-shadow","inset 0 2px 4px rgba(0, 0, 0, 0.4)"),edge:b("edge","rgba(0, 0, 0, 0.35)"),line:b("line","rgba(255, 255, 255, 0.2)"),panelShadow:b("panel-shadow","0 6px 0 rgba(4, 6, 30, 0.55), inset 0 2px 0 rgba(255, 255, 255, 0.12)"),radius:b("radius","18px"),buttonRadius:b("button-radius","14px"),font:b("font","'Baloo 2', 'Nunito', 'Trebuchet MS', system-ui, sans-serif"),fast:b("fast","120ms")},ht={green:[a.green,a.greenDeep,a.onGreen],blue:[a.blue,a.blueDeep,a.onBlue],gold:[a.gold,a.goldDeep,a.onGold],red:[a.red,a.redDeep,"#ffffff"]},E={color:a.text,fontWeight:800,textShadow:a.textOutline,letterSpacing:.2},Fe={boxSizing:"border-box",background:`linear-gradient(180deg, ${a.panel} 0%, ${a.panelDeep} 100%)`,border:`2px solid ${a.panelEdge}`,borderRadius:a.radius,boxShadow:a.panelShadow},U={boxSizing:"border-box",background:a.well,border:`2px solid ${a.panelEdge}`,boxShadow:a.wellShadow,borderRadius:14};function oe(t,e=false,n="md"){let[o,r,i]=e?["#8e95b8","#5b6187","#ffffff"]:ht[t];return {...E,color:i,boxSizing:"border-box",fontFamily:a.font,fontSize:n==="sm"?13:n==="lg"?18:16,border:"none",borderRadius:a.buttonRadius,padding:n==="sm"?"6px 12px":n==="lg"?"13px 22px":"10px 18px",minHeight:n==="sm"?34:n==="lg"?52:44,cursor:e?"default":"pointer",background:`linear-gradient(180deg, ${o} 0%, ${r} 100%)`,boxShadow:`0 4px 0 ${a.edge}, inset 0 2px 0 rgba(255,255,255,.35)`,opacity:e?.75:1,display:"inline-flex",alignItems:"center",justifyContent:"center",gap:8}}function bt(t){let[e,n,o]=ht[t];return {background:`linear-gradient(180deg, ${e} 0%, ${n} 100%)`,color:o,borderRadius:16,boxShadow:`0 4px 0 ${a.edge}, inset 0 2px 0 rgba(255,255,255,.3)`}}var N={...E,fontSize:13,color:a.textDim},gn=["ru","kk","uk","be","ky","uz","tg"];function yn(){if(typeof navigator>"u")return false;let t=(navigator.language||"").toLowerCase();return gn.some(e=>t.startsWith(e))}var wt={title:"Wallet",topUpTitle:"Top up to buy",connectHint:"Connect a wallet to deposit and withdraw",connect:"Connect wallet",notConfigured:"Wallet connection is not set up for this app.",disconnect:"Disconnect",balance:"In-game balance",deposit:"Deposit",withdraw:"Withdraw",network:"Network",token:"Token",amount:"Amount",max:"MAX",minWithdraw:"Minimum to withdraw: {n}",noNetworks:"Crypto is not set up for this app yet.",noTokens:"No tokens on this network.",depositing:"Confirm in your wallet\u2026",withdrawing:"Withdrawing\u2026",confirming:"Waiting for the network to confirm\u2026",loading:"Loading\u2026",doneDeposit:"Deposited \u2014 the balance is updated.",doneWithdraw:"Sent to your wallet.",topUpNeed:"This purchase needs",topUpMore:"more",topUpHint:"Deposit it from your wallet \u2014 the purchase completes by itself once it is credited.",topUpCannot:"{name} cannot be deposited here.",depositAmount:"Deposit {amount} {name}",failed:"Did not go through",debited:"The amount is already debited \u2014 retry this withdrawal, do not request a new one.",tx:"Transaction",backed:"Crypto (withdrawable)",unbacked:"IOU (not backed yet)",total:"Total",iouHint:"IOUs spend in the app like crypto, but you can withdraw only the backed part; the developer backs IOUs later.",backedHint:"All of it is real crypto and can be withdrawn."},wn={title:"\u041A\u043E\u0448\u0435\u043B\u0451\u043A",topUpTitle:"\u041F\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 \u0434\u043B\u044F \u043F\u043E\u043A\u0443\u043F\u043A\u0438",connectHint:"\u041F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u0435 \u043A\u043E\u0448\u0435\u043B\u0451\u043A, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u043F\u043E\u043B\u043D\u044F\u0442\u044C \u0438 \u0432\u044B\u0432\u043E\u0434\u0438\u0442\u044C",connect:"\u041F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043A\u043E\u0448\u0435\u043B\u0451\u043A",notConfigured:"\u041F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 \u043A\u043E\u0448\u0435\u043B\u044C\u043A\u0430 \u0434\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u043D\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043D\u043E.",disconnect:"\u041E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u044C",balance:"\u0411\u0430\u043B\u0430\u043D\u0441 \u0432 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438",deposit:"\u041F\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u044C",withdraw:"\u0412\u044B\u0432\u0435\u0441\u0442\u0438",network:"\u0421\u0435\u0442\u044C",token:"\u0422\u043E\u043A\u0435\u043D",amount:"\u0421\u0443\u043C\u043C\u0430",max:"\u0412\u0421\u0401",minWithdraw:"\u041C\u0438\u043D\u0438\u043C\u0443\u043C \u0434\u043B\u044F \u0432\u044B\u0432\u043E\u0434\u0430: {n}",noNetworks:"\u041A\u0440\u0438\u043F\u0442\u0430 \u0434\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0435\u0449\u0451 \u043D\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043D\u0430.",noTokens:"\u0412 \u044D\u0442\u043E\u0439 \u0441\u0435\u0442\u0438 \u043D\u0435\u0442 \u0442\u043E\u043A\u0435\u043D\u043E\u0432.",depositing:"\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u0432 \u043A\u043E\u0448\u0435\u043B\u044C\u043A\u0435\u2026",withdrawing:"\u0412\u044B\u0432\u043E\u0434\u0438\u043C\u2026",confirming:"\u0416\u0434\u0451\u043C \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u044F \u0441\u0435\u0442\u0438\u2026",loading:"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430\u2026",doneDeposit:"\u041F\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u043E \u2014 \u0431\u0430\u043B\u0430\u043D\u0441 \u043E\u0431\u043D\u043E\u0432\u043B\u0451\u043D.",doneWithdraw:"\u041E\u0442\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043E \u043D\u0430 \u0432\u0430\u0448 \u043A\u043E\u0448\u0435\u043B\u0451\u043A.",topUpNeed:"\u0414\u043B\u044F \u043F\u043E\u043A\u0443\u043F\u043A\u0438 \u043D\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442",topUpMore:"",topUpHint:"\u041F\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435 \u0441 \u043A\u043E\u0448\u0435\u043B\u044C\u043A\u0430 \u2014 \u043F\u043E\u043A\u0443\u043F\u043A\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044F \u0441\u0430\u043C\u0430, \u043A\u0430\u043A \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 \u0437\u0430\u0447\u0438\u0441\u043B\u0438\u0442\u0441\u044F.",topUpCannot:"{name} \u0437\u0434\u0435\u0441\u044C \u043F\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u043D\u0435\u043B\u044C\u0437\u044F.",depositAmount:"\u041F\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u043D\u0430 {amount} {name}",failed:"\u041D\u0435 \u043F\u0440\u043E\u0448\u043B\u043E",debited:"\u0421\u0443\u043C\u043C\u0430 \u0443\u0436\u0435 \u0441\u043F\u0438\u0441\u0430\u043D\u0430 \u2014 \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0435 \u044D\u0442\u043E\u0442 \u0432\u044B\u0432\u043E\u0434, \u043D\u043E\u0432\u044B\u0439 \u043D\u0435 \u0437\u0430\u043F\u0440\u0430\u0448\u0438\u0432\u0430\u0439\u0442\u0435.",tx:"\u0422\u0440\u0430\u043D\u0437\u0430\u043A\u0446\u0438\u044F",backed:"\u041A\u0440\u0438\u043F\u0442\u0430 (\u043C\u043E\u0436\u043D\u043E \u0432\u044B\u0432\u0435\u0441\u0442\u0438)",unbacked:"\u0420\u0430\u0441\u043F\u0438\u0441\u043A\u0438 (\u043F\u043E\u043A\u0430 \u043D\u0435 \u043E\u0431\u0435\u0441\u043F\u0435\u0447\u0435\u043D\u044B)",total:"\u0412\u0441\u0435\u0433\u043E",iouHint:"\u0420\u0430\u0441\u043F\u0438\u0441\u043A\u0438 \u0442\u0440\u0430\u0442\u044F\u0442\u0441\u044F \u0432 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043A\u0430\u043A \u043A\u0440\u0438\u043F\u0442\u0430, \u043D\u043E \u0432\u044B\u0432\u0435\u0441\u0442\u0438 \u043C\u043E\u0436\u043D\u043E \u0442\u043E\u043B\u044C\u043A\u043E \u043E\u0431\u0435\u0441\u043F\u0435\u0447\u0435\u043D\u043D\u0443\u044E \u0447\u0430\u0441\u0442\u044C; \u0440\u0430\u0437\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A \u043E\u0431\u0435\u0441\u043F\u0435\u0447\u0438\u0442 \u0440\u0430\u0441\u043F\u0438\u0441\u043A\u0438 \u043F\u043E\u0437\u0436\u0435.",backedHint:"\u042D\u0442\u043E \u043D\u0430\u0441\u0442\u043E\u044F\u0449\u0430\u044F \u043A\u0440\u0438\u043F\u0442\u0430, \u0435\u0451 \u043C\u043E\u0436\u043D\u043E \u0432\u044B\u0432\u0435\u0441\u0442\u0438 \u0446\u0435\u043B\u0438\u043A\u043E\u043C."};function d(t,e){let n=(yn()?wn:wt)[t]??wt[t];for(let[o,r]of Object.entries(e??{}))n=n.replace(`{${o}}`,String(r));return n}var kn=/^(Not enough confirmations|Transaction not found on chain)/,Cn=8,xn=5e3;function vn(t,e){let n=Math.max(0,Math.floor(e||0)),[o="0",r=""]=t.split(".");if(r.length<=n)return t;let i=r.slice(0,n),p=BigInt(o+i)+(/^0*$/.test(r.slice(n))?BigInt(0):BigInt(1));if(n===0)return p.toString();let l=p.toString().padStart(n+1,"0");return `${l.slice(0,-n)}.${l.slice(-n)}`.replace(/\.?0+$/,"")}function Me(t,e=6){let n=Number(t);return Number.isFinite(n)?n.toLocaleString("en-US",{maximumFractionDigits:Math.max(0,e)}).replace(/,/g," "):String(t)}var xt=t=>t.length>14?`${t.slice(0,6)}\u2026${t.slice(-4)}`:t,kt=t=>/^\d+(\.\d+)?$/.test(t)&&Number(t)>0;function vt({client:t,engine:e,onClose:n,style:o,topUp:r}){let[,i]=react$1.useReducer(g=>g+1,0),[p,l]=react$1.useState(false),[c,y]=react$1.useState({}),[m,k]=react$1.useState({}),[w,T]=react$1.useState("deposit"),[u,A]=react$1.useState(""),[C,F]=react$1.useState(""),[P,O]=react$1.useState(""),[$,Z]=react$1.useState(false),[q,z]=react$1.useState(null),[he,re]=react$1.useState(false);react$1.useEffect(()=>{let g=true;return (async()=>{let[D]=await Promise.all([t.blockchain.getDefinitions(),t.cache.ensureState(["InventoryV2","Blockchain"])]);if(!g||(l(true),!D.ok))return;let v={};for(let[L,G]of Object.entries(D.data.Blockchain?.Networks??{}))G.Type===e.networkType&&(v[L]=G);y(v);let V=D.data.CryptoCurrencies??{};k(V);let J=r?V[r.currencyID]?.Networks?.find(L=>!!L.NetworkID&&!!v[L.NetworkID]&&!!L.ContractAddress&&L.DepositsEnabled!==false&&v[L.NetworkID]?.DepositsEnabled!==false)?.NetworkID:null;A(J??Object.keys(v)[0]??"");})(),()=>{g=false;}},[t,e.networkType]),react$1.useEffect(()=>t.on("user:anyUpdated",i),[t]);let W=react$1.useMemo(()=>Object.entries(m).filter(([,g])=>g.Networks?.some(D=>D.NetworkID===u&&!!D.ContractAddress)),[m,u]);react$1.useEffect(()=>{let g=W[0]?.[0]??"";F(D=>r?r.currencyID:W.some(([v])=>v===D)?D:g);},[W,r]);let I=u?c[u]:void 0,M=C?m[C]:void 0,x=M?.Networks?.find(g=>g.NetworkID===u),K=C?t.data.user.getCryptoCurrencyAmount(C):"0",j=M?.DisplayName??C,ie=C?M?.UnbackedRewardCurrencyID||`${C}_IOU`:"",Dt=ie&&Number(t.data.user.state?.InventoryV2?.VirtualCurrencies?.[ie]?.Amount??0)||0,Et=!!ie&&t.data.user.state?.InventoryV2?.VirtualCurrencies?.[ie]!=null,Oe=M?.DisplayDecimals??6,ae=!!e.address,Ge=!!r&&!!x?.ContractAddress&&C===r.currencyID,be=r&&x?vn(r.amount,x.Decimals??18):"",ke=r?m[r.currencyID]?.DisplayName??r.currencyID:"",_e=Number(x?.MinWithdraw??0);async function Ce(g,D){Z(true),z(null);try{let v=await D();return z({tab:g,res:v}),v.ok&&O(""),v}finally{Z(false);}}async function $e(g){let D=await qe();if(!D)return f("approve",d("noNetworks"));let v=await e.deposit({...g,network:D});if(v.ok||v.stage!=="report"||!v.onChainTxHash)return v;let V=v.onChainTxHash,J=v.error;re(true);try{for(let L=1;L<=Cn&&kn.test(J);L++){await new Promise(Wt=>setTimeout(Wt,xn));let G=await t.blockchain.depositToken(u,V);if(G.ok)return {ok:!0,onChainTxHash:V,data:G.data};if(/^Transaction hash already used/.test(G.error))return await t.cache.ensureState(["InventoryV2"],{force:!0}),{ok:!0,onChainTxHash:V,data:null};J=G.error;}}finally{re(false);}return {...v,error:J}}async function qe(){let g=await t.blockchain.getDefinitions({forceRefresh:true});return g.ok?g.data.Blockchain?.Networks?.[u]??null:null}async function Tt(){let g=await qe();return g?e.withdraw({network:g,networkID:u,currencyID:C,amount:P}):f("request",d("noNetworks"))}let xe=he?d("confirming"):w==="withdraw"&&!r?d("withdrawing"):d("depositing"),It=ae?jsxRuntime.jsxs("div",{style:{...U,display:"flex",alignItems:"center",gap:10,padding:"8px 8px 8px 12px"},children:[jsxRuntime.jsx("span",{style:Tn,"aria-hidden":true}),jsxRuntime.jsxs("div",{style:{display:"grid",flex:1,minWidth:0},children:[jsxRuntime.jsx("span",{style:{...E,fontSize:15,fontFamily:"ui-monospace, Consolas, monospace"},children:xt(e.address)}),I?jsxRuntime.jsx("span",{style:{...N,fontSize:12},children:I.DisplayName??u}):null]}),jsxRuntime.jsx("button",{type:"button",className:"idos-press",style:In,onClick:e.disconnect,children:d("disconnect")})]}):jsxRuntime.jsxs("div",{style:{display:"grid",gap:8},children:[jsxRuntime.jsx("span",{style:N,children:d("connectHint")}),e.connectChoices.length===0?jsxRuntime.jsx("div",{style:{...U,padding:"10px 12px",...N},children:d("notConfigured")}):e.connectChoices.length===1?jsxRuntime.jsx("button",{type:"button",className:"idos-press",style:{...oe("blue",false,"lg"),width:"100%"},onClick:e.connectChoices[0].connect,children:d("connect")}):e.connectChoices.map(g=>jsxRuntime.jsxs("button",{type:"button",className:"idos-press",style:Nn,onClick:g.connect,children:[jsxRuntime.jsx("span",{style:{flex:1,textAlign:"left"},children:g.label}),jsxRuntime.jsx("span",{"aria-hidden":true,style:{color:a.textDim},children:"\u203A"})]},g.key))]}),ze=C?jsxRuntime.jsx(Sn,{icon:jsxRuntime.jsx(Wn,{assets:M?.AssetPaths,name:j}),name:j,backed:Number(K)||0,unbacked:Dt,hasIou:Et,decimals:Oe}):null,Nt=jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[Object.keys(c).length>1?jsxRuntime.jsx(Ct,{caption:d("network"),value:u,onChange:A,options:Object.entries(c).map(([g,D])=>[g,D.DisplayName??g])}):null,W.length===0?jsxRuntime.jsx("div",{style:{...U,padding:"10px 12px",...N},children:d("noTokens")}):W.length>1?jsxRuntime.jsx(Ct,{caption:d("token"),value:C,onChange:F,options:W.map(([g,D])=>[g,D.DisplayName??g])}):null]}),At=jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(Rn,{value:w,onChange:g=>{T(g),z(null),O("");}}),Nt,jsxRuntime.jsxs("div",{style:{display:"grid",gap:6},children:[jsxRuntime.jsx("span",{style:N,children:d("amount")}),jsxRuntime.jsxs("div",{style:{...U,display:"flex",alignItems:"center",gap:8,padding:"4px 6px 4px 14px"},children:[jsxRuntime.jsx("input",{style:Pn,inputMode:"decimal",placeholder:"0.0",value:P,onChange:g=>O(g.target.value.replace(",","."))}),jsxRuntime.jsx("span",{style:{...N,fontSize:14},children:j}),w==="withdraw"&&Number(K)>0?jsxRuntime.jsx("button",{type:"button",className:"idos-press",style:oe("gold",false,"sm"),onClick:()=>O(String(K)),children:d("max")}):null]}),w==="withdraw"&&_e>0?jsxRuntime.jsx("span",{style:{...N,fontSize:12},children:d("minWithdraw",{n:Me(_e,Oe)})}):null]}),w==="deposit"?jsxRuntime.jsx(He,{tone:"green",busy:$,busyText:xe,disabled:!ae||!x?.ContractAddress||!kt(P),onClick:()=>{!I||!x||Ce("deposit",()=>$e({network:I,binding:x,currencyID:C,amount:P}));},children:d("deposit")}):jsxRuntime.jsx(He,{tone:"blue",busy:$,busyText:xe,disabled:!ae||!C||!kt(P),onClick:()=>{I&&Ce("withdraw",()=>Tt());},children:d("withdraw")})]}),Pt=r?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{style:{...bt("gold"),padding:"12px 14px",display:"grid",gap:4},children:Ge?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("span",{style:{...E,color:"inherit",fontSize:13,opacity:.9},children:d("topUpNeed")}),jsxRuntime.jsxs("span",{style:{...E,color:"inherit",fontSize:24,lineHeight:1.1},children:[be," ",ke," ",d("topUpMore")]}),jsxRuntime.jsx("span",{style:{fontSize:13,fontWeight:600,opacity:.95},children:d("topUpHint")})]}):jsxRuntime.jsx("span",{style:{...E,color:"inherit",fontSize:15},children:p?d("topUpCannot",{name:ke}):d("loading")})}),ze,jsxRuntime.jsx(He,{tone:"green",busy:$,busyText:xe,disabled:!ae||!Ge,onClick:()=>{!I||!x||Ce("deposit",()=>$e({network:I,binding:x,currencyID:C,amount:be})).then(g=>{g.ok&&r.onDone(true);});},children:d("depositAmount",{amount:be,name:ke})})]}):null,Ke=!!n;return jsxRuntime.jsxs("div",{style:{...En,...Ke?{...Fe,padding:16,width:360,maxWidth:"100%",maxHeight:"80vh",overflow:"auto"}:{},...o},children:[jsxRuntime.jsx("style",{children:Dn}),Ke?jsxRuntime.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[jsxRuntime.jsx("span",{style:{...E,fontSize:20},children:r?d("topUpTitle"):d("title")}),jsxRuntime.jsx("button",{type:"button",className:"idos-press",style:An,onClick:n,"aria-label":"\u2715",children:"\u2715"})]}):null,It,p?Object.keys(c).length===0?jsxRuntime.jsx("div",{style:{...U,padding:"12px 14px",...N},children:d("noNetworks")}):r?Pt:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[ze,At]}):jsxRuntime.jsx("div",{style:{...N,textAlign:"center",padding:12},children:d("loading")}),q?jsxRuntime.jsx(Bn,{tab:q.tab,result:q.res}):null]})}var Dn="@keyframes idosw-spin { to { transform: rotate(360deg) } }",En={pointerEvents:"auto",color:a.text,fontFamily:a.font,display:"flex",flexDirection:"column",gap:12,boxSizing:"border-box",width:"100%",minWidth:0,maxWidth:"100%"},Tn={width:10,height:10,borderRadius:"50%",background:a.green,boxShadow:`0 0 0 3px color-mix(in srgb, ${a.green} 30%, transparent)`,flex:"none"},In={...E,fontFamily:a.font,fontSize:13,color:a.textDim,background:"transparent",border:`2px solid ${a.line}`,borderRadius:10,padding:"5px 10px",cursor:"pointer"},Nn={...U,...E,fontFamily:a.font,fontSize:15,display:"flex",alignItems:"center",gap:10,padding:"10px 12px",cursor:"pointer",width:"100%"},An={...oe("red",false,"sm"),width:36,minHeight:36,padding:0,borderRadius:"50%"},Pn={...E,fontFamily:a.font,fontSize:22,flex:1,minWidth:0,background:"transparent",border:"none",outline:"none",padding:"6px 0"};function Wn({assets:t,name:e}){let n=t?.Default||t?.Icon||"",o={width:40,height:40,borderRadius:"50%",flex:"none",display:"grid",placeItems:"center",background:`linear-gradient(180deg, ${a.gold}, ${a.goldDeep})`,boxShadow:`0 3px 0 ${a.edge}`,overflow:"hidden",fontSize:22};return /^(https?:)?\/\/|^\//.test(n)?jsxRuntime.jsx("span",{style:o,children:jsxRuntime.jsx("img",{src:n,alt:"",style:{width:"100%",height:"100%",objectFit:"cover"}})}):jsxRuntime.jsx("span",{style:{...o,...E,fontSize:20},"aria-hidden":true,children:(e.trim()[0]??"?").toUpperCase()})}function Sn({icon:t,name:e,backed:n,unbacked:o,hasIou:r,decimals:i}){let[p,l]=react$1.useState(false),c=(y,m,k=false)=>jsxRuntime.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:16},children:[jsxRuntime.jsx("span",{style:{...N,fontSize:13},children:y}),jsxRuntime.jsx("span",{style:{...E,fontSize:14,color:k?a.textDim:a.text},children:Me(m,i)})]});return jsxRuntime.jsxs("div",{style:{position:"relative"},onMouseEnter:()=>l(true),onMouseLeave:()=>l(false),children:[jsxRuntime.jsxs("button",{type:"button","aria-expanded":p,onClick:()=>l(y=>!y),onBlur:()=>l(false),style:{...U,display:"flex",alignItems:"center",gap:12,padding:"10px 14px",width:"100%",cursor:"pointer",font:"inherit",textAlign:"left"},children:[t,jsxRuntime.jsxs("span",{style:{display:"grid",minWidth:0,flex:1},children:[jsxRuntime.jsx("span",{style:{...N,fontSize:12},children:d("balance")}),jsxRuntime.jsxs("span",{style:{...E,fontSize:22,lineHeight:1.1},children:[Me(n+o,i)," ",jsxRuntime.jsx("span",{style:{fontSize:15,color:a.textDim},children:e})]})]}),jsxRuntime.jsx("span",{"aria-hidden":true,style:{...N,fontSize:16},children:"\u24D8"})]}),p?jsxRuntime.jsxs("div",{role:"tooltip",style:{...Fe,position:"absolute",left:0,right:0,top:"calc(100% + 6px)",zIndex:5,padding:"10px 12px",display:"grid",gap:6},children:[c(d("backed"),n),r?c(d("unbacked"),o,o===0):null,jsxRuntime.jsx("div",{style:{height:1,background:a.line}}),c(d("total"),n+o),jsxRuntime.jsx("span",{style:{fontSize:12,color:a.textDim,lineHeight:1.35},children:r?d("iouHint"):d("backedHint")})]}):null]})}function Rn({value:t,onChange:e}){let n=[["deposit",d("deposit")],["withdraw",d("withdraw")]];return jsxRuntime.jsx("div",{role:"tablist",style:{display:"flex",gap:6,padding:4,borderRadius:16,background:a.wellSoft},children:n.map(([o,r])=>{let i=o===t;return jsxRuntime.jsx("button",{role:"tab","aria-selected":i,type:"button",className:"idos-press",onClick:()=>!i&&e(o),style:{...E,fontFamily:a.font,fontSize:15,flex:1,border:"none",borderRadius:12,padding:"9px 14px",cursor:"pointer",color:i?a.onBlue:a.textDim,background:i?`linear-gradient(180deg, ${a.blue}, ${a.blueDeep})`:"transparent",boxShadow:i?`0 3px 0 ${a.edge}, inset 0 2px 0 rgba(255,255,255,.3)`:"none",transition:`background ${a.fast} ease`},children:r},o)})})}function Ct({caption:t,value:e,onChange:n,options:o}){return jsxRuntime.jsxs("label",{style:{display:"grid",gap:6},children:[jsxRuntime.jsx("span",{style:N,children:t}),jsxRuntime.jsxs("span",{style:{position:"relative",display:"block"},children:[jsxRuntime.jsx("select",{value:e,onChange:r=>n(r.target.value),style:{...U,...E,fontFamily:a.font,fontSize:15,width:"100%",padding:"10px 36px 10px 12px",appearance:"none",WebkitAppearance:"none",cursor:"pointer",outline:"none"},children:o.map(([r,i])=>jsxRuntime.jsx("option",{value:r,style:{color:"#111"},children:i},r))}),jsxRuntime.jsx("span",{"aria-hidden":true,style:{position:"absolute",right:14,top:"50%",transform:"translateY(-50%)",color:a.textDim,pointerEvents:"none"},children:"\u25BE"})]})]})}function He({tone:t,busy:e,busyText:n,disabled:o,onClick:r,children:i}){return jsxRuntime.jsx("button",{type:"button",className:"idos-press",disabled:o||e,onClick:r,style:{...oe(t,o&&!e,"lg"),width:"100%"},children:e?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("span",{"aria-hidden":true,style:{width:18,height:18,borderRadius:"50%",border:"3px solid rgba(255,255,255,.35)",borderTopColor:"#fff",animation:"idosw-spin .8s linear infinite"}}),n]}):i})}function Bn({tab:t,result:e}){let n=e.ok,o={borderRadius:14,padding:"10px 12px",display:"grid",gap:4,background:`color-mix(in srgb, ${n?a.green:a.red} 22%, transparent)`,border:`2px solid color-mix(in srgb, ${n?a.green:a.red} 60%, transparent)`,wordBreak:"break-word"};return n?jsxRuntime.jsxs("div",{style:o,role:"status",children:[jsxRuntime.jsxs("span",{style:{...E,fontSize:15},children:["\u2713 ",t==="withdraw"?d("doneWithdraw"):d("doneDeposit")]}),jsxRuntime.jsxs("span",{style:{...N,fontSize:12},children:[d("tx"),": ",xt(e.onChainTxHash)]})]}):jsxRuntime.jsxs("div",{style:o,role:"alert",children:[jsxRuntime.jsxs("span",{style:{...E,fontSize:15},children:["\u2715 ",d("failed")]}),jsxRuntime.jsx("span",{style:{fontSize:13,color:a.text,opacity:.9},children:e.error}),e.titleTransactionID?jsxRuntime.jsx("span",{style:{...N,fontSize:12},children:d("debited")}):null]})}function $n(t){let{client:e,walletConnectProjectId:n,appName:o,onClose:r,style:i,topUp:p}=t,[l,c]=react$1.useState(n??"");react$1.useEffect(()=>{if(n)return;let m=true;return (async()=>{let k=await e.blockchain.getDefinitions();if(!m||!k.ok)return;let w=k.data.Blockchain?.WalletLogin?.WalletConnectProjectId;w&&c(w);})(),()=>{m=false;}},[e,n]);let y=react$1.useMemo(()=>Ee({walletConnectProjectId:l||void 0,appName:o}),[l,o]);return jsxRuntime.jsx(X,{wagmiConfig:y,children:jsxRuntime.jsx(qn,{client:e,onClose:r,style:i,topUp:p})})}function qn({client:t,onClose:e,style:n,topUp:o}){let r=Re(t,t.titleID),{address:i,isConnected:p,chainId:l}=wagmi.useAccount(),{connect:c,connectors:y}=wagmi.useConnect(),{disconnect:m}=wagmi.useDisconnect(),{switchChainAsync:k}=wagmi.useSwitchChain();async function w(u){if(!u||l===u)return true;try{return await k({chainId:u}),!0}catch{return false}}let T={networkType:"EVM",address:p&&i?i:null,connectChoices:y.map(u=>({key:u.uid,label:u.name,connect:()=>c({connector:u})})),disconnect:()=>m(),deposit:async({network:u,binding:A,amount:C})=>{if(!A.ContractAddress)return f("approve","This token cannot be deposited.");if(!await w(u.ChainID))return f("approve",`Switch your wallet to chain ${u.ChainID} to continue.`);let F;try{F=viem.parseUnits(C,A.Decimals??18);}catch{return f("approve","Invalid amount.")}return r.depositToken({network:u,tokenAddress:A.ContractAddress,amount:F})},withdraw:async({network:u,networkID:A,currencyID:C,amount:F})=>r.account?await w(u.ChainID)?r.withdrawToken({currencyID:C,networkID:A,walletAddress:r.account,amount:F}):f("request",`Switch your wallet to chain ${u.ChainID} to continue.`):f("request","Wallet not connected.")};return jsxRuntime.jsx(vt,{client:t,engine:T,onClose:e,style:n,topUp:o})}function jn(t){let[e,n]=react$1.useState(null);return react$1.useEffect(()=>{if(R()||ot())return;let o=null;return t.checkout.setTopUpHandler(r=>new Promise(i=>{o?.(false);let p=false,l=c=>{p||(p=true,o===l&&(o=null),n(y=>y?.onDone===l?null:y),i(c));};o=l,n({currencyID:r.currencyID,amount:r.missingAmount??String(r.missing),onDone:l});})),()=>{t.checkout.setTopUpHandler(null),o?.(false);}},[t]),e}
2
- exports.DEFAULT_EVM_CHAINS=Ze;exports.IDosGamesWalletProvider=X;exports.WalletLogin=on;exports.WalletLoginButton=yt;exports.WalletPanel=$n;exports.arbitrum=pe;exports.base=de;exports.bsc=le;exports.chainById=St;exports.createEvmWalletConfig=Ee;exports.idosChains=je;exports.mainnet=se;exports.optimism=ue;exports.polygon=ce;exports.polygonAmoy=fe;exports.sepolia=me;exports.useEvmBridge=Re;exports.useEvmBridgeClients=ye;exports.useWalletTopUp=jn;
1
+ 'use strict';var wagmi=require('wagmi'),connectors=require('wagmi/connectors'),appkitAdapterWagmi=require('@reown/appkit-adapter-wagmi'),react=require('@reown/appkit/react'),reactQuery=require('@tanstack/react-query'),react$1=require('react'),jsxRuntime=require('react/jsx-runtime'),viem=require('viem'),core=require('@idosgames/core'),actions=require('wagmi/actions');var le={id:1,name:"Ethereum",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://eth.llamarpc.com"]}},blockExplorers:{default:{name:"Etherscan",url:"https://etherscan.io"}}},ce={id:56,name:"BNB Smart Chain",nativeCurrency:{name:"BNB",symbol:"BNB",decimals:18},rpcUrls:{default:{http:["https://bsc-dataseed.binance.org"]}},blockExplorers:{default:{name:"BscScan",url:"https://bscscan.com"}}},de={id:137,name:"Polygon",nativeCurrency:{name:"POL",symbol:"POL",decimals:18},rpcUrls:{default:{http:["https://polygon-rpc.com"]}},blockExplorers:{default:{name:"PolygonScan",url:"https://polygonscan.com"}}},pe={id:8453,name:"Base",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://mainnet.base.org"]}},blockExplorers:{default:{name:"BaseScan",url:"https://basescan.org"}}},ue={id:42161,name:"Arbitrum One",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://arb1.arbitrum.io/rpc"]}},blockExplorers:{default:{name:"Arbiscan",url:"https://arbiscan.io"}}},me={id:10,name:"OP Mainnet",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://mainnet.optimism.io"]}},blockExplorers:{default:{name:"Optimistic Etherscan",url:"https://optimistic.etherscan.io"}}},fe={id:11155111,name:"Sepolia",testnet:true,nativeCurrency:{name:"Sepolia Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.sepolia.org"]}},blockExplorers:{default:{name:"Etherscan",url:"https://sepolia.etherscan.io"}}},ge={id:80002,name:"Polygon Amoy",testnet:true,nativeCurrency:{name:"POL",symbol:"POL",decimals:18},rpcUrls:{default:{http:["https://rpc-amoy.polygon.technology"]}},blockExplorers:{default:{name:"PolygonScan",url:"https://amoy.polygonscan.com"}}},je={mainnet:le,bsc:ce,polygon:de,base:pe,arbitrum:ue,optimism:me,sepolia:fe,polygonAmoy:ge};function St(t){return Object.values(je).find(e=>e.id===t)}function Ve(t){return {...t,chainNamespace:"eip155",caipNetworkId:`eip155:${t.id}`}}var Ye=null;function Qe(t){Ye=t;}function De(){return Ye}var Ze=[le,ce,de,pe,ue,me,fe,ge],Ee=new Map;function Te(t){let{chains:e=Ze,walletConnectProjectId:n,appName:o,appUrl:r,appIcon:i,transports:p,connectors:l}=t,c=n??"__extension_only__";if(!l){let C=Ee.get(c);if(C)return C}let g={};for(let C of e)g[C.id]=p?.[C.id]??wagmi.http();let m=r??(typeof window<"u"?window.location.origin:""),b={name:o??"iDosGames",description:o??"iDosGames game",url:m,icons:i?[i]:[]};if(n&&!l){let C=e.map(Ve),k=new appkitAdapterWagmi.WagmiAdapter({networks:C,projectId:n,transports:g});return Qe(react.createAppKit({adapters:[k],networks:C,projectId:n,metadata:b,features:{analytics:false,email:false,socials:false}})),Ee.set(c,k.wagmiConfig),k.wagmiConfig}let y=l??[connectors.injected(),connectors.coinbaseWallet({appName:o??"iDosGames"})],N=wagmi.createConfig({chains:e,connectors:y,transports:g});return l||Ee.set(c,N),N}function X(t){let{wagmiConfig:e,queryClient:n,children:o}=t,[r]=react$1.useState(()=>n??new reactQuery.QueryClient);return jsxRuntime.jsx(wagmi.WagmiProvider,{config:e,children:jsxRuntime.jsx(reactQuery.QueryClientProvider,{client:r,children:o})})}var ye=[{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:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{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:"withdrawERC1155",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{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:[]}],Xe=[{type:"function",name:"withdrawERC1155Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{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:[]}],ee=[{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"}]}],et=[{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 tt(t,e,n){return viem.encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[t,e,core.normalizeBlockchainCategory(n)])}async function $(t,e){let{walletClient:n,publicClient:o,account:r}=t,i=await n.writeContract({address:e.address,abi:e.abi,functionName:e.functionName,args:e.args,account:r,chain:n.chain,value:e.value});if((await o.waitForTransactionReceipt({hash:i})).status==="reverted")throw new Error(`On-chain transaction reverted (${i}).`);return i}function H(t){return t instanceof viem.BaseError?t.shortMessage:t instanceof Error?t.message:String(t)}function u(t,e,n){return {ok:false,stage:t,error:e,...n}}function S(t,e){return {ok:false,stage:t,error:e}}var nt="WALLET_USE_SITE_PANEL",Kt=/^[a-z0-9]{8}-preview\.idos\.games$/;function jt(t=typeof window>"u"?"":window.location.hostname){let e=t.toLowerCase();return Kt.test(e)?true:e!=="localhost"&&e!=="127.0.0.1"?false:globalThis.__IDOS_PREVIEW__!=null}function R(){if(typeof window>"u"||jt())return false;try{return window.self!==window.top}catch{return true}}function ot(){if(typeof window>"u")return false;try{return window.parent!==window.top}catch{return true}}function Y(t){return u(t,nt)}function Ie(t){return S(t,nt)}function rt(t){let e=t.RewardPoolAddress;return e||null}async function it(t,e,n,o){return await t.publicClient.readContract({address:e,abi:ee,functionName:"allowance",args:[t.account,n]})>=o?null:$(t,{address:e,abi:ee,functionName:"approve",args:[n,o]})}async function Ne(t){let{client:e,clients:n,network:o,tokenAddress:r,amount:i,titleID:p,category:l}=t;if(R())return Y("approve");let c=e.auth.context?.userID;if(!c)return u("approve","Not logged in.");let g=rt(o);if(!g)return u("approve","Network has no RewardPoolAddress.");if(i<=0n)return u("approve","Amount must be positive.");try{await it(n,r,g,i);}catch(y){return u("approve",H(y))}let m;try{m=await $(n,{address:g,abi:ye,functionName:"depositERC20",args:[r,i,c,p,l??""]});}catch(y){return u("deposit-onchain",H(y))}let b=await e.blockchain.depositToken(o.NetworkID??"",m);return b.ok?{ok:true,onChainTxHash:m,data:b.data}:u("report",b.error,{onChainTxHash:m})}async function Ae(t){let{client:e,clients:n,network:o,nftContractAddress:r,tokenId:i,amount:p,titleID:l,category:c}=t;if(R())return Y("deposit-onchain");let g=e.auth.context?.userID;if(!g)return u("deposit-onchain","Not logged in.");let m=rt(o);if(!m)return u("deposit-onchain","Network has no RewardPoolAddress.");if(p<=0n)return u("deposit-onchain","Amount must be positive.");let b=tt(g,l,c),y;try{y=await $(n,{address:r,abi:et,functionName:"safeTransferFrom",args:[n.account,m,i,p,b]});}catch(C){return u("deposit-onchain",H(C))}let N=await e.blockchain.depositNFT(o.NetworkID??"",y);return N.ok?{ok:true,onChainTxHash:y,data:N.data}:u("report",N.error,{onChainTxHash:y})}function at(t){return (t.Splits??[]).map(e=>({to:e.To,amount:BigInt(e.Amount??"0")}))}async function st(t,e){return $(t,{address:e.ContractAddress,abi:ye,functionName:"withdrawERC20",args:[e.TokenAddress,e.WalletAddress,BigInt(e.Amount??"0"),BigInt(e.BurnAmount??"0"),at(e),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function lt(t,e){return $(t,{address:e.ContractAddress,abi:Xe,functionName:"withdrawERC1155Mint",args:[e.TokenAddress,e.WalletAddress,BigInt(e.TokenId??"0"),BigInt(e.Amount??"0"),at(e),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function Pe(t){let{client:e,clients:n,currencyID:o,networkID:r,walletAddress:i,amount:p,category:l}=t;if(R())return Y("request");let c=await e.blockchain.requestTokenWithdrawal(o,r,i,p,l);if(!c.ok)return u("request",c.error);let g=c.data.EvmSignature,m=c.data.TitleTransactionID??void 0;if(!g)return u("request","Withdrawal response carried no EVM signature.",{titleTransactionID:m});let b;try{b=await st(n,g);}catch(N){return u("withdraw-onchain",H(N),{titleTransactionID:m})}let y=await ct(e,m,b);return y.ok?{ok:true,onChainTxHash:b,data:c.data}:y}async function We(t){let{client:e,clients:n,itemID:o,networkID:r,walletAddress:i,amount:p,category:l}=t;if(R())return Y("request");let c=await e.blockchain.requestNFTWithdrawal(o,r,i,p,l);if(!c.ok)return u("request",c.error);let g=c.data.EvmSignature,m=c.data.TitleTransactionID??void 0;if(!g)return u("request","Withdrawal response carried no EVM signature.",{titleTransactionID:m});let b;try{b=await lt(n,g);}catch(N){return u("withdraw-onchain",H(N),{titleTransactionID:m})}let y=await ct(e,m,b);return y.ok?{ok:true,onChainTxHash:b,data:c.data}:y}async function ct(t,e,n){if(!e)return u("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let o=await t.blockchain.confirmWithdrawal(e,n);return o.ok?{ok:true,onChainTxHash:n,data:o.data}:u("confirm",o.error,{onChainTxHash:n,titleTransactionID:e})}async function te(t){let{client:e,clients:n,networkID:o}=t;if(R())return Ie("challenge");let r=t.walletAddress??n.account,i=await e.auth.requestWalletChallenge(r,o);if(!i.ok)return S("challenge",i.error);let p;try{p=await n.walletClient.signMessage({account:n.account,message:i.data.Message});}catch(c){return S("sign",H(c))}let l=await e.auth.loginWithWallet(r,o,p);return l.ok?{ok:true,data:l.data}:S("login",l.error)}async function Se(t){let{client:e,clients:n,networkID:o}=t;if(R())return Ie("challenge");let r=t.walletAddress??n.account,i=await e.auth.linkWallet(r,o);if(!i.ok)return S("challenge",i.error);if(!i.data.Challenge)return S("challenge","No challenge was issued.");let p;try{p=await n.walletClient.signMessage({account:n.account,message:i.data.Challenge});}catch(c){return S("sign",H(c))}let l=await e.auth.linkWallet(r,o,p);return l.ok?{ok:true,data:l.data}:S("login",l.error)}function we(){let{address:t}=wagmi.useAccount(),e=wagmi.usePublicClient(),{data:n}=wagmi.useWalletClient();return !t||!e||!n?null:{account:t,publicClient:e,walletClient:n}}var ne="Wallet not connected.";function Re(t,e){let n=we();return {connected:!!n,account:n?.account??null,loginWithWallet:(o,r)=>n?te({client:t,clients:n,networkID:o,walletAddress:r}):Promise.resolve(S("challenge",ne)),depositToken:o=>n?Ne({client:t,clients:n,titleID:e,...o}):Promise.resolve(u("approve",ne)),depositNft:o=>n?Ae({client:t,clients:n,titleID:e,...o}):Promise.resolve(u("deposit-onchain",ne)),withdrawToken:o=>n?Pe({client:t,clients:n,...o}):Promise.resolve(u("withdraw-onchain",ne)),withdrawNft:o=>n?We({client:t,clients:n,...o}):Promise.resolve(u("withdraw-onchain",ne))}}function on(t){let{wagmiConfig:e,...n}=t;return jsxRuntime.jsx(X,{wagmiConfig:e,children:jsxRuntime.jsx(yt,{...n})})}function rn(t){return t instanceof Error&&(t.name==="ConnectorAlreadyConnectedError"||t.message.includes("already connected"))}function an(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 ut(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 sn(t,e=18e4){return actions.getAccount(t).isConnected?Promise.resolve(true):new Promise(n=>{let o=false,r=l=>{o||(o=true,i(),clearTimeout(p),n(l));},i=actions.watchAccount(t,{onChange:l=>{l.isConnected&&r(true);}}),p=setTimeout(()=>r(false),e);})}function ln(t,e=8e3){let n=o=>o==="reconnecting"||o==="connecting";return n(actions.getAccount(t).status)?new Promise(o=>{let r=false,i=()=>{r||(r=true,p(),clearTimeout(l),o());},p=actions.watchAccount(t,{onChange:c=>{n(c.status)||i();}}),l=setTimeout(i,e);}):Promise.resolve()}function cn(t){let e=r=>t.find(i=>i.id===r||i.type===r),n=e("injected"),o=typeof window<"u"&&window.ethereum!=null;return n&&o?n:e("walletConnect")??n??t[0]}var mt=9e4;async function dn(t){try{let o=(await actions.getAccount(t).connector?.getProvider?.())?.session?.peer?.metadata?.redirect,r=o?.native||o?.universal;return !r||typeof window>"u"?!1:(window.location.href=r,!0)}catch{return false}}function ft(t,e){return new Promise((n,o)=>{let r=setTimeout(()=>o(new Error("The wallet request timed out.")),e);t.then(i=>{clearTimeout(r),n(i);},i=>{clearTimeout(r),o(i instanceof Error?i:new Error(String(i)));});})}function yt(t){let{client:e,networkID:n,onAuthenticated:o,disabled:r,label:i,style:p,autoStart:l,mode:c="login",onLinked:g}=t,m=wagmi.useConfig(),{isConnected:b}=wagmi.useAccount(),{connectAsync:y,connectors:N}=wagmi.useConnect(),C=we(),[k,x]=react$1.useState(false),[M,E]=react$1.useState(null),[F,U]=react$1.useState(false),Z=react$1.useRef(0),q=react$1.useRef(false),z=async()=>{let ie=++Z.current,W=()=>Z.current===ie;x(true),E(null);try{if(await ln(m),!W())return;if(!actions.getAccount(m).isConnected){let v=De();if(v){if(await v.open(),!await sn(m)){E("No wallet was connected.");return}}else {let K=cn(N);if(!K){E("No wallet connector is configured.");return}try{await y({connector:K});}catch(j){if(!rn(j))throw j}}}let A=C??await ut(m);if(!A&&actions.getAccount(m).isConnected&&(await new Promise(v=>setTimeout(v,300)),A=await ut(m),!W()))return;if(!A){E("Wallet client is not available.");return}if(U(!0),c==="link"){let v=await ft(Se({client:e,clients:A,networkID:n}),mt);if(!W())return;if(v.ok){g?.(v.data.PlayAccess??null);return}E(v.stage==="sign"?"Signature declined.":core.authErrorText(v.error,"Could not link the wallet."));return}let O=await ft(te({client:e,clients:A,networkID:n}),mt);if(!W())return;if(O.ok){o();return}E(O.stage==="sign"?"Signature declined.":core.authErrorText(O.error,"Wallet sign-in failed."));}catch(A){if(!W())return;console.error("[idosgames/wallet] wallet sign-in failed:",A),E(an(A));}finally{W()&&(x(false),U(false));}};react$1.useEffect(()=>{!l||q.current||(q.current=true,z());},[l]);let be=async()=>{await dn(m)||await De()?.open();};return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:()=>{F?be():z();},disabled:r,style:{...pn,...r?{opacity:.6,cursor:"default"}:null,...p},children:F?"Waiting for signature \u2014 tap to open wallet":k?"Check your wallet\u2026":b?i??(c==="link"?"Link wallet":"Sign in with wallet"):"Connect wallet"}),M&&jsxRuntime.jsx("span",{role:"alert",style:un,children:M})]})}var pn={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},un={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};var h=(t,e)=>`var(--idos-ui-${t}, ${e})`,a={panel:h("panel","#2c3480"),panelDeep:h("panel-deep","#1d2360"),panelEdge:h("panel-edge","#4f5bc9"),text:h("text","#ffffff"),textDim:h("text-dim","#aeb6f0"),gold:h("gold","#ffd24a"),goldDeep:h("gold-deep","#e89a12"),green:h("green","#59d35b"),greenDeep:h("green-deep","#2b9936"),blue:h("blue","#4fb1ff"),blueDeep:h("blue-deep","#2276d6"),red:h("red","#ff5a5a"),redDeep:h("red-deep","#b83232"),onGreen:h("on-green","#ffffff"),onBlue:h("on-blue","#ffffff"),onGold:h("on-gold","#ffffff"),textOutline:h("text-outline","0 2px 0 rgba(0,0,0,.45), 0 0 1px rgba(0,0,0,.6)"),well:h("well","rgba(8, 10, 40, 0.6)"),wellSoft:h("well-soft","rgba(0, 0, 0, 0.3)"),wellShadow:h("well-shadow","inset 0 2px 4px rgba(0, 0, 0, 0.4)"),edge:h("edge","rgba(0, 0, 0, 0.35)"),line:h("line","rgba(255, 255, 255, 0.2)"),panelShadow:h("panel-shadow","0 6px 0 rgba(4, 6, 30, 0.55), inset 0 2px 0 rgba(255, 255, 255, 0.12)"),radius:h("radius","18px"),buttonRadius:h("button-radius","14px"),font:h("font","'Baloo 2', 'Nunito', 'Trebuchet MS', system-ui, sans-serif"),fast:h("fast","120ms")},ht={green:[a.green,a.greenDeep,a.onGreen],blue:[a.blue,a.blueDeep,a.onBlue],gold:[a.gold,a.goldDeep,a.onGold],red:[a.red,a.redDeep,"#ffffff"]},I={color:a.text,fontWeight:800,textShadow:a.textOutline,letterSpacing:.2},Fe={boxSizing:"border-box",background:`linear-gradient(180deg, ${a.panel} 0%, ${a.panelDeep} 100%)`,border:`2px solid ${a.panelEdge}`,borderRadius:a.radius,boxShadow:a.panelShadow},G={boxSizing:"border-box",background:a.well,border:`2px solid ${a.panelEdge}`,boxShadow:a.wellShadow,borderRadius:14};function re(t,e=false,n="md"){let[o,r,i]=e?["#8e95b8","#5b6187","#ffffff"]:ht[t];return {...I,color:i,boxSizing:"border-box",fontFamily:a.font,fontSize:n==="sm"?13:n==="lg"?18:16,border:"none",borderRadius:a.buttonRadius,padding:n==="sm"?"6px 12px":n==="lg"?"13px 22px":"10px 18px",minHeight:n==="sm"?34:n==="lg"?52:44,cursor:e?"default":"pointer",background:`linear-gradient(180deg, ${o} 0%, ${r} 100%)`,boxShadow:`0 4px 0 ${a.edge}, inset 0 2px 0 rgba(255,255,255,.35)`,opacity:e?.75:1,display:"inline-flex",alignItems:"center",justifyContent:"center",gap:8}}function bt(t){let[e,n,o]=ht[t];return {background:`linear-gradient(180deg, ${e} 0%, ${n} 100%)`,color:o,borderRadius:16,boxShadow:`0 4px 0 ${a.edge}, inset 0 2px 0 rgba(255,255,255,.3)`}}var P={...I,fontSize:13,color:a.textDim},gn=["ru","kk","uk","be","ky","uz","tg"];function yn(){if(typeof navigator>"u")return false;let t=(navigator.language||"").toLowerCase();return gn.some(e=>t.startsWith(e))}var wt={title:"Wallet",topUpTitle:"Top up to buy",connectHint:"Connect a wallet to deposit and withdraw",connect:"Connect wallet",notConfigured:"Wallet connection is not set up for this app.",disconnect:"Disconnect",balance:"In-game balance",deposit:"Deposit",withdraw:"Withdraw",network:"Network",token:"Token",amount:"Amount",max:"MAX",minWithdraw:"Minimum to withdraw: {n}",noNetworks:"Crypto is not set up for this app yet.",noTokens:"No tokens on this network.",depositing:"Confirm in your wallet\u2026",withdrawing:"Withdrawing\u2026",confirming:"Waiting for the network to confirm\u2026",loading:"Loading\u2026",doneDeposit:"Deposited \u2014 the balance is updated.",doneWithdraw:"Sent to your wallet.",topUpNeed:"This purchase needs",topUpMore:"more",topUpHint:"Deposit it from your wallet \u2014 the purchase completes by itself once it is credited.",topUpCannot:"{name} cannot be deposited here.",depositAmount:"Deposit {amount} {name}",failed:"Did not go through",debited:"The amount is already debited \u2014 retry this withdrawal, do not request a new one.",tx:"Transaction",backed:"Crypto (withdrawable)",unbacked:"IOU (not backed yet)",total:"Total",iouHint:"IOUs spend in the app like crypto, but you can withdraw only the backed part; the developer backs IOUs later.",backedHint:"All of it is real crypto and can be withdrawn."},wn={title:"\u041A\u043E\u0448\u0435\u043B\u0451\u043A",topUpTitle:"\u041F\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 \u0434\u043B\u044F \u043F\u043E\u043A\u0443\u043F\u043A\u0438",connectHint:"\u041F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u0435 \u043A\u043E\u0448\u0435\u043B\u0451\u043A, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u043F\u043E\u043B\u043D\u044F\u0442\u044C \u0438 \u0432\u044B\u0432\u043E\u0434\u0438\u0442\u044C",connect:"\u041F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043A\u043E\u0448\u0435\u043B\u0451\u043A",notConfigured:"\u041F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 \u043A\u043E\u0448\u0435\u043B\u044C\u043A\u0430 \u0434\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u043D\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043D\u043E.",disconnect:"\u041E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u044C",balance:"\u0411\u0430\u043B\u0430\u043D\u0441 \u0432 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438",deposit:"\u041F\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u044C",withdraw:"\u0412\u044B\u0432\u0435\u0441\u0442\u0438",network:"\u0421\u0435\u0442\u044C",token:"\u0422\u043E\u043A\u0435\u043D",amount:"\u0421\u0443\u043C\u043C\u0430",max:"\u0412\u0421\u0401",minWithdraw:"\u041C\u0438\u043D\u0438\u043C\u0443\u043C \u0434\u043B\u044F \u0432\u044B\u0432\u043E\u0434\u0430: {n}",noNetworks:"\u041A\u0440\u0438\u043F\u0442\u0430 \u0434\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0435\u0449\u0451 \u043D\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043D\u0430.",noTokens:"\u0412 \u044D\u0442\u043E\u0439 \u0441\u0435\u0442\u0438 \u043D\u0435\u0442 \u0442\u043E\u043A\u0435\u043D\u043E\u0432.",depositing:"\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u0432 \u043A\u043E\u0448\u0435\u043B\u044C\u043A\u0435\u2026",withdrawing:"\u0412\u044B\u0432\u043E\u0434\u0438\u043C\u2026",confirming:"\u0416\u0434\u0451\u043C \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u044F \u0441\u0435\u0442\u0438\u2026",loading:"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430\u2026",doneDeposit:"\u041F\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u043E \u2014 \u0431\u0430\u043B\u0430\u043D\u0441 \u043E\u0431\u043D\u043E\u0432\u043B\u0451\u043D.",doneWithdraw:"\u041E\u0442\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043E \u043D\u0430 \u0432\u0430\u0448 \u043A\u043E\u0448\u0435\u043B\u0451\u043A.",topUpNeed:"\u0414\u043B\u044F \u043F\u043E\u043A\u0443\u043F\u043A\u0438 \u043D\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442",topUpMore:"",topUpHint:"\u041F\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435 \u0441 \u043A\u043E\u0448\u0435\u043B\u044C\u043A\u0430 \u2014 \u043F\u043E\u043A\u0443\u043F\u043A\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044F \u0441\u0430\u043C\u0430, \u043A\u0430\u043A \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 \u0437\u0430\u0447\u0438\u0441\u043B\u0438\u0442\u0441\u044F.",topUpCannot:"{name} \u0437\u0434\u0435\u0441\u044C \u043F\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u043D\u0435\u043B\u044C\u0437\u044F.",depositAmount:"\u041F\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u043D\u0430 {amount} {name}",failed:"\u041D\u0435 \u043F\u0440\u043E\u0448\u043B\u043E",debited:"\u0421\u0443\u043C\u043C\u0430 \u0443\u0436\u0435 \u0441\u043F\u0438\u0441\u0430\u043D\u0430 \u2014 \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0435 \u044D\u0442\u043E\u0442 \u0432\u044B\u0432\u043E\u0434, \u043D\u043E\u0432\u044B\u0439 \u043D\u0435 \u0437\u0430\u043F\u0440\u0430\u0448\u0438\u0432\u0430\u0439\u0442\u0435.",tx:"\u0422\u0440\u0430\u043D\u0437\u0430\u043A\u0446\u0438\u044F",backed:"\u041A\u0440\u0438\u043F\u0442\u0430 (\u043C\u043E\u0436\u043D\u043E \u0432\u044B\u0432\u0435\u0441\u0442\u0438)",unbacked:"\u0420\u0430\u0441\u043F\u0438\u0441\u043A\u0438 (\u043F\u043E\u043A\u0430 \u043D\u0435 \u043E\u0431\u0435\u0441\u043F\u0435\u0447\u0435\u043D\u044B)",total:"\u0412\u0441\u0435\u0433\u043E",iouHint:"\u0420\u0430\u0441\u043F\u0438\u0441\u043A\u0438 \u0442\u0440\u0430\u0442\u044F\u0442\u0441\u044F \u0432 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043A\u0430\u043A \u043A\u0440\u0438\u043F\u0442\u0430, \u043D\u043E \u0432\u044B\u0432\u0435\u0441\u0442\u0438 \u043C\u043E\u0436\u043D\u043E \u0442\u043E\u043B\u044C\u043A\u043E \u043E\u0431\u0435\u0441\u043F\u0435\u0447\u0435\u043D\u043D\u0443\u044E \u0447\u0430\u0441\u0442\u044C; \u0440\u0430\u0437\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A \u043E\u0431\u0435\u0441\u043F\u0435\u0447\u0438\u0442 \u0440\u0430\u0441\u043F\u0438\u0441\u043A\u0438 \u043F\u043E\u0437\u0436\u0435.",backedHint:"\u042D\u0442\u043E \u043D\u0430\u0441\u0442\u043E\u044F\u0449\u0430\u044F \u043A\u0440\u0438\u043F\u0442\u0430, \u0435\u0451 \u043C\u043E\u0436\u043D\u043E \u0432\u044B\u0432\u0435\u0441\u0442\u0438 \u0446\u0435\u043B\u0438\u043A\u043E\u043C."};function d(t,e){let n=(yn()?wn:wt)[t]??wt[t];for(let[o,r]of Object.entries(e??{}))n=n.replace(`{${o}}`,String(r));return n}var Cn=/^(Not enough confirmations|Transaction not found on chain)/,kn=8,xn=5e3;function vn(t,e){let n=Math.max(0,Math.floor(e||0)),[o="0",r=""]=t.split(".");if(r.length<=n)return t;let i=r.slice(0,n),p=BigInt(o+i)+(/^0*$/.test(r.slice(n))?BigInt(0):BigInt(1));if(n===0)return p.toString();let l=p.toString().padStart(n+1,"0");return `${l.slice(0,-n)}.${l.slice(-n)}`.replace(/\.?0+$/,"")}function Me(t,e=6){let n=Number(t);return Number.isFinite(n)?n.toLocaleString("en-US",{maximumFractionDigits:Math.max(0,e)}).replace(/,/g," "):String(t)}var xt=t=>t.length>14?`${t.slice(0,6)}\u2026${t.slice(-4)}`:t,Ct=t=>/^\d+(\.\d+)?$/.test(t)&&Number(t)>0;function vt({client:t,engine:e,onClose:n,style:o,topUp:r}){let[,i]=react$1.useReducer(f=>f+1,0),[p,l]=react$1.useState(false),[c,g]=react$1.useState({}),[m,b]=react$1.useState({}),[y,N]=react$1.useState("deposit"),[C,k]=react$1.useState(""),[x,M]=react$1.useState(""),[E,F]=react$1.useState(""),[U,Z]=react$1.useState(false),[q,z]=react$1.useState(null),[be,ie]=react$1.useState(false);react$1.useEffect(()=>{let f=true;return (async()=>{let[T]=await Promise.all([t.blockchain.getDefinitions(),t.cache.ensureState(["InventoryV2","Blockchain"])]);if(!f||(l(true),!T.ok))return;let D={};for(let[L,_]of Object.entries(T.data.Blockchain?.Networks??{}))_.Type===e.networkType&&(D[L]=_);g(D);let V=T.data.CryptoCurrencies??{};b(V);let J=r?V[r.currencyID]?.Networks?.find(L=>!!L.NetworkID&&!!D[L.NetworkID]&&!!L.ContractAddress&&L.DepositsEnabled!==false&&D[L.NetworkID]?.DepositsEnabled!==false)?.NetworkID:null;k(J??Object.keys(D)[0]??"");})(),()=>{f=false;}},[t,e.networkType]),react$1.useEffect(()=>t.on("user:anyUpdated",i),[t]);let W=react$1.useMemo(()=>Object.entries(m).filter(([,f])=>f.Networks?.some(T=>T.NetworkID===C&&!!T.ContractAddress)),[m,C]);react$1.useEffect(()=>{let f=W[0]?.[0]??"";M(T=>r?r.currencyID:W.some(([D])=>D===T)?T:f);},[W,r]);let A=C?c[C]:void 0,O=x?m[x]:void 0,v=O?.Networks?.find(f=>f.NetworkID===C),K=x?t.data.user.getCryptoCurrencyAmount(x):"0",j=O?.DisplayName??x,ae=x?O?.UnbackedRewardCurrencyID||`${x}_IOU`:"",Dt=ae&&Number(t.data.user.state?.InventoryV2?.VirtualCurrencies?.[ae]?.Amount??0)||0,Et=!!ae&&t.data.user.state?.InventoryV2?.VirtualCurrencies?.[ae]!=null,Oe=O?.DisplayDecimals??6,se=!!e.address,Ge=!!r&&!!v?.ContractAddress&&x===r.currencyID,Ce=r&&v?vn(r.amount,v.Decimals??18):"",ke=r?m[r.currencyID]?.DisplayName??r.currencyID:"",_e=Number(v?.MinWithdraw??0);async function xe(f,T){Z(true),z(null);try{let D=await T();return z({tab:f,res:D}),D.ok&&F(""),D}finally{Z(false);}}async function $e(f){let T=await qe();if(!T)return u("approve",d("noNetworks"));let D=await e.deposit({...f,network:T});if(D.ok||D.stage!=="report"||!D.onChainTxHash)return D;let V=D.onChainTxHash,J=D.error;ie(true);try{for(let L=1;L<=kn&&Cn.test(J);L++){await new Promise(Wt=>setTimeout(Wt,xn));let _=await t.blockchain.depositToken(C,V);if(_.ok)return {ok:!0,onChainTxHash:V,data:_.data};if(/^Transaction hash already used/.test(_.error))return await t.cache.ensureState(["InventoryV2"],{force:!0}),{ok:!0,onChainTxHash:V,data:null};J=_.error;}}finally{ie(false);}return {...D,error:J}}async function qe(){let f=await t.blockchain.getDefinitions({forceRefresh:true});return f.ok?f.data.Blockchain?.Networks?.[C]??null:null}async function Tt(){let f=await qe();return f?e.withdraw({network:f,networkID:C,currencyID:x,amount:E}):u("request",d("noNetworks"))}let ve=be?d("confirming"):y==="withdraw"&&!r?d("withdrawing"):d("depositing"),It=se?jsxRuntime.jsxs("div",{style:{...G,display:"flex",alignItems:"center",gap:10,padding:"8px 8px 8px 12px"},children:[jsxRuntime.jsx("span",{style:Tn,"aria-hidden":true}),jsxRuntime.jsxs("div",{style:{display:"grid",flex:1,minWidth:0},children:[jsxRuntime.jsx("span",{style:{...I,fontSize:15,fontFamily:"ui-monospace, Consolas, monospace"},children:xt(e.address)}),A?jsxRuntime.jsx("span",{style:{...P,fontSize:12},children:A.DisplayName??C}):null]}),jsxRuntime.jsx("button",{type:"button",className:"idos-press",style:In,onClick:e.disconnect,children:d("disconnect")})]}):jsxRuntime.jsxs("div",{style:{display:"grid",gap:8},children:[jsxRuntime.jsx("span",{style:P,children:d("connectHint")}),e.connectChoices.length===0?jsxRuntime.jsx("div",{style:{...G,padding:"10px 12px",...P},children:d("notConfigured")}):e.connectChoices.length===1?jsxRuntime.jsx("button",{type:"button",className:"idos-press",style:{...re("blue",false,"lg"),width:"100%"},onClick:e.connectChoices[0].connect,children:d("connect")}):e.connectChoices.map(f=>jsxRuntime.jsxs("button",{type:"button",className:"idos-press",style:Nn,onClick:f.connect,children:[jsxRuntime.jsx("span",{style:{flex:1,textAlign:"left"},children:f.label}),jsxRuntime.jsx("span",{"aria-hidden":true,style:{color:a.textDim},children:"\u203A"})]},f.key))]}),ze=x?jsxRuntime.jsx(Sn,{icon:jsxRuntime.jsx(Wn,{assets:O?.AssetPaths,name:j}),name:j,backed:Number(K)||0,unbacked:Dt,hasIou:Et,decimals:Oe}):null,Nt=jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[Object.keys(c).length>1?jsxRuntime.jsx(kt,{caption:d("network"),value:C,onChange:k,options:Object.entries(c).map(([f,T])=>[f,T.DisplayName??f])}):null,W.length===0?jsxRuntime.jsx("div",{style:{...G,padding:"10px 12px",...P},children:d("noTokens")}):W.length>1?jsxRuntime.jsx(kt,{caption:d("token"),value:x,onChange:M,options:W.map(([f,T])=>[f,T.DisplayName??f])}):null]}),At=jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(Rn,{value:y,onChange:f=>{N(f),z(null),F("");}}),Nt,jsxRuntime.jsxs("div",{style:{display:"grid",gap:6},children:[jsxRuntime.jsx("span",{style:P,children:d("amount")}),jsxRuntime.jsxs("div",{style:{...G,display:"flex",alignItems:"center",gap:8,padding:"4px 6px 4px 14px"},children:[jsxRuntime.jsx("input",{style:Pn,inputMode:"decimal",placeholder:"0.0",value:E,onChange:f=>F(f.target.value.replace(",","."))}),jsxRuntime.jsx("span",{style:{...P,fontSize:14},children:j}),y==="withdraw"&&Number(K)>0?jsxRuntime.jsx("button",{type:"button",className:"idos-press",style:re("gold",false,"sm"),onClick:()=>F(String(K)),children:d("max")}):null]}),y==="withdraw"&&_e>0?jsxRuntime.jsx("span",{style:{...P,fontSize:12},children:d("minWithdraw",{n:Me(_e,Oe)})}):null]}),y==="deposit"?jsxRuntime.jsx(He,{tone:"green",busy:U,busyText:ve,disabled:!se||!v?.ContractAddress||!Ct(E),onClick:()=>{!A||!v||xe("deposit",()=>$e({network:A,binding:v,currencyID:x,amount:E}));},children:d("deposit")}):jsxRuntime.jsx(He,{tone:"blue",busy:U,busyText:ve,disabled:!se||!x||!Ct(E),onClick:()=>{A&&xe("withdraw",()=>Tt());},children:d("withdraw")})]}),Pt=r?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{style:{...bt("gold"),padding:"12px 14px",display:"grid",gap:4},children:Ge?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("span",{style:{...I,color:"inherit",fontSize:13,opacity:.9},children:d("topUpNeed")}),jsxRuntime.jsxs("span",{style:{...I,color:"inherit",fontSize:24,lineHeight:1.1},children:[Ce," ",ke," ",d("topUpMore")]}),jsxRuntime.jsx("span",{style:{fontSize:13,fontWeight:600,opacity:.95},children:d("topUpHint")})]}):jsxRuntime.jsx("span",{style:{...I,color:"inherit",fontSize:15},children:p?d("topUpCannot",{name:ke}):d("loading")})}),ze,jsxRuntime.jsx(He,{tone:"green",busy:U,busyText:ve,disabled:!se||!Ge,onClick:()=>{!A||!v||xe("deposit",()=>$e({network:A,binding:v,currencyID:x,amount:Ce})).then(f=>{f.ok&&r.onDone(true);});},children:d("depositAmount",{amount:Ce,name:ke})})]}):null,Ke=!!n;return jsxRuntime.jsxs("div",{style:{...En,...Ke?{...Fe,padding:16,width:360,maxWidth:"100%",maxHeight:"80vh",overflow:"auto"}:{},...o},children:[jsxRuntime.jsx("style",{children:Dn}),Ke?jsxRuntime.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[jsxRuntime.jsx("span",{style:{...I,fontSize:20},children:r?d("topUpTitle"):d("title")}),jsxRuntime.jsx("button",{type:"button",className:"idos-press",style:An,onClick:n,"aria-label":"\u2715",children:"\u2715"})]}):null,It,p?Object.keys(c).length===0?jsxRuntime.jsx("div",{style:{...G,padding:"12px 14px",...P},children:d("noNetworks")}):r?Pt:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[ze,At]}):jsxRuntime.jsx("div",{style:{...P,textAlign:"center",padding:12},children:d("loading")}),q?jsxRuntime.jsx(Bn,{tab:q.tab,result:q.res}):null]})}var Dn="@keyframes idosw-spin { to { transform: rotate(360deg) } }",En={pointerEvents:"auto",color:a.text,fontFamily:a.font,display:"flex",flexDirection:"column",gap:12,boxSizing:"border-box",width:"100%",minWidth:0,maxWidth:"100%"},Tn={width:10,height:10,borderRadius:"50%",background:a.green,boxShadow:`0 0 0 3px color-mix(in srgb, ${a.green} 30%, transparent)`,flex:"none"},In={...I,fontFamily:a.font,fontSize:13,color:a.textDim,background:"transparent",border:`2px solid ${a.line}`,borderRadius:10,padding:"5px 10px",cursor:"pointer"},Nn={...G,...I,fontFamily:a.font,fontSize:15,display:"flex",alignItems:"center",gap:10,padding:"10px 12px",cursor:"pointer",width:"100%"},An={...re("red",false,"sm"),width:36,minHeight:36,padding:0,borderRadius:"50%"},Pn={...I,fontFamily:a.font,fontSize:22,flex:1,minWidth:0,background:"transparent",border:"none",outline:"none",padding:"6px 0"};function Wn({assets:t,name:e}){let n=t?.Default||t?.Icon||"",o={width:40,height:40,borderRadius:"50%",flex:"none",display:"grid",placeItems:"center",background:`linear-gradient(180deg, ${a.gold}, ${a.goldDeep})`,boxShadow:`0 3px 0 ${a.edge}`,overflow:"hidden",fontSize:22};return /^(https?:)?\/\/|^\//.test(n)?jsxRuntime.jsx("span",{style:o,children:jsxRuntime.jsx("img",{src:n,alt:"",style:{width:"100%",height:"100%",objectFit:"cover"}})}):jsxRuntime.jsx("span",{style:{...o,...I,fontSize:20},"aria-hidden":true,children:(e.trim()[0]??"?").toUpperCase()})}function Sn({icon:t,name:e,backed:n,unbacked:o,hasIou:r,decimals:i}){let[p,l]=react$1.useState(false),c=(g,m,b=false)=>jsxRuntime.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:16},children:[jsxRuntime.jsx("span",{style:{...P,fontSize:13},children:g}),jsxRuntime.jsx("span",{style:{...I,fontSize:14,color:b?a.textDim:a.text},children:Me(m,i)})]});return jsxRuntime.jsxs("div",{style:{position:"relative"},onMouseEnter:()=>l(true),onMouseLeave:()=>l(false),children:[jsxRuntime.jsxs("button",{type:"button","aria-expanded":p,onClick:()=>l(g=>!g),onBlur:()=>l(false),style:{...G,display:"flex",alignItems:"center",gap:12,padding:"10px 14px",width:"100%",cursor:"pointer",font:"inherit",textAlign:"left"},children:[t,jsxRuntime.jsxs("span",{style:{display:"grid",minWidth:0,flex:1},children:[jsxRuntime.jsx("span",{style:{...P,fontSize:12},children:d("balance")}),jsxRuntime.jsxs("span",{style:{...I,fontSize:22,lineHeight:1.1},children:[Me(n+o,i)," ",jsxRuntime.jsx("span",{style:{fontSize:15,color:a.textDim},children:e})]})]}),jsxRuntime.jsx("span",{"aria-hidden":true,style:{...P,fontSize:16},children:"\u24D8"})]}),p?jsxRuntime.jsxs("div",{role:"tooltip",style:{...Fe,position:"absolute",left:0,right:0,top:"calc(100% + 6px)",zIndex:5,padding:"10px 12px",display:"grid",gap:6},children:[c(d("backed"),n),r?c(d("unbacked"),o,o===0):null,jsxRuntime.jsx("div",{style:{height:1,background:a.line}}),c(d("total"),n+o),jsxRuntime.jsx("span",{style:{fontSize:12,color:a.textDim,lineHeight:1.35},children:r?d("iouHint"):d("backedHint")})]}):null]})}function Rn({value:t,onChange:e}){let n=[["deposit",d("deposit")],["withdraw",d("withdraw")]];return jsxRuntime.jsx("div",{role:"tablist",style:{display:"flex",gap:6,padding:4,borderRadius:16,background:a.wellSoft},children:n.map(([o,r])=>{let i=o===t;return jsxRuntime.jsx("button",{role:"tab","aria-selected":i,type:"button",className:"idos-press",onClick:()=>!i&&e(o),style:{...I,fontFamily:a.font,fontSize:15,flex:1,border:"none",borderRadius:12,padding:"9px 14px",cursor:"pointer",color:i?a.onBlue:a.textDim,background:i?`linear-gradient(180deg, ${a.blue}, ${a.blueDeep})`:"transparent",boxShadow:i?`0 3px 0 ${a.edge}, inset 0 2px 0 rgba(255,255,255,.3)`:"none",transition:`background ${a.fast} ease`},children:r},o)})})}function kt({caption:t,value:e,onChange:n,options:o}){return jsxRuntime.jsxs("label",{style:{display:"grid",gap:6},children:[jsxRuntime.jsx("span",{style:P,children:t}),jsxRuntime.jsxs("span",{style:{position:"relative",display:"block"},children:[jsxRuntime.jsx("select",{value:e,onChange:r=>n(r.target.value),style:{...G,...I,fontFamily:a.font,fontSize:15,width:"100%",padding:"10px 36px 10px 12px",appearance:"none",WebkitAppearance:"none",cursor:"pointer",outline:"none"},children:o.map(([r,i])=>jsxRuntime.jsx("option",{value:r,style:{color:"#111"},children:i},r))}),jsxRuntime.jsx("span",{"aria-hidden":true,style:{position:"absolute",right:14,top:"50%",transform:"translateY(-50%)",color:a.textDim,pointerEvents:"none"},children:"\u25BE"})]})]})}function He({tone:t,busy:e,busyText:n,disabled:o,onClick:r,children:i}){return jsxRuntime.jsx("button",{type:"button",className:"idos-press",disabled:o||e,onClick:r,style:{...re(t,o&&!e,"lg"),width:"100%"},children:e?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("span",{"aria-hidden":true,style:{width:18,height:18,borderRadius:"50%",border:"3px solid rgba(255,255,255,.35)",borderTopColor:"#fff",animation:"idosw-spin .8s linear infinite"}}),n]}):i})}function Bn({tab:t,result:e}){let n=e.ok,o={borderRadius:14,padding:"10px 12px",display:"grid",gap:4,background:`color-mix(in srgb, ${n?a.green:a.red} 22%, transparent)`,border:`2px solid color-mix(in srgb, ${n?a.green:a.red} 60%, transparent)`,wordBreak:"break-word"};return n?jsxRuntime.jsxs("div",{style:o,role:"status",children:[jsxRuntime.jsxs("span",{style:{...I,fontSize:15},children:["\u2713 ",t==="withdraw"?d("doneWithdraw"):d("doneDeposit")]}),jsxRuntime.jsxs("span",{style:{...P,fontSize:12},children:[d("tx"),": ",xt(e.onChainTxHash)]})]}):jsxRuntime.jsxs("div",{style:o,role:"alert",children:[jsxRuntime.jsxs("span",{style:{...I,fontSize:15},children:["\u2715 ",d("failed")]}),jsxRuntime.jsx("span",{style:{fontSize:13,color:a.text,opacity:.9},children:e.error}),e.titleTransactionID?jsxRuntime.jsx("span",{style:{...P,fontSize:12},children:d("debited")}):null]})}function zn(t){let{client:e,walletConnectProjectId:n,appName:o,onClose:r,style:i,topUp:p}=t,[l,c]=react$1.useState(n??"");react$1.useEffect(()=>{if(n)return;let m=true;return (async()=>{let b=await e.blockchain.getDefinitions();if(!m||!b.ok)return;let y=b.data.Blockchain?.WalletLogin?.WalletConnectProjectId;y&&c(y);})(),()=>{m=false;}},[e,n]);let g=react$1.useMemo(()=>Te({walletConnectProjectId:l||void 0,appName:o}),[l,o]);return jsxRuntime.jsx(X,{wagmiConfig:g,children:jsxRuntime.jsx(Kn,{client:e,onClose:r,style:i,topUp:p})})}function Kn({client:t,onClose:e,style:n,topUp:o}){let r=Re(t,t.titleID),{address:i,isConnected:p,chainId:l}=wagmi.useAccount(),{connect:c,connectors:g}=wagmi.useConnect(),{disconnect:m}=wagmi.useDisconnect(),{switchChainAsync:b}=wagmi.useSwitchChain(),y=wagmi.useConfig();async function N(k){if(!k||l===k)return true;try{return await b({chainId:k}),!0}catch{return false}}let C={networkType:"EVM",address:p&&i?i:null,connectChoices:g.map(k=>({key:k.uid,label:k.name,connect:()=>c({connector:k})})),disconnect:()=>m(),deposit:async({network:k,binding:x,amount:M})=>{if(!x.ContractAddress)return u("approve","This token cannot be deposited.");if(!await N(k.ChainID))return u("approve",`Switch your wallet to chain ${k.ChainID} to continue.`);let E;try{let U=actions.getPublicClient(y,{chainId:k.ChainID??void 0});if(!U)throw new Error("no client");E=Number(await U.readContract({address:x.ContractAddress,abi:ee,functionName:"decimals"}));}catch{return u("approve","Could not read the token from the network. Try again.")}let F;try{F=viem.parseUnits(M,E);}catch{return u("approve","Invalid amount.")}return r.depositToken({network:k,tokenAddress:x.ContractAddress,amount:F})},withdraw:async({network:k,networkID:x,currencyID:M,amount:E})=>r.account?await N(k.ChainID)?r.withdrawToken({currencyID:M,networkID:x,walletAddress:r.account,amount:E}):u("request",`Switch your wallet to chain ${k.ChainID} to continue.`):u("request","Wallet not connected.")};return jsxRuntime.jsx(vt,{client:t,engine:C,onClose:e,style:n,topUp:o})}function Yn(t){let[e,n]=react$1.useState(null);return react$1.useEffect(()=>{if(R()||ot())return;let o=null;return t.checkout.setTopUpHandler(r=>new Promise(i=>{o?.(false);let p=false,l=c=>{p||(p=true,o===l&&(o=null),n(g=>g?.onDone===l?null:g),i(c));};o=l,n({currencyID:r.currencyID,amount:r.missingAmount??String(r.missing),onDone:l});})),()=>{t.checkout.setTopUpHandler(null),o?.(false);}},[t]),e}
2
+ exports.DEFAULT_EVM_CHAINS=Ze;exports.IDosGamesWalletProvider=X;exports.WalletLogin=on;exports.WalletLoginButton=yt;exports.WalletPanel=zn;exports.arbitrum=ue;exports.base=pe;exports.bsc=ce;exports.chainById=St;exports.createEvmWalletConfig=Te;exports.idosChains=je;exports.mainnet=le;exports.optimism=me;exports.polygon=de;exports.polygonAmoy=ge;exports.sepolia=fe;exports.useEvmBridge=Re;exports.useEvmBridgeClients=we;exports.useWalletTopUp=Yn;
@@ -1 +1 @@
1
- import {p as p$1,o as o$1,j as j$1,h,q as q$2,r as r$1}from'../chunk-YTTVLBAW.js';export{a as useWalletTopUp}from'../chunk-DOWG5IDM.js';import {a,c as c$1,b as b$1}from'../chunk-NU3WMVH2.js';import'../chunk-ZOWZE7MU.js';import {k,l,m,n,o,p,q as q$1,r,u,b,c}from'../chunk-K3THMWU2.js';export{o as arbitrum,n as base,l as bsc,t as chainById,s as idosChains,k as mainnet,p as optimism,m as polygon,r as polygonAmoy,q as sepolia}from'../chunk-K3THMWU2.js';import {http,createConfig,WagmiProvider,useAccount,usePublicClient,useWalletClient,useConfig,useConnect,useDisconnect,useSwitchChain}from'wagmi';import {injected,coinbaseWallet}from'wagmi/connectors';import {WagmiAdapter}from'@reown/appkit-adapter-wagmi';import {createAppKit}from'@reown/appkit/react';import {QueryClient,QueryClientProvider}from'@tanstack/react-query';import {useState,useRef,useEffect,useMemo}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {getAccount,watchAccount,getWalletClient,getPublicClient}from'wagmi/actions';import {authErrorText}from'@idosgames/core';import {parseUnits}from'viem';var se=[k,l,m,n,o,p,q$1,r],_=new Map;function j(e){let{chains:n=se,walletConnectProjectId:t,appName:o,appUrl:r,appIcon:s,transports:p,connectors:a$1}=e,c=t??"__extension_only__";if(!a$1){let i=_.get(c);if(i)return i}let m={};for(let i of n)m[i.id]=p?.[i.id]??http();let l=r??(typeof window<"u"?window.location.origin:""),w={name:o??"iDosGames",description:o??"iDosGames game",url:l,icons:s?[s]:[]};if(t&&!a$1){let i=n.map(u),d=new WagmiAdapter({networks:i,projectId:t,transports:m});return a(createAppKit({adapters:[d],networks:i,projectId:t,metadata:w,features:{analytics:false,email:false,socials:false}})),_.set(c,d.wagmiConfig),d.wagmiConfig}let f=a$1??[injected(),coinbaseWallet({appName:o??"iDosGames"})],v=createConfig({chains:n,connectors:f,transports:m});return a$1||_.set(c,v),v}function E(e){let{wagmiConfig:n,queryClient:t,children:o}=e,[r]=useState(()=>t??new QueryClient);return jsx(WagmiProvider,{config:n,children:jsx(QueryClientProvider,{client:r,children:o})})}function I(){let{address:e}=useAccount(),n=usePublicClient(),{data:t}=useWalletClient();return !e||!n||!t?null:{account:e,publicClient:n,walletClient:t}}var T="Wallet not connected.";function q(e,n){let t=I();return {connected:!!t,account:t?.account??null,loginWithWallet:(o,r)=>t?q$2({client:e,clients:t,networkID:o,walletAddress:r}):Promise.resolve(c("challenge",T)),depositToken:o=>t?h({client:e,clients:t,titleID:n,...o}):Promise.resolve(b("approve",T)),depositNft:o=>t?j$1({client:e,clients:t,titleID:n,...o}):Promise.resolve(b("deposit-onchain",T)),withdrawToken:o=>t?o$1({client:e,clients:t,...o}):Promise.resolve(b("withdraw-onchain",T)),withdrawNft:o=>t?p$1({client:e,clients:t,...o}):Promise.resolve(b("withdraw-onchain",T))}}function _e(e){let{wagmiConfig:n,...t}=e;return jsx(E,{wagmiConfig:n,children:jsx(fe,{...t})})}function je(e){return e instanceof Error&&(e.name==="ConnectorAlreadyConnectedError"||e.message.includes("already connected"))}function qe(e){let n="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.":n:n}async function pe(e){let n=await getWalletClient(e).catch(()=>null);if(!n)return null;let t=getPublicClient(e);return t?{account:n.account.address,publicClient:t,walletClient:n}:null}function Oe(e,n=18e4){return getAccount(e).isConnected?Promise.resolve(true):new Promise(t=>{let o=false,r=a=>{o||(o=true,s(),clearTimeout(p),t(a));},s=watchAccount(e,{onChange:a=>{a.isConnected&&r(true);}}),p=setTimeout(()=>r(false),n);})}function Ke(e,n=8e3){let t=o=>o==="reconnecting"||o==="connecting";return t(getAccount(e).status)?new Promise(o=>{let r=false,s=()=>{r||(r=true,p(),clearTimeout(a),o());},p=watchAccount(e,{onChange:c=>{t(c.status)||s();}}),a=setTimeout(s,n);}):Promise.resolve()}function Me(e){let n=r=>e.find(s=>s.id===r||s.type===r),t=n("injected"),o=typeof window<"u"&&window.ethereum!=null;return t&&o?t:n("walletConnect")??t??e[0]}var de=9e4;async function Qe(e){try{let o=(await getAccount(e).connector?.getProvider?.())?.session?.peer?.metadata?.redirect,r=o?.native||o?.universal;return !r||typeof window>"u"?!1:(window.location.href=r,!0)}catch{return false}}function ue(e,n){return new Promise((t,o)=>{let r=setTimeout(()=>o(new Error("The wallet request timed out.")),n);e.then(s=>{clearTimeout(r),t(s);},s=>{clearTimeout(r),o(s instanceof Error?s:new Error(String(s)));});})}function fe(e){let{client:n,networkID:t,onAuthenticated:o,disabled:r,label:s,style:p,autoStart:a,mode:c="login",onLinked:m}=e,l=useConfig(),{isConnected:w}=useAccount(),{connectAsync:f,connectors:v}=useConnect(),i=I(),[d,P]=useState(false),[y,h]=useState(null),[M,Q]=useState(false),V=useRef(0),$=useRef(false),z=async()=>{let we=++V.current,W=()=>V.current===we;P(true),h(null);try{if(await Ke(l),!W())return;if(!getAccount(l).isConnected){let g=b$1();if(g){if(await g.open(),!await Oe(l)){h("No wallet was connected.");return}}else {let H=Me(v);if(!H){h("No wallet connector is configured.");return}try{await f({connector:H});}catch(J){if(!je(J))throw J}}}let C=i??await pe(l);if(!C&&getAccount(l).isConnected&&(await new Promise(g=>setTimeout(g,300)),C=await pe(l),!W()))return;if(!C){h("Wallet client is not available.");return}if(Q(!0),c==="link"){let g=await ue(r$1({client:n,clients:C,networkID:t}),de);if(!W())return;if(g.ok){m?.(g.data.PlayAccess??null);return}h(g.stage==="sign"?"Signature declined.":authErrorText(g.error,"Could not link the wallet."));return}let D=await ue(q$2({client:n,clients:C,networkID:t}),de);if(!W())return;if(D.ok){o();return}h(D.stage==="sign"?"Signature declined.":authErrorText(D.error,"Wallet sign-in failed."));}catch(C){if(!W())return;console.error("[idosgames/wallet] wallet sign-in failed:",C),h(qe(C));}finally{W()&&(P(false),Q(false));}};useEffect(()=>{!a||$.current||($.current=true,z());},[a]);let ge=async()=>{await Qe(l)||await b$1()?.open();};return jsxs(Fragment,{children:[jsx("button",{type:"button",onClick:()=>{M?ge():z();},disabled:r,style:{...Ve,...r?{opacity:.6,cursor:"default"}:null,...p},children:M?"Waiting for signature \u2014 tap to open wallet":d?"Check your wallet\u2026":w?s??(c==="link"?"Link wallet":"Sign in with wallet"):"Connect wallet"}),y&&jsx("span",{role:"alert",style:$e,children:y})]})}var Ve={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},$e={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};function rt(e){let{client:n,walletConnectProjectId:t,appName:o,onClose:r,style:s,topUp:p}=e,[a,c]=useState(t??"");useEffect(()=>{if(t)return;let l=true;return (async()=>{let w=await n.blockchain.getDefinitions();if(!l||!w.ok)return;let f=w.data.Blockchain?.WalletLogin?.WalletConnectProjectId;f&&c(f);})(),()=>{l=false;}},[n,t]);let m=useMemo(()=>j({walletConnectProjectId:a||void 0,appName:o}),[a,o]);return jsx(E,{wagmiConfig:m,children:jsx(it,{client:n,onClose:r,style:s,topUp:p})})}function it({client:e,onClose:n,style:t,topUp:o}){let r=q(e,e.titleID),{address:s,isConnected:p,chainId:a}=useAccount(),{connect:c,connectors:m}=useConnect(),{disconnect:l}=useDisconnect(),{switchChainAsync:w}=useSwitchChain();async function f(i){if(!i||a===i)return true;try{return await w({chainId:i}),!0}catch{return false}}let v={networkType:"EVM",address:p&&s?s:null,connectChoices:m.map(i=>({key:i.uid,label:i.name,connect:()=>c({connector:i})})),disconnect:()=>l(),deposit:async({network:i,binding:d,amount:P})=>{if(!d.ContractAddress)return b("approve","This token cannot be deposited.");if(!await f(i.ChainID))return b("approve",`Switch your wallet to chain ${i.ChainID} to continue.`);let y;try{y=parseUnits(P,d.Decimals??18);}catch{return b("approve","Invalid amount.")}return r.depositToken({network:i,tokenAddress:d.ContractAddress,amount:y})},withdraw:async({network:i,networkID:d,currencyID:P,amount:y})=>r.account?await f(i.ChainID)?r.withdrawToken({currencyID:P,networkID:d,walletAddress:r.account,amount:y}):b("request",`Switch your wallet to chain ${i.ChainID} to continue.`):b("request","Wallet not connected.")};return jsx(c$1,{client:e,engine:v,onClose:n,style:t,topUp:o})}export{se as DEFAULT_EVM_CHAINS,E as IDosGamesWalletProvider,_e as WalletLogin,fe as WalletLoginButton,rt as WalletPanel,j as createEvmWalletConfig,q as useEvmBridge,I as useEvmBridgeClients};
1
+ import {p as p$1,o as o$1,j,h,q as q$2,r as r$1,b as b$3}from'../chunk-IUJSUGBX.js';export{a as useWalletTopUp}from'../chunk-DOWG5IDM.js';import {a,c as c$1,b as b$2}from'../chunk-NU3WMVH2.js';import'../chunk-ZOWZE7MU.js';import {k as k$1,l,m,n,o,p,q as q$1,r,u,b as b$1,c}from'../chunk-K3THMWU2.js';export{o as arbitrum,n as base,l as bsc,t as chainById,s as idosChains,k as mainnet,p as optimism,m as polygon,r as polygonAmoy,q as sepolia}from'../chunk-K3THMWU2.js';import {http,createConfig,WagmiProvider,useAccount,usePublicClient,useWalletClient,useConfig,useConnect,useDisconnect,useSwitchChain}from'wagmi';import {injected,coinbaseWallet}from'wagmi/connectors';import {WagmiAdapter}from'@reown/appkit-adapter-wagmi';import {createAppKit}from'@reown/appkit/react';import {QueryClient,QueryClientProvider}from'@tanstack/react-query';import {useState,useRef,useEffect,useMemo}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {getAccount,getPublicClient,watchAccount,getWalletClient}from'wagmi/actions';import {authErrorText}from'@idosgames/core';import {parseUnits}from'viem';var se=[k$1,l,m,n,o,p,q$1,r],q=new Map;function O(e){let{chains:n=se,walletConnectProjectId:t,appName:o,appUrl:r,appIcon:i,transports:m,connectors:s}=e,c=t??"__extension_only__";if(!s){let p=q.get(c);if(p)return p}let f={};for(let p of n)f[p.id]=m?.[p.id]??http();let l=r??(typeof window<"u"?window.location.origin:""),w={name:o??"iDosGames",description:o??"iDosGames game",url:l,icons:i?[i]:[]};if(t&&!s){let p=n.map(u),a$1=new WagmiAdapter({networks:p,projectId:t,transports:f});return a(createAppKit({adapters:[a$1],networks:p,projectId:t,metadata:w,features:{analytics:false,email:false,socials:false}})),q.set(c,a$1.wagmiConfig),a$1.wagmiConfig}let C=s??[injected(),coinbaseWallet({appName:o??"iDosGames"})],v=createConfig({chains:n,connectors:C,transports:f});return s||q.set(c,v),v}function b(e){let{wagmiConfig:n,queryClient:t,children:o}=e,[r]=useState(()=>t??new QueryClient);return jsx(WagmiProvider,{config:n,children:jsx(QueryClientProvider,{client:r,children:o})})}function N(){let{address:e}=useAccount(),n=usePublicClient(),{data:t}=useWalletClient();return !e||!n||!t?null:{account:e,publicClient:n,walletClient:t}}var k="Wallet not connected.";function K(e,n){let t=N();return {connected:!!t,account:t?.account??null,loginWithWallet:(o,r)=>t?q$2({client:e,clients:t,networkID:o,walletAddress:r}):Promise.resolve(c("challenge",k)),depositToken:o=>t?h({client:e,clients:t,titleID:n,...o}):Promise.resolve(b$1("approve",k)),depositNft:o=>t?j({client:e,clients:t,titleID:n,...o}):Promise.resolve(b$1("deposit-onchain",k)),withdrawToken:o=>t?o$1({client:e,clients:t,...o}):Promise.resolve(b$1("withdraw-onchain",k)),withdrawNft:o=>t?p$1({client:e,clients:t,...o}):Promise.resolve(b$1("withdraw-onchain",k))}}function je(e){let{wagmiConfig:n,...t}=e;return jsx(b,{wagmiConfig:n,children:jsx(ge,{...t})})}function qe(e){return e instanceof Error&&(e.name==="ConnectorAlreadyConnectedError"||e.message.includes("already connected"))}function Oe(e){let n="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.":n:n}async function de(e){let n=await getWalletClient(e).catch(()=>null);if(!n)return null;let t=getPublicClient(e);return t?{account:n.account.address,publicClient:t,walletClient:n}:null}function Ke(e,n=18e4){return getAccount(e).isConnected?Promise.resolve(true):new Promise(t=>{let o=false,r=s=>{o||(o=true,i(),clearTimeout(m),t(s));},i=watchAccount(e,{onChange:s=>{s.isConnected&&r(true);}}),m=setTimeout(()=>r(false),n);})}function Me(e,n=8e3){let t=o=>o==="reconnecting"||o==="connecting";return t(getAccount(e).status)?new Promise(o=>{let r=false,i=()=>{r||(r=true,m(),clearTimeout(s),o());},m=watchAccount(e,{onChange:c=>{t(c.status)||i();}}),s=setTimeout(i,n);}):Promise.resolve()}function Qe(e){let n=r=>e.find(i=>i.id===r||i.type===r),t=n("injected"),o=typeof window<"u"&&window.ethereum!=null;return t&&o?t:n("walletConnect")??t??e[0]}var ue=9e4;async function Ve(e){try{let o=(await getAccount(e).connector?.getProvider?.())?.session?.peer?.metadata?.redirect,r=o?.native||o?.universal;return !r||typeof window>"u"?!1:(window.location.href=r,!0)}catch{return false}}function me(e,n){return new Promise((t,o)=>{let r=setTimeout(()=>o(new Error("The wallet request timed out.")),n);e.then(i=>{clearTimeout(r),t(i);},i=>{clearTimeout(r),o(i instanceof Error?i:new Error(String(i)));});})}function ge(e){let{client:n,networkID:t,onAuthenticated:o,disabled:r,label:i,style:m,autoStart:s,mode:c="login",onLinked:f}=e,l=useConfig(),{isConnected:w}=useAccount(),{connectAsync:C,connectors:v}=useConnect(),p=N(),[a,y]=useState(false),[P,d]=useState(null),[E,T]=useState(false),V=useRef(0),$=useRef(false),z=async()=>{let Ce=++V.current,W=()=>V.current===Ce;y(true),d(null);try{if(await Me(l),!W())return;if(!getAccount(l).isConnected){let g=b$2();if(g){if(await g.open(),!await Ke(l)){d("No wallet was connected.");return}}else {let H=Qe(v);if(!H){d("No wallet connector is configured.");return}try{await C({connector:H});}catch(J){if(!qe(J))throw J}}}let h=p??await de(l);if(!h&&getAccount(l).isConnected&&(await new Promise(g=>setTimeout(g,300)),h=await de(l),!W()))return;if(!h){d("Wallet client is not available.");return}if(T(!0),c==="link"){let g=await me(r$1({client:n,clients:h,networkID:t}),ue);if(!W())return;if(g.ok){f?.(g.data.PlayAccess??null);return}d(g.stage==="sign"?"Signature declined.":authErrorText(g.error,"Could not link the wallet."));return}let S=await me(q$2({client:n,clients:h,networkID:t}),ue);if(!W())return;if(S.ok){o();return}d(S.stage==="sign"?"Signature declined.":authErrorText(S.error,"Wallet sign-in failed."));}catch(h){if(!W())return;console.error("[idosgames/wallet] wallet sign-in failed:",h),d(Oe(h));}finally{W()&&(y(false),T(false));}};useEffect(()=>{!s||$.current||($.current=true,z());},[s]);let we=async()=>{await Ve(l)||await b$2()?.open();};return jsxs(Fragment,{children:[jsx("button",{type:"button",onClick:()=>{E?we():z();},disabled:r,style:{...$e,...r?{opacity:.6,cursor:"default"}:null,...m},children:E?"Waiting for signature \u2014 tap to open wallet":a?"Check your wallet\u2026":w?i??(c==="link"?"Link wallet":"Sign in with wallet"):"Connect wallet"}),P&&jsx("span",{role:"alert",style:ze,children:P})]})}var $e={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},ze={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};function st(e){let{client:n,walletConnectProjectId:t,appName:o,onClose:r,style:i,topUp:m}=e,[s,c]=useState(t??"");useEffect(()=>{if(t)return;let l=true;return (async()=>{let w=await n.blockchain.getDefinitions();if(!l||!w.ok)return;let C=w.data.Blockchain?.WalletLogin?.WalletConnectProjectId;C&&c(C);})(),()=>{l=false;}},[n,t]);let f=useMemo(()=>O({walletConnectProjectId:s||void 0,appName:o}),[s,o]);return jsx(b,{wagmiConfig:f,children:jsx(lt,{client:n,onClose:r,style:i,topUp:m})})}function lt({client:e,onClose:n,style:t,topUp:o}){let r=K(e,e.titleID),{address:i,isConnected:m,chainId:s}=useAccount(),{connect:c,connectors:f}=useConnect(),{disconnect:l}=useDisconnect(),{switchChainAsync:w}=useSwitchChain(),C=useConfig();async function v(a){if(!a||s===a)return true;try{return await w({chainId:a}),!0}catch{return false}}let p={networkType:"EVM",address:m&&i?i:null,connectChoices:f.map(a=>({key:a.uid,label:a.name,connect:()=>c({connector:a})})),disconnect:()=>l(),deposit:async({network:a,binding:y,amount:P})=>{if(!y.ContractAddress)return b$1("approve","This token cannot be deposited.");if(!await v(a.ChainID))return b$1("approve",`Switch your wallet to chain ${a.ChainID} to continue.`);let d;try{let T=getPublicClient(C,{chainId:a.ChainID??void 0});if(!T)throw new Error("no client");d=Number(await T.readContract({address:y.ContractAddress,abi:b$3,functionName:"decimals"}));}catch{return b$1("approve","Could not read the token from the network. Try again.")}let E;try{E=parseUnits(P,d);}catch{return b$1("approve","Invalid amount.")}return r.depositToken({network:a,tokenAddress:y.ContractAddress,amount:E})},withdraw:async({network:a,networkID:y,currencyID:P,amount:d})=>r.account?await v(a.ChainID)?r.withdrawToken({currencyID:P,networkID:y,walletAddress:r.account,amount:d}):b$1("request",`Switch your wallet to chain ${a.ChainID} to continue.`):b$1("request","Wallet not connected.")};return jsx(c$1,{client:e,engine:p,onClose:n,style:t,topUp:o})}export{se as DEFAULT_EVM_CHAINS,b as IDosGamesWalletProvider,je as WalletLogin,ge as WalletLoginButton,st as WalletPanel,O as createEvmWalletConfig,K as useEvmBridge,N as useEvmBridgeClients};