@idosgames/wallet 0.1.13 → 0.1.15

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.
@@ -29,6 +29,28 @@ interface SolanaProgramAdapter {
29
29
  * Builds and sends the on-chain `withdraw_spl` transaction from a server-issued signature
30
30
  * payload — including the ed25519 sig-verify instruction at `SigIxIndex` carrying
31
31
  * `Ed25519PublicKey`/`Ed25519Message`/`SignatureHex`. Returns the transaction signature.
32
+ *
33
+ * Everything in `sig` is bound into the signed message, and the program rebuilds that message
34
+ * from the instruction arguments and compares it byte-for-byte. So pass them all through, in
35
+ * declaration order, and change nothing:
36
+ *
37
+ * `withdraw_spl(amount, burn_amount, nonce, expires_at, splits, user_id, title_id, category,
38
+ * sig_ix_index)` — and `withdraw_spl_dev` when `Domain === "SPL_DEV"`; the two are
39
+ * deliberately not interchangeable.
40
+ *
41
+ * Two things the SDK cannot do for you:
42
+ * - **`Splits`** — besides the `splits` argument, each recipient's associated token account must
43
+ * be appended to `remaining_accounts` in the SAME order. The program derives the expected ATA
44
+ * from the signed owner key and rejects anything else, and it cannot create a missing one:
45
+ * put `createAssociatedTokenAccountIdempotent` for each into the same transaction. Those
46
+ * instructions must come AFTER the ed25519 instruction, or `SigIxIndex` stops pointing at it.
47
+ * - **Transaction size** — a legacy transaction fits roughly two splits; beyond that use a
48
+ * versioned transaction with an address lookup table (and raise the compute budget for the
49
+ * extra CPI transfers). The program's own cap is higher on purpose, so this is a transport
50
+ * upgrade on your side, not a program change.
51
+ *
52
+ * `SignatureEpoch` is NOT an argument — the program reads its own. It is exposed only so a
53
+ * `SigMismatch` right after the pool owner bumped the epoch is diagnosable.
32
54
  */
33
55
  submitWithdrawal(sig: SolanaWithdrawalSignature): Promise<string>;
34
56
  }
@@ -29,6 +29,28 @@ interface SolanaProgramAdapter {
29
29
  * Builds and sends the on-chain `withdraw_spl` transaction from a server-issued signature
30
30
  * payload — including the ed25519 sig-verify instruction at `SigIxIndex` carrying
31
31
  * `Ed25519PublicKey`/`Ed25519Message`/`SignatureHex`. Returns the transaction signature.
32
+ *
33
+ * Everything in `sig` is bound into the signed message, and the program rebuilds that message
34
+ * from the instruction arguments and compares it byte-for-byte. So pass them all through, in
35
+ * declaration order, and change nothing:
36
+ *
37
+ * `withdraw_spl(amount, burn_amount, nonce, expires_at, splits, user_id, title_id, category,
38
+ * sig_ix_index)` — and `withdraw_spl_dev` when `Domain === "SPL_DEV"`; the two are
39
+ * deliberately not interchangeable.
40
+ *
41
+ * Two things the SDK cannot do for you:
42
+ * - **`Splits`** — besides the `splits` argument, each recipient's associated token account must
43
+ * be appended to `remaining_accounts` in the SAME order. The program derives the expected ATA
44
+ * from the signed owner key and rejects anything else, and it cannot create a missing one:
45
+ * put `createAssociatedTokenAccountIdempotent` for each into the same transaction. Those
46
+ * instructions must come AFTER the ed25519 instruction, or `SigIxIndex` stops pointing at it.
47
+ * - **Transaction size** — a legacy transaction fits roughly two splits; beyond that use a
48
+ * versioned transaction with an address lookup table (and raise the compute budget for the
49
+ * extra CPI transfers). The program's own cap is higher on purpose, so this is a transport
50
+ * upgrade on your side, not a program change.
51
+ *
52
+ * `SignatureEpoch` is NOT an argument — the program reads its own. It is exposed only so a
53
+ * `SigMismatch` right after the pool owner bumped the epoch is diagnosable.
32
54
  */
33
55
  submitWithdrawal(sig: SolanaWithdrawalSignature): Promise<string>;
34
56
  }
