@idosgames/wallet 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -257,14 +257,22 @@ A game embedded in an idosgames.com iframe cannot sign a wallet transaction on
257
257
  its own — deposit/withdraw goes through the site's own panel there instead.
258
258
  `LazyWalletLogin` / `LazySolanaWalletLogin` / `LazyWalletPanel` (the
259
259
  `@idosgames/wallet/react/lazy` entry) detect this automatically and render a
260
- short "use idosgames.com" notice instead of the button/panel. Every bridge and
260
+ short "use idosgames.com" notice instead of the button/panel — but ONLY on the
261
+ platform's own page, where that panel is on the same screen. When the game is
262
+ embedded on somebody else's site through `idosgames.com/embed/{id}` (two frames
263
+ deep, `isEmbeddedOnForeignSite()`), they render nothing at all: there is no
264
+ panel next to the player, so a wallet message would only take space from the
265
+ game. Owner's decision, 2026-09-22. Every bridge and
261
266
  login flow in this package (`depositTokenEvm`, `withdrawTokenEvm`,
262
267
  `loginWithWalletEvm`, their Solana equivalents, `payWithWalletEvm`) refuses
263
268
  with `error: WALLET_USE_SITE_PANEL` if called anyway, so a game that rolls its
264
269
  own UI can check `isEmbeddedInPlatform()` up front to hide it:
265
270
 
