@idosgames/wallet 0.6.3 → 0.6.4

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,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-YTTVLBAW.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};
@@ -1,2 +1,2 @@
1
- 'use strict';var viem=require('viem'),core=require('@idosgames/core'),wagmi=require('wagmi'),connectors=require('wagmi/connectors'),appkitAdapterWagmi=require('@reown/appkit-adapter-wagmi'),react$1=require('@reown/appkit/react'),reactQuery=require('@tanstack/react-query'),react=require('react'),jsxRuntime=require('react/jsx-runtime'),actions=require('wagmi/actions'),appkitAdapterSolana=require('@reown/appkit-adapter-solana'),buffer=require('buffer'),web3_js=require('@solana/web3.js');var ho=Object.defineProperty;var C=(t,e)=>()=>(t&&(e=t(t=0)),e);var Qt=(t,e)=>{for(var n in e)ho(t,n,{get:e[n],enumerable:true});};function O(t){return t instanceof viem.BaseError?t.shortMessage:t instanceof Error?t.message:String(t)}function y(t,e,n){return {ok:false,stage:t,error:e,...n}}function P(t,e){return {ok:false,stage:t,error:e}}var G=C(()=>{});function So(t=typeof window>"u"?"":window.location.hostname){let e=t.toLowerCase();return ko.test(e)?true:e!=="localhost"&&e!=="127.0.0.1"?false:globalThis.__IDOS_PREVIEW__!=null}function E(){if(typeof window>"u"||So())return false;try{return window.self!==window.top}catch{return true}}function Ee(){if(typeof window>"u")return false;try{return window.parent!==window.top}catch{return true}}function ee(t){return y(t,Jt)}function me(t){return P(t,Jt)}var Jt,ko,te=C(()=>{G();Jt="WALLET_USE_SITE_PANEL",ko=/^[a-z0-9]{8}-preview\.idos\.games$/;});function se(t,e=false,n="md"){let[o,r,a]=e?["#8e95b8","#5b6187","#ffffff"]:Xt[t];return {...L,color:a,boxSizing:"border-box",fontFamily:f.font,fontSize:n==="sm"?13:n==="lg"?18:16,border:"none",borderRadius:f.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 ${f.edge}, inset 0 2px 0 rgba(255,255,255,.35)`,opacity:e?.75:1,display:"inline-flex",alignItems:"center",justifyContent:"center",gap:8}}function en(t){let[e,n,o]=Xt[t];return {background:`linear-gradient(180deg, ${e} 0%, ${n} 100%)`,color:o,borderRadius:16,boxShadow:`0 4px 0 ${f.edge}, inset 0 2px 0 rgba(255,255,255,.3)`}}function Po(){if(typeof navigator>"u")return false;let t=(navigator.language||"").toLowerCase();return Co.some(e=>t.startsWith(e))}function h(t,e){let n=(Po()?xo:Zt)[t]??Zt[t];for(let[o,r]of Object.entries(e??{}))n=n.replace(`{${o}}`,String(r));return n}var T,f,Xt,L,De,ne,B,Co,Zt,xo,it=C(()=>{T=(t,e)=>`var(--idos-ui-${t}, ${e})`,f={panel:T("panel","#2c3480"),panelDeep:T("panel-deep","#1d2360"),panelEdge:T("panel-edge","#4f5bc9"),text:T("text","#ffffff"),textDim:T("text-dim","#aeb6f0"),gold:T("gold","#ffd24a"),goldDeep:T("gold-deep","#e89a12"),green:T("green","#59d35b"),greenDeep:T("green-deep","#2b9936"),blue:T("blue","#4fb1ff"),blueDeep:T("blue-deep","#2276d6"),red:T("red","#ff5a5a"),redDeep:T("red-deep","#b83232"),onGreen:T("on-green","#ffffff"),onBlue:T("on-blue","#ffffff"),onGold:T("on-gold","#ffffff"),textOutline:T("text-outline","0 2px 0 rgba(0,0,0,.45), 0 0 1px rgba(0,0,0,.6)"),well:T("well","rgba(8, 10, 40, 0.6)"),wellSoft:T("well-soft","rgba(0, 0, 0, 0.3)"),wellShadow:T("well-shadow","inset 0 2px 4px rgba(0, 0, 0, 0.4)"),edge:T("edge","rgba(0, 0, 0, 0.35)"),line:T("line","rgba(255, 255, 255, 0.2)"),panelShadow:T("panel-shadow","0 6px 0 rgba(4, 6, 30, 0.55), inset 0 2px 0 rgba(255, 255, 255, 0.12)"),radius:T("radius","18px"),buttonRadius:T("button-radius","14px"),font:T("font","'Baloo 2', 'Nunito', 'Trebuchet MS', system-ui, sans-serif"),fast:T("fast","120ms")},Xt={green:[f.green,f.greenDeep,f.onGreen],blue:[f.blue,f.blueDeep,f.onBlue],gold:[f.gold,f.goldDeep,f.onGold],red:[f.red,f.redDeep,"#ffffff"]},L={color:f.text,fontWeight:800,textShadow:f.textOutline,letterSpacing:.2},De={boxSizing:"border-box",background:`linear-gradient(180deg, ${f.panel} 0%, ${f.panelDeep} 100%)`,border:`2px solid ${f.panelEdge}`,borderRadius:f.radius,boxShadow:f.panelShadow},ne={boxSizing:"border-box",background:f.well,border:`2px solid ${f.panelEdge}`,boxShadow:f.wellShadow,borderRadius:14};B={...L,fontSize:13,color:f.textDim},Co=["ru","kk","uk","be","ky","uz","tg"];Zt={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."},xo={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 lt(t){return Object.values(exports.idosChains).find(e=>e.id===t)}function an(t){return {...t,chainNamespace:"eip155",caipNetworkId:`eip155:${t.id}`}}exports.mainnet=void 0;exports.bsc=void 0;exports.polygon=void 0;exports.base=void 0;exports.arbitrum=void 0;exports.optimism=void 0;exports.sepolia=void 0;exports.polygonAmoy=void 0;exports.idosChains=void 0;exports.solanaMainnet=void 0;exports.solanaDevnet=void 0;var ce=C(()=>{exports.mainnet={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"}}},exports.bsc={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"}}},exports.polygon={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"}}},exports.base={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"}}},exports.arbitrum={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"}}},exports.optimism={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"}}},exports.sepolia={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"}}},exports.polygonAmoy={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"}}},exports.idosChains={mainnet:exports.mainnet,bsc:exports.bsc,polygon:exports.polygon,base:exports.base,arbitrum:exports.arbitrum,optimism:exports.optimism,sepolia:exports.sepolia,polygonAmoy:exports.polygonAmoy};exports.solanaMainnet={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"},exports.solanaDevnet={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"};});function Ke(t){sn=t;}function oe(){return sn}var sn,Pe=C(()=>{sn=null;});function Ge(t){let{chains:e=dt,walletConnectProjectId:n,appName:o,appUrl:r,appIcon:a,transports:s,connectors:l}=t,i=n??"__extension_only__";if(!l){let m=ct.get(i);if(m)return m}let d={};for(let m of e)d[m.id]=s?.[m.id]??wagmi.http();let c=r??(typeof window<"u"?window.location.origin:""),p={name:o??"iDosGames",description:o??"iDosGames game",url:c,icons:a?[a]:[]};if(n&&!l){let m=e.map(an),k=new appkitAdapterWagmi.WagmiAdapter({networks:m,projectId:n,transports:d});return Ke(react$1.createAppKit({adapters:[k],networks:m,projectId:n,metadata:p,features:{analytics:false,email:false,socials:false}})),ct.set(i,k.wagmiConfig),k.wagmiConfig}let u=l??[connectors.injected(),connectors.coinbaseWallet({appName:o??"iDosGames"})],b=wagmi.createConfig({chains:e,connectors:u,transports:d});return l||ct.set(i,b),b}var dt,ct,pt=C(()=>{ce();Pe();dt=[exports.mainnet,exports.bsc,exports.polygon,exports.base,exports.arbitrum,exports.optimism,exports.sepolia,exports.polygonAmoy],ct=new Map;});function xe(t){let{wagmiConfig:e,queryClient:n,children:o}=t,[r]=react.useState(()=>n??new reactQuery.QueryClient);return jsxRuntime.jsx(wagmi.WagmiProvider,{config:e,children:jsxRuntime.jsx(reactQuery.QueryClientProvider,{client:r,children:o})})}var ze=C(()=>{});var qe,cn,ut,dn,mt=C(()=>{qe=[{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:[]}],cn=[{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:[]}],ut=[{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"}]}],dn=[{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 pn(t,e,n){return viem.encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[t,e,core.normalizeBlockchainCategory(n)])}var un=C(()=>{});async function de(t,e){let{walletClient:n,publicClient:o,account:r}=t,a=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:a})).status==="reverted")throw new Error(`On-chain transaction reverted (${a}).`);return a}var ft=C(()=>{});function mn(t){let e=t.RewardPoolAddress;return e||null}async function fn(t,e,n,o){return await t.publicClient.readContract({address:e,abi:ut,functionName:"allowance",args:[t.account,n]})>=o?null:de(t,{address:e,abi:ut,functionName:"approve",args:[n,o]})}async function gt(t){let{client:e,clients:n,network:o,tokenAddress:r,amount:a,titleID:s,category:l}=t;if(E())return ee("approve");let i=e.auth.context?.userID;if(!i)return y("approve","Not logged in.");let d=mn(o);if(!d)return y("approve","Network has no RewardPoolAddress.");if(a<=0n)return y("approve","Amount must be positive.");try{await fn(n,r,d,a);}catch(u){return y("approve",O(u))}let c;try{c=await de(n,{address:d,abi:qe,functionName:"depositERC20",args:[r,a,i,s,l??""]});}catch(u){return y("deposit-onchain",O(u))}let p=await e.blockchain.depositToken(o.NetworkID??"",c);return p.ok?{ok:true,onChainTxHash:c,data:p.data}:y("report",p.error,{onChainTxHash:c})}async function yt(t){let{client:e,clients:n,network:o,nftContractAddress:r,tokenId:a,amount:s,titleID:l,category:i}=t;if(E())return ee("deposit-onchain");let d=e.auth.context?.userID;if(!d)return y("deposit-onchain","Not logged in.");let c=mn(o);if(!c)return y("deposit-onchain","Network has no RewardPoolAddress.");if(s<=0n)return y("deposit-onchain","Amount must be positive.");let p=pn(d,l,i),u;try{u=await de(n,{address:r,abi:dn,functionName:"safeTransferFrom",args:[n.account,c,a,s,p]});}catch(m){return y("deposit-onchain",O(m))}let b=await e.blockchain.depositNFT(o.NetworkID??"",u);return b.ok?{ok:true,onChainTxHash:u,data:b.data}:y("report",b.error,{onChainTxHash:u})}var gn=C(()=>{mt();un();ft();G();te();});function yn(t){return (t.Splits??[]).map(e=>({to:e.To,amount:BigInt(e.Amount??"0")}))}async function wn(t,e){return de(t,{address:e.ContractAddress,abi:qe,functionName:"withdrawERC20",args:[e.TokenAddress,e.WalletAddress,BigInt(e.Amount??"0"),BigInt(e.BurnAmount??"0"),yn(e),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function hn(t,e){return de(t,{address:e.ContractAddress,abi:cn,functionName:"withdrawERC1155Mint",args:[e.TokenAddress,e.WalletAddress,BigInt(e.TokenId??"0"),BigInt(e.Amount??"0"),yn(e),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function wt(t){let{client:e,clients:n,currencyID:o,networkID:r,walletAddress:a,amount:s,category:l}=t;if(E())return ee("request");let i=await e.blockchain.requestTokenWithdrawal(o,r,a,s,l);if(!i.ok)return y("request",i.error);let d=i.data.EvmSignature,c=i.data.TitleTransactionID??void 0;if(!d)return y("request","Withdrawal response carried no EVM signature.",{titleTransactionID:c});let p;try{p=await wn(n,d);}catch(b){return y("withdraw-onchain",O(b),{titleTransactionID:c})}let u=await bn(e,c,p);return u.ok?{ok:true,onChainTxHash:p,data:i.data}:u}async function ht(t){let{client:e,clients:n,itemID:o,networkID:r,walletAddress:a,amount:s,category:l}=t;if(E())return ee("request");let i=await e.blockchain.requestNFTWithdrawal(o,r,a,s,l);if(!i.ok)return y("request",i.error);let d=i.data.EvmSignature,c=i.data.TitleTransactionID??void 0;if(!d)return y("request","Withdrawal response carried no EVM signature.",{titleTransactionID:c});let p;try{p=await hn(n,d);}catch(b){return y("withdraw-onchain",O(b),{titleTransactionID:c})}let u=await bn(e,c,p);return u.ok?{ok:true,onChainTxHash:p,data:i.data}:u}async function bn(t,e,n){if(!e)return y("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let o=await t.blockchain.confirmWithdrawal(e,n);return o.ok?{ok:true,onChainTxHash:n,data:o.data}:y("confirm",o.error,{onChainTxHash:n,titleTransactionID:e})}var kn=C(()=>{mt();ft();G();te();});async function Re(t){let{client:e,clients:n,networkID:o}=t;if(E())return me("challenge");let r=t.walletAddress??n.account,a=await e.auth.requestWalletChallenge(r,o);if(!a.ok)return P("challenge",a.error);let s;try{s=await n.walletClient.signMessage({account:n.account,message:a.data.Message});}catch(i){return P("sign",O(i))}let l=await e.auth.loginWithWallet(r,o,s);return l.ok?{ok:true,data:l.data}:P("login",l.error)}async function bt(t){let{client:e,clients:n,networkID:o}=t;if(E())return me("challenge");let r=t.walletAddress??n.account,a=await e.auth.linkWallet(r,o);if(!a.ok)return P("challenge",a.error);if(!a.data.Challenge)return P("challenge","No challenge was issued.");let s;try{s=await n.walletClient.signMessage({account:n.account,message:a.data.Challenge});}catch(i){return P("sign",O(i))}let l=await e.auth.linkWallet(r,o,s);return l.ok?{ok:true,data:l.data}:P("login",l.error)}var Sn=C(()=>{G();te();});var kt=C(()=>{gn();kn();Sn();});function Be(){let{address:t}=wagmi.useAccount(),e=wagmi.usePublicClient(),{data:n}=wagmi.useWalletClient();return !t||!e||!n?null:{account:t,publicClient:e,walletClient:n}}function Ve(t,e){let n=Be();return {connected:!!n,account:n?.account??null,loginWithWallet:(o,r)=>n?Re({client:t,clients:n,networkID:o,walletAddress:r}):Promise.resolve(P("challenge",Le)),depositToken:o=>n?gt({client:t,clients:n,titleID:e,...o}):Promise.resolve(y("approve",Le)),depositNft:o=>n?yt({client:t,clients:n,titleID:e,...o}):Promise.resolve(y("deposit-onchain",Le)),withdrawToken:o=>n?wt({client:t,clients:n,...o}):Promise.resolve(y("withdraw-onchain",Le)),withdrawNft:o=>n?ht({client:t,clients:n,...o}):Promise.resolve(y("withdraw-onchain",Le))}}var Le,$e=C(()=>{kt();G();Le="Wallet not connected.";});function In(t){let{wagmiConfig:e,...n}=t;return jsxRuntime.jsx(xe,{wagmiConfig:e,children:jsxRuntime.jsx(Ct,{...n})})}function Qo(t){return t instanceof Error&&(t.name==="ConnectorAlreadyConnectedError"||t.message.includes("already connected"))}function Jo(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 xn(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 Zo(t,e=18e4){return actions.getAccount(t).isConnected?Promise.resolve(true):new Promise(n=>{let o=false,r=l=>{o||(o=true,a(),clearTimeout(s),n(l));},a=actions.watchAccount(t,{onChange:l=>{l.isConnected&&r(true);}}),s=setTimeout(()=>r(false),e);})}function Xo(t,e=8e3){let n=o=>o==="reconnecting"||o==="connecting";return n(actions.getAccount(t).status)?new Promise(o=>{let r=false,a=()=>{r||(r=true,s(),clearTimeout(l),o());},s=actions.watchAccount(t,{onChange:i=>{n(i.status)||a();}}),l=setTimeout(a,e);}):Promise.resolve()}function er(t){let e=r=>t.find(a=>a.id===r||a.type===r),n=e("injected"),o=typeof window<"u"&&window.ethereum!=null;return n&&o?n:e("walletConnect")??n??t[0]}async function tr(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 Wn(t,e){return new Promise((n,o)=>{let r=setTimeout(()=>o(new Error("The wallet request timed out.")),e);t.then(a=>{clearTimeout(r),n(a);},a=>{clearTimeout(r),o(a instanceof Error?a:new Error(String(a)));});})}function Ct(t){let{client:e,networkID:n,onAuthenticated:o,disabled:r,label:a,style:s,autoStart:l,mode:i="login",onLinked:d}=t,c=wagmi.useConfig(),{isConnected:p}=wagmi.useAccount(),{connectAsync:u,connectors:b}=wagmi.useConnect(),m=Be(),[k,g]=react.useState(false),[W,A]=react.useState(null),[_,J]=react.useState(false),$=react.useRef(0),Z=react.useRef(false),z=async()=>{let re=++$.current,M=()=>$.current===re;g(true),A(null);try{if(await Xo(c),!M())return;if(!actions.getAccount(c).isConnected){let v=oe();if(v){if(await v.open(),!await Zo(c)){A("No wallet was connected.");return}}else {let j=er(b);if(!j){A("No wallet connector is configured.");return}try{await u({connector:j});}catch(K){if(!Qo(K))throw K}}}let D=m??await xn(c);if(!D&&actions.getAccount(c).isConnected&&(await new Promise(v=>setTimeout(v,300)),D=await xn(c),!M()))return;if(!D){A("Wallet client is not available.");return}if(J(!0),i==="link"){let v=await Wn(bt({client:e,clients:D,networkID:n}),Tn);if(!M())return;if(v.ok){d?.(v.data.PlayAccess??null);return}A(v.stage==="sign"?"Signature declined.":core.authErrorText(v.error,"Could not link the wallet."));return}let U=await Wn(Re({client:e,clients:D,networkID:n}),Tn);if(!M())return;if(U.ok){o();return}A(U.stage==="sign"?"Signature declined.":core.authErrorText(U.error,"Wallet sign-in failed."));}catch(D){if(!M())return;console.error("[idosgames/wallet] wallet sign-in failed:",D),A(Jo(D));}finally{M()&&(g(false),J(false));}};react.useEffect(()=>{!l||Z.current||(Z.current=true,z());},[l]);let ae=async()=>{await tr(c)||await oe()?.open();};return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:()=>{_?ae():z();},disabled:r,style:{...nr,...r?{opacity:.6,cursor:"default"}:null,...s},children:_?"Waiting for signature \u2014 tap to open wallet":k?"Check your wallet\u2026":p?a??(i==="link"?"Link wallet":"Sign in with wallet"):"Connect wallet"}),W&&jsxRuntime.jsx("span",{role:"alert",style:or,children:W})]})}var Tn,nr,or,vn=C(()=>{Pe();kt();ze();$e();Tn=9e4;nr={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},or={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};});function pr(t,e){let n=Math.max(0,Math.floor(e||0)),[o="0",r=""]=t.split(".");if(r.length<=n)return t;let a=r.slice(0,n),s=BigInt(o+a)+(/^0*$/.test(r.slice(n))?BigInt(0):BigInt(1));if(n===0)return s.toString();let l=s.toString().padStart(n+1,"0");return `${l.slice(0,-n)}.${l.slice(-n)}`.replace(/\.?0+$/,"")}function Tt(t,e=6){let n=Number(t);return Number.isFinite(n)?n.toLocaleString("en-US",{maximumFractionDigits:Math.max(0,e)}).replace(/,/g," "):String(t)}function Ye({client:t,engine:e,onClose:n,style:o,topUp:r}){let[,a]=react.useReducer(S=>S+1,0),[s,l]=react.useState(false),[i,d]=react.useState({}),[c,p]=react.useState({}),[u,b]=react.useState("deposit"),[m,k]=react.useState(""),[g,W]=react.useState(""),[A,_]=react.useState(""),[J,$]=react.useState(false),[Z,z]=react.useState(null),[ae,re]=react.useState(false);react.useEffect(()=>{let S=true;return (async()=>{let[R]=await Promise.all([t.blockchain.getDefinitions(),t.cache.ensureState(["InventoryV2","Blockchain"])]);if(!S||(l(true),!R.ok))return;let N={};for(let[Y,ie]of Object.entries(R.data.Blockchain?.Networks??{}))ie.Type===e.networkType&&(N[Y]=ie);d(N);let ue=R.data.CryptoCurrencies??{};p(ue);let ve=r?ue[r.currencyID]?.Networks?.find(Y=>!!Y.NetworkID&&!!N[Y.NetworkID]&&!!Y.ContractAddress&&Y.DepositsEnabled!==false&&N[Y.NetworkID]?.DepositsEnabled!==false)?.NetworkID:null;k(ve??Object.keys(N)[0]??"");})(),()=>{S=false;}},[t,e.networkType]),react.useEffect(()=>t.on("user:anyUpdated",a),[t]);let M=react.useMemo(()=>Object.entries(c).filter(([,S])=>S.Networks?.some(R=>R.NetworkID===m&&!!R.ContractAddress)),[c,m]);react.useEffect(()=>{let S=M[0]?.[0]??"";W(R=>r?r.currencyID:M.some(([N])=>N===R)?R:S);},[M,r]);let D=m?i[m]:void 0,U=g?c[g]:void 0,v=U?.Networks?.find(S=>S.NetworkID===m),j=g?t.data.user.getCryptoCurrencyAmount(g):"0",K=U?.DisplayName??g,X=g?U?.UnbackedRewardCurrencyID||`${g}_IOU`:"",co=X&&Number(t.data.user.state?.InventoryV2?.VirtualCurrencies?.[X]?.Amount??0)||0,po=!!X&&t.data.user.state?.InventoryV2?.VirtualCurrencies?.[X]!=null,Gt=U?.DisplayDecimals??6,Ue=!!e.address,zt=!!r&&!!v?.ContractAddress&&g===r.currencyID,nt=r&&v?pr(r.amount,v.Decimals??18):"",ot=r?c[r.currencyID]?.DisplayName??r.currencyID:"",qt=Number(v?.MinWithdraw??0);async function rt(S,R){$(true),z(null);try{let N=await R();return z({tab:S,res:N}),N.ok&&_(""),N}finally{$(false);}}async function Vt(S){let R=await $t();if(!R)return y("approve",h("noNetworks"));let N=await e.deposit({...S,network:R});if(N.ok||N.stage!=="report"||!N.onChainTxHash)return N;let ue=N.onChainTxHash,ve=N.error;re(true);try{for(let Y=1;Y<=cr&&lr.test(ve);Y++){await new Promise(wo=>setTimeout(wo,dr));let ie=await t.blockchain.depositToken(m,ue);if(ie.ok)return {ok:!0,onChainTxHash:ue,data:ie.data};if(/^Transaction hash already used/.test(ie.error))return await t.cache.ensureState(["InventoryV2"],{force:!0}),{ok:!0,onChainTxHash:ue,data:null};ve=ie.error;}}finally{re(false);}return {...N,error:ve}}async function $t(){let S=await t.blockchain.getDefinitions({forceRefresh:true});return S.ok?S.data.Blockchain?.Networks?.[m]??null:null}async function uo(){let S=await $t();return S?e.withdraw({network:S,networkID:m,currencyID:g,amount:A}):y("request",h("noNetworks"))}let at=ae?h("confirming"):u==="withdraw"&&!r?h("withdrawing"):h("depositing"),mo=Ue?jsxRuntime.jsxs("div",{style:{...ne,display:"flex",alignItems:"center",gap:10,padding:"8px 8px 8px 12px"},children:[jsxRuntime.jsx("span",{style:fr,"aria-hidden":true}),jsxRuntime.jsxs("div",{style:{display:"grid",flex:1,minWidth:0},children:[jsxRuntime.jsx("span",{style:{...L,fontSize:15,fontFamily:"ui-monospace, Consolas, monospace"},children:Nn(e.address)}),D?jsxRuntime.jsx("span",{style:{...B,fontSize:12},children:D.DisplayName??m}):null]}),jsxRuntime.jsx("button",{type:"button",className:"idos-press",style:gr,onClick:e.disconnect,children:h("disconnect")})]}):jsxRuntime.jsxs("div",{style:{display:"grid",gap:8},children:[jsxRuntime.jsx("span",{style:B,children:h("connectHint")}),e.connectChoices.length===0?jsxRuntime.jsx("div",{style:{...ne,padding:"10px 12px",...B},children:h("notConfigured")}):e.connectChoices.length===1?jsxRuntime.jsx("button",{type:"button",className:"idos-press",style:{...se("blue",false,"lg"),width:"100%"},onClick:e.connectChoices[0].connect,children:h("connect")}):e.connectChoices.map(S=>jsxRuntime.jsxs("button",{type:"button",className:"idos-press",style:yr,onClick:S.connect,children:[jsxRuntime.jsx("span",{style:{flex:1,textAlign:"left"},children:S.label}),jsxRuntime.jsx("span",{"aria-hidden":true,style:{color:f.textDim},children:"\u203A"})]},S.key))]}),jt=g?jsxRuntime.jsx(kr,{icon:jsxRuntime.jsx(br,{assets:U?.AssetPaths,name:K}),name:K,backed:Number(j)||0,unbacked:co,hasIou:po,decimals:Gt}):null,fo=jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[Object.keys(i).length>1?jsxRuntime.jsx(Dn,{caption:h("network"),value:m,onChange:k,options:Object.entries(i).map(([S,R])=>[S,R.DisplayName??S])}):null,M.length===0?jsxRuntime.jsx("div",{style:{...ne,padding:"10px 12px",...B},children:h("noTokens")}):M.length>1?jsxRuntime.jsx(Dn,{caption:h("token"),value:g,onChange:W,options:M.map(([S,R])=>[S,R.DisplayName??S])}):null]}),go=jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(Sr,{value:u,onChange:S=>{b(S),z(null),_("");}}),fo,jsxRuntime.jsxs("div",{style:{display:"grid",gap:6},children:[jsxRuntime.jsx("span",{style:B,children:h("amount")}),jsxRuntime.jsxs("div",{style:{...ne,display:"flex",alignItems:"center",gap:8,padding:"4px 6px 4px 14px"},children:[jsxRuntime.jsx("input",{style:hr,inputMode:"decimal",placeholder:"0.0",value:A,onChange:S=>_(S.target.value.replace(",","."))}),jsxRuntime.jsx("span",{style:{...B,fontSize:14},children:K}),u==="withdraw"&&Number(j)>0?jsxRuntime.jsx("button",{type:"button",className:"idos-press",style:se("gold",false,"sm"),onClick:()=>_(String(j)),children:h("max")}):null]}),u==="withdraw"&&qt>0?jsxRuntime.jsx("span",{style:{...B,fontSize:12},children:h("minWithdraw",{n:Tt(qt,Gt)})}):null]}),u==="deposit"?jsxRuntime.jsx(xt,{tone:"green",busy:J,busyText:at,disabled:!Ue||!v?.ContractAddress||!En(A),onClick:()=>{!D||!v||rt("deposit",()=>Vt({network:D,binding:v,currencyID:g,amount:A}));},children:h("deposit")}):jsxRuntime.jsx(xt,{tone:"blue",busy:J,busyText:at,disabled:!Ue||!g||!En(A),onClick:()=>{D&&rt("withdraw",()=>uo());},children:h("withdraw")})]}),yo=r?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{style:{...en("gold"),padding:"12px 14px",display:"grid",gap:4},children:zt?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("span",{style:{...L,color:"inherit",fontSize:13,opacity:.9},children:h("topUpNeed")}),jsxRuntime.jsxs("span",{style:{...L,color:"inherit",fontSize:24,lineHeight:1.1},children:[nt," ",ot," ",h("topUpMore")]}),jsxRuntime.jsx("span",{style:{fontSize:13,fontWeight:600,opacity:.95},children:h("topUpHint")})]}):jsxRuntime.jsx("span",{style:{...L,color:"inherit",fontSize:15},children:s?h("topUpCannot",{name:ot}):h("loading")})}),jt,jsxRuntime.jsx(xt,{tone:"green",busy:J,busyText:at,disabled:!Ue||!zt,onClick:()=>{!D||!v||rt("deposit",()=>Vt({network:D,binding:v,currencyID:g,amount:nt})).then(S=>{S.ok&&r.onDone(true);});},children:h("depositAmount",{amount:nt,name:ot})})]}):null,Yt=!!n;return jsxRuntime.jsxs("div",{style:{...mr,...Yt?{...De,padding:16,width:360,maxWidth:"100%",maxHeight:"80vh",overflow:"auto"}:{},...o},children:[jsxRuntime.jsx("style",{children:ur}),Yt?jsxRuntime.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[jsxRuntime.jsx("span",{style:{...L,fontSize:20},children:r?h("topUpTitle"):h("title")}),jsxRuntime.jsx("button",{type:"button",className:"idos-press",style:wr,onClick:n,"aria-label":"\u2715",children:"\u2715"})]}):null,mo,s?Object.keys(i).length===0?jsxRuntime.jsx("div",{style:{...ne,padding:"12px 14px",...B},children:h("noNetworks")}):r?yo:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jt,go]}):jsxRuntime.jsx("div",{style:{...B,textAlign:"center",padding:12},children:h("loading")}),Z?jsxRuntime.jsx(Cr,{tab:Z.tab,result:Z.res}):null]})}function br({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, ${f.gold}, ${f.goldDeep})`,boxShadow:`0 3px 0 ${f.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,...L,fontSize:20},"aria-hidden":true,children:(e.trim()[0]??"?").toUpperCase()})}function kr({icon:t,name:e,backed:n,unbacked:o,hasIou:r,decimals:a}){let[s,l]=react.useState(false),i=(d,c,p=false)=>jsxRuntime.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:16},children:[jsxRuntime.jsx("span",{style:{...B,fontSize:13},children:d}),jsxRuntime.jsx("span",{style:{...L,fontSize:14,color:p?f.textDim:f.text},children:Tt(c,a)})]});return jsxRuntime.jsxs("div",{style:{position:"relative"},onMouseEnter:()=>l(true),onMouseLeave:()=>l(false),children:[jsxRuntime.jsxs("button",{type:"button","aria-expanded":s,onClick:()=>l(d=>!d),onBlur:()=>l(false),style:{...ne,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:{...B,fontSize:12},children:h("balance")}),jsxRuntime.jsxs("span",{style:{...L,fontSize:22,lineHeight:1.1},children:[Tt(n+o,a)," ",jsxRuntime.jsx("span",{style:{fontSize:15,color:f.textDim},children:e})]})]}),jsxRuntime.jsx("span",{"aria-hidden":true,style:{...B,fontSize:16},children:"\u24D8"})]}),s?jsxRuntime.jsxs("div",{role:"tooltip",style:{...De,position:"absolute",left:0,right:0,top:"calc(100% + 6px)",zIndex:5,padding:"10px 12px",display:"grid",gap:6},children:[i(h("backed"),n),r?i(h("unbacked"),o,o===0):null,jsxRuntime.jsx("div",{style:{height:1,background:f.line}}),i(h("total"),n+o),jsxRuntime.jsx("span",{style:{fontSize:12,color:f.textDim,lineHeight:1.35},children:r?h("iouHint"):h("backedHint")})]}):null]})}function Sr({value:t,onChange:e}){let n=[["deposit",h("deposit")],["withdraw",h("withdraw")]];return jsxRuntime.jsx("div",{role:"tablist",style:{display:"flex",gap:6,padding:4,borderRadius:16,background:f.wellSoft},children:n.map(([o,r])=>{let a=o===t;return jsxRuntime.jsx("button",{role:"tab","aria-selected":a,type:"button",className:"idos-press",onClick:()=>!a&&e(o),style:{...L,fontFamily:f.font,fontSize:15,flex:1,border:"none",borderRadius:12,padding:"9px 14px",cursor:"pointer",color:a?f.onBlue:f.textDim,background:a?`linear-gradient(180deg, ${f.blue}, ${f.blueDeep})`:"transparent",boxShadow:a?`0 3px 0 ${f.edge}, inset 0 2px 0 rgba(255,255,255,.3)`:"none",transition:`background ${f.fast} ease`},children:r},o)})})}function Dn({caption:t,value:e,onChange:n,options:o}){return jsxRuntime.jsxs("label",{style:{display:"grid",gap:6},children:[jsxRuntime.jsx("span",{style:B,children:t}),jsxRuntime.jsxs("span",{style:{position:"relative",display:"block"},children:[jsxRuntime.jsx("select",{value:e,onChange:r=>n(r.target.value),style:{...ne,...L,fontFamily:f.font,fontSize:15,width:"100%",padding:"10px 36px 10px 12px",appearance:"none",WebkitAppearance:"none",cursor:"pointer",outline:"none"},children:o.map(([r,a])=>jsxRuntime.jsx("option",{value:r,style:{color:"#111"},children:a},r))}),jsxRuntime.jsx("span",{"aria-hidden":true,style:{position:"absolute",right:14,top:"50%",transform:"translateY(-50%)",color:f.textDim,pointerEvents:"none"},children:"\u25BE"})]})]})}function xt({tone:t,busy:e,busyText:n,disabled:o,onClick:r,children:a}){return jsxRuntime.jsx("button",{type:"button",className:"idos-press",disabled:o||e,onClick:r,style:{...se(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]}):a})}function Cr({tab:t,result:e}){let n=e.ok,o={borderRadius:14,padding:"10px 12px",display:"grid",gap:4,background:`color-mix(in srgb, ${n?f.green:f.red} 22%, transparent)`,border:`2px solid color-mix(in srgb, ${n?f.green:f.red} 60%, transparent)`,wordBreak:"break-word"};return n?jsxRuntime.jsxs("div",{style:o,role:"status",children:[jsxRuntime.jsxs("span",{style:{...L,fontSize:15},children:["\u2713 ",t==="withdraw"?h("doneWithdraw"):h("doneDeposit")]}),jsxRuntime.jsxs("span",{style:{...B,fontSize:12},children:[h("tx"),": ",Nn(e.onChainTxHash)]})]}):jsxRuntime.jsxs("div",{style:o,role:"alert",children:[jsxRuntime.jsxs("span",{style:{...L,fontSize:15},children:["\u2715 ",h("failed")]}),jsxRuntime.jsx("span",{style:{fontSize:13,color:f.text,opacity:.9},children:e.error}),e.titleTransactionID?jsxRuntime.jsx("span",{style:{...B,fontSize:12},children:h("debited")}):null]})}var lr,cr,dr,Nn,En,ur,mr,fr,gr,yr,wr,hr,Wt=C(()=>{G();it();lr=/^(Not enough confirmations|Transaction not found on chain)/,cr=8,dr=5e3;Nn=t=>t.length>14?`${t.slice(0,6)}\u2026${t.slice(-4)}`:t,En=t=>/^\d+(\.\d+)?$/.test(t)&&Number(t)>0;ur="@keyframes idosw-spin { to { transform: rotate(360deg) } }",mr={pointerEvents:"auto",color:f.text,fontFamily:f.font,display:"flex",flexDirection:"column",gap:12,boxSizing:"border-box",width:"100%",minWidth:0,maxWidth:"100%"},fr={width:10,height:10,borderRadius:"50%",background:f.green,boxShadow:`0 0 0 3px color-mix(in srgb, ${f.green} 30%, transparent)`,flex:"none"},gr={...L,fontFamily:f.font,fontSize:13,color:f.textDim,background:"transparent",border:`2px solid ${f.line}`,borderRadius:10,padding:"5px 10px",cursor:"pointer"},yr={...ne,...L,fontFamily:f.font,fontSize:15,display:"flex",alignItems:"center",gap:10,padding:"10px 12px",cursor:"pointer",width:"100%"},wr={...se("red",false,"sm"),width:36,minHeight:36,padding:0,borderRadius:"50%"},hr={...L,fontFamily:f.font,fontSize:22,flex:1,minWidth:0,background:"transparent",border:"none",outline:"none",padding:"6px 0"};});function Rn(t){let{client:e,walletConnectProjectId:n,appName:o,onClose:r,style:a,topUp:s}=t,[l,i]=react.useState(n??"");react.useEffect(()=>{if(n)return;let c=true;return (async()=>{let p=await e.blockchain.getDefinitions();if(!c||!p.ok)return;let u=p.data.Blockchain?.WalletLogin?.WalletConnectProjectId;u&&i(u);})(),()=>{c=false;}},[e,n]);let d=react.useMemo(()=>Ge({walletConnectProjectId:l||void 0,appName:o}),[l,o]);return jsxRuntime.jsx(xe,{wagmiConfig:d,children:jsxRuntime.jsx(Dr,{client:e,onClose:r,style:a,topUp:s})})}function Dr({client:t,onClose:e,style:n,topUp:o}){let r=Ve(t,t.titleID),{address:a,isConnected:s,chainId:l}=wagmi.useAccount(),{connect:i,connectors:d}=wagmi.useConnect(),{disconnect:c}=wagmi.useDisconnect(),{switchChainAsync:p}=wagmi.useSwitchChain();async function u(m){if(!m||l===m)return true;try{return await p({chainId:m}),!0}catch{return false}}let b={networkType:"EVM",address:s&&a?a:null,connectChoices:d.map(m=>({key:m.uid,label:m.name,connect:()=>i({connector:m})})),disconnect:()=>c(),deposit:async({network:m,binding:k,amount:g})=>{if(!k.ContractAddress)return y("approve","This token cannot be deposited.");if(!await u(m.ChainID))return y("approve",`Switch your wallet to chain ${m.ChainID} to continue.`);let W;try{W=viem.parseUnits(g,k.Decimals??18);}catch{return y("approve","Invalid amount.")}return r.depositToken({network:m,tokenAddress:k.ContractAddress,amount:W})},withdraw:async({network:m,networkID:k,currencyID:g,amount:W})=>r.account?await u(m.ChainID)?r.withdrawToken({currencyID:g,networkID:k,walletAddress:r.account,amount:W}):y("request",`Switch your wallet to chain ${m.ChainID} to continue.`):y("request","Wallet not connected.")};return jsxRuntime.jsx(Ye,{client:t,engine:b,onClose:e,style:n,topUp:o})}var Ln=C(()=>{pt();ze();$e();G();Wt();});function It(t){let[e,n]=react.useState(null);return react.useEffect(()=>{if(E()||Ee())return;let o=null;return t.checkout.setTopUpHandler(r=>new Promise(a=>{o?.(false);let s=false,l=i=>{s||(s=true,o===l&&(o=null),n(d=>d?.onDone===l?null:d),a(i));};o=l,n({currencyID:r.currencyID,amount:r.missingAmount??String(r.missing),onDone:l});})),()=>{t.checkout.setTopUpHandler(null),o?.(false);}},[t]),e}var vt=C(()=>{te();});var Et={};Qt(Et,{DEFAULT_EVM_CHAINS:()=>dt,IDosGamesWalletProvider:()=>xe,WalletLogin:()=>In,WalletLoginButton:()=>Ct,WalletPanel:()=>Rn,arbitrum:()=>exports.arbitrum,base:()=>exports.base,bsc:()=>exports.bsc,chainById:()=>lt,createEvmWalletConfig:()=>Ge,idosChains:()=>exports.idosChains,mainnet:()=>exports.mainnet,optimism:()=>exports.optimism,polygon:()=>exports.polygon,polygonAmoy:()=>exports.polygonAmoy,sepolia:()=>exports.sepolia,useEvmBridge:()=>Ve,useEvmBridgeClients:()=>Be,useWalletTopUp:()=>It});var Dt=C(()=>{pt();ce();ze();$e();vn();Ln();vt();});function Qe(t){let{walletConnectProjectId:e,appName:n,appUrl:o,appIcon:r,wallets:a}=t,s=Bn.get(e);if(s)return s;let l=t.networks??[exports.solanaMainnet],i=o??(typeof window<"u"?window.location.origin:""),d={name:n??"iDosGames",description:n??"iDosGames game",url:i,icons:r?[r]:[]},c=new appkitAdapterSolana.SolanaAdapter(a?{wallets:a}:{});return Ke(react$1.createAppKit({adapters:[c],networks:l,projectId:e,metadata:d,features:{analytics:false,email:false,socials:false}})),Bn.set(e,c),c}var Bn,Nt=C(()=>{ce();Pe();Bn=new Map;});async function _e(t){let{client:e,adapter:n,network:o,mint:r,amountRaw:a,titleID:s,category:l}=t;if(E())return ee("deposit-onchain");let i=e.auth.context?.userID;if(!i)return y("deposit-onchain","Not logged in.");if(a<=0n)return y("deposit-onchain","Amount must be positive.");let d;try{d=await n.depositSpl({mint:r,amountRaw:a,userID:i,titleID:s,category:core.normalizeBlockchainCategory(l)});}catch(p){return y("deposit-onchain",O(p))}let c=await e.blockchain.depositToken(o.NetworkID??"",d);return c.ok?{ok:true,onChainTxHash:d,data:c.data}:y("report",c.error,{onChainTxHash:d})}async function Me(t){let{client:e,adapter:n,currencyID:o,networkID:r,walletAddress:a,amount:s,category:l}=t;if(E())return ee("request");let i=await e.blockchain.requestTokenWithdrawal(o,r,a,s,l);if(!i.ok)return y("request",i.error);let d=i.data.SolanaSignature,c=i.data.TitleTransactionID??void 0;if(!d)return y("request","Withdrawal response carried no Solana signature.",{titleTransactionID:c});let p;try{p=await n.submitWithdrawal(d);}catch(b){return y("withdraw-onchain",O(b),{titleTransactionID:c})}if(!c)return y("confirm","Missing TitleTransactionID.",{onChainTxHash:p});let u=await e.blockchain.confirmWithdrawal(c,p);return u.ok?{ok:true,onChainTxHash:p,data:i.data}:y("confirm",u.error,{onChainTxHash:p,titleTransactionID:c})}var On=C(()=>{G();te();});async function Fe(t){let{client:e,networkID:n,walletAddress:o,signMessage:r}=t;if(E())return me("challenge");let a=await e.auth.requestWalletChallenge(o,n);if(!a.ok)return P("challenge",a.error);let s;try{let i=await r(new TextEncoder().encode(a.data.Message));s=_n(i);}catch(i){return P("sign",O(i))}let l=await e.auth.loginWithWallet(o,n,s);return l.ok?{ok:true,data:l.data}:P("login",l.error)}async function Rt(t){let{client:e,networkID:n,walletAddress:o,signMessage:r}=t;if(E())return me("challenge");let a=await e.auth.linkWallet(o,n);if(!a.ok)return P("challenge",a.error);if(!a.data.Challenge)return P("challenge","No challenge was issued.");let s;try{let i=await r(new TextEncoder().encode(a.data.Challenge));s=_n(i);}catch(i){return P("sign",O(i))}let l=await e.auth.linkWallet(o,n,s);return l.ok?{ok:true,data:l.data}:P("login",l.error)}function _n(t){let e="0x";for(let n of t)e+=n.toString(16).padStart(2,"0");return e}var Mn=C(()=>{G();te();});var Je=C(()=>{On();Mn();});function Un(t,e,n){let{address:o}=react$1.useAppKitAccount(),{walletProvider:r}=react$1.useAppKitProvider("solana"),a=o??null,s=r?.signMessage?.bind(r);return {connected:!!a,account:a,loginWithWallet:(l,i)=>{let d=i??a;return d?s?Fe({client:t,networkID:l,walletAddress:d,signMessage:s}):Promise.resolve(P("sign","The connected wallet does not support message signing.")):Promise.resolve(P("challenge",Fn))},depositToken:l=>_e({client:t,adapter:n,titleID:e,...l}),withdrawToken:l=>{let i=l.walletAddress??a;return i?Me({client:t,adapter:n,...l,walletAddress:i}):Promise.resolve(y("request",Fn))}}}var Fn,Hn=C(()=>{Je();G();Fn="Wallet not connected.";});function Kr(t){try{let n=t?.session?.peer?.metadata?.redirect,o=n?.native||n?.universal;return !o||typeof window>"u"?!1:(window.location.href=o,!0)}catch{return false}}function zn(t,e){return new Promise((n,o)=>{let r=setTimeout(()=>o(new Error("The wallet request timed out.")),e);t.then(a=>{clearTimeout(r),n(a);},a=>{clearTimeout(r),o(a instanceof Error?a:new Error(String(a)));});})}function Gr(t){let e="Wallet sign-in failed. Please try again.";return t instanceof Error?/user (rejected|denied|cancelled|canceled)|rejected the request/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}function Vn(t){let{client:e,networkID:n,onAuthenticated:o,disabled:r,label:a,style:s,autoStart:l,mode:i="login",onLinked:d}=t,{address:c,isConnected:p}=react$1.useAppKitAccount(),{walletProvider:u}=react$1.useAppKitProvider("solana"),[b,m]=react.useState(false),[k,g]=react.useState(null),[W,A]=react.useState(false),[_,J]=react.useState(false),$=react.useRef(null),Z=react.useRef(0),z=react.useCallback(()=>{$.current&&clearTimeout($.current),$.current=null;},[]);react.useEffect(()=>z,[z]);let ae=react.useRef(false),re=react.useCallback(async()=>{let U=++Z.current,v=()=>Z.current===U,j=u?.signMessage?.bind(u);if(!c||!j){g("The connected wallet cannot sign messages."),m(false);return}m(true),g(null);try{if(J(!0),i==="link"){let X=await zn(Rt({client:e,networkID:n,walletAddress:c,signMessage:j}),Gn);if(!v())return;if(X.ok){d?.(X.data.PlayAccess??null);return}g(X.stage==="sign"?"Signature declined.":core.authErrorText(X.error,"Could not link the wallet."));return}let K=await zn(Fe({client:e,networkID:n,walletAddress:c,signMessage:j}),Gn);if(!v())return;if(K.ok){o();return}g(K.stage==="sign"?"Signature declined.":core.authErrorText(K.error,"Wallet sign-in failed."));}catch(K){if(!v())return;console.error("[idosgames/wallet] solana sign-in failed:",K),g(Gr(K));}finally{v()&&(m(false),J(false));}},[c,u,e,n,o,i,d]),M=react.useCallback(()=>{Kr(u)||oe()?.open();},[u]);react.useEffect(()=>{!W||!p||!c||!u||(A(false),z(),re());},[W,p,c,u,re,z]);let D=()=>{if(_){M();return}if(g(null),ae.current=true,p&&c&&u){re();return}let U=oe();if(!U){g("Wallet sign-in is not configured for this title.");return}m(true),A(true),z(),$.current=setTimeout(()=>{A(false),m(false),g("No wallet was connected.");},Hr),U.open();};return react.useEffect(()=>{!l||ae.current||(ae.current=true,D());},[l]),jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:D,disabled:r,style:{...zr,...r?{opacity:.6,cursor:"default"}:null,...s},children:_?"Waiting for signature \u2014 tap to open wallet":b?"Check your wallet\u2026":p?a??(i==="link"?"Link wallet":"Sign in with wallet"):"Connect wallet"}),k&&jsxRuntime.jsx("span",{role:"alert",style:qr,children:k})]})}var Hr,Gn,zr,qr,$n=C(()=>{Je();Pe();Hr=18e4,Gn=9e4;zr={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},qr={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};});function Xe(t){let e=(t??"").replace(/^0x/i,""),n=new Uint8Array(e.length>>1);for(let o=0;o<n.length;o++)n[o]=parseInt(e.slice(o*2,o*2+2),16);return n}function We(t){let e=buffer.Buffer.alloc(8);return e.writeBigUInt64LE(BigInt(t||0)),e}function ra(t){let e=buffer.Buffer.alloc(8);return e.writeBigInt64LE(BigInt(t||0)),e}function Ie(t){let e=buffer.Buffer.from(t??"","utf8"),n=buffer.Buffer.alloc(4);return n.writeUInt32LE(e.length),buffer.Buffer.concat([n,e])}async function Yn(t){let e=await globalThis.crypto.subtle.digest("SHA-256",new TextEncoder().encode(t??""));return new Uint8Array(e)}function Xn(t,e,n){return pe(t,buffer.Buffer.from("title_balance"),buffer.Buffer.from(e),n.toBuffer())}function aa(t){return buffer.Buffer.concat([buffer.Buffer.from(Zr,"hex"),We(t.amountRaw),Ie(t.userID),Ie(t.titleID),Ie(t.category),buffer.Buffer.from(t.titleHash)])}function ia(t,e){let n=t.Splits??[],o=buffer.Buffer.alloc(4);return o.writeUInt32LE(n.length),buffer.Buffer.concat([buffer.Buffer.from(t.Domain==="SPL_DEV"?ea:Xr,"hex"),We(t.Amount),We(t.BurnAmount),We(t.Nonce),ra(t.ExpiresAt),o,...n.map(r=>buffer.Buffer.concat([buffer.Buffer.from(new web3_js.PublicKey(r.To??"").toBytes()),We(r.Amount)])),Ie(t.UserID),Ie(t.TitleID),Ie(t.Category),buffer.Buffer.from(e)])}function Ae(t,e,n){return web3_js.PublicKey.findProgramAddressSync([e.toBuffer(),n.toBuffer(),t.toBuffer()],et)[0]}function sa(t,e,n,o,r){return new web3_js.TransactionInstruction({programId:et,keys:[{pubkey:t,isSigner:true,isWritable:true},{pubkey:e,isSigner:false,isWritable:true},{pubkey:n,isSigner:false,isWritable:false},{pubkey:o,isSigner:false,isWritable:false},{pubkey:web3_js.SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:r,isSigner:false,isWritable:false}],data:buffer.Buffer.from([1])})}function pe(t,...e){return web3_js.PublicKey.findProgramAddressSync(e,t)[0]}function la(t){let{programId:e,user:n,mint:o,tokenProgram:r}=t,a=pe(e,buffer.Buffer.from("vault"));return new web3_js.TransactionInstruction({programId:e,keys:[{pubkey:pe(e,buffer.Buffer.from("config")),isSigner:false,isWritable:false},{pubkey:a,isSigner:false,isWritable:true},{pubkey:o,isSigner:false,isWritable:false},{pubkey:n,isSigner:true,isWritable:true},{pubkey:Ae(o,n,r),isSigner:false,isWritable:true},{pubkey:Ae(o,a,r),isSigner:false,isWritable:true},{pubkey:r,isSigner:false,isWritable:false},{pubkey:et,isSigner:false,isWritable:false},{pubkey:web3_js.SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:Xn(e,t.titleHash,o),isSigner:false,isWritable:true}],data:aa(t)})}function ca(t){let{sig:e,payer:n,tokenProgram:o,titleHash:r}=t,a=new web3_js.PublicKey(e.ProgramID??""),s=new web3_js.PublicKey(e.Mint??""),l=new web3_js.PublicKey(e.WalletAddress??""),i=pe(a,buffer.Buffer.from("vault")),d=new web3_js.PublicKey(ta),c=(e.Splits??[]).map(k=>new web3_js.PublicKey(k.To??"")),p=c.map(k=>Ae(s,k,o)),u=web3_js.Ed25519Program.createInstructionWithPublicKey({publicKey:Xe(e.Ed25519PublicKey),message:Xe(e.Ed25519Message),signature:Xe(e.SignatureHex)}),b=c.map((k,g)=>sa(n,p[g],k,s,o)),m=new web3_js.TransactionInstruction({programId:a,keys:[{pubkey:pe(a,buffer.Buffer.from("config")),isSigner:false,isWritable:false},{pubkey:n,isSigner:true,isWritable:true},{pubkey:i,isSigner:false,isWritable:true},{pubkey:pe(a,buffer.Buffer.from("nonce"),We(e.Nonce)),isSigner:false,isWritable:true},{pubkey:s,isSigner:false,isWritable:false},{pubkey:l,isSigner:false,isWritable:false},{pubkey:Ae(s,i,o),isSigner:false,isWritable:true},{pubkey:Ae(s,l,o),isSigner:false,isWritable:true},{pubkey:d,isSigner:false,isWritable:false},{pubkey:Ae(s,d,o),isSigner:false,isWritable:true},{pubkey:web3_js.SYSVAR_INSTRUCTIONS_PUBKEY,isSigner:false,isWritable:false},{pubkey:o,isSigner:false,isWritable:false},{pubkey:et,isSigner:false,isWritable:false},{pubkey:web3_js.SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:Xn(a,r,s),isSigner:false,isWritable:true},...p.map(k=>({pubkey:k,isSigner:false,isWritable:true}))],data:ia(e,r)});return [u,...b,m]}async function da(t,e,n){let o=async a=>{let s=(await t.getSignatureStatuses([e],{searchTransactionHistory:a})).value[0];if(s?.err)throw new H("TRANSACTION_FAILED",`transaction ${e} failed: ${JSON.stringify(s.err)}`);return s},r=a=>a?.confirmationStatus==="confirmed"||a?.confirmationStatus==="finalized";for(let a=1;;a++){await new Promise(i=>setTimeout(i,pa));let s=null;try{s=await o(!1);}catch(i){if(i instanceof H)throw i}if(r(s))return;if(!(s||a%ua!==0||await t.getBlockHeight("confirmed").catch(()=>-1)<=n)){if(r(await o(true).catch(()=>null)))return;throw new H("TRANSACTION_EXPIRED",`transaction ${e} expired: block height exceeded`)}}}function tt(t){let{connection:e,signTransaction:n}=t;async function o(a){let s=await e.getAccountInfo(a);if(!s)throw new H("MINT_NOT_FOUND",`mint ${a.toBase58()} not found`);return s.owner}async function r(a,s){let{blockhash:l,lastValidBlockHeight:i}=await e.getLatestBlockhash("confirmed"),d=new web3_js.Transaction;d.feePayer=a,d.recentBlockhash=l,d.add(...s);let c=await n(d),p=await e.sendRawTransaction(c.serialize());return await da(e,p,i),p}return {async depositSpl({mint:a,amountRaw:s,userID:l,titleID:i,category:d}){let c=new web3_js.PublicKey(t.owner),p=new web3_js.PublicKey(a),u=await o(p);return r(c,[la({programId:new web3_js.PublicKey(t.programId),user:c,mint:p,tokenProgram:u,amountRaw:s,userID:l,titleID:i,category:d,titleHash:await Yn(i)})])},async submitWithdrawal(a){if(!a.ProgramID||!a.Mint||!a.WalletAddress)throw new H("BAD_VOUCHER","the voucher has no program, mint or wallet");let s=new web3_js.PublicKey(t.owner),l=new web3_js.PublicKey(a.ProgramID),i=await e.getAccountInfo(pe(l,buffer.Buffer.from("config")));if(!i)throw new H("POOL_NOT_ON_THIS_CLUSTER","the pool's config account is not on this cluster");if(i.data.length!==jn)throw new H("POOL_NOT_MIGRATED",`config is ${i.data.length} bytes, expected ${jn} (migrate_config not run)`);let d=buffer.Buffer.from(i.data);if(d[oa]===1)throw new H("POOL_PAUSED","pool withdrawals are paused");let c=d.readBigUInt64LE(Zn);if(c!==BigInt(a.SignatureEpoch||0))throw new H("VOUCHER_REVOKED",`signature epoch mismatch: voucher ${a.SignatureEpoch}, on-chain ${c}`);let p=buffer.Buffer.from(Xe(a.Ed25519PublicKey)),u=false;for(let m=0;m<Jn;m++){let k=Qn+m*32;p.equals(d.subarray(k,k+32))&&(u=true);}if(!u)throw new H("SIGNER_NOT_TRUSTED","the voucher's signer is not in the pool's server_pubkeys");let b=await o(new web3_js.PublicKey(a.Mint));return r(s,[web3_js.ComputeBudgetProgram.setComputeUnitLimit({units:na}),...ca({sig:a,payer:s,tokenProgram:b,titleHash:await Yn(a.TitleID??"")})])}}}var Zr,Xr,ea,et,ta,jn,na,Qn,Jn,Zn,oa,H,pa,ua,Ft=C(()=>{Zr="e000c6afc62f69cc",Xr="b59a5e563e7306ba",ea="d668e18c1bdc33f1",et=new web3_js.PublicKey("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"),ta="1nc1nerator11111111111111111111111111111111",jn=177,na=3e5,Qn=40,Jn=4,Zn=Qn+32*Jn,oa=Zn+8,H=class extends Error{constructor(n,o){super(o);this.code=n;this.name="PlatformPoolError";}code};pa=2e3,ua=5;});function Sa(t){return (t.ChainID===ka?exports.solanaDevnet:exports.solanaMainnet).rpcUrls.default.http[0]}function eo(t){let{client:e,walletConnectProjectId:n,appName:o,onClose:r,style:a,topUp:s}=t,[l,i]=react.useState(n??"");react.useEffect(()=>{if(n)return;let g=true;return (async()=>{let W=await e.blockchain.getDefinitions();if(!g||!W.ok)return;let A=W.data.Blockchain?.WalletLogin?.WalletConnectProjectId;A&&i(A);})(),()=>{g=false;}},[e,n]);let d=react.useMemo(()=>l?(Qe({walletConnectProjectId:l,appName:o}),true):false,[l,o]),{address:c,isConnected:p}=react$1.useAppKitAccount(),{walletProvider:u}=react$1.useAppKitProvider("solana"),b=p&&c?c:null,m=(g,W)=>tt({connection:new web3_js.Connection(Sa(g),"confirmed"),owner:W,programId:g.RewardPoolAddress??"",signTransaction:async A=>{if(!u)throw new Error("Wallet not connected.");return u.signTransaction(A)}});return jsxRuntime.jsx(Ye,{client:e,engine:{networkType:"Solana",address:b,connectChoices:d?[{key:"appkit",label:"Connect wallet",connect:()=>{oe()?.open();}}]:[],disconnect:()=>{oe()?.disconnect("solana");},deposit:async({network:g,binding:W,amount:A})=>{if(!b)return y("deposit-onchain","Wallet not connected.");if(!W.ContractAddress)return y("deposit-onchain","This token cannot be deposited.");if(!g.RewardPoolAddress)return y("deposit-onchain","POOL_NOT_IN_REGISTRY");let _;try{_=viem.parseUnits(A,W.Decimals??9);}catch{return y("deposit-onchain","Invalid amount.")}return _e({client:e,adapter:m(g,b),network:g,mint:W.ContractAddress,amountRaw:_,titleID:e.titleID})},withdraw:async({network:g,networkID:W,currencyID:A,amount:_})=>b?Me({client:e,adapter:m(g,b),currencyID:A,networkID:W,walletAddress:b,amount:_}):y("request","Wallet not connected.")},onClose:r,style:a,topUp:s})}var ka,to=C(()=>{ce();Je();Ft();G();Pe();Nt();Wt();ka=103;});var Ut={};Qt(Ut,{PlatformPoolError:()=>H,SolanaWalletLogin:()=>Vn,SolanaWalletPanel:()=>eo,createPlatformPoolAdapter:()=>tt,createSolanaWalletConfig:()=>Qe,solanaDevnet:()=>exports.solanaDevnet,solanaMainnet:()=>exports.solanaMainnet,useSolanaBridge:()=>Un});var Ht=C(()=>{Nt();Hn();$n();to();Ft();ce();});te();it();G();var fe={addressRequest:"IDOS_PLATFORM_WALLET_ADDRESS_REQUEST",addressResponse:"IDOS_PLATFORM_WALLET_ADDRESS_RESPONSE",signRequest:"IDOS_PLATFORM_WALLET_SIGN_REQUEST",signResponse:"IDOS_PLATFORM_WALLET_SIGN_RESPONSE",openRequest:"IDOS_PLATFORM_WALLET_OPEN_REQUEST",openResponse:"IDOS_PLATFORM_WALLET_OPEN_RESPONSE"},tn=core.PLATFORM_PAGE_UNAVAILABLE;async function st(t,e,n){let o=await core.askPlatformPage(t,e,n),{address:r,signature:a}=o.data;return {ok:o.ok,error:o.error,address:typeof r=="string"?r:void 0,signature:typeof a=="string"?a:void 0}}async function Io(){return (await st(fe.openRequest,fe.openResponse,{})).ok}async function nn(t){let{client:e,networkID:n}=t;return rn(t,async o=>{let r=await e.auth.requestWalletChallenge(o,n);return r.ok?{ok:true,message:r.data.Message}:{ok:false,error:r.error}},(o,r)=>e.auth.loginWithWallet(o,n,r))}async function on(t){let{client:e,networkID:n}=t;return rn(t,async o=>{let r=await e.auth.linkWallet(o,n);return r.ok?r.data.Challenge?{ok:true,message:r.data.Challenge}:{ok:false,error:"No challenge was issued."}:{ok:false,error:r.error}},(o,r)=>e.auth.linkWallet(o,n,r))}async function rn(t,e,n){let{client:o,family:r}=t,a=o.titleID,s=await st(fe.addressRequest,fe.addressResponse,{titleID:a,family:r});if(!s.ok||!s.address)return P("challenge",s.error??"NO_WALLET");let l=s.address,i=await e(l);if(!i.ok)return P("challenge",i.error);let d=await st(fe.signRequest,fe.signResponse,{titleID:a,family:r,address:l,message:i.message});if(!d.ok||!d.signature)return P("sign",d.error??"SIGN_FAILED");let c=await n(l,d.signature);return c.ok?{ok:true,data:c.data}:P("login",c.error)}var oo={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},ro={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};function no(t){switch(t){case tn:return "Wallet sign-in is not available on this page.";case "NO_WALLET":case "CANCELLED":return "Connect a wallet on the page to sign in.";case "REJECTED":return "The signature was declined.";case "TIMEOUT":return "The wallet did not answer. Please try again.";default:return t}}function xa(t){let{client:e,networkID:n,onAuthenticated:o,onLinked:r,mode:a="login",family:s,disabled:l,label:i,style:d}=t,[c,p]=react.useState(false),[u,b]=react.useState(null);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:()=>{p(true),b(null),(async()=>{if(a==="link"){let g=await on({client:e,networkID:n,family:s});if(g.ok){p(false),r?.(g.data.PlayAccess??null);return}b(no(g.error)),p(false);return}let k=await nn({client:e,networkID:n,family:s});if(k.ok){o?.();return}b(no(k.error)),p(false);})();},disabled:l||c,style:{...oo,...l||c?{opacity:.6,cursor:"default"}:null,...d},children:c?"Waiting for the wallet\u2026":i??(a==="link"?"Link wallet":"Sign in with wallet")}),u&&jsxRuntime.jsx("span",{role:"alert",style:ro,children:u})]})}function ao(t,e){return Ee()?null:jsxRuntime.jsx(xa,{...t,family:e})}function io(t){let{loading:e,disabled:n,label:o,style:r,error:a,onClick:s}=t;return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:s,disabled:n||e,style:{...oo,...n||e?{opacity:.6,cursor:"default"}:null,...r},children:e?"Loading wallet\u2026":o??"Sign in with wallet"}),a&&jsxRuntime.jsx("span",{role:"alert",style:ro,children:a})]})}function Ta(t){let{chains:e,walletConnectProjectId:n,appName:o,disabled:r,label:a,style:s,onAuthenticated:l,...i}=t,[d,c]=react.useState(null),[p,u]=react.useState(false),[b,m]=react.useState(null);if(E())return ao(t,"evm");let k=()=>{u(true),m(null),(async()=>{try{let g=await Promise.resolve().then(()=>(Dt(),Et)),W=g.createEvmWalletConfig({chains:e,walletConnectProjectId:n,appName:o});c({mod:g,config:W});}catch(g){console.error("[idosgames/wallet] failed to load the wallet module:",g),m("Could not load the wallet. Please try again.");}finally{u(false);}})();};if(d){let{WalletLogin:g}=d.mod;return jsxRuntime.jsx(g,{...i,onAuthenticated:l??so,wagmiConfig:d.config,disabled:r,label:a,style:s,autoStart:true})}return jsxRuntime.jsx(io,{loading:p,disabled:r,label:a??(t.mode==="link"?"Link wallet":void 0),style:s,error:b,onClick:k})}function so(){}function Wa(t){let{walletConnectProjectId:e,appName:n,disabled:o,label:r,style:a,onAuthenticated:s,...l}=t,[i,d]=react.useState(null),[c,p]=react.useState(false),[u,b]=react.useState(null);if(E())return ao(t,"solana");let m=()=>{p(true),b(null),(async()=>{try{let k=await Promise.resolve().then(()=>(Ht(),Ut));e&&k.createSolanaWalletConfig({walletConnectProjectId:e,appName:n}),d(k);}catch(k){console.error("[idosgames/wallet] failed to load the wallet module:",k),b("Could not load the wallet. Please try again.");}finally{p(false);}})();};if(i){let{SolanaWalletLogin:k}=i;return jsxRuntime.jsx(k,{...l,onAuthenticated:s??so,disabled:o,label:r,style:a,autoStart:true})}return jsxRuntime.jsx(io,{loading:c,disabled:o,label:r??(t.mode==="link"?"Link wallet":void 0),style:a,error:u,onClick:m})}var Aa={...B,pointerEvents:"auto",padding:16,boxSizing:"border-box",display:"flex",alignItems:"center",justifyContent:"space-between",gap:10,fontSize:15};function Ia(t){let{client:e,onClose:n,style:o}=t,r=E(),[a,s]=react.useState(null),[l,i]=react.useState(null);return react.useEffect(()=>{if(r)return;let d=true;return (async()=>{try{let c=await e.blockchain.getDefinitions(),p=Object.values((c.ok?c.data.Blockchain?.Networks:null)??{}).map(m=>m.Type),b=p.includes("Solana")&&!p.includes("EVM")?{kind:"solana",mod:await Promise.resolve().then(()=>(Ht(),Ut))}:{kind:"evm",mod:await Promise.resolve().then(()=>(Dt(),Et))};d&&s(b);}catch(c){console.error("[idosgames/wallet] failed to load the wallet panel:",c),d&&i("Could not load the wallet.");}})(),()=>{d=false;}},[r,e]),r?null:a?.kind==="evm"?jsxRuntime.jsx(a.mod.WalletPanel,{...t}):a?.kind==="solana"?jsxRuntime.jsx(a.mod.SolanaWalletPanel,{...t}):jsxRuntime.jsxs("div",{style:{...Aa,...n?{...De,width:360,maxWidth:"100%"}:{},...o},children:[l??h("loading"),n&&jsxRuntime.jsx("button",{type:"button",className:"idos-press",onClick:n,"aria-label":"\u2715",style:{...se("red",false,"sm"),width:36,minHeight:36,padding:0,borderRadius:"50%"},children:"\u2715"})]})}te();vt();ce();
2
- exports.LazySolanaWalletLogin=Wa;exports.LazyWalletLogin=Ta;exports.LazyWalletPanel=Ia;exports.chainById=lt;exports.isEmbeddedInPlatform=E;exports.isEmbeddedOnForeignSite=Ee;exports.openPlatformWalletPanel=Io;exports.useWalletTopUp=It;
1
+ 'use strict';var viem=require('viem'),core=require('@idosgames/core'),wagmi=require('wagmi'),connectors=require('wagmi/connectors'),appkitAdapterWagmi=require('@reown/appkit-adapter-wagmi'),react$1=require('@reown/appkit/react'),reactQuery=require('@tanstack/react-query'),react=require('react'),jsxRuntime=require('react/jsx-runtime'),actions=require('wagmi/actions'),appkitAdapterSolana=require('@reown/appkit-adapter-solana'),buffer=require('buffer'),web3_js=require('@solana/web3.js');var ko=Object.defineProperty;var P=(t,e)=>()=>(t&&(e=t(t=0)),e);var Qt=(t,e)=>{for(var n in e)ko(t,n,{get:e[n],enumerable:true});};function _(t){return t instanceof viem.BaseError?t.shortMessage:t instanceof Error?t.message:String(t)}function g(t,e,n){return {ok:false,stage:t,error:e,...n}}function T(t,e){return {ok:false,stage:t,error:e}}var z=P(()=>{});function Po(t=typeof window>"u"?"":window.location.hostname){let e=t.toLowerCase();return So.test(e)?true:e!=="localhost"&&e!=="127.0.0.1"?false:globalThis.__IDOS_PREVIEW__!=null}function E(){if(typeof window>"u"||Po())return false;try{return window.self!==window.top}catch{return true}}function Ee(){if(typeof window>"u")return false;try{return window.parent!==window.top}catch{return true}}function ee(t){return g(t,Jt)}function me(t){return T(t,Jt)}var Jt,So,te=P(()=>{z();Jt="WALLET_USE_SITE_PANEL",So=/^[a-z0-9]{8}-preview\.idos\.games$/;});function se(t,e=false,n="md"){let[o,r,a]=e?["#8e95b8","#5b6187","#ffffff"]:Xt[t];return {...B,color:a,boxSizing:"border-box",fontFamily:m.font,fontSize:n==="sm"?13:n==="lg"?18:16,border:"none",borderRadius:m.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 ${m.edge}, inset 0 2px 0 rgba(255,255,255,.35)`,opacity:e?.75:1,display:"inline-flex",alignItems:"center",justifyContent:"center",gap:8}}function en(t){let[e,n,o]=Xt[t];return {background:`linear-gradient(180deg, ${e} 0%, ${n} 100%)`,color:o,borderRadius:16,boxShadow:`0 4px 0 ${m.edge}, inset 0 2px 0 rgba(255,255,255,.3)`}}function xo(){if(typeof navigator>"u")return false;let t=(navigator.language||"").toLowerCase();return To.some(e=>t.startsWith(e))}function k(t,e){let n=(xo()?Wo:Zt)[t]??Zt[t];for(let[o,r]of Object.entries(e??{}))n=n.replace(`{${o}}`,String(r));return n}var W,m,Xt,B,De,ne,O,To,Zt,Wo,lt=P(()=>{W=(t,e)=>`var(--idos-ui-${t}, ${e})`,m={panel:W("panel","#2c3480"),panelDeep:W("panel-deep","#1d2360"),panelEdge:W("panel-edge","#4f5bc9"),text:W("text","#ffffff"),textDim:W("text-dim","#aeb6f0"),gold:W("gold","#ffd24a"),goldDeep:W("gold-deep","#e89a12"),green:W("green","#59d35b"),greenDeep:W("green-deep","#2b9936"),blue:W("blue","#4fb1ff"),blueDeep:W("blue-deep","#2276d6"),red:W("red","#ff5a5a"),redDeep:W("red-deep","#b83232"),onGreen:W("on-green","#ffffff"),onBlue:W("on-blue","#ffffff"),onGold:W("on-gold","#ffffff"),textOutline:W("text-outline","0 2px 0 rgba(0,0,0,.45), 0 0 1px rgba(0,0,0,.6)"),well:W("well","rgba(8, 10, 40, 0.6)"),wellSoft:W("well-soft","rgba(0, 0, 0, 0.3)"),wellShadow:W("well-shadow","inset 0 2px 4px rgba(0, 0, 0, 0.4)"),edge:W("edge","rgba(0, 0, 0, 0.35)"),line:W("line","rgba(255, 255, 255, 0.2)"),panelShadow:W("panel-shadow","0 6px 0 rgba(4, 6, 30, 0.55), inset 0 2px 0 rgba(255, 255, 255, 0.12)"),radius:W("radius","18px"),buttonRadius:W("button-radius","14px"),font:W("font","'Baloo 2', 'Nunito', 'Trebuchet MS', system-ui, sans-serif"),fast:W("fast","120ms")},Xt={green:[m.green,m.greenDeep,m.onGreen],blue:[m.blue,m.blueDeep,m.onBlue],gold:[m.gold,m.goldDeep,m.onGold],red:[m.red,m.redDeep,"#ffffff"]},B={color:m.text,fontWeight:800,textShadow:m.textOutline,letterSpacing:.2},De={boxSizing:"border-box",background:`linear-gradient(180deg, ${m.panel} 0%, ${m.panelDeep} 100%)`,border:`2px solid ${m.panelEdge}`,borderRadius:m.radius,boxShadow:m.panelShadow},ne={boxSizing:"border-box",background:m.well,border:`2px solid ${m.panelEdge}`,boxShadow:m.wellShadow,borderRadius:14};O={...B,fontSize:13,color:m.textDim},To=["ru","kk","uk","be","ky","uz","tg"];Zt={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."},Wo={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 dt(t){return Object.values(exports.idosChains).find(e=>e.id===t)}function an(t){return {...t,chainNamespace:"eip155",caipNetworkId:`eip155:${t.id}`}}exports.mainnet=void 0;exports.bsc=void 0;exports.polygon=void 0;exports.base=void 0;exports.arbitrum=void 0;exports.optimism=void 0;exports.sepolia=void 0;exports.polygonAmoy=void 0;exports.idosChains=void 0;exports.solanaMainnet=void 0;exports.solanaDevnet=void 0;var ce=P(()=>{exports.mainnet={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"}}},exports.bsc={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"}}},exports.polygon={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"}}},exports.base={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"}}},exports.arbitrum={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"}}},exports.optimism={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"}}},exports.sepolia={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"}}},exports.polygonAmoy={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"}}},exports.idosChains={mainnet:exports.mainnet,bsc:exports.bsc,polygon:exports.polygon,base:exports.base,arbitrum:exports.arbitrum,optimism:exports.optimism,sepolia:exports.sepolia,polygonAmoy:exports.polygonAmoy};exports.solanaMainnet={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"},exports.solanaDevnet={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"};});function Ge(t){sn=t;}function oe(){return sn}var sn,Pe=P(()=>{sn=null;});function ze(t){let{chains:e=ut,walletConnectProjectId:n,appName:o,appUrl:r,appIcon:a,transports:s,connectors:l}=t,i=n??"__extension_only__";if(!l){let h=pt.get(i);if(h)return h}let d={};for(let h of e)d[h.id]=s?.[h.id]??wagmi.http();let c=r??(typeof window<"u"?window.location.origin:""),p={name:o??"iDosGames",description:o??"iDosGames game",url:c,icons:a?[a]:[]};if(n&&!l){let h=e.map(an),w=new appkitAdapterWagmi.WagmiAdapter({networks:h,projectId:n,transports:d});return Ge(react$1.createAppKit({adapters:[w],networks:h,projectId:n,metadata:p,features:{analytics:false,email:false,socials:false}})),pt.set(i,w.wagmiConfig),w.wagmiConfig}let u=l??[connectors.injected(),connectors.coinbaseWallet({appName:o??"iDosGames"})],b=wagmi.createConfig({chains:e,connectors:u,transports:d});return l||pt.set(i,b),b}var ut,pt,mt=P(()=>{ce();Pe();ut=[exports.mainnet,exports.bsc,exports.polygon,exports.base,exports.arbitrum,exports.optimism,exports.sepolia,exports.polygonAmoy],pt=new Map;});function Te(t){let{wagmiConfig:e,queryClient:n,children:o}=t,[r]=react.useState(()=>n??new reactQuery.QueryClient);return jsxRuntime.jsx(wagmi.WagmiProvider,{config:e,children:jsxRuntime.jsx(reactQuery.QueryClientProvider,{client:r,children:o})})}var qe=P(()=>{});var $e,cn,Re,dn,Ve=P(()=>{$e=[{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:[]}],cn=[{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:[]}],Re=[{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"}]}],dn=[{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 pn(t,e,n){return viem.encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[t,e,core.normalizeBlockchainCategory(n)])}var un=P(()=>{});async function de(t,e){let{walletClient:n,publicClient:o,account:r}=t,a=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:a})).status==="reverted")throw new Error(`On-chain transaction reverted (${a}).`);return a}var ft=P(()=>{});function mn(t){let e=t.RewardPoolAddress;return e||null}async function fn(t,e,n,o){return await t.publicClient.readContract({address:e,abi:Re,functionName:"allowance",args:[t.account,n]})>=o?null:de(t,{address:e,abi:Re,functionName:"approve",args:[n,o]})}async function gt(t){let{client:e,clients:n,network:o,tokenAddress:r,amount:a,titleID:s,category:l}=t;if(E())return ee("approve");let i=e.auth.context?.userID;if(!i)return g("approve","Not logged in.");let d=mn(o);if(!d)return g("approve","Network has no RewardPoolAddress.");if(a<=0n)return g("approve","Amount must be positive.");try{await fn(n,r,d,a);}catch(u){return g("approve",_(u))}let c;try{c=await de(n,{address:d,abi:$e,functionName:"depositERC20",args:[r,a,i,s,l??""]});}catch(u){return g("deposit-onchain",_(u))}let p=await e.blockchain.depositToken(o.NetworkID??"",c);return p.ok?{ok:true,onChainTxHash:c,data:p.data}:g("report",p.error,{onChainTxHash:c})}async function yt(t){let{client:e,clients:n,network:o,nftContractAddress:r,tokenId:a,amount:s,titleID:l,category:i}=t;if(E())return ee("deposit-onchain");let d=e.auth.context?.userID;if(!d)return g("deposit-onchain","Not logged in.");let c=mn(o);if(!c)return g("deposit-onchain","Network has no RewardPoolAddress.");if(s<=0n)return g("deposit-onchain","Amount must be positive.");let p=pn(d,l,i),u;try{u=await de(n,{address:r,abi:dn,functionName:"safeTransferFrom",args:[n.account,c,a,s,p]});}catch(h){return g("deposit-onchain",_(h))}let b=await e.blockchain.depositNFT(o.NetworkID??"",u);return b.ok?{ok:true,onChainTxHash:u,data:b.data}:g("report",b.error,{onChainTxHash:u})}var gn=P(()=>{Ve();un();ft();z();te();});function yn(t){return (t.Splits??[]).map(e=>({to:e.To,amount:BigInt(e.Amount??"0")}))}async function wn(t,e){return de(t,{address:e.ContractAddress,abi:$e,functionName:"withdrawERC20",args:[e.TokenAddress,e.WalletAddress,BigInt(e.Amount??"0"),BigInt(e.BurnAmount??"0"),yn(e),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function hn(t,e){return de(t,{address:e.ContractAddress,abi:cn,functionName:"withdrawERC1155Mint",args:[e.TokenAddress,e.WalletAddress,BigInt(e.TokenId??"0"),BigInt(e.Amount??"0"),yn(e),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function wt(t){let{client:e,clients:n,currencyID:o,networkID:r,walletAddress:a,amount:s,category:l}=t;if(E())return ee("request");let i=await e.blockchain.requestTokenWithdrawal(o,r,a,s,l);if(!i.ok)return g("request",i.error);let d=i.data.EvmSignature,c=i.data.TitleTransactionID??void 0;if(!d)return g("request","Withdrawal response carried no EVM signature.",{titleTransactionID:c});let p;try{p=await wn(n,d);}catch(b){return g("withdraw-onchain",_(b),{titleTransactionID:c})}let u=await bn(e,c,p);return u.ok?{ok:true,onChainTxHash:p,data:i.data}:u}async function ht(t){let{client:e,clients:n,itemID:o,networkID:r,walletAddress:a,amount:s,category:l}=t;if(E())return ee("request");let i=await e.blockchain.requestNFTWithdrawal(o,r,a,s,l);if(!i.ok)return g("request",i.error);let d=i.data.EvmSignature,c=i.data.TitleTransactionID??void 0;if(!d)return g("request","Withdrawal response carried no EVM signature.",{titleTransactionID:c});let p;try{p=await hn(n,d);}catch(b){return g("withdraw-onchain",_(b),{titleTransactionID:c})}let u=await bn(e,c,p);return u.ok?{ok:true,onChainTxHash:p,data:i.data}:u}async function bn(t,e,n){if(!e)return g("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let o=await t.blockchain.confirmWithdrawal(e,n);return o.ok?{ok:true,onChainTxHash:n,data:o.data}:g("confirm",o.error,{onChainTxHash:n,titleTransactionID:e})}var kn=P(()=>{Ve();ft();z();te();});async function Le(t){let{client:e,clients:n,networkID:o}=t;if(E())return me("challenge");let r=t.walletAddress??n.account,a=await e.auth.requestWalletChallenge(r,o);if(!a.ok)return T("challenge",a.error);let s;try{s=await n.walletClient.signMessage({account:n.account,message:a.data.Message});}catch(i){return T("sign",_(i))}let l=await e.auth.loginWithWallet(r,o,s);return l.ok?{ok:true,data:l.data}:T("login",l.error)}async function bt(t){let{client:e,clients:n,networkID:o}=t;if(E())return me("challenge");let r=t.walletAddress??n.account,a=await e.auth.linkWallet(r,o);if(!a.ok)return T("challenge",a.error);if(!a.data.Challenge)return T("challenge","No challenge was issued.");let s;try{s=await n.walletClient.signMessage({account:n.account,message:a.data.Challenge});}catch(i){return T("sign",_(i))}let l=await e.auth.linkWallet(r,o,s);return l.ok?{ok:true,data:l.data}:T("login",l.error)}var Cn=P(()=>{z();te();});var kt=P(()=>{gn();kn();Cn();});function Oe(){let{address:t}=wagmi.useAccount(),e=wagmi.usePublicClient(),{data:n}=wagmi.useWalletClient();return !t||!e||!n?null:{account:t,publicClient:e,walletClient:n}}function je(t,e){let n=Oe();return {connected:!!n,account:n?.account??null,loginWithWallet:(o,r)=>n?Le({client:t,clients:n,networkID:o,walletAddress:r}):Promise.resolve(T("challenge",Be)),depositToken:o=>n?gt({client:t,clients:n,titleID:e,...o}):Promise.resolve(g("approve",Be)),depositNft:o=>n?yt({client:t,clients:n,titleID:e,...o}):Promise.resolve(g("deposit-onchain",Be)),withdrawToken:o=>n?wt({client:t,clients:n,...o}):Promise.resolve(g("withdraw-onchain",Be)),withdrawNft:o=>n?ht({client:t,clients:n,...o}):Promise.resolve(g("withdraw-onchain",Be))}}var Be,Ye=P(()=>{kt();z();Be="Wallet not connected.";});function In(t){let{wagmiConfig:e,...n}=t;return jsxRuntime.jsx(Te,{wagmiConfig:e,children:jsxRuntime.jsx(St,{...n})})}function Zo(t){return t instanceof Error&&(t.name==="ConnectorAlreadyConnectedError"||t.message.includes("already connected"))}function Xo(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 Tn(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 er(t,e=18e4){return actions.getAccount(t).isConnected?Promise.resolve(true):new Promise(n=>{let o=false,r=l=>{o||(o=true,a(),clearTimeout(s),n(l));},a=actions.watchAccount(t,{onChange:l=>{l.isConnected&&r(true);}}),s=setTimeout(()=>r(false),e);})}function tr(t,e=8e3){let n=o=>o==="reconnecting"||o==="connecting";return n(actions.getAccount(t).status)?new Promise(o=>{let r=false,a=()=>{r||(r=true,s(),clearTimeout(l),o());},s=actions.watchAccount(t,{onChange:i=>{n(i.status)||a();}}),l=setTimeout(a,e);}):Promise.resolve()}function nr(t){let e=r=>t.find(a=>a.id===r||a.type===r),n=e("injected"),o=typeof window<"u"&&window.ethereum!=null;return n&&o?n:e("walletConnect")??n??t[0]}async function or(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 Wn(t,e){return new Promise((n,o)=>{let r=setTimeout(()=>o(new Error("The wallet request timed out.")),e);t.then(a=>{clearTimeout(r),n(a);},a=>{clearTimeout(r),o(a instanceof Error?a:new Error(String(a)));});})}function St(t){let{client:e,networkID:n,onAuthenticated:o,disabled:r,label:a,style:s,autoStart:l,mode:i="login",onLinked:d}=t,c=wagmi.useConfig(),{isConnected:p}=wagmi.useAccount(),{connectAsync:u,connectors:b}=wagmi.useConnect(),h=Oe(),[w,f]=react.useState(false),[A,S]=react.useState(null),[R,M]=react.useState(false),V=react.useRef(0),Z=react.useRef(false),q=async()=>{let re=++V.current,F=()=>V.current===re;f(true),S(null);try{if(await tr(c),!F())return;if(!actions.getAccount(c).isConnected){let v=oe();if(v){if(await v.open(),!await er(c)){S("No wallet was connected.");return}}else {let Y=nr(b);if(!Y){S("No wallet connector is configured.");return}try{await u({connector:Y});}catch(G){if(!Zo(G))throw G}}}let D=h??await Tn(c);if(!D&&actions.getAccount(c).isConnected&&(await new Promise(v=>setTimeout(v,300)),D=await Tn(c),!F()))return;if(!D){S("Wallet client is not available.");return}if(M(!0),i==="link"){let v=await Wn(bt({client:e,clients:D,networkID:n}),xn);if(!F())return;if(v.ok){d?.(v.data.PlayAccess??null);return}S(v.stage==="sign"?"Signature declined.":core.authErrorText(v.error,"Could not link the wallet."));return}let H=await Wn(Le({client:e,clients:D,networkID:n}),xn);if(!F())return;if(H.ok){o();return}S(H.stage==="sign"?"Signature declined.":core.authErrorText(H.error,"Wallet sign-in failed."));}catch(D){if(!F())return;console.error("[idosgames/wallet] wallet sign-in failed:",D),S(Xo(D));}finally{F()&&(f(false),M(false));}};react.useEffect(()=>{!l||Z.current||(Z.current=true,q());},[l]);let ae=async()=>{await or(c)||await oe()?.open();};return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:()=>{R?ae():q();},disabled:r,style:{...rr,...r?{opacity:.6,cursor:"default"}:null,...s},children:R?"Waiting for signature \u2014 tap to open wallet":w?"Check your wallet\u2026":p?a??(i==="link"?"Link wallet":"Sign in with wallet"):"Connect wallet"}),A&&jsxRuntime.jsx("span",{role:"alert",style:ar,children:A})]})}var xn,rr,ar,vn=P(()=>{Pe();kt();qe();Ye();xn=9e4;rr={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},ar={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};});function mr(t,e){let n=Math.max(0,Math.floor(e||0)),[o="0",r=""]=t.split(".");if(r.length<=n)return t;let a=r.slice(0,n),s=BigInt(o+a)+(/^0*$/.test(r.slice(n))?BigInt(0):BigInt(1));if(n===0)return s.toString();let l=s.toString().padStart(n+1,"0");return `${l.slice(0,-n)}.${l.slice(-n)}`.replace(/\.?0+$/,"")}function xt(t,e=6){let n=Number(t);return Number.isFinite(n)?n.toLocaleString("en-US",{maximumFractionDigits:Math.max(0,e)}).replace(/,/g," "):String(t)}function Je({client:t,engine:e,onClose:n,style:o,topUp:r}){let[,a]=react.useReducer(C=>C+1,0),[s,l]=react.useState(false),[i,d]=react.useState({}),[c,p]=react.useState({}),[u,b]=react.useState("deposit"),[h,w]=react.useState(""),[f,A]=react.useState(""),[S,R]=react.useState(""),[M,V]=react.useState(false),[Z,q]=react.useState(null),[ae,re]=react.useState(false);react.useEffect(()=>{let C=true;return (async()=>{let[L]=await Promise.all([t.blockchain.getDefinitions(),t.cache.ensureState(["InventoryV2","Blockchain"])]);if(!C||(l(true),!L.ok))return;let N={};for(let[Q,ie]of Object.entries(L.data.Blockchain?.Networks??{}))ie.Type===e.networkType&&(N[Q]=ie);d(N);let ue=L.data.CryptoCurrencies??{};p(ue);let ve=r?ue[r.currencyID]?.Networks?.find(Q=>!!Q.NetworkID&&!!N[Q.NetworkID]&&!!Q.ContractAddress&&Q.DepositsEnabled!==false&&N[Q.NetworkID]?.DepositsEnabled!==false)?.NetworkID:null;w(ve??Object.keys(N)[0]??"");})(),()=>{C=false;}},[t,e.networkType]),react.useEffect(()=>t.on("user:anyUpdated",a),[t]);let F=react.useMemo(()=>Object.entries(c).filter(([,C])=>C.Networks?.some(L=>L.NetworkID===h&&!!L.ContractAddress)),[c,h]);react.useEffect(()=>{let C=F[0]?.[0]??"";A(L=>r?r.currencyID:F.some(([N])=>N===L)?L:C);},[F,r]);let D=h?i[h]:void 0,H=f?c[f]:void 0,v=H?.Networks?.find(C=>C.NetworkID===h),Y=f?t.data.user.getCryptoCurrencyAmount(f):"0",G=H?.DisplayName??f,X=f?H?.UnbackedRewardCurrencyID||`${f}_IOU`:"",uo=X&&Number(t.data.user.state?.InventoryV2?.VirtualCurrencies?.[X]?.Amount??0)||0,mo=!!X&&t.data.user.state?.InventoryV2?.VirtualCurrencies?.[X]!=null,Gt=H?.DisplayDecimals??6,He=!!e.address,zt=!!r&&!!v?.ContractAddress&&f===r.currencyID,rt=r&&v?mr(r.amount,v.Decimals??18):"",at=r?c[r.currencyID]?.DisplayName??r.currencyID:"",qt=Number(v?.MinWithdraw??0);async function it(C,L){V(true),q(null);try{let N=await L();return q({tab:C,res:N}),N.ok&&R(""),N}finally{V(false);}}async function $t(C){let L=await Vt();if(!L)return g("approve",k("noNetworks"));let N=await e.deposit({...C,network:L});if(N.ok||N.stage!=="report"||!N.onChainTxHash)return N;let ue=N.onChainTxHash,ve=N.error;re(true);try{for(let Q=1;Q<=pr&&dr.test(ve);Q++){await new Promise(bo=>setTimeout(bo,ur));let ie=await t.blockchain.depositToken(h,ue);if(ie.ok)return {ok:!0,onChainTxHash:ue,data:ie.data};if(/^Transaction hash already used/.test(ie.error))return await t.cache.ensureState(["InventoryV2"],{force:!0}),{ok:!0,onChainTxHash:ue,data:null};ve=ie.error;}}finally{re(false);}return {...N,error:ve}}async function Vt(){let C=await t.blockchain.getDefinitions({forceRefresh:true});return C.ok?C.data.Blockchain?.Networks?.[h]??null:null}async function fo(){let C=await Vt();return C?e.withdraw({network:C,networkID:h,currencyID:f,amount:S}):g("request",k("noNetworks"))}let st=ae?k("confirming"):u==="withdraw"&&!r?k("withdrawing"):k("depositing"),go=He?jsxRuntime.jsxs("div",{style:{...ne,display:"flex",alignItems:"center",gap:10,padding:"8px 8px 8px 12px"},children:[jsxRuntime.jsx("span",{style:yr,"aria-hidden":true}),jsxRuntime.jsxs("div",{style:{display:"grid",flex:1,minWidth:0},children:[jsxRuntime.jsx("span",{style:{...B,fontSize:15,fontFamily:"ui-monospace, Consolas, monospace"},children:Nn(e.address)}),D?jsxRuntime.jsx("span",{style:{...O,fontSize:12},children:D.DisplayName??h}):null]}),jsxRuntime.jsx("button",{type:"button",className:"idos-press",style:wr,onClick:e.disconnect,children:k("disconnect")})]}):jsxRuntime.jsxs("div",{style:{display:"grid",gap:8},children:[jsxRuntime.jsx("span",{style:O,children:k("connectHint")}),e.connectChoices.length===0?jsxRuntime.jsx("div",{style:{...ne,padding:"10px 12px",...O},children:k("notConfigured")}):e.connectChoices.length===1?jsxRuntime.jsx("button",{type:"button",className:"idos-press",style:{...se("blue",false,"lg"),width:"100%"},onClick:e.connectChoices[0].connect,children:k("connect")}):e.connectChoices.map(C=>jsxRuntime.jsxs("button",{type:"button",className:"idos-press",style:hr,onClick:C.connect,children:[jsxRuntime.jsx("span",{style:{flex:1,textAlign:"left"},children:C.label}),jsxRuntime.jsx("span",{"aria-hidden":true,style:{color:m.textDim},children:"\u203A"})]},C.key))]}),jt=f?jsxRuntime.jsx(Sr,{icon:jsxRuntime.jsx(Cr,{assets:H?.AssetPaths,name:G}),name:G,backed:Number(Y)||0,unbacked:uo,hasIou:mo,decimals:Gt}):null,yo=jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[Object.keys(i).length>1?jsxRuntime.jsx(Dn,{caption:k("network"),value:h,onChange:w,options:Object.entries(i).map(([C,L])=>[C,L.DisplayName??C])}):null,F.length===0?jsxRuntime.jsx("div",{style:{...ne,padding:"10px 12px",...O},children:k("noTokens")}):F.length>1?jsxRuntime.jsx(Dn,{caption:k("token"),value:f,onChange:A,options:F.map(([C,L])=>[C,L.DisplayName??C])}):null]}),wo=jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(Pr,{value:u,onChange:C=>{b(C),q(null),R("");}}),yo,jsxRuntime.jsxs("div",{style:{display:"grid",gap:6},children:[jsxRuntime.jsx("span",{style:O,children:k("amount")}),jsxRuntime.jsxs("div",{style:{...ne,display:"flex",alignItems:"center",gap:8,padding:"4px 6px 4px 14px"},children:[jsxRuntime.jsx("input",{style:kr,inputMode:"decimal",placeholder:"0.0",value:S,onChange:C=>R(C.target.value.replace(",","."))}),jsxRuntime.jsx("span",{style:{...O,fontSize:14},children:G}),u==="withdraw"&&Number(Y)>0?jsxRuntime.jsx("button",{type:"button",className:"idos-press",style:se("gold",false,"sm"),onClick:()=>R(String(Y)),children:k("max")}):null]}),u==="withdraw"&&qt>0?jsxRuntime.jsx("span",{style:{...O,fontSize:12},children:k("minWithdraw",{n:xt(qt,Gt)})}):null]}),u==="deposit"?jsxRuntime.jsx(Tt,{tone:"green",busy:M,busyText:st,disabled:!He||!v?.ContractAddress||!En(S),onClick:()=>{!D||!v||it("deposit",()=>$t({network:D,binding:v,currencyID:f,amount:S}));},children:k("deposit")}):jsxRuntime.jsx(Tt,{tone:"blue",busy:M,busyText:st,disabled:!He||!f||!En(S),onClick:()=>{D&&it("withdraw",()=>fo());},children:k("withdraw")})]}),ho=r?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{style:{...en("gold"),padding:"12px 14px",display:"grid",gap:4},children:zt?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("span",{style:{...B,color:"inherit",fontSize:13,opacity:.9},children:k("topUpNeed")}),jsxRuntime.jsxs("span",{style:{...B,color:"inherit",fontSize:24,lineHeight:1.1},children:[rt," ",at," ",k("topUpMore")]}),jsxRuntime.jsx("span",{style:{fontSize:13,fontWeight:600,opacity:.95},children:k("topUpHint")})]}):jsxRuntime.jsx("span",{style:{...B,color:"inherit",fontSize:15},children:s?k("topUpCannot",{name:at}):k("loading")})}),jt,jsxRuntime.jsx(Tt,{tone:"green",busy:M,busyText:st,disabled:!He||!zt,onClick:()=>{!D||!v||it("deposit",()=>$t({network:D,binding:v,currencyID:f,amount:rt})).then(C=>{C.ok&&r.onDone(true);});},children:k("depositAmount",{amount:rt,name:at})})]}):null,Yt=!!n;return jsxRuntime.jsxs("div",{style:{...gr,...Yt?{...De,padding:16,width:360,maxWidth:"100%",maxHeight:"80vh",overflow:"auto"}:{},...o},children:[jsxRuntime.jsx("style",{children:fr}),Yt?jsxRuntime.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[jsxRuntime.jsx("span",{style:{...B,fontSize:20},children:r?k("topUpTitle"):k("title")}),jsxRuntime.jsx("button",{type:"button",className:"idos-press",style:br,onClick:n,"aria-label":"\u2715",children:"\u2715"})]}):null,go,s?Object.keys(i).length===0?jsxRuntime.jsx("div",{style:{...ne,padding:"12px 14px",...O},children:k("noNetworks")}):r?ho:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jt,wo]}):jsxRuntime.jsx("div",{style:{...O,textAlign:"center",padding:12},children:k("loading")}),Z?jsxRuntime.jsx(Tr,{tab:Z.tab,result:Z.res}):null]})}function Cr({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, ${m.gold}, ${m.goldDeep})`,boxShadow:`0 3px 0 ${m.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,...B,fontSize:20},"aria-hidden":true,children:(e.trim()[0]??"?").toUpperCase()})}function Sr({icon:t,name:e,backed:n,unbacked:o,hasIou:r,decimals:a}){let[s,l]=react.useState(false),i=(d,c,p=false)=>jsxRuntime.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:16},children:[jsxRuntime.jsx("span",{style:{...O,fontSize:13},children:d}),jsxRuntime.jsx("span",{style:{...B,fontSize:14,color:p?m.textDim:m.text},children:xt(c,a)})]});return jsxRuntime.jsxs("div",{style:{position:"relative"},onMouseEnter:()=>l(true),onMouseLeave:()=>l(false),children:[jsxRuntime.jsxs("button",{type:"button","aria-expanded":s,onClick:()=>l(d=>!d),onBlur:()=>l(false),style:{...ne,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:{...O,fontSize:12},children:k("balance")}),jsxRuntime.jsxs("span",{style:{...B,fontSize:22,lineHeight:1.1},children:[xt(n+o,a)," ",jsxRuntime.jsx("span",{style:{fontSize:15,color:m.textDim},children:e})]})]}),jsxRuntime.jsx("span",{"aria-hidden":true,style:{...O,fontSize:16},children:"\u24D8"})]}),s?jsxRuntime.jsxs("div",{role:"tooltip",style:{...De,position:"absolute",left:0,right:0,top:"calc(100% + 6px)",zIndex:5,padding:"10px 12px",display:"grid",gap:6},children:[i(k("backed"),n),r?i(k("unbacked"),o,o===0):null,jsxRuntime.jsx("div",{style:{height:1,background:m.line}}),i(k("total"),n+o),jsxRuntime.jsx("span",{style:{fontSize:12,color:m.textDim,lineHeight:1.35},children:r?k("iouHint"):k("backedHint")})]}):null]})}function Pr({value:t,onChange:e}){let n=[["deposit",k("deposit")],["withdraw",k("withdraw")]];return jsxRuntime.jsx("div",{role:"tablist",style:{display:"flex",gap:6,padding:4,borderRadius:16,background:m.wellSoft},children:n.map(([o,r])=>{let a=o===t;return jsxRuntime.jsx("button",{role:"tab","aria-selected":a,type:"button",className:"idos-press",onClick:()=>!a&&e(o),style:{...B,fontFamily:m.font,fontSize:15,flex:1,border:"none",borderRadius:12,padding:"9px 14px",cursor:"pointer",color:a?m.onBlue:m.textDim,background:a?`linear-gradient(180deg, ${m.blue}, ${m.blueDeep})`:"transparent",boxShadow:a?`0 3px 0 ${m.edge}, inset 0 2px 0 rgba(255,255,255,.3)`:"none",transition:`background ${m.fast} ease`},children:r},o)})})}function Dn({caption:t,value:e,onChange:n,options:o}){return jsxRuntime.jsxs("label",{style:{display:"grid",gap:6},children:[jsxRuntime.jsx("span",{style:O,children:t}),jsxRuntime.jsxs("span",{style:{position:"relative",display:"block"},children:[jsxRuntime.jsx("select",{value:e,onChange:r=>n(r.target.value),style:{...ne,...B,fontFamily:m.font,fontSize:15,width:"100%",padding:"10px 36px 10px 12px",appearance:"none",WebkitAppearance:"none",cursor:"pointer",outline:"none"},children:o.map(([r,a])=>jsxRuntime.jsx("option",{value:r,style:{color:"#111"},children:a},r))}),jsxRuntime.jsx("span",{"aria-hidden":true,style:{position:"absolute",right:14,top:"50%",transform:"translateY(-50%)",color:m.textDim,pointerEvents:"none"},children:"\u25BE"})]})]})}function Tt({tone:t,busy:e,busyText:n,disabled:o,onClick:r,children:a}){return jsxRuntime.jsx("button",{type:"button",className:"idos-press",disabled:o||e,onClick:r,style:{...se(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]}):a})}function Tr({tab:t,result:e}){let n=e.ok,o={borderRadius:14,padding:"10px 12px",display:"grid",gap:4,background:`color-mix(in srgb, ${n?m.green:m.red} 22%, transparent)`,border:`2px solid color-mix(in srgb, ${n?m.green:m.red} 60%, transparent)`,wordBreak:"break-word"};return n?jsxRuntime.jsxs("div",{style:o,role:"status",children:[jsxRuntime.jsxs("span",{style:{...B,fontSize:15},children:["\u2713 ",t==="withdraw"?k("doneWithdraw"):k("doneDeposit")]}),jsxRuntime.jsxs("span",{style:{...O,fontSize:12},children:[k("tx"),": ",Nn(e.onChainTxHash)]})]}):jsxRuntime.jsxs("div",{style:o,role:"alert",children:[jsxRuntime.jsxs("span",{style:{...B,fontSize:15},children:["\u2715 ",k("failed")]}),jsxRuntime.jsx("span",{style:{fontSize:13,color:m.text,opacity:.9},children:e.error}),e.titleTransactionID?jsxRuntime.jsx("span",{style:{...O,fontSize:12},children:k("debited")}):null]})}var dr,pr,ur,Nn,En,fr,gr,yr,wr,hr,br,kr,Wt=P(()=>{z();lt();dr=/^(Not enough confirmations|Transaction not found on chain)/,pr=8,ur=5e3;Nn=t=>t.length>14?`${t.slice(0,6)}\u2026${t.slice(-4)}`:t,En=t=>/^\d+(\.\d+)?$/.test(t)&&Number(t)>0;fr="@keyframes idosw-spin { to { transform: rotate(360deg) } }",gr={pointerEvents:"auto",color:m.text,fontFamily:m.font,display:"flex",flexDirection:"column",gap:12,boxSizing:"border-box",width:"100%",minWidth:0,maxWidth:"100%"},yr={width:10,height:10,borderRadius:"50%",background:m.green,boxShadow:`0 0 0 3px color-mix(in srgb, ${m.green} 30%, transparent)`,flex:"none"},wr={...B,fontFamily:m.font,fontSize:13,color:m.textDim,background:"transparent",border:`2px solid ${m.line}`,borderRadius:10,padding:"5px 10px",cursor:"pointer"},hr={...ne,...B,fontFamily:m.font,fontSize:15,display:"flex",alignItems:"center",gap:10,padding:"10px 12px",cursor:"pointer",width:"100%"},br={...se("red",false,"sm"),width:36,minHeight:36,padding:0,borderRadius:"50%"},kr={...B,fontFamily:m.font,fontSize:22,flex:1,minWidth:0,background:"transparent",border:"none",outline:"none",padding:"6px 0"};});function Rn(t){let{client:e,walletConnectProjectId:n,appName:o,onClose:r,style:a,topUp:s}=t,[l,i]=react.useState(n??"");react.useEffect(()=>{if(n)return;let c=true;return (async()=>{let p=await e.blockchain.getDefinitions();if(!c||!p.ok)return;let u=p.data.Blockchain?.WalletLogin?.WalletConnectProjectId;u&&i(u);})(),()=>{c=false;}},[e,n]);let d=react.useMemo(()=>ze({walletConnectProjectId:l||void 0,appName:o}),[l,o]);return jsxRuntime.jsx(Te,{wagmiConfig:d,children:jsxRuntime.jsx(Br,{client:e,onClose:r,style:a,topUp:s})})}function Br({client:t,onClose:e,style:n,topUp:o}){let r=je(t,t.titleID),{address:a,isConnected:s,chainId:l}=wagmi.useAccount(),{connect:i,connectors:d}=wagmi.useConnect(),{disconnect:c}=wagmi.useDisconnect(),{switchChainAsync:p}=wagmi.useSwitchChain(),u=wagmi.useConfig();async function b(w){if(!w||l===w)return true;try{return await p({chainId:w}),!0}catch{return false}}let h={networkType:"EVM",address:s&&a?a:null,connectChoices:d.map(w=>({key:w.uid,label:w.name,connect:()=>i({connector:w})})),disconnect:()=>c(),deposit:async({network:w,binding:f,amount:A})=>{if(!f.ContractAddress)return g("approve","This token cannot be deposited.");if(!await b(w.ChainID))return g("approve",`Switch your wallet to chain ${w.ChainID} to continue.`);let S;try{let M=actions.getPublicClient(u,{chainId:w.ChainID??void 0});if(!M)throw new Error("no client");S=Number(await M.readContract({address:f.ContractAddress,abi:Re,functionName:"decimals"}));}catch{return g("approve","Could not read the token from the network. Try again.")}let R;try{R=viem.parseUnits(A,S);}catch{return g("approve","Invalid amount.")}return r.depositToken({network:w,tokenAddress:f.ContractAddress,amount:R})},withdraw:async({network:w,networkID:f,currencyID:A,amount:S})=>r.account?await b(w.ChainID)?r.withdrawToken({currencyID:A,networkID:f,walletAddress:r.account,amount:S}):g("request",`Switch your wallet to chain ${w.ChainID} to continue.`):g("request","Wallet not connected.")};return jsxRuntime.jsx(Je,{client:t,engine:h,onClose:e,style:n,topUp:o})}var Ln=P(()=>{Ve();mt();qe();Ye();z();Wt();});function It(t){let[e,n]=react.useState(null);return react.useEffect(()=>{if(E()||Ee())return;let o=null;return t.checkout.setTopUpHandler(r=>new Promise(a=>{o?.(false);let s=false,l=i=>{s||(s=true,o===l&&(o=null),n(d=>d?.onDone===l?null:d),a(i));};o=l,n({currencyID:r.currencyID,amount:r.missingAmount??String(r.missing),onDone:l});})),()=>{t.checkout.setTopUpHandler(null),o?.(false);}},[t]),e}var vt=P(()=>{te();});var Et={};Qt(Et,{DEFAULT_EVM_CHAINS:()=>ut,IDosGamesWalletProvider:()=>Te,WalletLogin:()=>In,WalletLoginButton:()=>St,WalletPanel:()=>Rn,arbitrum:()=>exports.arbitrum,base:()=>exports.base,bsc:()=>exports.bsc,chainById:()=>dt,createEvmWalletConfig:()=>ze,idosChains:()=>exports.idosChains,mainnet:()=>exports.mainnet,optimism:()=>exports.optimism,polygon:()=>exports.polygon,polygonAmoy:()=>exports.polygonAmoy,sepolia:()=>exports.sepolia,useEvmBridge:()=>je,useEvmBridgeClients:()=>Oe,useWalletTopUp:()=>It});var Dt=P(()=>{mt();ce();qe();Ye();vn();Ln();vt();});function Ze(t){let{walletConnectProjectId:e,appName:n,appUrl:o,appIcon:r,wallets:a}=t,s=Bn.get(e);if(s)return s;let l=t.networks??[exports.solanaMainnet],i=o??(typeof window<"u"?window.location.origin:""),d={name:n??"iDosGames",description:n??"iDosGames game",url:i,icons:r?[r]:[]},c=new appkitAdapterSolana.SolanaAdapter(a?{wallets:a}:{});return Ge(react$1.createAppKit({adapters:[c],networks:l,projectId:e,metadata:d,features:{analytics:false,email:false,socials:false}})),Bn.set(e,c),c}var Bn,Nt=P(()=>{ce();Pe();Bn=new Map;});async function Me(t){let{client:e,adapter:n,network:o,mint:r,amountRaw:a,titleID:s,category:l}=t;if(E())return ee("deposit-onchain");let i=e.auth.context?.userID;if(!i)return g("deposit-onchain","Not logged in.");if(a<=0n)return g("deposit-onchain","Amount must be positive.");let d;try{d=await n.depositSpl({mint:r,amountRaw:a,userID:i,titleID:s,category:core.normalizeBlockchainCategory(l)});}catch(p){return g("deposit-onchain",_(p))}let c=await e.blockchain.depositToken(o.NetworkID??"",d);return c.ok?{ok:true,onChainTxHash:d,data:c.data}:g("report",c.error,{onChainTxHash:d})}async function Fe(t){let{client:e,adapter:n,currencyID:o,networkID:r,walletAddress:a,amount:s,category:l}=t;if(E())return ee("request");let i=await e.blockchain.requestTokenWithdrawal(o,r,a,s,l);if(!i.ok)return g("request",i.error);let d=i.data.SolanaSignature,c=i.data.TitleTransactionID??void 0;if(!d)return g("request","Withdrawal response carried no Solana signature.",{titleTransactionID:c});let p;try{p=await n.submitWithdrawal(d);}catch(b){return g("withdraw-onchain",_(b),{titleTransactionID:c})}if(!c)return g("confirm","Missing TitleTransactionID.",{onChainTxHash:p});let u=await e.blockchain.confirmWithdrawal(c,p);return u.ok?{ok:true,onChainTxHash:p,data:i.data}:g("confirm",u.error,{onChainTxHash:p,titleTransactionID:c})}var On=P(()=>{z();te();});async function Ue(t){let{client:e,networkID:n,walletAddress:o,signMessage:r}=t;if(E())return me("challenge");let a=await e.auth.requestWalletChallenge(o,n);if(!a.ok)return T("challenge",a.error);let s;try{let i=await r(new TextEncoder().encode(a.data.Message));s=_n(i);}catch(i){return T("sign",_(i))}let l=await e.auth.loginWithWallet(o,n,s);return l.ok?{ok:true,data:l.data}:T("login",l.error)}async function Rt(t){let{client:e,networkID:n,walletAddress:o,signMessage:r}=t;if(E())return me("challenge");let a=await e.auth.linkWallet(o,n);if(!a.ok)return T("challenge",a.error);if(!a.data.Challenge)return T("challenge","No challenge was issued.");let s;try{let i=await r(new TextEncoder().encode(a.data.Challenge));s=_n(i);}catch(i){return T("sign",_(i))}let l=await e.auth.linkWallet(o,n,s);return l.ok?{ok:true,data:l.data}:T("login",l.error)}function _n(t){let e="0x";for(let n of t)e+=n.toString(16).padStart(2,"0");return e}var Mn=P(()=>{z();te();});var Xe=P(()=>{On();Mn();});function Un(t,e,n){let{address:o}=react$1.useAppKitAccount(),{walletProvider:r}=react$1.useAppKitProvider("solana"),a=o??null,s=r?.signMessage?.bind(r);return {connected:!!a,account:a,loginWithWallet:(l,i)=>{let d=i??a;return d?s?Ue({client:t,networkID:l,walletAddress:d,signMessage:s}):Promise.resolve(T("sign","The connected wallet does not support message signing.")):Promise.resolve(T("challenge",Fn))},depositToken:l=>Me({client:t,adapter:n,titleID:e,...l}),withdrawToken:l=>{let i=l.walletAddress??a;return i?Fe({client:t,adapter:n,...l,walletAddress:i}):Promise.resolve(g("request",Fn))}}}var Fn,Hn=P(()=>{Xe();z();Fn="Wallet not connected.";});function $r(t){try{let n=t?.session?.peer?.metadata?.redirect,o=n?.native||n?.universal;return !o||typeof window>"u"?!1:(window.location.href=o,!0)}catch{return false}}function zn(t,e){return new Promise((n,o)=>{let r=setTimeout(()=>o(new Error("The wallet request timed out.")),e);t.then(a=>{clearTimeout(r),n(a);},a=>{clearTimeout(r),o(a instanceof Error?a:new Error(String(a)));});})}function Vr(t){let e="Wallet sign-in failed. Please try again.";return t instanceof Error?/user (rejected|denied|cancelled|canceled)|rejected the request/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}function $n(t){let{client:e,networkID:n,onAuthenticated:o,disabled:r,label:a,style:s,autoStart:l,mode:i="login",onLinked:d}=t,{address:c,isConnected:p}=react$1.useAppKitAccount(),{walletProvider:u}=react$1.useAppKitProvider("solana"),[b,h]=react.useState(false),[w,f]=react.useState(null),[A,S]=react.useState(false),[R,M]=react.useState(false),V=react.useRef(null),Z=react.useRef(0),q=react.useCallback(()=>{V.current&&clearTimeout(V.current),V.current=null;},[]);react.useEffect(()=>q,[q]);let ae=react.useRef(false),re=react.useCallback(async()=>{let H=++Z.current,v=()=>Z.current===H,Y=u?.signMessage?.bind(u);if(!c||!Y){f("The connected wallet cannot sign messages."),h(false);return}h(true),f(null);try{if(M(!0),i==="link"){let X=await zn(Rt({client:e,networkID:n,walletAddress:c,signMessage:Y}),Gn);if(!v())return;if(X.ok){d?.(X.data.PlayAccess??null);return}f(X.stage==="sign"?"Signature declined.":core.authErrorText(X.error,"Could not link the wallet."));return}let G=await zn(Ue({client:e,networkID:n,walletAddress:c,signMessage:Y}),Gn);if(!v())return;if(G.ok){o();return}f(G.stage==="sign"?"Signature declined.":core.authErrorText(G.error,"Wallet sign-in failed."));}catch(G){if(!v())return;console.error("[idosgames/wallet] solana sign-in failed:",G),f(Vr(G));}finally{v()&&(h(false),M(false));}},[c,u,e,n,o,i,d]),F=react.useCallback(()=>{$r(u)||oe()?.open();},[u]);react.useEffect(()=>{!A||!p||!c||!u||(S(false),q(),re());},[A,p,c,u,re,q]);let D=()=>{if(R){F();return}if(f(null),ae.current=true,p&&c&&u){re();return}let H=oe();if(!H){f("Wallet sign-in is not configured for this title.");return}h(true),S(true),q(),V.current=setTimeout(()=>{S(false),h(false),f("No wallet was connected.");},qr),H.open();};return react.useEffect(()=>{!l||ae.current||(ae.current=true,D());},[l]),jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:D,disabled:r,style:{...jr,...r?{opacity:.6,cursor:"default"}:null,...s},children:R?"Waiting for signature \u2014 tap to open wallet":b?"Check your wallet\u2026":p?a??(i==="link"?"Link wallet":"Sign in with wallet"):"Connect wallet"}),w&&jsxRuntime.jsx("span",{role:"alert",style:Yr,children:w})]})}var qr,Gn,jr,Yr,Vn=P(()=>{Xe();Pe();qr=18e4,Gn=9e4;jr={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},Yr={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};});function tt(t){let e=(t??"").replace(/^0x/i,""),n=new Uint8Array(e.length>>1);for(let o=0;o<n.length;o++)n[o]=parseInt(e.slice(o*2,o*2+2),16);return n}function We(t){let e=buffer.Buffer.alloc(8);return e.writeBigUInt64LE(BigInt(t||0)),e}function la(t){let e=buffer.Buffer.alloc(8);return e.writeBigInt64LE(BigInt(t||0)),e}function Ie(t){let e=buffer.Buffer.from(t??"","utf8"),n=buffer.Buffer.alloc(4);return n.writeUInt32LE(e.length),buffer.Buffer.concat([n,e])}async function Yn(t){let e=await globalThis.crypto.subtle.digest("SHA-256",new TextEncoder().encode(t??""));return new Uint8Array(e)}function Xn(t,e,n){return pe(t,buffer.Buffer.from("title_balance"),buffer.Buffer.from(e),n.toBuffer())}function ca(t){return buffer.Buffer.concat([buffer.Buffer.from(na,"hex"),We(t.amountRaw),Ie(t.userID),Ie(t.titleID),Ie(t.category),buffer.Buffer.from(t.titleHash)])}function da(t,e){let n=t.Splits??[],o=buffer.Buffer.alloc(4);return o.writeUInt32LE(n.length),buffer.Buffer.concat([buffer.Buffer.from(t.Domain==="SPL_DEV"?ra:oa,"hex"),We(t.Amount),We(t.BurnAmount),We(t.Nonce),la(t.ExpiresAt),o,...n.map(r=>buffer.Buffer.concat([buffer.Buffer.from(new web3_js.PublicKey(r.To??"").toBytes()),We(r.Amount)])),Ie(t.UserID),Ie(t.TitleID),Ie(t.Category),buffer.Buffer.from(e)])}function Ae(t,e,n){return web3_js.PublicKey.findProgramAddressSync([e.toBuffer(),n.toBuffer(),t.toBuffer()],nt)[0]}function pa(t,e,n,o,r){return new web3_js.TransactionInstruction({programId:nt,keys:[{pubkey:t,isSigner:true,isWritable:true},{pubkey:e,isSigner:false,isWritable:true},{pubkey:n,isSigner:false,isWritable:false},{pubkey:o,isSigner:false,isWritable:false},{pubkey:web3_js.SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:r,isSigner:false,isWritable:false}],data:buffer.Buffer.from([1])})}function pe(t,...e){return web3_js.PublicKey.findProgramAddressSync(e,t)[0]}function ua(t){let{programId:e,user:n,mint:o,tokenProgram:r}=t,a=pe(e,buffer.Buffer.from("vault"));return new web3_js.TransactionInstruction({programId:e,keys:[{pubkey:pe(e,buffer.Buffer.from("config")),isSigner:false,isWritable:false},{pubkey:a,isSigner:false,isWritable:true},{pubkey:o,isSigner:false,isWritable:false},{pubkey:n,isSigner:true,isWritable:true},{pubkey:Ae(o,n,r),isSigner:false,isWritable:true},{pubkey:Ae(o,a,r),isSigner:false,isWritable:true},{pubkey:r,isSigner:false,isWritable:false},{pubkey:nt,isSigner:false,isWritable:false},{pubkey:web3_js.SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:Xn(e,t.titleHash,o),isSigner:false,isWritable:true}],data:ca(t)})}function ma(t){let{sig:e,payer:n,tokenProgram:o,titleHash:r}=t,a=new web3_js.PublicKey(e.ProgramID??""),s=new web3_js.PublicKey(e.Mint??""),l=new web3_js.PublicKey(e.WalletAddress??""),i=pe(a,buffer.Buffer.from("vault")),d=new web3_js.PublicKey(aa),c=(e.Splits??[]).map(w=>new web3_js.PublicKey(w.To??"")),p=c.map(w=>Ae(s,w,o)),u=web3_js.Ed25519Program.createInstructionWithPublicKey({publicKey:tt(e.Ed25519PublicKey),message:tt(e.Ed25519Message),signature:tt(e.SignatureHex)}),b=c.map((w,f)=>pa(n,p[f],w,s,o)),h=new web3_js.TransactionInstruction({programId:a,keys:[{pubkey:pe(a,buffer.Buffer.from("config")),isSigner:false,isWritable:false},{pubkey:n,isSigner:true,isWritable:true},{pubkey:i,isSigner:false,isWritable:true},{pubkey:pe(a,buffer.Buffer.from("nonce"),We(e.Nonce)),isSigner:false,isWritable:true},{pubkey:s,isSigner:false,isWritable:false},{pubkey:l,isSigner:false,isWritable:false},{pubkey:Ae(s,i,o),isSigner:false,isWritable:true},{pubkey:Ae(s,l,o),isSigner:false,isWritable:true},{pubkey:d,isSigner:false,isWritable:false},{pubkey:Ae(s,d,o),isSigner:false,isWritable:true},{pubkey:web3_js.SYSVAR_INSTRUCTIONS_PUBKEY,isSigner:false,isWritable:false},{pubkey:o,isSigner:false,isWritable:false},{pubkey:nt,isSigner:false,isWritable:false},{pubkey:web3_js.SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:Xn(a,r,s),isSigner:false,isWritable:true},...p.map(w=>({pubkey:w,isSigner:false,isWritable:true}))],data:da(e,r)});return [u,...b,h]}async function fa(t,e,n){let o=async a=>{let s=(await t.getSignatureStatuses([e],{searchTransactionHistory:a})).value[0];if(s?.err)throw new K("TRANSACTION_FAILED",`transaction ${e} failed: ${JSON.stringify(s.err)}`);return s},r=a=>a?.confirmationStatus==="confirmed"||a?.confirmationStatus==="finalized";for(let a=1;;a++){await new Promise(i=>setTimeout(i,ga));let s=null;try{s=await o(!1);}catch(i){if(i instanceof K)throw i}if(r(s))return;if(!(s||a%ya!==0||await t.getBlockHeight("confirmed").catch(()=>-1)<=n)){if(r(await o(true).catch(()=>null)))return;throw new K("TRANSACTION_EXPIRED",`transaction ${e} expired: block height exceeded`)}}}function ot(t){let{connection:e,signTransaction:n}=t;async function o(a){let s=await e.getAccountInfo(a);if(!s)throw new K("MINT_NOT_FOUND",`mint ${a.toBase58()} not found`);return s.owner}async function r(a,s){let{blockhash:l,lastValidBlockHeight:i}=await e.getLatestBlockhash("confirmed"),d=new web3_js.Transaction;d.feePayer=a,d.recentBlockhash=l,d.add(...s);let c=await n(d),p=await e.sendRawTransaction(c.serialize());return await fa(e,p,i),p}return {async depositSpl({mint:a,amountRaw:s,userID:l,titleID:i,category:d}){let c=new web3_js.PublicKey(t.owner),p=new web3_js.PublicKey(a),u=await o(p);return r(c,[ua({programId:new web3_js.PublicKey(t.programId),user:c,mint:p,tokenProgram:u,amountRaw:s,userID:l,titleID:i,category:d,titleHash:await Yn(i)})])},async submitWithdrawal(a){if(!a.ProgramID||!a.Mint||!a.WalletAddress)throw new K("BAD_VOUCHER","the voucher has no program, mint or wallet");let s=new web3_js.PublicKey(t.owner),l=new web3_js.PublicKey(a.ProgramID),i=await e.getAccountInfo(pe(l,buffer.Buffer.from("config")));if(!i)throw new K("POOL_NOT_ON_THIS_CLUSTER","the pool's config account is not on this cluster");if(i.data.length!==jn)throw new K("POOL_NOT_MIGRATED",`config is ${i.data.length} bytes, expected ${jn} (migrate_config not run)`);let d=buffer.Buffer.from(i.data);if(d[sa]===1)throw new K("POOL_PAUSED","pool withdrawals are paused");let c=d.readBigUInt64LE(Zn);if(c!==BigInt(a.SignatureEpoch||0))throw new K("VOUCHER_REVOKED",`signature epoch mismatch: voucher ${a.SignatureEpoch}, on-chain ${c}`);let p=buffer.Buffer.from(tt(a.Ed25519PublicKey)),u=false;for(let h=0;h<Jn;h++){let w=Qn+h*32;p.equals(d.subarray(w,w+32))&&(u=true);}if(!u)throw new K("SIGNER_NOT_TRUSTED","the voucher's signer is not in the pool's server_pubkeys");let b=await o(new web3_js.PublicKey(a.Mint));return r(s,[web3_js.ComputeBudgetProgram.setComputeUnitLimit({units:ia}),...ma({sig:a,payer:s,tokenProgram:b,titleHash:await Yn(a.TitleID??"")})])}}}var na,oa,ra,nt,aa,jn,ia,Qn,Jn,Zn,sa,K,ga,ya,Ft=P(()=>{na="e000c6afc62f69cc",oa="b59a5e563e7306ba",ra="d668e18c1bdc33f1",nt=new web3_js.PublicKey("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"),aa="1nc1nerator11111111111111111111111111111111",jn=177,ia=3e5,Qn=40,Jn=4,Zn=Qn+32*Jn,sa=Zn+8,K=class extends Error{constructor(n,o){super(o);this.code=n;this.name="PlatformPoolError";}code};ga=2e3,ya=5;});function to(t){return (t.ChainID===Ta?exports.solanaDevnet:exports.solanaMainnet).rpcUrls.default.http[0]}function no(t){let{client:e,walletConnectProjectId:n,appName:o,onClose:r,style:a,topUp:s}=t,[l,i]=react.useState(n??"");react.useEffect(()=>{if(n)return;let f=true;return (async()=>{let A=await e.blockchain.getDefinitions();if(!f||!A.ok)return;let S=A.data.Blockchain?.WalletLogin?.WalletConnectProjectId;S&&i(S);})(),()=>{f=false;}},[e,n]);let d=react.useMemo(()=>l?(Ze({walletConnectProjectId:l,appName:o}),true):false,[l,o]),{address:c,isConnected:p}=react$1.useAppKitAccount(),{walletProvider:u}=react$1.useAppKitProvider("solana"),b=p&&c?c:null,h=(f,A)=>ot({connection:new web3_js.Connection(to(f),"confirmed"),owner:A,programId:f.RewardPoolAddress??"",signTransaction:async S=>{if(!u)throw new Error("Wallet not connected.");return u.signTransaction(S)}});return jsxRuntime.jsx(Je,{client:e,engine:{networkType:"Solana",address:b,connectChoices:d?[{key:"appkit",label:"Connect wallet",connect:()=>{oe()?.open();}}]:[],disconnect:()=>{oe()?.disconnect("solana");},deposit:async({network:f,binding:A,amount:S})=>{if(!b)return g("deposit-onchain","Wallet not connected.");if(!A.ContractAddress)return g("deposit-onchain","This token cannot be deposited.");if(!f.RewardPoolAddress)return g("deposit-onchain","POOL_NOT_IN_REGISTRY");let R;try{R=(await new web3_js.Connection(to(f),"confirmed").getTokenSupply(new web3_js.PublicKey(A.ContractAddress))).value.decimals;}catch{return g("deposit-onchain","Could not read the token from the network. Try again.")}let M;try{M=viem.parseUnits(S,R);}catch{return g("deposit-onchain","Invalid amount.")}return Me({client:e,adapter:h(f,b),network:f,mint:A.ContractAddress,amountRaw:M,titleID:e.titleID})},withdraw:async({network:f,networkID:A,currencyID:S,amount:R})=>b?Fe({client:e,adapter:h(f,b),currencyID:S,networkID:A,walletAddress:b,amount:R}):g("request","Wallet not connected.")},onClose:r,style:a,topUp:s})}var Ta,oo=P(()=>{ce();Xe();Ft();z();Pe();Nt();Wt();Ta=103;});var Ut={};Qt(Ut,{PlatformPoolError:()=>K,SolanaWalletLogin:()=>$n,SolanaWalletPanel:()=>no,createPlatformPoolAdapter:()=>ot,createSolanaWalletConfig:()=>Ze,solanaDevnet:()=>exports.solanaDevnet,solanaMainnet:()=>exports.solanaMainnet,useSolanaBridge:()=>Un});var Ht=P(()=>{Nt();Hn();Vn();oo();Ft();ce();});te();lt();z();var fe={addressRequest:"IDOS_PLATFORM_WALLET_ADDRESS_REQUEST",addressResponse:"IDOS_PLATFORM_WALLET_ADDRESS_RESPONSE",signRequest:"IDOS_PLATFORM_WALLET_SIGN_REQUEST",signResponse:"IDOS_PLATFORM_WALLET_SIGN_RESPONSE",openRequest:"IDOS_PLATFORM_WALLET_OPEN_REQUEST",openResponse:"IDOS_PLATFORM_WALLET_OPEN_RESPONSE"},tn=core.PLATFORM_PAGE_UNAVAILABLE;async function ct(t,e,n){let o=await core.askPlatformPage(t,e,n),{address:r,signature:a}=o.data;return {ok:o.ok,error:o.error,address:typeof r=="string"?r:void 0,signature:typeof a=="string"?a:void 0}}async function Eo(){return (await ct(fe.openRequest,fe.openResponse,{})).ok}async function nn(t){let{client:e,networkID:n}=t;return rn(t,async o=>{let r=await e.auth.requestWalletChallenge(o,n);return r.ok?{ok:true,message:r.data.Message}:{ok:false,error:r.error}},(o,r)=>e.auth.loginWithWallet(o,n,r))}async function on(t){let{client:e,networkID:n}=t;return rn(t,async o=>{let r=await e.auth.linkWallet(o,n);return r.ok?r.data.Challenge?{ok:true,message:r.data.Challenge}:{ok:false,error:"No challenge was issued."}:{ok:false,error:r.error}},(o,r)=>e.auth.linkWallet(o,n,r))}async function rn(t,e,n){let{client:o,family:r}=t,a=o.titleID,s=await ct(fe.addressRequest,fe.addressResponse,{titleID:a,family:r});if(!s.ok||!s.address)return T("challenge",s.error??"NO_WALLET");let l=s.address,i=await e(l);if(!i.ok)return T("challenge",i.error);let d=await ct(fe.signRequest,fe.signResponse,{titleID:a,family:r,address:l,message:i.message});if(!d.ok||!d.signature)return T("sign",d.error??"SIGN_FAILED");let c=await n(l,d.signature);return c.ok?{ok:true,data:c.data}:T("login",c.error)}var ao={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},io={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};function ro(t){switch(t){case tn:return "Wallet sign-in is not available on this page.";case "NO_WALLET":case "CANCELLED":return "Connect a wallet on the page to sign in.";case "REJECTED":return "The signature was declined.";case "TIMEOUT":return "The wallet did not answer. Please try again.";default:return t}}function Aa(t){let{client:e,networkID:n,onAuthenticated:o,onLinked:r,mode:a="login",family:s,disabled:l,label:i,style:d}=t,[c,p]=react.useState(false),[u,b]=react.useState(null);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:()=>{p(true),b(null),(async()=>{if(a==="link"){let f=await on({client:e,networkID:n,family:s});if(f.ok){p(false),r?.(f.data.PlayAccess??null);return}b(ro(f.error)),p(false);return}let w=await nn({client:e,networkID:n,family:s});if(w.ok){o?.();return}b(ro(w.error)),p(false);})();},disabled:l||c,style:{...ao,...l||c?{opacity:.6,cursor:"default"}:null,...d},children:c?"Waiting for the wallet\u2026":i??(a==="link"?"Link wallet":"Sign in with wallet")}),u&&jsxRuntime.jsx("span",{role:"alert",style:io,children:u})]})}function so(t,e){return Ee()?null:jsxRuntime.jsx(Aa,{...t,family:e})}function lo(t){let{loading:e,disabled:n,label:o,style:r,error:a,onClick:s}=t;return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:s,disabled:n||e,style:{...ao,...n||e?{opacity:.6,cursor:"default"}:null,...r},children:e?"Loading wallet\u2026":o??"Sign in with wallet"}),a&&jsxRuntime.jsx("span",{role:"alert",style:io,children:a})]})}function Ia(t){let{chains:e,walletConnectProjectId:n,appName:o,disabled:r,label:a,style:s,onAuthenticated:l,...i}=t,[d,c]=react.useState(null),[p,u]=react.useState(false),[b,h]=react.useState(null);if(E())return so(t,"evm");let w=()=>{u(true),h(null),(async()=>{try{let f=await Promise.resolve().then(()=>(Dt(),Et)),A=f.createEvmWalletConfig({chains:e,walletConnectProjectId:n,appName:o});c({mod:f,config:A});}catch(f){console.error("[idosgames/wallet] failed to load the wallet module:",f),h("Could not load the wallet. Please try again.");}finally{u(false);}})();};if(d){let{WalletLogin:f}=d.mod;return jsxRuntime.jsx(f,{...i,onAuthenticated:l??co,wagmiConfig:d.config,disabled:r,label:a,style:s,autoStart:true})}return jsxRuntime.jsx(lo,{loading:p,disabled:r,label:a??(t.mode==="link"?"Link wallet":void 0),style:s,error:b,onClick:w})}function co(){}function va(t){let{walletConnectProjectId:e,appName:n,disabled:o,label:r,style:a,onAuthenticated:s,...l}=t,[i,d]=react.useState(null),[c,p]=react.useState(false),[u,b]=react.useState(null);if(E())return so(t,"solana");let h=()=>{p(true),b(null),(async()=>{try{let w=await Promise.resolve().then(()=>(Ht(),Ut));e&&w.createSolanaWalletConfig({walletConnectProjectId:e,appName:n}),d(w);}catch(w){console.error("[idosgames/wallet] failed to load the wallet module:",w),b("Could not load the wallet. Please try again.");}finally{p(false);}})();};if(i){let{SolanaWalletLogin:w}=i;return jsxRuntime.jsx(w,{...l,onAuthenticated:s??co,disabled:o,label:r,style:a,autoStart:true})}return jsxRuntime.jsx(lo,{loading:c,disabled:o,label:r??(t.mode==="link"?"Link wallet":void 0),style:a,error:u,onClick:h})}var Ea={...O,pointerEvents:"auto",padding:16,boxSizing:"border-box",display:"flex",alignItems:"center",justifyContent:"space-between",gap:10,fontSize:15};function Da(t){let{client:e,onClose:n,style:o}=t,r=E(),[a,s]=react.useState(null),[l,i]=react.useState(null);return react.useEffect(()=>{if(r)return;let d=true;return (async()=>{try{let c=await e.blockchain.getDefinitions(),p=Object.values((c.ok?c.data.Blockchain?.Networks:null)??{}).map(h=>h.Type),b=p.includes("Solana")&&!p.includes("EVM")?{kind:"solana",mod:await Promise.resolve().then(()=>(Ht(),Ut))}:{kind:"evm",mod:await Promise.resolve().then(()=>(Dt(),Et))};d&&s(b);}catch(c){console.error("[idosgames/wallet] failed to load the wallet panel:",c),d&&i("Could not load the wallet.");}})(),()=>{d=false;}},[r,e]),r?null:a?.kind==="evm"?jsxRuntime.jsx(a.mod.WalletPanel,{...t}):a?.kind==="solana"?jsxRuntime.jsx(a.mod.SolanaWalletPanel,{...t}):jsxRuntime.jsxs("div",{style:{...Ea,...n?{...De,width:360,maxWidth:"100%"}:{},...o},children:[l??k("loading"),n&&jsxRuntime.jsx("button",{type:"button",className:"idos-press",onClick:n,"aria-label":"\u2715",style:{...se("red",false,"sm"),width:36,minHeight:36,padding:0,borderRadius:"50%"},children:"\u2715"})]})}te();vt();ce();
2
+ exports.LazySolanaWalletLogin=va;exports.LazyWalletLogin=Ia;exports.LazyWalletPanel=Da;exports.chainById=dt;exports.isEmbeddedInPlatform=E;exports.isEmbeddedOnForeignSite=Ee;exports.openPlatformWalletPanel=Eo;exports.useWalletTopUp=It;
@@ -1,2 +1,2 @@
1
- 'use strict';var appkitAdapterSolana=require('@reown/appkit-adapter-solana'),react=require('@reown/appkit/react'),core=require('@idosgames/core'),viem=require('viem'),react$1=require('react'),jsxRuntime=require('react/jsx-runtime'),web3_js=require('@solana/web3.js'),buffer=require('buffer');var le={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"},ke={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 Ge=null;function $e(e){Ge=e;}function Q(){return Ge}var ze=new Map;function xe(e){let{walletConnectProjectId:t,appName:n,appUrl:o,appIcon:a,wallets:r}=e,l=ze.get(t);if(l)return l;let p=e.networks??[le],s=o??(typeof window<"u"?window.location.origin:""),f={name:n??"iDosGames",description:n??"iDosGames game",url:s,icons:a?[a]:[]},d=new appkitAdapterSolana.SolanaAdapter(r?{wallets:r}:{});return $e(react.createAppKit({adapters:[d],networks:p,projectId:t,metadata:f,features:{analytics:false,email:false,socials:false}})),ze.set(t,d),d}function ee(e){return e instanceof viem.BaseError?e.shortMessage:e instanceof Error?e.message:String(e)}function x(e,t,n){return {ok:false,stage:e,error:t,...n}}function v(e,t){return {ok:false,stage:e,error:t}}var Ve="WALLET_USE_SITE_PANEL",Tt=/^[a-z0-9]{8}-preview\.idos\.games$/;function Pt(e=typeof window>"u"?"":window.location.hostname){let t=e.toLowerCase();return Tt.test(t)?true:t!=="localhost"&&t!=="127.0.0.1"?false:globalThis.__IDOS_PREVIEW__!=null}function te(){if(typeof window>"u"||Pt())return false;try{return window.self!==window.top}catch{return true}}function Te(e){return x(e,Ve)}function Pe(e){return v(e,Ve)}async function ce(e){let{client:t,adapter:n,network:o,mint:a,amountRaw:r,titleID:l,category:p}=e;if(te())return Te("deposit-onchain");let s=t.auth.context?.userID;if(!s)return x("deposit-onchain","Not logged in.");if(r<=0n)return x("deposit-onchain","Amount must be positive.");let f;try{f=await n.depositSpl({mint:a,amountRaw:r,userID:s,titleID:l,category:core.normalizeBlockchainCategory(p)});}catch(y){return x("deposit-onchain",ee(y))}let d=await t.blockchain.depositToken(o.NetworkID??"",f);return d.ok?{ok:true,onChainTxHash:f,data:d.data}:x("report",d.error,{onChainTxHash:f})}async function pe(e){let{client:t,adapter:n,currencyID:o,networkID:a,walletAddress:r,amount:l,category:p}=e;if(te())return Te("request");let s=await t.blockchain.requestTokenWithdrawal(o,a,r,l,p);if(!s.ok)return x("request",s.error);let f=s.data.SolanaSignature,d=s.data.TitleTransactionID??void 0;if(!f)return x("request","Withdrawal response carried no Solana signature.",{titleTransactionID:d});let y;try{y=await n.submitWithdrawal(f);}catch(D){return x("withdraw-onchain",ee(D),{titleTransactionID:d})}if(!d)return x("confirm","Missing TitleTransactionID.",{onChainTxHash:y});let h=await t.blockchain.confirmWithdrawal(d,y);return h.ok?{ok:true,onChainTxHash:y,data:s.data}:x("confirm",h.error,{onChainTxHash:y,titleTransactionID:d})}async function de(e){let{client:t,networkID:n,walletAddress:o,signMessage:a}=e;if(te())return Pe("challenge");let r=await t.auth.requestWalletChallenge(o,n);if(!r.ok)return v("challenge",r.error);let l;try{let s=await a(new TextEncoder().encode(r.data.Message));l=qe(s);}catch(s){return v("sign",ee(s))}let p=await t.auth.loginWithWallet(o,n,l);return p.ok?{ok:true,data:p.data}:v("login",p.error)}async function Ce(e){let{client:t,networkID:n,walletAddress:o,signMessage:a}=e;if(te())return Pe("challenge");let r=await t.auth.linkWallet(o,n);if(!r.ok)return v("challenge",r.error);if(!r.data.Challenge)return v("challenge","No challenge was issued.");let l;try{let s=await a(new TextEncoder().encode(r.data.Challenge));l=qe(s);}catch(s){return v("sign",ee(s))}let p=await t.auth.linkWallet(o,n,l);return p.ok?{ok:true,data:p.data}:v("login",p.error)}function qe(e){let t="0x";for(let n of e)t+=n.toString(16).padStart(2,"0");return t}var je="Wallet not connected.";function Dt(e,t,n){let{address:o}=react.useAppKitAccount(),{walletProvider:a}=react.useAppKitProvider("solana"),r=o??null,l=a?.signMessage?.bind(a);return {connected:!!r,account:r,loginWithWallet:(p,s)=>{let f=s??r;return f?l?de({client:e,networkID:p,walletAddress:f,signMessage:l}):Promise.resolve(v("sign","The connected wallet does not support message signing.")):Promise.resolve(v("challenge",je))},depositToken:p=>ce({client:e,adapter:n,titleID:t,...p}),withdrawToken:p=>{let s=p.walletAddress??r;return s?pe({client:e,adapter:n,...p,walletAddress:s}):Promise.resolve(x("request",je))}}}var Et=18e4,Ze=9e4;function Rt(e){try{let n=e?.session?.peer?.metadata?.redirect,o=n?.native||n?.universal;return !o||typeof window>"u"?!1:(window.location.href=o,!0)}catch{return false}}function Je(e,t){return new Promise((n,o)=>{let a=setTimeout(()=>o(new Error("The wallet request timed out.")),t);e.then(r=>{clearTimeout(a),n(r);},r=>{clearTimeout(a),o(r instanceof Error?r:new Error(String(r)));});})}function vt(e){let t="Wallet sign-in failed. Please try again.";return e instanceof Error?/user (rejected|denied|cancelled|canceled)|rejected the request/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.":t:t}function Bt(e){let{client:t,networkID:n,onAuthenticated:o,disabled:a,label:r,style:l,autoStart:p,mode:s="login",onLinked:f}=e,{address:d,isConnected:y}=react.useAppKitAccount(),{walletProvider:h}=react.useAppKitProvider("solana"),[D,S]=react$1.useState(false),[A,g]=react$1.useState(null),[W,P]=react$1.useState(false),[O,Y]=react$1.useState(false),z=react$1.useRef(null),Z=react$1.useRef(0),M=react$1.useCallback(()=>{z.current&&clearTimeout(z.current),z.current=null;},[]);react$1.useEffect(()=>M,[M]);let ie=react$1.useRef(false),J=react$1.useCallback(async()=>{let U=++Z.current,R=()=>Z.current===U,V=h?.signMessage?.bind(h);if(!d||!V){g("The connected wallet cannot sign messages."),S(false);return}S(true),g(null);try{if(Y(!0),s==="link"){let F=await Je(Ce({client:t,networkID:n,walletAddress:d,signMessage:V}),Ze);if(!R())return;if(F.ok){f?.(F.data.PlayAccess??null);return}g(F.stage==="sign"?"Signature declined.":core.authErrorText(F.error,"Could not link the wallet."));return}let K=await Je(de({client:t,networkID:n,walletAddress:d,signMessage:V}),Ze);if(!R())return;if(K.ok){o();return}g(K.stage==="sign"?"Signature declined.":core.authErrorText(K.error,"Wallet sign-in failed."));}catch(K){if(!R())return;console.error("[idosgames/wallet] solana sign-in failed:",K),g(vt(K));}finally{R()&&(S(false),Y(false));}},[d,h,t,n,o,s,f]),$=react$1.useCallback(()=>{Rt(h)||Q()?.open();},[h]);react$1.useEffect(()=>{!W||!y||!d||!h||(P(false),M(),J());},[W,y,d,h,J,M]);let L=()=>{if(O){$();return}if(g(null),ie.current=true,y&&d&&h){J();return}let U=Q();if(!U){g("Wallet sign-in is not configured for this title.");return}S(true),P(true),M(),z.current=setTimeout(()=>{P(false),S(false),g("No wallet was connected.");},Et),U.open();};return react$1.useEffect(()=>{!p||ie.current||(ie.current=true,L());},[p]),jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:L,disabled:a,style:{...Ot,...a?{opacity:.6,cursor:"default"}:null,...l},children:O?"Waiting for signature \u2014 tap to open wallet":D?"Check your wallet\u2026":y?r??(s==="link"?"Link wallet":"Sign in with wallet"):"Connect wallet"}),A&&jsxRuntime.jsx("span",{role:"alert",style:_t,children:A})]})}var Ot={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},_t={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};var Gt="e000c6afc62f69cc",$t="b59a5e563e7306ba",zt="d668e18c1bdc33f1",ye=new web3_js.PublicKey("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"),Vt="1nc1nerator11111111111111111111111111111111",Qe=177,qt=3e5,tt=40,nt=4,ot=tt+32*nt,jt=ot+8,B=class extends Error{constructor(n,o){super(o);this.code=n;this.name="PlatformPoolError";}code};function me(e){let t=(e??"").replace(/^0x/i,""),n=new Uint8Array(t.length>>1);for(let o=0;o<n.length;o++)n[o]=parseInt(t.slice(o*2,o*2+2),16);return n}function ne(e){let t=buffer.Buffer.alloc(8);return t.writeBigUInt64LE(BigInt(e||0)),t}function Yt(e){let t=buffer.Buffer.alloc(8);return t.writeBigInt64LE(BigInt(e||0)),t}function re(e){let t=buffer.Buffer.from(e??"","utf8"),n=buffer.Buffer.alloc(4);return n.writeUInt32LE(t.length),buffer.Buffer.concat([n,t])}async function et(e){let t=await globalThis.crypto.subtle.digest("SHA-256",new TextEncoder().encode(e??""));return new Uint8Array(t)}function rt(e,t,n){return j(e,buffer.Buffer.from("title_balance"),buffer.Buffer.from(t),n.toBuffer())}function Zt(e){return buffer.Buffer.concat([buffer.Buffer.from(Gt,"hex"),ne(e.amountRaw),re(e.userID),re(e.titleID),re(e.category),buffer.Buffer.from(e.titleHash)])}function Jt(e,t){let n=e.Splits??[],o=buffer.Buffer.alloc(4);return o.writeUInt32LE(n.length),buffer.Buffer.concat([buffer.Buffer.from(e.Domain==="SPL_DEV"?zt:$t,"hex"),ne(e.Amount),ne(e.BurnAmount),ne(e.Nonce),Yt(e.ExpiresAt),o,...n.map(a=>buffer.Buffer.concat([buffer.Buffer.from(new web3_js.PublicKey(a.To??"").toBytes()),ne(a.Amount)])),re(e.UserID),re(e.TitleID),re(e.Category),buffer.Buffer.from(t)])}function oe(e,t,n){return web3_js.PublicKey.findProgramAddressSync([t.toBuffer(),n.toBuffer(),e.toBuffer()],ye)[0]}function Xt(e,t,n,o,a){return new web3_js.TransactionInstruction({programId:ye,keys:[{pubkey:e,isSigner:true,isWritable:true},{pubkey:t,isSigner:false,isWritable:true},{pubkey:n,isSigner:false,isWritable:false},{pubkey:o,isSigner:false,isWritable:false},{pubkey:web3_js.SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:a,isSigner:false,isWritable:false}],data:buffer.Buffer.from([1])})}function j(e,...t){return web3_js.PublicKey.findProgramAddressSync(t,e)[0]}function Qt(e){let{programId:t,user:n,mint:o,tokenProgram:a}=e,r=j(t,buffer.Buffer.from("vault"));return new web3_js.TransactionInstruction({programId:t,keys:[{pubkey:j(t,buffer.Buffer.from("config")),isSigner:false,isWritable:false},{pubkey:r,isSigner:false,isWritable:true},{pubkey:o,isSigner:false,isWritable:false},{pubkey:n,isSigner:true,isWritable:true},{pubkey:oe(o,n,a),isSigner:false,isWritable:true},{pubkey:oe(o,r,a),isSigner:false,isWritable:true},{pubkey:a,isSigner:false,isWritable:false},{pubkey:ye,isSigner:false,isWritable:false},{pubkey:web3_js.SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:rt(t,e.titleHash,o),isSigner:false,isWritable:true}],data:Zt(e)})}function en(e){let{sig:t,payer:n,tokenProgram:o,titleHash:a}=e,r=new web3_js.PublicKey(t.ProgramID??""),l=new web3_js.PublicKey(t.Mint??""),p=new web3_js.PublicKey(t.WalletAddress??""),s=j(r,buffer.Buffer.from("vault")),f=new web3_js.PublicKey(Vt),d=(t.Splits??[]).map(A=>new web3_js.PublicKey(A.To??"")),y=d.map(A=>oe(l,A,o)),h=web3_js.Ed25519Program.createInstructionWithPublicKey({publicKey:me(t.Ed25519PublicKey),message:me(t.Ed25519Message),signature:me(t.SignatureHex)}),D=d.map((A,g)=>Xt(n,y[g],A,l,o)),S=new web3_js.TransactionInstruction({programId:r,keys:[{pubkey:j(r,buffer.Buffer.from("config")),isSigner:false,isWritable:false},{pubkey:n,isSigner:true,isWritable:true},{pubkey:s,isSigner:false,isWritable:true},{pubkey:j(r,buffer.Buffer.from("nonce"),ne(t.Nonce)),isSigner:false,isWritable:true},{pubkey:l,isSigner:false,isWritable:false},{pubkey:p,isSigner:false,isWritable:false},{pubkey:oe(l,s,o),isSigner:false,isWritable:true},{pubkey:oe(l,p,o),isSigner:false,isWritable:true},{pubkey:f,isSigner:false,isWritable:false},{pubkey:oe(l,f,o),isSigner:false,isWritable:true},{pubkey:web3_js.SYSVAR_INSTRUCTIONS_PUBKEY,isSigner:false,isWritable:false},{pubkey:o,isSigner:false,isWritable:false},{pubkey:ye,isSigner:false,isWritable:false},{pubkey:web3_js.SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:rt(r,a,l),isSigner:false,isWritable:true},...y.map(A=>({pubkey:A,isSigner:false,isWritable:true}))],data:Jt(t,a)});return [h,...D,S]}async function tn(e,t,n){let o=async r=>{let l=(await e.getSignatureStatuses([t],{searchTransactionHistory:r})).value[0];if(l?.err)throw new B("TRANSACTION_FAILED",`transaction ${t} failed: ${JSON.stringify(l.err)}`);return l},a=r=>r?.confirmationStatus==="confirmed"||r?.confirmationStatus==="finalized";for(let r=1;;r++){await new Promise(s=>setTimeout(s,nn));let l=null;try{l=await o(!1);}catch(s){if(s instanceof B)throw s}if(a(l))return;if(!(l||r%on!==0||await e.getBlockHeight("confirmed").catch(()=>-1)<=n)){if(a(await o(true).catch(()=>null)))return;throw new B("TRANSACTION_EXPIRED",`transaction ${t} expired: block height exceeded`)}}}var nn=2e3,on=5;function Ee(e){let{connection:t,signTransaction:n}=e;async function o(r){let l=await t.getAccountInfo(r);if(!l)throw new B("MINT_NOT_FOUND",`mint ${r.toBase58()} not found`);return l.owner}async function a(r,l){let{blockhash:p,lastValidBlockHeight:s}=await t.getLatestBlockhash("confirmed"),f=new web3_js.Transaction;f.feePayer=r,f.recentBlockhash=p,f.add(...l);let d=await n(f),y=await t.sendRawTransaction(d.serialize());return await tn(t,y,s),y}return {async depositSpl({mint:r,amountRaw:l,userID:p,titleID:s,category:f}){let d=new web3_js.PublicKey(e.owner),y=new web3_js.PublicKey(r),h=await o(y);return a(d,[Qt({programId:new web3_js.PublicKey(e.programId),user:d,mint:y,tokenProgram:h,amountRaw:l,userID:p,titleID:s,category:f,titleHash:await et(s)})])},async submitWithdrawal(r){if(!r.ProgramID||!r.Mint||!r.WalletAddress)throw new B("BAD_VOUCHER","the voucher has no program, mint or wallet");let l=new web3_js.PublicKey(e.owner),p=new web3_js.PublicKey(r.ProgramID),s=await t.getAccountInfo(j(p,buffer.Buffer.from("config")));if(!s)throw new B("POOL_NOT_ON_THIS_CLUSTER","the pool's config account is not on this cluster");if(s.data.length!==Qe)throw new B("POOL_NOT_MIGRATED",`config is ${s.data.length} bytes, expected ${Qe} (migrate_config not run)`);let f=buffer.Buffer.from(s.data);if(f[jt]===1)throw new B("POOL_PAUSED","pool withdrawals are paused");let d=f.readBigUInt64LE(ot);if(d!==BigInt(r.SignatureEpoch||0))throw new B("VOUCHER_REVOKED",`signature epoch mismatch: voucher ${r.SignatureEpoch}, on-chain ${d}`);let y=buffer.Buffer.from(me(r.Ed25519PublicKey)),h=false;for(let S=0;S<nt;S++){let A=tt+S*32;y.equals(f.subarray(A,A+32))&&(h=true);}if(!h)throw new B("SIGNER_NOT_TRUSTED","the voucher's signer is not in the pool's server_pubkeys");let D=await o(new web3_js.PublicKey(r.Mint));return a(l,[web3_js.ComputeBudgetProgram.setComputeUnitLimit({units:qt}),...en({sig:r,payer:l,tokenProgram:D,titleHash:await et(r.TitleID??"")})])}}}var b=(e,t)=>`var(--idos-ui-${e}, ${t})`,i={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")},it={green:[i.green,i.greenDeep,i.onGreen],blue:[i.blue,i.blueDeep,i.onBlue],gold:[i.gold,i.goldDeep,i.onGold],red:[i.red,i.redDeep,"#ffffff"]},I={color:i.text,fontWeight:800,textShadow:i.textOutline,letterSpacing:.2},Re={boxSizing:"border-box",background:`linear-gradient(180deg, ${i.panel} 0%, ${i.panelDeep} 100%)`,border:`2px solid ${i.panelEdge}`,borderRadius:i.radius,boxShadow:i.panelShadow},G={boxSizing:"border-box",background:i.well,border:`2px solid ${i.panelEdge}`,boxShadow:i.wellShadow,borderRadius:14};function ue(e,t=false,n="md"){let[o,a,r]=t?["#8e95b8","#5b6187","#ffffff"]:it[e];return {...I,color:r,boxSizing:"border-box",fontFamily:i.font,fontSize:n==="sm"?13:n==="lg"?18:16,border:"none",borderRadius:i.buttonRadius,padding:n==="sm"?"6px 12px":n==="lg"?"13px 22px":"10px 18px",minHeight:n==="sm"?34:n==="lg"?52:44,cursor:t?"default":"pointer",background:`linear-gradient(180deg, ${o} 0%, ${a} 100%)`,boxShadow:`0 4px 0 ${i.edge}, inset 0 2px 0 rgba(255,255,255,.35)`,opacity:t?.75:1,display:"inline-flex",alignItems:"center",justifyContent:"center",gap:8}}function st(e){let[t,n,o]=it[e];return {background:`linear-gradient(180deg, ${t} 0%, ${n} 100%)`,color:o,borderRadius:16,boxShadow:`0 4px 0 ${i.edge}, inset 0 2px 0 rgba(255,255,255,.3)`}}var N={...I,fontSize:13,color:i.textDim},rn=["ru","kk","uk","be","ky","uz","tg"];function an(){if(typeof navigator>"u")return false;let e=(navigator.language||"").toLowerCase();return rn.some(t=>e.startsWith(t))}var at={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."},sn={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 u(e,t){let n=(an()?sn:at)[e]??at[e];for(let[o,a]of Object.entries(t??{}))n=n.replace(`{${o}}`,String(a));return n}var pn=/^(Not enough confirmations|Transaction not found on chain)/,dn=8,un=5e3;function fn(e,t){let n=Math.max(0,Math.floor(t||0)),[o="0",a=""]=e.split(".");if(a.length<=n)return e;let r=a.slice(0,n),l=BigInt(o+r)+(/^0*$/.test(a.slice(n))?BigInt(0):BigInt(1));if(n===0)return l.toString();let p=l.toString().padStart(n+1,"0");return `${p.slice(0,-n)}.${p.slice(-n)}`.replace(/\.?0+$/,"")}function Oe(e,t=6){let n=Number(e);return Number.isFinite(n)?n.toLocaleString("en-US",{maximumFractionDigits:Math.max(0,t)}).replace(/,/g," "):String(e)}var pt=e=>e.length>14?`${e.slice(0,6)}\u2026${e.slice(-4)}`:e,lt=e=>/^\d+(\.\d+)?$/.test(e)&&Number(e)>0;function dt({client:e,engine:t,onClose:n,style:o,topUp:a}){let[,r]=react$1.useReducer(m=>m+1,0),[l,p]=react$1.useState(false),[s,f]=react$1.useState({}),[d,y]=react$1.useState({}),[h,D]=react$1.useState("deposit"),[S,A]=react$1.useState(""),[g,W]=react$1.useState(""),[P,O]=react$1.useState(""),[Y,z]=react$1.useState(false),[Z,M]=react$1.useState(null),[ie,J]=react$1.useState(false);react$1.useEffect(()=>{let m=true;return (async()=>{let[C]=await Promise.all([e.blockchain.getDefinitions(),e.cache.ensureState(["InventoryV2","Blockchain"])]);if(!m||(p(true),!C.ok))return;let T={};for(let[H,q]of Object.entries(C.data.Blockchain?.Networks??{}))q.Type===t.networkType&&(T[H]=q);f(T);let X=C.data.CryptoCurrencies??{};y(X);let se=a?X[a.currencyID]?.Networks?.find(H=>!!H.NetworkID&&!!T[H.NetworkID]&&!!H.ContractAddress&&H.DepositsEnabled!==false&&T[H.NetworkID]?.DepositsEnabled!==false)?.NetworkID:null;A(se??Object.keys(T)[0]??"");})(),()=>{m=false;}},[e,t.networkType]),react$1.useEffect(()=>e.on("user:anyUpdated",r),[e]);let $=react$1.useMemo(()=>Object.entries(d).filter(([,m])=>m.Networks?.some(C=>C.NetworkID===S&&!!C.ContractAddress)),[d,S]);react$1.useEffect(()=>{let m=$[0]?.[0]??"";W(C=>a?a.currencyID:$.some(([T])=>T===C)?C:m);},[$,a]);let L=S?s[S]:void 0,U=g?d[g]:void 0,R=U?.Networks?.find(m=>m.NetworkID===S),V=g?e.data.user.getCryptoCurrencyAmount(g):"0",K=U?.DisplayName??g,F=g?U?.UnbackedRewardCurrencyID||`${g}_IOU`:"",ut=F&&Number(e.data.user.state?.InventoryV2?.VirtualCurrencies?.[F]?.Amount??0)||0,ft=!!F&&e.data.user.state?.InventoryV2?.VirtualCurrencies?.[F]!=null,_e=U?.DisplayDecimals??6,fe=!!t.address,Le=!!a&&!!R?.ContractAddress&&g===a.currencyID,we=a&&R?fn(a.amount,R.Decimals??18):"",he=a?d[a.currencyID]?.DisplayName??a.currencyID:"",Ue=Number(R?.MinWithdraw??0);async function be(m,C){z(true),M(null);try{let T=await C();return M({tab:m,res:T}),T.ok&&O(""),T}finally{z(false);}}async function Ke(m){let C=await He();if(!C)return x("approve",u("noNetworks"));let T=await t.deposit({...m,network:C});if(T.ok||T.stage!=="report"||!T.onChainTxHash)return T;let X=T.onChainTxHash,se=T.error;J(true);try{for(let H=1;H<=dn&&pn.test(se);H++){await new Promise(bt=>setTimeout(bt,un));let q=await e.blockchain.depositToken(S,X);if(q.ok)return {ok:!0,onChainTxHash:X,data:q.data};if(/^Transaction hash already used/.test(q.error))return await e.cache.ensureState(["InventoryV2"],{force:!0}),{ok:!0,onChainTxHash:X,data:null};se=q.error;}}finally{J(false);}return {...T,error:se}}async function He(){let m=await e.blockchain.getDefinitions({forceRefresh:true});return m.ok?m.data.Blockchain?.Networks?.[S]??null:null}async function gt(){let m=await He();return m?t.withdraw({network:m,networkID:S,currencyID:g,amount:P}):x("request",u("noNetworks"))}let Se=ie?u("confirming"):h==="withdraw"&&!a?u("withdrawing"):u("depositing"),mt=fe?jsxRuntime.jsxs("div",{style:{...G,display:"flex",alignItems:"center",gap:10,padding:"8px 8px 8px 12px"},children:[jsxRuntime.jsx("span",{style:yn,"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:pt(t.address)}),L?jsxRuntime.jsx("span",{style:{...N,fontSize:12},children:L.DisplayName??S}):null]}),jsxRuntime.jsx("button",{type:"button",className:"idos-press",style:wn,onClick:t.disconnect,children:u("disconnect")})]}):jsxRuntime.jsxs("div",{style:{display:"grid",gap:8},children:[jsxRuntime.jsx("span",{style:N,children:u("connectHint")}),t.connectChoices.length===0?jsxRuntime.jsx("div",{style:{...G,padding:"10px 12px",...N},children:u("notConfigured")}):t.connectChoices.length===1?jsxRuntime.jsx("button",{type:"button",className:"idos-press",style:{...ue("blue",false,"lg"),width:"100%"},onClick:t.connectChoices[0].connect,children:u("connect")}):t.connectChoices.map(m=>jsxRuntime.jsxs("button",{type:"button",className:"idos-press",style:hn,onClick:m.connect,children:[jsxRuntime.jsx("span",{style:{flex:1,textAlign:"left"},children:m.label}),jsxRuntime.jsx("span",{"aria-hidden":true,style:{color:i.textDim},children:"\u203A"})]},m.key))]}),Me=g?jsxRuntime.jsx(xn,{icon:jsxRuntime.jsx(kn,{assets:U?.AssetPaths,name:K}),name:K,backed:Number(V)||0,unbacked:ut,hasIou:ft,decimals:_e}):null,yt=jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[Object.keys(s).length>1?jsxRuntime.jsx(ct,{caption:u("network"),value:S,onChange:A,options:Object.entries(s).map(([m,C])=>[m,C.DisplayName??m])}):null,$.length===0?jsxRuntime.jsx("div",{style:{...G,padding:"10px 12px",...N},children:u("noTokens")}):$.length>1?jsxRuntime.jsx(ct,{caption:u("token"),value:g,onChange:W,options:$.map(([m,C])=>[m,C.DisplayName??m])}):null]}),wt=jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(Tn,{value:h,onChange:m=>{D(m),M(null),O("");}}),yt,jsxRuntime.jsxs("div",{style:{display:"grid",gap:6},children:[jsxRuntime.jsx("span",{style:N,children:u("amount")}),jsxRuntime.jsxs("div",{style:{...G,display:"flex",alignItems:"center",gap:8,padding:"4px 6px 4px 14px"},children:[jsxRuntime.jsx("input",{style:Sn,inputMode:"decimal",placeholder:"0.0",value:P,onChange:m=>O(m.target.value.replace(",","."))}),jsxRuntime.jsx("span",{style:{...N,fontSize:14},children:K}),h==="withdraw"&&Number(V)>0?jsxRuntime.jsx("button",{type:"button",className:"idos-press",style:ue("gold",false,"sm"),onClick:()=>O(String(V)),children:u("max")}):null]}),h==="withdraw"&&Ue>0?jsxRuntime.jsx("span",{style:{...N,fontSize:12},children:u("minWithdraw",{n:Oe(Ue,_e)})}):null]}),h==="deposit"?jsxRuntime.jsx(Be,{tone:"green",busy:Y,busyText:Se,disabled:!fe||!R?.ContractAddress||!lt(P),onClick:()=>{!L||!R||be("deposit",()=>Ke({network:L,binding:R,currencyID:g,amount:P}));},children:u("deposit")}):jsxRuntime.jsx(Be,{tone:"blue",busy:Y,busyText:Se,disabled:!fe||!g||!lt(P),onClick:()=>{L&&be("withdraw",()=>gt());},children:u("withdraw")})]}),ht=a?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{style:{...st("gold"),padding:"12px 14px",display:"grid",gap:4},children:Le?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("span",{style:{...I,color:"inherit",fontSize:13,opacity:.9},children:u("topUpNeed")}),jsxRuntime.jsxs("span",{style:{...I,color:"inherit",fontSize:24,lineHeight:1.1},children:[we," ",he," ",u("topUpMore")]}),jsxRuntime.jsx("span",{style:{fontSize:13,fontWeight:600,opacity:.95},children:u("topUpHint")})]}):jsxRuntime.jsx("span",{style:{...I,color:"inherit",fontSize:15},children:l?u("topUpCannot",{name:he}):u("loading")})}),Me,jsxRuntime.jsx(Be,{tone:"green",busy:Y,busyText:Se,disabled:!fe||!Le,onClick:()=>{!L||!R||be("deposit",()=>Ke({network:L,binding:R,currencyID:g,amount:we})).then(m=>{m.ok&&a.onDone(true);});},children:u("depositAmount",{amount:we,name:he})})]}):null,Fe=!!n;return jsxRuntime.jsxs("div",{style:{...mn,...Fe?{...Re,padding:16,width:360,maxWidth:"100%",maxHeight:"80vh",overflow:"auto"}:{},...o},children:[jsxRuntime.jsx("style",{children:gn}),Fe?jsxRuntime.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[jsxRuntime.jsx("span",{style:{...I,fontSize:20},children:a?u("topUpTitle"):u("title")}),jsxRuntime.jsx("button",{type:"button",className:"idos-press",style:bn,onClick:n,"aria-label":"\u2715",children:"\u2715"})]}):null,mt,l?Object.keys(s).length===0?jsxRuntime.jsx("div",{style:{...G,padding:"12px 14px",...N},children:u("noNetworks")}):a?ht:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[Me,wt]}):jsxRuntime.jsx("div",{style:{...N,textAlign:"center",padding:12},children:u("loading")}),Z?jsxRuntime.jsx(Pn,{tab:Z.tab,result:Z.res}):null]})}var gn="@keyframes idosw-spin { to { transform: rotate(360deg) } }",mn={pointerEvents:"auto",color:i.text,fontFamily:i.font,display:"flex",flexDirection:"column",gap:12,boxSizing:"border-box",width:"100%",minWidth:0,maxWidth:"100%"},yn={width:10,height:10,borderRadius:"50%",background:i.green,boxShadow:`0 0 0 3px color-mix(in srgb, ${i.green} 30%, transparent)`,flex:"none"},wn={...I,fontFamily:i.font,fontSize:13,color:i.textDim,background:"transparent",border:`2px solid ${i.line}`,borderRadius:10,padding:"5px 10px",cursor:"pointer"},hn={...G,...I,fontFamily:i.font,fontSize:15,display:"flex",alignItems:"center",gap:10,padding:"10px 12px",cursor:"pointer",width:"100%"},bn={...ue("red",false,"sm"),width:36,minHeight:36,padding:0,borderRadius:"50%"},Sn={...I,fontFamily:i.font,fontSize:22,flex:1,minWidth:0,background:"transparent",border:"none",outline:"none",padding:"6px 0"};function kn({assets:e,name:t}){let n=e?.Default||e?.Icon||"",o={width:40,height:40,borderRadius:"50%",flex:"none",display:"grid",placeItems:"center",background:`linear-gradient(180deg, ${i.gold}, ${i.goldDeep})`,boxShadow:`0 3px 0 ${i.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:(t.trim()[0]??"?").toUpperCase()})}function xn({icon:e,name:t,backed:n,unbacked:o,hasIou:a,decimals:r}){let[l,p]=react$1.useState(false),s=(f,d,y=false)=>jsxRuntime.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:16},children:[jsxRuntime.jsx("span",{style:{...N,fontSize:13},children:f}),jsxRuntime.jsx("span",{style:{...I,fontSize:14,color:y?i.textDim:i.text},children:Oe(d,r)})]});return jsxRuntime.jsxs("div",{style:{position:"relative"},onMouseEnter:()=>p(true),onMouseLeave:()=>p(false),children:[jsxRuntime.jsxs("button",{type:"button","aria-expanded":l,onClick:()=>p(f=>!f),onBlur:()=>p(false),style:{...G,display:"flex",alignItems:"center",gap:12,padding:"10px 14px",width:"100%",cursor:"pointer",font:"inherit",textAlign:"left"},children:[e,jsxRuntime.jsxs("span",{style:{display:"grid",minWidth:0,flex:1},children:[jsxRuntime.jsx("span",{style:{...N,fontSize:12},children:u("balance")}),jsxRuntime.jsxs("span",{style:{...I,fontSize:22,lineHeight:1.1},children:[Oe(n+o,r)," ",jsxRuntime.jsx("span",{style:{fontSize:15,color:i.textDim},children:t})]})]}),jsxRuntime.jsx("span",{"aria-hidden":true,style:{...N,fontSize:16},children:"\u24D8"})]}),l?jsxRuntime.jsxs("div",{role:"tooltip",style:{...Re,position:"absolute",left:0,right:0,top:"calc(100% + 6px)",zIndex:5,padding:"10px 12px",display:"grid",gap:6},children:[s(u("backed"),n),a?s(u("unbacked"),o,o===0):null,jsxRuntime.jsx("div",{style:{height:1,background:i.line}}),s(u("total"),n+o),jsxRuntime.jsx("span",{style:{fontSize:12,color:i.textDim,lineHeight:1.35},children:a?u("iouHint"):u("backedHint")})]}):null]})}function Tn({value:e,onChange:t}){let n=[["deposit",u("deposit")],["withdraw",u("withdraw")]];return jsxRuntime.jsx("div",{role:"tablist",style:{display:"flex",gap:6,padding:4,borderRadius:16,background:i.wellSoft},children:n.map(([o,a])=>{let r=o===e;return jsxRuntime.jsx("button",{role:"tab","aria-selected":r,type:"button",className:"idos-press",onClick:()=>!r&&t(o),style:{...I,fontFamily:i.font,fontSize:15,flex:1,border:"none",borderRadius:12,padding:"9px 14px",cursor:"pointer",color:r?i.onBlue:i.textDim,background:r?`linear-gradient(180deg, ${i.blue}, ${i.blueDeep})`:"transparent",boxShadow:r?`0 3px 0 ${i.edge}, inset 0 2px 0 rgba(255,255,255,.3)`:"none",transition:`background ${i.fast} ease`},children:a},o)})})}function ct({caption:e,value:t,onChange:n,options:o}){return jsxRuntime.jsxs("label",{style:{display:"grid",gap:6},children:[jsxRuntime.jsx("span",{style:N,children:e}),jsxRuntime.jsxs("span",{style:{position:"relative",display:"block"},children:[jsxRuntime.jsx("select",{value:t,onChange:a=>n(a.target.value),style:{...G,...I,fontFamily:i.font,fontSize:15,width:"100%",padding:"10px 36px 10px 12px",appearance:"none",WebkitAppearance:"none",cursor:"pointer",outline:"none"},children:o.map(([a,r])=>jsxRuntime.jsx("option",{value:a,style:{color:"#111"},children:r},a))}),jsxRuntime.jsx("span",{"aria-hidden":true,style:{position:"absolute",right:14,top:"50%",transform:"translateY(-50%)",color:i.textDim,pointerEvents:"none"},children:"\u25BE"})]})]})}function Be({tone:e,busy:t,busyText:n,disabled:o,onClick:a,children:r}){return jsxRuntime.jsx("button",{type:"button",className:"idos-press",disabled:o||t,onClick:a,style:{...ue(e,o&&!t,"lg"),width:"100%"},children:t?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]}):r})}function Pn({tab:e,result:t}){let n=t.ok,o={borderRadius:14,padding:"10px 12px",display:"grid",gap:4,background:`color-mix(in srgb, ${n?i.green:i.red} 22%, transparent)`,border:`2px solid color-mix(in srgb, ${n?i.green:i.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 ",e==="withdraw"?u("doneWithdraw"):u("doneDeposit")]}),jsxRuntime.jsxs("span",{style:{...N,fontSize:12},children:[u("tx"),": ",pt(t.onChainTxHash)]})]}):jsxRuntime.jsxs("div",{style:o,role:"alert",children:[jsxRuntime.jsxs("span",{style:{...I,fontSize:15},children:["\u2715 ",u("failed")]}),jsxRuntime.jsx("span",{style:{fontSize:13,color:i.text,opacity:.9},children:t.error}),t.titleTransactionID?jsxRuntime.jsx("span",{style:{...N,fontSize:12},children:u("debited")}):null]})}var Rn=103;function vn(e){return (e.ChainID===Rn?ke:le).rpcUrls.default.http[0]}function Bn(e){let{client:t,walletConnectProjectId:n,appName:o,onClose:a,style:r,topUp:l}=e,[p,s]=react$1.useState(n??"");react$1.useEffect(()=>{if(n)return;let g=true;return (async()=>{let W=await t.blockchain.getDefinitions();if(!g||!W.ok)return;let P=W.data.Blockchain?.WalletLogin?.WalletConnectProjectId;P&&s(P);})(),()=>{g=false;}},[t,n]);let f=react$1.useMemo(()=>p?(xe({walletConnectProjectId:p,appName:o}),true):false,[p,o]),{address:d,isConnected:y}=react.useAppKitAccount(),{walletProvider:h}=react.useAppKitProvider("solana"),D=y&&d?d:null,S=(g,W)=>Ee({connection:new web3_js.Connection(vn(g),"confirmed"),owner:W,programId:g.RewardPoolAddress??"",signTransaction:async P=>{if(!h)throw new Error("Wallet not connected.");return h.signTransaction(P)}});return jsxRuntime.jsx(dt,{client:t,engine:{networkType:"Solana",address:D,connectChoices:f?[{key:"appkit",label:"Connect wallet",connect:()=>{Q()?.open();}}]:[],disconnect:()=>{Q()?.disconnect("solana");},deposit:async({network:g,binding:W,amount:P})=>{if(!D)return x("deposit-onchain","Wallet not connected.");if(!W.ContractAddress)return x("deposit-onchain","This token cannot be deposited.");if(!g.RewardPoolAddress)return x("deposit-onchain","POOL_NOT_IN_REGISTRY");let O;try{O=viem.parseUnits(P,W.Decimals??9);}catch{return x("deposit-onchain","Invalid amount.")}return ce({client:t,adapter:S(g,D),network:g,mint:W.ContractAddress,amountRaw:O,titleID:t.titleID})},withdraw:async({network:g,networkID:W,currencyID:P,amount:O})=>D?pe({client:t,adapter:S(g,D),currencyID:P,networkID:W,walletAddress:D,amount:O}):x("request","Wallet not connected.")},onClose:a,style:r,topUp:l})}
2
- exports.PlatformPoolError=B;exports.SolanaWalletLogin=Bt;exports.SolanaWalletPanel=Bn;exports.createPlatformPoolAdapter=Ee;exports.createSolanaWalletConfig=xe;exports.solanaDevnet=ke;exports.solanaMainnet=le;exports.useSolanaBridge=Dt;
1
+ 'use strict';var appkitAdapterSolana=require('@reown/appkit-adapter-solana'),react=require('@reown/appkit/react'),core=require('@idosgames/core'),viem=require('viem'),react$1=require('react'),jsxRuntime=require('react/jsx-runtime'),web3_js=require('@solana/web3.js'),buffer=require('buffer');var le={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"},ke={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 Ge=null;function $e(e){Ge=e;}function Q(){return Ge}var ze=new Map;function xe(e){let{walletConnectProjectId:t,appName:n,appUrl:o,appIcon:a,wallets:r}=e,l=ze.get(t);if(l)return l;let p=e.networks??[le],s=o??(typeof window<"u"?window.location.origin:""),g={name:n??"iDosGames",description:n??"iDosGames game",url:s,icons:a?[a]:[]},d=new appkitAdapterSolana.SolanaAdapter(r?{wallets:r}:{});return $e(react.createAppKit({adapters:[d],networks:p,projectId:t,metadata:g,features:{analytics:false,email:false,socials:false}})),ze.set(t,d),d}function ee(e){return e instanceof viem.BaseError?e.shortMessage:e instanceof Error?e.message:String(e)}function x(e,t,n){return {ok:false,stage:e,error:t,...n}}function R(e,t){return {ok:false,stage:e,error:t}}var Ve="WALLET_USE_SITE_PANEL",Ct=/^[a-z0-9]{8}-preview\.idos\.games$/;function It(e=typeof window>"u"?"":window.location.hostname){let t=e.toLowerCase();return Ct.test(t)?true:t!=="localhost"&&t!=="127.0.0.1"?false:globalThis.__IDOS_PREVIEW__!=null}function te(){if(typeof window>"u"||It())return false;try{return window.self!==window.top}catch{return true}}function Te(e){return x(e,Ve)}function Pe(e){return R(e,Ve)}async function ce(e){let{client:t,adapter:n,network:o,mint:a,amountRaw:r,titleID:l,category:p}=e;if(te())return Te("deposit-onchain");let s=t.auth.context?.userID;if(!s)return x("deposit-onchain","Not logged in.");if(r<=0n)return x("deposit-onchain","Amount must be positive.");let g;try{g=await n.depositSpl({mint:a,amountRaw:r,userID:s,titleID:l,category:core.normalizeBlockchainCategory(p)});}catch(y){return x("deposit-onchain",ee(y))}let d=await t.blockchain.depositToken(o.NetworkID??"",g);return d.ok?{ok:true,onChainTxHash:g,data:d.data}:x("report",d.error,{onChainTxHash:g})}async function pe(e){let{client:t,adapter:n,currencyID:o,networkID:a,walletAddress:r,amount:l,category:p}=e;if(te())return Te("request");let s=await t.blockchain.requestTokenWithdrawal(o,a,r,l,p);if(!s.ok)return x("request",s.error);let g=s.data.SolanaSignature,d=s.data.TitleTransactionID??void 0;if(!g)return x("request","Withdrawal response carried no Solana signature.",{titleTransactionID:d});let y;try{y=await n.submitWithdrawal(g);}catch(D){return x("withdraw-onchain",ee(D),{titleTransactionID:d})}if(!d)return x("confirm","Missing TitleTransactionID.",{onChainTxHash:y});let h=await t.blockchain.confirmWithdrawal(d,y);return h.ok?{ok:true,onChainTxHash:y,data:s.data}:x("confirm",h.error,{onChainTxHash:y,titleTransactionID:d})}async function de(e){let{client:t,networkID:n,walletAddress:o,signMessage:a}=e;if(te())return Pe("challenge");let r=await t.auth.requestWalletChallenge(o,n);if(!r.ok)return R("challenge",r.error);let l;try{let s=await a(new TextEncoder().encode(r.data.Message));l=qe(s);}catch(s){return R("sign",ee(s))}let p=await t.auth.loginWithWallet(o,n,l);return p.ok?{ok:true,data:p.data}:R("login",p.error)}async function Ce(e){let{client:t,networkID:n,walletAddress:o,signMessage:a}=e;if(te())return Pe("challenge");let r=await t.auth.linkWallet(o,n);if(!r.ok)return R("challenge",r.error);if(!r.data.Challenge)return R("challenge","No challenge was issued.");let l;try{let s=await a(new TextEncoder().encode(r.data.Challenge));l=qe(s);}catch(s){return R("sign",ee(s))}let p=await t.auth.linkWallet(o,n,l);return p.ok?{ok:true,data:p.data}:R("login",p.error)}function qe(e){let t="0x";for(let n of e)t+=n.toString(16).padStart(2,"0");return t}var je="Wallet not connected.";function Nt(e,t,n){let{address:o}=react.useAppKitAccount(),{walletProvider:a}=react.useAppKitProvider("solana"),r=o??null,l=a?.signMessage?.bind(a);return {connected:!!r,account:r,loginWithWallet:(p,s)=>{let g=s??r;return g?l?de({client:e,networkID:p,walletAddress:g,signMessage:l}):Promise.resolve(R("sign","The connected wallet does not support message signing.")):Promise.resolve(R("challenge",je))},depositToken:p=>ce({client:e,adapter:n,titleID:t,...p}),withdrawToken:p=>{let s=p.walletAddress??r;return s?pe({client:e,adapter:n,...p,walletAddress:s}):Promise.resolve(x("request",je))}}}var Rt=18e4,Ze=9e4;function Bt(e){try{let n=e?.session?.peer?.metadata?.redirect,o=n?.native||n?.universal;return !o||typeof window>"u"?!1:(window.location.href=o,!0)}catch{return false}}function Je(e,t){return new Promise((n,o)=>{let a=setTimeout(()=>o(new Error("The wallet request timed out.")),t);e.then(r=>{clearTimeout(a),n(r);},r=>{clearTimeout(a),o(r instanceof Error?r:new Error(String(r)));});})}function Ot(e){let t="Wallet sign-in failed. Please try again.";return e instanceof Error?/user (rejected|denied|cancelled|canceled)|rejected the request/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.":t:t}function _t(e){let{client:t,networkID:n,onAuthenticated:o,disabled:a,label:r,style:l,autoStart:p,mode:s="login",onLinked:g}=e,{address:d,isConnected:y}=react.useAppKitAccount(),{walletProvider:h}=react.useAppKitProvider("solana"),[D,S]=react$1.useState(false),[A,f]=react$1.useState(null),[W,P]=react$1.useState(false),[O,M]=react$1.useState(false),z=react$1.useRef(null),Z=react$1.useRef(0),F=react$1.useCallback(()=>{z.current&&clearTimeout(z.current),z.current=null;},[]);react$1.useEffect(()=>F,[F]);let ie=react$1.useRef(false),J=react$1.useCallback(async()=>{let U=++Z.current,v=()=>Z.current===U,q=h?.signMessage?.bind(h);if(!d||!q){f("The connected wallet cannot sign messages."),S(false);return}S(true),f(null);try{if(M(!0),s==="link"){let G=await Je(Ce({client:t,networkID:n,walletAddress:d,signMessage:q}),Ze);if(!v())return;if(G.ok){g?.(G.data.PlayAccess??null);return}f(G.stage==="sign"?"Signature declined.":core.authErrorText(G.error,"Could not link the wallet."));return}let K=await Je(de({client:t,networkID:n,walletAddress:d,signMessage:q}),Ze);if(!v())return;if(K.ok){o();return}f(K.stage==="sign"?"Signature declined.":core.authErrorText(K.error,"Wallet sign-in failed."));}catch(K){if(!v())return;console.error("[idosgames/wallet] solana sign-in failed:",K),f(Ot(K));}finally{v()&&(S(false),M(false));}},[d,h,t,n,o,s,g]),V=react$1.useCallback(()=>{Bt(h)||Q()?.open();},[h]);react$1.useEffect(()=>{!W||!y||!d||!h||(P(false),F(),J());},[W,y,d,h,J,F]);let L=()=>{if(O){V();return}if(f(null),ie.current=true,y&&d&&h){J();return}let U=Q();if(!U){f("Wallet sign-in is not configured for this title.");return}S(true),P(true),F(),z.current=setTimeout(()=>{P(false),S(false),f("No wallet was connected.");},Rt),U.open();};return react$1.useEffect(()=>{!p||ie.current||(ie.current=true,L());},[p]),jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:L,disabled:a,style:{...Lt,...a?{opacity:.6,cursor:"default"}:null,...l},children:O?"Waiting for signature \u2014 tap to open wallet":D?"Check your wallet\u2026":y?r??(s==="link"?"Link wallet":"Sign in with wallet"):"Connect wallet"}),A&&jsxRuntime.jsx("span",{role:"alert",style:Ut,children:A})]})}var Lt={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},Ut={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};var zt="e000c6afc62f69cc",Vt="b59a5e563e7306ba",qt="d668e18c1bdc33f1",ye=new web3_js.PublicKey("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"),jt="1nc1nerator11111111111111111111111111111111",Qe=177,Yt=3e5,tt=40,nt=4,ot=tt+32*nt,Zt=ot+8,B=class extends Error{constructor(n,o){super(o);this.code=n;this.name="PlatformPoolError";}code};function me(e){let t=(e??"").replace(/^0x/i,""),n=new Uint8Array(t.length>>1);for(let o=0;o<n.length;o++)n[o]=parseInt(t.slice(o*2,o*2+2),16);return n}function ne(e){let t=buffer.Buffer.alloc(8);return t.writeBigUInt64LE(BigInt(e||0)),t}function Jt(e){let t=buffer.Buffer.alloc(8);return t.writeBigInt64LE(BigInt(e||0)),t}function re(e){let t=buffer.Buffer.from(e??"","utf8"),n=buffer.Buffer.alloc(4);return n.writeUInt32LE(t.length),buffer.Buffer.concat([n,t])}async function et(e){let t=await globalThis.crypto.subtle.digest("SHA-256",new TextEncoder().encode(e??""));return new Uint8Array(t)}function rt(e,t,n){return Y(e,buffer.Buffer.from("title_balance"),buffer.Buffer.from(t),n.toBuffer())}function Xt(e){return buffer.Buffer.concat([buffer.Buffer.from(zt,"hex"),ne(e.amountRaw),re(e.userID),re(e.titleID),re(e.category),buffer.Buffer.from(e.titleHash)])}function Qt(e,t){let n=e.Splits??[],o=buffer.Buffer.alloc(4);return o.writeUInt32LE(n.length),buffer.Buffer.concat([buffer.Buffer.from(e.Domain==="SPL_DEV"?qt:Vt,"hex"),ne(e.Amount),ne(e.BurnAmount),ne(e.Nonce),Jt(e.ExpiresAt),o,...n.map(a=>buffer.Buffer.concat([buffer.Buffer.from(new web3_js.PublicKey(a.To??"").toBytes()),ne(a.Amount)])),re(e.UserID),re(e.TitleID),re(e.Category),buffer.Buffer.from(t)])}function oe(e,t,n){return web3_js.PublicKey.findProgramAddressSync([t.toBuffer(),n.toBuffer(),e.toBuffer()],ye)[0]}function en(e,t,n,o,a){return new web3_js.TransactionInstruction({programId:ye,keys:[{pubkey:e,isSigner:true,isWritable:true},{pubkey:t,isSigner:false,isWritable:true},{pubkey:n,isSigner:false,isWritable:false},{pubkey:o,isSigner:false,isWritable:false},{pubkey:web3_js.SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:a,isSigner:false,isWritable:false}],data:buffer.Buffer.from([1])})}function Y(e,...t){return web3_js.PublicKey.findProgramAddressSync(t,e)[0]}function tn(e){let{programId:t,user:n,mint:o,tokenProgram:a}=e,r=Y(t,buffer.Buffer.from("vault"));return new web3_js.TransactionInstruction({programId:t,keys:[{pubkey:Y(t,buffer.Buffer.from("config")),isSigner:false,isWritable:false},{pubkey:r,isSigner:false,isWritable:true},{pubkey:o,isSigner:false,isWritable:false},{pubkey:n,isSigner:true,isWritable:true},{pubkey:oe(o,n,a),isSigner:false,isWritable:true},{pubkey:oe(o,r,a),isSigner:false,isWritable:true},{pubkey:a,isSigner:false,isWritable:false},{pubkey:ye,isSigner:false,isWritable:false},{pubkey:web3_js.SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:rt(t,e.titleHash,o),isSigner:false,isWritable:true}],data:Xt(e)})}function nn(e){let{sig:t,payer:n,tokenProgram:o,titleHash:a}=e,r=new web3_js.PublicKey(t.ProgramID??""),l=new web3_js.PublicKey(t.Mint??""),p=new web3_js.PublicKey(t.WalletAddress??""),s=Y(r,buffer.Buffer.from("vault")),g=new web3_js.PublicKey(jt),d=(t.Splits??[]).map(A=>new web3_js.PublicKey(A.To??"")),y=d.map(A=>oe(l,A,o)),h=web3_js.Ed25519Program.createInstructionWithPublicKey({publicKey:me(t.Ed25519PublicKey),message:me(t.Ed25519Message),signature:me(t.SignatureHex)}),D=d.map((A,f)=>en(n,y[f],A,l,o)),S=new web3_js.TransactionInstruction({programId:r,keys:[{pubkey:Y(r,buffer.Buffer.from("config")),isSigner:false,isWritable:false},{pubkey:n,isSigner:true,isWritable:true},{pubkey:s,isSigner:false,isWritable:true},{pubkey:Y(r,buffer.Buffer.from("nonce"),ne(t.Nonce)),isSigner:false,isWritable:true},{pubkey:l,isSigner:false,isWritable:false},{pubkey:p,isSigner:false,isWritable:false},{pubkey:oe(l,s,o),isSigner:false,isWritable:true},{pubkey:oe(l,p,o),isSigner:false,isWritable:true},{pubkey:g,isSigner:false,isWritable:false},{pubkey:oe(l,g,o),isSigner:false,isWritable:true},{pubkey:web3_js.SYSVAR_INSTRUCTIONS_PUBKEY,isSigner:false,isWritable:false},{pubkey:o,isSigner:false,isWritable:false},{pubkey:ye,isSigner:false,isWritable:false},{pubkey:web3_js.SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:rt(r,a,l),isSigner:false,isWritable:true},...y.map(A=>({pubkey:A,isSigner:false,isWritable:true}))],data:Qt(t,a)});return [h,...D,S]}async function on(e,t,n){let o=async r=>{let l=(await e.getSignatureStatuses([t],{searchTransactionHistory:r})).value[0];if(l?.err)throw new B("TRANSACTION_FAILED",`transaction ${t} failed: ${JSON.stringify(l.err)}`);return l},a=r=>r?.confirmationStatus==="confirmed"||r?.confirmationStatus==="finalized";for(let r=1;;r++){await new Promise(s=>setTimeout(s,rn));let l=null;try{l=await o(!1);}catch(s){if(s instanceof B)throw s}if(a(l))return;if(!(l||r%an!==0||await e.getBlockHeight("confirmed").catch(()=>-1)<=n)){if(a(await o(true).catch(()=>null)))return;throw new B("TRANSACTION_EXPIRED",`transaction ${t} expired: block height exceeded`)}}}var rn=2e3,an=5;function Ee(e){let{connection:t,signTransaction:n}=e;async function o(r){let l=await t.getAccountInfo(r);if(!l)throw new B("MINT_NOT_FOUND",`mint ${r.toBase58()} not found`);return l.owner}async function a(r,l){let{blockhash:p,lastValidBlockHeight:s}=await t.getLatestBlockhash("confirmed"),g=new web3_js.Transaction;g.feePayer=r,g.recentBlockhash=p,g.add(...l);let d=await n(g),y=await t.sendRawTransaction(d.serialize());return await on(t,y,s),y}return {async depositSpl({mint:r,amountRaw:l,userID:p,titleID:s,category:g}){let d=new web3_js.PublicKey(e.owner),y=new web3_js.PublicKey(r),h=await o(y);return a(d,[tn({programId:new web3_js.PublicKey(e.programId),user:d,mint:y,tokenProgram:h,amountRaw:l,userID:p,titleID:s,category:g,titleHash:await et(s)})])},async submitWithdrawal(r){if(!r.ProgramID||!r.Mint||!r.WalletAddress)throw new B("BAD_VOUCHER","the voucher has no program, mint or wallet");let l=new web3_js.PublicKey(e.owner),p=new web3_js.PublicKey(r.ProgramID),s=await t.getAccountInfo(Y(p,buffer.Buffer.from("config")));if(!s)throw new B("POOL_NOT_ON_THIS_CLUSTER","the pool's config account is not on this cluster");if(s.data.length!==Qe)throw new B("POOL_NOT_MIGRATED",`config is ${s.data.length} bytes, expected ${Qe} (migrate_config not run)`);let g=buffer.Buffer.from(s.data);if(g[Zt]===1)throw new B("POOL_PAUSED","pool withdrawals are paused");let d=g.readBigUInt64LE(ot);if(d!==BigInt(r.SignatureEpoch||0))throw new B("VOUCHER_REVOKED",`signature epoch mismatch: voucher ${r.SignatureEpoch}, on-chain ${d}`);let y=buffer.Buffer.from(me(r.Ed25519PublicKey)),h=false;for(let S=0;S<nt;S++){let A=tt+S*32;y.equals(g.subarray(A,A+32))&&(h=true);}if(!h)throw new B("SIGNER_NOT_TRUSTED","the voucher's signer is not in the pool's server_pubkeys");let D=await o(new web3_js.PublicKey(r.Mint));return a(l,[web3_js.ComputeBudgetProgram.setComputeUnitLimit({units:Yt}),...nn({sig:r,payer:l,tokenProgram:D,titleHash:await et(r.TitleID??"")})])}}}var b=(e,t)=>`var(--idos-ui-${e}, ${t})`,i={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")},it={green:[i.green,i.greenDeep,i.onGreen],blue:[i.blue,i.blueDeep,i.onBlue],gold:[i.gold,i.goldDeep,i.onGold],red:[i.red,i.redDeep,"#ffffff"]},I={color:i.text,fontWeight:800,textShadow:i.textOutline,letterSpacing:.2},ve={boxSizing:"border-box",background:`linear-gradient(180deg, ${i.panel} 0%, ${i.panelDeep} 100%)`,border:`2px solid ${i.panelEdge}`,borderRadius:i.radius,boxShadow:i.panelShadow},$={boxSizing:"border-box",background:i.well,border:`2px solid ${i.panelEdge}`,boxShadow:i.wellShadow,borderRadius:14};function ue(e,t=false,n="md"){let[o,a,r]=t?["#8e95b8","#5b6187","#ffffff"]:it[e];return {...I,color:r,boxSizing:"border-box",fontFamily:i.font,fontSize:n==="sm"?13:n==="lg"?18:16,border:"none",borderRadius:i.buttonRadius,padding:n==="sm"?"6px 12px":n==="lg"?"13px 22px":"10px 18px",minHeight:n==="sm"?34:n==="lg"?52:44,cursor:t?"default":"pointer",background:`linear-gradient(180deg, ${o} 0%, ${a} 100%)`,boxShadow:`0 4px 0 ${i.edge}, inset 0 2px 0 rgba(255,255,255,.35)`,opacity:t?.75:1,display:"inline-flex",alignItems:"center",justifyContent:"center",gap:8}}function st(e){let[t,n,o]=it[e];return {background:`linear-gradient(180deg, ${t} 0%, ${n} 100%)`,color:o,borderRadius:16,boxShadow:`0 4px 0 ${i.edge}, inset 0 2px 0 rgba(255,255,255,.3)`}}var N={...I,fontSize:13,color:i.textDim},sn=["ru","kk","uk","be","ky","uz","tg"];function ln(){if(typeof navigator>"u")return false;let e=(navigator.language||"").toLowerCase();return sn.some(t=>e.startsWith(t))}var at={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."},cn={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 u(e,t){let n=(ln()?cn:at)[e]??at[e];for(let[o,a]of Object.entries(t??{}))n=n.replace(`{${o}}`,String(a));return n}var un=/^(Not enough confirmations|Transaction not found on chain)/,fn=8,gn=5e3;function mn(e,t){let n=Math.max(0,Math.floor(t||0)),[o="0",a=""]=e.split(".");if(a.length<=n)return e;let r=a.slice(0,n),l=BigInt(o+r)+(/^0*$/.test(a.slice(n))?BigInt(0):BigInt(1));if(n===0)return l.toString();let p=l.toString().padStart(n+1,"0");return `${p.slice(0,-n)}.${p.slice(-n)}`.replace(/\.?0+$/,"")}function Oe(e,t=6){let n=Number(e);return Number.isFinite(n)?n.toLocaleString("en-US",{maximumFractionDigits:Math.max(0,t)}).replace(/,/g," "):String(e)}var pt=e=>e.length>14?`${e.slice(0,6)}\u2026${e.slice(-4)}`:e,lt=e=>/^\d+(\.\d+)?$/.test(e)&&Number(e)>0;function dt({client:e,engine:t,onClose:n,style:o,topUp:a}){let[,r]=react$1.useReducer(m=>m+1,0),[l,p]=react$1.useState(false),[s,g]=react$1.useState({}),[d,y]=react$1.useState({}),[h,D]=react$1.useState("deposit"),[S,A]=react$1.useState(""),[f,W]=react$1.useState(""),[P,O]=react$1.useState(""),[M,z]=react$1.useState(false),[Z,F]=react$1.useState(null),[ie,J]=react$1.useState(false);react$1.useEffect(()=>{let m=true;return (async()=>{let[C]=await Promise.all([e.blockchain.getDefinitions(),e.cache.ensureState(["InventoryV2","Blockchain"])]);if(!m||(p(true),!C.ok))return;let T={};for(let[H,j]of Object.entries(C.data.Blockchain?.Networks??{}))j.Type===t.networkType&&(T[H]=j);g(T);let X=C.data.CryptoCurrencies??{};y(X);let se=a?X[a.currencyID]?.Networks?.find(H=>!!H.NetworkID&&!!T[H.NetworkID]&&!!H.ContractAddress&&H.DepositsEnabled!==false&&T[H.NetworkID]?.DepositsEnabled!==false)?.NetworkID:null;A(se??Object.keys(T)[0]??"");})(),()=>{m=false;}},[e,t.networkType]),react$1.useEffect(()=>e.on("user:anyUpdated",r),[e]);let V=react$1.useMemo(()=>Object.entries(d).filter(([,m])=>m.Networks?.some(C=>C.NetworkID===S&&!!C.ContractAddress)),[d,S]);react$1.useEffect(()=>{let m=V[0]?.[0]??"";W(C=>a?a.currencyID:V.some(([T])=>T===C)?C:m);},[V,a]);let L=S?s[S]:void 0,U=f?d[f]:void 0,v=U?.Networks?.find(m=>m.NetworkID===S),q=f?e.data.user.getCryptoCurrencyAmount(f):"0",K=U?.DisplayName??f,G=f?U?.UnbackedRewardCurrencyID||`${f}_IOU`:"",gt=G&&Number(e.data.user.state?.InventoryV2?.VirtualCurrencies?.[G]?.Amount??0)||0,mt=!!G&&e.data.user.state?.InventoryV2?.VirtualCurrencies?.[G]!=null,_e=U?.DisplayDecimals??6,fe=!!t.address,Le=!!a&&!!v?.ContractAddress&&f===a.currencyID,we=a&&v?mn(a.amount,v.Decimals??18):"",he=a?d[a.currencyID]?.DisplayName??a.currencyID:"",Ue=Number(v?.MinWithdraw??0);async function be(m,C){z(true),F(null);try{let T=await C();return F({tab:m,res:T}),T.ok&&O(""),T}finally{z(false);}}async function Ke(m){let C=await He();if(!C)return x("approve",u("noNetworks"));let T=await t.deposit({...m,network:C});if(T.ok||T.stage!=="report"||!T.onChainTxHash)return T;let X=T.onChainTxHash,se=T.error;J(true);try{for(let H=1;H<=fn&&un.test(se);H++){await new Promise(kt=>setTimeout(kt,gn));let j=await e.blockchain.depositToken(S,X);if(j.ok)return {ok:!0,onChainTxHash:X,data:j.data};if(/^Transaction hash already used/.test(j.error))return await e.cache.ensureState(["InventoryV2"],{force:!0}),{ok:!0,onChainTxHash:X,data:null};se=j.error;}}finally{J(false);}return {...T,error:se}}async function He(){let m=await e.blockchain.getDefinitions({forceRefresh:true});return m.ok?m.data.Blockchain?.Networks?.[S]??null:null}async function yt(){let m=await He();return m?t.withdraw({network:m,networkID:S,currencyID:f,amount:P}):x("request",u("noNetworks"))}let Se=ie?u("confirming"):h==="withdraw"&&!a?u("withdrawing"):u("depositing"),wt=fe?jsxRuntime.jsxs("div",{style:{...$,display:"flex",alignItems:"center",gap:10,padding:"8px 8px 8px 12px"},children:[jsxRuntime.jsx("span",{style:hn,"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:pt(t.address)}),L?jsxRuntime.jsx("span",{style:{...N,fontSize:12},children:L.DisplayName??S}):null]}),jsxRuntime.jsx("button",{type:"button",className:"idos-press",style:bn,onClick:t.disconnect,children:u("disconnect")})]}):jsxRuntime.jsxs("div",{style:{display:"grid",gap:8},children:[jsxRuntime.jsx("span",{style:N,children:u("connectHint")}),t.connectChoices.length===0?jsxRuntime.jsx("div",{style:{...$,padding:"10px 12px",...N},children:u("notConfigured")}):t.connectChoices.length===1?jsxRuntime.jsx("button",{type:"button",className:"idos-press",style:{...ue("blue",false,"lg"),width:"100%"},onClick:t.connectChoices[0].connect,children:u("connect")}):t.connectChoices.map(m=>jsxRuntime.jsxs("button",{type:"button",className:"idos-press",style:Sn,onClick:m.connect,children:[jsxRuntime.jsx("span",{style:{flex:1,textAlign:"left"},children:m.label}),jsxRuntime.jsx("span",{"aria-hidden":true,style:{color:i.textDim},children:"\u203A"})]},m.key))]}),Me=f?jsxRuntime.jsx(Pn,{icon:jsxRuntime.jsx(Tn,{assets:U?.AssetPaths,name:K}),name:K,backed:Number(q)||0,unbacked:gt,hasIou:mt,decimals:_e}):null,ht=jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[Object.keys(s).length>1?jsxRuntime.jsx(ct,{caption:u("network"),value:S,onChange:A,options:Object.entries(s).map(([m,C])=>[m,C.DisplayName??m])}):null,V.length===0?jsxRuntime.jsx("div",{style:{...$,padding:"10px 12px",...N},children:u("noTokens")}):V.length>1?jsxRuntime.jsx(ct,{caption:u("token"),value:f,onChange:W,options:V.map(([m,C])=>[m,C.DisplayName??m])}):null]}),bt=jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(Cn,{value:h,onChange:m=>{D(m),F(null),O("");}}),ht,jsxRuntime.jsxs("div",{style:{display:"grid",gap:6},children:[jsxRuntime.jsx("span",{style:N,children:u("amount")}),jsxRuntime.jsxs("div",{style:{...$,display:"flex",alignItems:"center",gap:8,padding:"4px 6px 4px 14px"},children:[jsxRuntime.jsx("input",{style:xn,inputMode:"decimal",placeholder:"0.0",value:P,onChange:m=>O(m.target.value.replace(",","."))}),jsxRuntime.jsx("span",{style:{...N,fontSize:14},children:K}),h==="withdraw"&&Number(q)>0?jsxRuntime.jsx("button",{type:"button",className:"idos-press",style:ue("gold",false,"sm"),onClick:()=>O(String(q)),children:u("max")}):null]}),h==="withdraw"&&Ue>0?jsxRuntime.jsx("span",{style:{...N,fontSize:12},children:u("minWithdraw",{n:Oe(Ue,_e)})}):null]}),h==="deposit"?jsxRuntime.jsx(Be,{tone:"green",busy:M,busyText:Se,disabled:!fe||!v?.ContractAddress||!lt(P),onClick:()=>{!L||!v||be("deposit",()=>Ke({network:L,binding:v,currencyID:f,amount:P}));},children:u("deposit")}):jsxRuntime.jsx(Be,{tone:"blue",busy:M,busyText:Se,disabled:!fe||!f||!lt(P),onClick:()=>{L&&be("withdraw",()=>yt());},children:u("withdraw")})]}),St=a?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{style:{...st("gold"),padding:"12px 14px",display:"grid",gap:4},children:Le?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("span",{style:{...I,color:"inherit",fontSize:13,opacity:.9},children:u("topUpNeed")}),jsxRuntime.jsxs("span",{style:{...I,color:"inherit",fontSize:24,lineHeight:1.1},children:[we," ",he," ",u("topUpMore")]}),jsxRuntime.jsx("span",{style:{fontSize:13,fontWeight:600,opacity:.95},children:u("topUpHint")})]}):jsxRuntime.jsx("span",{style:{...I,color:"inherit",fontSize:15},children:l?u("topUpCannot",{name:he}):u("loading")})}),Me,jsxRuntime.jsx(Be,{tone:"green",busy:M,busyText:Se,disabled:!fe||!Le,onClick:()=>{!L||!v||be("deposit",()=>Ke({network:L,binding:v,currencyID:f,amount:we})).then(m=>{m.ok&&a.onDone(true);});},children:u("depositAmount",{amount:we,name:he})})]}):null,Fe=!!n;return jsxRuntime.jsxs("div",{style:{...wn,...Fe?{...ve,padding:16,width:360,maxWidth:"100%",maxHeight:"80vh",overflow:"auto"}:{},...o},children:[jsxRuntime.jsx("style",{children:yn}),Fe?jsxRuntime.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[jsxRuntime.jsx("span",{style:{...I,fontSize:20},children:a?u("topUpTitle"):u("title")}),jsxRuntime.jsx("button",{type:"button",className:"idos-press",style:kn,onClick:n,"aria-label":"\u2715",children:"\u2715"})]}):null,wt,l?Object.keys(s).length===0?jsxRuntime.jsx("div",{style:{...$,padding:"12px 14px",...N},children:u("noNetworks")}):a?St:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[Me,bt]}):jsxRuntime.jsx("div",{style:{...N,textAlign:"center",padding:12},children:u("loading")}),Z?jsxRuntime.jsx(In,{tab:Z.tab,result:Z.res}):null]})}var yn="@keyframes idosw-spin { to { transform: rotate(360deg) } }",wn={pointerEvents:"auto",color:i.text,fontFamily:i.font,display:"flex",flexDirection:"column",gap:12,boxSizing:"border-box",width:"100%",minWidth:0,maxWidth:"100%"},hn={width:10,height:10,borderRadius:"50%",background:i.green,boxShadow:`0 0 0 3px color-mix(in srgb, ${i.green} 30%, transparent)`,flex:"none"},bn={...I,fontFamily:i.font,fontSize:13,color:i.textDim,background:"transparent",border:`2px solid ${i.line}`,borderRadius:10,padding:"5px 10px",cursor:"pointer"},Sn={...$,...I,fontFamily:i.font,fontSize:15,display:"flex",alignItems:"center",gap:10,padding:"10px 12px",cursor:"pointer",width:"100%"},kn={...ue("red",false,"sm"),width:36,minHeight:36,padding:0,borderRadius:"50%"},xn={...I,fontFamily:i.font,fontSize:22,flex:1,minWidth:0,background:"transparent",border:"none",outline:"none",padding:"6px 0"};function Tn({assets:e,name:t}){let n=e?.Default||e?.Icon||"",o={width:40,height:40,borderRadius:"50%",flex:"none",display:"grid",placeItems:"center",background:`linear-gradient(180deg, ${i.gold}, ${i.goldDeep})`,boxShadow:`0 3px 0 ${i.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:(t.trim()[0]??"?").toUpperCase()})}function Pn({icon:e,name:t,backed:n,unbacked:o,hasIou:a,decimals:r}){let[l,p]=react$1.useState(false),s=(g,d,y=false)=>jsxRuntime.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:16},children:[jsxRuntime.jsx("span",{style:{...N,fontSize:13},children:g}),jsxRuntime.jsx("span",{style:{...I,fontSize:14,color:y?i.textDim:i.text},children:Oe(d,r)})]});return jsxRuntime.jsxs("div",{style:{position:"relative"},onMouseEnter:()=>p(true),onMouseLeave:()=>p(false),children:[jsxRuntime.jsxs("button",{type:"button","aria-expanded":l,onClick:()=>p(g=>!g),onBlur:()=>p(false),style:{...$,display:"flex",alignItems:"center",gap:12,padding:"10px 14px",width:"100%",cursor:"pointer",font:"inherit",textAlign:"left"},children:[e,jsxRuntime.jsxs("span",{style:{display:"grid",minWidth:0,flex:1},children:[jsxRuntime.jsx("span",{style:{...N,fontSize:12},children:u("balance")}),jsxRuntime.jsxs("span",{style:{...I,fontSize:22,lineHeight:1.1},children:[Oe(n+o,r)," ",jsxRuntime.jsx("span",{style:{fontSize:15,color:i.textDim},children:t})]})]}),jsxRuntime.jsx("span",{"aria-hidden":true,style:{...N,fontSize:16},children:"\u24D8"})]}),l?jsxRuntime.jsxs("div",{role:"tooltip",style:{...ve,position:"absolute",left:0,right:0,top:"calc(100% + 6px)",zIndex:5,padding:"10px 12px",display:"grid",gap:6},children:[s(u("backed"),n),a?s(u("unbacked"),o,o===0):null,jsxRuntime.jsx("div",{style:{height:1,background:i.line}}),s(u("total"),n+o),jsxRuntime.jsx("span",{style:{fontSize:12,color:i.textDim,lineHeight:1.35},children:a?u("iouHint"):u("backedHint")})]}):null]})}function Cn({value:e,onChange:t}){let n=[["deposit",u("deposit")],["withdraw",u("withdraw")]];return jsxRuntime.jsx("div",{role:"tablist",style:{display:"flex",gap:6,padding:4,borderRadius:16,background:i.wellSoft},children:n.map(([o,a])=>{let r=o===e;return jsxRuntime.jsx("button",{role:"tab","aria-selected":r,type:"button",className:"idos-press",onClick:()=>!r&&t(o),style:{...I,fontFamily:i.font,fontSize:15,flex:1,border:"none",borderRadius:12,padding:"9px 14px",cursor:"pointer",color:r?i.onBlue:i.textDim,background:r?`linear-gradient(180deg, ${i.blue}, ${i.blueDeep})`:"transparent",boxShadow:r?`0 3px 0 ${i.edge}, inset 0 2px 0 rgba(255,255,255,.3)`:"none",transition:`background ${i.fast} ease`},children:a},o)})})}function ct({caption:e,value:t,onChange:n,options:o}){return jsxRuntime.jsxs("label",{style:{display:"grid",gap:6},children:[jsxRuntime.jsx("span",{style:N,children:e}),jsxRuntime.jsxs("span",{style:{position:"relative",display:"block"},children:[jsxRuntime.jsx("select",{value:t,onChange:a=>n(a.target.value),style:{...$,...I,fontFamily:i.font,fontSize:15,width:"100%",padding:"10px 36px 10px 12px",appearance:"none",WebkitAppearance:"none",cursor:"pointer",outline:"none"},children:o.map(([a,r])=>jsxRuntime.jsx("option",{value:a,style:{color:"#111"},children:r},a))}),jsxRuntime.jsx("span",{"aria-hidden":true,style:{position:"absolute",right:14,top:"50%",transform:"translateY(-50%)",color:i.textDim,pointerEvents:"none"},children:"\u25BE"})]})]})}function Be({tone:e,busy:t,busyText:n,disabled:o,onClick:a,children:r}){return jsxRuntime.jsx("button",{type:"button",className:"idos-press",disabled:o||t,onClick:a,style:{...ue(e,o&&!t,"lg"),width:"100%"},children:t?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]}):r})}function In({tab:e,result:t}){let n=t.ok,o={borderRadius:14,padding:"10px 12px",display:"grid",gap:4,background:`color-mix(in srgb, ${n?i.green:i.red} 22%, transparent)`,border:`2px solid color-mix(in srgb, ${n?i.green:i.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 ",e==="withdraw"?u("doneWithdraw"):u("doneDeposit")]}),jsxRuntime.jsxs("span",{style:{...N,fontSize:12},children:[u("tx"),": ",pt(t.onChainTxHash)]})]}):jsxRuntime.jsxs("div",{style:o,role:"alert",children:[jsxRuntime.jsxs("span",{style:{...I,fontSize:15},children:["\u2715 ",u("failed")]}),jsxRuntime.jsx("span",{style:{fontSize:13,color:i.text,opacity:.9},children:t.error}),t.titleTransactionID?jsxRuntime.jsx("span",{style:{...N,fontSize:12},children:u("debited")}):null]})}var Bn=103;function ft(e){return (e.ChainID===Bn?ke:le).rpcUrls.default.http[0]}function On(e){let{client:t,walletConnectProjectId:n,appName:o,onClose:a,style:r,topUp:l}=e,[p,s]=react$1.useState(n??"");react$1.useEffect(()=>{if(n)return;let f=true;return (async()=>{let W=await t.blockchain.getDefinitions();if(!f||!W.ok)return;let P=W.data.Blockchain?.WalletLogin?.WalletConnectProjectId;P&&s(P);})(),()=>{f=false;}},[t,n]);let g=react$1.useMemo(()=>p?(xe({walletConnectProjectId:p,appName:o}),true):false,[p,o]),{address:d,isConnected:y}=react.useAppKitAccount(),{walletProvider:h}=react.useAppKitProvider("solana"),D=y&&d?d:null,S=(f,W)=>Ee({connection:new web3_js.Connection(ft(f),"confirmed"),owner:W,programId:f.RewardPoolAddress??"",signTransaction:async P=>{if(!h)throw new Error("Wallet not connected.");return h.signTransaction(P)}});return jsxRuntime.jsx(dt,{client:t,engine:{networkType:"Solana",address:D,connectChoices:g?[{key:"appkit",label:"Connect wallet",connect:()=>{Q()?.open();}}]:[],disconnect:()=>{Q()?.disconnect("solana");},deposit:async({network:f,binding:W,amount:P})=>{if(!D)return x("deposit-onchain","Wallet not connected.");if(!W.ContractAddress)return x("deposit-onchain","This token cannot be deposited.");if(!f.RewardPoolAddress)return x("deposit-onchain","POOL_NOT_IN_REGISTRY");let O;try{O=(await new web3_js.Connection(ft(f),"confirmed").getTokenSupply(new web3_js.PublicKey(W.ContractAddress))).value.decimals;}catch{return x("deposit-onchain","Could not read the token from the network. Try again.")}let M;try{M=viem.parseUnits(P,O);}catch{return x("deposit-onchain","Invalid amount.")}return ce({client:t,adapter:S(f,D),network:f,mint:W.ContractAddress,amountRaw:M,titleID:t.titleID})},withdraw:async({network:f,networkID:W,currencyID:P,amount:O})=>D?pe({client:t,adapter:S(f,D),currencyID:P,networkID:W,walletAddress:D,amount:O}):x("request","Wallet not connected.")},onClose:a,style:r,topUp:l})}
2
+ exports.PlatformPoolError=B;exports.SolanaWalletLogin=_t;exports.SolanaWalletPanel=On;exports.createPlatformPoolAdapter=Ee;exports.createSolanaWalletConfig=xe;exports.solanaDevnet=ke;exports.solanaMainnet=le;exports.useSolanaBridge=Nt;
@@ -1 +1 @@
1
- import {b,a as a$1,c,d}from'../chunk-MLIXKTS6.js';import {a,b as b$2,c as c$2}from'../chunk-NU3WMVH2.js';import'../chunk-ZOWZE7MU.js';import {v,b as b$1,c as c$1,w}from'../chunk-K3THMWU2.js';export{w as solanaDevnet,v as solanaMainnet}from'../chunk-K3THMWU2.js';import {SolanaAdapter}from'@reown/appkit-adapter-solana';import {createAppKit,useAppKitAccount,useAppKitProvider}from'@reown/appkit/react';import {useState,useRef,useCallback,useEffect,useMemo}from'react';import {authErrorText}from'@idosgames/core';import {jsxs,Fragment,jsx}from'react/jsx-runtime';import {parseUnits}from'viem';import {PublicKey,ComputeBudgetProgram,Connection,Transaction,Ed25519Program,TransactionInstruction,SYSVAR_INSTRUCTIONS_PUBKEY,SystemProgram}from'@solana/web3.js';import {Buffer}from'buffer';var ie=new Map;function $(t){let{walletConnectProjectId:e,appName:o,appUrl:r,appIcon:i,wallets:n}=t,a$1=ie.get(e);if(a$1)return a$1;let l=t.networks??[v],s=r??(typeof window<"u"?window.location.origin:""),p={name:o??"iDosGames",description:o??"iDosGames game",url:s,icons:i?[i]:[]},c=new SolanaAdapter(n?{wallets:n}:{});return a(createAppKit({adapters:[c],networks:l,projectId:e,metadata:p,features:{analytics:false,email:false,socials:false}})),ie.set(e,c),c}var se="Wallet not connected.";function Ae(t,e,o){let{address:r}=useAppKitAccount(),{walletProvider:i}=useAppKitProvider("solana"),n=r??null,a=i?.signMessage?.bind(i);return {connected:!!n,account:n,loginWithWallet:(l,s)=>{let p=s??n;return p?a?c({client:t,networkID:l,walletAddress:p,signMessage:a}):Promise.resolve(c$1("sign","The connected wallet does not support message signing.")):Promise.resolve(c$1("challenge",se))},depositToken:l=>a$1({client:t,adapter:o,titleID:e,...l}),withdrawToken:l=>{let s=l.walletAddress??n;return s?b({client:t,adapter:o,...l,walletAddress:s}):Promise.resolve(b$1("request",se))}}}var We=18e4,ce=9e4;function Ee(t){try{let o=t?.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(t,e){return new Promise((o,r)=>{let i=setTimeout(()=>r(new Error("The wallet request timed out.")),e);t.then(n=>{clearTimeout(i),o(n);},n=>{clearTimeout(i),r(n instanceof Error?n:new Error(String(n)));});})}function Ce(t){let e="Wallet sign-in failed. Please try again.";return t instanceof Error?/user (rejected|denied|cancelled|canceled)|rejected the request/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}function Oe(t){let{client:e,networkID:o,onAuthenticated:r,disabled:i,label:n,style:a,autoStart:l,mode:s="login",onLinked:p}=t,{address:c$1,isConnected:g}=useAppKitAccount(),{walletProvider:f}=useAppKitProvider("solana"),[b,S]=useState(false),[w,d$1]=useState(null),[y,T]=useState(false),[A,ee]=useState(false),N=useRef(null),te=useRef(0),D=useCallback(()=>{N.current&&clearTimeout(N.current),N.current=null;},[]);useEffect(()=>D,[D]);let G=useRef(false),F=useCallback(async()=>{let R=++te.current,x=()=>te.current===R,V=f?.signMessage?.bind(f);if(!c$1||!V){d$1("The connected wallet cannot sign messages."),S(false);return}S(true),d$1(null);try{if(ee(!0),s==="link"){let K=await ue(d({client:e,networkID:o,walletAddress:c$1,signMessage:V}),ce);if(!x())return;if(K.ok){p?.(K.data.PlayAccess??null);return}d$1(K.stage==="sign"?"Signature declined.":authErrorText(K.error,"Could not link the wallet."));return}let k=await ue(c({client:e,networkID:o,walletAddress:c$1,signMessage:V}),ce);if(!x())return;if(k.ok){r();return}d$1(k.stage==="sign"?"Signature declined.":authErrorText(k.error,"Wallet sign-in failed."));}catch(k){if(!x())return;console.error("[idosgames/wallet] solana sign-in failed:",k),d$1(Ce(k));}finally{x()&&(S(false),ee(false));}},[c$1,f,e,o,r,s,p]),ye=useCallback(()=>{Ee(f)||b$2()?.open();},[f]);useEffect(()=>{!y||!g||!c$1||!f||(T(false),D(),F());},[y,g,c$1,f,F,D]);let ne=()=>{if(A){ye();return}if(d$1(null),G.current=true,g&&c$1&&f){F();return}let R=b$2();if(!R){d$1("Wallet sign-in is not configured for this title.");return}S(true),T(true),D(),N.current=setTimeout(()=>{T(false),S(false),d$1("No wallet was connected.");},We),R.open();};return useEffect(()=>{!l||G.current||(G.current=true,ne());},[l]),jsxs(Fragment,{children:[jsx("button",{type:"button",onClick:ne,disabled:i,style:{...De,...i?{opacity:.6,cursor:"default"}:null,...a},children:A?"Waiting for signature \u2014 tap to open wallet":b?"Check your wallet\u2026":g?n??(s==="link"?"Link wallet":"Sign in with wallet"):"Connect wallet"}),w&&jsx("span",{role:"alert",style:_e,children:w})]})}var De={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"};var Ue="e000c6afc62f69cc",Le="b59a5e563e7306ba",Me="d668e18c1bdc33f1",H=new PublicKey("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"),He="1nc1nerator11111111111111111111111111111111",de=177,Ge=3e5,ge=40,me=4,Se=ge+32*me,Fe=Se+8,P=class extends Error{constructor(o,r){super(r);this.code=o;this.name="PlatformPoolError";}code};function M(t){let e=(t??"").replace(/^0x/i,""),o=new Uint8Array(e.length>>1);for(let r=0;r<o.length;r++)o[r]=parseInt(e.slice(r*2,r*2+2),16);return o}function E(t){let e=Buffer.alloc(8);return e.writeBigUInt64LE(BigInt(t||0)),e}function Ve(t){let e=Buffer.alloc(8);return e.writeBigInt64LE(BigInt(t||0)),e}function O(t){let e=Buffer.from(t??"","utf8"),o=Buffer.alloc(4);return o.writeUInt32LE(e.length),Buffer.concat([o,e])}async function fe(t){let e=await globalThis.crypto.subtle.digest("SHA-256",new TextEncoder().encode(t??""));return new Uint8Array(e)}function we(t,e,o){return I(t,Buffer.from("title_balance"),Buffer.from(e),o.toBuffer())}function qe(t){return Buffer.concat([Buffer.from(Ue,"hex"),E(t.amountRaw),O(t.userID),O(t.titleID),O(t.category),Buffer.from(t.titleHash)])}function je(t,e){let o=t.Splits??[],r=Buffer.alloc(4);return r.writeUInt32LE(o.length),Buffer.concat([Buffer.from(t.Domain==="SPL_DEV"?Me:Le,"hex"),E(t.Amount),E(t.BurnAmount),E(t.Nonce),Ve(t.ExpiresAt),r,...o.map(i=>Buffer.concat([Buffer.from(new PublicKey(i.To??"").toBytes()),E(i.Amount)])),O(t.UserID),O(t.TitleID),O(t.Category),Buffer.from(e)])}function C(t,e,o){return PublicKey.findProgramAddressSync([e.toBuffer(),o.toBuffer(),t.toBuffer()],H)[0]}function $e(t,e,o,r,i){return new TransactionInstruction({programId:H,keys:[{pubkey:t,isSigner:true,isWritable:true},{pubkey:e,isSigner:false,isWritable:true},{pubkey:o,isSigner:false,isWritable:false},{pubkey:r,isSigner:false,isWritable:false},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:i,isSigner:false,isWritable:false}],data:Buffer.from([1])})}function I(t,...e){return PublicKey.findProgramAddressSync(e,t)[0]}function ze(t){let{programId:e,user:o,mint:r,tokenProgram:i}=t,n=I(e,Buffer.from("vault"));return new TransactionInstruction({programId:e,keys:[{pubkey:I(e,Buffer.from("config")),isSigner:false,isWritable:false},{pubkey:n,isSigner:false,isWritable:true},{pubkey:r,isSigner:false,isWritable:false},{pubkey:o,isSigner:true,isWritable:true},{pubkey:C(r,o,i),isSigner:false,isWritable:true},{pubkey:C(r,n,i),isSigner:false,isWritable:true},{pubkey:i,isSigner:false,isWritable:false},{pubkey:H,isSigner:false,isWritable:false},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:we(e,t.titleHash,r),isSigner:false,isWritable:true}],data:qe(t)})}function Ye(t){let{sig:e,payer:o,tokenProgram:r,titleHash:i}=t,n=new PublicKey(e.ProgramID??""),a=new PublicKey(e.Mint??""),l=new PublicKey(e.WalletAddress??""),s=I(n,Buffer.from("vault")),p=new PublicKey(He),c=(e.Splits??[]).map(w=>new PublicKey(w.To??"")),g=c.map(w=>C(a,w,r)),f=Ed25519Program.createInstructionWithPublicKey({publicKey:M(e.Ed25519PublicKey),message:M(e.Ed25519Message),signature:M(e.SignatureHex)}),b=c.map((w,d)=>$e(o,g[d],w,a,r)),S=new TransactionInstruction({programId:n,keys:[{pubkey:I(n,Buffer.from("config")),isSigner:false,isWritable:false},{pubkey:o,isSigner:true,isWritable:true},{pubkey:s,isSigner:false,isWritable:true},{pubkey:I(n,Buffer.from("nonce"),E(e.Nonce)),isSigner:false,isWritable:true},{pubkey:a,isSigner:false,isWritable:false},{pubkey:l,isSigner:false,isWritable:false},{pubkey:C(a,s,r),isSigner:false,isWritable:true},{pubkey:C(a,l,r),isSigner:false,isWritable:true},{pubkey:p,isSigner:false,isWritable:false},{pubkey:C(a,p,r),isSigner:false,isWritable:true},{pubkey:SYSVAR_INSTRUCTIONS_PUBKEY,isSigner:false,isWritable:false},{pubkey:r,isSigner:false,isWritable:false},{pubkey:H,isSigner:false,isWritable:false},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:we(n,i,a),isSigner:false,isWritable:true},...g.map(w=>({pubkey:w,isSigner:false,isWritable:true}))],data:je(e,i)});return [f,...b,S]}async function Je(t,e,o){let r=async n=>{let a=(await t.getSignatureStatuses([e],{searchTransactionHistory:n})).value[0];if(a?.err)throw new P("TRANSACTION_FAILED",`transaction ${e} failed: ${JSON.stringify(a.err)}`);return a},i=n=>n?.confirmationStatus==="confirmed"||n?.confirmationStatus==="finalized";for(let n=1;;n++){await new Promise(s=>setTimeout(s,Xe));let a=null;try{a=await r(!1);}catch(s){if(s instanceof P)throw s}if(i(a))return;if(!(a||n%Ze!==0||await t.getBlockHeight("confirmed").catch(()=>-1)<=o)){if(i(await r(true).catch(()=>null)))return;throw new P("TRANSACTION_EXPIRED",`transaction ${e} expired: block height exceeded`)}}}var Xe=2e3,Ze=5;function Q(t){let{connection:e,signTransaction:o}=t;async function r(n){let a=await e.getAccountInfo(n);if(!a)throw new P("MINT_NOT_FOUND",`mint ${n.toBase58()} not found`);return a.owner}async function i(n,a){let{blockhash:l,lastValidBlockHeight:s}=await e.getLatestBlockhash("confirmed"),p=new Transaction;p.feePayer=n,p.recentBlockhash=l,p.add(...a);let c=await o(p),g=await e.sendRawTransaction(c.serialize());return await Je(e,g,s),g}return {async depositSpl({mint:n,amountRaw:a,userID:l,titleID:s,category:p}){let c=new PublicKey(t.owner),g=new PublicKey(n),f=await r(g);return i(c,[ze({programId:new PublicKey(t.programId),user:c,mint:g,tokenProgram:f,amountRaw:a,userID:l,titleID:s,category:p,titleHash:await fe(s)})])},async submitWithdrawal(n){if(!n.ProgramID||!n.Mint||!n.WalletAddress)throw new P("BAD_VOUCHER","the voucher has no program, mint or wallet");let a=new PublicKey(t.owner),l=new PublicKey(n.ProgramID),s=await e.getAccountInfo(I(l,Buffer.from("config")));if(!s)throw new P("POOL_NOT_ON_THIS_CLUSTER","the pool's config account is not on this cluster");if(s.data.length!==de)throw new P("POOL_NOT_MIGRATED",`config is ${s.data.length} bytes, expected ${de} (migrate_config not run)`);let p=Buffer.from(s.data);if(p[Fe]===1)throw new P("POOL_PAUSED","pool withdrawals are paused");let c=p.readBigUInt64LE(Se);if(c!==BigInt(n.SignatureEpoch||0))throw new P("VOUCHER_REVOKED",`signature epoch mismatch: voucher ${n.SignatureEpoch}, on-chain ${c}`);let g=Buffer.from(M(n.Ed25519PublicKey)),f=false;for(let S=0;S<me;S++){let w=ge+S*32;g.equals(p.subarray(w,w+32))&&(f=true);}if(!f)throw new P("SIGNER_NOT_TRUSTED","the voucher's signer is not in the pool's server_pubkeys");let b=await r(new PublicKey(n.Mint));return i(a,[ComputeBudgetProgram.setComputeUnitLimit({units:Ge}),...Ye({sig:n,payer:a,tokenProgram:b,titleHash:await fe(n.TitleID??"")})])}}}var it=103;function st(t){return (t.ChainID===it?w:v).rpcUrls.default.http[0]}function lt(t){let{client:e,walletConnectProjectId:o,appName:r,onClose:i,style:n,topUp:a}=t,[l,s]=useState(o??"");useEffect(()=>{if(o)return;let d=true;return (async()=>{let y=await e.blockchain.getDefinitions();if(!d||!y.ok)return;let T=y.data.Blockchain?.WalletLogin?.WalletConnectProjectId;T&&s(T);})(),()=>{d=false;}},[e,o]);let p=useMemo(()=>l?($({walletConnectProjectId:l,appName:r}),true):false,[l,r]),{address:c,isConnected:g}=useAppKitAccount(),{walletProvider:f}=useAppKitProvider("solana"),b$3=g&&c?c:null,S=(d,y)=>Q({connection:new Connection(st(d),"confirmed"),owner:y,programId:d.RewardPoolAddress??"",signTransaction:async T=>{if(!f)throw new Error("Wallet not connected.");return f.signTransaction(T)}});return jsx(c$2,{client:e,engine:{networkType:"Solana",address:b$3,connectChoices:p?[{key:"appkit",label:"Connect wallet",connect:()=>{b$2()?.open();}}]:[],disconnect:()=>{b$2()?.disconnect("solana");},deposit:async({network:d,binding:y,amount:T})=>{if(!b$3)return b$1("deposit-onchain","Wallet not connected.");if(!y.ContractAddress)return b$1("deposit-onchain","This token cannot be deposited.");if(!d.RewardPoolAddress)return b$1("deposit-onchain","POOL_NOT_IN_REGISTRY");let A;try{A=parseUnits(T,y.Decimals??9);}catch{return b$1("deposit-onchain","Invalid amount.")}return a$1({client:e,adapter:S(d,b$3),network:d,mint:y.ContractAddress,amountRaw:A,titleID:e.titleID})},withdraw:async({network:d,networkID:y,currencyID:T,amount:A})=>b$3?b({client:e,adapter:S(d,b$3),currencyID:T,networkID:y,walletAddress:b$3,amount:A}):b$1("request","Wallet not connected.")},onClose:i,style:n,topUp:a})}export{P as PlatformPoolError,Oe as SolanaWalletLogin,lt as SolanaWalletPanel,Q as createPlatformPoolAdapter,$ as createSolanaWalletConfig,Ae as useSolanaBridge};
1
+ import {b,a as a$1,c,d}from'../chunk-MLIXKTS6.js';import {a,b as b$2,c as c$2}from'../chunk-NU3WMVH2.js';import'../chunk-ZOWZE7MU.js';import {v,b as b$1,c as c$1,w}from'../chunk-K3THMWU2.js';export{w as solanaDevnet,v as solanaMainnet}from'../chunk-K3THMWU2.js';import {SolanaAdapter}from'@reown/appkit-adapter-solana';import {createAppKit,useAppKitAccount,useAppKitProvider}from'@reown/appkit/react';import {useState,useRef,useCallback,useEffect,useMemo}from'react';import {authErrorText}from'@idosgames/core';import {jsxs,Fragment,jsx}from'react/jsx-runtime';import {parseUnits}from'viem';import {PublicKey,ComputeBudgetProgram,Connection,Transaction,Ed25519Program,TransactionInstruction,SYSVAR_INSTRUCTIONS_PUBKEY,SystemProgram}from'@solana/web3.js';import {Buffer}from'buffer';var ie=new Map;function z(t){let{walletConnectProjectId:e,appName:o,appUrl:r,appIcon:i,wallets:n}=t,a$1=ie.get(e);if(a$1)return a$1;let l=t.networks??[v],s=r??(typeof window<"u"?window.location.origin:""),p={name:o??"iDosGames",description:o??"iDosGames game",url:s,icons:i?[i]:[]},c=new SolanaAdapter(n?{wallets:n}:{});return a(createAppKit({adapters:[c],networks:l,projectId:e,metadata:p,features:{analytics:false,email:false,socials:false}})),ie.set(e,c),c}var se="Wallet not connected.";function ke(t,e,o){let{address:r}=useAppKitAccount(),{walletProvider:i}=useAppKitProvider("solana"),n=r??null,a=i?.signMessage?.bind(i);return {connected:!!n,account:n,loginWithWallet:(l,s)=>{let p=s??n;return p?a?c({client:t,networkID:l,walletAddress:p,signMessage:a}):Promise.resolve(c$1("sign","The connected wallet does not support message signing.")):Promise.resolve(c$1("challenge",se))},depositToken:l=>a$1({client:t,adapter:o,titleID:e,...l}),withdrawToken:l=>{let s=l.walletAddress??n;return s?b({client:t,adapter:o,...l,walletAddress:s}):Promise.resolve(b$1("request",se))}}}var Ce=18e4,ce=9e4;function Oe(t){try{let o=t?.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(t,e){return new Promise((o,r)=>{let i=setTimeout(()=>r(new Error("The wallet request timed out.")),e);t.then(n=>{clearTimeout(i),o(n);},n=>{clearTimeout(i),r(n instanceof Error?n:new Error(String(n)));});})}function _e(t){let e="Wallet sign-in failed. Please try again.";return t instanceof Error?/user (rejected|denied|cancelled|canceled)|rejected the request/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}function De(t){let{client:e,networkID:o,onAuthenticated:r,disabled:i,label:n,style:a,autoStart:l,mode:s="login",onLinked:p}=t,{address:c$1,isConnected:g}=useAppKitAccount(),{walletProvider:f}=useAppKitProvider("solana"),[b,S]=useState(false),[w,d$1]=useState(null),[y,T]=useState(false),[A,_]=useState(false),D=useRef(null),te=useRef(0),N=useCallback(()=>{D.current&&clearTimeout(D.current),D.current=null;},[]);useEffect(()=>N,[N]);let F=useRef(false),V=useCallback(async()=>{let K=++te.current,x=()=>te.current===K,q=f?.signMessage?.bind(f);if(!c$1||!q){d$1("The connected wallet cannot sign messages."),S(false);return}S(true),d$1(null);try{if(_(!0),s==="link"){let v=await ue(d({client:e,networkID:o,walletAddress:c$1,signMessage:q}),ce);if(!x())return;if(v.ok){p?.(v.data.PlayAccess??null);return}d$1(v.stage==="sign"?"Signature declined.":authErrorText(v.error,"Could not link the wallet."));return}let k=await ue(c({client:e,networkID:o,walletAddress:c$1,signMessage:q}),ce);if(!x())return;if(k.ok){r();return}d$1(k.stage==="sign"?"Signature declined.":authErrorText(k.error,"Wallet sign-in failed."));}catch(k){if(!x())return;console.error("[idosgames/wallet] solana sign-in failed:",k),d$1(_e(k));}finally{x()&&(S(false),_(false));}},[c$1,f,e,o,r,s,p]),be=useCallback(()=>{Oe(f)||b$2()?.open();},[f]);useEffect(()=>{!y||!g||!c$1||!f||(T(false),N(),V());},[y,g,c$1,f,V,N]);let ne=()=>{if(A){be();return}if(d$1(null),F.current=true,g&&c$1&&f){V();return}let K=b$2();if(!K){d$1("Wallet sign-in is not configured for this title.");return}S(true),T(true),N(),D.current=setTimeout(()=>{T(false),S(false),d$1("No wallet was connected.");},Ce),K.open();};return useEffect(()=>{!l||F.current||(F.current=true,ne());},[l]),jsxs(Fragment,{children:[jsx("button",{type:"button",onClick:ne,disabled:i,style:{...Ne,...i?{opacity:.6,cursor:"default"}:null,...a},children:A?"Waiting for signature \u2014 tap to open wallet":b?"Check your wallet\u2026":g?n??(s==="link"?"Link wallet":"Sign in with wallet"):"Connect wallet"}),w&&jsx("span",{role:"alert",style:Re,children:w})]})}var Ne={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},Re={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};var Me="e000c6afc62f69cc",He="b59a5e563e7306ba",Ge="d668e18c1bdc33f1",G=new PublicKey("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"),Fe="1nc1nerator11111111111111111111111111111111",de=177,Ve=3e5,ge=40,me=4,Se=ge+32*me,qe=Se+8,P=class extends Error{constructor(o,r){super(r);this.code=o;this.name="PlatformPoolError";}code};function H(t){let e=(t??"").replace(/^0x/i,""),o=new Uint8Array(e.length>>1);for(let r=0;r<o.length;r++)o[r]=parseInt(e.slice(r*2,r*2+2),16);return o}function E(t){let e=Buffer.alloc(8);return e.writeBigUInt64LE(BigInt(t||0)),e}function je(t){let e=Buffer.alloc(8);return e.writeBigInt64LE(BigInt(t||0)),e}function O(t){let e=Buffer.from(t??"","utf8"),o=Buffer.alloc(4);return o.writeUInt32LE(e.length),Buffer.concat([o,e])}async function fe(t){let e=await globalThis.crypto.subtle.digest("SHA-256",new TextEncoder().encode(t??""));return new Uint8Array(e)}function we(t,e,o){return I(t,Buffer.from("title_balance"),Buffer.from(e),o.toBuffer())}function $e(t){return Buffer.concat([Buffer.from(Me,"hex"),E(t.amountRaw),O(t.userID),O(t.titleID),O(t.category),Buffer.from(t.titleHash)])}function ze(t,e){let o=t.Splits??[],r=Buffer.alloc(4);return r.writeUInt32LE(o.length),Buffer.concat([Buffer.from(t.Domain==="SPL_DEV"?Ge:He,"hex"),E(t.Amount),E(t.BurnAmount),E(t.Nonce),je(t.ExpiresAt),r,...o.map(i=>Buffer.concat([Buffer.from(new PublicKey(i.To??"").toBytes()),E(i.Amount)])),O(t.UserID),O(t.TitleID),O(t.Category),Buffer.from(e)])}function C(t,e,o){return PublicKey.findProgramAddressSync([e.toBuffer(),o.toBuffer(),t.toBuffer()],G)[0]}function Ye(t,e,o,r,i){return new TransactionInstruction({programId:G,keys:[{pubkey:t,isSigner:true,isWritable:true},{pubkey:e,isSigner:false,isWritable:true},{pubkey:o,isSigner:false,isWritable:false},{pubkey:r,isSigner:false,isWritable:false},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:i,isSigner:false,isWritable:false}],data:Buffer.from([1])})}function I(t,...e){return PublicKey.findProgramAddressSync(e,t)[0]}function Je(t){let{programId:e,user:o,mint:r,tokenProgram:i}=t,n=I(e,Buffer.from("vault"));return new TransactionInstruction({programId:e,keys:[{pubkey:I(e,Buffer.from("config")),isSigner:false,isWritable:false},{pubkey:n,isSigner:false,isWritable:true},{pubkey:r,isSigner:false,isWritable:false},{pubkey:o,isSigner:true,isWritable:true},{pubkey:C(r,o,i),isSigner:false,isWritable:true},{pubkey:C(r,n,i),isSigner:false,isWritable:true},{pubkey:i,isSigner:false,isWritable:false},{pubkey:G,isSigner:false,isWritable:false},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:we(e,t.titleHash,r),isSigner:false,isWritable:true}],data:$e(t)})}function Xe(t){let{sig:e,payer:o,tokenProgram:r,titleHash:i}=t,n=new PublicKey(e.ProgramID??""),a=new PublicKey(e.Mint??""),l=new PublicKey(e.WalletAddress??""),s=I(n,Buffer.from("vault")),p=new PublicKey(Fe),c=(e.Splits??[]).map(w=>new PublicKey(w.To??"")),g=c.map(w=>C(a,w,r)),f=Ed25519Program.createInstructionWithPublicKey({publicKey:H(e.Ed25519PublicKey),message:H(e.Ed25519Message),signature:H(e.SignatureHex)}),b=c.map((w,d)=>Ye(o,g[d],w,a,r)),S=new TransactionInstruction({programId:n,keys:[{pubkey:I(n,Buffer.from("config")),isSigner:false,isWritable:false},{pubkey:o,isSigner:true,isWritable:true},{pubkey:s,isSigner:false,isWritable:true},{pubkey:I(n,Buffer.from("nonce"),E(e.Nonce)),isSigner:false,isWritable:true},{pubkey:a,isSigner:false,isWritable:false},{pubkey:l,isSigner:false,isWritable:false},{pubkey:C(a,s,r),isSigner:false,isWritable:true},{pubkey:C(a,l,r),isSigner:false,isWritable:true},{pubkey:p,isSigner:false,isWritable:false},{pubkey:C(a,p,r),isSigner:false,isWritable:true},{pubkey:SYSVAR_INSTRUCTIONS_PUBKEY,isSigner:false,isWritable:false},{pubkey:r,isSigner:false,isWritable:false},{pubkey:G,isSigner:false,isWritable:false},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:we(n,i,a),isSigner:false,isWritable:true},...g.map(w=>({pubkey:w,isSigner:false,isWritable:true}))],data:ze(e,i)});return [f,...b,S]}async function Ze(t,e,o){let r=async n=>{let a=(await t.getSignatureStatuses([e],{searchTransactionHistory:n})).value[0];if(a?.err)throw new P("TRANSACTION_FAILED",`transaction ${e} failed: ${JSON.stringify(a.err)}`);return a},i=n=>n?.confirmationStatus==="confirmed"||n?.confirmationStatus==="finalized";for(let n=1;;n++){await new Promise(s=>setTimeout(s,Qe));let a=null;try{a=await r(!1);}catch(s){if(s instanceof P)throw s}if(i(a))return;if(!(a||n%et!==0||await t.getBlockHeight("confirmed").catch(()=>-1)<=o)){if(i(await r(true).catch(()=>null)))return;throw new P("TRANSACTION_EXPIRED",`transaction ${e} expired: block height exceeded`)}}}var Qe=2e3,et=5;function ee(t){let{connection:e,signTransaction:o}=t;async function r(n){let a=await e.getAccountInfo(n);if(!a)throw new P("MINT_NOT_FOUND",`mint ${n.toBase58()} not found`);return a.owner}async function i(n,a){let{blockhash:l,lastValidBlockHeight:s}=await e.getLatestBlockhash("confirmed"),p=new Transaction;p.feePayer=n,p.recentBlockhash=l,p.add(...a);let c=await o(p),g=await e.sendRawTransaction(c.serialize());return await Ze(e,g,s),g}return {async depositSpl({mint:n,amountRaw:a,userID:l,titleID:s,category:p}){let c=new PublicKey(t.owner),g=new PublicKey(n),f=await r(g);return i(c,[Je({programId:new PublicKey(t.programId),user:c,mint:g,tokenProgram:f,amountRaw:a,userID:l,titleID:s,category:p,titleHash:await fe(s)})])},async submitWithdrawal(n){if(!n.ProgramID||!n.Mint||!n.WalletAddress)throw new P("BAD_VOUCHER","the voucher has no program, mint or wallet");let a=new PublicKey(t.owner),l=new PublicKey(n.ProgramID),s=await e.getAccountInfo(I(l,Buffer.from("config")));if(!s)throw new P("POOL_NOT_ON_THIS_CLUSTER","the pool's config account is not on this cluster");if(s.data.length!==de)throw new P("POOL_NOT_MIGRATED",`config is ${s.data.length} bytes, expected ${de} (migrate_config not run)`);let p=Buffer.from(s.data);if(p[qe]===1)throw new P("POOL_PAUSED","pool withdrawals are paused");let c=p.readBigUInt64LE(Se);if(c!==BigInt(n.SignatureEpoch||0))throw new P("VOUCHER_REVOKED",`signature epoch mismatch: voucher ${n.SignatureEpoch}, on-chain ${c}`);let g=Buffer.from(H(n.Ed25519PublicKey)),f=false;for(let S=0;S<me;S++){let w=ge+S*32;g.equals(p.subarray(w,w+32))&&(f=true);}if(!f)throw new P("SIGNER_NOT_TRUSTED","the voucher's signer is not in the pool's server_pubkeys");let b=await r(new PublicKey(n.Mint));return i(a,[ComputeBudgetProgram.setComputeUnitLimit({units:Ve}),...Xe({sig:n,payer:a,tokenProgram:b,titleHash:await fe(n.TitleID??"")})])}}}var lt=103;function Pe(t){return (t.ChainID===lt?w:v).rpcUrls.default.http[0]}function ct(t){let{client:e,walletConnectProjectId:o,appName:r,onClose:i,style:n,topUp:a}=t,[l,s]=useState(o??"");useEffect(()=>{if(o)return;let d=true;return (async()=>{let y=await e.blockchain.getDefinitions();if(!d||!y.ok)return;let T=y.data.Blockchain?.WalletLogin?.WalletConnectProjectId;T&&s(T);})(),()=>{d=false;}},[e,o]);let p=useMemo(()=>l?(z({walletConnectProjectId:l,appName:r}),true):false,[l,r]),{address:c,isConnected:g}=useAppKitAccount(),{walletProvider:f}=useAppKitProvider("solana"),b$3=g&&c?c:null,S=(d,y)=>ee({connection:new Connection(Pe(d),"confirmed"),owner:y,programId:d.RewardPoolAddress??"",signTransaction:async T=>{if(!f)throw new Error("Wallet not connected.");return f.signTransaction(T)}});return jsx(c$2,{client:e,engine:{networkType:"Solana",address:b$3,connectChoices:p?[{key:"appkit",label:"Connect wallet",connect:()=>{b$2()?.open();}}]:[],disconnect:()=>{b$2()?.disconnect("solana");},deposit:async({network:d,binding:y,amount:T})=>{if(!b$3)return b$1("deposit-onchain","Wallet not connected.");if(!y.ContractAddress)return b$1("deposit-onchain","This token cannot be deposited.");if(!d.RewardPoolAddress)return b$1("deposit-onchain","POOL_NOT_IN_REGISTRY");let A;try{A=(await new Connection(Pe(d),"confirmed").getTokenSupply(new PublicKey(y.ContractAddress))).value.decimals;}catch{return b$1("deposit-onchain","Could not read the token from the network. Try again.")}let _;try{_=parseUnits(T,A);}catch{return b$1("deposit-onchain","Invalid amount.")}return a$1({client:e,adapter:S(d,b$3),network:d,mint:y.ContractAddress,amountRaw:_,titleID:e.titleID})},withdraw:async({network:d,networkID:y,currencyID:T,amount:A})=>b$3?b({client:e,adapter:S(d,b$3),currencyID:T,networkID:y,walletAddress:b$3,amount:A}):b$1("request","Wallet not connected.")},onClose:i,style:n,topUp:a})}export{P as PlatformPoolError,De as SolanaWalletLogin,ct as SolanaWalletPanel,ee as createPlatformPoolAdapter,z as createSolanaWalletConfig,ke as useSolanaBridge};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@idosgames/wallet",
3
- "version": "0.6.3",
3
+ "version": "0.6.4",
4
4
  "description": "Wallet-bridge companion to @idosgames/core: connect browser & mobile wallets (EVM via wagmi/viem/WalletConnect, Solana via wallet-adapter) and move tokens/NFTs in and out of the game through client.blockchain.",
5
5
  "type": "module",
6
6
  "license": "MIT",