@@ -0,0 +1 @@
1
+ import {b as b$1,a,c}from'./chunk-K62NMX3A.js';import {encodeAbiParameters}from'viem';import {normalizeBlockchainCategory}from'@idosgames/core';var w=[{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:[]}],k=[{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:[]}],b=[{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"}]}],D=[{type:"function",name:"safeTransferFrom",stateMutability:"nonpayable",inputs:[{name:"from",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]},{type:"function",name:"isApprovedForAll",stateMutability:"view",inputs:[{name:"account",type:"address"},{name:"operator",type:"address"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"setApprovalForAll",stateMutability:"nonpayable",inputs:[{name:"operator",type:"address"},{name:"approved",type:"bool"}],outputs:[]},{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"},{name:"id",type:"uint256"}],outputs:[{name:"",type:"uint256"}]}],v=[{type:"function",name:"safeTransferFrom",stateMutability:"nonpayable",inputs:[{name:"from",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]}];function A(e,t,n){return encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[e,t,normalizeBlockchainCategory(n)])}async function f(e,t){let{walletClient:n,publicClient:r,account:m}=e,o=await n.writeContract({address:t.address,abi:t.abi,functionName:t.functionName,args:t.args,account:m,chain:n.chain,value:t.value});if((await r.waitForTransactionReceipt({hash:o})).status==="reverted")throw new Error(`On-chain transaction reverted (${o}).`);return o}function I(e){let t=e.RewardPoolAddress;return t||null}async function C(e,t,n,r){return await e.publicClient.readContract({address:t,abi:b,functionName:"allowance",args:[e.account,n]})>=r?null:f(e,{address:t,abi:b,functionName:"approve",args:[n,r]})}async function R(e){let{client:t,clients:n,network:r,tokenAddress:m,amount:o,titleID:u,category:l}=e,i=t.auth.context?.userID;if(!i)return b$1("approve","Not logged in.");let c=I(r);if(!c)return b$1("approve","Network has no RewardPoolAddress.");if(o<=0n)return b$1("approve","Amount must be positive.");try{await C(n,m,c,o);}catch(d){return b$1("approve",a(d))}let p;try{p=await f(n,{address:c,abi:w,functionName:"depositERC20",args:[m,o,i,u,l??""]});}catch(d){return b$1("deposit-onchain",a(d))}let s=await t.blockchain.depositToken(r.NetworkID??"",p);return s.ok?{ok:true,onChainTxHash:p,data:s.data}:b$1("report",s.error,{onChainTxHash:p})}async function H(e){let{client:t,clients:n,network:r,nftContractAddress:m,tokenId:o,amount:u,titleID:l,category:i}=e,c=t.auth.context?.userID;if(!c)return b$1("deposit-onchain","Not logged in.");let p=I(r);if(!p)return b$1("deposit-onchain","Network has no RewardPoolAddress.");if(u<=0n)return b$1("deposit-onchain","Amount must be positive.");let s=A(c,l,i),d;try{d=await f(n,{address:m,abi:D,functionName:"safeTransferFrom",args:[n.account,p,o,u,s]});}catch(W){return b$1("deposit-onchain",a(W))}let g=await t.blockchain.depositNFT(r.NetworkID??"",d);return g.ok?{ok:true,onChainTxHash:d,data:g.data}:b$1("report",g.error,{onChainTxHash:d})}async function M(e){let{client:t,clients:n,network:r,nftContractAddress:m,tokenId:o,titleID:u,category:l}=e,i=t.auth.context?.userID;if(!i)return b$1("deposit-onchain","Not logged in.");let c=I(r);if(!c)return b$1("deposit-onchain","Network has no RewardPoolAddress.");let p=A(i,u,l),s;try{s=await f(n,{address:m,abi:v,functionName:"safeTransferFrom",args:[n.account,c,o,p]});}catch(g){return b$1("deposit-onchain",a(g))}let d=await t.blockchain.depositNFT(r.NetworkID??"",s);return d.ok?{ok:true,onChainTxHash:s,data:d.data}:b$1("report",d.error,{onChainTxHash:s})}function E(e){return (e.Splits??[]).map(t=>({to:t.To,amount:BigInt(t.Amount??"0")}))}async function x(e,t){return f(e,{address:t.ContractAddress,abi:w,functionName:"withdrawERC20",args:[t.TokenAddress,t.WalletAddress,BigInt(t.Amount??"0"),BigInt(t.BurnAmount??"0"),E(t),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function N(e,t){return f(e,{address:t.ContractAddress,abi:k,functionName:"withdrawERC1155Mint",args:[t.TokenAddress,t.WalletAddress,BigInt(t.TokenId??"0"),BigInt(t.Amount??"0"),E(t),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function F(e,t){return f(e,{address:t.ContractAddress,abi:k,functionName:"withdrawERC721Mint",args:[t.TokenAddress,t.WalletAddress,BigInt(t.TokenId??"0"),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function S(e){let{client:t,clients:n,currencyID:r,networkID:m,walletAddress:o,amount:u,category:l}=e,i=await t.blockchain.requestTokenWithdrawal(r,m,o,u,l);if(!i.ok)return b$1("request",i.error);let c=i.data.EvmSignature,p=i.data.TitleTransactionID??void 0;if(!c)return b$1("request","Withdrawal response carried no EVM signature.",{titleTransactionID:p});let s;try{s=await x(n,c);}catch(g){return b$1("withdraw-onchain",a(g),{titleTransactionID:p})}let d=await T(t,p,s);return d.ok?{ok:true,onChainTxHash:s,data:i.data}:d}async function G(e){let{client:t,clients:n,itemID:r,networkID:m,walletAddress:o,amount:u,category:l}=e,i=await t.blockchain.requestNFTWithdrawal(r,m,o,u,l);if(!i.ok)return b$1("request",i.error);let c=i.data.EvmSignature,p=i.data.TitleTransactionID??void 0;if(!c)return b$1("request","Withdrawal response carried no EVM signature.",{titleTransactionID:p});let s;try{s=await N(n,c);}catch(g){return b$1("withdraw-onchain",a(g),{titleTransactionID:p})}let d=await T(t,p,s);return d.ok?{ok:true,onChainTxHash:s,data:i.data}:d}async function T(e,t,n){if(!t)return b$1("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let r=await e.blockchain.confirmWithdrawal(t,n);return r.ok?{ok:true,onChainTxHash:n,data:r.data}:b$1("confirm",r.error,{onChainTxHash:n,titleTransactionID:t})}async function L(e){let{client:t,clients:n,networkID:r}=e,m=e.walletAddress??n.account,o=await t.auth.requestWalletChallenge(m,r);if(!o.ok)return c("challenge",o.error);let u;try{u=await n.walletClient.signMessage({account:n.account,message:o.data.Message});}catch(i){return c("sign",a(i))}let l=await t.auth.loginWithWallet(m,r,u);return l.ok?{ok:true,data:l.data}:c("login",l.error)}export{w as a,b,D as c,v as d,A as e,f,C as g,R as h,H as i,M as j,x as k,N as l,F as m,S as n,G as o,L as p};
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var viem=require('viem'),core=require('@idosgames/core');function g(t){return t instanceof viem.BaseError?t.shortMessage:t instanceof Error?t.message:String(t)}function a(t,e,n){return {ok:false,stage:t,error:e,...n}}function h(t,e){return {ok:false,stage:t,error:e}}var S={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"}}},B={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"}}},P={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"}}},R={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"}}},H={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"}}},M={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"}}},F={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"}}},L={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"}}},U={mainnet:S,bsc:B,polygon:P,base:R,arbitrum:H,optimism:M,sepolia:F,polygonAmoy:L};function ne(t){return Object.values(U).find(e=>e.id===t)}function ae(t){return {...t,chainNamespace:"eip155",caipNetworkId:`eip155:${t.id}`}}var re={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"},oe={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 w=[{type:"function",name:"depositERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"amount",type:"uint256"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"withdrawERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"amount",type:"uint256"},{name:"burnAmount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC1155",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],x=[{type:"function",name:"withdrawERC1155Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],k=[{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"}]}],A=[{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"}]}],C=[{type:"function",name:"safeTransferFrom",stateMutability:"nonpayable",inputs:[{name:"from",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]}];function b(t,e,n){return viem.encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[t,e,core.normalizeBlockchainCategory(n)])}async function f(t,e){let{walletClient:n,publicClient:o,account:p}=t,i=await n.writeContract({address:e.address,abi:e.abi,functionName:e.functionName,args:e.args,account:p,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 D(t){let e=t.RewardPoolAddress;return e||null}async function E(t,e,n,o){return await t.publicClient.readContract({address:e,abi:k,functionName:"allowance",args:[t.account,n]})>=o?null:f(t,{address:e,abi:k,functionName:"approve",args:[n,o]})}async function O(t){let{client:e,clients:n,network:o,tokenAddress:p,amount:i,titleID:d,category:m}=t,r=e.auth.context?.userID;if(!r)return a("approve","Not logged in.");let c=D(o);if(!c)return a("approve","Network has no RewardPoolAddress.");if(i<=0n)return a("approve","Amount must be positive.");try{await E(n,p,c,i);}catch(u){return a("approve",g(u))}let s;try{s=await f(n,{address:c,abi:w,functionName:"depositERC20",args:[p,i,r,d,m??""]});}catch(u){return a("deposit-onchain",g(u))}let l=await e.blockchain.depositToken(o.NetworkID??"",s);return l.ok?{ok:true,onChainTxHash:s,data:l.data}:a("report",l.error,{onChainTxHash:s})}async function K(t){let{client:e,clients:n,network:o,nftContractAddress:p,tokenId:i,amount:d,titleID:m,category:r}=t,c=e.auth.context?.userID;if(!c)return a("deposit-onchain","Not logged in.");let s=D(o);if(!s)return a("deposit-onchain","Network has no RewardPoolAddress.");if(d<=0n)return a("deposit-onchain","Amount must be positive.");let l=b(c,m,r),u;try{u=await f(n,{address:p,abi:A,functionName:"safeTransferFrom",args:[n.account,s,i,d,l]});}catch(W){return a("deposit-onchain",g(W))}let y=await e.blockchain.depositNFT(o.NetworkID??"",u);return y.ok?{ok:true,onChainTxHash:u,data:y.data}:a("report",y.error,{onChainTxHash:u})}async function Y(t){let{client:e,clients:n,network:o,nftContractAddress:p,tokenId:i,titleID:d,category:m}=t,r=e.auth.context?.userID;if(!r)return a("deposit-onchain","Not logged in.");let c=D(o);if(!c)return a("deposit-onchain","Network has no RewardPoolAddress.");let s=b(r,d,m),l;try{l=await f(n,{address:p,abi:C,functionName:"safeTransferFrom",args:[n.account,c,i,s]});}catch(y){return a("deposit-onchain",g(y))}let u=await e.blockchain.depositNFT(o.NetworkID??"",l);return u.ok?{ok:true,onChainTxHash:l,data:u.data}:a("report",u.error,{onChainTxHash:l})}async function v(t,e){return f(t,{address:e.ContractAddress,abi:w,functionName:"withdrawERC20",args:[e.TokenAddress,e.WalletAddress,BigInt(e.Amount??"0"),BigInt(e.BurnAmount??"0"),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function T(t,e){return f(t,{address:e.ContractAddress,abi:x,functionName:"withdrawERC1155Mint",args:[e.TokenAddress,e.WalletAddress,BigInt(e.TokenId??"0"),BigInt(e.Amount??"0"),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function z(t,e){return f(t,{address:e.ContractAddress,abi:x,functionName:"withdrawERC721Mint",args:[e.TokenAddress,e.WalletAddress,BigInt(e.TokenId??"0"),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function V(t){let{client:e,clients:n,currencyID:o,networkID:p,walletAddress:i,amount:d,category:m}=t,r=await e.blockchain.requestTokenWithdrawal(o,p,i,d,m);if(!r.ok)return a("request",r.error);let c=r.data.EvmSignature,s=r.data.TitleTransactionID??void 0;if(!c)return a("request","Withdrawal response carried no EVM signature.",{titleTransactionID:s});let l;try{l=await v(n,c);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:s})}let u=await I(e,s,l);return u.ok?{ok:true,onChainTxHash:l,data:r.data}:u}async function Z(t){let{client:e,clients:n,itemID:o,networkID:p,walletAddress:i,amount:d,category:m}=t,r=await e.blockchain.requestNFTWithdrawal(o,p,i,d,m);if(!r.ok)return a("request",r.error);let c=r.data.EvmSignature,s=r.data.TitleTransactionID??void 0;if(!c)return a("request","Withdrawal response carried no EVM signature.",{titleTransactionID:s});let l;try{l=await T(n,c);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:s})}let u=await I(e,s,l);return u.ok?{ok:true,onChainTxHash:l,data:r.data}:u}async function I(t,e,n){if(!e)return a("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let o=await t.blockchain.confirmWithdrawal(e,n);return o.ok?{ok:true,onChainTxHash:n,data:o.data}:a("confirm",o.error,{onChainTxHash:n,titleTransactionID:e})}async function $(t){let{client:e,clients:n,networkID:o}=t,p=t.walletAddress??n.account,i=await e.auth.requestWalletChallenge(p,o);if(!i.ok)return h("challenge",i.error);let d;try{d=await n.walletClient.signMessage({account:n.account,message:i.data.Message});}catch(r){return h("sign",g(r))}let m=await e.auth.loginWithWallet(p,o,d);return m.ok?{ok:true,data:m.data}:h("login",m.error)}async function j(t){let{client:e,adapter:n,network:o,mint:p,amountRaw:i,titleID:d,category:m}=t,r=e.auth.context?.userID;if(!r)return a("deposit-onchain","Not logged in.");if(i<=0n)return a("deposit-onchain","Amount must be positive.");let c;try{c=await n.depositSpl({mint:p,amountRaw:i,userID:r,titleID:d,category:core.normalizeBlockchainCategory(m)});}catch(l){return a("deposit-onchain",g(l))}let s=await e.blockchain.depositToken(o.NetworkID??"",c);return s.ok?{ok:true,onChainTxHash:c,data:s.data}:a("report",s.error,{onChainTxHash:c})}async function Q(t){let{client:e,adapter:n,currencyID:o,networkID:p,walletAddress:i,amount:d,category:m}=t,r=await e.blockchain.requestTokenWithdrawal(o,p,i,d,m);if(!r.ok)return a("request",r.error);let c=r.data.SolanaSignature,s=r.data.TitleTransactionID??void 0;if(!c)return a("request","Withdrawal response carried no Solana signature.",{titleTransactionID:s});let l;try{l=await n.submitWithdrawal(c);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:s})}if(!s)return a("confirm","Missing TitleTransactionID.",{onChainTxHash:l});let u=await e.blockchain.confirmWithdrawal(s,l);return u.ok?{ok:true,onChainTxHash:l,data:r.data}:a("confirm",u.error,{onChainTxHash:l,titleTransactionID:s})}async function X(t){let{client:e,networkID:n,walletAddress:o,signMessage:p}=t,i=await e.auth.requestWalletChallenge(o,n);if(!i.ok)return h("challenge",i.error);let d;try{let r=await p(new TextEncoder().encode(i.data.Message));d=_(r);}catch(r){return h("sign",g(r))}let m=await e.auth.loginWithWallet(o,n,d);return m.ok?{ok:true,data:m.data}:h("login",m.error)}function _(t){let e="0x";for(let n of t)e+=n.toString(16).padStart(2,"0");return e}
2
- exports.arbitrum=H;exports.base=R;exports.bridgeFail=a;exports.bsc=B;exports.chainById=ne;exports.depositNftEvm=K;exports.depositNftEvm721=Y;exports.depositTokenEvm=O;exports.depositTokenSolana=j;exports.encodeNftDepositData=b;exports.ensureErc20Allowance=E;exports.erc1155Abi=A;exports.erc20Abi=k;exports.erc721Abi=C;exports.idosChains=U;exports.loginWithWalletEvm=$;exports.loginWithWalletSolana=X;exports.mainnet=S;exports.optimism=M;exports.polygon=P;exports.polygonAmoy=L;exports.rewardPoolAbi=w;exports.sepolia=F;exports.solanaDevnet=oe;exports.solanaMainnet=re;exports.submitEvmNftWithdrawal=T;exports.submitEvmNftWithdrawal721=z;exports.submitEvmTokenWithdrawal=v;exports.toAppKitNetwork=ae;exports.toErrorMessage=g;exports.walletLoginFail=h;exports.withdrawNftEvm=Z;exports.withdrawTokenEvm=V;exports.withdrawTokenSolana=Q;exports.writeAndWait=f;
1
+ 'use strict';var viem=require('viem'),core=require('@idosgames/core');function g(e){return e instanceof viem.BaseError?e.shortMessage:e instanceof Error?e.message:String(e)}function a(e,t,n){return {ok:false,stage:e,error:t,...n}}function h(e,t){return {ok:false,stage:e,error:t}}var B={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"}}},P={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"}}},R={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"}}},H={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"}}},M={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"}}},F={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"}}},L={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"}}},U={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"}}},q={mainnet:B,bsc:P,polygon:R,base:H,arbitrum:M,optimism:F,sepolia:L,polygonAmoy:U};function at(e){return Object.values(q).find(t=>t.id===e)}function rt(e){return {...e,chainNamespace:"eip155",caipNetworkId:`eip155:${e.id}`}}var ot={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"},it={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 w=[{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:[]}],x=[{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:[]}],k=[{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"}]}],A=[{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"}]}],C=[{type:"function",name:"safeTransferFrom",stateMutability:"nonpayable",inputs:[{name:"from",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]}];function b(e,t,n){return viem.encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[e,t,core.normalizeBlockchainCategory(n)])}async function f(e,t){let{walletClient:n,publicClient:o,account:c}=e,i=await n.writeContract({address:t.address,abi:t.abi,functionName:t.functionName,args:t.args,account:c,chain:n.chain,value:t.value});if((await o.waitForTransactionReceipt({hash:i})).status==="reverted")throw new Error(`On-chain transaction reverted (${i}).`);return i}function D(e){let t=e.RewardPoolAddress;return t||null}async function E(e,t,n,o){return await e.publicClient.readContract({address:t,abi:k,functionName:"allowance",args:[e.account,n]})>=o?null:f(e,{address:t,abi:k,functionName:"approve",args:[n,o]})}async function K(e){let{client:t,clients:n,network:o,tokenAddress:c,amount:i,titleID:d,category:m}=e,r=t.auth.context?.userID;if(!r)return a("approve","Not logged in.");let p=D(o);if(!p)return a("approve","Network has no RewardPoolAddress.");if(i<=0n)return a("approve","Amount must be positive.");try{await E(n,c,p,i);}catch(u){return a("approve",g(u))}let s;try{s=await f(n,{address:p,abi:w,functionName:"depositERC20",args:[c,i,r,d,m??""]});}catch(u){return a("deposit-onchain",g(u))}let l=await t.blockchain.depositToken(o.NetworkID??"",s);return l.ok?{ok:true,onChainTxHash:s,data:l.data}:a("report",l.error,{onChainTxHash:s})}async function Y(e){let{client:t,clients:n,network:o,nftContractAddress:c,tokenId:i,amount:d,titleID:m,category:r}=e,p=t.auth.context?.userID;if(!p)return a("deposit-onchain","Not logged in.");let s=D(o);if(!s)return a("deposit-onchain","Network has no RewardPoolAddress.");if(d<=0n)return a("deposit-onchain","Amount must be positive.");let l=b(p,m,r),u;try{u=await f(n,{address:c,abi:A,functionName:"safeTransferFrom",args:[n.account,s,i,d,l]});}catch(N){return a("deposit-onchain",g(N))}let y=await t.blockchain.depositNFT(o.NetworkID??"",u);return y.ok?{ok:true,onChainTxHash:u,data:y.data}:a("report",y.error,{onChainTxHash:u})}async function z(e){let{client:t,clients:n,network:o,nftContractAddress:c,tokenId:i,titleID:d,category:m}=e,r=t.auth.context?.userID;if(!r)return a("deposit-onchain","Not logged in.");let p=D(o);if(!p)return a("deposit-onchain","Network has no RewardPoolAddress.");let s=b(r,d,m),l;try{l=await f(n,{address:c,abi:C,functionName:"safeTransferFrom",args:[n.account,p,i,s]});}catch(y){return a("deposit-onchain",g(y))}let u=await t.blockchain.depositNFT(o.NetworkID??"",l);return u.ok?{ok:true,onChainTxHash:l,data:u.data}:a("report",u.error,{onChainTxHash:l})}function v(e){return (e.Splits??[]).map(t=>({to:t.To,amount:BigInt(t.Amount??"0")}))}async function T(e,t){return f(e,{address:t.ContractAddress,abi:w,functionName:"withdrawERC20",args:[t.TokenAddress,t.WalletAddress,BigInt(t.Amount??"0"),BigInt(t.BurnAmount??"0"),v(t),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function I(e,t){return f(e,{address:t.ContractAddress,abi:x,functionName:"withdrawERC1155Mint",args:[t.TokenAddress,t.WalletAddress,BigInt(t.TokenId??"0"),BigInt(t.Amount??"0"),v(t),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function V(e,t){return f(e,{address:t.ContractAddress,abi:x,functionName:"withdrawERC721Mint",args:[t.TokenAddress,t.WalletAddress,BigInt(t.TokenId??"0"),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function Z(e){let{client:t,clients:n,currencyID:o,networkID:c,walletAddress:i,amount:d,category:m}=e,r=await t.blockchain.requestTokenWithdrawal(o,c,i,d,m);if(!r.ok)return a("request",r.error);let p=r.data.EvmSignature,s=r.data.TitleTransactionID??void 0;if(!p)return a("request","Withdrawal response carried no EVM signature.",{titleTransactionID:s});let l;try{l=await T(n,p);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:s})}let u=await W(t,s,l);return u.ok?{ok:true,onChainTxHash:l,data:r.data}:u}async function $(e){let{client:t,clients:n,itemID:o,networkID:c,walletAddress:i,amount:d,category:m}=e,r=await t.blockchain.requestNFTWithdrawal(o,c,i,d,m);if(!r.ok)return a("request",r.error);let p=r.data.EvmSignature,s=r.data.TitleTransactionID??void 0;if(!p)return a("request","Withdrawal response carried no EVM signature.",{titleTransactionID:s});let l;try{l=await I(n,p);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:s})}let u=await W(t,s,l);return u.ok?{ok:true,onChainTxHash:l,data:r.data}:u}async function W(e,t,n){if(!t)return a("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let o=await e.blockchain.confirmWithdrawal(t,n);return o.ok?{ok:true,onChainTxHash:n,data:o.data}:a("confirm",o.error,{onChainTxHash:n,titleTransactionID:t})}async function J(e){let{client:t,clients:n,networkID:o}=e,c=e.walletAddress??n.account,i=await t.auth.requestWalletChallenge(c,o);if(!i.ok)return h("challenge",i.error);let d;try{d=await n.walletClient.signMessage({account:n.account,message:i.data.Message});}catch(r){return h("sign",g(r))}let m=await t.auth.loginWithWallet(c,o,d);return m.ok?{ok:true,data:m.data}:h("login",m.error)}async function Q(e){let{client:t,adapter:n,network:o,mint:c,amountRaw:i,titleID:d,category:m}=e,r=t.auth.context?.userID;if(!r)return a("deposit-onchain","Not logged in.");if(i<=0n)return a("deposit-onchain","Amount must be positive.");let p;try{p=await n.depositSpl({mint:c,amountRaw:i,userID:r,titleID:d,category:core.normalizeBlockchainCategory(m)});}catch(l){return a("deposit-onchain",g(l))}let s=await t.blockchain.depositToken(o.NetworkID??"",p);return s.ok?{ok:true,onChainTxHash:p,data:s.data}:a("report",s.error,{onChainTxHash:p})}async function X(e){let{client:t,adapter:n,currencyID:o,networkID:c,walletAddress:i,amount:d,category:m}=e,r=await t.blockchain.requestTokenWithdrawal(o,c,i,d,m);if(!r.ok)return a("request",r.error);let p=r.data.SolanaSignature,s=r.data.TitleTransactionID??void 0;if(!p)return a("request","Withdrawal response carried no Solana signature.",{titleTransactionID:s});let l;try{l=await n.submitWithdrawal(p);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:s})}if(!s)return a("confirm","Missing TitleTransactionID.",{onChainTxHash:l});let u=await t.blockchain.confirmWithdrawal(s,l);return u.ok?{ok:true,onChainTxHash:l,data:r.data}:a("confirm",u.error,{onChainTxHash:l,titleTransactionID:s})}async function _(e){let{client:t,networkID:n,walletAddress:o,signMessage:c}=e,i=await t.auth.requestWalletChallenge(o,n);if(!i.ok)return h("challenge",i.error);let d;try{let r=await c(new TextEncoder().encode(i.data.Message));d=tt(r);}catch(r){return h("sign",g(r))}let m=await t.auth.loginWithWallet(o,n,d);return m.ok?{ok:true,data:m.data}:h("login",m.error)}function tt(e){let t="0x";for(let n of e)t+=n.toString(16).padStart(2,"0");return t}
2
+ exports.arbitrum=M;exports.base=H;exports.bridgeFail=a;exports.bsc=P;exports.chainById=at;exports.depositNftEvm=Y;exports.depositNftEvm721=z;exports.depositTokenEvm=K;exports.depositTokenSolana=Q;exports.encodeNftDepositData=b;exports.ensureErc20Allowance=E;exports.erc1155Abi=A;exports.erc20Abi=k;exports.erc721Abi=C;exports.idosChains=q;exports.loginWithWalletEvm=J;exports.loginWithWalletSolana=_;exports.mainnet=B;exports.optimism=F;exports.polygon=R;exports.polygonAmoy=U;exports.rewardPoolAbi=w;exports.sepolia=L;exports.solanaDevnet=it;exports.solanaMainnet=ot;exports.submitEvmNftWithdrawal=I;exports.submitEvmNftWithdrawal721=V;exports.submitEvmTokenWithdrawal=T;exports.toAppKitNetwork=rt;exports.toErrorMessage=g;exports.walletLoginFail=h;exports.withdrawNftEvm=$;exports.withdrawTokenEvm=Z;exports.withdrawTokenSolana=X;exports.writeAndWait=f;
package/dist/index.d.cts CHANGED
@@ -5,7 +5,7 @@ import { Hex } from 'viem';
5
5
  import { E as EvmBridgeClients } from './withdraw-CwX4HY2X.cjs';
6
6
  export { D as DepositNft721EvmParams, a as DepositNftEvmParams, b as DepositTokenEvmParams, W as WithdrawNftEvmParams, c as WithdrawTokenEvmParams, d as depositNftEvm, e as depositNftEvm721, f as depositTokenEvm, g as ensureErc20Allowance, s as submitEvmNftWithdrawal, h as submitEvmNftWithdrawal721, i as submitEvmTokenWithdrawal, w as withdrawNftEvm, j as withdrawTokenEvm, k as writeAndWait } from './withdraw-CwX4HY2X.cjs';
7
7
  import { IDosGamesClient, ClientState } from '@idosgames/core';
8
- export { D as DepositTokenSolanaParams, S as SolanaProgramAdapter, W as WithdrawTokenSolanaParams, d as depositTokenSolana, w as withdrawTokenSolana } from './bridge-8F45t4nD.cjs';
8
+ export { D as DepositTokenSolanaParams, S as SolanaProgramAdapter, W as WithdrawTokenSolanaParams, d as depositTokenSolana, w as withdrawTokenSolana } from './bridge-CoVqGUFt.cjs';
9
9
 
10
10
  declare const rewardPoolAbi: readonly [{
11
11
  readonly type: "function";
@@ -47,6 +47,16 @@ declare const rewardPoolAbi: readonly [{
47
47
  }, {
48
48
  readonly name: "burnAmount";
49
49
  readonly type: "uint256";
50
+ }, {
51
+ readonly name: "splits";
52
+ readonly type: "tuple[]";
53
+ readonly components: readonly [{
54
+ readonly name: "to";
55
+ readonly type: "address";
56
+ }, {
57
+ readonly name: "amount";
58
+ readonly type: "uint256";
59
+ }];
50
60
  }, {
51
61
  readonly name: "nonce";
52
62
  readonly type: "uint256";
@@ -83,6 +93,16 @@ declare const rewardPoolAbi: readonly [{
83
93
  }, {
84
94
  readonly name: "amount";
85
95
  readonly type: "uint256";
96
+ }, {
97
+ readonly name: "splits";
98
+ readonly type: "tuple[]";
99
+ readonly components: readonly [{
100
+ readonly name: "to";
101
+ readonly type: "address";
102
+ }, {
103
+ readonly name: "amount";
104
+ readonly type: "uint256";
105
+ }];
86
106
  }, {
87
107
  readonly name: "nonce";
88
108
  readonly type: "uint256";
package/dist/index.d.ts CHANGED
@@ -5,7 +5,7 @@ import { Hex } from 'viem';
5
5
  import { E as EvmBridgeClients } from './withdraw-C-sFNUnQ.js';
6
6
  export { D as DepositNft721EvmParams, a as DepositNftEvmParams, b as DepositTokenEvmParams, W as WithdrawNftEvmParams, c as WithdrawTokenEvmParams, d as depositNftEvm, e as depositNftEvm721, f as depositTokenEvm, g as ensureErc20Allowance, s as submitEvmNftWithdrawal, h as submitEvmNftWithdrawal721, i as submitEvmTokenWithdrawal, w as withdrawNftEvm, j as withdrawTokenEvm, k as writeAndWait } from './withdraw-C-sFNUnQ.js';
7
7
  import { IDosGamesClient, ClientState } from '@idosgames/core';
8
- export { D as DepositTokenSolanaParams, S as SolanaProgramAdapter, W as WithdrawTokenSolanaParams, d as depositTokenSolana, w as withdrawTokenSolana } from './bridge-BJnRn3NX.js';
8
+ export { D as DepositTokenSolanaParams, S as SolanaProgramAdapter, W as WithdrawTokenSolanaParams, d as depositTokenSolana, w as withdrawTokenSolana } from './bridge-nELtKkuz.js';
9
9
 
10
10
  declare const rewardPoolAbi: readonly [{
11
11
  readonly type: "function";
@@ -47,6 +47,16 @@ declare const rewardPoolAbi: readonly [{
47
47
  }, {
48
48
  readonly name: "burnAmount";
49
49
  readonly type: "uint256";
50
+ }, {
51
+ readonly name: "splits";
52
+ readonly type: "tuple[]";
53
+ readonly components: readonly [{
54
+ readonly name: "to";
55
+ readonly type: "address";
56
+ }, {
57
+ readonly name: "amount";
58
+ readonly type: "uint256";
59
+ }];
50
60
  }, {
51
61
  readonly name: "nonce";
52
62
  readonly type: "uint256";
@@ -83,6 +93,16 @@ declare const rewardPoolAbi: readonly [{
83
93
  }, {
84
94
  readonly name: "amount";
85
95
  readonly type: "uint256";
96
+ }, {
97
+ readonly name: "splits";
98
+ readonly type: "tuple[]";
99
+ readonly components: readonly [{
100
+ readonly name: "to";
101
+ readonly type: "address";
102
+ }, {
103
+ readonly name: "amount";
104
+ readonly type: "uint256";
105
+ }];
86
106
  }, {
87
107
  readonly name: "nonce";
88
108
  readonly type: "uint256";
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- export{i as depositNftEvm,j as depositNftEvm721,h as depositTokenEvm,e as encodeNftDepositData,g as ensureErc20Allowance,c as erc1155Abi,b as erc20Abi,d as erc721Abi,p as loginWithWalletEvm,a as rewardPoolAbi,l as submitEvmNftWithdrawal,m as submitEvmNftWithdrawal721,k as submitEvmTokenWithdrawal,o as withdrawNftEvm,n as withdrawTokenEvm,f as writeAndWait}from'./chunk-DMMHCUIU.js';export{a as depositTokenSolana,c as loginWithWalletSolana,b as withdrawTokenSolana}from'./chunk-44AGTUFV.js';export{b as bridgeFail,a as toErrorMessage,c as walletLoginFail}from'./chunk-K62NMX3A.js';export{e as arbitrum,d as base,b as bsc,j as chainById,i as idosChains,a as mainnet,f as optimism,c as polygon,h as polygonAmoy,g as sepolia,m as solanaDevnet,l as solanaMainnet,k as toAppKitNetwork}from'./chunk-HQNS6ZWL.js';
1
+ export{i as depositNftEvm,j as depositNftEvm721,h as depositTokenEvm,e as encodeNftDepositData,g as ensureErc20Allowance,c as erc1155Abi,b as erc20Abi,d as erc721Abi,p as loginWithWalletEvm,a as rewardPoolAbi,l as submitEvmNftWithdrawal,m as submitEvmNftWithdrawal721,k as submitEvmTokenWithdrawal,o as withdrawNftEvm,n as withdrawTokenEvm,f as writeAndWait}from'./chunk-OWJXQVDR.js';export{a as depositTokenSolana,c as loginWithWalletSolana,b as withdrawTokenSolana}from'./chunk-44AGTUFV.js';export{b as bridgeFail,a as toErrorMessage,c as walletLoginFail}from'./chunk-K62NMX3A.js';export{e as arbitrum,d as base,b as bsc,j as chainById,i as idosChains,a as mainnet,f as optimism,c as polygon,h as polygonAmoy,g as sepolia,m as solanaDevnet,l as solanaMainnet,k as toAppKitNetwork}from'./chunk-HQNS6ZWL.js';
@@ -1,2 +1,2 @@
1
- 'use strict';var wagmi=require('wagmi'),connectors=require('wagmi/connectors'),appkitAdapterWagmi=require('@reown/appkit-adapter-wagmi'),react=require('@reown/appkit/react'),reactQuery=require('@tanstack/react-query'),react$1=require('react'),jsxRuntime=require('react/jsx-runtime'),viem=require('viem'),core=require('@idosgames/core'),actions=require('wagmi/actions');var j={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"}}},_={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"}}},z={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"}}},V={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"}}},$={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"}}},Y={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"}}},Q={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"}}},Z={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"}}},Ce={mainnet:j,bsc:_,polygon:z,base:V,arbitrum:$,optimism:Y,sepolia:Q,polygonAmoy:Z};function qe(e){return Object.values(Ce).find(t=>t.id===e)}function be(e){return {...e,chainNamespace:"eip155",caipNetworkId:`eip155:${e.id}`}}var ve=null;function ke(e){ve=e;}function ie(){return ve}var Ee=[j,_,z,V,$,Y,Q,Z],ae=new Map;function se(e){let{chains:t=Ee,walletConnectProjectId:n,appName:o,appUrl:r,appIcon:i,transports:p,connectors:l}=e,a=n??"__extension_only__";if(!l){let y=ae.get(a);if(y)return y}let u={};for(let y of t)u[y.id]=p?.[y.id]??wagmi.http();let d=r??(typeof window<"u"?window.location.origin:""),m={name:o??"iDosGames",description:o??"iDosGames game",url:d,icons:i?[i]:[]};if(n&&!l){let y=t.map(be),D=new appkitAdapterWagmi.WagmiAdapter({networks:y,projectId:n,transports:u});return ke(react.createAppKit({adapters:[D],networks:y,projectId:n,metadata:m,features:{analytics:false,email:false,socials:false}})),ae.set(a,D.wagmiConfig),D.wagmiConfig}let f=l??[connectors.injected(),connectors.coinbaseWallet({appName:o??"iDosGames"})],h=wagmi.createConfig({chains:t,connectors:f,transports:u});return l||ae.set(a,h),h}function G(e){let{wagmiConfig:t,queryClient:n,children:o}=e,[r]=react$1.useState(()=>n??new reactQuery.QueryClient);return jsxRuntime.jsx(wagmi.WagmiProvider,{config:t,children:jsxRuntime.jsx(reactQuery.QueryClientProvider,{client:r,children:o})})}var J=[{type:"function",name:"depositERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"amount",type:"uint256"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"withdrawERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"amount",type:"uint256"},{name:"burnAmount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC1155",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],Ae=[{type:"function",name:"withdrawERC1155Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],le=[{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"}]}],De=[{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 Ne(e,t,n){return viem.encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[e,t,core.normalizeBlockchainCategory(n)])}async function T(e,t){let{walletClient:n,publicClient:o,account:r}=e,i=await n.writeContract({address:t.address,abi:t.abi,functionName:t.functionName,args:t.args,account:r,chain:n.chain,value:t.value});if((await o.waitForTransactionReceipt({hash:i})).status==="reverted")throw new Error(`On-chain transaction reverted (${i}).`);return i}function A(e){return e instanceof viem.BaseError?e.shortMessage:e instanceof Error?e.message:String(e)}function c(e,t,n){return {ok:false,stage:e,error:t,...n}}function M(e,t){return {ok:false,stage:e,error:t}}function Pe(e){let t=e.RewardPoolAddress;return t||null}async function Ie(e,t,n,o){return await e.publicClient.readContract({address:t,abi:le,functionName:"allowance",args:[e.account,n]})>=o?null:T(e,{address:t,abi:le,functionName:"approve",args:[n,o]})}async function ce(e){let{client:t,clients:n,network:o,tokenAddress:r,amount:i,titleID:p,category:l}=e,a=t.auth.context?.userID;if(!a)return c("approve","Not logged in.");let u=Pe(o);if(!u)return c("approve","Network has no RewardPoolAddress.");if(i<=0n)return c("approve","Amount must be positive.");try{await Ie(n,r,u,i);}catch(f){return c("approve",A(f))}let d;try{d=await T(n,{address:u,abi:J,functionName:"depositERC20",args:[r,i,a,p,l??""]});}catch(f){return c("deposit-onchain",A(f))}let m=await t.blockchain.depositToken(o.NetworkID??"",d);return m.ok?{ok:true,onChainTxHash:d,data:m.data}:c("report",m.error,{onChainTxHash:d})}async function pe(e){let{client:t,clients:n,network:o,nftContractAddress:r,tokenId:i,amount:p,titleID:l,category:a}=e,u=t.auth.context?.userID;if(!u)return c("deposit-onchain","Not logged in.");let d=Pe(o);if(!d)return c("deposit-onchain","Network has no RewardPoolAddress.");if(p<=0n)return c("deposit-onchain","Amount must be positive.");let m=Ne(u,l,a),f;try{f=await T(n,{address:r,abi:De,functionName:"safeTransferFrom",args:[n.account,d,i,p,m]});}catch(y){return c("deposit-onchain",A(y))}let h=await t.blockchain.depositNFT(o.NetworkID??"",f);return h.ok?{ok:true,onChainTxHash:f,data:h.data}:c("report",h.error,{onChainTxHash:f})}async function We(e,t){return T(e,{address:t.ContractAddress,abi:J,functionName:"withdrawERC20",args:[t.TokenAddress,t.WalletAddress,BigInt(t.Amount??"0"),BigInt(t.BurnAmount??"0"),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function Te(e,t){return T(e,{address:t.ContractAddress,abi:Ae,functionName:"withdrawERC1155Mint",args:[t.TokenAddress,t.WalletAddress,BigInt(t.TokenId??"0"),BigInt(t.Amount??"0"),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function de(e){let{client:t,clients:n,currencyID:o,networkID:r,walletAddress:i,amount:p,category:l}=e,a=await t.blockchain.requestTokenWithdrawal(o,r,i,p,l);if(!a.ok)return c("request",a.error);let u=a.data.EvmSignature,d=a.data.TitleTransactionID??void 0;if(!u)return c("request","Withdrawal response carried no EVM signature.",{titleTransactionID:d});let m;try{m=await We(n,u);}catch(h){return c("withdraw-onchain",A(h),{titleTransactionID:d})}let f=await Be(t,d,m);return f.ok?{ok:true,onChainTxHash:m,data:a.data}:f}async function ue(e){let{client:t,clients:n,itemID:o,networkID:r,walletAddress:i,amount:p,category:l}=e,a=await t.blockchain.requestNFTWithdrawal(o,r,i,p,l);if(!a.ok)return c("request",a.error);let u=a.data.EvmSignature,d=a.data.TitleTransactionID??void 0;if(!u)return c("request","Withdrawal response carried no EVM signature.",{titleTransactionID:d});let m;try{m=await Te(n,u);}catch(h){return c("withdraw-onchain",A(h),{titleTransactionID:d})}let f=await Be(t,d,m);return f.ok?{ok:true,onChainTxHash:m,data:a.data}:f}async function Be(e,t,n){if(!t)return c("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let o=await e.blockchain.confirmWithdrawal(t,n);return o.ok?{ok:true,onChainTxHash:n,data:o.data}:c("confirm",o.error,{onChainTxHash:n,titleTransactionID:t})}async function O(e){let{client:t,clients:n,networkID:o}=e,r=e.walletAddress??n.account,i=await t.auth.requestWalletChallenge(r,o);if(!i.ok)return M("challenge",i.error);let p;try{p=await n.walletClient.signMessage({account:n.account,message:i.data.Message});}catch(a){return M("sign",A(a))}let l=await t.auth.loginWithWallet(r,o,p);return l.ok?{ok:true,data:l.data}:M("login",l.error)}function X(){let{address:e}=wagmi.useAccount(),t=wagmi.usePublicClient(),{data:n}=wagmi.useWalletClient();return !e||!t||!n?null:{account:e,publicClient:t,walletClient:n}}var U="Wallet not connected.";function me(e,t){let n=X();return {connected:!!n,account:n?.account??null,loginWithWallet:(o,r)=>n?O({client:e,clients:n,networkID:o,walletAddress:r}):Promise.resolve(M("challenge",U)),depositToken:o=>n?ce({client:e,clients:n,titleID:t,...o}):Promise.resolve(c("approve",U)),depositNft:o=>n?pe({client:e,clients:n,titleID:t,...o}):Promise.resolve(c("deposit-onchain",U)),withdrawToken:o=>n?de({client:e,clients:n,...o}):Promise.resolve(c("withdraw-onchain",U)),withdrawNft:o=>n?ue({client:e,clients:n,...o}):Promise.resolve(c("withdraw-onchain",U))}}function ut(e){let{wagmiConfig:t,...n}=e;return jsxRuntime.jsx(G,{wagmiConfig:t,children:jsxRuntime.jsx(Me,{...n})})}function mt(e){return e instanceof Error&&(e.name==="ConnectorAlreadyConnectedError"||e.message.includes("already connected"))}function ft(e){let t="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.":t:t}async function Re(e){let t=await actions.getWalletClient(e).catch(()=>null);if(!t)return null;let n=actions.getPublicClient(e);return n?{account:t.account.address,publicClient:n,walletClient:t}:null}function gt(e,t=18e4){return actions.getAccount(e).isConnected?Promise.resolve(true):new Promise(n=>{let o=false,r=l=>{o||(o=true,i(),clearTimeout(p),n(l));},i=actions.watchAccount(e,{onChange:l=>{l.isConnected&&r(true);}}),p=setTimeout(()=>r(false),t);})}function yt(e,t=8e3){let n=o=>o==="reconnecting"||o==="connecting";return n(actions.getAccount(e).status)?new Promise(o=>{let r=false,i=()=>{r||(r=true,p(),clearTimeout(l),o());},p=actions.watchAccount(e,{onChange:a=>{n(a.status)||i();}}),l=setTimeout(i,t);}):Promise.resolve()}function wt(e){let t=r=>e.find(i=>i.id===r||i.type===r),n=t("injected"),o=typeof window<"u"&&window.ethereum!=null;return n&&o?n:t("walletConnect")??n??e[0]}var ht=9e4;async function Ct(e){try{let o=(await actions.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 bt(e,t){return new Promise((n,o)=>{let r=setTimeout(()=>o(new Error("The wallet request timed out.")),t);e.then(i=>{clearTimeout(r),n(i);},i=>{clearTimeout(r),o(i instanceof Error?i:new Error(String(i)));});})}function Me(e){let{client:t,networkID:n,onAuthenticated:o,disabled:r,label:i,style:p,autoStart:l}=e,a=wagmi.useConfig(),{isConnected:u}=wagmi.useAccount(),{connectAsync:d,connectors:m}=wagmi.useConnect(),f=X(),[h,y]=react$1.useState(false),[D,C]=react$1.useState(null),[H,E]=react$1.useState(false),L=react$1.useRef(0),S=react$1.useRef(false),q=async()=>{let I=++L.current,N=()=>L.current===I;y(true),C(null);try{if(await yt(a),!N())return;if(!actions.getAccount(a).isConnected){let k=ie();if(k){if(await k.open(),!await gt(a)){C("No wallet was connected.");return}}else {let oe=wt(m);if(!oe){C("No wallet connector is configured.");return}try{await d({connector:oe});}catch(W){if(!mt(W))throw W}}}let b=f??await Re(a);if(!b&&actions.getAccount(a).isConnected&&(await new Promise(k=>setTimeout(k,300)),b=await Re(a),!N()))return;if(!b){C("Wallet client is not available.");return}E(!0);let x=await bt(O({client:t,clients:b,networkID:n}),ht);if(!N())return;if(x.ok){o();return}C(x.stage==="sign"?"Signature declined.":x.error??"Wallet sign-in failed.");}catch(b){if(!N())return;console.error("[idosgames/wallet] wallet sign-in failed:",b),C(ft(b));}finally{N()&&(y(false),E(false));}};react$1.useEffect(()=>{!l||S.current||(S.current=true,q());},[l]);let R=async()=>{await Ct(a)||await ie()?.open();};return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:()=>{H?R():q();},disabled:r,style:{...vt,...r?{opacity:.6,cursor:"default"}:null,...p},children:H?"Waiting for signature \u2014 tap to open wallet":h?"Check your wallet\u2026":u?i??"Sign in with wallet":"Connect wallet"}),D&&jsxRuntime.jsx("span",{role:"alert",style:kt,children:D})]})}var vt={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},kt={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};var Tt={pointerEvents:"auto",background:"#04276bf5",border:"1px solid #1e59c8",borderRadius:12,padding:16,color:"#fff",width:320,boxSizing:"border-box",fontFamily:"system-ui, sans-serif",display:"flex",flexDirection:"column",gap:10,maxHeight:"80vh",overflow:"auto"},Bt={fontWeight:700,fontSize:16},B={fontSize:12,opacity:.7},ge={background:"#052e7e",border:"1px solid #1e59c8",borderRadius:8,color:"#fff",padding:"8px 10px",width:"100%",boxSizing:"border-box"},St={background:"#0d66fe",color:"#fff",border:"none",borderRadius:8,padding:"9px 14px",fontWeight:700,cursor:"pointer"},te={background:"#1e59c8",color:"#fff",border:"none",borderRadius:8,padding:"7px 12px",fontWeight:600,cursor:"pointer"},ye={display:"flex",gap:8};function Rt(e){let{client:t,walletConnectProjectId:n,appName:o,onClose:r,style:i}=e,[p,l]=react$1.useState(n??"");react$1.useEffect(()=>{if(n)return;let u=true;return (async()=>{let d=await t.blockchain.getDefinitions();if(!u||!d.ok)return;let m=d.data.Blockchain?.WalletLogin?.WalletConnectProjectId;m&&l(m);})(),()=>{u=false;}},[t,n]);let a=react$1.useMemo(()=>se({walletConnectProjectId:p||void 0,appName:o}),[p,o]);return jsxRuntime.jsx(G,{wagmiConfig:a,children:jsxRuntime.jsx(Ft,{client:t,appName:o,onClose:r,style:i})})}function Ft({client:e,onClose:t,style:n}){let o=me(e,e.titleID),{address:r,isConnected:i,chainId:p}=wagmi.useAccount(),{connect:l,connectors:a}=wagmi.useConnect(),{disconnect:u}=wagmi.useDisconnect(),{switchChainAsync:d}=wagmi.useSwitchChain(),[,m]=react$1.useReducer(s=>s+1,0),[f,h]=react$1.useState({}),[y,D]=react$1.useState({}),[C,H]=react$1.useState(""),[E,L]=react$1.useState(""),[S,q]=react$1.useState(""),[R,I]=react$1.useState(false),[N,b]=react$1.useState(null);react$1.useEffect(()=>{let s=true;return (async()=>{let w=await e.blockchain.getDefinitions();if(await e.blockchain.getUserState(),!s||!w.ok)return;let F=w.data.Blockchain?.Networks??{},re={};for(let[Ke,he]of Object.entries(F))he.Type==="EVM"&&(re[Ke]=he);h(re),D(w.data.CryptoCurrencies??{});let Ue=Object.keys(re)[0]??"";H(Ue);})(),()=>{s=false;}},[e]),react$1.useEffect(()=>e.on("user:anyUpdated",m),[e]);let x=react$1.useMemo(()=>Object.entries(y).filter(([,s])=>s.Networks?.some(w=>w.NetworkID===C&&!!w.ContractAddress)),[y,C]);react$1.useEffect(()=>{let s=x[0]?.[0]??"";L(w=>x.some(([F])=>F===w)?w:s);},[x]);let k=C?f[C]:void 0,W=(E?y[E]:void 0)?.Networks?.find(s=>s.NetworkID===C),Le=E?e.data.user.getCryptoCurrencyAmount(E):"0";async function we(){if(!k?.ChainID||p===k.ChainID)return true;try{return await d({chainId:k.ChainID}),!0}catch{return b({ok:false,stage:"approve",error:`Switch your wallet to chain ${k.ChainID} to continue.`}),false}}async function Ge(){if(!(!k||!W?.ContractAddress)){if(I(true),b(null),await we()){let s=W.Decimals??18,w;try{w=viem.parseUnits(S||"0",s);}catch{b({ok:false,stage:"approve",error:"Invalid amount."}),I(false);return}let F=await o.depositToken({network:k,tokenAddress:W.ContractAddress,amount:w});b(F),F.ok&&await e.blockchain.getUserState();}I(false);}}async function Oe(){if(!(!k||!o.account)){if(I(true),b(null),await we()){let s=await o.withdrawToken({currencyID:E,networkID:C,walletAddress:o.account,amount:S||"0"});b(s),s.ok&&await e.blockchain.getUserState();}I(false);}}return jsxRuntime.jsxs("div",{style:{...Tt,...n},children:[jsxRuntime.jsxs("div",{style:{...ye,justifyContent:"space-between"},children:[jsxRuntime.jsx("span",{style:Bt,children:"Crypto wallet"}),t&&jsxRuntime.jsx("button",{type:"button",style:te,onClick:t,children:"\u2715"})]}),i?jsxRuntime.jsxs("div",{style:ye,children:[jsxRuntime.jsxs("span",{style:{...B,flex:1,alignSelf:"center"},children:[r?.slice(0,6),"\u2026",r?.slice(-4)]}),jsxRuntime.jsx("button",{type:"button",style:te,onClick:()=>u(),children:"Disconnect"})]}):jsxRuntime.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6},children:[jsxRuntime.jsx("span",{style:B,children:"Connect a browser or mobile wallet"}),a.map(s=>jsxRuntime.jsx("button",{type:"button",style:te,onClick:()=>l({connector:s}),children:s.name},s.uid))]}),Object.keys(f).length===0?jsxRuntime.jsx("span",{style:B,children:"No EVM networks configured for this title."}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:B,children:"Network"}),jsxRuntime.jsx("select",{style:ge,value:C,onChange:s=>H(s.target.value),children:Object.entries(f).map(([s,w])=>jsxRuntime.jsx("option",{value:s,children:w.DisplayName??s},s))})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:B,children:"Token"}),jsxRuntime.jsxs("select",{style:ge,value:E,onChange:s=>L(s.target.value),children:[x.length===0&&jsxRuntime.jsx("option",{value:"",children:"\u2014 no depositable tokens \u2014"}),x.map(([s,w])=>jsxRuntime.jsx("option",{value:s,children:w.DisplayName??s},s))]})]}),jsxRuntime.jsxs("div",{style:B,children:["In-game balance: ",jsxRuntime.jsx("b",{children:Le})," ",E]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:B,children:"Amount"}),jsxRuntime.jsx("input",{style:ge,inputMode:"decimal",placeholder:"0.0",value:S,onChange:s=>q(s.target.value)})]}),jsxRuntime.jsxs("div",{style:ye,children:[jsxRuntime.jsx("button",{type:"button",style:{...St,flex:1,opacity:R?.6:1},disabled:R||!i||!W?.ContractAddress,onClick:()=>{Ge();},children:"Deposit"}),jsxRuntime.jsx("button",{type:"button",style:{...te,flex:1,opacity:R?.6:1},disabled:R||!i||!E,onClick:()=>{Oe();},children:"Withdraw"})]})]}),N&&jsxRuntime.jsx(Mt,{result:N})]})}function Mt({result:e}){let t={fontSize:12,borderRadius:8,padding:"8px 10px",background:e.ok?"#1e3a2a":"#3a1e28",color:e.ok?"#8ef0b0":"#f2a0b4",wordBreak:"break-all"};return e.ok?jsxRuntime.jsxs("div",{style:t,children:["\u2713 Done \xB7 tx ",e.onChainTxHash]}):jsxRuntime.jsxs("div",{style:t,children:["\u2715 [",e.stage,"] ",e.error,e.titleTransactionID?` \xB7 already debited (tx ${e.titleTransactionID}) \u2014 retry/confirm, don't re-request`:""]})}
2
- exports.DEFAULT_EVM_CHAINS=Ee;exports.IDosGamesWalletProvider=G;exports.WalletLogin=ut;exports.WalletLoginButton=Me;exports.WalletPanel=Rt;exports.arbitrum=$;exports.base=V;exports.bsc=_;exports.chainById=qe;exports.createEvmWalletConfig=se;exports.idosChains=Ce;exports.mainnet=j;exports.optimism=Y;exports.polygon=z;exports.polygonAmoy=Z;exports.sepolia=Q;exports.useEvmBridge=me;exports.useEvmBridgeClients=X;
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 j={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"}}},_={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"}}},z={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"}}},V={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"}}},$={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"}}},Y={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"}}},Q={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"}}},Z={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"}}},Ce={mainnet:j,bsc:_,polygon:z,base:V,arbitrum:$,optimism:Y,sepolia:Q,polygonAmoy:Z};function je(e){return Object.values(Ce).find(t=>t.id===e)}function be(e){return {...e,chainNamespace:"eip155",caipNetworkId:`eip155:${e.id}`}}var ve=null;function ke(e){ve=e;}function ae(){return ve}var Ee=[j,_,z,V,$,Y,Q,Z],ie=new Map;function se(e){let{chains:t=Ee,walletConnectProjectId:n,appName:o,appUrl:r,appIcon:a,transports:p,connectors:l}=e,i=n??"__extension_only__";if(!l){let y=ie.get(i);if(y)return y}let u={};for(let y of t)u[y.id]=p?.[y.id]??wagmi.http();let d=r??(typeof window<"u"?window.location.origin:""),m={name:o??"iDosGames",description:o??"iDosGames game",url:d,icons:a?[a]:[]};if(n&&!l){let y=t.map(be),D=new appkitAdapterWagmi.WagmiAdapter({networks:y,projectId:n,transports:u});return ke(react.createAppKit({adapters:[D],networks:y,projectId:n,metadata:m,features:{analytics:false,email:false,socials:false}})),ie.set(i,D.wagmiConfig),D.wagmiConfig}let f=l??[connectors.injected(),connectors.coinbaseWallet({appName:o??"iDosGames"})],h=wagmi.createConfig({chains:t,connectors:f,transports:u});return l||ie.set(i,h),h}function G(e){let{wagmiConfig:t,queryClient:n,children:o}=e,[r]=react$1.useState(()=>n??new reactQuery.QueryClient);return jsxRuntime.jsx(wagmi.WagmiProvider,{config:t,children:jsxRuntime.jsx(reactQuery.QueryClientProvider,{client:r,children:o})})}var J=[{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:[]}],Ae=[{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:[]}],le=[{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"}]}],De=[{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 Ne(e,t,n){return viem.encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[e,t,core.normalizeBlockchainCategory(n)])}async function T(e,t){let{walletClient:n,publicClient:o,account:r}=e,a=await n.writeContract({address:t.address,abi:t.abi,functionName:t.functionName,args:t.args,account:r,chain:n.chain,value:t.value});if((await o.waitForTransactionReceipt({hash:a})).status==="reverted")throw new Error(`On-chain transaction reverted (${a}).`);return a}function A(e){return e instanceof viem.BaseError?e.shortMessage:e instanceof Error?e.message:String(e)}function c(e,t,n){return {ok:false,stage:e,error:t,...n}}function M(e,t){return {ok:false,stage:e,error:t}}function Pe(e){let t=e.RewardPoolAddress;return t||null}async function Ie(e,t,n,o){return await e.publicClient.readContract({address:t,abi:le,functionName:"allowance",args:[e.account,n]})>=o?null:T(e,{address:t,abi:le,functionName:"approve",args:[n,o]})}async function ce(e){let{client:t,clients:n,network:o,tokenAddress:r,amount:a,titleID:p,category:l}=e,i=t.auth.context?.userID;if(!i)return c("approve","Not logged in.");let u=Pe(o);if(!u)return c("approve","Network has no RewardPoolAddress.");if(a<=0n)return c("approve","Amount must be positive.");try{await Ie(n,r,u,a);}catch(f){return c("approve",A(f))}let d;try{d=await T(n,{address:u,abi:J,functionName:"depositERC20",args:[r,a,i,p,l??""]});}catch(f){return c("deposit-onchain",A(f))}let m=await t.blockchain.depositToken(o.NetworkID??"",d);return m.ok?{ok:true,onChainTxHash:d,data:m.data}:c("report",m.error,{onChainTxHash:d})}async function pe(e){let{client:t,clients:n,network:o,nftContractAddress:r,tokenId:a,amount:p,titleID:l,category:i}=e,u=t.auth.context?.userID;if(!u)return c("deposit-onchain","Not logged in.");let d=Pe(o);if(!d)return c("deposit-onchain","Network has no RewardPoolAddress.");if(p<=0n)return c("deposit-onchain","Amount must be positive.");let m=Ne(u,l,i),f;try{f=await T(n,{address:r,abi:De,functionName:"safeTransferFrom",args:[n.account,d,a,p,m]});}catch(y){return c("deposit-onchain",A(y))}let h=await t.blockchain.depositNFT(o.NetworkID??"",f);return h.ok?{ok:true,onChainTxHash:f,data:h.data}:c("report",h.error,{onChainTxHash:f})}function We(e){return (e.Splits??[]).map(t=>({to:t.To,amount:BigInt(t.Amount??"0")}))}async function Te(e,t){return T(e,{address:t.ContractAddress,abi:J,functionName:"withdrawERC20",args:[t.TokenAddress,t.WalletAddress,BigInt(t.Amount??"0"),BigInt(t.BurnAmount??"0"),We(t),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function Se(e,t){return T(e,{address:t.ContractAddress,abi:Ae,functionName:"withdrawERC1155Mint",args:[t.TokenAddress,t.WalletAddress,BigInt(t.TokenId??"0"),BigInt(t.Amount??"0"),We(t),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function de(e){let{client:t,clients:n,currencyID:o,networkID:r,walletAddress:a,amount:p,category:l}=e,i=await t.blockchain.requestTokenWithdrawal(o,r,a,p,l);if(!i.ok)return c("request",i.error);let u=i.data.EvmSignature,d=i.data.TitleTransactionID??void 0;if(!u)return c("request","Withdrawal response carried no EVM signature.",{titleTransactionID:d});let m;try{m=await Te(n,u);}catch(h){return c("withdraw-onchain",A(h),{titleTransactionID:d})}let f=await Be(t,d,m);return f.ok?{ok:true,onChainTxHash:m,data:i.data}:f}async function ue(e){let{client:t,clients:n,itemID:o,networkID:r,walletAddress:a,amount:p,category:l}=e,i=await t.blockchain.requestNFTWithdrawal(o,r,a,p,l);if(!i.ok)return c("request",i.error);let u=i.data.EvmSignature,d=i.data.TitleTransactionID??void 0;if(!u)return c("request","Withdrawal response carried no EVM signature.",{titleTransactionID:d});let m;try{m=await Se(n,u);}catch(h){return c("withdraw-onchain",A(h),{titleTransactionID:d})}let f=await Be(t,d,m);return f.ok?{ok:true,onChainTxHash:m,data:i.data}:f}async function Be(e,t,n){if(!t)return c("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let o=await e.blockchain.confirmWithdrawal(t,n);return o.ok?{ok:true,onChainTxHash:n,data:o.data}:c("confirm",o.error,{onChainTxHash:n,titleTransactionID:t})}async function O(e){let{client:t,clients:n,networkID:o}=e,r=e.walletAddress??n.account,a=await t.auth.requestWalletChallenge(r,o);if(!a.ok)return M("challenge",a.error);let p;try{p=await n.walletClient.signMessage({account:n.account,message:a.data.Message});}catch(i){return M("sign",A(i))}let l=await t.auth.loginWithWallet(r,o,p);return l.ok?{ok:true,data:l.data}:M("login",l.error)}function X(){let{address:e}=wagmi.useAccount(),t=wagmi.usePublicClient(),{data:n}=wagmi.useWalletClient();return !e||!t||!n?null:{account:e,publicClient:t,walletClient:n}}var U="Wallet not connected.";function me(e,t){let n=X();return {connected:!!n,account:n?.account??null,loginWithWallet:(o,r)=>n?O({client:e,clients:n,networkID:o,walletAddress:r}):Promise.resolve(M("challenge",U)),depositToken:o=>n?ce({client:e,clients:n,titleID:t,...o}):Promise.resolve(c("approve",U)),depositNft:o=>n?pe({client:e,clients:n,titleID:t,...o}):Promise.resolve(c("deposit-onchain",U)),withdrawToken:o=>n?de({client:e,clients:n,...o}):Promise.resolve(c("withdraw-onchain",U)),withdrawNft:o=>n?ue({client:e,clients:n,...o}):Promise.resolve(c("withdraw-onchain",U))}}function mt(e){let{wagmiConfig:t,...n}=e;return jsxRuntime.jsx(G,{wagmiConfig:t,children:jsxRuntime.jsx(He,{...n})})}function ft(e){return e instanceof Error&&(e.name==="ConnectorAlreadyConnectedError"||e.message.includes("already connected"))}function gt(e){let t="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.":t:t}async function Fe(e){let t=await actions.getWalletClient(e).catch(()=>null);if(!t)return null;let n=actions.getPublicClient(e);return n?{account:t.account.address,publicClient:n,walletClient:t}:null}function yt(e,t=18e4){return actions.getAccount(e).isConnected?Promise.resolve(true):new Promise(n=>{let o=false,r=l=>{o||(o=true,a(),clearTimeout(p),n(l));},a=actions.watchAccount(e,{onChange:l=>{l.isConnected&&r(true);}}),p=setTimeout(()=>r(false),t);})}function wt(e,t=8e3){let n=o=>o==="reconnecting"||o==="connecting";return n(actions.getAccount(e).status)?new Promise(o=>{let r=false,a=()=>{r||(r=true,p(),clearTimeout(l),o());},p=actions.watchAccount(e,{onChange:i=>{n(i.status)||a();}}),l=setTimeout(a,t);}):Promise.resolve()}function ht(e){let t=r=>e.find(a=>a.id===r||a.type===r),n=t("injected"),o=typeof window<"u"&&window.ethereum!=null;return n&&o?n:t("walletConnect")??n??e[0]}var Ct=9e4;async function bt(e){try{let o=(await actions.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 vt(e,t){return new Promise((n,o)=>{let r=setTimeout(()=>o(new Error("The wallet request timed out.")),t);e.then(a=>{clearTimeout(r),n(a);},a=>{clearTimeout(r),o(a instanceof Error?a:new Error(String(a)));});})}function He(e){let{client:t,networkID:n,onAuthenticated:o,disabled:r,label:a,style:p,autoStart:l}=e,i=wagmi.useConfig(),{isConnected:u}=wagmi.useAccount(),{connectAsync:d,connectors:m}=wagmi.useConnect(),f=X(),[h,y]=react$1.useState(false),[D,C]=react$1.useState(null),[H,E]=react$1.useState(false),L=react$1.useRef(0),B=react$1.useRef(false),q=async()=>{let I=++L.current,N=()=>L.current===I;y(true),C(null);try{if(await wt(i),!N())return;if(!actions.getAccount(i).isConnected){let k=ae();if(k){if(await k.open(),!await yt(i)){C("No wallet was connected.");return}}else {let oe=ht(m);if(!oe){C("No wallet connector is configured.");return}try{await d({connector:oe});}catch(W){if(!ft(W))throw W}}}let b=f??await Fe(i);if(!b&&actions.getAccount(i).isConnected&&(await new Promise(k=>setTimeout(k,300)),b=await Fe(i),!N()))return;if(!b){C("Wallet client is not available.");return}E(!0);let x=await vt(O({client:t,clients:b,networkID:n}),Ct);if(!N())return;if(x.ok){o();return}C(x.stage==="sign"?"Signature declined.":x.error??"Wallet sign-in failed.");}catch(b){if(!N())return;console.error("[idosgames/wallet] wallet sign-in failed:",b),C(gt(b));}finally{N()&&(y(false),E(false));}};react$1.useEffect(()=>{!l||B.current||(B.current=true,q());},[l]);let R=async()=>{await bt(i)||await ae()?.open();};return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:()=>{H?R():q();},disabled:r,style:{...kt,...r?{opacity:.6,cursor:"default"}:null,...p},children:H?"Waiting for signature \u2014 tap to open wallet":h?"Check your wallet\u2026":u?a??"Sign in with wallet":"Connect wallet"}),D&&jsxRuntime.jsx("span",{role:"alert",style:Et,children:D})]})}var kt={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},Et={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};var St={pointerEvents:"auto",background:"#04276bf5",border:"1px solid #1e59c8",borderRadius:12,padding:16,color:"#fff",width:320,boxSizing:"border-box",fontFamily:"system-ui, sans-serif",display:"flex",flexDirection:"column",gap:10,maxHeight:"80vh",overflow:"auto"},Bt={fontWeight:700,fontSize:16},S={fontSize:12,opacity:.7},ge={background:"#052e7e",border:"1px solid #1e59c8",borderRadius:8,color:"#fff",padding:"8px 10px",width:"100%",boxSizing:"border-box"},Rt={background:"#0d66fe",color:"#fff",border:"none",borderRadius:8,padding:"9px 14px",fontWeight:700,cursor:"pointer"},te={background:"#1e59c8",color:"#fff",border:"none",borderRadius:8,padding:"7px 12px",fontWeight:600,cursor:"pointer"},ye={display:"flex",gap:8};function Ft(e){let{client:t,walletConnectProjectId:n,appName:o,onClose:r,style:a}=e,[p,l]=react$1.useState(n??"");react$1.useEffect(()=>{if(n)return;let u=true;return (async()=>{let d=await t.blockchain.getDefinitions();if(!u||!d.ok)return;let m=d.data.Blockchain?.WalletLogin?.WalletConnectProjectId;m&&l(m);})(),()=>{u=false;}},[t,n]);let i=react$1.useMemo(()=>se({walletConnectProjectId:p||void 0,appName:o}),[p,o]);return jsxRuntime.jsx(G,{wagmiConfig:i,children:jsxRuntime.jsx(Mt,{client:t,appName:o,onClose:r,style:a})})}function Mt({client:e,onClose:t,style:n}){let o=me(e,e.titleID),{address:r,isConnected:a,chainId:p}=wagmi.useAccount(),{connect:l,connectors:i}=wagmi.useConnect(),{disconnect:u}=wagmi.useDisconnect(),{switchChainAsync:d}=wagmi.useSwitchChain(),[,m]=react$1.useReducer(s=>s+1,0),[f,h]=react$1.useState({}),[y,D]=react$1.useState({}),[C,H]=react$1.useState(""),[E,L]=react$1.useState(""),[B,q]=react$1.useState(""),[R,I]=react$1.useState(false),[N,b]=react$1.useState(null);react$1.useEffect(()=>{let s=true;return (async()=>{let w=await e.blockchain.getDefinitions();if(await e.blockchain.getUserState(),!s||!w.ok)return;let F=w.data.Blockchain?.Networks??{},re={};for(let[qe,he]of Object.entries(F))he.Type==="EVM"&&(re[qe]=he);h(re),D(w.data.CryptoCurrencies??{});let Ke=Object.keys(re)[0]??"";H(Ke);})(),()=>{s=false;}},[e]),react$1.useEffect(()=>e.on("user:anyUpdated",m),[e]);let x=react$1.useMemo(()=>Object.entries(y).filter(([,s])=>s.Networks?.some(w=>w.NetworkID===C&&!!w.ContractAddress)),[y,C]);react$1.useEffect(()=>{let s=x[0]?.[0]??"";L(w=>x.some(([F])=>F===w)?w:s);},[x]);let k=C?f[C]:void 0,W=(E?y[E]:void 0)?.Networks?.find(s=>s.NetworkID===C),Ge=E?e.data.user.getCryptoCurrencyAmount(E):"0";async function we(){if(!k?.ChainID||p===k.ChainID)return true;try{return await d({chainId:k.ChainID}),!0}catch{return b({ok:false,stage:"approve",error:`Switch your wallet to chain ${k.ChainID} to continue.`}),false}}async function Oe(){if(!(!k||!W?.ContractAddress)){if(I(true),b(null),await we()){let s=W.Decimals??18,w;try{w=viem.parseUnits(B||"0",s);}catch{b({ok:false,stage:"approve",error:"Invalid amount."}),I(false);return}let F=await o.depositToken({network:k,tokenAddress:W.ContractAddress,amount:w});b(F),F.ok&&await e.blockchain.getUserState();}I(false);}}async function Ue(){if(!(!k||!o.account)){if(I(true),b(null),await we()){let s=await o.withdrawToken({currencyID:E,networkID:C,walletAddress:o.account,amount:B||"0"});b(s),s.ok&&await e.blockchain.getUserState();}I(false);}}return jsxRuntime.jsxs("div",{style:{...St,...n},children:[jsxRuntime.jsxs("div",{style:{...ye,justifyContent:"space-between"},children:[jsxRuntime.jsx("span",{style:Bt,children:"Crypto wallet"}),t&&jsxRuntime.jsx("button",{type:"button",style:te,onClick:t,children:"\u2715"})]}),a?jsxRuntime.jsxs("div",{style:ye,children:[jsxRuntime.jsxs("span",{style:{...S,flex:1,alignSelf:"center"},children:[r?.slice(0,6),"\u2026",r?.slice(-4)]}),jsxRuntime.jsx("button",{type:"button",style:te,onClick:()=>u(),children:"Disconnect"})]}):jsxRuntime.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6},children:[jsxRuntime.jsx("span",{style:S,children:"Connect a browser or mobile wallet"}),i.map(s=>jsxRuntime.jsx("button",{type:"button",style:te,onClick:()=>l({connector:s}),children:s.name},s.uid))]}),Object.keys(f).length===0?jsxRuntime.jsx("span",{style:S,children:"No EVM networks configured for this title."}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:S,children:"Network"}),jsxRuntime.jsx("select",{style:ge,value:C,onChange:s=>H(s.target.value),children:Object.entries(f).map(([s,w])=>jsxRuntime.jsx("option",{value:s,children:w.DisplayName??s},s))})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:S,children:"Token"}),jsxRuntime.jsxs("select",{style:ge,value:E,onChange:s=>L(s.target.value),children:[x.length===0&&jsxRuntime.jsx("option",{value:"",children:"\u2014 no depositable tokens \u2014"}),x.map(([s,w])=>jsxRuntime.jsx("option",{value:s,children:w.DisplayName??s},s))]})]}),jsxRuntime.jsxs("div",{style:S,children:["In-game balance: ",jsxRuntime.jsx("b",{children:Ge})," ",E]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:S,children:"Amount"}),jsxRuntime.jsx("input",{style:ge,inputMode:"decimal",placeholder:"0.0",value:B,onChange:s=>q(s.target.value)})]}),jsxRuntime.jsxs("div",{style:ye,children:[jsxRuntime.jsx("button",{type:"button",style:{...Rt,flex:1,opacity:R?.6:1},disabled:R||!a||!W?.ContractAddress,onClick:()=>{Oe();},children:"Deposit"}),jsxRuntime.jsx("button",{type:"button",style:{...te,flex:1,opacity:R?.6:1},disabled:R||!a||!E,onClick:()=>{Ue();},children:"Withdraw"})]})]}),N&&jsxRuntime.jsx(Ht,{result:N})]})}function Ht({result:e}){let t={fontSize:12,borderRadius:8,padding:"8px 10px",background:e.ok?"#1e3a2a":"#3a1e28",color:e.ok?"#8ef0b0":"#f2a0b4",wordBreak:"break-all"};return e.ok?jsxRuntime.jsxs("div",{style:t,children:["\u2713 Done \xB7 tx ",e.onChainTxHash]}):jsxRuntime.jsxs("div",{style:t,children:["\u2715 [",e.stage,"] ",e.error,e.titleTransactionID?` \xB7 already debited (tx ${e.titleTransactionID}) \u2014 retry/confirm, don't re-request`:""]})}
2
+ exports.DEFAULT_EVM_CHAINS=Ee;exports.IDosGamesWalletProvider=G;exports.WalletLogin=mt;exports.WalletLoginButton=He;exports.WalletPanel=Ft;exports.arbitrum=$;exports.base=V;exports.bsc=_;exports.chainById=je;exports.createEvmWalletConfig=se;exports.idosChains=Ce;exports.mainnet=j;exports.optimism=Y;exports.polygon=z;exports.polygonAmoy=Z;exports.sepolia=Q;exports.useEvmBridge=me;exports.useEvmBridgeClients=X;
@@ -1 +1 @@
1
- import {o,n,i,h as h$1,p}from'../chunk-DMMHCUIU.js';import {a as a$1,b as b$2}from'../chunk-ZL42KPPC.js';import {b as b$1,c as c$1}from'../chunk-K62NMX3A.js';import {a,b,c,d,e,f,g,h,k}from'../chunk-HQNS6ZWL.js';export{e as arbitrum,d as base,b as bsc,j as chainById,i as idosChains,a as mainnet,f as optimism,c as polygon,h as polygonAmoy,g as sepolia}from'../chunk-HQNS6ZWL.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,useReducer}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {getAccount,watchAccount,getWalletClient,getPublicClient}from'wagmi/actions';import {parseUnits}from'viem';var we=[a,b,c,d,e,f,g,h],oe=new Map;function ne(e){let{chains:o=we,walletConnectProjectId:t,appName:n,appUrl:i,appIcon:s,transports:g,connectors:l}=e,c=t??"__extension_only__";if(!l){let p=oe.get(c);if(p)return p}let C={};for(let p of o)C[p.id]=g?.[p.id]??http();let h=i??(typeof window<"u"?window.location.origin:""),b={name:n??"iDosGames",description:n??"iDosGames game",url:h,icons:s?[s]:[]};if(t&&!l){let p=o.map(k),k$1=new WagmiAdapter({networks:p,projectId:t,transports:C});return a$1(createAppKit({adapters:[k$1],networks:p,projectId:t,metadata:b,features:{analytics:false,email:false,socials:false}})),oe.set(c,k$1.wagmiConfig),k$1.wagmiConfig}let D=l??[injected(),coinbaseWallet({appName:n??"iDosGames"})],I=createConfig({chains:o,connectors:D,transports:C});return l||oe.set(c,I),I}function j(e){let{wagmiConfig:o,queryClient:t,children:n}=e,[i]=useState(()=>t??new QueryClient);return jsx(WagmiProvider,{config:o,children:jsx(QueryClientProvider,{client:i,children:n})})}function U(){let{address:e}=useAccount(),o=usePublicClient(),{data:t}=useWalletClient();return !e||!o||!t?null:{account:e,publicClient:o,walletClient:t}}var L="Wallet not connected.";function re(e,o$1){let t=U();return {connected:!!t,account:t?.account??null,loginWithWallet:(n,i)=>t?p({client:e,clients:t,networkID:n,walletAddress:i}):Promise.resolve(c$1("challenge",L)),depositToken:n=>t?h$1({client:e,clients:t,titleID:o$1,...n}):Promise.resolve(b$1("approve",L)),depositNft:n=>t?i({client:e,clients:t,titleID:o$1,...n}):Promise.resolve(b$1("deposit-onchain",L)),withdrawToken:n$1=>t?n({client:e,clients:t,...n$1}):Promise.resolve(b$1("withdraw-onchain",L)),withdrawNft:n=>t?o({client:e,clients:t,...n}):Promise.resolve(b$1("withdraw-onchain",L))}}function Je(e){let{wagmiConfig:o,...t}=e;return jsx(j,{wagmiConfig:o,children:jsx(ke,{...t})})}function Xe(e){return e instanceof Error&&(e.name==="ConnectorAlreadyConnectedError"||e.message.includes("already connected"))}function Ye(e){let o="Wallet sign-in failed. Please try again.";return e instanceof Error?e.name==="ProviderNotFoundError"||/provider not found/i.test(e.message)?"No crypto wallet found in this browser. Install a wallet extension (e.g. MetaMask) or open this page in your wallet's browser, then try again.":e.name==="UserRejectedRequestError"||/user (rejected|denied|cancelled|canceled)/i.test(e.message)?"Request declined in the wallet.":/timed? ?out/i.test(e.message)?"The wallet did not respond. Open your wallet and try again.":o:o}async function he(e){let o=await getWalletClient(e).catch(()=>null);if(!o)return null;let t=getPublicClient(e);return t?{account:o.account.address,publicClient:t,walletClient:o}:null}function Ze(e,o=18e4){return getAccount(e).isConnected?Promise.resolve(true):new Promise(t=>{let n=false,i=l=>{n||(n=true,s(),clearTimeout(g),t(l));},s=watchAccount(e,{onChange:l=>{l.isConnected&&i(true);}}),g=setTimeout(()=>i(false),o);})}function et(e,o=8e3){let t=n=>n==="reconnecting"||n==="connecting";return t(getAccount(e).status)?new Promise(n=>{let i=false,s=()=>{i||(i=true,g(),clearTimeout(l),n());},g=watchAccount(e,{onChange:c=>{t(c.status)||s();}}),l=setTimeout(s,o);}):Promise.resolve()}function tt(e){let o=i=>e.find(s=>s.id===i||s.type===i),t=o("injected"),n=typeof window<"u"&&window.ethereum!=null;return t&&n?t:o("walletConnect")??t??e[0]}var ot=9e4;async function nt(e){try{let n=(await getAccount(e).connector?.getProvider?.())?.session?.peer?.metadata?.redirect,i=n?.native||n?.universal;return !i||typeof window>"u"?!1:(window.location.href=i,!0)}catch{return false}}function rt(e,o){return new Promise((t,n)=>{let i=setTimeout(()=>n(new Error("The wallet request timed out.")),o);e.then(s=>{clearTimeout(i),t(s);},s=>{clearTimeout(i),n(s instanceof Error?s:new Error(String(s)));});})}function ke(e){let{client:o,networkID:t,onAuthenticated:n,disabled:i,label:s,style:g,autoStart:l}=e,c=useConfig(),{isConnected:C}=useAccount(),{connectAsync:h,connectors:b}=useConnect(),D=U(),[I,p$1]=useState(false),[k,u]=useState(null),[A,w]=useState(false),B=useRef(0),T=useRef(false),F=async()=>{let S=++B.current,P=()=>B.current===S;p$1(true),u(null);try{if(await et(c),!P())return;if(!getAccount(c).isConnected){let y=b$2();if(y){if(await y.open(),!await Ze(c)){u("No wallet was connected.");return}}else {let z=tt(b);if(!z){u("No wallet connector is configured.");return}try{await h({connector:z});}catch(N){if(!Xe(N))throw N}}}let f=D??await he(c);if(!f&&getAccount(c).isConnected&&(await new Promise(y=>setTimeout(y,300)),f=await he(c),!P()))return;if(!f){u("Wallet client is not available.");return}w(!0);let v=await rt(p({client:o,clients:f,networkID:t}),ot);if(!P())return;if(v.ok){n();return}u(v.stage==="sign"?"Signature declined.":v.error??"Wallet sign-in failed.");}catch(f){if(!P())return;console.error("[idosgames/wallet] wallet sign-in failed:",f),u(Ye(f));}finally{P()&&(p$1(false),w(false));}};useEffect(()=>{!l||T.current||(T.current=true,F());},[l]);let x=async()=>{await nt(c)||await b$2()?.open();};return jsxs(Fragment,{children:[jsx("button",{type:"button",onClick:()=>{A?x():F();},disabled:i,style:{...it,...i?{opacity:.6,cursor:"default"}:null,...g},children:A?"Waiting for signature \u2014 tap to open wallet":I?"Check your wallet\u2026":C?s??"Sign in with wallet":"Connect wallet"}),k&&jsx("span",{role:"alert",style:st,children:k})]})}var it={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},st={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};var gt={pointerEvents:"auto",background:"#04276bf5",border:"1px solid #1e59c8",borderRadius:12,padding:16,color:"#fff",width:320,boxSizing:"border-box",fontFamily:"system-ui, sans-serif",display:"flex",flexDirection:"column",gap:10,maxHeight:"80vh",overflow:"auto"},yt={fontWeight:700,fontSize:16},E={fontSize:12,opacity:.7},se={background:"#052e7e",border:"1px solid #1e59c8",borderRadius:8,color:"#fff",padding:"8px 10px",width:"100%",boxSizing:"border-box"},wt={background:"#0d66fe",color:"#fff",border:"none",borderRadius:8,padding:"9px 14px",fontWeight:700,cursor:"pointer"},K={background:"#1e59c8",color:"#fff",border:"none",borderRadius:8,padding:"7px 12px",fontWeight:600,cursor:"pointer"},ae={display:"flex",gap:8};function Ct(e){let{client:o,walletConnectProjectId:t,appName:n,onClose:i,style:s}=e,[g,l]=useState(t??"");useEffect(()=>{if(t)return;let C=true;return (async()=>{let h=await o.blockchain.getDefinitions();if(!C||!h.ok)return;let b=h.data.Blockchain?.WalletLogin?.WalletConnectProjectId;b&&l(b);})(),()=>{C=false;}},[o,t]);let c=useMemo(()=>ne({walletConnectProjectId:g||void 0,appName:n}),[g,n]);return jsx(j,{wagmiConfig:c,children:jsx(vt,{client:o,appName:n,onClose:i,style:s})})}function vt({client:e,onClose:o,style:t}){let n=re(e,e.titleID),{address:i,isConnected:s,chainId:g}=useAccount(),{connect:l,connectors:c}=useConnect(),{disconnect:C}=useDisconnect(),{switchChainAsync:h}=useSwitchChain(),[,b]=useReducer(r=>r+1,0),[D,I]=useState({}),[p,k]=useState({}),[u,A]=useState(""),[w,B]=useState(""),[T,F]=useState(""),[x,S]=useState(false),[P,f]=useState(null);useEffect(()=>{let r=true;return (async()=>{let d=await e.blockchain.getDefinitions();if(await e.blockchain.getUserState(),!r||!d.ok)return;let R=d.data.Blockchain?.Networks??{},H={};for(let[Ee,ce]of Object.entries(R))ce.Type==="EVM"&&(H[Ee]=ce);I(H),k(d.data.CryptoCurrencies??{});let Ne=Object.keys(H)[0]??"";A(Ne);})(),()=>{r=false;}},[e]),useEffect(()=>e.on("user:anyUpdated",b),[e]);let v=useMemo(()=>Object.entries(p).filter(([,r])=>r.Networks?.some(d=>d.NetworkID===u&&!!d.ContractAddress)),[p,u]);useEffect(()=>{let r=v[0]?.[0]??"";B(d=>v.some(([R])=>R===d)?d:r);},[v]);let y=u?D[u]:void 0,N=(w?p[w]:void 0)?.Networks?.find(r=>r.NetworkID===u),We=w?e.data.user.getCryptoCurrencyAmount(w):"0";async function le(){if(!y?.ChainID||g===y.ChainID)return true;try{return await h({chainId:y.ChainID}),!0}catch{return f({ok:false,stage:"approve",error:`Switch your wallet to chain ${y.ChainID} to continue.`}),false}}async function De(){if(!(!y||!N?.ContractAddress)){if(S(true),f(null),await le()){let r=N.Decimals??18,d;try{d=parseUnits(T||"0",r);}catch{f({ok:false,stage:"approve",error:"Invalid amount."}),S(false);return}let R=await n.depositToken({network:y,tokenAddress:N.ContractAddress,amount:d});f(R),R.ok&&await e.blockchain.getUserState();}S(false);}}async function Se(){if(!(!y||!n.account)){if(S(true),f(null),await le()){let r=await n.withdrawToken({currencyID:w,networkID:u,walletAddress:n.account,amount:T||"0"});f(r),r.ok&&await e.blockchain.getUserState();}S(false);}}return jsxs("div",{style:{...gt,...t},children:[jsxs("div",{style:{...ae,justifyContent:"space-between"},children:[jsx("span",{style:yt,children:"Crypto wallet"}),o&&jsx("button",{type:"button",style:K,onClick:o,children:"\u2715"})]}),s?jsxs("div",{style:ae,children:[jsxs("span",{style:{...E,flex:1,alignSelf:"center"},children:[i?.slice(0,6),"\u2026",i?.slice(-4)]}),jsx("button",{type:"button",style:K,onClick:()=>C(),children:"Disconnect"})]}):jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6},children:[jsx("span",{style:E,children:"Connect a browser or mobile wallet"}),c.map(r=>jsx("button",{type:"button",style:K,onClick:()=>l({connector:r}),children:r.name},r.uid))]}),Object.keys(D).length===0?jsx("span",{style:E,children:"No EVM networks configured for this title."}):jsxs(Fragment,{children:[jsxs("div",{children:[jsx("div",{style:E,children:"Network"}),jsx("select",{style:se,value:u,onChange:r=>A(r.target.value),children:Object.entries(D).map(([r,d])=>jsx("option",{value:r,children:d.DisplayName??r},r))})]}),jsxs("div",{children:[jsx("div",{style:E,children:"Token"}),jsxs("select",{style:se,value:w,onChange:r=>B(r.target.value),children:[v.length===0&&jsx("option",{value:"",children:"\u2014 no depositable tokens \u2014"}),v.map(([r,d])=>jsx("option",{value:r,children:d.DisplayName??r},r))]})]}),jsxs("div",{style:E,children:["In-game balance: ",jsx("b",{children:We})," ",w]}),jsxs("div",{children:[jsx("div",{style:E,children:"Amount"}),jsx("input",{style:se,inputMode:"decimal",placeholder:"0.0",value:T,onChange:r=>F(r.target.value)})]}),jsxs("div",{style:ae,children:[jsx("button",{type:"button",style:{...wt,flex:1,opacity:x?.6:1},disabled:x||!s||!N?.ContractAddress,onClick:()=>{De();},children:"Deposit"}),jsx("button",{type:"button",style:{...K,flex:1,opacity:x?.6:1},disabled:x||!s||!w,onClick:()=>{Se();},children:"Withdraw"})]})]}),P&&jsx(ht,{result:P})]})}function ht({result:e}){let o={fontSize:12,borderRadius:8,padding:"8px 10px",background:e.ok?"#1e3a2a":"#3a1e28",color:e.ok?"#8ef0b0":"#f2a0b4",wordBreak:"break-all"};return e.ok?jsxs("div",{style:o,children:["\u2713 Done \xB7 tx ",e.onChainTxHash]}):jsxs("div",{style:o,children:["\u2715 [",e.stage,"] ",e.error,e.titleTransactionID?` \xB7 already debited (tx ${e.titleTransactionID}) \u2014 retry/confirm, don't re-request`:""]})}export{we as DEFAULT_EVM_CHAINS,j as IDosGamesWalletProvider,Je as WalletLogin,ke as WalletLoginButton,Ct as WalletPanel,ne as createEvmWalletConfig,re as useEvmBridge,U as useEvmBridgeClients};
1
+ import {o,n,i,h as h$1,p}from'../chunk-OWJXQVDR.js';import {a as a$1,b as b$2}from'../chunk-ZL42KPPC.js';import {b as b$1,c as c$1}from'../chunk-K62NMX3A.js';import {a,b,c,d,e,f,g,h,k}from'../chunk-HQNS6ZWL.js';export{e as arbitrum,d as base,b as bsc,j as chainById,i as idosChains,a as mainnet,f as optimism,c as polygon,h as polygonAmoy,g as sepolia}from'../chunk-HQNS6ZWL.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,useReducer}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {getAccount,watchAccount,getWalletClient,getPublicClient}from'wagmi/actions';import {parseUnits}from'viem';var we=[a,b,c,d,e,f,g,h],oe=new Map;function ne(e){let{chains:o=we,walletConnectProjectId:t,appName:n,appUrl:i,appIcon:s,transports:g,connectors:l}=e,c=t??"__extension_only__";if(!l){let p=oe.get(c);if(p)return p}let C={};for(let p of o)C[p.id]=g?.[p.id]??http();let h=i??(typeof window<"u"?window.location.origin:""),b={name:n??"iDosGames",description:n??"iDosGames game",url:h,icons:s?[s]:[]};if(t&&!l){let p=o.map(k),k$1=new WagmiAdapter({networks:p,projectId:t,transports:C});return a$1(createAppKit({adapters:[k$1],networks:p,projectId:t,metadata:b,features:{analytics:false,email:false,socials:false}})),oe.set(c,k$1.wagmiConfig),k$1.wagmiConfig}let D=l??[injected(),coinbaseWallet({appName:n??"iDosGames"})],I=createConfig({chains:o,connectors:D,transports:C});return l||oe.set(c,I),I}function j(e){let{wagmiConfig:o,queryClient:t,children:n}=e,[i]=useState(()=>t??new QueryClient);return jsx(WagmiProvider,{config:o,children:jsx(QueryClientProvider,{client:i,children:n})})}function U(){let{address:e}=useAccount(),o=usePublicClient(),{data:t}=useWalletClient();return !e||!o||!t?null:{account:e,publicClient:o,walletClient:t}}var L="Wallet not connected.";function re(e,o$1){let t=U();return {connected:!!t,account:t?.account??null,loginWithWallet:(n,i)=>t?p({client:e,clients:t,networkID:n,walletAddress:i}):Promise.resolve(c$1("challenge",L)),depositToken:n=>t?h$1({client:e,clients:t,titleID:o$1,...n}):Promise.resolve(b$1("approve",L)),depositNft:n=>t?i({client:e,clients:t,titleID:o$1,...n}):Promise.resolve(b$1("deposit-onchain",L)),withdrawToken:n$1=>t?n({client:e,clients:t,...n$1}):Promise.resolve(b$1("withdraw-onchain",L)),withdrawNft:n=>t?o({client:e,clients:t,...n}):Promise.resolve(b$1("withdraw-onchain",L))}}function Je(e){let{wagmiConfig:o,...t}=e;return jsx(j,{wagmiConfig:o,children:jsx(ke,{...t})})}function Xe(e){return e instanceof Error&&(e.name==="ConnectorAlreadyConnectedError"||e.message.includes("already connected"))}function Ye(e){let o="Wallet sign-in failed. Please try again.";return e instanceof Error?e.name==="ProviderNotFoundError"||/provider not found/i.test(e.message)?"No crypto wallet found in this browser. Install a wallet extension (e.g. MetaMask) or open this page in your wallet's browser, then try again.":e.name==="UserRejectedRequestError"||/user (rejected|denied|cancelled|canceled)/i.test(e.message)?"Request declined in the wallet.":/timed? ?out/i.test(e.message)?"The wallet did not respond. Open your wallet and try again.":o:o}async function he(e){let o=await getWalletClient(e).catch(()=>null);if(!o)return null;let t=getPublicClient(e);return t?{account:o.account.address,publicClient:t,walletClient:o}:null}function Ze(e,o=18e4){return getAccount(e).isConnected?Promise.resolve(true):new Promise(t=>{let n=false,i=l=>{n||(n=true,s(),clearTimeout(g),t(l));},s=watchAccount(e,{onChange:l=>{l.isConnected&&i(true);}}),g=setTimeout(()=>i(false),o);})}function et(e,o=8e3){let t=n=>n==="reconnecting"||n==="connecting";return t(getAccount(e).status)?new Promise(n=>{let i=false,s=()=>{i||(i=true,g(),clearTimeout(l),n());},g=watchAccount(e,{onChange:c=>{t(c.status)||s();}}),l=setTimeout(s,o);}):Promise.resolve()}function tt(e){let o=i=>e.find(s=>s.id===i||s.type===i),t=o("injected"),n=typeof window<"u"&&window.ethereum!=null;return t&&n?t:o("walletConnect")??t??e[0]}var ot=9e4;async function nt(e){try{let n=(await getAccount(e).connector?.getProvider?.())?.session?.peer?.metadata?.redirect,i=n?.native||n?.universal;return !i||typeof window>"u"?!1:(window.location.href=i,!0)}catch{return false}}function rt(e,o){return new Promise((t,n)=>{let i=setTimeout(()=>n(new Error("The wallet request timed out.")),o);e.then(s=>{clearTimeout(i),t(s);},s=>{clearTimeout(i),n(s instanceof Error?s:new Error(String(s)));});})}function ke(e){let{client:o,networkID:t,onAuthenticated:n,disabled:i,label:s,style:g,autoStart:l}=e,c=useConfig(),{isConnected:C}=useAccount(),{connectAsync:h,connectors:b}=useConnect(),D=U(),[I,p$1]=useState(false),[k,u]=useState(null),[A,w]=useState(false),B=useRef(0),T=useRef(false),F=async()=>{let S=++B.current,P=()=>B.current===S;p$1(true),u(null);try{if(await et(c),!P())return;if(!getAccount(c).isConnected){let y=b$2();if(y){if(await y.open(),!await Ze(c)){u("No wallet was connected.");return}}else {let z=tt(b);if(!z){u("No wallet connector is configured.");return}try{await h({connector:z});}catch(N){if(!Xe(N))throw N}}}let f=D??await he(c);if(!f&&getAccount(c).isConnected&&(await new Promise(y=>setTimeout(y,300)),f=await he(c),!P()))return;if(!f){u("Wallet client is not available.");return}w(!0);let v=await rt(p({client:o,clients:f,networkID:t}),ot);if(!P())return;if(v.ok){n();return}u(v.stage==="sign"?"Signature declined.":v.error??"Wallet sign-in failed.");}catch(f){if(!P())return;console.error("[idosgames/wallet] wallet sign-in failed:",f),u(Ye(f));}finally{P()&&(p$1(false),w(false));}};useEffect(()=>{!l||T.current||(T.current=true,F());},[l]);let x=async()=>{await nt(c)||await b$2()?.open();};return jsxs(Fragment,{children:[jsx("button",{type:"button",onClick:()=>{A?x():F();},disabled:i,style:{...it,...i?{opacity:.6,cursor:"default"}:null,...g},children:A?"Waiting for signature \u2014 tap to open wallet":I?"Check your wallet\u2026":C?s??"Sign in with wallet":"Connect wallet"}),k&&jsx("span",{role:"alert",style:st,children:k})]})}var it={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},st={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};var gt={pointerEvents:"auto",background:"#04276bf5",border:"1px solid #1e59c8",borderRadius:12,padding:16,color:"#fff",width:320,boxSizing:"border-box",fontFamily:"system-ui, sans-serif",display:"flex",flexDirection:"column",gap:10,maxHeight:"80vh",overflow:"auto"},yt={fontWeight:700,fontSize:16},E={fontSize:12,opacity:.7},se={background:"#052e7e",border:"1px solid #1e59c8",borderRadius:8,color:"#fff",padding:"8px 10px",width:"100%",boxSizing:"border-box"},wt={background:"#0d66fe",color:"#fff",border:"none",borderRadius:8,padding:"9px 14px",fontWeight:700,cursor:"pointer"},K={background:"#1e59c8",color:"#fff",border:"none",borderRadius:8,padding:"7px 12px",fontWeight:600,cursor:"pointer"},ae={display:"flex",gap:8};function Ct(e){let{client:o,walletConnectProjectId:t,appName:n,onClose:i,style:s}=e,[g,l]=useState(t??"");useEffect(()=>{if(t)return;let C=true;return (async()=>{let h=await o.blockchain.getDefinitions();if(!C||!h.ok)return;let b=h.data.Blockchain?.WalletLogin?.WalletConnectProjectId;b&&l(b);})(),()=>{C=false;}},[o,t]);let c=useMemo(()=>ne({walletConnectProjectId:g||void 0,appName:n}),[g,n]);return jsx(j,{wagmiConfig:c,children:jsx(vt,{client:o,appName:n,onClose:i,style:s})})}function vt({client:e,onClose:o,style:t}){let n=re(e,e.titleID),{address:i,isConnected:s,chainId:g}=useAccount(),{connect:l,connectors:c}=useConnect(),{disconnect:C}=useDisconnect(),{switchChainAsync:h}=useSwitchChain(),[,b]=useReducer(r=>r+1,0),[D,I]=useState({}),[p,k]=useState({}),[u,A]=useState(""),[w,B]=useState(""),[T,F]=useState(""),[x,S]=useState(false),[P,f]=useState(null);useEffect(()=>{let r=true;return (async()=>{let d=await e.blockchain.getDefinitions();if(await e.blockchain.getUserState(),!r||!d.ok)return;let R=d.data.Blockchain?.Networks??{},H={};for(let[Ee,ce]of Object.entries(R))ce.Type==="EVM"&&(H[Ee]=ce);I(H),k(d.data.CryptoCurrencies??{});let Ne=Object.keys(H)[0]??"";A(Ne);})(),()=>{r=false;}},[e]),useEffect(()=>e.on("user:anyUpdated",b),[e]);let v=useMemo(()=>Object.entries(p).filter(([,r])=>r.Networks?.some(d=>d.NetworkID===u&&!!d.ContractAddress)),[p,u]);useEffect(()=>{let r=v[0]?.[0]??"";B(d=>v.some(([R])=>R===d)?d:r);},[v]);let y=u?D[u]:void 0,N=(w?p[w]:void 0)?.Networks?.find(r=>r.NetworkID===u),We=w?e.data.user.getCryptoCurrencyAmount(w):"0";async function le(){if(!y?.ChainID||g===y.ChainID)return true;try{return await h({chainId:y.ChainID}),!0}catch{return f({ok:false,stage:"approve",error:`Switch your wallet to chain ${y.ChainID} to continue.`}),false}}async function De(){if(!(!y||!N?.ContractAddress)){if(S(true),f(null),await le()){let r=N.Decimals??18,d;try{d=parseUnits(T||"0",r);}catch{f({ok:false,stage:"approve",error:"Invalid amount."}),S(false);return}let R=await n.depositToken({network:y,tokenAddress:N.ContractAddress,amount:d});f(R),R.ok&&await e.blockchain.getUserState();}S(false);}}async function Se(){if(!(!y||!n.account)){if(S(true),f(null),await le()){let r=await n.withdrawToken({currencyID:w,networkID:u,walletAddress:n.account,amount:T||"0"});f(r),r.ok&&await e.blockchain.getUserState();}S(false);}}return jsxs("div",{style:{...gt,...t},children:[jsxs("div",{style:{...ae,justifyContent:"space-between"},children:[jsx("span",{style:yt,children:"Crypto wallet"}),o&&jsx("button",{type:"button",style:K,onClick:o,children:"\u2715"})]}),s?jsxs("div",{style:ae,children:[jsxs("span",{style:{...E,flex:1,alignSelf:"center"},children:[i?.slice(0,6),"\u2026",i?.slice(-4)]}),jsx("button",{type:"button",style:K,onClick:()=>C(),children:"Disconnect"})]}):jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6},children:[jsx("span",{style:E,children:"Connect a browser or mobile wallet"}),c.map(r=>jsx("button",{type:"button",style:K,onClick:()=>l({connector:r}),children:r.name},r.uid))]}),Object.keys(D).length===0?jsx("span",{style:E,children:"No EVM networks configured for this title."}):jsxs(Fragment,{children:[jsxs("div",{children:[jsx("div",{style:E,children:"Network"}),jsx("select",{style:se,value:u,onChange:r=>A(r.target.value),children:Object.entries(D).map(([r,d])=>jsx("option",{value:r,children:d.DisplayName??r},r))})]}),jsxs("div",{children:[jsx("div",{style:E,children:"Token"}),jsxs("select",{style:se,value:w,onChange:r=>B(r.target.value),children:[v.length===0&&jsx("option",{value:"",children:"\u2014 no depositable tokens \u2014"}),v.map(([r,d])=>jsx("option",{value:r,children:d.DisplayName??r},r))]})]}),jsxs("div",{style:E,children:["In-game balance: ",jsx("b",{children:We})," ",w]}),jsxs("div",{children:[jsx("div",{style:E,children:"Amount"}),jsx("input",{style:se,inputMode:"decimal",placeholder:"0.0",value:T,onChange:r=>F(r.target.value)})]}),jsxs("div",{style:ae,children:[jsx("button",{type:"button",style:{...wt,flex:1,opacity:x?.6:1},disabled:x||!s||!N?.ContractAddress,onClick:()=>{De();},children:"Deposit"}),jsx("button",{type:"button",style:{...K,flex:1,opacity:x?.6:1},disabled:x||!s||!w,onClick:()=>{Se();},children:"Withdraw"})]})]}),P&&jsx(ht,{result:P})]})}function ht({result:e}){let o={fontSize:12,borderRadius:8,padding:"8px 10px",background:e.ok?"#1e3a2a":"#3a1e28",color:e.ok?"#8ef0b0":"#f2a0b4",wordBreak:"break-all"};return e.ok?jsxs("div",{style:o,children:["\u2713 Done \xB7 tx ",e.onChainTxHash]}):jsxs("div",{style:o,children:["\u2715 [",e.stage,"] ",e.error,e.titleTransactionID?` \xB7 already debited (tx ${e.titleTransactionID}) \u2014 retry/confirm, don't re-request`:""]})}export{we as DEFAULT_EVM_CHAINS,j as IDosGamesWalletProvider,Je as WalletLogin,ke as WalletLoginButton,Ct as WalletPanel,ne as createEvmWalletConfig,re as useEvmBridge,U as useEvmBridgeClients};
@@ -1,2 +1,2 @@
1
- 'use strict';var 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'),viem=require('viem'),core=require('@idosgames/core'),actions=require('wagmi/actions'),appkitAdapterSolana=require('@reown/appkit-adapter-solana');var Ft=Object.defineProperty;var w=(e,t)=>()=>(e&&(t=e(e=0)),t);var $e=(e,t)=>{for(var n in t)Ft(e,n,{get:t[n],enumerable:true});};function ke(e){return Object.values(exports.idosChains).find(t=>t.id===e)}function Ye(e){return {...e,chainNamespace:"eip155",caipNetworkId:`eip155:${e.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 X=w(()=>{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 de(e){Qe=e;}function ee(){return Qe}var Qe,oe=w(()=>{Qe=null;});function pe(e){let{chains:t=Pe,walletConnectProjectId:n,appName:o,appUrl:i,appIcon:r,transports:l,connectors:s}=e,a=n??"__extension_only__";if(!s){let f=Se.get(a);if(f)return f}let d={};for(let f of t)d[f.id]=l?.[f.id]??wagmi.http();let c=i??(typeof window<"u"?window.location.origin:""),u={name:o??"iDosGames",description:o??"iDosGames game",url:c,icons:r?[r]:[]};if(n&&!s){let f=t.map(Ye),b=new appkitAdapterWagmi.WagmiAdapter({networks:f,projectId:n,transports:d});return de(react$1.createAppKit({adapters:[b],networks:f,projectId:n,metadata:u,features:{analytics:false,email:false,socials:false}})),Se.set(a,b.wagmiConfig),b.wagmiConfig}let m=s??[connectors.injected(),connectors.coinbaseWallet({appName:o??"iDosGames"})],y=wagmi.createConfig({chains:t,connectors:m,transports:d});return s||Se.set(a,y),y}var Pe,Se,We=w(()=>{X();oe();Pe=[exports.mainnet,exports.bsc,exports.polygon,exports.base,exports.arbitrum,exports.optimism,exports.sepolia,exports.polygonAmoy],Se=new Map;});function te(e){let{wagmiConfig:t,queryClient:n,children:o}=e,[i]=react.useState(()=>n??new reactQuery.QueryClient);return jsxRuntime.jsx(wagmi.WagmiProvider,{config:t,children:jsxRuntime.jsx(reactQuery.QueryClientProvider,{client:i,children:o})})}var ue=w(()=>{});var me,Je,xe,Xe,Ae=w(()=>{me=[{type:"function",name:"depositERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"amount",type:"uint256"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"withdrawERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"amount",type:"uint256"},{name:"burnAmount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC1155",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],Je=[{type:"function",name:"withdrawERC1155Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],xe=[{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"}]}],Xe=[{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 et(e,t,n){return viem.encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[e,t,core.normalizeBlockchainCategory(n)])}var tt=w(()=>{});async function O(e,t){let{walletClient:n,publicClient:o,account:i}=e,r=await n.writeContract({address:t.address,abi:t.abi,functionName:t.functionName,args:t.args,account:i,chain:n.chain,value:t.value});if((await o.waitForTransactionReceipt({hash:r})).status==="reverted")throw new Error(`On-chain transaction reverted (${r}).`);return r}var Te=w(()=>{});function A(e){return e instanceof viem.BaseError?e.shortMessage:e instanceof Error?e.message:String(e)}function p(e,t,n){return {ok:false,stage:e,error:t,...n}}function D(e,t){return {ok:false,stage:e,error:t}}var F=w(()=>{});function nt(e){let t=e.RewardPoolAddress;return t||null}async function ot(e,t,n,o){return await e.publicClient.readContract({address:t,abi:xe,functionName:"allowance",args:[e.account,n]})>=o?null:O(e,{address:t,abi:xe,functionName:"approve",args:[n,o]})}async function De(e){let{client:t,clients:n,network:o,tokenAddress:i,amount:r,titleID:l,category:s}=e,a=t.auth.context?.userID;if(!a)return p("approve","Not logged in.");let d=nt(o);if(!d)return p("approve","Network has no RewardPoolAddress.");if(r<=0n)return p("approve","Amount must be positive.");try{await ot(n,i,d,r);}catch(m){return p("approve",A(m))}let c;try{c=await O(n,{address:d,abi:me,functionName:"depositERC20",args:[i,r,a,l,s??""]});}catch(m){return p("deposit-onchain",A(m))}let u=await t.blockchain.depositToken(o.NetworkID??"",c);return u.ok?{ok:true,onChainTxHash:c,data:u.data}:p("report",u.error,{onChainTxHash:c})}async function Ee(e){let{client:t,clients:n,network:o,nftContractAddress:i,tokenId:r,amount:l,titleID:s,category:a}=e,d=t.auth.context?.userID;if(!d)return p("deposit-onchain","Not logged in.");let c=nt(o);if(!c)return p("deposit-onchain","Network has no RewardPoolAddress.");if(l<=0n)return p("deposit-onchain","Amount must be positive.");let u=et(d,s,a),m;try{m=await O(n,{address:i,abi:Xe,functionName:"safeTransferFrom",args:[n.account,c,r,l,u]});}catch(f){return p("deposit-onchain",A(f))}let y=await t.blockchain.depositNFT(o.NetworkID??"",m);return y.ok?{ok:true,onChainTxHash:m,data:y.data}:p("report",y.error,{onChainTxHash:m})}var rt=w(()=>{Ae();tt();Te();F();});async function at(e,t){return O(e,{address:t.ContractAddress,abi:me,functionName:"withdrawERC20",args:[t.TokenAddress,t.WalletAddress,BigInt(t.Amount??"0"),BigInt(t.BurnAmount??"0"),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function it(e,t){return O(e,{address:t.ContractAddress,abi:Je,functionName:"withdrawERC1155Mint",args:[t.TokenAddress,t.WalletAddress,BigInt(t.TokenId??"0"),BigInt(t.Amount??"0"),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function Ie(e){let{client:t,clients:n,currencyID:o,networkID:i,walletAddress:r,amount:l,category:s}=e,a=await t.blockchain.requestTokenWithdrawal(o,i,r,l,s);if(!a.ok)return p("request",a.error);let d=a.data.EvmSignature,c=a.data.TitleTransactionID??void 0;if(!d)return p("request","Withdrawal response carried no EVM signature.",{titleTransactionID:c});let u;try{u=await at(n,d);}catch(y){return p("withdraw-onchain",A(y),{titleTransactionID:c})}let m=await st(t,c,u);return m.ok?{ok:true,onChainTxHash:u,data:a.data}:m}async function Ne(e){let{client:t,clients:n,itemID:o,networkID:i,walletAddress:r,amount:l,category:s}=e,a=await t.blockchain.requestNFTWithdrawal(o,i,r,l,s);if(!a.ok)return p("request",a.error);let d=a.data.EvmSignature,c=a.data.TitleTransactionID??void 0;if(!d)return p("request","Withdrawal response carried no EVM signature.",{titleTransactionID:c});let u;try{u=await it(n,d);}catch(y){return p("withdraw-onchain",A(y),{titleTransactionID:c})}let m=await st(t,c,u);return m.ok?{ok:true,onChainTxHash:u,data:a.data}:m}async function st(e,t,n){if(!t)return p("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let o=await e.blockchain.confirmWithdrawal(t,n);return o.ok?{ok:true,onChainTxHash:n,data:o.data}:p("confirm",o.error,{onChainTxHash:n,titleTransactionID:t})}var lt=w(()=>{Ae();Te();F();});async function re(e){let{client:t,clients:n,networkID:o}=e,i=e.walletAddress??n.account,r=await t.auth.requestWalletChallenge(i,o);if(!r.ok)return D("challenge",r.error);let l;try{l=await n.walletClient.signMessage({account:n.account,message:r.data.Message});}catch(a){return D("sign",A(a))}let s=await t.auth.loginWithWallet(i,o,l);return s.ok?{ok:true,data:s.data}:D("login",s.error)}var ct=w(()=>{F();});var Re=w(()=>{rt();lt();ct();});function ie(){let{address:e}=wagmi.useAccount(),t=wagmi.usePublicClient(),{data:n}=wagmi.useWalletClient();return !e||!t||!n?null:{account:e,publicClient:t,walletClient:n}}function fe(e,t){let n=ie();return {connected:!!n,account:n?.account??null,loginWithWallet:(o,i)=>n?re({client:e,clients:n,networkID:o,walletAddress:i}):Promise.resolve(D("challenge",ae)),depositToken:o=>n?De({client:e,clients:n,titleID:t,...o}):Promise.resolve(p("approve",ae)),depositNft:o=>n?Ee({client:e,clients:n,titleID:t,...o}):Promise.resolve(p("deposit-onchain",ae)),withdrawToken:o=>n?Ie({client:e,clients:n,...o}):Promise.resolve(p("withdraw-onchain",ae)),withdrawNft:o=>n?Ne({client:e,clients:n,...o}):Promise.resolve(p("withdraw-onchain",ae))}}var ae,ge=w(()=>{Re();F();ae="Wallet not connected.";});function mt(e){let{wagmiConfig:t,...n}=e;return jsxRuntime.jsx(te,{wagmiConfig:t,children:jsxRuntime.jsx(Le,{...n})})}function sn(e){return e instanceof Error&&(e.name==="ConnectorAlreadyConnectedError"||e.message.includes("already connected"))}function ln(e){let t="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.":t:t}async function pt(e){let t=await actions.getWalletClient(e).catch(()=>null);if(!t)return null;let n=actions.getPublicClient(e);return n?{account:t.account.address,publicClient:n,walletClient:t}:null}function cn(e,t=18e4){return actions.getAccount(e).isConnected?Promise.resolve(true):new Promise(n=>{let o=false,i=s=>{o||(o=true,r(),clearTimeout(l),n(s));},r=actions.watchAccount(e,{onChange:s=>{s.isConnected&&i(true);}}),l=setTimeout(()=>i(false),t);})}function dn(e,t=8e3){let n=o=>o==="reconnecting"||o==="connecting";return n(actions.getAccount(e).status)?new Promise(o=>{let i=false,r=()=>{i||(i=true,l(),clearTimeout(s),o());},l=actions.watchAccount(e,{onChange:a=>{n(a.status)||r();}}),s=setTimeout(r,t);}):Promise.resolve()}function pn(e){let t=i=>e.find(r=>r.id===i||r.type===i),n=t("injected"),o=typeof window<"u"&&window.ethereum!=null;return n&&o?n:t("walletConnect")??n??e[0]}async function mn(e){try{let o=(await actions.getAccount(e).connector?.getProvider?.())?.session?.peer?.metadata?.redirect,i=o?.native||o?.universal;return !i||typeof window>"u"?!1:(window.location.href=i,!0)}catch{return false}}function fn(e,t){return new Promise((n,o)=>{let i=setTimeout(()=>o(new Error("The wallet request timed out.")),t);e.then(r=>{clearTimeout(i),n(r);},r=>{clearTimeout(i),o(r instanceof Error?r:new Error(String(r)));});})}function Le(e){let{client:t,networkID:n,onAuthenticated:o,disabled:i,label:r,style:l,autoStart:s}=e,a=wagmi.useConfig(),{isConnected:d}=wagmi.useAccount(),{connectAsync:c,connectors:u}=wagmi.useConnect(),m=ie(),[y,f]=react.useState(false),[b,h]=react.useState(null),[M,P]=react.useState(false),I=react.useRef(0),L=react.useRef(false),N=async()=>{let E=++I.current,B=()=>I.current===E;f(true),h(null);try{if(await dn(a),!B())return;if(!actions.getAccount(a).isConnected){let v=ee();if(v){if(await v.open(),!await cn(a)){h("No wallet was connected.");return}}else {let z=pn(u);if(!z){h("No wallet connector is configured.");return}try{await c({connector:z});}catch(x){if(!sn(x))throw x}}}let k=m??await pt(a);if(!k&&actions.getAccount(a).isConnected&&(await new Promise(v=>setTimeout(v,300)),k=await pt(a),!B()))return;if(!k){h("Wallet client is not available.");return}P(!0);let W=await fn(re({client:t,clients:k,networkID:n}),un);if(!B())return;if(W.ok){o();return}h(W.stage==="sign"?"Signature declined.":W.error??"Wallet sign-in failed.");}catch(k){if(!B())return;console.error("[idosgames/wallet] wallet sign-in failed:",k),h(ln(k));}finally{B()&&(f(false),P(false));}};react.useEffect(()=>{!s||L.current||(L.current=true,N());},[s]);let R=async()=>{await mn(a)||await ee()?.open();};return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:()=>{M?R():N();},disabled:i,style:{...gn,...i?{opacity:.6,cursor:"default"}:null,...l},children:M?"Waiting for signature \u2014 tap to open wallet":y?"Check your wallet\u2026":d?r??"Sign in with wallet":"Connect wallet"}),b&&jsxRuntime.jsx("span",{role:"alert",style:yn,children:b})]})}var un,gn,yn,ft=w(()=>{oe();Re();ue();ge();un=9e4;gn={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},yn={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};});function yt(e){let{client:t,walletConnectProjectId:n,appName:o,onClose:i,style:r}=e,[l,s]=react.useState(n??"");react.useEffect(()=>{if(n)return;let d=true;return (async()=>{let c=await t.blockchain.getDefinitions();if(!d||!c.ok)return;let u=c.data.Blockchain?.WalletLogin?.WalletConnectProjectId;u&&s(u);})(),()=>{d=false;}},[t,n]);let a=react.useMemo(()=>pe({walletConnectProjectId:l||void 0,appName:o}),[l,o]);return jsxRuntime.jsx(te,{wagmiConfig:a,children:jsxRuntime.jsx(Tn,{client:t,appName:o,onClose:i,style:r})})}function Tn({client:e,onClose:t,style:n}){let o=fe(e,e.titleID),{address:i,isConnected:r,chainId:l}=wagmi.useAccount(),{connect:s,connectors:a}=wagmi.useConnect(),{disconnect:d}=wagmi.useDisconnect(),{switchChainAsync:c}=wagmi.useSwitchChain(),[,u]=react.useReducer(g=>g+1,0),[m,y]=react.useState({}),[f,b]=react.useState({}),[h,M]=react.useState(""),[P,I]=react.useState(""),[L,N]=react.useState(""),[R,E]=react.useState(false),[B,k]=react.useState(null);react.useEffect(()=>{let g=true;return (async()=>{let S=await e.blockchain.getDefinitions();if(await e.blockchain.getUserState(),!g||!S.ok)return;let q=S.data.Blockchain?.Networks??{},be={};for(let[Mt,Ve]of Object.entries(q))Ve.Type==="EVM"&&(be[Mt]=Ve);y(be),b(S.data.CryptoCurrencies??{});let Lt=Object.keys(be)[0]??"";M(Lt);})(),()=>{g=false;}},[e]),react.useEffect(()=>e.on("user:anyUpdated",u),[e]);let W=react.useMemo(()=>Object.entries(f).filter(([,g])=>g.Networks?.some(S=>S.NetworkID===h&&!!S.ContractAddress)),[f,h]);react.useEffect(()=>{let g=W[0]?.[0]??"";I(S=>W.some(([q])=>q===S)?S:g);},[W]);let v=h?m[h]:void 0,x=(P?f[P]:void 0)?.Networks?.find(g=>g.NetworkID===h),Nt=P?e.data.user.getCryptoCurrencyAmount(P):"0";async function _e(){if(!v?.ChainID||l===v.ChainID)return true;try{return await c({chainId:v.ChainID}),!0}catch{return k({ok:false,stage:"approve",error:`Switch your wallet to chain ${v.ChainID} to continue.`}),false}}async function Rt(){if(!(!v||!x?.ContractAddress)){if(E(true),k(null),await _e()){let g=x.Decimals??18,S;try{S=viem.parseUnits(L||"0",g);}catch{k({ok:false,stage:"approve",error:"Invalid amount."}),E(false);return}let q=await o.depositToken({network:v,tokenAddress:x.ContractAddress,amount:S});k(q),q.ok&&await e.blockchain.getUserState();}E(false);}}async function Bt(){if(!(!v||!o.account)){if(E(true),k(null),await _e()){let g=await o.withdrawToken({currencyID:P,networkID:h,walletAddress:o.account,amount:L||"0"});k(g),g.ok&&await e.blockchain.getUserState();}E(false);}}return jsxRuntime.jsxs("div",{style:{...Wn,...n},children:[jsxRuntime.jsxs("div",{style:{...Fe,justifyContent:"space-between"},children:[jsxRuntime.jsx("span",{style:xn,children:"Crypto wallet"}),t&&jsxRuntime.jsx("button",{type:"button",style:we,onClick:t,children:"\u2715"})]}),r?jsxRuntime.jsxs("div",{style:Fe,children:[jsxRuntime.jsxs("span",{style:{...U,flex:1,alignSelf:"center"},children:[i?.slice(0,6),"\u2026",i?.slice(-4)]}),jsxRuntime.jsx("button",{type:"button",style:we,onClick:()=>d(),children:"Disconnect"})]}):jsxRuntime.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6},children:[jsxRuntime.jsx("span",{style:U,children:"Connect a browser or mobile wallet"}),a.map(g=>jsxRuntime.jsx("button",{type:"button",style:we,onClick:()=>s({connector:g}),children:g.name},g.uid))]}),Object.keys(m).length===0?jsxRuntime.jsx("span",{style:U,children:"No EVM networks configured for this title."}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:U,children:"Network"}),jsxRuntime.jsx("select",{style:Me,value:h,onChange:g=>M(g.target.value),children:Object.entries(m).map(([g,S])=>jsxRuntime.jsx("option",{value:g,children:S.DisplayName??g},g))})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:U,children:"Token"}),jsxRuntime.jsxs("select",{style:Me,value:P,onChange:g=>I(g.target.value),children:[W.length===0&&jsxRuntime.jsx("option",{value:"",children:"\u2014 no depositable tokens \u2014"}),W.map(([g,S])=>jsxRuntime.jsx("option",{value:g,children:S.DisplayName??g},g))]})]}),jsxRuntime.jsxs("div",{style:U,children:["In-game balance: ",jsxRuntime.jsx("b",{children:Nt})," ",P]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:U,children:"Amount"}),jsxRuntime.jsx("input",{style:Me,inputMode:"decimal",placeholder:"0.0",value:L,onChange:g=>N(g.target.value)})]}),jsxRuntime.jsxs("div",{style:Fe,children:[jsxRuntime.jsx("button",{type:"button",style:{...An,flex:1,opacity:R?.6:1},disabled:R||!r||!x?.ContractAddress,onClick:()=>{Rt();},children:"Deposit"}),jsxRuntime.jsx("button",{type:"button",style:{...we,flex:1,opacity:R?.6:1},disabled:R||!r||!P,onClick:()=>{Bt();},children:"Withdraw"})]})]}),B&&jsxRuntime.jsx(Dn,{result:B})]})}function Dn({result:e}){let t={fontSize:12,borderRadius:8,padding:"8px 10px",background:e.ok?"#1e3a2a":"#3a1e28",color:e.ok?"#8ef0b0":"#f2a0b4",wordBreak:"break-all"};return e.ok?jsxRuntime.jsxs("div",{style:t,children:["\u2713 Done \xB7 tx ",e.onChainTxHash]}):jsxRuntime.jsxs("div",{style:t,children:["\u2715 [",e.stage,"] ",e.error,e.titleTransactionID?` \xB7 already debited (tx ${e.titleTransactionID}) \u2014 retry/confirm, don't re-request`:""]})}var Wn,xn,U,Me,An,we,Fe,wt=w(()=>{We();ue();ge();Wn={pointerEvents:"auto",background:"#04276bf5",border:"1px solid #1e59c8",borderRadius:12,padding:16,color:"#fff",width:320,boxSizing:"border-box",fontFamily:"system-ui, sans-serif",display:"flex",flexDirection:"column",gap:10,maxHeight:"80vh",overflow:"auto"},xn={fontWeight:700,fontSize:16},U={fontSize:12,opacity:.7},Me={background:"#052e7e",border:"1px solid #1e59c8",borderRadius:8,color:"#fff",padding:"8px 10px",width:"100%",boxSizing:"border-box"},An={background:"#0d66fe",color:"#fff",border:"none",borderRadius:8,padding:"9px 14px",fontWeight:700,cursor:"pointer"},we={background:"#1e59c8",color:"#fff",border:"none",borderRadius:8,padding:"7px 12px",fontWeight:600,cursor:"pointer"},Fe={display:"flex",gap:8};});var He={};$e(He,{DEFAULT_EVM_CHAINS:()=>Pe,IDosGamesWalletProvider:()=>te,WalletLogin:()=>mt,WalletLoginButton:()=>Le,WalletPanel:()=>yt,arbitrum:()=>exports.arbitrum,base:()=>exports.base,bsc:()=>exports.bsc,chainById:()=>ke,createEvmWalletConfig:()=>pe,idosChains:()=>exports.idosChains,mainnet:()=>exports.mainnet,optimism:()=>exports.optimism,polygon:()=>exports.polygon,polygonAmoy:()=>exports.polygonAmoy,sepolia:()=>exports.sepolia,useEvmBridge:()=>fe,useEvmBridgeClients:()=>ie});var Ke=w(()=>{We();X();ue();ge();ft();wt();});function ht(e){let{walletConnectProjectId:t,appName:n,appUrl:o,appIcon:i,wallets:r}=e,l=e.networks??[exports.solanaMainnet],s=o??(typeof window<"u"?window.location.origin:""),a={name:n??"iDosGames",description:n??"iDosGames game",url:s,icons:i?[i]:[]},d=new appkitAdapterSolana.SolanaAdapter(r?{wallets:r}:{});return de(react$1.createAppKit({adapters:[d],networks:l,projectId:t,metadata:a,features:{analytics:false,email:false,socials:false}})),d}var Ct=w(()=>{X();oe();});async function Ge(e){let{client:t,adapter:n,network:o,mint:i,amountRaw:r,titleID:l,category:s}=e,a=t.auth.context?.userID;if(!a)return p("deposit-onchain","Not logged in.");if(r<=0n)return p("deposit-onchain","Amount must be positive.");let d;try{d=await n.depositSpl({mint:i,amountRaw:r,userID:a,titleID:l,category:core.normalizeBlockchainCategory(s)});}catch(u){return p("deposit-onchain",A(u))}let c=await t.blockchain.depositToken(o.NetworkID??"",d);return c.ok?{ok:true,onChainTxHash:d,data:c.data}:p("report",c.error,{onChainTxHash:d})}async function Oe(e){let{client:t,adapter:n,currencyID:o,networkID:i,walletAddress:r,amount:l,category:s}=e,a=await t.blockchain.requestTokenWithdrawal(o,i,r,l,s);if(!a.ok)return p("request",a.error);let d=a.data.SolanaSignature,c=a.data.TitleTransactionID??void 0;if(!d)return p("request","Withdrawal response carried no Solana signature.",{titleTransactionID:c});let u;try{u=await n.submitWithdrawal(d);}catch(y){return p("withdraw-onchain",A(y),{titleTransactionID:c})}if(!c)return p("confirm","Missing TitleTransactionID.",{onChainTxHash:u});let m=await t.blockchain.confirmWithdrawal(c,u);return m.ok?{ok:true,onChainTxHash:u,data:a.data}:p("confirm",m.error,{onChainTxHash:u,titleTransactionID:c})}var bt=w(()=>{F();});async function le(e){let{client:t,networkID:n,walletAddress:o,signMessage:i}=e,r=await t.auth.requestWalletChallenge(o,n);if(!r.ok)return D("challenge",r.error);let l;try{let a=await i(new TextEncoder().encode(r.data.Message));l=Bn(a);}catch(a){return D("sign",A(a))}let s=await t.auth.loginWithWallet(o,n,l);return s.ok?{ok:true,data:s.data}:D("login",s.error)}function Bn(e){let t="0x";for(let n of e)t+=n.toString(16).padStart(2,"0");return t}var kt=w(()=>{F();});var Ue=w(()=>{bt();kt();});function St(e,t,n){let{address:o}=react$1.useAppKitAccount(),{walletProvider:i}=react$1.useAppKitProvider("solana"),r=o??null,l=i?.signMessage?.bind(i);return {connected:!!r,account:r,loginWithWallet:(s,a)=>{let d=a??r;return d?l?le({client:e,networkID:s,walletAddress:d,signMessage:l}):Promise.resolve(D("sign","The connected wallet does not support message signing.")):Promise.resolve(D("challenge",vt))},depositToken:s=>Ge({client:e,adapter:n,titleID:t,...s}),withdrawToken:s=>{let a=s.walletAddress??r;return a?Oe({client:e,adapter:n,...s,walletAddress:a}):Promise.resolve(p("request",vt))}}}var vt,Pt=w(()=>{Ue();F();vt="Wallet not connected.";});function On(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 Un(e,t){return new Promise((n,o)=>{let i=setTimeout(()=>o(new Error("The wallet request timed out.")),t);e.then(r=>{clearTimeout(i),n(r);},r=>{clearTimeout(i),o(r instanceof Error?r:new Error(String(r)));});})}function zn(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 xt(e){let{client:t,networkID:n,onAuthenticated:o,disabled:i,label:r,style:l,autoStart:s}=e,{address:a,isConnected:d}=react$1.useAppKitAccount(),{walletProvider:c}=react$1.useAppKitProvider("solana"),[u,m]=react.useState(false),[y,f]=react.useState(null),[b,h]=react.useState(false),[M,P]=react.useState(false),I=react.useRef(null),L=react.useRef(0),N=react.useCallback(()=>{I.current&&clearTimeout(I.current),I.current=null;},[]);react.useEffect(()=>N,[N]);let R=react.useRef(false),E=react.useCallback(async()=>{let W=++L.current,v=()=>L.current===W,z=c?.signMessage?.bind(c);if(!a||!z){f("The connected wallet cannot sign messages."),m(false);return}m(true),f(null);try{P(!0);let x=await Un(le({client:t,networkID:n,walletAddress:a,signMessage:z}),Gn);if(!v())return;if(x.ok){o();return}f(x.stage==="sign"?"Signature declined.":x.error??"Wallet sign-in failed.");}catch(x){if(!v())return;console.error("[idosgames/wallet] solana sign-in failed:",x),f(zn(x));}finally{v()&&(m(false),P(false));}},[a,c,t,n,o]),B=react.useCallback(()=>{On(c)||ee()?.open();},[c]);react.useEffect(()=>{!b||!d||!a||!c||(h(false),N(),E());},[b,d,a,c,E,N]);let k=()=>{if(M){B();return}if(f(null),R.current=true,d&&a&&c){E();return}let W=ee();if(!W){f("Wallet sign-in is not configured for this title.");return}m(true),h(true),N(),I.current=setTimeout(()=>{h(false),m(false),f("No wallet was connected.");},Kn),W.open();};return react.useEffect(()=>{!s||R.current||(R.current=true,k());},[s]),jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:k,disabled:i,style:{...qn,...i?{opacity:.6,cursor:"default"}:null,...l},children:M?"Waiting for signature \u2014 tap to open wallet":u?"Check your wallet\u2026":d?r??"Sign in with wallet":"Connect wallet"}),y&&jsxRuntime.jsx("span",{role:"alert",style:jn,children:y})]})}var Kn,Gn,qn,jn,At=w(()=>{Ue();oe();Kn=18e4,Gn=9e4;qn={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},jn={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};});var Tt={};$e(Tt,{SolanaWalletLogin:()=>xt,createSolanaWalletConfig:()=>ht,solanaDevnet:()=>exports.solanaDevnet,solanaMainnet:()=>exports.solanaMainnet,useSolanaBridge:()=>St});var Dt=w(()=>{Ct();Pt();At();X();});var Yn={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},Qn={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};function Et(e){let{loading:t,disabled:n,label:o,style:i,error:r,onClick:l}=e;return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:l,disabled:n||t,style:{...Yn,...n||t?{opacity:.6,cursor:"default"}:null,...i},children:t?"Loading wallet\u2026":o??"Sign in with wallet"}),r&&jsxRuntime.jsx("span",{role:"alert",style:Qn,children:r})]})}function Zn(e){let{chains:t,walletConnectProjectId:n,appName:o,disabled:i,label:r,style:l,...s}=e,[a,d]=react.useState(null),[c,u]=react.useState(false),[m,y]=react.useState(null),f=()=>{u(true),y(null),(async()=>{try{let b=await Promise.resolve().then(()=>(Ke(),He)),h=b.createEvmWalletConfig({chains:t,walletConnectProjectId:n,appName:o});d({mod:b,config:h});}catch(b){console.error("[idosgames/wallet] failed to load the wallet module:",b),y("Could not load the wallet. Please try again.");}finally{u(false);}})();};if(a){let{WalletLogin:b}=a.mod;return jsxRuntime.jsx(b,{...s,wagmiConfig:a.config,disabled:i,label:r,style:l,autoStart:true})}return jsxRuntime.jsx(Et,{loading:c,disabled:i,label:r,style:l,error:m,onClick:f})}function Jn(e){let{walletConnectProjectId:t,appName:n,disabled:o,label:i,style:r,...l}=e,[s,a]=react.useState(null),[d,c]=react.useState(false),[u,m]=react.useState(null),y=()=>{c(true),m(null),(async()=>{try{let f=await Promise.resolve().then(()=>(Dt(),Tt));t&&f.createSolanaWalletConfig({walletConnectProjectId:t,appName:n}),a(f);}catch(f){console.error("[idosgames/wallet] failed to load the wallet module:",f),m("Could not load the wallet. Please try again.");}finally{c(false);}})();};if(s){let{SolanaWalletLogin:f}=s;return jsxRuntime.jsx(f,{...l,disabled:o,label:i,style:r,autoStart:true})}return jsxRuntime.jsx(Et,{loading:d,disabled:o,label:i,style:r,error:u,onClick:y})}var Xn={pointerEvents:"auto",background:"#04276bf5",border:"1px solid #1e59c8",borderRadius:12,padding:16,color:"#fff",width:320,boxSizing:"border-box",fontFamily:"system-ui, sans-serif",fontSize:13};function eo(e){let{onClose:t,style:n}=e,[o,i]=react.useState(null),[r,l]=react.useState(null);return react.useEffect(()=>{let s=true;return (async()=>{try{let a=await Promise.resolve().then(()=>(Ke(),He));s&&i(a);}catch(a){console.error("[idosgames/wallet] failed to load the wallet panel:",a),s&&l("Could not load the wallet.");}})(),()=>{s=false;}},[]),o?jsxRuntime.jsx(o.WalletPanel,{...e}):jsxRuntime.jsxs("div",{style:{...Xn,...n},children:[r??"Loading wallet\u2026",t&&jsxRuntime.jsx("button",{type:"button",onClick:t,style:{background:"#1e59c8",color:"#fff",border:"none",borderRadius:8,padding:"7px 12px",fontWeight:600,cursor:"pointer",marginLeft:10},children:"\u2715"})]})}X();
2
- exports.LazySolanaWalletLogin=Jn;exports.LazyWalletLogin=Zn;exports.LazyWalletPanel=eo;exports.chainById=ke;
1
+ 'use strict';var 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'),viem=require('viem'),core=require('@idosgames/core'),actions=require('wagmi/actions'),appkitAdapterSolana=require('@reown/appkit-adapter-solana');var Ht=Object.defineProperty;var w=(t,e)=>()=>(t&&(e=t(t=0)),e);var $e=(t,e)=>{for(var n in e)Ht(t,n,{get:e[n],enumerable:true});};function ke(t){return Object.values(exports.idosChains).find(e=>e.id===t)}function Ye(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 X=w(()=>{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 de(t){Qe=t;}function ee(){return Qe}var Qe,oe=w(()=>{Qe=null;});function pe(t){let{chains:e=Pe,walletConnectProjectId:n,appName:o,appUrl:i,appIcon:r,transports:l,connectors:s}=t,a=n??"__extension_only__";if(!s){let f=Se.get(a);if(f)return f}let d={};for(let f of e)d[f.id]=l?.[f.id]??wagmi.http();let c=i??(typeof window<"u"?window.location.origin:""),u={name:o??"iDosGames",description:o??"iDosGames game",url:c,icons:r?[r]:[]};if(n&&!s){let f=e.map(Ye),b=new appkitAdapterWagmi.WagmiAdapter({networks:f,projectId:n,transports:d});return de(react$1.createAppKit({adapters:[b],networks:f,projectId:n,metadata:u,features:{analytics:false,email:false,socials:false}})),Se.set(a,b.wagmiConfig),b.wagmiConfig}let m=s??[connectors.injected(),connectors.coinbaseWallet({appName:o??"iDosGames"})],y=wagmi.createConfig({chains:e,connectors:m,transports:d});return s||Se.set(a,y),y}var Pe,Se,We=w(()=>{X();oe();Pe=[exports.mainnet,exports.bsc,exports.polygon,exports.base,exports.arbitrum,exports.optimism,exports.sepolia,exports.polygonAmoy],Se=new Map;});function te(t){let{wagmiConfig:e,queryClient:n,children:o}=t,[i]=react.useState(()=>n??new reactQuery.QueryClient);return jsxRuntime.jsx(wagmi.WagmiProvider,{config:e,children:jsxRuntime.jsx(reactQuery.QueryClientProvider,{client:i,children:o})})}var ue=w(()=>{});var me,Je,xe,Xe,Ae=w(()=>{me=[{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:[]}],Je=[{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:[]}],xe=[{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"}]}],Xe=[{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 et(t,e,n){return viem.encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[t,e,core.normalizeBlockchainCategory(n)])}var tt=w(()=>{});async function O(t,e){let{walletClient:n,publicClient:o,account:i}=t,r=await n.writeContract({address:e.address,abi:e.abi,functionName:e.functionName,args:e.args,account:i,chain:n.chain,value:e.value});if((await o.waitForTransactionReceipt({hash:r})).status==="reverted")throw new Error(`On-chain transaction reverted (${r}).`);return r}var Te=w(()=>{});function A(t){return t instanceof viem.BaseError?t.shortMessage:t instanceof Error?t.message:String(t)}function p(t,e,n){return {ok:false,stage:t,error:e,...n}}function D(t,e){return {ok:false,stage:t,error:e}}var F=w(()=>{});function nt(t){let e=t.RewardPoolAddress;return e||null}async function ot(t,e,n,o){return await t.publicClient.readContract({address:e,abi:xe,functionName:"allowance",args:[t.account,n]})>=o?null:O(t,{address:e,abi:xe,functionName:"approve",args:[n,o]})}async function De(t){let{client:e,clients:n,network:o,tokenAddress:i,amount:r,titleID:l,category:s}=t,a=e.auth.context?.userID;if(!a)return p("approve","Not logged in.");let d=nt(o);if(!d)return p("approve","Network has no RewardPoolAddress.");if(r<=0n)return p("approve","Amount must be positive.");try{await ot(n,i,d,r);}catch(m){return p("approve",A(m))}let c;try{c=await O(n,{address:d,abi:me,functionName:"depositERC20",args:[i,r,a,l,s??""]});}catch(m){return p("deposit-onchain",A(m))}let u=await e.blockchain.depositToken(o.NetworkID??"",c);return u.ok?{ok:true,onChainTxHash:c,data:u.data}:p("report",u.error,{onChainTxHash:c})}async function Ee(t){let{client:e,clients:n,network:o,nftContractAddress:i,tokenId:r,amount:l,titleID:s,category:a}=t,d=e.auth.context?.userID;if(!d)return p("deposit-onchain","Not logged in.");let c=nt(o);if(!c)return p("deposit-onchain","Network has no RewardPoolAddress.");if(l<=0n)return p("deposit-onchain","Amount must be positive.");let u=et(d,s,a),m;try{m=await O(n,{address:i,abi:Xe,functionName:"safeTransferFrom",args:[n.account,c,r,l,u]});}catch(f){return p("deposit-onchain",A(f))}let y=await e.blockchain.depositNFT(o.NetworkID??"",m);return y.ok?{ok:true,onChainTxHash:m,data:y.data}:p("report",y.error,{onChainTxHash:m})}var rt=w(()=>{Ae();tt();Te();F();});function at(t){return (t.Splits??[]).map(e=>({to:e.To,amount:BigInt(e.Amount??"0")}))}async function it(t,e){return O(t,{address:e.ContractAddress,abi:me,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 st(t,e){return O(t,{address:e.ContractAddress,abi:Je,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 Ie(t){let{client:e,clients:n,currencyID:o,networkID:i,walletAddress:r,amount:l,category:s}=t,a=await e.blockchain.requestTokenWithdrawal(o,i,r,l,s);if(!a.ok)return p("request",a.error);let d=a.data.EvmSignature,c=a.data.TitleTransactionID??void 0;if(!d)return p("request","Withdrawal response carried no EVM signature.",{titleTransactionID:c});let u;try{u=await it(n,d);}catch(y){return p("withdraw-onchain",A(y),{titleTransactionID:c})}let m=await lt(e,c,u);return m.ok?{ok:true,onChainTxHash:u,data:a.data}:m}async function Ne(t){let{client:e,clients:n,itemID:o,networkID:i,walletAddress:r,amount:l,category:s}=t,a=await e.blockchain.requestNFTWithdrawal(o,i,r,l,s);if(!a.ok)return p("request",a.error);let d=a.data.EvmSignature,c=a.data.TitleTransactionID??void 0;if(!d)return p("request","Withdrawal response carried no EVM signature.",{titleTransactionID:c});let u;try{u=await st(n,d);}catch(y){return p("withdraw-onchain",A(y),{titleTransactionID:c})}let m=await lt(e,c,u);return m.ok?{ok:true,onChainTxHash:u,data:a.data}:m}async function lt(t,e,n){if(!e)return p("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let o=await t.blockchain.confirmWithdrawal(e,n);return o.ok?{ok:true,onChainTxHash:n,data:o.data}:p("confirm",o.error,{onChainTxHash:n,titleTransactionID:e})}var ct=w(()=>{Ae();Te();F();});async function re(t){let{client:e,clients:n,networkID:o}=t,i=t.walletAddress??n.account,r=await e.auth.requestWalletChallenge(i,o);if(!r.ok)return D("challenge",r.error);let l;try{l=await n.walletClient.signMessage({account:n.account,message:r.data.Message});}catch(a){return D("sign",A(a))}let s=await e.auth.loginWithWallet(i,o,l);return s.ok?{ok:true,data:s.data}:D("login",s.error)}var dt=w(()=>{F();});var Re=w(()=>{rt();ct();dt();});function ie(){let{address:t}=wagmi.useAccount(),e=wagmi.usePublicClient(),{data:n}=wagmi.useWalletClient();return !t||!e||!n?null:{account:t,publicClient:e,walletClient:n}}function fe(t,e){let n=ie();return {connected:!!n,account:n?.account??null,loginWithWallet:(o,i)=>n?re({client:t,clients:n,networkID:o,walletAddress:i}):Promise.resolve(D("challenge",ae)),depositToken:o=>n?De({client:t,clients:n,titleID:e,...o}):Promise.resolve(p("approve",ae)),depositNft:o=>n?Ee({client:t,clients:n,titleID:e,...o}):Promise.resolve(p("deposit-onchain",ae)),withdrawToken:o=>n?Ie({client:t,clients:n,...o}):Promise.resolve(p("withdraw-onchain",ae)),withdrawNft:o=>n?Ne({client:t,clients:n,...o}):Promise.resolve(p("withdraw-onchain",ae))}}var ae,ge=w(()=>{Re();F();ae="Wallet not connected.";});function ft(t){let{wagmiConfig:e,...n}=t;return jsxRuntime.jsx(te,{wagmiConfig:e,children:jsxRuntime.jsx(Le,{...n})})}function ln(t){return t instanceof Error&&(t.name==="ConnectorAlreadyConnectedError"||t.message.includes("already connected"))}function cn(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 dn(t,e=18e4){return actions.getAccount(t).isConnected?Promise.resolve(true):new Promise(n=>{let o=false,i=s=>{o||(o=true,r(),clearTimeout(l),n(s));},r=actions.watchAccount(t,{onChange:s=>{s.isConnected&&i(true);}}),l=setTimeout(()=>i(false),e);})}function pn(t,e=8e3){let n=o=>o==="reconnecting"||o==="connecting";return n(actions.getAccount(t).status)?new Promise(o=>{let i=false,r=()=>{i||(i=true,l(),clearTimeout(s),o());},l=actions.watchAccount(t,{onChange:a=>{n(a.status)||r();}}),s=setTimeout(r,e);}):Promise.resolve()}function un(t){let e=i=>t.find(r=>r.id===i||r.type===i),n=e("injected"),o=typeof window<"u"&&window.ethereum!=null;return n&&o?n:e("walletConnect")??n??t[0]}async function fn(t){try{let o=(await actions.getAccount(t).connector?.getProvider?.())?.session?.peer?.metadata?.redirect,i=o?.native||o?.universal;return !i||typeof window>"u"?!1:(window.location.href=i,!0)}catch{return false}}function gn(t,e){return new Promise((n,o)=>{let i=setTimeout(()=>o(new Error("The wallet request timed out.")),e);t.then(r=>{clearTimeout(i),n(r);},r=>{clearTimeout(i),o(r instanceof Error?r:new Error(String(r)));});})}function Le(t){let{client:e,networkID:n,onAuthenticated:o,disabled:i,label:r,style:l,autoStart:s}=t,a=wagmi.useConfig(),{isConnected:d}=wagmi.useAccount(),{connectAsync:c,connectors:u}=wagmi.useConnect(),m=ie(),[y,f]=react.useState(false),[b,h]=react.useState(null),[M,P]=react.useState(false),I=react.useRef(0),L=react.useRef(false),N=async()=>{let E=++I.current,B=()=>I.current===E;f(true),h(null);try{if(await pn(a),!B())return;if(!actions.getAccount(a).isConnected){let v=ee();if(v){if(await v.open(),!await dn(a)){h("No wallet was connected.");return}}else {let z=un(u);if(!z){h("No wallet connector is configured.");return}try{await c({connector:z});}catch(x){if(!ln(x))throw x}}}let k=m??await ut(a);if(!k&&actions.getAccount(a).isConnected&&(await new Promise(v=>setTimeout(v,300)),k=await ut(a),!B()))return;if(!k){h("Wallet client is not available.");return}P(!0);let W=await gn(re({client:e,clients:k,networkID:n}),mn);if(!B())return;if(W.ok){o();return}h(W.stage==="sign"?"Signature declined.":W.error??"Wallet sign-in failed.");}catch(k){if(!B())return;console.error("[idosgames/wallet] wallet sign-in failed:",k),h(cn(k));}finally{B()&&(f(false),P(false));}};react.useEffect(()=>{!s||L.current||(L.current=true,N());},[s]);let R=async()=>{await fn(a)||await ee()?.open();};return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:()=>{M?R():N();},disabled:i,style:{...yn,...i?{opacity:.6,cursor:"default"}:null,...l},children:M?"Waiting for signature \u2014 tap to open wallet":y?"Check your wallet\u2026":d?r??"Sign in with wallet":"Connect wallet"}),b&&jsxRuntime.jsx("span",{role:"alert",style:wn,children:b})]})}var mn,yn,wn,gt=w(()=>{oe();Re();ue();ge();mn=9e4;yn={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},wn={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};});function wt(t){let{client:e,walletConnectProjectId:n,appName:o,onClose:i,style:r}=t,[l,s]=react.useState(n??"");react.useEffect(()=>{if(n)return;let d=true;return (async()=>{let c=await e.blockchain.getDefinitions();if(!d||!c.ok)return;let u=c.data.Blockchain?.WalletLogin?.WalletConnectProjectId;u&&s(u);})(),()=>{d=false;}},[e,n]);let a=react.useMemo(()=>pe({walletConnectProjectId:l||void 0,appName:o}),[l,o]);return jsxRuntime.jsx(te,{wagmiConfig:a,children:jsxRuntime.jsx(Dn,{client:e,appName:o,onClose:i,style:r})})}function Dn({client:t,onClose:e,style:n}){let o=fe(t,t.titleID),{address:i,isConnected:r,chainId:l}=wagmi.useAccount(),{connect:s,connectors:a}=wagmi.useConnect(),{disconnect:d}=wagmi.useDisconnect(),{switchChainAsync:c}=wagmi.useSwitchChain(),[,u]=react.useReducer(g=>g+1,0),[m,y]=react.useState({}),[f,b]=react.useState({}),[h,M]=react.useState(""),[P,I]=react.useState(""),[L,N]=react.useState(""),[R,E]=react.useState(false),[B,k]=react.useState(null);react.useEffect(()=>{let g=true;return (async()=>{let S=await t.blockchain.getDefinitions();if(await t.blockchain.getUserState(),!g||!S.ok)return;let q=S.data.Blockchain?.Networks??{},be={};for(let[Ft,Ve]of Object.entries(q))Ve.Type==="EVM"&&(be[Ft]=Ve);y(be),b(S.data.CryptoCurrencies??{});let Mt=Object.keys(be)[0]??"";M(Mt);})(),()=>{g=false;}},[t]),react.useEffect(()=>t.on("user:anyUpdated",u),[t]);let W=react.useMemo(()=>Object.entries(f).filter(([,g])=>g.Networks?.some(S=>S.NetworkID===h&&!!S.ContractAddress)),[f,h]);react.useEffect(()=>{let g=W[0]?.[0]??"";I(S=>W.some(([q])=>q===S)?S:g);},[W]);let v=h?m[h]:void 0,x=(P?f[P]:void 0)?.Networks?.find(g=>g.NetworkID===h),Rt=P?t.data.user.getCryptoCurrencyAmount(P):"0";async function _e(){if(!v?.ChainID||l===v.ChainID)return true;try{return await c({chainId:v.ChainID}),!0}catch{return k({ok:false,stage:"approve",error:`Switch your wallet to chain ${v.ChainID} to continue.`}),false}}async function Bt(){if(!(!v||!x?.ContractAddress)){if(E(true),k(null),await _e()){let g=x.Decimals??18,S;try{S=viem.parseUnits(L||"0",g);}catch{k({ok:false,stage:"approve",error:"Invalid amount."}),E(false);return}let q=await o.depositToken({network:v,tokenAddress:x.ContractAddress,amount:S});k(q),q.ok&&await t.blockchain.getUserState();}E(false);}}async function Lt(){if(!(!v||!o.account)){if(E(true),k(null),await _e()){let g=await o.withdrawToken({currencyID:P,networkID:h,walletAddress:o.account,amount:L||"0"});k(g),g.ok&&await t.blockchain.getUserState();}E(false);}}return jsxRuntime.jsxs("div",{style:{...xn,...n},children:[jsxRuntime.jsxs("div",{style:{...Fe,justifyContent:"space-between"},children:[jsxRuntime.jsx("span",{style:An,children:"Crypto wallet"}),e&&jsxRuntime.jsx("button",{type:"button",style:we,onClick:e,children:"\u2715"})]}),r?jsxRuntime.jsxs("div",{style:Fe,children:[jsxRuntime.jsxs("span",{style:{...U,flex:1,alignSelf:"center"},children:[i?.slice(0,6),"\u2026",i?.slice(-4)]}),jsxRuntime.jsx("button",{type:"button",style:we,onClick:()=>d(),children:"Disconnect"})]}):jsxRuntime.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6},children:[jsxRuntime.jsx("span",{style:U,children:"Connect a browser or mobile wallet"}),a.map(g=>jsxRuntime.jsx("button",{type:"button",style:we,onClick:()=>s({connector:g}),children:g.name},g.uid))]}),Object.keys(m).length===0?jsxRuntime.jsx("span",{style:U,children:"No EVM networks configured for this title."}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:U,children:"Network"}),jsxRuntime.jsx("select",{style:Me,value:h,onChange:g=>M(g.target.value),children:Object.entries(m).map(([g,S])=>jsxRuntime.jsx("option",{value:g,children:S.DisplayName??g},g))})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:U,children:"Token"}),jsxRuntime.jsxs("select",{style:Me,value:P,onChange:g=>I(g.target.value),children:[W.length===0&&jsxRuntime.jsx("option",{value:"",children:"\u2014 no depositable tokens \u2014"}),W.map(([g,S])=>jsxRuntime.jsx("option",{value:g,children:S.DisplayName??g},g))]})]}),jsxRuntime.jsxs("div",{style:U,children:["In-game balance: ",jsxRuntime.jsx("b",{children:Rt})," ",P]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:U,children:"Amount"}),jsxRuntime.jsx("input",{style:Me,inputMode:"decimal",placeholder:"0.0",value:L,onChange:g=>N(g.target.value)})]}),jsxRuntime.jsxs("div",{style:Fe,children:[jsxRuntime.jsx("button",{type:"button",style:{...Tn,flex:1,opacity:R?.6:1},disabled:R||!r||!x?.ContractAddress,onClick:()=>{Bt();},children:"Deposit"}),jsxRuntime.jsx("button",{type:"button",style:{...we,flex:1,opacity:R?.6:1},disabled:R||!r||!P,onClick:()=>{Lt();},children:"Withdraw"})]})]}),B&&jsxRuntime.jsx(En,{result:B})]})}function En({result:t}){let e={fontSize:12,borderRadius:8,padding:"8px 10px",background:t.ok?"#1e3a2a":"#3a1e28",color:t.ok?"#8ef0b0":"#f2a0b4",wordBreak:"break-all"};return t.ok?jsxRuntime.jsxs("div",{style:e,children:["\u2713 Done \xB7 tx ",t.onChainTxHash]}):jsxRuntime.jsxs("div",{style:e,children:["\u2715 [",t.stage,"] ",t.error,t.titleTransactionID?` \xB7 already debited (tx ${t.titleTransactionID}) \u2014 retry/confirm, don't re-request`:""]})}var xn,An,U,Me,Tn,we,Fe,ht=w(()=>{We();ue();ge();xn={pointerEvents:"auto",background:"#04276bf5",border:"1px solid #1e59c8",borderRadius:12,padding:16,color:"#fff",width:320,boxSizing:"border-box",fontFamily:"system-ui, sans-serif",display:"flex",flexDirection:"column",gap:10,maxHeight:"80vh",overflow:"auto"},An={fontWeight:700,fontSize:16},U={fontSize:12,opacity:.7},Me={background:"#052e7e",border:"1px solid #1e59c8",borderRadius:8,color:"#fff",padding:"8px 10px",width:"100%",boxSizing:"border-box"},Tn={background:"#0d66fe",color:"#fff",border:"none",borderRadius:8,padding:"9px 14px",fontWeight:700,cursor:"pointer"},we={background:"#1e59c8",color:"#fff",border:"none",borderRadius:8,padding:"7px 12px",fontWeight:600,cursor:"pointer"},Fe={display:"flex",gap:8};});var He={};$e(He,{DEFAULT_EVM_CHAINS:()=>Pe,IDosGamesWalletProvider:()=>te,WalletLogin:()=>ft,WalletLoginButton:()=>Le,WalletPanel:()=>wt,arbitrum:()=>exports.arbitrum,base:()=>exports.base,bsc:()=>exports.bsc,chainById:()=>ke,createEvmWalletConfig:()=>pe,idosChains:()=>exports.idosChains,mainnet:()=>exports.mainnet,optimism:()=>exports.optimism,polygon:()=>exports.polygon,polygonAmoy:()=>exports.polygonAmoy,sepolia:()=>exports.sepolia,useEvmBridge:()=>fe,useEvmBridgeClients:()=>ie});var Ke=w(()=>{We();X();ue();ge();gt();ht();});function Ct(t){let{walletConnectProjectId:e,appName:n,appUrl:o,appIcon:i,wallets:r}=t,l=t.networks??[exports.solanaMainnet],s=o??(typeof window<"u"?window.location.origin:""),a={name:n??"iDosGames",description:n??"iDosGames game",url:s,icons:i?[i]:[]},d=new appkitAdapterSolana.SolanaAdapter(r?{wallets:r}:{});return de(react$1.createAppKit({adapters:[d],networks:l,projectId:e,metadata:a,features:{analytics:false,email:false,socials:false}})),d}var bt=w(()=>{X();oe();});async function Ge(t){let{client:e,adapter:n,network:o,mint:i,amountRaw:r,titleID:l,category:s}=t,a=e.auth.context?.userID;if(!a)return p("deposit-onchain","Not logged in.");if(r<=0n)return p("deposit-onchain","Amount must be positive.");let d;try{d=await n.depositSpl({mint:i,amountRaw:r,userID:a,titleID:l,category:core.normalizeBlockchainCategory(s)});}catch(u){return p("deposit-onchain",A(u))}let c=await e.blockchain.depositToken(o.NetworkID??"",d);return c.ok?{ok:true,onChainTxHash:d,data:c.data}:p("report",c.error,{onChainTxHash:d})}async function Oe(t){let{client:e,adapter:n,currencyID:o,networkID:i,walletAddress:r,amount:l,category:s}=t,a=await e.blockchain.requestTokenWithdrawal(o,i,r,l,s);if(!a.ok)return p("request",a.error);let d=a.data.SolanaSignature,c=a.data.TitleTransactionID??void 0;if(!d)return p("request","Withdrawal response carried no Solana signature.",{titleTransactionID:c});let u;try{u=await n.submitWithdrawal(d);}catch(y){return p("withdraw-onchain",A(y),{titleTransactionID:c})}if(!c)return p("confirm","Missing TitleTransactionID.",{onChainTxHash:u});let m=await e.blockchain.confirmWithdrawal(c,u);return m.ok?{ok:true,onChainTxHash:u,data:a.data}:p("confirm",m.error,{onChainTxHash:u,titleTransactionID:c})}var kt=w(()=>{F();});async function le(t){let{client:e,networkID:n,walletAddress:o,signMessage:i}=t,r=await e.auth.requestWalletChallenge(o,n);if(!r.ok)return D("challenge",r.error);let l;try{let a=await i(new TextEncoder().encode(r.data.Message));l=Ln(a);}catch(a){return D("sign",A(a))}let s=await e.auth.loginWithWallet(o,n,l);return s.ok?{ok:true,data:s.data}:D("login",s.error)}function Ln(t){let e="0x";for(let n of t)e+=n.toString(16).padStart(2,"0");return e}var vt=w(()=>{F();});var Ue=w(()=>{kt();vt();});function Pt(t,e,n){let{address:o}=react$1.useAppKitAccount(),{walletProvider:i}=react$1.useAppKitProvider("solana"),r=o??null,l=i?.signMessage?.bind(i);return {connected:!!r,account:r,loginWithWallet:(s,a)=>{let d=a??r;return d?l?le({client:t,networkID:s,walletAddress:d,signMessage:l}):Promise.resolve(D("sign","The connected wallet does not support message signing.")):Promise.resolve(D("challenge",St))},depositToken:s=>Ge({client:t,adapter:n,titleID:e,...s}),withdrawToken:s=>{let a=s.walletAddress??r;return a?Oe({client:t,adapter:n,...s,walletAddress:a}):Promise.resolve(p("request",St))}}}var St,Wt=w(()=>{Ue();F();St="Wallet not connected.";});function Un(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 i=setTimeout(()=>o(new Error("The wallet request timed out.")),e);t.then(r=>{clearTimeout(i),n(r);},r=>{clearTimeout(i),o(r instanceof Error?r:new Error(String(r)));});})}function qn(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 At(t){let{client:e,networkID:n,onAuthenticated:o,disabled:i,label:r,style:l,autoStart:s}=t,{address:a,isConnected:d}=react$1.useAppKitAccount(),{walletProvider:c}=react$1.useAppKitProvider("solana"),[u,m]=react.useState(false),[y,f]=react.useState(null),[b,h]=react.useState(false),[M,P]=react.useState(false),I=react.useRef(null),L=react.useRef(0),N=react.useCallback(()=>{I.current&&clearTimeout(I.current),I.current=null;},[]);react.useEffect(()=>N,[N]);let R=react.useRef(false),E=react.useCallback(async()=>{let W=++L.current,v=()=>L.current===W,z=c?.signMessage?.bind(c);if(!a||!z){f("The connected wallet cannot sign messages."),m(false);return}m(true),f(null);try{P(!0);let x=await zn(le({client:e,networkID:n,walletAddress:a,signMessage:z}),On);if(!v())return;if(x.ok){o();return}f(x.stage==="sign"?"Signature declined.":x.error??"Wallet sign-in failed.");}catch(x){if(!v())return;console.error("[idosgames/wallet] solana sign-in failed:",x),f(qn(x));}finally{v()&&(m(false),P(false));}},[a,c,e,n,o]),B=react.useCallback(()=>{Un(c)||ee()?.open();},[c]);react.useEffect(()=>{!b||!d||!a||!c||(h(false),N(),E());},[b,d,a,c,E,N]);let k=()=>{if(M){B();return}if(f(null),R.current=true,d&&a&&c){E();return}let W=ee();if(!W){f("Wallet sign-in is not configured for this title.");return}m(true),h(true),N(),I.current=setTimeout(()=>{h(false),m(false),f("No wallet was connected.");},Gn),W.open();};return react.useEffect(()=>{!s||R.current||(R.current=true,k());},[s]),jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:k,disabled:i,style:{...jn,...i?{opacity:.6,cursor:"default"}:null,...l},children:M?"Waiting for signature \u2014 tap to open wallet":u?"Check your wallet\u2026":d?r??"Sign in with wallet":"Connect wallet"}),y&&jsxRuntime.jsx("span",{role:"alert",style:_n,children:y})]})}var Gn,On,jn,_n,Tt=w(()=>{Ue();oe();Gn=18e4,On=9e4;jn={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},_n={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};});var Dt={};$e(Dt,{SolanaWalletLogin:()=>At,createSolanaWalletConfig:()=>Ct,solanaDevnet:()=>exports.solanaDevnet,solanaMainnet:()=>exports.solanaMainnet,useSolanaBridge:()=>Pt});var Et=w(()=>{bt();Wt();Tt();X();});var Qn={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},Zn={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};function It(t){let{loading:e,disabled:n,label:o,style:i,error:r,onClick:l}=t;return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:l,disabled:n||e,style:{...Qn,...n||e?{opacity:.6,cursor:"default"}:null,...i},children:e?"Loading wallet\u2026":o??"Sign in with wallet"}),r&&jsxRuntime.jsx("span",{role:"alert",style:Zn,children:r})]})}function Jn(t){let{chains:e,walletConnectProjectId:n,appName:o,disabled:i,label:r,style:l,...s}=t,[a,d]=react.useState(null),[c,u]=react.useState(false),[m,y]=react.useState(null),f=()=>{u(true),y(null),(async()=>{try{let b=await Promise.resolve().then(()=>(Ke(),He)),h=b.createEvmWalletConfig({chains:e,walletConnectProjectId:n,appName:o});d({mod:b,config:h});}catch(b){console.error("[idosgames/wallet] failed to load the wallet module:",b),y("Could not load the wallet. Please try again.");}finally{u(false);}})();};if(a){let{WalletLogin:b}=a.mod;return jsxRuntime.jsx(b,{...s,wagmiConfig:a.config,disabled:i,label:r,style:l,autoStart:true})}return jsxRuntime.jsx(It,{loading:c,disabled:i,label:r,style:l,error:m,onClick:f})}function Xn(t){let{walletConnectProjectId:e,appName:n,disabled:o,label:i,style:r,...l}=t,[s,a]=react.useState(null),[d,c]=react.useState(false),[u,m]=react.useState(null),y=()=>{c(true),m(null),(async()=>{try{let f=await Promise.resolve().then(()=>(Et(),Dt));e&&f.createSolanaWalletConfig({walletConnectProjectId:e,appName:n}),a(f);}catch(f){console.error("[idosgames/wallet] failed to load the wallet module:",f),m("Could not load the wallet. Please try again.");}finally{c(false);}})();};if(s){let{SolanaWalletLogin:f}=s;return jsxRuntime.jsx(f,{...l,disabled:o,label:i,style:r,autoStart:true})}return jsxRuntime.jsx(It,{loading:d,disabled:o,label:i,style:r,error:u,onClick:y})}var eo={pointerEvents:"auto",background:"#04276bf5",border:"1px solid #1e59c8",borderRadius:12,padding:16,color:"#fff",width:320,boxSizing:"border-box",fontFamily:"system-ui, sans-serif",fontSize:13};function to(t){let{onClose:e,style:n}=t,[o,i]=react.useState(null),[r,l]=react.useState(null);return react.useEffect(()=>{let s=true;return (async()=>{try{let a=await Promise.resolve().then(()=>(Ke(),He));s&&i(a);}catch(a){console.error("[idosgames/wallet] failed to load the wallet panel:",a),s&&l("Could not load the wallet.");}})(),()=>{s=false;}},[]),o?jsxRuntime.jsx(o.WalletPanel,{...t}):jsxRuntime.jsxs("div",{style:{...eo,...n},children:[r??"Loading wallet\u2026",e&&jsxRuntime.jsx("button",{type:"button",onClick:e,style:{background:"#1e59c8",color:"#fff",border:"none",borderRadius:8,padding:"7px 12px",fontWeight:600,cursor:"pointer",marginLeft:10},children:"\u2715"})]})}X();
2
+ exports.LazySolanaWalletLogin=Xn;exports.LazyWalletLogin=Jn;exports.LazyWalletPanel=to;exports.chainById=ke;
@@ -3,7 +3,7 @@ import { BaseWalletAdapter } from '@solana/wallet-adapter-base';
3
3
  import { a as AppKitSolanaNetwork } from '../chains-B_P3u8_S.cjs';