266
271
  ```ts
267
- import { isEmbeddedInPlatform, onWalletBalanceChanged } from "@idosgames/wallet";
272
+ import {
273
+ isEmbeddedInPlatform,
274
+ onWalletBalanceChanged,
275
+ } from "@idosgames/wallet";
268
276
 
269
277
  if (isEmbeddedInPlatform()) {
270
278
  // hide your own wallet UI — the player uses the site's panel instead
@@ -0,0 +1 @@
1
+ import {e,g,b,a,h,c}from'./chunk-OZXERZ5Q.js';import {normalizeBlockchainCategory}from'@idosgames/core';async function T(i){let{client:t,adapter:n,network:g$1,mint:m,amountRaw:o,titleID:d,category:s}=i;if(e())return g("deposit-onchain");let e$1=t.auth.context?.userID;if(!e$1)return b("deposit-onchain","Not logged in.");if(o<=0n)return b("deposit-onchain","Amount must be positive.");let l;try{l=await n.depositSpl({mint:m,amountRaw:o,userID:e$1,titleID:d,category:normalizeBlockchainCategory(s)});}catch(c){return b("deposit-onchain",a(c))}let r=await t.blockchain.depositToken(g$1.NetworkID??"",l);return r.ok?{ok:true,onChainTxHash:l,data:r.data}:b("report",r.error,{onChainTxHash:l})}async function D(i){let{client:t,adapter:n,currencyID:g$1,networkID:m,walletAddress:o,amount:d,category:s}=i;if(e())return g("request");let e$1=await t.blockchain.requestTokenWithdrawal(g$1,m,o,d,s);if(!e$1.ok)return b("request",e$1.error);let l=e$1.data.SolanaSignature,r=e$1.data.TitleTransactionID??void 0;if(!l)return b("request","Withdrawal response carried no Solana signature.",{titleTransactionID:r});let c;try{c=await n.submitWithdrawal(l);}catch(S){return b("withdraw-onchain",a(S),{titleTransactionID:r})}if(!r)return b("confirm","Missing TitleTransactionID.",{onChainTxHash:c});let w=await t.blockchain.confirmWithdrawal(r,c);return w.ok?{ok:true,onChainTxHash:c,data:e$1.data}:b("confirm",w.error,{onChainTxHash:c,titleTransactionID:r})}async function W(i){let{client:t,networkID:n,walletAddress:g,signMessage:m}=i;if(e())return h("challenge");let o=await t.auth.requestWalletChallenge(g,n);if(!o.ok)return c("challenge",o.error);let d;try{let e=await m(new TextEncoder().encode(o.data.Message));d=I(e);}catch(e){return c("sign",a(e))}let s=await t.auth.loginWithWallet(g,n,d);return s.ok?{ok:true,data:s.data}:c("login",s.error)}function I(i){let t="0x";for(let n of i)t+=n.toString(16).padStart(2,"0");return t}export{T as a,D as b,W as c};
@@ -0,0 +1 @@
1
+ import {e,g,b as b$1,a,h as h$1,c}from'./chunk-OZXERZ5Q.js';import {encodeAbiParameters,parseUnits}from'viem';import {normalizeBlockchainCategory}from'@idosgames/core';var b=[{type:"function",name:"depositERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"amount",type:"uint256"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"withdrawERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"amount",type:"uint256"},{name:"burnAmount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{name:"amount",type:"uint256"}]},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC1155",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{name:"amount",type:"uint256"}]},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],C=[{type:"function",name:"withdrawERC1155Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{name:"amount",type:"uint256"}]},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],v=[{type:"function",name:"approve",stateMutability:"nonpayable",inputs:[{name:"spender",type:"address"},{name:"amount",type:"uint256"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"allowance",stateMutability:"view",inputs:[{name:"owner",type:"address"},{name:"spender",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"decimals",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint8"}]},{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]}],I=[{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"}]}],E=[{type:"function",name:"safeTransferFrom",stateMutability:"nonpayable",inputs:[{name:"from",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]}];function D(e,t,n){return encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[e,t,normalizeBlockchainCategory(n)])}async function h(e,t){let{walletClient:n,publicClient:i,account:s}=e,o=await n.writeContract({address:t.address,abi:t.abi,functionName:t.functionName,args:t.args,account:s,chain:n.chain,value:t.value});if((await i.waitForTransactionReceipt({hash:o})).status==="reverted")throw new Error(`On-chain transaction reverted (${o}).`);return o}function x(e){let t=e.RewardPoolAddress;return t||null}async function T(e,t,n,i){return await e.publicClient.readContract({address:t,abi:v,functionName:"allowance",args:[e.account,n]})>=i?null:h(e,{address:t,abi:v,functionName:"approve",args:[n,i]})}async function N(e$1){let{client:t,clients:n,network:i,tokenAddress:s,amount:o,titleID:u,category:c}=e$1;if(e())return g("approve");let r=t.auth.context?.userID;if(!r)return b$1("approve","Not logged in.");let l=x(i);if(!l)return b$1("approve","Network has no RewardPoolAddress.");if(o<=0n)return b$1("approve","Amount must be positive.");try{await T(n,s,l,o);}catch(d){return b$1("approve",a(d))}let p;try{p=await h(n,{address:l,abi:b,functionName:"depositERC20",args:[s,o,r,u,c??""]});}catch(d){return b$1("deposit-onchain",a(d))}let m=await t.blockchain.depositToken(i.NetworkID??"",p);return m.ok?{ok:true,onChainTxHash:p,data:m.data}:b$1("report",m.error,{onChainTxHash:p})}async function S(e$1){let{clients:t,poolAddress:n,tokenAddress:i,amount:s,userID:o,titleID:u,category:c}=e$1;if(e())return g("approve");if(!o)return b$1("approve","userID is required.");if(s<=0n)return b$1("approve","Amount must be positive.");try{await T(t,i,n,s);}catch(r){return b$1("approve",a(r))}try{let r=await h(t,{address:n,abi:b,functionName:"depositERC20",args:[i,s,o,u,c??""]});return {ok:!0,onChainTxHash:r,data:{txHash:r}}}catch(r){return b$1("deposit-onchain",a(r))}}async function O(e$1){let{client:t,clients:n,network:i,nftContractAddress:s,tokenId:o,amount:u,titleID:c,category:r}=e$1;if(e())return g("deposit-onchain");let l=t.auth.context?.userID;if(!l)return b$1("deposit-onchain","Not logged in.");let p=x(i);if(!p)return b$1("deposit-onchain","Network has no RewardPoolAddress.");if(u<=0n)return b$1("deposit-onchain","Amount must be positive.");let m=D(l,c,r),d;try{d=await h(n,{address:s,abi:I,functionName:"safeTransferFrom",args:[n.account,p,o,u,m]});}catch(A){return b$1("deposit-onchain",a(A))}let y=await t.blockchain.depositNFT(i.NetworkID??"",d);return y.ok?{ok:true,onChainTxHash:d,data:y.data}:b$1("report",y.error,{onChainTxHash:d})}async function q(e$1){let{client:t,clients:n,network:i,nftContractAddress:s,tokenId:o,titleID:u,category:c}=e$1;if(e())return g("deposit-onchain");let r=t.auth.context?.userID;if(!r)return b$1("deposit-onchain","Not logged in.");let l=x(i);if(!l)return b$1("deposit-onchain","Network has no RewardPoolAddress.");let p=D(r,u,c),m;try{m=await h(n,{address:s,abi:E,functionName:"safeTransferFrom",args:[n.account,l,o,p]});}catch(y){return b$1("deposit-onchain",a(y))}let d=await t.blockchain.depositNFT(i.NetworkID??"",m);return d.ok?{ok:true,onChainTxHash:m,data:d.data}:b$1("report",d.error,{onChainTxHash:m})}function P(e){return (e.Splits??[]).map(t=>({to:t.To,amount:BigInt(t.Amount??"0")}))}async function B(e,t){return h(e,{address:t.ContractAddress,abi:b,functionName:"withdrawERC20",args:[t.TokenAddress,t.WalletAddress,BigInt(t.Amount??"0"),BigInt(t.BurnAmount??"0"),P(t),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function R(e,t){return h(e,{address:t.ContractAddress,abi:C,functionName:"withdrawERC1155Mint",args:[t.TokenAddress,t.WalletAddress,BigInt(t.TokenId??"0"),BigInt(t.Amount??"0"),P(t),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function L(e,t){return h(e,{address:t.ContractAddress,abi:C,functionName:"withdrawERC721Mint",args:[t.TokenAddress,t.WalletAddress,BigInt(t.TokenId??"0"),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function U(e$1){let{client:t,clients:n,currencyID:i,networkID:s,walletAddress:o,amount:u,category:c}=e$1;if(e())return g("request");let r=await t.blockchain.requestTokenWithdrawal(i,s,o,u,c);if(!r.ok)return b$1("request",r.error);let l=r.data.EvmSignature,p=r.data.TitleTransactionID??void 0;if(!l)return b$1("request","Withdrawal response carried no EVM signature.",{titleTransactionID:p});let m;try{m=await B(n,l);}catch(y){return b$1("withdraw-onchain",a(y),{titleTransactionID:p})}let d=await H(t,p,m);return d.ok?{ok:true,onChainTxHash:m,data:r.data}:d}async function $(e$1){let{client:t,clients:n,itemID:i,networkID:s,walletAddress:o,amount:u,category:c}=e$1;if(e())return g("request");let r=await t.blockchain.requestNFTWithdrawal(i,s,o,u,c);if(!r.ok)return b$1("request",r.error);let l=r.data.EvmSignature,p=r.data.TitleTransactionID??void 0;if(!l)return b$1("request","Withdrawal response carried no EVM signature.",{titleTransactionID:p});let m;try{m=await R(n,l);}catch(y){return b$1("withdraw-onchain",a(y),{titleTransactionID:p})}let d=await H(t,p,m);return d.ok?{ok:true,onChainTxHash:m,data:r.data}:d}async function H(e,t,n){if(!t)return b$1("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let i=await e.blockchain.confirmWithdrawal(t,n);return i.ok?{ok:true,onChainTxHash:n,data:i.data}:b$1("confirm",i.error,{onChainTxHash:n,titleTransactionID:t})}async function V(e$1){let{client:t,clients:n,networkID:i}=e$1;if(e())return h$1("challenge");let s=e$1.walletAddress??n.account,o=await t.auth.requestWalletChallenge(s,i);if(!o.ok)return c("challenge",o.error);let u;try{u=await n.walletClient.signMessage({account:n.account,message:o.data.Message});}catch(r){return c("sign",a(r))}let c$1=await t.auth.loginWithWallet(s,i,u);return c$1.ok?{ok:true,data:c$1.data}:c("login",c$1.error)}async function j(e$1){let{client:t,clients:n,network:i,tokenAddress:s,decimals:o,titleID:u,shortfall:c,completePurchase:r,bufferRatio:l=0,category:p}=e$1;if(e())return g("approve");if(c.missing<=0)return b$1("approve","Nothing to deposit.");let m=c.missing*(1+Math.max(0,l)),d;try{d=parseUnits(J(m,o),o);}catch(F){return b$1("approve",a(F))}let y=await N({client:t,clients:n,network:i,tokenAddress:s,amount:d,titleID:u,category:p});if(!y.ok)return y;let A=await r();return A.ok?{ok:true,onChainTxHash:y.onChainTxHash,data:A.data}:b$1("report",A.error,{onChainTxHash:y.onChainTxHash})}function J(e,t){return e.toFixed(Math.min(t,18)).replace(/0+$/,"").replace(/\.$/,"")||"0"}export{b as a,v as b,I as c,E as d,D as e,h as f,T as g,N as h,S as i,O as j,q as k,B as l,R as m,L as n,U as o,$ as p,V as q,j as r};
@@ -0,0 +1,2 @@
1
+ import {BaseError}from'viem';function E(e){return e instanceof BaseError?e.shortMessage:e instanceof Error?e.message:String(e)}function a(e,t,n){return {ok:false,stage:e,error:t,...n}}function r(e,t){return {ok:false,stage:e,error:t}}var o="WALLET_USE_SITE_PANEL";function w(){if(typeof window>"u")return false;try{return window.self!==window.top}catch{return true}}function S(){if(typeof window>"u")return false;try{return window.parent!==window.top}catch{return true}}function k(e){return a(e,o)}function C(e){return r(e,o)}var s=["https://idosgames.com","https://www.idosgames.com"];function L(e){if(typeof window>"u")return ()=>{};let t=n=>{s.includes(n.origin)&&n.data?.type==="IDOS_WALLET_BALANCE_CHANGED"&&e();};return window.addEventListener("message",t),()=>window.removeEventListener("message",t)}var l={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"}}},c={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"}}},u={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"}}},d={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"}}},g={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"}}},h={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"}}},f={mainnet:l,bsc:p,polygon:c,base:u,arbitrum:d,optimism:m,sepolia:g,polygonAmoy:h};function B(e){return Object.values(f).find(t=>t.id===e)}function N(e){return {...e,chainNamespace:"eip155",caipNetworkId:`eip155:${e.id}`}}var T={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"},A={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"};
2
+ export{E as a,a as b,r as c,o as d,w as e,S as f,k as g,C as h,L as i,l as j,p as k,c as l,u as m,d as n,m as o,g as p,h as q,f as r,B as s,N as t,T as u,A as v};
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 w(t,e){return {ok:false,stage:t,error:e}}var D="WALLET_USE_SITE_PANEL";function y(){if(typeof window>"u")return false;try{return window.self!==window.top}catch{return true}}function h(t){return a(t,D)}function E(t){return w(t,D)}var M=["https://idosgames.com","https://www.idosgames.com"];function G(t){if(typeof window>"u")return ()=>{};let e=n=>{M.includes(n.origin)&&n.data?.type==="IDOS_WALLET_BALANCE_CHANGED"&&t();};return window.addEventListener("message",e),()=>window.removeEventListener("message",e)}var U={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"}}},q={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"}}},O={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"}}},_={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"}}},K={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"}}},$={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"}}},V={mainnet:U,bsc:q,polygon:O,base:_,arbitrum:K,optimism:Y,sepolia:$,polygonAmoy:z};function fe(t){return Object.values(V).find(e=>e.id===t)}function he(t){return {...t,chainNamespace:"eip155",caipNetworkId:`eip155:${t.id}`}}var we={id:"5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",name:"Solana",network:"solana-mainnet",nativeCurrency:{name:"Solana",symbol:"SOL",decimals:9},rpcUrls:{default:{http:["https://api.mainnet-beta.solana.com"]}},blockExplorers:{default:{name:"Solscan",url:"https://solscan.io"}},testnet:false,chainNamespace:"solana",caipNetworkId:"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp"},ke={id:"EtWTRABZaYq6iMfeYKouRu166VU2xqa1",name:"Solana Devnet",network:"solana-devnet",nativeCurrency:{name:"Solana",symbol:"SOL",decimals:9},rpcUrls:{default:{http:["https://api.devnet.solana.com"]}},blockExplorers:{default:{name:"Solscan",url:"https://solscan.io"}},testnet:true,chainNamespace:"solana",caipNetworkId:"solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1"};var b=[{type:"function",name:"depositERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"amount",type:"uint256"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"withdrawERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"amount",type:"uint256"},{name:"burnAmount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{name:"amount",type:"uint256"}]},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC1155",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{name:"amount",type:"uint256"}]},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],v=[{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:[]}],A=[{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"}]}],T=[{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"}]}],I=[{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 C(t,e,n){return viem.encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[t,e,core.normalizeBlockchainCategory(n)])}async function k(t,e){let{walletClient:n,publicClient:o,account:l}=t,i=await n.writeContract({address:e.address,abi:e.abi,functionName:e.functionName,args:e.args,account:l,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 W(t){let e=t.RewardPoolAddress;return e||null}async function N(t,e,n,o){return await t.publicClient.readContract({address:e,abi:A,functionName:"allowance",args:[t.account,n]})>=o?null:k(t,{address:e,abi:A,functionName:"approve",args:[n,o]})}async function B(t){let{client:e,clients:n,network:o,tokenAddress:l,amount:i,titleID:c,category:d}=t;if(y())return h("approve");let r=e.auth.context?.userID;if(!r)return a("approve","Not logged in.");let m=W(o);if(!m)return a("approve","Network has no RewardPoolAddress.");if(i<=0n)return a("approve","Amount must be positive.");try{await N(n,l,m,i);}catch(u){return a("approve",g(u))}let s;try{s=await k(n,{address:m,abi:b,functionName:"depositERC20",args:[l,i,r,c,d??""]});}catch(u){return a("deposit-onchain",g(u))}let p=await e.blockchain.depositToken(o.NetworkID??"",s);return p.ok?{ok:true,onChainTxHash:s,data:p.data}:a("report",p.error,{onChainTxHash:s})}async function j(t){let{clients:e,poolAddress:n,tokenAddress:o,amount:l,userID:i,titleID:c,category:d}=t;if(y())return h("approve");if(!i)return a("approve","userID is required.");if(l<=0n)return a("approve","Amount must be positive.");try{await N(e,o,n,l);}catch(r){return a("approve",g(r))}try{let r=await k(e,{address:n,abi:b,functionName:"depositERC20",args:[o,l,i,c,d??""]});return {ok:!0,onChainTxHash:r,data:{txHash:r}}}catch(r){return a("deposit-onchain",g(r))}}async function Q(t){let{client:e,clients:n,network:o,nftContractAddress:l,tokenId:i,amount:c,titleID:d,category:r}=t;if(y())return h("deposit-onchain");let m=e.auth.context?.userID;if(!m)return a("deposit-onchain","Not logged in.");let s=W(o);if(!s)return a("deposit-onchain","Network has no RewardPoolAddress.");if(c<=0n)return a("deposit-onchain","Amount must be positive.");let p=C(m,d,r),u;try{u=await k(n,{address:l,abi:T,functionName:"safeTransferFrom",args:[n.account,s,i,c,p]});}catch(x){return a("deposit-onchain",g(x))}let f=await e.blockchain.depositNFT(o.NetworkID??"",u);return f.ok?{ok:true,onChainTxHash:u,data:f.data}:a("report",f.error,{onChainTxHash:u})}async function X(t){let{client:e,clients:n,network:o,nftContractAddress:l,tokenId:i,titleID:c,category:d}=t;if(y())return h("deposit-onchain");let r=e.auth.context?.userID;if(!r)return a("deposit-onchain","Not logged in.");let m=W(o);if(!m)return a("deposit-onchain","Network has no RewardPoolAddress.");let s=C(r,c,d),p;try{p=await k(n,{address:l,abi:I,functionName:"safeTransferFrom",args:[n.account,m,i,s]});}catch(f){return a("deposit-onchain",g(f))}let u=await e.blockchain.depositNFT(o.NetworkID??"",p);return u.ok?{ok:true,onChainTxHash:p,data:u.data}:a("report",u.error,{onChainTxHash:p})}function P(t){return (t.Splits??[]).map(e=>({to:e.To,amount:BigInt(e.Amount??"0")}))}async function S(t,e){return k(t,{address:e.ContractAddress,abi:b,functionName:"withdrawERC20",args:[e.TokenAddress,e.WalletAddress,BigInt(e.Amount??"0"),BigInt(e.BurnAmount??"0"),P(e),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function R(t,e){return k(t,{address:e.ContractAddress,abi:v,functionName:"withdrawERC1155Mint",args:[e.TokenAddress,e.WalletAddress,BigInt(e.TokenId??"0"),BigInt(e.Amount??"0"),P(e),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function ee(t,e){return k(t,{address:e.ContractAddress,abi:v,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 te(t){let{client:e,clients:n,currencyID:o,networkID:l,walletAddress:i,amount:c,category:d}=t;if(y())return h("request");let r=await e.blockchain.requestTokenWithdrawal(o,l,i,c,d);if(!r.ok)return a("request",r.error);let m=r.data.EvmSignature,s=r.data.TitleTransactionID??void 0;if(!m)return a("request","Withdrawal response carried no EVM signature.",{titleTransactionID:s});let p;try{p=await S(n,m);}catch(f){return a("withdraw-onchain",g(f),{titleTransactionID:s})}let u=await F(e,s,p);return u.ok?{ok:true,onChainTxHash:p,data:r.data}:u}async function ne(t){let{client:e,clients:n,itemID:o,networkID:l,walletAddress:i,amount:c,category:d}=t;if(y())return h("request");let r=await e.blockchain.requestNFTWithdrawal(o,l,i,c,d);if(!r.ok)return a("request",r.error);let m=r.data.EvmSignature,s=r.data.TitleTransactionID??void 0;if(!m)return a("request","Withdrawal response carried no EVM signature.",{titleTransactionID:s});let p;try{p=await R(n,m);}catch(f){return a("withdraw-onchain",g(f),{titleTransactionID:s})}let u=await F(e,s,p);return u.ok?{ok:true,onChainTxHash:p,data:r.data}:u}async function F(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 ae(t){let{client:e,clients:n,networkID:o}=t;if(y())return E("challenge");let l=t.walletAddress??n.account,i=await e.auth.requestWalletChallenge(l,o);if(!i.ok)return w("challenge",i.error);let c;try{c=await n.walletClient.signMessage({account:n.account,message:i.data.Message});}catch(r){return w("sign",g(r))}let d=await e.auth.loginWithWallet(l,o,c);return d.ok?{ok:true,data:d.data}:w("login",d.error)}async function oe(t){let{client:e,clients:n,network:o,tokenAddress:l,decimals:i,titleID:c,shortfall:d,completePurchase:r,bufferRatio:m=0,category:s}=t;if(y())return h("approve");if(d.missing<=0)return a("approve","Nothing to deposit.");let p=d.missing*(1+Math.max(0,m)),u;try{u=viem.parseUnits(ie(p,i),i);}catch(L){return a("approve",g(L))}let f=await B({client:e,clients:n,network:o,tokenAddress:l,amount:u,titleID:c,category:s});if(!f.ok)return f;let x=await r();return x.ok?{ok:true,onChainTxHash:f.onChainTxHash,data:x.data}:a("report",x.error,{onChainTxHash:f.onChainTxHash})}function ie(t,e){return t.toFixed(Math.min(e,18)).replace(/0+$/,"").replace(/\.$/,"")||"0"}async function le(t){let{client:e,adapter:n,network:o,mint:l,amountRaw:i,titleID:c,category:d}=t;if(y())return h("deposit-onchain");let 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 m;try{m=await n.depositSpl({mint:l,amountRaw:i,userID:r,titleID:c,category:core.normalizeBlockchainCategory(d)});}catch(p){return a("deposit-onchain",g(p))}let s=await e.blockchain.depositToken(o.NetworkID??"",m);return s.ok?{ok:true,onChainTxHash:m,data:s.data}:a("report",s.error,{onChainTxHash:m})}async function pe(t){let{client:e,adapter:n,currencyID:o,networkID:l,walletAddress:i,amount:c,category:d}=t;if(y())return h("request");let r=await e.blockchain.requestTokenWithdrawal(o,l,i,c,d);if(!r.ok)return a("request",r.error);let m=r.data.SolanaSignature,s=r.data.TitleTransactionID??void 0;if(!m)return a("request","Withdrawal response carried no Solana signature.",{titleTransactionID:s});let p;try{p=await n.submitWithdrawal(m);}catch(f){return a("withdraw-onchain",g(f),{titleTransactionID:s})}if(!s)return a("confirm","Missing TitleTransactionID.",{onChainTxHash:p});let u=await e.blockchain.confirmWithdrawal(s,p);return u.ok?{ok:true,onChainTxHash:p,data:r.data}:a("confirm",u.error,{onChainTxHash:p,titleTransactionID:s})}async function de(t){let{client:e,networkID:n,walletAddress:o,signMessage:l}=t;if(y())return E("challenge");let i=await e.auth.requestWalletChallenge(o,n);if(!i.ok)return w("challenge",i.error);let c;try{let r=await l(new TextEncoder().encode(i.data.Message));c=ce(r);}catch(r){return w("sign",g(r))}let d=await e.auth.loginWithWallet(o,n,c);return d.ok?{ok:true,data:d.data}:w("login",d.error)}function ce(t){let e="0x";for(let n of t)e+=n.toString(16).padStart(2,"0");return e}
2
- exports.WALLET_USE_SITE_PANEL=D;exports.arbitrum=K;exports.base=_;exports.bridgeFail=a;exports.bsc=q;exports.chainById=fe;exports.depositNftEvm=Q;exports.depositNftEvm721=X;exports.depositTokenEvm=B;exports.depositTokenOnChainEvm=j;exports.depositTokenSolana=le;exports.encodeNftDepositData=C;exports.ensureErc20Allowance=N;exports.erc1155Abi=T;exports.erc20Abi=A;exports.erc721Abi=I;exports.idosChains=V;exports.isEmbeddedInPlatform=y;exports.loginWithWalletEvm=ae;exports.loginWithWalletSolana=de;exports.mainnet=U;exports.onWalletBalanceChanged=G;exports.optimism=Y;exports.payWithWalletEvm=oe;exports.polygon=O;exports.polygonAmoy=z;exports.rewardPoolAbi=b;exports.sepolia=$;exports.solanaDevnet=ke;exports.solanaMainnet=we;exports.submitEvmNftWithdrawal=R;exports.submitEvmNftWithdrawal721=ee;exports.submitEvmTokenWithdrawal=S;exports.toAppKitNetwork=he;exports.toErrorMessage=g;exports.walletLoginFail=w;exports.withdrawNftEvm=ne;exports.withdrawTokenEvm=te;exports.withdrawTokenSolana=pe;exports.writeAndWait=k;
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 w(t,e){return {ok:false,stage:t,error:e}}var D="WALLET_USE_SITE_PANEL";function f(){if(typeof window>"u")return false;try{return window.self!==window.top}catch{return true}}function M(){if(typeof window>"u")return false;try{return window.parent!==window.top}catch{return true}}function h(t){return a(t,D)}function E(t){return w(t,D)}var G=["https://idosgames.com","https://www.idosgames.com"];function U(t){if(typeof window>"u")return ()=>{};let e=n=>{G.includes(n.origin)&&n.data?.type==="IDOS_WALLET_BALANCE_CHANGED"&&t();};return window.addEventListener("message",e),()=>window.removeEventListener("message",e)}var O={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"}}},q={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"}}},_={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"}}},K={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"}}},Y={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"}}},$={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"}}},z={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"}}},V={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"}}},Z={mainnet:O,bsc:q,polygon:_,base:K,arbitrum:Y,optimism:$,sepolia:z,polygonAmoy:V};function he(t){return Object.values(Z).find(e=>e.id===t)}function we(t){return {...t,chainNamespace:"eip155",caipNetworkId:`eip155:${t.id}`}}var ke={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"},be={id:"EtWTRABZaYq6iMfeYKouRu166VU2xqa1",name:"Solana Devnet",network:"solana-devnet",nativeCurrency:{name:"Solana",symbol:"SOL",decimals:9},rpcUrls:{default:{http:["https://api.devnet.solana.com"]}},blockExplorers:{default:{name:"Solscan",url:"https://solscan.io"}},testnet:true,chainNamespace:"solana",caipNetworkId:"solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1"};var b=[{type:"function",name:"depositERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"amount",type:"uint256"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"withdrawERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"amount",type:"uint256"},{name:"burnAmount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{name:"amount",type:"uint256"}]},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC1155",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{name:"amount",type:"uint256"}]},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],v=[{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:[]}],A=[{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"}]}],T=[{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"}]}],I=[{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 C(t,e,n){return viem.encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[t,e,core.normalizeBlockchainCategory(n)])}async function k(t,e){let{walletClient:n,publicClient:o,account:l}=t,i=await n.writeContract({address:e.address,abi:e.abi,functionName:e.functionName,args:e.args,account:l,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 W(t){let e=t.RewardPoolAddress;return e||null}async function N(t,e,n,o){return await t.publicClient.readContract({address:e,abi:A,functionName:"allowance",args:[t.account,n]})>=o?null:k(t,{address:e,abi:A,functionName:"approve",args:[n,o]})}async function B(t){let{client:e,clients:n,network:o,tokenAddress:l,amount:i,titleID:c,category:p}=t;if(f())return h("approve");let r=e.auth.context?.userID;if(!r)return a("approve","Not logged in.");let m=W(o);if(!m)return a("approve","Network has no RewardPoolAddress.");if(i<=0n)return a("approve","Amount must be positive.");try{await N(n,l,m,i);}catch(u){return a("approve",g(u))}let s;try{s=await k(n,{address:m,abi:b,functionName:"depositERC20",args:[l,i,r,c,p??""]});}catch(u){return a("deposit-onchain",g(u))}let d=await e.blockchain.depositToken(o.NetworkID??"",s);return d.ok?{ok:true,onChainTxHash:s,data:d.data}:a("report",d.error,{onChainTxHash:s})}async function Q(t){let{clients:e,poolAddress:n,tokenAddress:o,amount:l,userID:i,titleID:c,category:p}=t;if(f())return h("approve");if(!i)return a("approve","userID is required.");if(l<=0n)return a("approve","Amount must be positive.");try{await N(e,o,n,l);}catch(r){return a("approve",g(r))}try{let r=await k(e,{address:n,abi:b,functionName:"depositERC20",args:[o,l,i,c,p??""]});return {ok:!0,onChainTxHash:r,data:{txHash:r}}}catch(r){return a("deposit-onchain",g(r))}}async function X(t){let{client:e,clients:n,network:o,nftContractAddress:l,tokenId:i,amount:c,titleID:p,category:r}=t;if(f())return h("deposit-onchain");let m=e.auth.context?.userID;if(!m)return a("deposit-onchain","Not logged in.");let s=W(o);if(!s)return a("deposit-onchain","Network has no RewardPoolAddress.");if(c<=0n)return a("deposit-onchain","Amount must be positive.");let d=C(m,p,r),u;try{u=await k(n,{address:l,abi:T,functionName:"safeTransferFrom",args:[n.account,s,i,c,d]});}catch(x){return a("deposit-onchain",g(x))}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 ee(t){let{client:e,clients:n,network:o,nftContractAddress:l,tokenId:i,titleID:c,category:p}=t;if(f())return h("deposit-onchain");let r=e.auth.context?.userID;if(!r)return a("deposit-onchain","Not logged in.");let m=W(o);if(!m)return a("deposit-onchain","Network has no RewardPoolAddress.");let s=C(r,c,p),d;try{d=await k(n,{address:l,abi:I,functionName:"safeTransferFrom",args:[n.account,m,i,s]});}catch(y){return a("deposit-onchain",g(y))}let u=await e.blockchain.depositNFT(o.NetworkID??"",d);return u.ok?{ok:true,onChainTxHash:d,data:u.data}:a("report",u.error,{onChainTxHash:d})}function P(t){return (t.Splits??[]).map(e=>({to:e.To,amount:BigInt(e.Amount??"0")}))}async function S(t,e){return k(t,{address:e.ContractAddress,abi:b,functionName:"withdrawERC20",args:[e.TokenAddress,e.WalletAddress,BigInt(e.Amount??"0"),BigInt(e.BurnAmount??"0"),P(e),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function R(t,e){return k(t,{address:e.ContractAddress,abi:v,functionName:"withdrawERC1155Mint",args:[e.TokenAddress,e.WalletAddress,BigInt(e.TokenId??"0"),BigInt(e.Amount??"0"),P(e),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function te(t,e){return k(t,{address:e.ContractAddress,abi:v,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 ne(t){let{client:e,clients:n,currencyID:o,networkID:l,walletAddress:i,amount:c,category:p}=t;if(f())return h("request");let r=await e.blockchain.requestTokenWithdrawal(o,l,i,c,p);if(!r.ok)return a("request",r.error);let m=r.data.EvmSignature,s=r.data.TitleTransactionID??void 0;if(!m)return a("request","Withdrawal response carried no EVM signature.",{titleTransactionID:s});let d;try{d=await S(n,m);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:s})}let u=await F(e,s,d);return u.ok?{ok:true,onChainTxHash:d,data:r.data}:u}async function ae(t){let{client:e,clients:n,itemID:o,networkID:l,walletAddress:i,amount:c,category:p}=t;if(f())return h("request");let r=await e.blockchain.requestNFTWithdrawal(o,l,i,c,p);if(!r.ok)return a("request",r.error);let m=r.data.EvmSignature,s=r.data.TitleTransactionID??void 0;if(!m)return a("request","Withdrawal response carried no EVM signature.",{titleTransactionID:s});let d;try{d=await R(n,m);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:s})}let u=await F(e,s,d);return u.ok?{ok:true,onChainTxHash:d,data:r.data}:u}async function F(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 re(t){let{client:e,clients:n,networkID:o}=t;if(f())return E("challenge");let l=t.walletAddress??n.account,i=await e.auth.requestWalletChallenge(l,o);if(!i.ok)return w("challenge",i.error);let c;try{c=await n.walletClient.signMessage({account:n.account,message:i.data.Message});}catch(r){return w("sign",g(r))}let p=await e.auth.loginWithWallet(l,o,c);return p.ok?{ok:true,data:p.data}:w("login",p.error)}async function ie(t){let{client:e,clients:n,network:o,tokenAddress:l,decimals:i,titleID:c,shortfall:p,completePurchase:r,bufferRatio:m=0,category:s}=t;if(f())return h("approve");if(p.missing<=0)return a("approve","Nothing to deposit.");let d=p.missing*(1+Math.max(0,m)),u;try{u=viem.parseUnits(se(d,i),i);}catch(L){return a("approve",g(L))}let y=await B({client:e,clients:n,network:o,tokenAddress:l,amount:u,titleID:c,category:s});if(!y.ok)return y;let x=await r();return x.ok?{ok:true,onChainTxHash:y.onChainTxHash,data:x.data}:a("report",x.error,{onChainTxHash:y.onChainTxHash})}function se(t,e){return t.toFixed(Math.min(e,18)).replace(/0+$/,"").replace(/\.$/,"")||"0"}async function de(t){let{client:e,adapter:n,network:o,mint:l,amountRaw:i,titleID:c,category:p}=t;if(f())return h("deposit-onchain");let 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 m;try{m=await n.depositSpl({mint:l,amountRaw:i,userID:r,titleID:c,category:core.normalizeBlockchainCategory(p)});}catch(d){return a("deposit-onchain",g(d))}let s=await e.blockchain.depositToken(o.NetworkID??"",m);return s.ok?{ok:true,onChainTxHash:m,data:s.data}:a("report",s.error,{onChainTxHash:m})}async function pe(t){let{client:e,adapter:n,currencyID:o,networkID:l,walletAddress:i,amount:c,category:p}=t;if(f())return h("request");let r=await e.blockchain.requestTokenWithdrawal(o,l,i,c,p);if(!r.ok)return a("request",r.error);let m=r.data.SolanaSignature,s=r.data.TitleTransactionID??void 0;if(!m)return a("request","Withdrawal response carried no Solana signature.",{titleTransactionID:s});let d;try{d=await n.submitWithdrawal(m);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:s})}if(!s)return a("confirm","Missing TitleTransactionID.",{onChainTxHash:d});let u=await e.blockchain.confirmWithdrawal(s,d);return u.ok?{ok:true,onChainTxHash:d,data:r.data}:a("confirm",u.error,{onChainTxHash:d,titleTransactionID:s})}async function ce(t){let{client:e,networkID:n,walletAddress:o,signMessage:l}=t;if(f())return E("challenge");let i=await e.auth.requestWalletChallenge(o,n);if(!i.ok)return w("challenge",i.error);let c;try{let r=await l(new TextEncoder().encode(i.data.Message));c=me(r);}catch(r){return w("sign",g(r))}let p=await e.auth.loginWithWallet(o,n,c);return p.ok?{ok:true,data:p.data}:w("login",p.error)}function me(t){let e="0x";for(let n of t)e+=n.toString(16).padStart(2,"0");return e}
2
+ exports.WALLET_USE_SITE_PANEL=D;exports.arbitrum=Y;exports.base=K;exports.bridgeFail=a;exports.bsc=q;exports.chainById=he;exports.depositNftEvm=X;exports.depositNftEvm721=ee;exports.depositTokenEvm=B;exports.depositTokenOnChainEvm=Q;exports.depositTokenSolana=de;exports.encodeNftDepositData=C;exports.ensureErc20Allowance=N;exports.erc1155Abi=T;exports.erc20Abi=A;exports.erc721Abi=I;exports.idosChains=Z;exports.isEmbeddedInPlatform=f;exports.isEmbeddedOnForeignSite=M;exports.loginWithWalletEvm=re;exports.loginWithWalletSolana=ce;exports.mainnet=O;exports.onWalletBalanceChanged=U;exports.optimism=$;exports.payWithWalletEvm=ie;exports.polygon=_;exports.polygonAmoy=V;exports.rewardPoolAbi=b;exports.sepolia=z;exports.solanaDevnet=be;exports.solanaMainnet=ke;exports.submitEvmNftWithdrawal=R;exports.submitEvmNftWithdrawal721=te;exports.submitEvmTokenWithdrawal=S;exports.toAppKitNetwork=we;exports.toErrorMessage=g;exports.walletLoginFail=w;exports.withdrawNftEvm=ae;exports.withdrawTokenEvm=ne;exports.withdrawTokenSolana=pe;exports.writeAndWait=k;
package/dist/index.d.cts CHANGED
@@ -21,6 +21,23 @@ declare const WALLET_USE_SITE_PANEL = "WALLET_USE_SITE_PANEL";
21
21
  * here" — that is a reasonable default even outside the platform's own embedding.
22
22
  */
23
23
  declare function isEmbeddedInPlatform(): boolean;
24
+ /**
25
+ * The page is embedded on SOMEBODY ELSE'S site, not on a platform page of our own.
26
+ *
27
+ * The platform offers a game to other sites through `idosgames.com/embed/{id}`, a thin page that
28
+ * frames the game — so on a foreign site the game sits TWO frames deep (their page → our embed page
29
+ * → the game), while on the platform's own app page it sits exactly one (`/app/{id}` → the game).
30
+ * `window.parent !== window.top` is that difference, and it is the only signal available here: both
31
+ * are cross-origin Window proxies, so they can be compared but not read.
32
+ *
33
+ * Why it matters (owner's decision, 2026-09-22): the "deposit and withdraw on idosgames.com" notice
34
+ * belongs next to the site's own wallet panel — on OUR page, where that panel is right there on
35
+ * screen. On a stranger's blog there is no panel, nothing the player can act on, and a wallet
36
+ * message inside a small embedded window is noise at best. So there the wallet UI shows nothing at
37
+ * all. Nothing about the actual barrier changes: wallet flows refuse in every iframe either way
38
+ * ({@link isEmbeddedInPlatform}).
39
+ */
40
+ declare function isEmbeddedOnForeignSite(): boolean;
24
41
  /**
25
42
  * The site's wallet panel is the ONLY place a player can deposit/withdraw while this game is
26
43
  * embedded (see the module docblock above). After it completes an operation it posts
@@ -418,4 +435,4 @@ interface LoginWithWalletSolanaParams {
418
435
  */
419
436
  declare function loginWithWalletSolana(params: LoginWithWalletSolanaParams): Promise<WalletLoginResult<ClientState>>;
420
437
 
421
- export { BridgeResult, EvmBridgeClients, type LoginWithWalletEvmParams, type LoginWithWalletSolanaParams, type PayWithWalletParams, type SolanaMessageSigner, WALLET_USE_SITE_PANEL, WalletLoginResult, encodeNftDepositData, erc1155Abi, erc20Abi, erc721Abi, isEmbeddedInPlatform, loginWithWalletEvm, loginWithWalletSolana, onWalletBalanceChanged, payWithWalletEvm, rewardPoolAbi };
438
+ export { BridgeResult, EvmBridgeClients, type LoginWithWalletEvmParams, type LoginWithWalletSolanaParams, type PayWithWalletParams, type SolanaMessageSigner, WALLET_USE_SITE_PANEL, WalletLoginResult, encodeNftDepositData, erc1155Abi, erc20Abi, erc721Abi, isEmbeddedInPlatform, isEmbeddedOnForeignSite, loginWithWalletEvm, loginWithWalletSolana, onWalletBalanceChanged, payWithWalletEvm, rewardPoolAbi };
package/dist/index.d.ts CHANGED
@@ -21,6 +21,23 @@ declare const WALLET_USE_SITE_PANEL = "WALLET_USE_SITE_PANEL";
21
21
  * here" — that is a reasonable default even outside the platform's own embedding.
22
22
  */
23
23
  declare function isEmbeddedInPlatform(): boolean;
24
+ /**
25
+ * The page is embedded on SOMEBODY ELSE'S site, not on a platform page of our own.
26
+ *
27
+ * The platform offers a game to other sites through `idosgames.com/embed/{id}`, a thin page that
28
+ * frames the game — so on a foreign site the game sits TWO frames deep (their page → our embed page
29
+ * → the game), while on the platform's own app page it sits exactly one (`/app/{id}` → the game).
30
+ * `window.parent !== window.top` is that difference, and it is the only signal available here: both
31
+ * are cross-origin Window proxies, so they can be compared but not read.
32
+ *
33
+ * Why it matters (owner's decision, 2026-09-22): the "deposit and withdraw on idosgames.com" notice
34
+ * belongs next to the site's own wallet panel — on OUR page, where that panel is right there on
35
+ * screen. On a stranger's blog there is no panel, nothing the player can act on, and a wallet
36
+ * message inside a small embedded window is noise at best. So there the wallet UI shows nothing at
37
+ * all. Nothing about the actual barrier changes: wallet flows refuse in every iframe either way
38
+ * ({@link isEmbeddedInPlatform}).
39
+ */
40
+ declare function isEmbeddedOnForeignSite(): boolean;
24
41
  /**
25
42
  * The site's wallet panel is the ONLY place a player can deposit/withdraw while this game is
26
43
  * embedded (see the module docblock above). After it completes an operation it posts
@@ -418,4 +435,4 @@ interface LoginWithWalletSolanaParams {
418
435
  */
419
436
  declare function loginWithWalletSolana(params: LoginWithWalletSolanaParams): Promise<WalletLoginResult<ClientState>>;
420
437
 
421
- export { BridgeResult, EvmBridgeClients, type LoginWithWalletEvmParams, type LoginWithWalletSolanaParams, type PayWithWalletParams, type SolanaMessageSigner, WALLET_USE_SITE_PANEL, WalletLoginResult, encodeNftDepositData, erc1155Abi, erc20Abi, erc721Abi, isEmbeddedInPlatform, loginWithWalletEvm, loginWithWalletSolana, onWalletBalanceChanged, payWithWalletEvm, rewardPoolAbi };
438
+ export { BridgeResult, EvmBridgeClients, type LoginWithWalletEvmParams, type LoginWithWalletSolanaParams, type PayWithWalletParams, type SolanaMessageSigner, WALLET_USE_SITE_PANEL, WalletLoginResult, encodeNftDepositData, erc1155Abi, erc20Abi, erc721Abi, isEmbeddedInPlatform, isEmbeddedOnForeignSite, loginWithWalletEvm, loginWithWalletSolana, onWalletBalanceChanged, payWithWalletEvm, rewardPoolAbi };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- export{j as depositNftEvm,k as depositNftEvm721,h as depositTokenEvm,i as depositTokenOnChainEvm,e as encodeNftDepositData,g as ensureErc20Allowance,c as erc1155Abi,b as erc20Abi,d as erc721Abi,q as loginWithWalletEvm,r as payWithWalletEvm,a as rewardPoolAbi,m as submitEvmNftWithdrawal,n as submitEvmNftWithdrawal721,l as submitEvmTokenWithdrawal,p as withdrawNftEvm,o as withdrawTokenEvm,f as writeAndWait}from'./chunk-AS645ILD.js';export{a as depositTokenSolana,c as loginWithWalletSolana,b as withdrawTokenSolana}from'./chunk-CH5EA233.js';export{d as WALLET_USE_SITE_PANEL,m as arbitrum,l as base,b as bridgeFail,j as bsc,r as chainById,q as idosChains,e as isEmbeddedInPlatform,i as mainnet,h as onWalletBalanceChanged,n as optimism,k as polygon,p as polygonAmoy,o as sepolia,u as solanaDevnet,t as solanaMainnet,s as toAppKitNetwork,a as toErrorMessage,c as walletLoginFail}from'./chunk-YJB7QDYQ.js';
1
+ export{j as depositNftEvm,k as depositNftEvm721,h as depositTokenEvm,i as depositTokenOnChainEvm,e as encodeNftDepositData,g as ensureErc20Allowance,c as erc1155Abi,b as erc20Abi,d as erc721Abi,q as loginWithWalletEvm,r as payWithWalletEvm,a as rewardPoolAbi,m as submitEvmNftWithdrawal,n as submitEvmNftWithdrawal721,l as submitEvmTokenWithdrawal,p as withdrawNftEvm,o as withdrawTokenEvm,f as writeAndWait}from'./chunk-JDC3JPIT.js';export{a as depositTokenSolana,c as loginWithWalletSolana,b as withdrawTokenSolana}from'./chunk-EAKPNSVN.js';export{d as WALLET_USE_SITE_PANEL,n as arbitrum,m as base,b as bridgeFail,k as bsc,s as chainById,r as idosChains,e as isEmbeddedInPlatform,f as isEmbeddedOnForeignSite,j as mainnet,i as onWalletBalanceChanged,o as optimism,l as polygon,q as polygonAmoy,p as sepolia,v as solanaDevnet,u as solanaMainnet,t as toAppKitNetwork,a as toErrorMessage,c as walletLoginFail}from'./chunk-OZXERZ5Q.js';
@@ -1 +1 @@
1
- import {p as p$1,o as o$1,j as j$2,h,q}from'../chunk-AS645ILD.js';import {a,b as b$1}from'../chunk-ZL42KPPC.js';import {i,j as j$1,k,l,m,n,o,p,s,b,c}from'../chunk-YJB7QDYQ.js';export{m as arbitrum,l as base,j as bsc,r as chainById,q as idosChains,i as mainnet,n as optimism,k as polygon,p as polygonAmoy,o as sepolia}from'../chunk-YJB7QDYQ.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=[i,j$1,k,l,m,n,o,p],oe=new Map;function ne(e){let{chains:o=we,walletConnectProjectId:t,appName:n,appUrl:i,appIcon:s$1,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$1?[s$1]:[]};if(t&&!l){let p=o.map(s),k=new WagmiAdapter({networks:p,projectId:t,transports:C});return a(createAppKit({adapters:[k],networks:p,projectId:t,metadata:b,features:{analytics:false,email:false,socials:false}})),oe.set(c,k.wagmiConfig),k.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){let t=U();return {connected:!!t,account:t?.account??null,loginWithWallet:(n,i)=>t?q({client:e,clients:t,networkID:n,walletAddress:i}):Promise.resolve(c("challenge",L)),depositToken:n=>t?h({client:e,clients:t,titleID:o,...n}):Promise.resolve(b("approve",L)),depositNft:n=>t?j$2({client:e,clients:t,titleID:o,...n}):Promise.resolve(b("deposit-onchain",L)),withdrawToken:n=>t?o$1({client:e,clients:t,...n}):Promise.resolve(b("withdraw-onchain",L)),withdrawNft:n=>t?p$1({client:e,clients:t,...n}):Promise.resolve(b("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]=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(true),u(null);try{if(await et(c),!P())return;if(!getAccount(c).isConnected){let y=b$1();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(q({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(false),w(false));}};useEffect(()=>{!l||T.current||(T.current=true,F());},[l]);let x=async()=>{await nt(c)||await b$1()?.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 {p as p$1,o as o$1,j as j$2,h,q as q$1}from'../chunk-JDC3JPIT.js';import {a,b as b$1}from'../chunk-ZL42KPPC.js';import {j as j$1,k,l,m,n,o,p,q,t,b,c}from'../chunk-OZXERZ5Q.js';export{n as arbitrum,m as base,k as bsc,s as chainById,r as idosChains,j as mainnet,o as optimism,l as polygon,q as polygonAmoy,p as sepolia}from'../chunk-OZXERZ5Q.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=[j$1,k,l,m,n,o,p,q],oe=new Map;function ne(e){let{chains:o=we,walletConnectProjectId:t$1,appName:n,appUrl:i,appIcon:s,transports:g,connectors:l}=e,c=t$1??"__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$1&&!l){let p=o.map(t),k=new WagmiAdapter({networks:p,projectId:t$1,transports:C});return a(createAppKit({adapters:[k],networks:p,projectId:t$1,metadata:b,features:{analytics:false,email:false,socials:false}})),oe.set(c,k.wagmiConfig),k.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){let t=U();return {connected:!!t,account:t?.account??null,loginWithWallet:(n,i)=>t?q$1({client:e,clients:t,networkID:n,walletAddress:i}):Promise.resolve(c("challenge",L)),depositToken:n=>t?h({client:e,clients:t,titleID:o,...n}):Promise.resolve(b("approve",L)),depositNft:n=>t?j$2({client:e,clients:t,titleID:o,...n}):Promise.resolve(b("deposit-onchain",L)),withdrawToken:n=>t?o$1({client:e,clients:t,...n}):Promise.resolve(b("withdraw-onchain",L)),withdrawNft:n=>t?p$1({client:e,clients:t,...n}):Promise.resolve(b("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]=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(true),u(null);try{if(await et(c),!P())return;if(!getAccount(c).isConnected){let y=b$1();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(q$1({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(false),w(false));}};useEffect(()=>{!l||T.current||(T.current=true,F());},[l]);let x=async()=>{await nt(c)||await b$1()?.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 viem=require('viem'),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'),core=require('@idosgames/core'),actions=require('wagmi/actions'),appkitAdapterSolana=require('@reown/appkit-adapter-solana');var qt=Object.defineProperty;var w=(e,t)=>()=>(e&&(t=e(e=0)),t);var Xe=(e,t)=>{for(var n in t)qt(e,n,{get:t[n],enumerable:true});};function T(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 W(e,t){return {ok:false,stage:e,error:t}}var G=w(()=>{});function v(){if(typeof window>"u")return false;try{return window.self!==window.top}catch{return true}}function H(e){return p(e,et)}function ue(e){return W(e,et)}var et,z=w(()=>{G();et="WALLET_USE_SITE_PANEL";});function We(e){return Object.values(exports.idosChains).find(t=>t.id===e)}function tt(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 ne=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 fe(e){nt=e;}function oe(){return nt}var nt,ie=w(()=>{nt=null;});function ge(e){let{chains:t=Ee,walletConnectProjectId:n,appName:o,appUrl:i,appIcon:r,transports:c,connectors:s}=e,a=n??"__extension_only__";if(!s){let f=xe.get(a);if(f)return f}let l={};for(let f of t)l[f.id]=c?.[f.id]??wagmi.http();let d=i??(typeof window<"u"?window.location.origin:""),u={name:o??"iDosGames",description:o??"iDosGames game",url:d,icons:r?[r]:[]};if(n&&!s){let f=t.map(tt),C=new appkitAdapterWagmi.WagmiAdapter({networks:f,projectId:n,transports:l});return fe(react$1.createAppKit({adapters:[C],networks:f,projectId:n,metadata:u,features:{analytics:false,email:false,socials:false}})),xe.set(a,C.wagmiConfig),C.wagmiConfig}let m=s??[connectors.injected(),connectors.coinbaseWallet({appName:o??"iDosGames"})],y=wagmi.createConfig({chains:t,connectors:m,transports:l});return s||xe.set(a,y),y}var Ee,xe,Te=w(()=>{ne();ie();Ee=[exports.mainnet,exports.bsc,exports.polygon,exports.base,exports.arbitrum,exports.optimism,exports.sepolia,exports.polygonAmoy],xe=new Map;});function re(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 ye=w(()=>{});var we,rt,De,at,Ie=w(()=>{we=[{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:[]}],rt=[{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:[]}],De=[{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"}]}],at=[{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 it(e,t,n){return viem.encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[e,t,core.normalizeBlockchainCategory(n)])}var st=w(()=>{});async function q(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 Ne=w(()=>{});function lt(e){let t=e.RewardPoolAddress;return t||null}async function ct(e,t,n,o){return await e.publicClient.readContract({address:t,abi:De,functionName:"allowance",args:[e.account,n]})>=o?null:q(e,{address:t,abi:De,functionName:"approve",args:[n,o]})}async function Re(e){let{client:t,clients:n,network:o,tokenAddress:i,amount:r,titleID:c,category:s}=e;if(v())return H("approve");let a=t.auth.context?.userID;if(!a)return p("approve","Not logged in.");let l=lt(o);if(!l)return p("approve","Network has no RewardPoolAddress.");if(r<=0n)return p("approve","Amount must be positive.");try{await ct(n,i,l,r);}catch(m){return p("approve",T(m))}let d;try{d=await q(n,{address:l,abi:we,functionName:"depositERC20",args:[i,r,a,c,s??""]});}catch(m){return p("deposit-onchain",T(m))}let u=await t.blockchain.depositToken(o.NetworkID??"",d);return u.ok?{ok:true,onChainTxHash:d,data:u.data}:p("report",u.error,{onChainTxHash:d})}async function Be(e){let{client:t,clients:n,network:o,nftContractAddress:i,tokenId:r,amount:c,titleID:s,category:a}=e;if(v())return H("deposit-onchain");let l=t.auth.context?.userID;if(!l)return p("deposit-onchain","Not logged in.");let d=lt(o);if(!d)return p("deposit-onchain","Network has no RewardPoolAddress.");if(c<=0n)return p("deposit-onchain","Amount must be positive.");let u=it(l,s,a),m;try{m=await q(n,{address:i,abi:at,functionName:"safeTransferFrom",args:[n.account,d,r,c,u]});}catch(f){return p("deposit-onchain",T(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 dt=w(()=>{Ie();st();Ne();G();z();});function pt(e){return (e.Splits??[]).map(t=>({to:t.To,amount:BigInt(t.Amount??"0")}))}async function ut(e,t){return q(e,{address:t.ContractAddress,abi:we,functionName:"withdrawERC20",args:[t.TokenAddress,t.WalletAddress,BigInt(t.Amount??"0"),BigInt(t.BurnAmount??"0"),pt(t),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function mt(e,t){return q(e,{address:t.ContractAddress,abi:rt,functionName:"withdrawERC1155Mint",args:[t.TokenAddress,t.WalletAddress,BigInt(t.TokenId??"0"),BigInt(t.Amount??"0"),pt(t),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function Le(e){let{client:t,clients:n,currencyID:o,networkID:i,walletAddress:r,amount:c,category:s}=e;if(v())return H("request");let a=await t.blockchain.requestTokenWithdrawal(o,i,r,c,s);if(!a.ok)return p("request",a.error);let l=a.data.EvmSignature,d=a.data.TitleTransactionID??void 0;if(!l)return p("request","Withdrawal response carried no EVM signature.",{titleTransactionID:d});let u;try{u=await ut(n,l);}catch(y){return p("withdraw-onchain",T(y),{titleTransactionID:d})}let m=await ft(t,d,u);return m.ok?{ok:true,onChainTxHash:u,data:a.data}:m}async function Me(e){let{client:t,clients:n,itemID:o,networkID:i,walletAddress:r,amount:c,category:s}=e;if(v())return H("request");let a=await t.blockchain.requestNFTWithdrawal(o,i,r,c,s);if(!a.ok)return p("request",a.error);let l=a.data.EvmSignature,d=a.data.TitleTransactionID??void 0;if(!l)return p("request","Withdrawal response carried no EVM signature.",{titleTransactionID:d});let u;try{u=await mt(n,l);}catch(y){return p("withdraw-onchain",T(y),{titleTransactionID:d})}let m=await ft(t,d,u);return m.ok?{ok:true,onChainTxHash:u,data:a.data}:m}async function ft(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 gt=w(()=>{Ie();Ne();G();z();});async function se(e){let{client:t,clients:n,networkID:o}=e;if(v())return ue("challenge");let i=e.walletAddress??n.account,r=await t.auth.requestWalletChallenge(i,o);if(!r.ok)return W("challenge",r.error);let c;try{c=await n.walletClient.signMessage({account:n.account,message:r.data.Message});}catch(a){return W("sign",T(a))}let s=await t.auth.loginWithWallet(i,o,c);return s.ok?{ok:true,data:s.data}:W("login",s.error)}var yt=w(()=>{G();z();});var Fe=w(()=>{dt();gt();yt();});function ce(){let{address:e}=wagmi.useAccount(),t=wagmi.usePublicClient(),{data:n}=wagmi.useWalletClient();return !e||!t||!n?null:{account:e,publicClient:t,walletClient:n}}function he(e,t){let n=ce();return {connected:!!n,account:n?.account??null,loginWithWallet:(o,i)=>n?se({client:e,clients:n,networkID:o,walletAddress:i}):Promise.resolve(W("challenge",le)),depositToken:o=>n?Re({client:e,clients:n,titleID:t,...o}):Promise.resolve(p("approve",le)),depositNft:o=>n?Be({client:e,clients:n,titleID:t,...o}):Promise.resolve(p("deposit-onchain",le)),withdrawToken:o=>n?Le({client:e,clients:n,...o}):Promise.resolve(p("withdraw-onchain",le)),withdrawNft:o=>n?Me({client:e,clients:n,...o}):Promise.resolve(p("withdraw-onchain",le))}}var le,be=w(()=>{Fe();G();le="Wallet not connected.";});function Ct(e){let{wagmiConfig:t,...n}=e;return jsxRuntime.jsx(re,{wagmiConfig:t,children:jsxRuntime.jsx(He,{...n})})}function fn(e){return e instanceof Error&&(e.name==="ConnectorAlreadyConnectedError"||e.message.includes("already connected"))}function gn(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 ht(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 yn(e,t=18e4){return actions.getAccount(e).isConnected?Promise.resolve(true):new Promise(n=>{let o=false,i=s=>{o||(o=true,r(),clearTimeout(c),n(s));},r=actions.watchAccount(e,{onChange:s=>{s.isConnected&&i(true);}}),c=setTimeout(()=>i(false),t);})}function wn(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,c(),clearTimeout(s),o());},c=actions.watchAccount(e,{onChange:a=>{n(a.status)||r();}}),s=setTimeout(r,t);}):Promise.resolve()}function hn(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 Cn(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 kn(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 He(e){let{client:t,networkID:n,onAuthenticated:o,disabled:i,label:r,style:c,autoStart:s}=e,a=wagmi.useConfig(),{isConnected:l}=wagmi.useAccount(),{connectAsync:d,connectors:u}=wagmi.useConnect(),m=ce(),[y,f]=react.useState(false),[C,h]=react.useState(null),[O,A]=react.useState(false),R=react.useRef(0),F=react.useRef(false),B=async()=>{let N=++R.current,M=()=>R.current===N;f(true),h(null);try{if(await wn(a),!M())return;if(!actions.getAccount(a).isConnected){let P=oe();if(P){if(await P.open(),!await yn(a)){h("No wallet was connected.");return}}else {let j=hn(u);if(!j){h("No wallet connector is configured.");return}try{await d({connector:j});}catch(E){if(!fn(E))throw E}}}let k=m??await ht(a);if(!k&&actions.getAccount(a).isConnected&&(await new Promise(P=>setTimeout(P,300)),k=await ht(a),!M()))return;if(!k){h("Wallet client is not available.");return}A(!0);let x=await kn(se({client:t,clients:k,networkID:n}),bn);if(!M())return;if(x.ok){o();return}h(x.stage==="sign"?"Signature declined.":x.error??"Wallet sign-in failed.");}catch(k){if(!M())return;console.error("[idosgames/wallet] wallet sign-in failed:",k),h(gn(k));}finally{M()&&(f(false),A(false));}};react.useEffect(()=>{!s||F.current||(F.current=true,B());},[s]);let L=async()=>{await Cn(a)||await oe()?.open();};return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:()=>{O?L():B();},disabled:i,style:{...vn,...i?{opacity:.6,cursor:"default"}:null,...c},children:O?"Waiting for signature \u2014 tap to open wallet":y?"Check your wallet\u2026":l?r??"Sign in with wallet":"Connect wallet"}),C&&jsxRuntime.jsx("span",{role:"alert",style:Pn,children:C})]})}var bn,vn,Pn,kt=w(()=>{ie();Fe();ye();be();bn=9e4;vn={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},Pn={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};});function Pt(e){let{client:t,walletConnectProjectId:n,appName:o,onClose:i,style:r}=e,[c,s]=react.useState(n??"");react.useEffect(()=>{if(n)return;let l=true;return (async()=>{let d=await t.blockchain.getDefinitions();if(!l||!d.ok)return;let u=d.data.Blockchain?.WalletLogin?.WalletConnectProjectId;u&&s(u);})(),()=>{l=false;}},[t,n]);let a=react.useMemo(()=>ge({walletConnectProjectId:c||void 0,appName:o}),[c,o]);return jsxRuntime.jsx(re,{wagmiConfig:a,children:jsxRuntime.jsx(Ln,{client:t,appName:o,onClose:i,style:r})})}function Ln({client:e,onClose:t,style:n}){let o=he(e,e.titleID),{address:i,isConnected:r,chainId:c}=wagmi.useAccount(),{connect:s,connectors:a}=wagmi.useConnect(),{disconnect:l}=wagmi.useDisconnect(),{switchChainAsync:d}=wagmi.useSwitchChain(),[,u]=react.useReducer(g=>g+1,0),[m,y]=react.useState({}),[f,C]=react.useState({}),[h,O]=react.useState(""),[A,R]=react.useState(""),[F,B]=react.useState(""),[L,N]=react.useState(false),[M,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 V=S.data.Blockchain?.Networks??{},Se={};for(let[zt,Je]of Object.entries(V))Je.Type==="EVM"&&(Se[zt]=Je);y(Se),C(S.data.CryptoCurrencies??{});let Ut=Object.keys(Se)[0]??"";O(Ut);})(),()=>{g=false;}},[e]),react.useEffect(()=>e.on("user:anyUpdated",u),[e]);let x=react.useMemo(()=>Object.entries(f).filter(([,g])=>g.Networks?.some(S=>S.NetworkID===h&&!!S.ContractAddress)),[f,h]);react.useEffect(()=>{let g=x[0]?.[0]??"";R(S=>x.some(([V])=>V===S)?S:g);},[x]);let P=h?m[h]:void 0,E=(A?f[A]:void 0)?.Networks?.find(g=>g.NetworkID===h),Ht=A?e.data.user.getCryptoCurrencyAmount(A):"0";async function Ze(){if(!P?.ChainID||c===P.ChainID)return true;try{return await d({chainId:P.ChainID}),!0}catch{return k({ok:false,stage:"approve",error:`Switch your wallet to chain ${P.ChainID} to continue.`}),false}}async function Ot(){if(!(!P||!E?.ContractAddress)){if(N(true),k(null),await Ze()){let g=E.Decimals??18,S;try{S=viem.parseUnits(F||"0",g);}catch{k({ok:false,stage:"approve",error:"Invalid amount."}),N(false);return}let V=await o.depositToken({network:P,tokenAddress:E.ContractAddress,amount:S});k(V),V.ok&&await e.blockchain.getUserState();}N(false);}}async function Kt(){if(!(!P||!o.account)){if(N(true),k(null),await Ze()){let g=await o.withdrawToken({currencyID:A,networkID:h,walletAddress:o.account,amount:F||"0"});k(g),g.ok&&await e.blockchain.getUserState();}N(false);}}return jsxRuntime.jsxs("div",{style:{...Nn,...n},children:[jsxRuntime.jsxs("div",{style:{...Ke,justifyContent:"space-between"},children:[jsxRuntime.jsx("span",{style:Rn,children:"Crypto wallet"}),t&&jsxRuntime.jsx("button",{type:"button",style:ke,onClick:t,children:"\u2715"})]}),r?jsxRuntime.jsxs("div",{style:Ke,children:[jsxRuntime.jsxs("span",{style:{..._,flex:1,alignSelf:"center"},children:[i?.slice(0,6),"\u2026",i?.slice(-4)]}),jsxRuntime.jsx("button",{type:"button",style:ke,onClick:()=>l(),children:"Disconnect"})]}):jsxRuntime.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6},children:[jsxRuntime.jsx("span",{style:_,children:"Connect a browser or mobile wallet"}),a.map(g=>jsxRuntime.jsx("button",{type:"button",style:ke,onClick:()=>s({connector:g}),children:g.name},g.uid))]}),Object.keys(m).length===0?jsxRuntime.jsx("span",{style:_,children:"No EVM networks configured for this title."}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:_,children:"Network"}),jsxRuntime.jsx("select",{style:Oe,value:h,onChange:g=>O(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:_,children:"Token"}),jsxRuntime.jsxs("select",{style:Oe,value:A,onChange:g=>R(g.target.value),children:[x.length===0&&jsxRuntime.jsx("option",{value:"",children:"\u2014 no depositable tokens \u2014"}),x.map(([g,S])=>jsxRuntime.jsx("option",{value:g,children:S.DisplayName??g},g))]})]}),jsxRuntime.jsxs("div",{style:_,children:["In-game balance: ",jsxRuntime.jsx("b",{children:Ht})," ",A]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:_,children:"Amount"}),jsxRuntime.jsx("input",{style:Oe,inputMode:"decimal",placeholder:"0.0",value:F,onChange:g=>B(g.target.value)})]}),jsxRuntime.jsxs("div",{style:Ke,children:[jsxRuntime.jsx("button",{type:"button",style:{...Bn,flex:1,opacity:L?.6:1},disabled:L||!r||!E?.ContractAddress,onClick:()=>{Ot();},children:"Deposit"}),jsxRuntime.jsx("button",{type:"button",style:{...ke,flex:1,opacity:L?.6:1},disabled:L||!r||!A,onClick:()=>{Kt();},children:"Withdraw"})]})]}),M&&jsxRuntime.jsx(Mn,{result:M})]})}function Mn({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 Nn,Rn,_,Oe,Bn,ke,Ke,St=w(()=>{Te();ye();be();Nn={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"},Rn={fontWeight:700,fontSize:16},_={fontSize:12,opacity:.7},Oe={background:"#052e7e",border:"1px solid #1e59c8",borderRadius:8,color:"#fff",padding:"8px 10px",width:"100%",boxSizing:"border-box"},Bn={background:"#0d66fe",color:"#fff",border:"none",borderRadius:8,padding:"9px 14px",fontWeight:700,cursor:"pointer"},ke={background:"#1e59c8",color:"#fff",border:"none",borderRadius:8,padding:"7px 12px",fontWeight:600,cursor:"pointer"},Ke={display:"flex",gap:8};});var Ue={};Xe(Ue,{DEFAULT_EVM_CHAINS:()=>Ee,IDosGamesWalletProvider:()=>re,WalletLogin:()=>Ct,WalletLoginButton:()=>He,WalletPanel:()=>Pt,arbitrum:()=>exports.arbitrum,base:()=>exports.base,bsc:()=>exports.bsc,chainById:()=>We,createEvmWalletConfig:()=>ge,idosChains:()=>exports.idosChains,mainnet:()=>exports.mainnet,optimism:()=>exports.optimism,polygon:()=>exports.polygon,polygonAmoy:()=>exports.polygonAmoy,sepolia:()=>exports.sepolia,useEvmBridge:()=>he,useEvmBridgeClients:()=>ce});var ze=w(()=>{Te();ne();ye();be();kt();St();});function Wt(e){let{walletConnectProjectId:t,appName:n,appUrl:o,appIcon:i,wallets:r}=e,c=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]:[]},l=new appkitAdapterSolana.SolanaAdapter(r?{wallets:r}:{});return fe(react$1.createAppKit({adapters:[l],networks:c,projectId:t,metadata:a,features:{analytics:false,email:false,socials:false}})),l}var At=w(()=>{ne();ie();});async function qe(e){let{client:t,adapter:n,network:o,mint:i,amountRaw:r,titleID:c,category:s}=e;if(v())return H("deposit-onchain");let 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 l;try{l=await n.depositSpl({mint:i,amountRaw:r,userID:a,titleID:c,category:core.normalizeBlockchainCategory(s)});}catch(u){return p("deposit-onchain",T(u))}let d=await t.blockchain.depositToken(o.NetworkID??"",l);return d.ok?{ok:true,onChainTxHash:l,data:d.data}:p("report",d.error,{onChainTxHash:l})}async function _e(e){let{client:t,adapter:n,currencyID:o,networkID:i,walletAddress:r,amount:c,category:s}=e;if(v())return H("request");let a=await t.blockchain.requestTokenWithdrawal(o,i,r,c,s);if(!a.ok)return p("request",a.error);let l=a.data.SolanaSignature,d=a.data.TitleTransactionID??void 0;if(!l)return p("request","Withdrawal response carried no Solana signature.",{titleTransactionID:d});let u;try{u=await n.submitWithdrawal(l);}catch(y){return p("withdraw-onchain",T(y),{titleTransactionID:d})}if(!d)return p("confirm","Missing TitleTransactionID.",{onChainTxHash:u});let m=await t.blockchain.confirmWithdrawal(d,u);return m.ok?{ok:true,onChainTxHash:u,data:a.data}:p("confirm",m.error,{onChainTxHash:u,titleTransactionID:d})}var xt=w(()=>{G();z();});async function pe(e){let{client:t,networkID:n,walletAddress:o,signMessage:i}=e;if(v())return ue("challenge");let r=await t.auth.requestWalletChallenge(o,n);if(!r.ok)return W("challenge",r.error);let c;try{let a=await i(new TextEncoder().encode(r.data.Message));c=Kn(a);}catch(a){return W("sign",T(a))}let s=await t.auth.loginWithWallet(o,n,c);return s.ok?{ok:true,data:s.data}:W("login",s.error)}function Kn(e){let t="0x";for(let n of e)t+=n.toString(16).padStart(2,"0");return t}var Et=w(()=>{G();z();});var je=w(()=>{xt();Et();});function Dt(e,t,n){let{address:o}=react$1.useAppKitAccount(),{walletProvider:i}=react$1.useAppKitProvider("solana"),r=o??null,c=i?.signMessage?.bind(i);return {connected:!!r,account:r,loginWithWallet:(s,a)=>{let l=a??r;return l?c?pe({client:e,networkID:s,walletAddress:l,signMessage:c}):Promise.resolve(W("sign","The connected wallet does not support message signing.")):Promise.resolve(W("challenge",Tt))},depositToken:s=>qe({client:e,adapter:n,titleID:t,...s}),withdrawToken:s=>{let a=s.walletAddress??r;return a?_e({client:e,adapter:n,...s,walletAddress:a}):Promise.resolve(p("request",Tt))}}}var Tt,It=w(()=>{je();G();Tt="Wallet not connected.";});function $n(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 Yn(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 Qn(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 Rt(e){let{client:t,networkID:n,onAuthenticated:o,disabled:i,label:r,style:c,autoStart:s}=e,{address:a,isConnected:l}=react$1.useAppKitAccount(),{walletProvider:d}=react$1.useAppKitProvider("solana"),[u,m]=react.useState(false),[y,f]=react.useState(null),[C,h]=react.useState(false),[O,A]=react.useState(false),R=react.useRef(null),F=react.useRef(0),B=react.useCallback(()=>{R.current&&clearTimeout(R.current),R.current=null;},[]);react.useEffect(()=>B,[B]);let L=react.useRef(false),N=react.useCallback(async()=>{let x=++F.current,P=()=>F.current===x,j=d?.signMessage?.bind(d);if(!a||!j){f("The connected wallet cannot sign messages."),m(false);return}m(true),f(null);try{A(!0);let E=await Yn(pe({client:t,networkID:n,walletAddress:a,signMessage:j}),Vn);if(!P())return;if(E.ok){o();return}f(E.stage==="sign"?"Signature declined.":E.error??"Wallet sign-in failed.");}catch(E){if(!P())return;console.error("[idosgames/wallet] solana sign-in failed:",E),f(Qn(E));}finally{P()&&(m(false),A(false));}},[a,d,t,n,o]),M=react.useCallback(()=>{$n(d)||oe()?.open();},[d]);react.useEffect(()=>{!C||!l||!a||!d||(h(false),B(),N());},[C,l,a,d,N,B]);let k=()=>{if(O){M();return}if(f(null),L.current=true,l&&a&&d){N();return}let x=oe();if(!x){f("Wallet sign-in is not configured for this title.");return}m(true),h(true),B(),R.current=setTimeout(()=>{h(false),m(false),f("No wallet was connected.");},jn),x.open();};return react.useEffect(()=>{!s||L.current||(L.current=true,k());},[s]),jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:k,disabled:i,style:{...Zn,...i?{opacity:.6,cursor:"default"}:null,...c},children:O?"Waiting for signature \u2014 tap to open wallet":u?"Check your wallet\u2026":l?r??"Sign in with wallet":"Connect wallet"}),y&&jsxRuntime.jsx("span",{role:"alert",style:Jn,children:y})]})}var jn,Vn,Zn,Jn,Bt=w(()=>{je();ie();jn=18e4,Vn=9e4;Zn={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 Lt={};Xe(Lt,{SolanaWalletLogin:()=>Rt,createSolanaWalletConfig:()=>Wt,solanaDevnet:()=>exports.solanaDevnet,solanaMainnet:()=>exports.solanaMainnet,useSolanaBridge:()=>Dt});var Mt=w(()=>{At();It();Bt();ne();});z();var no={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},oo={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"},ro={display:"block",padding:"10px 12px",borderRadius:"8px",background:"#04276bf5",border:"1px solid #1e59c8",color:"#fff",fontSize:"13px",textAlign:"center"};function Qe(e){return jsxRuntime.jsx("span",{role:"status",style:{...ro,...e.style},children:"Deposit and withdraw on idosgames.com \u2014 the wallet connects there, not inside the game."})}function Ft(e){let{loading:t,disabled:n,label:o,style:i,error:r,onClick:c}=e;return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:c,disabled:n||t,style:{...no,...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:oo,children:r})]})}function ao(e){let{chains:t,walletConnectProjectId:n,appName:o,disabled:i,label:r,style:c,...s}=e,[a,l]=react.useState(null),[d,u]=react.useState(false),[m,y]=react.useState(null);if(v())return jsxRuntime.jsx(Qe,{style:c});let f=()=>{u(true),y(null),(async()=>{try{let C=await Promise.resolve().then(()=>(ze(),Ue)),h=C.createEvmWalletConfig({chains:t,walletConnectProjectId:n,appName:o});l({mod:C,config:h});}catch(C){console.error("[idosgames/wallet] failed to load the wallet module:",C),y("Could not load the wallet. Please try again.");}finally{u(false);}})();};if(a){let{WalletLogin:C}=a.mod;return jsxRuntime.jsx(C,{...s,wagmiConfig:a.config,disabled:i,label:r,style:c,autoStart:true})}return jsxRuntime.jsx(Ft,{loading:d,disabled:i,label:r,style:c,error:m,onClick:f})}function io(e){let{walletConnectProjectId:t,appName:n,disabled:o,label:i,style:r,...c}=e,[s,a]=react.useState(null),[l,d]=react.useState(false),[u,m]=react.useState(null);if(v())return jsxRuntime.jsx(Qe,{style:r});let y=()=>{d(true),m(null),(async()=>{try{let f=await Promise.resolve().then(()=>(Mt(),Lt));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{d(false);}})();};if(s){let{SolanaWalletLogin:f}=s;return jsxRuntime.jsx(f,{...c,disabled:o,label:i,style:r,autoStart:true})}return jsxRuntime.jsx(Ft,{loading:l,disabled:o,label:i,style:r,error:u,onClick:y})}var so={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 lo(e){let{onClose:t,style:n}=e,o=v(),[i,r]=react.useState(null),[c,s]=react.useState(null);return react.useEffect(()=>{if(o)return;let a=true;return (async()=>{try{let l=await Promise.resolve().then(()=>(ze(),Ue));a&&r(l);}catch(l){console.error("[idosgames/wallet] failed to load the wallet panel:",l),a&&s("Could not load the wallet.");}})(),()=>{a=false;}},[o]),o?jsxRuntime.jsx(Qe,{style:n}):i?jsxRuntime.jsx(i.WalletPanel,{...e}):jsxRuntime.jsxs("div",{style:{...so,...n},children:[c??"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"})]})}ne();
2
- exports.LazySolanaWalletLogin=io;exports.LazyWalletLogin=ao;exports.LazyWalletPanel=lo;exports.chainById=We;
1
+ 'use strict';var viem=require('viem'),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'),core=require('@idosgames/core'),actions=require('wagmi/actions'),appkitAdapterSolana=require('@reown/appkit-adapter-solana');var _t=Object.defineProperty;var w=(e,t)=>()=>(e&&(t=e(e=0)),t);var Xe=(e,t)=>{for(var n in t)_t(e,n,{get:t[n],enumerable:true});};function T(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 W(e,t){return {ok:false,stage:e,error:t}}var G=w(()=>{});function v(){if(typeof window>"u")return false;try{return window.self!==window.top}catch{return true}}function tt(){if(typeof window>"u")return false;try{return window.parent!==window.top}catch{return true}}function H(e){return p(e,et)}function ue(e){return W(e,et)}var et,z=w(()=>{G();et="WALLET_USE_SITE_PANEL";});function We(e){return Object.values(exports.idosChains).find(t=>t.id===e)}function nt(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 ne=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 fe(e){ot=e;}function oe(){return ot}var ot,ie=w(()=>{ot=null;});function ge(e){let{chains:t=Ee,walletConnectProjectId:n,appName:o,appUrl:i,appIcon:r,transports:c,connectors:s}=e,a=n??"__extension_only__";if(!s){let f=Ae.get(a);if(f)return f}let l={};for(let f of t)l[f.id]=c?.[f.id]??wagmi.http();let d=i??(typeof window<"u"?window.location.origin:""),u={name:o??"iDosGames",description:o??"iDosGames game",url:d,icons:r?[r]:[]};if(n&&!s){let f=t.map(nt),C=new appkitAdapterWagmi.WagmiAdapter({networks:f,projectId:n,transports:l});return fe(react$1.createAppKit({adapters:[C],networks:f,projectId:n,metadata:u,features:{analytics:false,email:false,socials:false}})),Ae.set(a,C.wagmiConfig),C.wagmiConfig}let m=s??[connectors.injected(),connectors.coinbaseWallet({appName:o??"iDosGames"})],y=wagmi.createConfig({chains:t,connectors:m,transports:l});return s||Ae.set(a,y),y}var Ee,Ae,Te=w(()=>{ne();ie();Ee=[exports.mainnet,exports.bsc,exports.polygon,exports.base,exports.arbitrum,exports.optimism,exports.sepolia,exports.polygonAmoy],Ae=new Map;});function re(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 ye=w(()=>{});var we,at,De,it,Ie=w(()=>{we=[{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:[]}],at=[{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:[]}],De=[{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"}]}],it=[{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 st(e,t,n){return viem.encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[e,t,core.normalizeBlockchainCategory(n)])}var lt=w(()=>{});async function q(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 Ne=w(()=>{});function ct(e){let t=e.RewardPoolAddress;return t||null}async function dt(e,t,n,o){return await e.publicClient.readContract({address:t,abi:De,functionName:"allowance",args:[e.account,n]})>=o?null:q(e,{address:t,abi:De,functionName:"approve",args:[n,o]})}async function Re(e){let{client:t,clients:n,network:o,tokenAddress:i,amount:r,titleID:c,category:s}=e;if(v())return H("approve");let a=t.auth.context?.userID;if(!a)return p("approve","Not logged in.");let l=ct(o);if(!l)return p("approve","Network has no RewardPoolAddress.");if(r<=0n)return p("approve","Amount must be positive.");try{await dt(n,i,l,r);}catch(m){return p("approve",T(m))}let d;try{d=await q(n,{address:l,abi:we,functionName:"depositERC20",args:[i,r,a,c,s??""]});}catch(m){return p("deposit-onchain",T(m))}let u=await t.blockchain.depositToken(o.NetworkID??"",d);return u.ok?{ok:true,onChainTxHash:d,data:u.data}:p("report",u.error,{onChainTxHash:d})}async function Be(e){let{client:t,clients:n,network:o,nftContractAddress:i,tokenId:r,amount:c,titleID:s,category:a}=e;if(v())return H("deposit-onchain");let l=t.auth.context?.userID;if(!l)return p("deposit-onchain","Not logged in.");let d=ct(o);if(!d)return p("deposit-onchain","Network has no RewardPoolAddress.");if(c<=0n)return p("deposit-onchain","Amount must be positive.");let u=st(l,s,a),m;try{m=await q(n,{address:i,abi:it,functionName:"safeTransferFrom",args:[n.account,d,r,c,u]});}catch(f){return p("deposit-onchain",T(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 pt=w(()=>{Ie();lt();Ne();G();z();});function ut(e){return (e.Splits??[]).map(t=>({to:t.To,amount:BigInt(t.Amount??"0")}))}async function mt(e,t){return q(e,{address:t.ContractAddress,abi:we,functionName:"withdrawERC20",args:[t.TokenAddress,t.WalletAddress,BigInt(t.Amount??"0"),BigInt(t.BurnAmount??"0"),ut(t),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function ft(e,t){return q(e,{address:t.ContractAddress,abi:at,functionName:"withdrawERC1155Mint",args:[t.TokenAddress,t.WalletAddress,BigInt(t.TokenId??"0"),BigInt(t.Amount??"0"),ut(t),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function Le(e){let{client:t,clients:n,currencyID:o,networkID:i,walletAddress:r,amount:c,category:s}=e;if(v())return H("request");let a=await t.blockchain.requestTokenWithdrawal(o,i,r,c,s);if(!a.ok)return p("request",a.error);let l=a.data.EvmSignature,d=a.data.TitleTransactionID??void 0;if(!l)return p("request","Withdrawal response carried no EVM signature.",{titleTransactionID:d});let u;try{u=await mt(n,l);}catch(y){return p("withdraw-onchain",T(y),{titleTransactionID:d})}let m=await gt(t,d,u);return m.ok?{ok:true,onChainTxHash:u,data:a.data}:m}async function Me(e){let{client:t,clients:n,itemID:o,networkID:i,walletAddress:r,amount:c,category:s}=e;if(v())return H("request");let a=await t.blockchain.requestNFTWithdrawal(o,i,r,c,s);if(!a.ok)return p("request",a.error);let l=a.data.EvmSignature,d=a.data.TitleTransactionID??void 0;if(!l)return p("request","Withdrawal response carried no EVM signature.",{titleTransactionID:d});let u;try{u=await ft(n,l);}catch(y){return p("withdraw-onchain",T(y),{titleTransactionID:d})}let m=await gt(t,d,u);return m.ok?{ok:true,onChainTxHash:u,data:a.data}:m}async function gt(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 yt=w(()=>{Ie();Ne();G();z();});async function se(e){let{client:t,clients:n,networkID:o}=e;if(v())return ue("challenge");let i=e.walletAddress??n.account,r=await t.auth.requestWalletChallenge(i,o);if(!r.ok)return W("challenge",r.error);let c;try{c=await n.walletClient.signMessage({account:n.account,message:r.data.Message});}catch(a){return W("sign",T(a))}let s=await t.auth.loginWithWallet(i,o,c);return s.ok?{ok:true,data:s.data}:W("login",s.error)}var wt=w(()=>{G();z();});var Fe=w(()=>{pt();yt();wt();});function ce(){let{address:e}=wagmi.useAccount(),t=wagmi.usePublicClient(),{data:n}=wagmi.useWalletClient();return !e||!t||!n?null:{account:e,publicClient:t,walletClient:n}}function he(e,t){let n=ce();return {connected:!!n,account:n?.account??null,loginWithWallet:(o,i)=>n?se({client:e,clients:n,networkID:o,walletAddress:i}):Promise.resolve(W("challenge",le)),depositToken:o=>n?Re({client:e,clients:n,titleID:t,...o}):Promise.resolve(p("approve",le)),depositNft:o=>n?Be({client:e,clients:n,titleID:t,...o}):Promise.resolve(p("deposit-onchain",le)),withdrawToken:o=>n?Le({client:e,clients:n,...o}):Promise.resolve(p("withdraw-onchain",le)),withdrawNft:o=>n?Me({client:e,clients:n,...o}):Promise.resolve(p("withdraw-onchain",le))}}var le,be=w(()=>{Fe();G();le="Wallet not connected.";});function kt(e){let{wagmiConfig:t,...n}=e;return jsxRuntime.jsx(re,{wagmiConfig:t,children:jsxRuntime.jsx(He,{...n})})}function gn(e){return e instanceof Error&&(e.name==="ConnectorAlreadyConnectedError"||e.message.includes("already connected"))}function yn(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 bt(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 wn(e,t=18e4){return actions.getAccount(e).isConnected?Promise.resolve(true):new Promise(n=>{let o=false,i=s=>{o||(o=true,r(),clearTimeout(c),n(s));},r=actions.watchAccount(e,{onChange:s=>{s.isConnected&&i(true);}}),c=setTimeout(()=>i(false),t);})}function hn(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,c(),clearTimeout(s),o());},c=actions.watchAccount(e,{onChange:a=>{n(a.status)||r();}}),s=setTimeout(r,t);}):Promise.resolve()}function bn(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 kn(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 vn(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 He(e){let{client:t,networkID:n,onAuthenticated:o,disabled:i,label:r,style:c,autoStart:s}=e,a=wagmi.useConfig(),{isConnected:l}=wagmi.useAccount(),{connectAsync:d,connectors:u}=wagmi.useConnect(),m=ce(),[y,f]=react.useState(false),[C,h]=react.useState(null),[O,x]=react.useState(false),N=react.useRef(0),F=react.useRef(false),R=async()=>{let I=++N.current,L=()=>N.current===I;f(true),h(null);try{if(await hn(a),!L())return;if(!actions.getAccount(a).isConnected){let S=oe();if(S){if(await S.open(),!await wn(a)){h("No wallet was connected.");return}}else {let j=bn(u);if(!j){h("No wallet connector is configured.");return}try{await d({connector:j});}catch(E){if(!gn(E))throw E}}}let k=m??await bt(a);if(!k&&actions.getAccount(a).isConnected&&(await new Promise(S=>setTimeout(S,300)),k=await bt(a),!L()))return;if(!k){h("Wallet client is not available.");return}x(!0);let A=await vn(se({client:t,clients:k,networkID:n}),Cn);if(!L())return;if(A.ok){o();return}h(A.stage==="sign"?"Signature declined.":A.error??"Wallet sign-in failed.");}catch(k){if(!L())return;console.error("[idosgames/wallet] wallet sign-in failed:",k),h(yn(k));}finally{L()&&(f(false),x(false));}};react.useEffect(()=>{!s||F.current||(F.current=true,R());},[s]);let B=async()=>{await kn(a)||await oe()?.open();};return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:()=>{O?B():R();},disabled:i,style:{...Sn,...i?{opacity:.6,cursor:"default"}:null,...c},children:O?"Waiting for signature \u2014 tap to open wallet":y?"Check your wallet\u2026":l?r??"Sign in with wallet":"Connect wallet"}),C&&jsxRuntime.jsx("span",{role:"alert",style:Pn,children:C})]})}var Cn,Sn,Pn,vt=w(()=>{ie();Fe();ye();be();Cn=9e4;Sn={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},Pn={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};});function Pt(e){let{client:t,walletConnectProjectId:n,appName:o,onClose:i,style:r}=e,[c,s]=react.useState(n??"");react.useEffect(()=>{if(n)return;let l=true;return (async()=>{let d=await t.blockchain.getDefinitions();if(!l||!d.ok)return;let u=d.data.Blockchain?.WalletLogin?.WalletConnectProjectId;u&&s(u);})(),()=>{l=false;}},[t,n]);let a=react.useMemo(()=>ge({walletConnectProjectId:c||void 0,appName:o}),[c,o]);return jsxRuntime.jsx(re,{wagmiConfig:a,children:jsxRuntime.jsx(Mn,{client:t,appName:o,onClose:i,style:r})})}function Mn({client:e,onClose:t,style:n}){let o=he(e,e.titleID),{address:i,isConnected:r,chainId:c}=wagmi.useAccount(),{connect:s,connectors:a}=wagmi.useConnect(),{disconnect:l}=wagmi.useDisconnect(),{switchChainAsync:d}=wagmi.useSwitchChain(),[,u]=react.useReducer(g=>g+1,0),[m,y]=react.useState({}),[f,C]=react.useState({}),[h,O]=react.useState(""),[x,N]=react.useState(""),[F,R]=react.useState(""),[B,I]=react.useState(false),[L,k]=react.useState(null);react.useEffect(()=>{let g=true;return (async()=>{let P=await e.blockchain.getDefinitions();if(await e.blockchain.getUserState(),!g||!P.ok)return;let V=P.data.Blockchain?.Networks??{},Pe={};for(let[qt,Je]of Object.entries(V))Je.Type==="EVM"&&(Pe[qt]=Je);y(Pe),C(P.data.CryptoCurrencies??{});let zt=Object.keys(Pe)[0]??"";O(zt);})(),()=>{g=false;}},[e]),react.useEffect(()=>e.on("user:anyUpdated",u),[e]);let A=react.useMemo(()=>Object.entries(f).filter(([,g])=>g.Networks?.some(P=>P.NetworkID===h&&!!P.ContractAddress)),[f,h]);react.useEffect(()=>{let g=A[0]?.[0]??"";N(P=>A.some(([V])=>V===P)?P:g);},[A]);let S=h?m[h]:void 0,E=(x?f[x]:void 0)?.Networks?.find(g=>g.NetworkID===h),Ot=x?e.data.user.getCryptoCurrencyAmount(x):"0";async function Ze(){if(!S?.ChainID||c===S.ChainID)return true;try{return await d({chainId:S.ChainID}),!0}catch{return k({ok:false,stage:"approve",error:`Switch your wallet to chain ${S.ChainID} to continue.`}),false}}async function Kt(){if(!(!S||!E?.ContractAddress)){if(I(true),k(null),await Ze()){let g=E.Decimals??18,P;try{P=viem.parseUnits(F||"0",g);}catch{k({ok:false,stage:"approve",error:"Invalid amount."}),I(false);return}let V=await o.depositToken({network:S,tokenAddress:E.ContractAddress,amount:P});k(V),V.ok&&await e.blockchain.getUserState();}I(false);}}async function Ut(){if(!(!S||!o.account)){if(I(true),k(null),await Ze()){let g=await o.withdrawToken({currencyID:x,networkID:h,walletAddress:o.account,amount:F||"0"});k(g),g.ok&&await e.blockchain.getUserState();}I(false);}}return jsxRuntime.jsxs("div",{style:{...Rn,...n},children:[jsxRuntime.jsxs("div",{style:{...Ke,justifyContent:"space-between"},children:[jsxRuntime.jsx("span",{style:Bn,children:"Crypto wallet"}),t&&jsxRuntime.jsx("button",{type:"button",style:ke,onClick:t,children:"\u2715"})]}),r?jsxRuntime.jsxs("div",{style:Ke,children:[jsxRuntime.jsxs("span",{style:{..._,flex:1,alignSelf:"center"},children:[i?.slice(0,6),"\u2026",i?.slice(-4)]}),jsxRuntime.jsx("button",{type:"button",style:ke,onClick:()=>l(),children:"Disconnect"})]}):jsxRuntime.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6},children:[jsxRuntime.jsx("span",{style:_,children:"Connect a browser or mobile wallet"}),a.map(g=>jsxRuntime.jsx("button",{type:"button",style:ke,onClick:()=>s({connector:g}),children:g.name},g.uid))]}),Object.keys(m).length===0?jsxRuntime.jsx("span",{style:_,children:"No EVM networks configured for this title."}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:_,children:"Network"}),jsxRuntime.jsx("select",{style:Oe,value:h,onChange:g=>O(g.target.value),children:Object.entries(m).map(([g,P])=>jsxRuntime.jsx("option",{value:g,children:P.DisplayName??g},g))})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:_,children:"Token"}),jsxRuntime.jsxs("select",{style:Oe,value:x,onChange:g=>N(g.target.value),children:[A.length===0&&jsxRuntime.jsx("option",{value:"",children:"\u2014 no depositable tokens \u2014"}),A.map(([g,P])=>jsxRuntime.jsx("option",{value:g,children:P.DisplayName??g},g))]})]}),jsxRuntime.jsxs("div",{style:_,children:["In-game balance: ",jsxRuntime.jsx("b",{children:Ot})," ",x]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:_,children:"Amount"}),jsxRuntime.jsx("input",{style:Oe,inputMode:"decimal",placeholder:"0.0",value:F,onChange:g=>R(g.target.value)})]}),jsxRuntime.jsxs("div",{style:Ke,children:[jsxRuntime.jsx("button",{type:"button",style:{...Ln,flex:1,opacity:B?.6:1},disabled:B||!r||!E?.ContractAddress,onClick:()=>{Kt();},children:"Deposit"}),jsxRuntime.jsx("button",{type:"button",style:{...ke,flex:1,opacity:B?.6:1},disabled:B||!r||!x,onClick:()=>{Ut();},children:"Withdraw"})]})]}),L&&jsxRuntime.jsx(Fn,{result:L})]})}function Fn({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 Rn,Bn,_,Oe,Ln,ke,Ke,Wt=w(()=>{Te();ye();be();Rn={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"},Bn={fontWeight:700,fontSize:16},_={fontSize:12,opacity:.7},Oe={background:"#052e7e",border:"1px solid #1e59c8",borderRadius:8,color:"#fff",padding:"8px 10px",width:"100%",boxSizing:"border-box"},Ln={background:"#0d66fe",color:"#fff",border:"none",borderRadius:8,padding:"9px 14px",fontWeight:700,cursor:"pointer"},ke={background:"#1e59c8",color:"#fff",border:"none",borderRadius:8,padding:"7px 12px",fontWeight:600,cursor:"pointer"},Ke={display:"flex",gap:8};});var Ue={};Xe(Ue,{DEFAULT_EVM_CHAINS:()=>Ee,IDosGamesWalletProvider:()=>re,WalletLogin:()=>kt,WalletLoginButton:()=>He,WalletPanel:()=>Pt,arbitrum:()=>exports.arbitrum,base:()=>exports.base,bsc:()=>exports.bsc,chainById:()=>We,createEvmWalletConfig:()=>ge,idosChains:()=>exports.idosChains,mainnet:()=>exports.mainnet,optimism:()=>exports.optimism,polygon:()=>exports.polygon,polygonAmoy:()=>exports.polygonAmoy,sepolia:()=>exports.sepolia,useEvmBridge:()=>he,useEvmBridgeClients:()=>ce});var ze=w(()=>{Te();ne();ye();be();vt();Wt();});function xt(e){let{walletConnectProjectId:t,appName:n,appUrl:o,appIcon:i,wallets:r}=e,c=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]:[]},l=new appkitAdapterSolana.SolanaAdapter(r?{wallets:r}:{});return fe(react$1.createAppKit({adapters:[l],networks:c,projectId:t,metadata:a,features:{analytics:false,email:false,socials:false}})),l}var At=w(()=>{ne();ie();});async function qe(e){let{client:t,adapter:n,network:o,mint:i,amountRaw:r,titleID:c,category:s}=e;if(v())return H("deposit-onchain");let 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 l;try{l=await n.depositSpl({mint:i,amountRaw:r,userID:a,titleID:c,category:core.normalizeBlockchainCategory(s)});}catch(u){return p("deposit-onchain",T(u))}let d=await t.blockchain.depositToken(o.NetworkID??"",l);return d.ok?{ok:true,onChainTxHash:l,data:d.data}:p("report",d.error,{onChainTxHash:l})}async function _e(e){let{client:t,adapter:n,currencyID:o,networkID:i,walletAddress:r,amount:c,category:s}=e;if(v())return H("request");let a=await t.blockchain.requestTokenWithdrawal(o,i,r,c,s);if(!a.ok)return p("request",a.error);let l=a.data.SolanaSignature,d=a.data.TitleTransactionID??void 0;if(!l)return p("request","Withdrawal response carried no Solana signature.",{titleTransactionID:d});let u;try{u=await n.submitWithdrawal(l);}catch(y){return p("withdraw-onchain",T(y),{titleTransactionID:d})}if(!d)return p("confirm","Missing TitleTransactionID.",{onChainTxHash:u});let m=await t.blockchain.confirmWithdrawal(d,u);return m.ok?{ok:true,onChainTxHash:u,data:a.data}:p("confirm",m.error,{onChainTxHash:u,titleTransactionID:d})}var Et=w(()=>{G();z();});async function pe(e){let{client:t,networkID:n,walletAddress:o,signMessage:i}=e;if(v())return ue("challenge");let r=await t.auth.requestWalletChallenge(o,n);if(!r.ok)return W("challenge",r.error);let c;try{let a=await i(new TextEncoder().encode(r.data.Message));c=Un(a);}catch(a){return W("sign",T(a))}let s=await t.auth.loginWithWallet(o,n,c);return s.ok?{ok:true,data:s.data}:W("login",s.error)}function Un(e){let t="0x";for(let n of e)t+=n.toString(16).padStart(2,"0");return t}var Tt=w(()=>{G();z();});var je=w(()=>{Et();Tt();});function It(e,t,n){let{address:o}=react$1.useAppKitAccount(),{walletProvider:i}=react$1.useAppKitProvider("solana"),r=o??null,c=i?.signMessage?.bind(i);return {connected:!!r,account:r,loginWithWallet:(s,a)=>{let l=a??r;return l?c?pe({client:e,networkID:s,walletAddress:l,signMessage:c}):Promise.resolve(W("sign","The connected wallet does not support message signing.")):Promise.resolve(W("challenge",Dt))},depositToken:s=>qe({client:e,adapter:n,titleID:t,...s}),withdrawToken:s=>{let a=s.walletAddress??r;return a?_e({client:e,adapter:n,...s,walletAddress:a}):Promise.resolve(p("request",Dt))}}}var Dt,Nt=w(()=>{je();G();Dt="Wallet not connected.";});function Yn(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 Qn(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 Bt(e){let{client:t,networkID:n,onAuthenticated:o,disabled:i,label:r,style:c,autoStart:s}=e,{address:a,isConnected:l}=react$1.useAppKitAccount(),{walletProvider:d}=react$1.useAppKitProvider("solana"),[u,m]=react.useState(false),[y,f]=react.useState(null),[C,h]=react.useState(false),[O,x]=react.useState(false),N=react.useRef(null),F=react.useRef(0),R=react.useCallback(()=>{N.current&&clearTimeout(N.current),N.current=null;},[]);react.useEffect(()=>R,[R]);let B=react.useRef(false),I=react.useCallback(async()=>{let A=++F.current,S=()=>F.current===A,j=d?.signMessage?.bind(d);if(!a||!j){f("The connected wallet cannot sign messages."),m(false);return}m(true),f(null);try{x(!0);let E=await Qn(pe({client:t,networkID:n,walletAddress:a,signMessage:j}),$n);if(!S())return;if(E.ok){o();return}f(E.stage==="sign"?"Signature declined.":E.error??"Wallet sign-in failed.");}catch(E){if(!S())return;console.error("[idosgames/wallet] solana sign-in failed:",E),f(Zn(E));}finally{S()&&(m(false),x(false));}},[a,d,t,n,o]),L=react.useCallback(()=>{Yn(d)||oe()?.open();},[d]);react.useEffect(()=>{!C||!l||!a||!d||(h(false),R(),I());},[C,l,a,d,I,R]);let k=()=>{if(O){L();return}if(f(null),B.current=true,l&&a&&d){I();return}let A=oe();if(!A){f("Wallet sign-in is not configured for this title.");return}m(true),h(true),R(),N.current=setTimeout(()=>{h(false),m(false),f("No wallet was connected.");},Vn),A.open();};return react.useEffect(()=>{!s||B.current||(B.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,...c},children:O?"Waiting for signature \u2014 tap to open wallet":u?"Check your wallet\u2026":l?r??"Sign in with wallet":"Connect wallet"}),y&&jsxRuntime.jsx("span",{role:"alert",style:Xn,children:y})]})}var Vn,$n,Jn,Xn,Lt=w(()=>{je();ie();Vn=18e4,$n=9e4;Jn={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},Xn={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};});var Mt={};Xe(Mt,{SolanaWalletLogin:()=>Bt,createSolanaWalletConfig:()=>xt,solanaDevnet:()=>exports.solanaDevnet,solanaMainnet:()=>exports.solanaMainnet,useSolanaBridge:()=>It});var Ft=w(()=>{At();Nt();Lt();ne();});z();var oo={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},ro={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"},ao={display:"block",padding:"10px 12px",borderRadius:"8px",background:"#04276bf5",border:"1px solid #1e59c8",color:"#fff",fontSize:"13px",textAlign:"center"};function io(e){return jsxRuntime.jsx("span",{role:"status",style:{...ao,...e.style},children:"Deposit and withdraw on idosgames.com \u2014 the wallet connects there, not inside the game."})}function Qe(e){return tt()?null:jsxRuntime.jsx(io,{style:e})}function Gt(e){let{loading:t,disabled:n,label:o,style:i,error:r,onClick:c}=e;return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:c,disabled:n||t,style:{...oo,...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:ro,children:r})]})}function so(e){let{chains:t,walletConnectProjectId:n,appName:o,disabled:i,label:r,style:c,...s}=e,[a,l]=react.useState(null),[d,u]=react.useState(false),[m,y]=react.useState(null);if(v())return Qe(c);let f=()=>{u(true),y(null),(async()=>{try{let C=await Promise.resolve().then(()=>(ze(),Ue)),h=C.createEvmWalletConfig({chains:t,walletConnectProjectId:n,appName:o});l({mod:C,config:h});}catch(C){console.error("[idosgames/wallet] failed to load the wallet module:",C),y("Could not load the wallet. Please try again.");}finally{u(false);}})();};if(a){let{WalletLogin:C}=a.mod;return jsxRuntime.jsx(C,{...s,wagmiConfig:a.config,disabled:i,label:r,style:c,autoStart:true})}return jsxRuntime.jsx(Gt,{loading:d,disabled:i,label:r,style:c,error:m,onClick:f})}function lo(e){let{walletConnectProjectId:t,appName:n,disabled:o,label:i,style:r,...c}=e,[s,a]=react.useState(null),[l,d]=react.useState(false),[u,m]=react.useState(null);if(v())return Qe(r);let y=()=>{d(true),m(null),(async()=>{try{let f=await Promise.resolve().then(()=>(Ft(),Mt));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{d(false);}})();};if(s){let{SolanaWalletLogin:f}=s;return jsxRuntime.jsx(f,{...c,disabled:o,label:i,style:r,autoStart:true})}return jsxRuntime.jsx(Gt,{loading:l,disabled:o,label:i,style:r,error:u,onClick:y})}var co={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 po(e){let{onClose:t,style:n}=e,o=v(),[i,r]=react.useState(null),[c,s]=react.useState(null);return react.useEffect(()=>{if(o)return;let a=true;return (async()=>{try{let l=await Promise.resolve().then(()=>(ze(),Ue));a&&r(l);}catch(l){console.error("[idosgames/wallet] failed to load the wallet panel:",l),a&&s("Could not load the wallet.");}})(),()=>{a=false;}},[o]),o?Qe(n):i?jsxRuntime.jsx(i.WalletPanel,{...e}):jsxRuntime.jsxs("div",{style:{...co,...n},children:[c??"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"})]})}ne();
2
+ exports.LazySolanaWalletLogin=lo;exports.LazyWalletLogin=so;exports.LazyWalletPanel=po;exports.chainById=We;
@@ -1 +1 @@
1
- import {e}from'../chunk-YJB7QDYQ.js';export{m as arbitrum,l as base,j as bsc,r as chainById,q as idosChains,i as mainnet,n as optimism,k as polygon,p as polygonAmoy,o as sepolia,u as solanaDevnet,t as solanaMainnet}from'../chunk-YJB7QDYQ.js';import {useState,useEffect}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var j={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},B={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"},G={display:"block",padding:"10px 12px",borderRadius:"8px",background:"#04276bf5",border:"1px solid #1e59c8",color:"#fff",fontSize:"13px",textAlign:"center"};function S(l){return jsx("span",{role:"status",style:{...G,...l.style},children:"Deposit and withdraw on idosgames.com \u2014 the wallet connects there, not inside the game."})}function C(l){let{loading:o,disabled:r,label:a,style:n,error:t,onClick:i}=l;return jsxs(Fragment,{children:[jsx("button",{type:"button",onClick:i,disabled:r||o,style:{...j,...r||o?{opacity:.6,cursor:"default"}:null,...n},children:o?"Loading wallet\u2026":a??"Sign in with wallet"}),t&&jsx("span",{role:"alert",style:B,children:t})]})}function T(l){let{chains:o,walletConnectProjectId:r,appName:a,disabled:n,label:t,style:i,...y}=l,[s,p]=useState(null),[f,g]=useState(false),[m,b]=useState(null);if(e())return jsx(S,{style:i});let d=()=>{g(true),b(null),(async()=>{try{let u=await import('./index.js'),W=u.createEvmWalletConfig({chains:o,walletConnectProjectId:r,appName:a});p({mod:u,config:W});}catch(u){console.error("[idosgames/wallet] failed to load the wallet module:",u),b("Could not load the wallet. Please try again.");}finally{g(false);}})();};if(s){let{WalletLogin:u}=s.mod;return jsx(u,{...y,wagmiConfig:s.config,disabled:n,label:t,style:i,autoStart:true})}return jsx(C,{loading:f,disabled:n,label:t,style:i,error:m,onClick:d})}function F(l){let{walletConnectProjectId:o,appName:r,disabled:a,label:n,style:t,...i}=l,[y,s]=useState(null),[p,f]=useState(false),[g,m]=useState(null);if(e())return jsx(S,{style:t});let b=()=>{f(true),m(null),(async()=>{try{let d=await import('./solanaIndex.js');o&&d.createSolanaWalletConfig({walletConnectProjectId:o,appName:r}),s(d);}catch(d){console.error("[idosgames/wallet] failed to load the wallet module:",d),m("Could not load the wallet. Please try again.");}finally{f(false);}})();};if(y){let{SolanaWalletLogin:d}=y;return jsx(d,{...i,disabled:a,label:n,style:t,autoStart:true})}return jsx(C,{loading:p,disabled:a,label:n,style:t,error:g,onClick:b})}var K={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 q(l){let{onClose:o,style:r}=l,a=e(),[n,t]=useState(null),[i,y]=useState(null);return useEffect(()=>{if(a)return;let s=true;return (async()=>{try{let p=await import('./index.js');s&&t(p);}catch(p){console.error("[idosgames/wallet] failed to load the wallet panel:",p),s&&y("Could not load the wallet.");}})(),()=>{s=false;}},[a]),a?jsx(S,{style:r}):n?jsx(n.WalletPanel,{...l}):jsxs("div",{style:{...K,...r},children:[i??"Loading wallet\u2026",o&&jsx("button",{type:"button",onClick:o,style:{background:"#1e59c8",color:"#fff",border:"none",borderRadius:8,padding:"7px 12px",fontWeight:600,cursor:"pointer",marginLeft:10},children:"\u2715"})]})}export{F as LazySolanaWalletLogin,T as LazyWalletLogin,q as LazyWalletPanel};
1
+ import {e,f}from'../chunk-OZXERZ5Q.js';export{n as arbitrum,m as base,k as bsc,s as chainById,r as idosChains,j as mainnet,o as optimism,l as polygon,q as polygonAmoy,p as sepolia,v as solanaDevnet,u as solanaMainnet}from'../chunk-OZXERZ5Q.js';import {useState,useEffect}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var B={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},G={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"},F={display:"block",padding:"10px 12px",borderRadius:"8px",background:"#04276bf5",border:"1px solid #1e59c8",color:"#fff",fontSize:"13px",textAlign:"center"};function T(e){return jsx("span",{role:"status",style:{...F,...e.style},children:"Deposit and withdraw on idosgames.com \u2014 the wallet connects there, not inside the game."})}function L(e){return f()?null:jsx(T,{style:e})}function P(e){let{loading:o,disabled:r,label:l,style:n,error:t,onClick:i}=e;return jsxs(Fragment,{children:[jsx("button",{type:"button",onClick:i,disabled:r||o,style:{...B,...r||o?{opacity:.6,cursor:"default"}:null,...n},children:o?"Loading wallet\u2026":l??"Sign in with wallet"}),t&&jsx("span",{role:"alert",style:G,children:t})]})}function K(e$1){let{chains:o,walletConnectProjectId:r,appName:l,disabled:n,label:t,style:i,...u}=e$1,[s,p]=useState(null),[f,g]=useState(false),[m,b]=useState(null);if(e())return L(i);let d=()=>{g(true),b(null),(async()=>{try{let y=await import('./index.js'),w=y.createEvmWalletConfig({chains:o,walletConnectProjectId:r,appName:l});p({mod:y,config:w});}catch(y){console.error("[idosgames/wallet] failed to load the wallet module:",y),b("Could not load the wallet. Please try again.");}finally{g(false);}})();};if(s){let{WalletLogin:y}=s.mod;return jsx(y,{...u,wagmiConfig:s.config,disabled:n,label:t,style:i,autoStart:true})}return jsx(P,{loading:f,disabled:n,label:t,style:i,error:m,onClick:d})}function O(e$1){let{walletConnectProjectId:o,appName:r,disabled:l,label:n,style:t,...i}=e$1,[u,s]=useState(null),[p,f]=useState(false),[g,m]=useState(null);if(e())return L(t);let b=()=>{f(true),m(null),(async()=>{try{let d=await import('./solanaIndex.js');o&&d.createSolanaWalletConfig({walletConnectProjectId:o,appName:r}),s(d);}catch(d){console.error("[idosgames/wallet] failed to load the wallet module:",d),m("Could not load the wallet. Please try again.");}finally{f(false);}})();};if(u){let{SolanaWalletLogin:d}=u;return jsx(d,{...i,disabled:l,label:n,style:t,autoStart:true})}return jsx(P,{loading:p,disabled:l,label:n,style:t,error:g,onClick:b})}var q={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 H(e$1){let{onClose:o,style:r}=e$1,l=e(),[n,t]=useState(null),[i,u]=useState(null);return useEffect(()=>{if(l)return;let s=true;return (async()=>{try{let p=await import('./index.js');s&&t(p);}catch(p){console.error("[idosgames/wallet] failed to load the wallet panel:",p),s&&u("Could not load the wallet.");}})(),()=>{s=false;}},[l]),l?L(r):n?jsx(n.WalletPanel,{...e$1}):jsxs("div",{style:{...q,...r},children:[i??"Loading wallet\u2026",o&&jsx("button",{type:"button",onClick:o,style:{background:"#1e59c8",color:"#fff",border:"none",borderRadius:8,padding:"7px 12px",fontWeight:600,cursor:"pointer",marginLeft:10},children:"\u2715"})]})}export{O as LazySolanaWalletLogin,K as LazyWalletLogin,H as LazyWalletPanel};
@@ -1,2 +1,2 @@
1
- 'use strict';var appkitAdapterSolana=require('@reown/appkit-adapter-solana'),react=require('@reown/appkit/react'),core=require('@idosgames/core'),viem=require('viem'),react$1=require('react'),jsxRuntime=require('react/jsx-runtime');var v={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"},J={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 _=null;function H(e){_=e;}function I(){return _}function X(e){let{walletConnectProjectId:t,appName:a,appUrl:o,appIcon:p,wallets:r}=e,d=e.networks??[v],i=o??(typeof window<"u"?window.location.origin:""),n={name:a??"iDosGames",description:a??"iDosGames game",url:i,icons:p?[p]:[]},s=new appkitAdapterSolana.SolanaAdapter(r?{wallets:r}:{});return H(react.createAppKit({adapters:[s],networks:d,projectId:t,metadata:n,features:{analytics:false,email:false,socials:false}})),s}function y(e){return e instanceof viem.BaseError?e.shortMessage:e instanceof Error?e.message:String(e)}function c(e,t,a){return {ok:false,stage:e,error:t,...a}}function m(e,t){return {ok:false,stage:e,error:t}}var Y="WALLET_USE_SITE_PANEL";function S(){if(typeof window>"u")return false;try{return window.self!==window.top}catch{return true}}function D(e){return c(e,Y)}function z(e){return m(e,Y)}async function B(e){let{client:t,adapter:a,network:o,mint:p,amountRaw:r,titleID:d,category:i}=e;if(S())return D("deposit-onchain");let n=t.auth.context?.userID;if(!n)return c("deposit-onchain","Not logged in.");if(r<=0n)return c("deposit-onchain","Amount must be positive.");let s;try{s=await a.depositSpl({mint:p,amountRaw:r,userID:n,titleID:d,category:core.normalizeBlockchainCategory(i)});}catch(u){return c("deposit-onchain",y(u))}let l=await t.blockchain.depositToken(o.NetworkID??"",s);return l.ok?{ok:true,onChainTxHash:s,data:l.data}:c("report",l.error,{onChainTxHash:s})}async function L(e){let{client:t,adapter:a,currencyID:o,networkID:p,walletAddress:r,amount:d,category:i}=e;if(S())return D("request");let n=await t.blockchain.requestTokenWithdrawal(o,p,r,d,i);if(!n.ok)return c("request",n.error);let s=n.data.SolanaSignature,l=n.data.TitleTransactionID??void 0;if(!s)return c("request","Withdrawal response carried no Solana signature.",{titleTransactionID:l});let u;try{u=await a.submitWithdrawal(s);}catch(T){return c("withdraw-onchain",y(T),{titleTransactionID:l})}if(!l)return c("confirm","Missing TitleTransactionID.",{onChainTxHash:u});let g=await t.blockchain.confirmWithdrawal(l,u);return g.ok?{ok:true,onChainTxHash:u,data:n.data}:c("confirm",g.error,{onChainTxHash:u,titleTransactionID:l})}async function k(e){let{client:t,networkID:a,walletAddress:o,signMessage:p}=e;if(S())return z("challenge");let r=await t.auth.requestWalletChallenge(o,a);if(!r.ok)return m("challenge",r.error);let d;try{let n=await p(new TextEncoder().encode(r.data.Message));d=ne(n);}catch(n){return m("sign",y(n))}let i=await t.auth.loginWithWallet(o,a,d);return i.ok?{ok:true,data:i.data}:m("login",i.error)}function ne(e){let t="0x";for(let a of e)t+=a.toString(16).padStart(2,"0");return t}var j="Wallet not connected.";function oe(e,t,a){let{address:o}=react.useAppKitAccount(),{walletProvider:p}=react.useAppKitProvider("solana"),r=o??null,d=p?.signMessage?.bind(p);return {connected:!!r,account:r,loginWithWallet:(i,n)=>{let s=n??r;return s?d?k({client:e,networkID:i,walletAddress:s,signMessage:d}):Promise.resolve(m("sign","The connected wallet does not support message signing.")):Promise.resolve(m("challenge",j))},depositToken:i=>B({client:e,adapter:a,titleID:t,...i}),withdrawToken:i=>{let n=i.walletAddress??r;return n?L({client:e,adapter:a,...i,walletAddress:n}):Promise.resolve(c("request",j))}}}var le=18e4,pe=9e4;function ce(e){try{let a=e?.session?.peer?.metadata?.redirect,o=a?.native||a?.universal;return !o||typeof window>"u"?!1:(window.location.href=o,!0)}catch{return false}}function de(e,t){return new Promise((a,o)=>{let p=setTimeout(()=>o(new Error("The wallet request timed out.")),t);e.then(r=>{clearTimeout(p),a(r);},r=>{clearTimeout(p),o(r instanceof Error?r:new Error(String(r)));});})}function ue(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 me(e){let{client:t,networkID:a,onAuthenticated:o,disabled:p,label:r,style:d,autoStart:i}=e,{address:n,isConnected:s}=react.useAppKitAccount(),{walletProvider:l}=react.useAppKitProvider("solana"),[u,g]=react$1.useState(false),[T,f]=react$1.useState(null),[F,W]=react$1.useState(false),[M,U]=react$1.useState(false),x=react$1.useRef(null),O=react$1.useRef(0),w=react$1.useCallback(()=>{x.current&&clearTimeout(x.current),x.current=null;},[]);react$1.useEffect(()=>w,[w]);let C=react$1.useRef(false),E=react$1.useCallback(async()=>{let A=++O.current,P=()=>O.current===A,G=l?.signMessage?.bind(l);if(!n||!G){f("The connected wallet cannot sign messages."),g(false);return}g(true),f(null);try{U(!0);let h=await de(k({client:t,networkID:a,walletAddress:n,signMessage:G}),pe);if(!P())return;if(h.ok){o();return}f(h.stage==="sign"?"Signature declined.":h.error??"Wallet sign-in failed.");}catch(h){if(!P())return;console.error("[idosgames/wallet] solana sign-in failed:",h),f(ue(h));}finally{P()&&(g(false),U(false));}},[n,l,t,a,o]),$=react$1.useCallback(()=>{ce(l)||I()?.open();},[l]);react$1.useEffect(()=>{!F||!s||!n||!l||(W(false),w(),E());},[F,s,n,l,E,w]);let q=()=>{if(M){$();return}if(f(null),C.current=true,s&&n&&l){E();return}let A=I();if(!A){f("Wallet sign-in is not configured for this title.");return}g(true),W(true),w(),x.current=setTimeout(()=>{W(false),g(false),f("No wallet was connected.");},le),A.open();};return react$1.useEffect(()=>{!i||C.current||(C.current=true,q());},[i]),jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:q,disabled:p,style:{...ge,...p?{opacity:.6,cursor:"default"}:null,...d},children:M?"Waiting for signature \u2014 tap to open wallet":u?"Check your wallet\u2026":s?r??"Sign in with wallet":"Connect wallet"}),T&&jsxRuntime.jsx("span",{role:"alert",style:fe,children:T})]})}var ge={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},fe={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};
1
+ 'use strict';var appkitAdapterSolana=require('@reown/appkit-adapter-solana'),react=require('@reown/appkit/react'),core=require('@idosgames/core'),viem=require('viem'),react$1=require('react'),jsxRuntime=require('react/jsx-runtime');var v={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"},J={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 _=null;function H(e){_=e;}function I(){return _}function X(e){let{walletConnectProjectId:t,appName:a,appUrl:o,appIcon:p,wallets:r}=e,d=e.networks??[v],i=o??(typeof window<"u"?window.location.origin:""),n={name:a??"iDosGames",description:a??"iDosGames game",url:i,icons:p?[p]:[]},s=new appkitAdapterSolana.SolanaAdapter(r?{wallets:r}:{});return H(react.createAppKit({adapters:[s],networks:d,projectId:t,metadata:n,features:{analytics:false,email:false,socials:false}})),s}function y(e){return e instanceof viem.BaseError?e.shortMessage:e instanceof Error?e.message:String(e)}function c(e,t,a){return {ok:false,stage:e,error:t,...a}}function m(e,t){return {ok:false,stage:e,error:t}}var Y="WALLET_USE_SITE_PANEL";function S(){if(typeof window>"u")return false;try{return window.self!==window.top}catch{return true}}function D(e){return c(e,Y)}function z(e){return m(e,Y)}async function B(e){let{client:t,adapter:a,network:o,mint:p,amountRaw:r,titleID:d,category:i}=e;if(S())return D("deposit-onchain");let n=t.auth.context?.userID;if(!n)return c("deposit-onchain","Not logged in.");if(r<=0n)return c("deposit-onchain","Amount must be positive.");let s;try{s=await a.depositSpl({mint:p,amountRaw:r,userID:n,titleID:d,category:core.normalizeBlockchainCategory(i)});}catch(u){return c("deposit-onchain",y(u))}let l=await t.blockchain.depositToken(o.NetworkID??"",s);return l.ok?{ok:true,onChainTxHash:s,data:l.data}:c("report",l.error,{onChainTxHash:s})}async function L(e){let{client:t,adapter:a,currencyID:o,networkID:p,walletAddress:r,amount:d,category:i}=e;if(S())return D("request");let n=await t.blockchain.requestTokenWithdrawal(o,p,r,d,i);if(!n.ok)return c("request",n.error);let s=n.data.SolanaSignature,l=n.data.TitleTransactionID??void 0;if(!s)return c("request","Withdrawal response carried no Solana signature.",{titleTransactionID:l});let u;try{u=await a.submitWithdrawal(s);}catch(T){return c("withdraw-onchain",y(T),{titleTransactionID:l})}if(!l)return c("confirm","Missing TitleTransactionID.",{onChainTxHash:u});let g=await t.blockchain.confirmWithdrawal(l,u);return g.ok?{ok:true,onChainTxHash:u,data:n.data}:c("confirm",g.error,{onChainTxHash:u,titleTransactionID:l})}async function k(e){let{client:t,networkID:a,walletAddress:o,signMessage:p}=e;if(S())return z("challenge");let r=await t.auth.requestWalletChallenge(o,a);if(!r.ok)return m("challenge",r.error);let d;try{let n=await p(new TextEncoder().encode(r.data.Message));d=ne(n);}catch(n){return m("sign",y(n))}let i=await t.auth.loginWithWallet(o,a,d);return i.ok?{ok:true,data:i.data}:m("login",i.error)}function ne(e){let t="0x";for(let a of e)t+=a.toString(16).padStart(2,"0");return t}var j="Wallet not connected.";function oe(e,t,a){let{address:o}=react.useAppKitAccount(),{walletProvider:p}=react.useAppKitProvider("solana"),r=o??null,d=p?.signMessage?.bind(p);return {connected:!!r,account:r,loginWithWallet:(i,n)=>{let s=n??r;return s?d?k({client:e,networkID:i,walletAddress:s,signMessage:d}):Promise.resolve(m("sign","The connected wallet does not support message signing.")):Promise.resolve(m("challenge",j))},depositToken:i=>B({client:e,adapter:a,titleID:t,...i}),withdrawToken:i=>{let n=i.walletAddress??r;return n?L({client:e,adapter:a,...i,walletAddress:n}):Promise.resolve(c("request",j))}}}var le=18e4,pe=9e4;function ce(e){try{let a=e?.session?.peer?.metadata?.redirect,o=a?.native||a?.universal;return !o||typeof window>"u"?!1:(window.location.href=o,!0)}catch{return false}}function de(e,t){return new Promise((a,o)=>{let p=setTimeout(()=>o(new Error("The wallet request timed out.")),t);e.then(r=>{clearTimeout(p),a(r);},r=>{clearTimeout(p),o(r instanceof Error?r:new Error(String(r)));});})}function ue(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 me(e){let{client:t,networkID:a,onAuthenticated:o,disabled:p,label:r,style:d,autoStart:i}=e,{address:n,isConnected:s}=react.useAppKitAccount(),{walletProvider:l}=react.useAppKitProvider("solana"),[u,g]=react$1.useState(false),[T,f]=react$1.useState(null),[F,W]=react$1.useState(false),[M,U]=react$1.useState(false),b=react$1.useRef(null),O=react$1.useRef(0),w=react$1.useCallback(()=>{b.current&&clearTimeout(b.current),b.current=null;},[]);react$1.useEffect(()=>w,[w]);let C=react$1.useRef(false),E=react$1.useCallback(async()=>{let x=++O.current,P=()=>O.current===x,G=l?.signMessage?.bind(l);if(!n||!G){f("The connected wallet cannot sign messages."),g(false);return}g(true),f(null);try{U(!0);let h=await de(k({client:t,networkID:a,walletAddress:n,signMessage:G}),pe);if(!P())return;if(h.ok){o();return}f(h.stage==="sign"?"Signature declined.":h.error??"Wallet sign-in failed.");}catch(h){if(!P())return;console.error("[idosgames/wallet] solana sign-in failed:",h),f(ue(h));}finally{P()&&(g(false),U(false));}},[n,l,t,a,o]),$=react$1.useCallback(()=>{ce(l)||I()?.open();},[l]);react$1.useEffect(()=>{!F||!s||!n||!l||(W(false),w(),E());},[F,s,n,l,E,w]);let q=()=>{if(M){$();return}if(f(null),C.current=true,s&&n&&l){E();return}let x=I();if(!x){f("Wallet sign-in is not configured for this title.");return}g(true),W(true),w(),b.current=setTimeout(()=>{W(false),g(false),f("No wallet was connected.");},le),x.open();};return react$1.useEffect(()=>{!i||C.current||(C.current=true,q());},[i]),jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:q,disabled:p,style:{...ge,...p?{opacity:.6,cursor:"default"}:null,...d},children:M?"Waiting for signature \u2014 tap to open wallet":u?"Check your wallet\u2026":s?r??"Sign in with wallet":"Connect wallet"}),T&&jsxRuntime.jsx("span",{role:"alert",style:fe,children:T})]})}var ge={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},fe={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};
2
2
  exports.SolanaWalletLogin=me;exports.createSolanaWalletConfig=X;exports.solanaDevnet=J;exports.solanaMainnet=v;exports.useSolanaBridge=oe;
@@ -1 +1 @@
1
- import {b,a as a$1,c}from'../chunk-CH5EA233.js';import {a,b as b$2}from'../chunk-ZL42KPPC.js';import {t,b as b$1,c as c$1}from'../chunk-YJB7QDYQ.js';export{u as solanaDevnet,t as solanaMainnet}from'../chunk-YJB7QDYQ.js';import {SolanaAdapter}from'@reown/appkit-adapter-solana';import {createAppKit,useAppKitAccount,useAppKitProvider}from'@reown/appkit/react';import {useState,useRef,useCallback,useEffect}from'react';import {jsxs,Fragment,jsx}from'react/jsx-runtime';function J(e){let{walletConnectProjectId:r,appName:n,appUrl:a$1,appIcon:i,wallets:t$1}=e,c=e.networks??[t],s=a$1??(typeof window<"u"?window.location.origin:""),o={name:n??"iDosGames",description:n??"iDosGames game",url:s,icons:i?[i]:[]},l=new SolanaAdapter(t$1?{wallets:t$1}:{});return a(createAppKit({adapters:[l],networks:c,projectId:r,metadata:o,features:{analytics:false,email:false,socials:false}})),l}var _="Wallet not connected.";function X(e,r,n){let{address:a}=useAppKitAccount(),{walletProvider:i}=useAppKitProvider("solana"),t=a??null,c$2=i?.signMessage?.bind(i);return {connected:!!t,account:t,loginWithWallet:(s,o)=>{let l=o??t;return l?c$2?c({client:e,networkID:s,walletAddress:l,signMessage:c$2}):Promise.resolve(c$1("sign","The connected wallet does not support message signing.")):Promise.resolve(c$1("challenge",_))},depositToken:s=>a$1({client:e,adapter:n,titleID:r,...s}),withdrawToken:s=>{let o=s.walletAddress??t;return o?b({client:e,adapter:n,...s,walletAddress:o}):Promise.resolve(b$1("request",_))}}}var $=18e4,ee=9e4;function te(e){try{let n=e?.session?.peer?.metadata?.redirect,a=n?.native||n?.universal;return !a||typeof window>"u"?!1:(window.location.href=a,!0)}catch{return false}}function ne(e,r){return new Promise((n,a)=>{let i=setTimeout(()=>a(new Error("The wallet request timed out.")),r);e.then(t=>{clearTimeout(i),n(t);},t=>{clearTimeout(i),a(t instanceof Error?t:new Error(String(t)));});})}function oe(e){let r="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.":r:r}function re(e){let{client:r,networkID:n,onAuthenticated:a,disabled:i,label:t,style:c$1,autoStart:s}=e,{address:o,isConnected:l}=useAppKitAccount(),{walletProvider:p}=useAppKitProvider("solana"),[q,f]=useState(false),[D,d]=useState(null),[I,y]=useState(false),[K,x]=useState(false),m=useRef(null),N=useRef(0),g=useCallback(()=>{m.current&&clearTimeout(m.current),m.current=null;},[]);useEffect(()=>g,[g]);let k=useRef(false),A=useCallback(async()=>{let w=++N.current,W=()=>N.current===w,B=p?.signMessage?.bind(p);if(!o||!B){d("The connected wallet cannot sign messages."),f(false);return}f(true),d(null);try{x(!0);let u=await ne(c({client:r,networkID:n,walletAddress:o,signMessage:B}),ee);if(!W())return;if(u.ok){a();return}d(u.stage==="sign"?"Signature declined.":u.error??"Wallet sign-in failed.");}catch(u){if(!W())return;console.error("[idosgames/wallet] solana sign-in failed:",u),d(oe(u));}finally{W()&&(f(false),x(false));}},[o,p,r,n,a]),j=useCallback(()=>{te(p)||b$2()?.open();},[p]);useEffect(()=>{!I||!l||!o||!p||(y(false),g(),A());},[I,l,o,p,A,g]);let E=()=>{if(K){j();return}if(d(null),k.current=true,l&&o&&p){A();return}let w=b$2();if(!w){d("Wallet sign-in is not configured for this title.");return}f(true),y(true),g(),m.current=setTimeout(()=>{y(false),f(false),d("No wallet was connected.");},$),w.open();};return useEffect(()=>{!s||k.current||(k.current=true,E());},[s]),jsxs(Fragment,{children:[jsx("button",{type:"button",onClick:E,disabled:i,style:{...ae,...i?{opacity:.6,cursor:"default"}:null,...c$1},children:K?"Waiting for signature \u2014 tap to open wallet":q?"Check your wallet\u2026":l?t??"Sign in with wallet":"Connect wallet"}),D&&jsx("span",{role:"alert",style:ie,children:D})]})}var ae={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},ie={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};export{re as SolanaWalletLogin,J as createSolanaWalletConfig,X as useSolanaBridge};
1
+ import {b,a as a$1,c}from'../chunk-EAKPNSVN.js';import {a,b as b$2}from'../chunk-ZL42KPPC.js';import {u,b as b$1,c as c$1}from'../chunk-OZXERZ5Q.js';export{v as solanaDevnet,u as solanaMainnet}from'../chunk-OZXERZ5Q.js';import {SolanaAdapter}from'@reown/appkit-adapter-solana';import {createAppKit,useAppKitAccount,useAppKitProvider}from'@reown/appkit/react';import {useState,useRef,useCallback,useEffect}from'react';import {jsxs,Fragment,jsx}from'react/jsx-runtime';function J(e){let{walletConnectProjectId:r,appName:n,appUrl:a$1,appIcon:i,wallets:t}=e,c=e.networks??[u],s=a$1??(typeof window<"u"?window.location.origin:""),o={name:n??"iDosGames",description:n??"iDosGames game",url:s,icons:i?[i]:[]},l=new SolanaAdapter(t?{wallets:t}:{});return a(createAppKit({adapters:[l],networks:c,projectId:r,metadata:o,features:{analytics:false,email:false,socials:false}})),l}var _="Wallet not connected.";function X(e,r,n){let{address:a}=useAppKitAccount(),{walletProvider:i}=useAppKitProvider("solana"),t=a??null,c$2=i?.signMessage?.bind(i);return {connected:!!t,account:t,loginWithWallet:(s,o)=>{let l=o??t;return l?c$2?c({client:e,networkID:s,walletAddress:l,signMessage:c$2}):Promise.resolve(c$1("sign","The connected wallet does not support message signing.")):Promise.resolve(c$1("challenge",_))},depositToken:s=>a$1({client:e,adapter:n,titleID:r,...s}),withdrawToken:s=>{let o=s.walletAddress??t;return o?b({client:e,adapter:n,...s,walletAddress:o}):Promise.resolve(b$1("request",_))}}}var $=18e4,ee=9e4;function te(e){try{let n=e?.session?.peer?.metadata?.redirect,a=n?.native||n?.universal;return !a||typeof window>"u"?!1:(window.location.href=a,!0)}catch{return false}}function ne(e,r){return new Promise((n,a)=>{let i=setTimeout(()=>a(new Error("The wallet request timed out.")),r);e.then(t=>{clearTimeout(i),n(t);},t=>{clearTimeout(i),a(t instanceof Error?t:new Error(String(t)));});})}function oe(e){let r="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.":r:r}function re(e){let{client:r,networkID:n,onAuthenticated:a,disabled:i,label:t,style:c$1,autoStart:s}=e,{address:o,isConnected:l}=useAppKitAccount(),{walletProvider:p}=useAppKitProvider("solana"),[q,f]=useState(false),[D,d]=useState(null),[I,y]=useState(false),[K,x]=useState(false),m=useRef(null),N=useRef(0),g=useCallback(()=>{m.current&&clearTimeout(m.current),m.current=null;},[]);useEffect(()=>g,[g]);let k=useRef(false),A=useCallback(async()=>{let w=++N.current,W=()=>N.current===w,B=p?.signMessage?.bind(p);if(!o||!B){d("The connected wallet cannot sign messages."),f(false);return}f(true),d(null);try{x(!0);let u=await ne(c({client:r,networkID:n,walletAddress:o,signMessage:B}),ee);if(!W())return;if(u.ok){a();return}d(u.stage==="sign"?"Signature declined.":u.error??"Wallet sign-in failed.");}catch(u){if(!W())return;console.error("[idosgames/wallet] solana sign-in failed:",u),d(oe(u));}finally{W()&&(f(false),x(false));}},[o,p,r,n,a]),j=useCallback(()=>{te(p)||b$2()?.open();},[p]);useEffect(()=>{!I||!l||!o||!p||(y(false),g(),A());},[I,l,o,p,A,g]);let E=()=>{if(K){j();return}if(d(null),k.current=true,l&&o&&p){A();return}let w=b$2();if(!w){d("Wallet sign-in is not configured for this title.");return}f(true),y(true),g(),m.current=setTimeout(()=>{y(false),f(false),d("No wallet was connected.");},$),w.open();};return useEffect(()=>{!s||k.current||(k.current=true,E());},[s]),jsxs(Fragment,{children:[jsx("button",{type:"button",onClick:E,disabled:i,style:{...ae,...i?{opacity:.6,cursor:"default"}:null,...c$1},children:K?"Waiting for signature \u2014 tap to open wallet":q?"Check your wallet\u2026":l?t??"Sign in with wallet":"Connect wallet"}),D&&jsx("span",{role:"alert",style:ie,children:D})]})}var ae={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},ie={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};export{re as SolanaWalletLogin,J as createSolanaWalletConfig,X as useSolanaBridge};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@idosgames/wallet",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
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.15.0",
73
+ "@idosgames/core": "^0.16.0",
74
74
  "viem": "^2.55.2"
75
75
  },
76
76
  "peerDependencies": {
@@ -1 +0,0 @@
1
- import {e,f,b as b$1,a,g,c}from'./chunk-YJB7QDYQ.js';import {encodeAbiParameters,parseUnits}from'viem';import {normalizeBlockchainCategory}from'@idosgames/core';var b=[{type:"function",name:"depositERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"amount",type:"uint256"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"withdrawERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"amount",type:"uint256"},{name:"burnAmount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{name:"amount",type:"uint256"}]},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC1155",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{name:"amount",type:"uint256"}]},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],C=[{type:"function",name:"withdrawERC1155Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{name:"amount",type:"uint256"}]},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],v=[{type:"function",name:"approve",stateMutability:"nonpayable",inputs:[{name:"spender",type:"address"},{name:"amount",type:"uint256"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"allowance",stateMutability:"view",inputs:[{name:"owner",type:"address"},{name:"spender",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"decimals",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint8"}]},{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]}],I=[{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"}]}],E=[{type:"function",name:"safeTransferFrom",stateMutability:"nonpayable",inputs:[{name:"from",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]}];function D(e,t,n){return encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[e,t,normalizeBlockchainCategory(n)])}async function h(e,t){let{walletClient:n,publicClient:i,account:s}=e,o=await n.writeContract({address:t.address,abi:t.abi,functionName:t.functionName,args:t.args,account:s,chain:n.chain,value:t.value});if((await i.waitForTransactionReceipt({hash:o})).status==="reverted")throw new Error(`On-chain transaction reverted (${o}).`);return o}function x(e){let t=e.RewardPoolAddress;return t||null}async function T(e,t,n,i){return await e.publicClient.readContract({address:t,abi:v,functionName:"allowance",args:[e.account,n]})>=i?null:h(e,{address:t,abi:v,functionName:"approve",args:[n,i]})}async function N(e$1){let{client:t,clients:n,network:i,tokenAddress:s,amount:o,titleID:u,category:c}=e$1;if(e())return f("approve");let r=t.auth.context?.userID;if(!r)return b$1("approve","Not logged in.");let l=x(i);if(!l)return b$1("approve","Network has no RewardPoolAddress.");if(o<=0n)return b$1("approve","Amount must be positive.");try{await T(n,s,l,o);}catch(d){return b$1("approve",a(d))}let p;try{p=await h(n,{address:l,abi:b,functionName:"depositERC20",args:[s,o,r,u,c??""]});}catch(d){return b$1("deposit-onchain",a(d))}let m=await t.blockchain.depositToken(i.NetworkID??"",p);return m.ok?{ok:true,onChainTxHash:p,data:m.data}:b$1("report",m.error,{onChainTxHash:p})}async function S(e$1){let{clients:t,poolAddress:n,tokenAddress:i,amount:s,userID:o,titleID:u,category:c}=e$1;if(e())return f("approve");if(!o)return b$1("approve","userID is required.");if(s<=0n)return b$1("approve","Amount must be positive.");try{await T(t,i,n,s);}catch(r){return b$1("approve",a(r))}try{let r=await h(t,{address:n,abi:b,functionName:"depositERC20",args:[i,s,o,u,c??""]});return {ok:!0,onChainTxHash:r,data:{txHash:r}}}catch(r){return b$1("deposit-onchain",a(r))}}async function O(e$1){let{client:t,clients:n,network:i,nftContractAddress:s,tokenId:o,amount:u,titleID:c,category:r}=e$1;if(e())return f("deposit-onchain");let l=t.auth.context?.userID;if(!l)return b$1("deposit-onchain","Not logged in.");let p=x(i);if(!p)return b$1("deposit-onchain","Network has no RewardPoolAddress.");if(u<=0n)return b$1("deposit-onchain","Amount must be positive.");let m=D(l,c,r),d;try{d=await h(n,{address:s,abi:I,functionName:"safeTransferFrom",args:[n.account,p,o,u,m]});}catch(A){return b$1("deposit-onchain",a(A))}let y=await t.blockchain.depositNFT(i.NetworkID??"",d);return y.ok?{ok:true,onChainTxHash:d,data:y.data}:b$1("report",y.error,{onChainTxHash:d})}async function q(e$1){let{client:t,clients:n,network:i,nftContractAddress:s,tokenId:o,titleID:u,category:c}=e$1;if(e())return f("deposit-onchain");let r=t.auth.context?.userID;if(!r)return b$1("deposit-onchain","Not logged in.");let l=x(i);if(!l)return b$1("deposit-onchain","Network has no RewardPoolAddress.");let p=D(r,u,c),m;try{m=await h(n,{address:s,abi:E,functionName:"safeTransferFrom",args:[n.account,l,o,p]});}catch(y){return b$1("deposit-onchain",a(y))}let d=await t.blockchain.depositNFT(i.NetworkID??"",m);return d.ok?{ok:true,onChainTxHash:m,data:d.data}:b$1("report",d.error,{onChainTxHash:m})}function P(e){return (e.Splits??[]).map(t=>({to:t.To,amount:BigInt(t.Amount??"0")}))}async function B(e,t){return h(e,{address:t.ContractAddress,abi:b,functionName:"withdrawERC20",args:[t.TokenAddress,t.WalletAddress,BigInt(t.Amount??"0"),BigInt(t.BurnAmount??"0"),P(t),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function R(e,t){return h(e,{address:t.ContractAddress,abi:C,functionName:"withdrawERC1155Mint",args:[t.TokenAddress,t.WalletAddress,BigInt(t.TokenId??"0"),BigInt(t.Amount??"0"),P(t),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function L(e,t){return h(e,{address:t.ContractAddress,abi:C,functionName:"withdrawERC721Mint",args:[t.TokenAddress,t.WalletAddress,BigInt(t.TokenId??"0"),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function U(e$1){let{client:t,clients:n,currencyID:i,networkID:s,walletAddress:o,amount:u,category:c}=e$1;if(e())return f("request");let r=await t.blockchain.requestTokenWithdrawal(i,s,o,u,c);if(!r.ok)return b$1("request",r.error);let l=r.data.EvmSignature,p=r.data.TitleTransactionID??void 0;if(!l)return b$1("request","Withdrawal response carried no EVM signature.",{titleTransactionID:p});let m;try{m=await B(n,l);}catch(y){return b$1("withdraw-onchain",a(y),{titleTransactionID:p})}let d=await H(t,p,m);return d.ok?{ok:true,onChainTxHash:m,data:r.data}:d}async function $(e$1){let{client:t,clients:n,itemID:i,networkID:s,walletAddress:o,amount:u,category:c}=e$1;if(e())return f("request");let r=await t.blockchain.requestNFTWithdrawal(i,s,o,u,c);if(!r.ok)return b$1("request",r.error);let l=r.data.EvmSignature,p=r.data.TitleTransactionID??void 0;if(!l)return b$1("request","Withdrawal response carried no EVM signature.",{titleTransactionID:p});let m;try{m=await R(n,l);}catch(y){return b$1("withdraw-onchain",a(y),{titleTransactionID:p})}let d=await H(t,p,m);return d.ok?{ok:true,onChainTxHash:m,data:r.data}:d}async function H(e,t,n){if(!t)return b$1("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let i=await e.blockchain.confirmWithdrawal(t,n);return i.ok?{ok:true,onChainTxHash:n,data:i.data}:b$1("confirm",i.error,{onChainTxHash:n,titleTransactionID:t})}async function V(e$1){let{client:t,clients:n,networkID:i}=e$1;if(e())return g("challenge");let s=e$1.walletAddress??n.account,o=await t.auth.requestWalletChallenge(s,i);if(!o.ok)return c("challenge",o.error);let u;try{u=await n.walletClient.signMessage({account:n.account,message:o.data.Message});}catch(r){return c("sign",a(r))}let c$1=await t.auth.loginWithWallet(s,i,u);return c$1.ok?{ok:true,data:c$1.data}:c("login",c$1.error)}async function j(e$1){let{client:t,clients:n,network:i,tokenAddress:s,decimals:o,titleID:u,shortfall:c,completePurchase:r,bufferRatio:l=0,category:p}=e$1;if(e())return f("approve");if(c.missing<=0)return b$1("approve","Nothing to deposit.");let m=c.missing*(1+Math.max(0,l)),d;try{d=parseUnits(J(m,o),o);}catch(F){return b$1("approve",a(F))}let y=await N({client:t,clients:n,network:i,tokenAddress:s,amount:d,titleID:u,category:p});if(!y.ok)return y;let A=await r();return A.ok?{ok:true,onChainTxHash:y.onChainTxHash,data:A.data}:b$1("report",A.error,{onChainTxHash:y.onChainTxHash})}function J(e,t){return e.toFixed(Math.min(t,18)).replace(/0+$/,"").replace(/\.$/,"")||"0"}export{b as a,v as b,I as c,E as d,D as e,h as f,T as g,N as h,S as i,O as j,q as k,B as l,R as m,L as n,U as o,$ as p,V as q,j as r};
@@ -1 +0,0 @@
1
- import {e,f,b,a,g,c}from'./chunk-YJB7QDYQ.js';import {normalizeBlockchainCategory}from'@idosgames/core';async function T(i){let{client:t,adapter:n,network:g,mint:m,amountRaw:o,titleID:d,category:s}=i;if(e())return f("deposit-onchain");let e$1=t.auth.context?.userID;if(!e$1)return b("deposit-onchain","Not logged in.");if(o<=0n)return b("deposit-onchain","Amount must be positive.");let l;try{l=await n.depositSpl({mint:m,amountRaw:o,userID:e$1,titleID:d,category:normalizeBlockchainCategory(s)});}catch(c){return b("deposit-onchain",a(c))}let r=await t.blockchain.depositToken(g.NetworkID??"",l);return r.ok?{ok:true,onChainTxHash:l,data:r.data}:b("report",r.error,{onChainTxHash:l})}async function D(i){let{client:t,adapter:n,currencyID:g,networkID:m,walletAddress:o,amount:d,category:s}=i;if(e())return f("request");let e$1=await t.blockchain.requestTokenWithdrawal(g,m,o,d,s);if(!e$1.ok)return b("request",e$1.error);let l=e$1.data.SolanaSignature,r=e$1.data.TitleTransactionID??void 0;if(!l)return b("request","Withdrawal response carried no Solana signature.",{titleTransactionID:r});let c;try{c=await n.submitWithdrawal(l);}catch(S){return b("withdraw-onchain",a(S),{titleTransactionID:r})}if(!r)return b("confirm","Missing TitleTransactionID.",{onChainTxHash:c});let w=await t.blockchain.confirmWithdrawal(r,c);return w.ok?{ok:true,onChainTxHash:c,data:e$1.data}:b("confirm",w.error,{onChainTxHash:c,titleTransactionID:r})}async function W(i){let{client:t,networkID:n,walletAddress:g$1,signMessage:m}=i;if(e())return g("challenge");let o=await t.auth.requestWalletChallenge(g$1,n);if(!o.ok)return c("challenge",o.error);let d;try{let e=await m(new TextEncoder().encode(o.data.Message));d=I(e);}catch(e){return c("sign",a(e))}let s=await t.auth.loginWithWallet(g$1,n,d);return s.ok?{ok:true,data:s.data}:c("login",s.error)}function I(i){let t="0x";for(let n of i)t+=n.toString(16).padStart(2,"0");return t}export{T as a,D as b,W as c};
@@ -1,2 +0,0 @@
1
- import {BaseError}from'viem';function E(e){return e instanceof BaseError?e.shortMessage:e instanceof Error?e.message:String(e)}function n(e,t,a){return {ok:false,stage:e,error:t,...a}}function r(e,t){return {ok:false,stage:e,error:t}}var o="WALLET_USE_SITE_PANEL";function k(){if(typeof window>"u")return false;try{return window.self!==window.top}catch{return true}}function w(e){return n(e,o)}function S(e){return r(e,o)}var s=["https://idosgames.com","https://www.idosgames.com"];function C(e){if(typeof window>"u")return ()=>{};let t=a=>{s.includes(a.origin)&&a.data?.type==="IDOS_WALLET_BALANCE_CHANGED"&&e();};return window.addEventListener("message",t),()=>window.removeEventListener("message",t)}var l={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"}}},c={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"}}},u={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"}}},d={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"}}},g={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"}}},h={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"}}},f={mainnet:l,bsc:p,polygon:c,base:u,arbitrum:m,optimism:d,sepolia:g,polygonAmoy:h};function v(e){return Object.values(f).find(t=>t.id===e)}function B(e){return {...e,chainNamespace:"eip155",caipNetworkId:`eip155:${e.id}`}}var N={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"},T={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"};
2
- export{E as a,n as b,r as c,o as d,k as e,w as f,S as g,C as h,l as i,p as j,c as k,u as l,m,d as n,g as o,h as p,f as q,v as r,B as s,N as t,T as u};