4
4
  export { g as solanaDevnet, h as solanaMainnet } from '../chains-B_P3u8_S.cjs';
5
5
  import { ClientState, DepositTokenResponse, TokenWithdrawalResponse, IDosGamesClient } from '@idosgames/core';
6
- import { D as DepositTokenSolanaParams, W as WithdrawTokenSolanaParams, S as SolanaProgramAdapter } from '../bridge-8F45t4nD.cjs';
6
+ import { D as DepositTokenSolanaParams, W as WithdrawTokenSolanaParams, S as SolanaProgramAdapter } from '../bridge-CoVqGUFt.cjs';
7
7
  import { W as WalletLoginResult, a as BridgeResult } from '../types-C11zAA05.cjs';
8
8
  import { CSSProperties, ReactNode } from 'react';
9
9
  import 'viem';
@@ -3,7 +3,7 @@ import { BaseWalletAdapter } from '@solana/wallet-adapter-base';
3
3
  import { a as AppKitSolanaNetwork } from '../chains-B_P3u8_S.js';
4
4
  export { g as solanaDevnet, h as solanaMainnet } from '../chains-B_P3u8_S.js';
5
5
  import { ClientState, DepositTokenResponse, TokenWithdrawalResponse, IDosGamesClient } from '@idosgames/core';
6
- import { D as DepositTokenSolanaParams, W as WithdrawTokenSolanaParams, S as SolanaProgramAdapter } from '../bridge-BJnRn3NX.js';
6
+ import { D as DepositTokenSolanaParams, W as WithdrawTokenSolanaParams, S as SolanaProgramAdapter } from '../bridge-nELtKkuz.js';
7
7
  import { W as WalletLoginResult, a as BridgeResult } from '../types-C11zAA05.js';
8
8
  import { CSSProperties, ReactNode } from 'react';
9
9
  import 'viem';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@idosgames/wallet",
3
- "version": "0.1.13",
3
+ "version": "0.1.15",
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",
@@ -70,7 +70,7 @@
70
70
  },
71
71
  "//": "@idosgames/core не '*': опубликованный пакет обязан назвать диапазон, иначе установка wallet притянет любую версию core, включая будущую ломающую. На 0.x '^' даёт >=0.1.0 <0.2.0 — ровно ту зону, где core обещает совместимость (см. RELEASING.md). Поднимать при мажорном/минорном бампе core.",
72
72
  "dependencies": {
73
- "@idosgames/core": "^0.2.0",
73
+ "@idosgames/core": "^0.4.0",
74
74
  "viem": "^2.55.2"
75
75
  },
76
76
  "peerDependencies": {
@@ -1 +0,0 @@
1
- import {b as b$1,a,c}from'./chunk-K62NMX3A.js';import {encodeAbiParameters}from'viem';import {normalizeBlockchainCategory}from'@idosgames/core';var w=[{type:"function",name:"depositERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"amount",type:"uint256"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"withdrawERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"amount",type:"uint256"},{name:"burnAmount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC1155",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],k=[{type:"function",name:"withdrawERC1155Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],b=[{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"}]}],D=[{type:"function",name:"safeTransferFrom",stateMutability:"nonpayable",inputs:[{name:"from",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]},{type:"function",name:"isApprovedForAll",stateMutability:"view",inputs:[{name:"account",type:"address"},{name:"operator",type:"address"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"setApprovalForAll",stateMutability:"nonpayable",inputs:[{name:"operator",type:"address"},{name:"approved",type:"bool"}],outputs:[]},{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"},{name:"id",type:"uint256"}],outputs:[{name:"",type:"uint256"}]}],v=[{type:"function",name:"safeTransferFrom",stateMutability:"nonpayable",inputs:[{name:"from",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]}];function A(e,t,n){return encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[e,t,normalizeBlockchainCategory(n)])}async function f(e,t){let{walletClient:n,publicClient:r,account:m}=e,o=await n.writeContract({address:t.address,abi:t.abi,functionName:t.functionName,args:t.args,account:m,chain:n.chain,value:t.value});if((await r.waitForTransactionReceipt({hash:o})).status==="reverted")throw new Error(`On-chain transaction reverted (${o}).`);return o}function I(e){let t=e.RewardPoolAddress;return t||null}async function C(e,t,n,r){return await e.publicClient.readContract({address:t,abi:b,functionName:"allowance",args:[e.account,n]})>=r?null:f(e,{address:t,abi:b,functionName:"approve",args:[n,r]})}async function P(e){let{client:t,clients:n,network:r,tokenAddress:m,amount:o,titleID:u,category:l}=e,i=t.auth.context?.userID;if(!i)return b$1("approve","Not logged in.");let p=I(r);if(!p)return b$1("approve","Network has no RewardPoolAddress.");if(o<=0n)return b$1("approve","Amount must be positive.");try{await C(n,m,p,o);}catch(d){return b$1("approve",a(d))}let c;try{c=await f(n,{address:p,abi:w,functionName:"depositERC20",args:[m,o,i,u,l??""]});}catch(d){return b$1("deposit-onchain",a(d))}let s=await t.blockchain.depositToken(r.NetworkID??"",c);return s.ok?{ok:true,onChainTxHash:c,data:s.data}:b$1("report",s.error,{onChainTxHash:c})}async function R(e){let{client:t,clients:n,network:r,nftContractAddress:m,tokenId:o,amount:u,titleID:l,category:i}=e,p=t.auth.context?.userID;if(!p)return b$1("deposit-onchain","Not logged in.");let c=I(r);if(!c)return b$1("deposit-onchain","Network has no RewardPoolAddress.");if(u<=0n)return b$1("deposit-onchain","Amount must be positive.");let s=A(p,l,i),d;try{d=await f(n,{address:m,abi:D,functionName:"safeTransferFrom",args:[n.account,c,o,u,s]});}catch(T){return b$1("deposit-onchain",a(T))}let g=await t.blockchain.depositNFT(r.NetworkID??"",d);return g.ok?{ok:true,onChainTxHash:d,data:g.data}:b$1("report",g.error,{onChainTxHash:d})}async function H(e){let{client:t,clients:n,network:r,nftContractAddress:m,tokenId:o,titleID:u,category:l}=e,i=t.auth.context?.userID;if(!i)return b$1("deposit-onchain","Not logged in.");let p=I(r);if(!p)return b$1("deposit-onchain","Network has no RewardPoolAddress.");let c=A(i,u,l),s;try{s=await f(n,{address:m,abi:v,functionName:"safeTransferFrom",args:[n.account,p,o,c]});}catch(g){return b$1("deposit-onchain",a(g))}let d=await t.blockchain.depositNFT(r.NetworkID??"",s);return d.ok?{ok:true,onChainTxHash:s,data:d.data}:b$1("report",d.error,{onChainTxHash:s})}async function E(e,t){return f(e,{address:t.ContractAddress,abi:w,functionName:"withdrawERC20",args:[t.TokenAddress,t.WalletAddress,BigInt(t.Amount??"0"),BigInt(t.BurnAmount??"0"),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function x(e,t){return f(e,{address:t.ContractAddress,abi:k,functionName:"withdrawERC1155Mint",args:[t.TokenAddress,t.WalletAddress,BigInt(t.TokenId??"0"),BigInt(t.Amount??"0"),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function M(e,t){return f(e,{address:t.ContractAddress,abi:k,functionName:"withdrawERC721Mint",args:[t.TokenAddress,t.WalletAddress,BigInt(t.TokenId??"0"),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function F(e){let{client:t,clients:n,currencyID:r,networkID:m,walletAddress:o,amount:u,category:l}=e,i=await t.blockchain.requestTokenWithdrawal(r,m,o,u,l);if(!i.ok)return b$1("request",i.error);let p=i.data.EvmSignature,c=i.data.TitleTransactionID??void 0;if(!p)return b$1("request","Withdrawal response carried no EVM signature.",{titleTransactionID:c});let s;try{s=await E(n,p);}catch(g){return b$1("withdraw-onchain",a(g),{titleTransactionID:c})}let d=await N(t,c,s);return d.ok?{ok:true,onChainTxHash:s,data:i.data}:d}async function S(e){let{client:t,clients:n,itemID:r,networkID:m,walletAddress:o,amount:u,category:l}=e,i=await t.blockchain.requestNFTWithdrawal(r,m,o,u,l);if(!i.ok)return b$1("request",i.error);let p=i.data.EvmSignature,c=i.data.TitleTransactionID??void 0;if(!p)return b$1("request","Withdrawal response carried no EVM signature.",{titleTransactionID:c});let s;try{s=await x(n,p);}catch(g){return b$1("withdraw-onchain",a(g),{titleTransactionID:c})}let d=await N(t,c,s);return d.ok?{ok:true,onChainTxHash:s,data:i.data}:d}async function N(e,t,n){if(!t)return b$1("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let r=await e.blockchain.confirmWithdrawal(t,n);return r.ok?{ok:true,onChainTxHash:n,data:r.data}:b$1("confirm",r.error,{onChainTxHash:n,titleTransactionID:t})}async function G(e){let{client:t,clients:n,networkID:r}=e,m=e.walletAddress??n.account,o=await t.auth.requestWalletChallenge(m,r);if(!o.ok)return c("challenge",o.error);let u;try{u=await n.walletClient.signMessage({account:n.account,message:o.data.Message});}catch(i){return c("sign",a(i))}let l=await t.auth.loginWithWallet(m,r,u);return l.ok?{ok:true,data:l.data}:c("login",l.error)}export{w as a,b,D as c,v as d,A as e,f,C as g,P as h,R as i,H as j,E as k,x as l,M as m,F as n,S as o,G as p};