@idosgames/wallet 0.1.1 → 0.1.3

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.
@@ -0,0 +1 @@
1
+ import {BaseError,encodeAbiParameters}from'viem';import {normalizeBlockchainCategory}from'@idosgames/core';function g(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 w(e,t){return {ok:false,stage:e,error:t}}var h=[{type:"function",name:"depositERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"amount",type:"uint256"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"withdrawERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"amount",type:"uint256"},{name:"burnAmount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC1155",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],D=[{type:"function",name:"withdrawERC1155Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],k=[{type:"function",name:"approve",stateMutability:"nonpayable",inputs:[{name:"spender",type:"address"},{name:"amount",type:"uint256"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"allowance",stateMutability:"view",inputs:[{name:"owner",type:"address"},{name:"spender",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"decimals",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint8"}]},{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]}],A=[{type:"function",name:"safeTransferFrom",stateMutability:"nonpayable",inputs:[{name:"from",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]},{type:"function",name:"isApprovedForAll",stateMutability:"view",inputs:[{name:"account",type:"address"},{name:"operator",type:"address"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"setApprovalForAll",stateMutability:"nonpayable",inputs:[{name:"operator",type:"address"},{name:"approved",type:"bool"}],outputs:[]},{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"},{name:"id",type:"uint256"}],outputs:[{name:"",type:"uint256"}]}],x=[{type:"function",name:"safeTransferFrom",stateMutability:"nonpayable",inputs:[{name:"from",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]}];function b(e,t,n){return encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[e,t,normalizeBlockchainCategory(n)])}async function f(e,t){let{walletClient:n,publicClient:i,account:c}=e,o=await n.writeContract({address:t.address,abi:t.abi,functionName:t.functionName,args:t.args,account:c,chain:n.chain,value:t.value});if((await i.waitForTransactionReceipt({hash:o})).status==="reverted")throw new Error(`On-chain transaction reverted (${o}).`);return o}function I(e){let t=e.RewardPoolAddress;return t||null}async function T(e,t,n,i){return await e.publicClient.readContract({address:t,abi:k,functionName:"allowance",args:[e.account,n]})>=i?null:f(e,{address:t,abi:k,functionName:"approve",args:[n,i]})}async function S(e){let{client:t,clients:n,network:i,tokenAddress:c,amount:o,titleID:p,category:u}=e,r=t.auth.context?.userID;if(!r)return a("approve","Not logged in.");let d=I(i);if(!d)return a("approve","Network has no RewardPoolAddress.");if(o<=0n)return a("approve","Amount must be positive.");try{await T(n,c,d,o);}catch(m){return a("approve",g(m))}let s;try{s=await f(n,{address:d,abi:h,functionName:"depositERC20",args:[c,o,r,p,u??""]});}catch(m){return a("deposit-onchain",g(m))}let l=await t.blockchain.depositToken(i.NetworkID??"",s);return l.ok?{ok:true,onChainTxHash:s,data:l.data}:a("report",l.error,{onChainTxHash:s})}async function R(e){let{client:t,clients:n,network:i,nftContractAddress:c,tokenId:o,amount:p,titleID:u,category:r}=e,d=t.auth.context?.userID;if(!d)return a("deposit-onchain","Not logged in.");let s=I(i);if(!s)return a("deposit-onchain","Network has no RewardPoolAddress.");if(p<=0n)return a("deposit-onchain","Amount must be positive.");let l=b(d,u,r),m;try{m=await f(n,{address:c,abi:A,functionName:"safeTransferFrom",args:[n.account,s,o,p,l]});}catch(E){return a("deposit-onchain",g(E))}let y=await t.blockchain.depositNFT(i.NetworkID??"",m);return y.ok?{ok:true,onChainTxHash:m,data:y.data}:a("report",y.error,{onChainTxHash:m})}async function H(e){let{client:t,clients:n,network:i,nftContractAddress:c,tokenId:o,titleID:p,category:u}=e,r=t.auth.context?.userID;if(!r)return a("deposit-onchain","Not logged in.");let d=I(i);if(!d)return a("deposit-onchain","Network has no RewardPoolAddress.");let s=b(r,p,u),l;try{l=await f(n,{address:c,abi:x,functionName:"safeTransferFrom",args:[n.account,d,o,s]});}catch(y){return a("deposit-onchain",g(y))}let m=await t.blockchain.depositNFT(i.NetworkID??"",l);return m.ok?{ok:true,onChainTxHash:l,data:m.data}:a("report",m.error,{onChainTxHash:l})}async function C(e,t){return f(e,{address:t.ContractAddress,abi:h,functionName:"withdrawERC20",args:[t.TokenAddress,t.WalletAddress,BigInt(t.Amount??"0"),BigInt(t.BurnAmount??"0"),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function W(e,t){return f(e,{address:t.ContractAddress,abi:D,functionName:"withdrawERC1155Mint",args:[t.TokenAddress,t.WalletAddress,BigInt(t.TokenId??"0"),BigInt(t.Amount??"0"),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function M(e,t){return f(e,{address:t.ContractAddress,abi:D,functionName:"withdrawERC721Mint",args:[t.TokenAddress,t.WalletAddress,BigInt(t.TokenId??"0"),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function F(e){let{client:t,clients:n,currencyID:i,networkID:c,walletAddress:o,amount:p,category:u}=e,r=await t.blockchain.requestTokenWithdrawal(i,c,o,p,u);if(!r.ok)return a("request",r.error);let d=r.data.EvmSignature,s=r.data.TitleTransactionID??void 0;if(!d)return a("request","Withdrawal response carried no EVM signature.",{titleTransactionID:s});let l;try{l=await C(n,d);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:s})}let m=await v(t,s,l);return m.ok?{ok:true,onChainTxHash:l,data:r.data}:m}async function L(e){let{client:t,clients:n,itemID:i,networkID:c,walletAddress:o,amount:p,category:u}=e,r=await t.blockchain.requestNFTWithdrawal(i,c,o,p,u);if(!r.ok)return a("request",r.error);let d=r.data.EvmSignature,s=r.data.TitleTransactionID??void 0;if(!d)return a("request","Withdrawal response carried no EVM signature.",{titleTransactionID:s});let l;try{l=await W(n,d);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:s})}let m=await v(t,s,l);return m.ok?{ok:true,onChainTxHash:l,data:r.data}:m}async function v(e,t,n){if(!t)return a("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let i=await e.blockchain.confirmWithdrawal(t,n);return i.ok?{ok:true,onChainTxHash:n,data:i.data}:a("confirm",i.error,{onChainTxHash:n,titleTransactionID:t})}async function G(e){let{client:t,clients:n,networkID:i}=e,c=e.walletAddress??n.account,o=await t.auth.requestWalletChallenge(c,i);if(!o.ok)return w("challenge",o.error);let p;try{p=await n.walletClient.signMessage({account:n.account,message:o.data.Message});}catch(r){return w("sign",g(r))}let u=await t.auth.loginWithWallet(c,i,p);return u.ok?{ok:true,data:u.data}:w("login",u.error)}async function U(e){let{client:t,adapter:n,network:i,mint:c,amountRaw:o,titleID:p,category:u}=e,r=t.auth.context?.userID;if(!r)return a("deposit-onchain","Not logged in.");if(o<=0n)return a("deposit-onchain","Amount must be positive.");let d;try{d=await n.depositSpl({mint:c,amountRaw:o,userID:r,titleID:p,category:normalizeBlockchainCategory(u)});}catch(l){return a("deposit-onchain",g(l))}let s=await t.blockchain.depositToken(i.NetworkID??"",d);return s.ok?{ok:true,onChainTxHash:d,data:s.data}:a("report",s.error,{onChainTxHash:d})}async function O(e){let{client:t,adapter:n,currencyID:i,networkID:c,walletAddress:o,amount:p,category:u}=e,r=await t.blockchain.requestTokenWithdrawal(i,c,o,p,u);if(!r.ok)return a("request",r.error);let d=r.data.SolanaSignature,s=r.data.TitleTransactionID??void 0;if(!d)return a("request","Withdrawal response carried no Solana signature.",{titleTransactionID:s});let l;try{l=await n.submitWithdrawal(d);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:s})}if(!s)return a("confirm","Missing TitleTransactionID.",{onChainTxHash:l});let m=await t.blockchain.confirmWithdrawal(s,l);return m.ok?{ok:true,onChainTxHash:l,data:r.data}:a("confirm",m.error,{onChainTxHash:l,titleTransactionID:s})}async function z(e){let{client:t,networkID:n,walletAddress:i,signMessage:c}=e,o=await t.auth.requestWalletChallenge(i,n);if(!o.ok)return w("challenge",o.error);let p;try{let r=await c(new TextEncoder().encode(o.data.Message));p=V(r);}catch(r){return w("sign",g(r))}let u=await t.auth.loginWithWallet(i,n,p);return u.ok?{ok:true,data:u.data}:w("login",u.error)}function V(e){let t="0x";for(let n of e)t+=n.toString(16).padStart(2,"0");return t}export{g as a,a as b,w as c,h as d,k as e,A as f,x as g,b as h,f as i,T as j,S as k,R as l,H as m,C as n,W as o,M as p,F as q,L as r,G as s,U as t,O as u,z as v};
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- 'use strict';var viem=require('viem'),core=require('@idosgames/core');function g(e){return e instanceof viem.BaseError?e.shortMessage:e instanceof Error?e.message:String(e)}function a(e,t,n){return {ok:false,stage:e,error:t,...n}}function w(e,t){return {ok:false,stage:e,error:t}}var h=[{type:"function",name:"depositERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"amount",type:"uint256"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"withdrawERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"amount",type:"uint256"},{name:"burnAmount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC1155",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],D=[{type:"function",name:"withdrawERC1155Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],k=[{type:"function",name:"approve",stateMutability:"nonpayable",inputs:[{name:"spender",type:"address"},{name:"amount",type:"uint256"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"allowance",stateMutability:"view",inputs:[{name:"owner",type:"address"},{name:"spender",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"decimals",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint8"}]},{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]}],x=[{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"}]}],A=[{type:"function",name:"safeTransferFrom",stateMutability:"nonpayable",inputs:[{name:"from",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]}];function b(e,t,n){return viem.encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[e,t,core.normalizeBlockchainCategory(n)])}async function f(e,t){let{walletClient:n,publicClient:i,account:c}=e,o=await n.writeContract({address:t.address,abi:t.abi,functionName:t.functionName,args:t.args,account:c,chain:n.chain,value:t.value});if((await i.waitForTransactionReceipt({hash:o})).status==="reverted")throw new Error(`On-chain transaction reverted (${o}).`);return o}function I(e){let t=e.PlatformPoolAddress;return t||null}async function T(e,t,n,i){return await e.publicClient.readContract({address:t,abi:k,functionName:"allowance",args:[e.account,n]})>=i?null:f(e,{address:t,abi:k,functionName:"approve",args:[n,i]})}async function S(e){let{client:t,clients:n,network:i,tokenAddress:c,amount:o,titleID:p,category:u}=e,r=t.auth.context?.userID;if(!r)return a("approve","Not logged in.");let d=I(i);if(!d)return a("approve","Network has no PlatformPoolAddress.");if(o<=0n)return a("approve","Amount must be positive.");try{await T(n,c,d,o);}catch(m){return a("approve",g(m))}let s;try{s=await f(n,{address:d,abi:h,functionName:"depositERC20",args:[c,o,r,p,u??""]});}catch(m){return a("deposit-onchain",g(m))}let l=await t.blockchain.depositToken(i.NetworkID??"",s);return l.ok?{ok:true,onChainTxHash:s,data:l.data}:a("report",l.error,{onChainTxHash:s})}async function R(e){let{client:t,clients:n,network:i,nftContractAddress:c,tokenId:o,amount:p,titleID:u,category:r}=e,d=t.auth.context?.userID;if(!d)return a("deposit-onchain","Not logged in.");let s=I(i);if(!s)return a("deposit-onchain","Network has no PlatformPoolAddress.");if(p<=0n)return a("deposit-onchain","Amount must be positive.");let l=b(d,u,r),m;try{m=await f(n,{address:c,abi:x,functionName:"safeTransferFrom",args:[n.account,s,o,p,l]});}catch(E){return a("deposit-onchain",g(E))}let y=await t.blockchain.depositNFT(i.NetworkID??"",m);return y.ok?{ok:true,onChainTxHash:m,data:y.data}:a("report",y.error,{onChainTxHash:m})}async function F(e){let{client:t,clients:n,network:i,nftContractAddress:c,tokenId:o,titleID:p,category:u}=e,r=t.auth.context?.userID;if(!r)return a("deposit-onchain","Not logged in.");let d=I(i);if(!d)return a("deposit-onchain","Network has no PlatformPoolAddress.");let s=b(r,p,u),l;try{l=await f(n,{address:c,abi:A,functionName:"safeTransferFrom",args:[n.account,d,o,s]});}catch(y){return a("deposit-onchain",g(y))}let m=await t.blockchain.depositNFT(i.NetworkID??"",l);return m.ok?{ok:true,onChainTxHash:l,data:m.data}:a("report",m.error,{onChainTxHash:l})}async function C(e,t){return f(e,{address:t.ContractAddress,abi:h,functionName:"withdrawERC20",args:[t.TokenAddress,t.WalletAddress,BigInt(t.Amount??"0"),BigInt(t.BurnAmount??"0"),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function W(e,t){return f(e,{address:t.ContractAddress,abi:D,functionName:"withdrawERC1155Mint",args:[t.TokenAddress,t.WalletAddress,BigInt(t.TokenId??"0"),BigInt(t.Amount??"0"),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function M(e,t){return f(e,{address:t.ContractAddress,abi:D,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 H(e){let{client:t,clients:n,currencyID:i,networkID:c,walletAddress:o,amount:p,category:u}=e,r=await t.blockchain.requestTokenWithdrawal(i,c,o,p,u);if(!r.ok)return a("request",r.error);let d=r.data.EvmSignature,s=r.data.TitleTransactionID??void 0;if(!d)return a("request","Withdrawal response carried no EVM signature.",{titleTransactionID:s});let l;try{l=await C(n,d);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:s})}let m=await v(t,s,l);return m.ok?{ok:true,onChainTxHash:l,data:r.data}:m}async function L(e){let{client:t,clients:n,itemID:i,networkID:c,walletAddress:o,amount:p,category:u}=e,r=await t.blockchain.requestNFTWithdrawal(i,c,o,p,u);if(!r.ok)return a("request",r.error);let d=r.data.EvmSignature,s=r.data.TitleTransactionID??void 0;if(!d)return a("request","Withdrawal response carried no EVM signature.",{titleTransactionID:s});let l;try{l=await W(n,d);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:s})}let m=await v(t,s,l);return m.ok?{ok:true,onChainTxHash:l,data:r.data}:m}async function v(e,t,n){if(!t)return a("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let i=await e.blockchain.confirmWithdrawal(t,n);return i.ok?{ok:true,onChainTxHash:n,data:i.data}:a("confirm",i.error,{onChainTxHash:n,titleTransactionID:t})}async function G(e){let{client:t,clients:n,networkID:i}=e,c=e.walletAddress??n.account,o=await t.auth.requestWalletChallenge(c,i);if(!o.ok)return w("challenge",o.error);let p;try{p=await n.walletClient.signMessage({account:n.account,message:o.data.Message});}catch(r){return w("sign",g(r))}let u=await t.auth.loginWithWallet(c,i,p);return u.ok?{ok:true,data:u.data}:w("login",u.error)}async function U(e){let{client:t,adapter:n,network:i,mint:c,amountRaw:o,titleID:p,category:u}=e,r=t.auth.context?.userID;if(!r)return a("deposit-onchain","Not logged in.");if(o<=0n)return a("deposit-onchain","Amount must be positive.");let d;try{d=await n.depositSpl({mint:c,amountRaw:o,userID:r,titleID:p,category:core.normalizeBlockchainCategory(u)});}catch(l){return a("deposit-onchain",g(l))}let s=await t.blockchain.depositToken(i.NetworkID??"",d);return s.ok?{ok:true,onChainTxHash:d,data:s.data}:a("report",s.error,{onChainTxHash:d})}async function O(e){let{client:t,adapter:n,currencyID:i,networkID:c,walletAddress:o,amount:p,category:u}=e,r=await t.blockchain.requestTokenWithdrawal(i,c,o,p,u);if(!r.ok)return a("request",r.error);let d=r.data.SolanaSignature,s=r.data.TitleTransactionID??void 0;if(!d)return a("request","Withdrawal response carried no Solana signature.",{titleTransactionID:s});let l;try{l=await n.submitWithdrawal(d);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:s})}if(!s)return a("confirm","Missing TitleTransactionID.",{onChainTxHash:l});let m=await t.blockchain.confirmWithdrawal(s,l);return m.ok?{ok:true,onChainTxHash:l,data:r.data}:a("confirm",m.error,{onChainTxHash:l,titleTransactionID:s})}async function z(e){let{client:t,networkID:n,walletAddress:i,signMessage:c}=e,o=await t.auth.requestWalletChallenge(i,n);if(!o.ok)return w("challenge",o.error);let p;try{let r=await c(new TextEncoder().encode(o.data.Message));p=V(r);}catch(r){return w("sign",g(r))}let u=await t.auth.loginWithWallet(i,n,p);return u.ok?{ok:true,data:u.data}:w("login",u.error)}function V(e){let t="0x";for(let n of e)t+=n.toString(16).padStart(2,"0");return t}exports.bridgeFail=a;exports.depositNftEvm=R;exports.depositNftEvm721=F;exports.depositTokenEvm=S;exports.depositTokenSolana=U;exports.encodeNftDepositData=b;exports.ensureErc20Allowance=T;exports.erc1155Abi=x;exports.erc20Abi=k;exports.erc721Abi=A;exports.loginWithWalletEvm=G;exports.loginWithWalletSolana=z;exports.rewardPoolAbi=h;exports.submitEvmNftWithdrawal=W;exports.submitEvmNftWithdrawal721=M;exports.submitEvmTokenWithdrawal=C;exports.toErrorMessage=g;exports.walletLoginFail=w;exports.withdrawNftEvm=L;exports.withdrawTokenEvm=H;exports.withdrawTokenSolana=O;exports.writeAndWait=f;
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 h=[{type:"function",name:"depositERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"amount",type:"uint256"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"withdrawERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"amount",type:"uint256"},{name:"burnAmount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC1155",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],D=[{type:"function",name:"withdrawERC1155Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],k=[{type:"function",name:"approve",stateMutability:"nonpayable",inputs:[{name:"spender",type:"address"},{name:"amount",type:"uint256"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"allowance",stateMutability:"view",inputs:[{name:"owner",type:"address"},{name:"spender",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"decimals",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint8"}]},{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]}],x=[{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"}]}],A=[{type:"function",name:"safeTransferFrom",stateMutability:"nonpayable",inputs:[{name:"from",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]}];function b(t,e,n){return viem.encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[t,e,core.normalizeBlockchainCategory(n)])}async function f(t,e){let{walletClient:n,publicClient:i,account:c}=t,o=await n.writeContract({address:e.address,abi:e.abi,functionName:e.functionName,args:e.args,account:c,chain:n.chain,value:e.value});if((await i.waitForTransactionReceipt({hash:o})).status==="reverted")throw new Error(`On-chain transaction reverted (${o}).`);return o}function I(t){let e=t.RewardPoolAddress;return e||null}async function T(t,e,n,i){return await t.publicClient.readContract({address:e,abi:k,functionName:"allowance",args:[t.account,n]})>=i?null:f(t,{address:e,abi:k,functionName:"approve",args:[n,i]})}async function P(t){let{client:e,clients:n,network:i,tokenAddress:c,amount:o,titleID:p,category:u}=t,r=e.auth.context?.userID;if(!r)return a("approve","Not logged in.");let d=I(i);if(!d)return a("approve","Network has no RewardPoolAddress.");if(o<=0n)return a("approve","Amount must be positive.");try{await T(n,c,d,o);}catch(m){return a("approve",g(m))}let s;try{s=await f(n,{address:d,abi:h,functionName:"depositERC20",args:[c,o,r,p,u??""]});}catch(m){return a("deposit-onchain",g(m))}let l=await e.blockchain.depositToken(i.NetworkID??"",s);return l.ok?{ok:true,onChainTxHash:s,data:l.data}:a("report",l.error,{onChainTxHash:s})}async function R(t){let{client:e,clients:n,network:i,nftContractAddress:c,tokenId:o,amount:p,titleID:u,category:r}=t,d=e.auth.context?.userID;if(!d)return a("deposit-onchain","Not logged in.");let s=I(i);if(!s)return a("deposit-onchain","Network has no RewardPoolAddress.");if(p<=0n)return a("deposit-onchain","Amount must be positive.");let l=b(d,u,r),m;try{m=await f(n,{address:c,abi:x,functionName:"safeTransferFrom",args:[n.account,s,o,p,l]});}catch(E){return a("deposit-onchain",g(E))}let y=await e.blockchain.depositNFT(i.NetworkID??"",m);return y.ok?{ok:true,onChainTxHash:m,data:y.data}:a("report",y.error,{onChainTxHash:m})}async function F(t){let{client:e,clients:n,network:i,nftContractAddress:c,tokenId:o,titleID:p,category:u}=t,r=e.auth.context?.userID;if(!r)return a("deposit-onchain","Not logged in.");let d=I(i);if(!d)return a("deposit-onchain","Network has no RewardPoolAddress.");let s=b(r,p,u),l;try{l=await f(n,{address:c,abi:A,functionName:"safeTransferFrom",args:[n.account,d,o,s]});}catch(y){return a("deposit-onchain",g(y))}let m=await e.blockchain.depositNFT(i.NetworkID??"",l);return m.ok?{ok:true,onChainTxHash:l,data:m.data}:a("report",m.error,{onChainTxHash:l})}async function C(t,e){return f(t,{address:e.ContractAddress,abi:h,functionName:"withdrawERC20",args:[e.TokenAddress,e.WalletAddress,BigInt(e.Amount??"0"),BigInt(e.BurnAmount??"0"),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function W(t,e){return f(t,{address:e.ContractAddress,abi:D,functionName:"withdrawERC1155Mint",args:[e.TokenAddress,e.WalletAddress,BigInt(e.TokenId??"0"),BigInt(e.Amount??"0"),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function M(t,e){return f(t,{address:e.ContractAddress,abi:D,functionName:"withdrawERC721Mint",args:[e.TokenAddress,e.WalletAddress,BigInt(e.TokenId??"0"),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function H(t){let{client:e,clients:n,currencyID:i,networkID:c,walletAddress:o,amount:p,category:u}=t,r=await e.blockchain.requestTokenWithdrawal(i,c,o,p,u);if(!r.ok)return a("request",r.error);let d=r.data.EvmSignature,s=r.data.TitleTransactionID??void 0;if(!d)return a("request","Withdrawal response carried no EVM signature.",{titleTransactionID:s});let l;try{l=await C(n,d);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:s})}let m=await v(e,s,l);return m.ok?{ok:true,onChainTxHash:l,data:r.data}:m}async function L(t){let{client:e,clients:n,itemID:i,networkID:c,walletAddress:o,amount:p,category:u}=t,r=await e.blockchain.requestNFTWithdrawal(i,c,o,p,u);if(!r.ok)return a("request",r.error);let d=r.data.EvmSignature,s=r.data.TitleTransactionID??void 0;if(!d)return a("request","Withdrawal response carried no EVM signature.",{titleTransactionID:s});let l;try{l=await W(n,d);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:s})}let m=await v(e,s,l);return m.ok?{ok:true,onChainTxHash:l,data:r.data}:m}async function v(t,e,n){if(!e)return a("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let i=await t.blockchain.confirmWithdrawal(e,n);return i.ok?{ok:true,onChainTxHash:n,data:i.data}:a("confirm",i.error,{onChainTxHash:n,titleTransactionID:e})}async function G(t){let{client:e,clients:n,networkID:i}=t,c=t.walletAddress??n.account,o=await e.auth.requestWalletChallenge(c,i);if(!o.ok)return w("challenge",o.error);let p;try{p=await n.walletClient.signMessage({account:n.account,message:o.data.Message});}catch(r){return w("sign",g(r))}let u=await e.auth.loginWithWallet(c,i,p);return u.ok?{ok:true,data:u.data}:w("login",u.error)}async function U(t){let{client:e,adapter:n,network:i,mint:c,amountRaw:o,titleID:p,category:u}=t,r=e.auth.context?.userID;if(!r)return a("deposit-onchain","Not logged in.");if(o<=0n)return a("deposit-onchain","Amount must be positive.");let d;try{d=await n.depositSpl({mint:c,amountRaw:o,userID:r,titleID:p,category:core.normalizeBlockchainCategory(u)});}catch(l){return a("deposit-onchain",g(l))}let s=await e.blockchain.depositToken(i.NetworkID??"",d);return s.ok?{ok:true,onChainTxHash:d,data:s.data}:a("report",s.error,{onChainTxHash:d})}async function O(t){let{client:e,adapter:n,currencyID:i,networkID:c,walletAddress:o,amount:p,category:u}=t,r=await e.blockchain.requestTokenWithdrawal(i,c,o,p,u);if(!r.ok)return a("request",r.error);let d=r.data.SolanaSignature,s=r.data.TitleTransactionID??void 0;if(!d)return a("request","Withdrawal response carried no Solana signature.",{titleTransactionID:s});let l;try{l=await n.submitWithdrawal(d);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:s})}if(!s)return a("confirm","Missing TitleTransactionID.",{onChainTxHash:l});let m=await e.blockchain.confirmWithdrawal(s,l);return m.ok?{ok:true,onChainTxHash:l,data:r.data}:a("confirm",m.error,{onChainTxHash:l,titleTransactionID:s})}async function z(t){let{client:e,networkID:n,walletAddress:i,signMessage:c}=t,o=await e.auth.requestWalletChallenge(i,n);if(!o.ok)return w("challenge",o.error);let p;try{let r=await c(new TextEncoder().encode(o.data.Message));p=V(r);}catch(r){return w("sign",g(r))}let u=await e.auth.loginWithWallet(i,n,p);return u.ok?{ok:true,data:u.data}:w("login",u.error)}function V(t){let e="0x";for(let n of t)e+=n.toString(16).padStart(2,"0");return e}exports.bridgeFail=a;exports.depositNftEvm=R;exports.depositNftEvm721=F;exports.depositTokenEvm=P;exports.depositTokenSolana=U;exports.encodeNftDepositData=b;exports.ensureErc20Allowance=T;exports.erc1155Abi=x;exports.erc20Abi=k;exports.erc721Abi=A;exports.loginWithWalletEvm=G;exports.loginWithWalletSolana=z;exports.rewardPoolAbi=h;exports.submitEvmNftWithdrawal=W;exports.submitEvmNftWithdrawal721=M;exports.submitEvmTokenWithdrawal=C;exports.toErrorMessage=g;exports.walletLoginFail=w;exports.withdrawNftEvm=L;exports.withdrawTokenEvm=H;exports.withdrawTokenSolana=O;exports.writeAndWait=f;
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- export{b as bridgeFail,l as depositNftEvm,m as depositNftEvm721,k as depositTokenEvm,t as depositTokenSolana,h as encodeNftDepositData,j as ensureErc20Allowance,f as erc1155Abi,e as erc20Abi,g as erc721Abi,s as loginWithWalletEvm,v as loginWithWalletSolana,d as rewardPoolAbi,o as submitEvmNftWithdrawal,p as submitEvmNftWithdrawal721,n as submitEvmTokenWithdrawal,a as toErrorMessage,c as walletLoginFail,r as withdrawNftEvm,q as withdrawTokenEvm,u as withdrawTokenSolana,i as writeAndWait}from'./chunk-Q6C5EFPV.js';
1
+ export{b as bridgeFail,l as depositNftEvm,m as depositNftEvm721,k as depositTokenEvm,t as depositTokenSolana,h as encodeNftDepositData,j as ensureErc20Allowance,f as erc1155Abi,e as erc20Abi,g as erc721Abi,s as loginWithWalletEvm,v as loginWithWalletSolana,d as rewardPoolAbi,o as submitEvmNftWithdrawal,p as submitEvmNftWithdrawal721,n as submitEvmTokenWithdrawal,a as toErrorMessage,c as walletLoginFail,r as withdrawNftEvm,q as withdrawTokenEvm,u as withdrawTokenSolana,i as writeAndWait}from'./chunk-YV6AQWSH.js';
@@ -1 +1 @@
1
- 'use strict';var wagmi=require('wagmi'),connectors=require('wagmi/connectors'),reactQuery=require('@tanstack/react-query'),react=require('react'),jsxRuntime=require('react/jsx-runtime'),viem=require('viem'),core=require('@idosgames/core'),walletAdapterReact=require('@solana/wallet-adapter-react');function _(t){let{chains:e,walletConnectProjectId:n,appName:r,appUrl:s,appIcon:i,transports:l,connectors:p}=t,o=r||s?{name:r??"iDosGames",description:r??"iDosGames game",url:s??"",icons:i?[i]:[]}:void 0,m=p??[connectors.injected(),connectors.coinbaseWallet({appName:r??"iDosGames"}),...n?[connectors.walletConnect({projectId:n,metadata:o,showQrModal:true})]:[]],d={};for(let c of e)d[c.id]=l?.[c.id]??wagmi.http();return wagmi.createConfig({chains:e,connectors:m,transports:d})}function Y(t){let{wagmiConfig:e,queryClient:n,children:r}=t,[s]=react.useState(()=>n??new reactQuery.QueryClient);return jsxRuntime.jsx(wagmi.WagmiProvider,{config:e,children:jsxRuntime.jsx(reactQuery.QueryClientProvider,{client:s,children:r})})}var k=[{type:"function",name:"depositERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"amount",type:"uint256"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"withdrawERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"amount",type:"uint256"},{name:"burnAmount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC1155",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],E=[{type:"function",name:"withdrawERC1155Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],D=[{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"}]}],N=[{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 B(t,e,n){return viem.encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[t,e,core.normalizeBlockchainCategory(n)])}async function w(t,e){let{walletClient:n,publicClient:r,account:s}=t,i=await n.writeContract({address:e.address,abi:e.abi,functionName:e.functionName,args:e.args,account:s,chain:n.chain,value:e.value});if((await r.waitForTransactionReceipt({hash:i})).status==="reverted")throw new Error(`On-chain transaction reverted (${i}).`);return i}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 f(t,e){return {ok:false,stage:t,error:e}}function S(t){let e=t.PlatformPoolAddress;return e||null}async function R(t,e,n,r){return await t.publicClient.readContract({address:e,abi:D,functionName:"allowance",args:[t.account,n]})>=r?null:w(t,{address:e,abi:D,functionName:"approve",args:[n,r]})}async function T(t){let{client:e,clients:n,network:r,tokenAddress:s,amount:i,titleID:l,category:p}=t,o=e.auth.context?.userID;if(!o)return a("approve","Not logged in.");let m=S(r);if(!m)return a("approve","Network has no PlatformPoolAddress.");if(i<=0n)return a("approve","Amount must be positive.");try{await R(n,s,m,i);}catch(u){return a("approve",g(u))}let d;try{d=await w(n,{address:m,abi:k,functionName:"depositERC20",args:[s,i,o,l,p??""]});}catch(u){return a("deposit-onchain",g(u))}let c=await e.blockchain.depositToken(r.NetworkID??"",d);return c.ok?{ok:true,onChainTxHash:d,data:c.data}:a("report",c.error,{onChainTxHash:d})}async function C(t){let{client:e,clients:n,network:r,nftContractAddress:s,tokenId:i,amount:l,titleID:p,category:o}=t,m=e.auth.context?.userID;if(!m)return a("deposit-onchain","Not logged in.");let d=S(r);if(!d)return a("deposit-onchain","Network has no PlatformPoolAddress.");if(l<=0n)return a("deposit-onchain","Amount must be positive.");let c=B(m,p,o),u;try{u=await w(n,{address:s,abi:N,functionName:"safeTransferFrom",args:[n.account,d,i,l,c]});}catch(q){return a("deposit-onchain",g(q))}let y=await e.blockchain.depositNFT(r.NetworkID??"",u);return y.ok?{ok:true,onChainTxHash:u,data:y.data}:a("report",y.error,{onChainTxHash:u})}async function F(t,e){return w(t,{address:e.ContractAddress,abi:k,functionName:"withdrawERC20",args:[e.TokenAddress,e.WalletAddress,BigInt(e.Amount??"0"),BigInt(e.BurnAmount??"0"),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function M(t,e){return w(t,{address:e.ContractAddress,abi:E,functionName:"withdrawERC1155Mint",args:[e.TokenAddress,e.WalletAddress,BigInt(e.TokenId??"0"),BigInt(e.Amount??"0"),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function W(t){let{client:e,clients:n,currencyID:r,networkID:s,walletAddress:i,amount:l,category:p}=t,o=await e.blockchain.requestTokenWithdrawal(r,s,i,l,p);if(!o.ok)return a("request",o.error);let m=o.data.EvmSignature,d=o.data.TitleTransactionID??void 0;if(!m)return a("request","Withdrawal response carried no EVM signature.",{titleTransactionID:d});let c;try{c=await F(n,m);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:d})}let u=await H(e,d,c);return u.ok?{ok:true,onChainTxHash:c,data:o.data}:u}async function v(t){let{client:e,clients:n,itemID:r,networkID:s,walletAddress:i,amount:l,category:p}=t,o=await e.blockchain.requestNFTWithdrawal(r,s,i,l,p);if(!o.ok)return a("request",o.error);let m=o.data.EvmSignature,d=o.data.TitleTransactionID??void 0;if(!m)return a("request","Withdrawal response carried no EVM signature.",{titleTransactionID:d});let c;try{c=await M(n,m);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:d})}let u=await H(e,d,c);return u.ok?{ok:true,onChainTxHash:c,data:o.data}:u}async function H(t,e,n){if(!e)return a("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let r=await t.blockchain.confirmWithdrawal(e,n);return r.ok?{ok:true,onChainTxHash:n,data:r.data}:a("confirm",r.error,{onChainTxHash:n,titleTransactionID:e})}async function A(t){let{client:e,clients:n,networkID:r}=t,s=t.walletAddress??n.account,i=await e.auth.requestWalletChallenge(s,r);if(!i.ok)return f("challenge",i.error);let l;try{l=await n.walletClient.signMessage({account:n.account,message:i.data.Message});}catch(o){return f("sign",g(o))}let p=await e.auth.loginWithWallet(s,r,l);return p.ok?{ok:true,data:p.data}:f("login",p.error)}function L(){let{address:t}=wagmi.useAccount(),e=wagmi.usePublicClient(),{data:n}=wagmi.useWalletClient();return !t||!e||!n?null:{account:t,publicClient:e,walletClient:n}}var h="Wallet not connected.";function oe(t,e){let n=L();return {connected:!!n,account:n?.account??null,loginWithWallet:(r,s)=>n?A({client:t,clients:n,networkID:r,walletAddress:s}):Promise.resolve(f("challenge",h)),depositToken:r=>n?T({client:t,clients:n,titleID:e,...r}):Promise.resolve(a("approve",h)),depositNft:r=>n?C({client:t,clients:n,titleID:e,...r}):Promise.resolve(a("deposit-onchain",h)),withdrawToken:r=>n?W({client:t,clients:n,...r}):Promise.resolve(a("withdraw-onchain",h)),withdrawNft:r=>n?v({client:t,clients:n,...r}):Promise.resolve(a("withdraw-onchain",h))}}function le(t){let{endpoint:e,wallets:n,autoConnect:r=true,children:s}=t;return jsxRuntime.jsx(walletAdapterReact.ConnectionProvider,{endpoint:e,children:jsxRuntime.jsx(walletAdapterReact.WalletProvider,{wallets:n,autoConnect:r,children:s})})}async function b(t){let{client:e,adapter:n,network:r,mint:s,amountRaw:i,titleID:l,category:p}=t,o=e.auth.context?.userID;if(!o)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:s,amountRaw:i,userID:o,titleID:l,category:core.normalizeBlockchainCategory(p)});}catch(c){return a("deposit-onchain",g(c))}let d=await e.blockchain.depositToken(r.NetworkID??"",m);return d.ok?{ok:true,onChainTxHash:m,data:d.data}:a("report",d.error,{onChainTxHash:m})}async function P(t){let{client:e,adapter:n,currencyID:r,networkID:s,walletAddress:i,amount:l,category:p}=t,o=await e.blockchain.requestTokenWithdrawal(r,s,i,l,p);if(!o.ok)return a("request",o.error);let m=o.data.SolanaSignature,d=o.data.TitleTransactionID??void 0;if(!m)return a("request","Withdrawal response carried no Solana signature.",{titleTransactionID:d});let c;try{c=await n.submitWithdrawal(m);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:d})}if(!d)return a("confirm","Missing TitleTransactionID.",{onChainTxHash:c});let u=await e.blockchain.confirmWithdrawal(d,c);return u.ok?{ok:true,onChainTxHash:c,data:o.data}:a("confirm",u.error,{onChainTxHash:c,titleTransactionID:d})}async function x(t){let{client:e,networkID:n,walletAddress:r,signMessage:s}=t,i=await e.auth.requestWalletChallenge(r,n);if(!i.ok)return f("challenge",i.error);let l;try{let o=await s(new TextEncoder().encode(i.data.Message));l=pe(o);}catch(o){return f("sign",g(o))}let p=await e.auth.loginWithWallet(r,n,l);return p.ok?{ok:true,data:p.data}:f("login",p.error)}function pe(t){let e="0x";for(let n of t)e+=n.toString(16).padStart(2,"0");return e}var O="Wallet not connected.";function me(t,e,n){let{publicKey:r,signMessage:s}=walletAdapterReact.useWallet(),i=r?.toBase58()??null;return {connected:!!i,account:i,loginWithWallet:(l,p)=>{let o=p??i;return o?s?x({client:t,networkID:l,walletAddress:o,signMessage:s}):Promise.resolve(f("sign","The connected wallet does not support message signing.")):Promise.resolve(f("challenge",O))},depositToken:l=>b({client:t,adapter:n,titleID:e,...l}),withdrawToken:l=>{let p=l.walletAddress??i;return p?P({client:t,adapter:n,...l,walletAddress:p}):Promise.resolve(a("request",O))}}}exports.IDosGamesWalletProvider=Y;exports.SolanaWalletBridgeProvider=le;exports.createEvmWalletConfig=_;exports.useEvmBridge=oe;exports.useEvmBridgeClients=L;exports.useSolanaBridge=me;
1
+ 'use strict';var wagmi=require('wagmi'),connectors=require('wagmi/connectors'),reactQuery=require('@tanstack/react-query'),react=require('react'),jsxRuntime=require('react/jsx-runtime'),viem=require('viem'),core=require('@idosgames/core'),actions=require('wagmi/actions'),walletAdapterReact=require('@solana/wallet-adapter-react');function re(t){let{chains:e,walletConnectProjectId:n,appName:r,appUrl:s,appIcon:i,transports:l,connectors:c}=t,o=r||s?{name:r??"iDosGames",description:r??"iDosGames game",url:s??"",icons:i?[i]:[]}:void 0,m=c??[connectors.injected(),connectors.coinbaseWallet({appName:r??"iDosGames"}),...n?[connectors.walletConnect({projectId:n,metadata:o,showQrModal:true})]:[]],d={};for(let p of e)d[p.id]=l?.[p.id]??wagmi.http();return wagmi.createConfig({chains:e,connectors:m,transports:d})}function P(t){let{wagmiConfig:e,queryClient:n,children:r}=t,[s]=react.useState(()=>n??new reactQuery.QueryClient);return jsxRuntime.jsx(wagmi.WagmiProvider,{config:e,children:jsxRuntime.jsx(reactQuery.QueryClientProvider,{client:s,children:r})})}var D=[{type:"function",name:"depositERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"amount",type:"uint256"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"withdrawERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"amount",type:"uint256"},{name:"burnAmount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC1155",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],G=[{type:"function",name:"withdrawERC1155Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],x=[{type:"function",name:"approve",stateMutability:"nonpayable",inputs:[{name:"spender",type:"address"},{name:"amount",type:"uint256"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"allowance",stateMutability:"view",inputs:[{name:"owner",type:"address"},{name:"spender",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"decimals",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint8"}]},{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]}],O=[{type:"function",name:"safeTransferFrom",stateMutability:"nonpayable",inputs:[{name:"from",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]},{type:"function",name:"isApprovedForAll",stateMutability:"view",inputs:[{name:"account",type:"address"},{name:"operator",type:"address"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"setApprovalForAll",stateMutability:"nonpayable",inputs:[{name:"operator",type:"address"},{name:"approved",type:"bool"}],outputs:[]},{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"},{name:"id",type:"uint256"}],outputs:[{name:"",type:"uint256"}]}];function q(t,e,n){return viem.encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[t,e,core.normalizeBlockchainCategory(n)])}async function w(t,e){let{walletClient:n,publicClient:r,account:s}=t,i=await n.writeContract({address:e.address,abi:e.abi,functionName:e.functionName,args:e.args,account:s,chain:n.chain,value:e.value});if((await r.waitForTransactionReceipt({hash:i})).status==="reverted")throw new Error(`On-chain transaction reverted (${i}).`);return i}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 f(t,e){return {ok:false,stage:t,error:e}}function U(t){let e=t.RewardPoolAddress;return e||null}async function Q(t,e,n,r){return await t.publicClient.readContract({address:e,abi:x,functionName:"allowance",args:[t.account,n]})>=r?null:w(t,{address:e,abi:x,functionName:"approve",args:[n,r]})}async function E(t){let{client:e,clients:n,network:r,tokenAddress:s,amount:i,titleID:l,category:c}=t,o=e.auth.context?.userID;if(!o)return a("approve","Not logged in.");let m=U(r);if(!m)return a("approve","Network has no RewardPoolAddress.");if(i<=0n)return a("approve","Amount must be positive.");try{await Q(n,s,m,i);}catch(u){return a("approve",g(u))}let d;try{d=await w(n,{address:m,abi:D,functionName:"depositERC20",args:[s,i,o,l,c??""]});}catch(u){return a("deposit-onchain",g(u))}let p=await e.blockchain.depositToken(r.NetworkID??"",d);return p.ok?{ok:true,onChainTxHash:d,data:p.data}:a("report",p.error,{onChainTxHash:d})}async function I(t){let{client:e,clients:n,network:r,nftContractAddress:s,tokenId:i,amount:l,titleID:c,category:o}=t,m=e.auth.context?.userID;if(!m)return a("deposit-onchain","Not logged in.");let d=U(r);if(!d)return a("deposit-onchain","Network has no RewardPoolAddress.");if(l<=0n)return a("deposit-onchain","Amount must be positive.");let p=q(m,c,o),u;try{u=await w(n,{address:s,abi:O,functionName:"safeTransferFrom",args:[n.account,d,i,l,p]});}catch(W){return a("deposit-onchain",g(W))}let y=await e.blockchain.depositNFT(r.NetworkID??"",u);return y.ok?{ok:true,onChainTxHash:u,data:y.data}:a("report",y.error,{onChainTxHash:u})}async function z(t,e){return w(t,{address:e.ContractAddress,abi:D,functionName:"withdrawERC20",args:[e.TokenAddress,e.WalletAddress,BigInt(e.Amount??"0"),BigInt(e.BurnAmount??"0"),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function j(t,e){return w(t,{address:e.ContractAddress,abi:G,functionName:"withdrawERC1155Mint",args:[e.TokenAddress,e.WalletAddress,BigInt(e.TokenId??"0"),BigInt(e.Amount??"0"),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function N(t){let{client:e,clients:n,currencyID:r,networkID:s,walletAddress:i,amount:l,category:c}=t,o=await e.blockchain.requestTokenWithdrawal(r,s,i,l,c);if(!o.ok)return a("request",o.error);let m=o.data.EvmSignature,d=o.data.TitleTransactionID??void 0;if(!m)return a("request","Withdrawal response carried no EVM signature.",{titleTransactionID:d});let p;try{p=await z(n,m);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:d})}let u=await V(e,d,p);return u.ok?{ok:true,onChainTxHash:p,data:o.data}:u}async function B(t){let{client:e,clients:n,itemID:r,networkID:s,walletAddress:i,amount:l,category:c}=t,o=await e.blockchain.requestNFTWithdrawal(r,s,i,l,c);if(!o.ok)return a("request",o.error);let m=o.data.EvmSignature,d=o.data.TitleTransactionID??void 0;if(!m)return a("request","Withdrawal response carried no EVM signature.",{titleTransactionID:d});let p;try{p=await j(n,m);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:d})}let u=await V(e,d,p);return u.ok?{ok:true,onChainTxHash:p,data:o.data}:u}async function V(t,e,n){if(!e)return a("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let r=await t.blockchain.confirmWithdrawal(e,n);return r.ok?{ok:true,onChainTxHash:n,data:r.data}:a("confirm",r.error,{onChainTxHash:n,titleTransactionID:e})}async function k(t){let{client:e,clients:n,networkID:r}=t,s=t.walletAddress??n.account,i=await e.auth.requestWalletChallenge(s,r);if(!i.ok)return f("challenge",i.error);let l;try{l=await n.walletClient.signMessage({account:n.account,message:i.data.Message});}catch(o){return f("sign",g(o))}let c=await e.auth.loginWithWallet(s,r,l);return c.ok?{ok:true,data:c.data}:f("login",c.error)}function b(){let{address:t}=wagmi.useAccount(),e=wagmi.usePublicClient(),{data:n}=wagmi.useWalletClient();return !t||!e||!n?null:{account:t,publicClient:e,walletClient:n}}var C="Wallet not connected.";function ge(t,e){let n=b();return {connected:!!n,account:n?.account??null,loginWithWallet:(r,s)=>n?k({client:t,clients:n,networkID:r,walletAddress:s}):Promise.resolve(f("challenge",C)),depositToken:r=>n?E({client:t,clients:n,titleID:e,...r}):Promise.resolve(a("approve",C)),depositNft:r=>n?I({client:t,clients:n,titleID:e,...r}):Promise.resolve(a("deposit-onchain",C)),withdrawToken:r=>n?N({client:t,clients:n,...r}):Promise.resolve(a("withdraw-onchain",C)),withdrawNft:r=>n?B({client:t,clients:n,...r}):Promise.resolve(a("withdraw-onchain",C))}}function Ce(t){let{wagmiConfig:e,...n}=t;return jsxRuntime.jsx(P,{wagmiConfig:e,children:jsxRuntime.jsx(K,{...n})})}function We(t){return t instanceof Error&&(t.name==="ConnectorAlreadyConnectedError"||t.message.includes("already connected"))}function ve(t){let e="Wallet sign-in failed. Please try again.";return t instanceof Error?t.name==="ProviderNotFoundError"||/provider not found/i.test(t.message)?"No crypto wallet found in this browser. Install a wallet extension (e.g. MetaMask) or open this page in your wallet's browser, then try again.":t.name==="UserRejectedRequestError"||/user (rejected|denied|cancelled|canceled)/i.test(t.message)?"Request declined in the wallet.":/timed? ?out/i.test(t.message)?"The wallet did not respond. Open your wallet and try again.":e:e}async function De(t){let e=await actions.getWalletClient(t).catch(()=>null);if(!e)return null;let n=actions.getPublicClient(t);return n?{account:e.account.address,publicClient:n,walletClient:e}:null}function K(t){let{client:e,networkID:n,onAuthenticated:r,disabled:s,label:i,style:l}=t,c=wagmi.useConfig(),{isConnected:o}=wagmi.useAccount(),{connectAsync:m,connectors:d}=wagmi.useConnect(),p=b(),[u,y]=react.useState(false),[W,h]=react.useState(null),X=async()=>{y(true),h(null);try{if(!o){let M=d[0];if(!M){h("No wallet connector is configured.");return}try{await m({connector:M});}catch(L){if(!We(L))throw L}}let v=p??await De(c);if(!v){h("Wallet client is not available.");return}let A=await k({client:e,clients:v,networkID:n});if(A.ok){r();return}h(A.stage==="sign"?"Signature declined.":A.error??"Wallet sign-in failed.");}catch(v){h(ve(v));}finally{y(false);}};return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:()=>{X();},disabled:s||u,style:{...be,...s||u?{opacity:.6,cursor:"default"}:null,...l},children:u?"Check your wallet\u2026":o?i??"Sign in with wallet":"Connect wallet"}),W&&jsxRuntime.jsx("span",{role:"alert",style:Te,children:W})]})}var be={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},Te={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};function Ie(t){let{endpoint:e,wallets:n,autoConnect:r=true,children:s}=t;return jsxRuntime.jsx(walletAdapterReact.ConnectionProvider,{endpoint:e,children:jsxRuntime.jsx(walletAdapterReact.WalletProvider,{wallets:n,autoConnect:r,children:s})})}async function S(t){let{client:e,adapter:n,network:r,mint:s,amountRaw:i,titleID:l,category:c}=t,o=e.auth.context?.userID;if(!o)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:s,amountRaw:i,userID:o,titleID:l,category:core.normalizeBlockchainCategory(c)});}catch(p){return a("deposit-onchain",g(p))}let d=await e.blockchain.depositToken(r.NetworkID??"",m);return d.ok?{ok:true,onChainTxHash:m,data:d.data}:a("report",d.error,{onChainTxHash:m})}async function R(t){let{client:e,adapter:n,currencyID:r,networkID:s,walletAddress:i,amount:l,category:c}=t,o=await e.blockchain.requestTokenWithdrawal(r,s,i,l,c);if(!o.ok)return a("request",o.error);let m=o.data.SolanaSignature,d=o.data.TitleTransactionID??void 0;if(!m)return a("request","Withdrawal response carried no Solana signature.",{titleTransactionID:d});let p;try{p=await n.submitWithdrawal(m);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:d})}if(!d)return a("confirm","Missing TitleTransactionID.",{onChainTxHash:p});let u=await e.blockchain.confirmWithdrawal(d,p);return u.ok?{ok:true,onChainTxHash:p,data:o.data}:a("confirm",u.error,{onChainTxHash:p,titleTransactionID:d})}async function F(t){let{client:e,networkID:n,walletAddress:r,signMessage:s}=t,i=await e.auth.requestWalletChallenge(r,n);if(!i.ok)return f("challenge",i.error);let l;try{let o=await s(new TextEncoder().encode(i.data.Message));l=Be(o);}catch(o){return f("sign",g(o))}let c=await e.auth.loginWithWallet(r,n,l);return c.ok?{ok:true,data:c.data}:f("login",c.error)}function Be(t){let e="0x";for(let n of t)e+=n.toString(16).padStart(2,"0");return e}var J="Wallet not connected.";function Re(t,e,n){let{publicKey:r,signMessage:s}=walletAdapterReact.useWallet(),i=r?.toBase58()??null;return {connected:!!i,account:i,loginWithWallet:(l,c)=>{let o=c??i;return o?s?F({client:t,networkID:l,walletAddress:o,signMessage:s}):Promise.resolve(f("sign","The connected wallet does not support message signing.")):Promise.resolve(f("challenge",J))},depositToken:l=>S({client:t,adapter:n,titleID:e,...l}),withdrawToken:l=>{let c=l.walletAddress??i;return c?R({client:t,adapter:n,...l,walletAddress:c}):Promise.resolve(a("request",J))}}}exports.IDosGamesWalletProvider=P;exports.SolanaWalletBridgeProvider=Ie;exports.WalletLogin=Ce;exports.WalletLoginButton=K;exports.createEvmWalletConfig=re;exports.useEvmBridge=ge;exports.useEvmBridgeClients=b;exports.useSolanaBridge=Re;
@@ -2,7 +2,7 @@ import * as wagmi from 'wagmi';
2
2
  import { CreateConnectorFn, Config } from 'wagmi';
3
3
  import { Chain, Transport } from 'viem';
4
4
  import * as react from 'react';
5
- import { ReactNode } from 'react';
5
+ import { ReactNode, CSSProperties } from 'react';
6
6
  import { QueryClient } from '@tanstack/react-query';
7
7
  import { ClientState, DepositTokenResponse, DepositNFTResponse, TokenWithdrawalResponse, NFTWithdrawalResponse, IDosGamesClient } from '@idosgames/core';
8
8
  import { W as WalletLoginResult, e as DepositTokenEvmParams, a as BridgeResult, d as DepositNftEvmParams, k as WithdrawTokenEvmParams, j as WithdrawNftEvmParams, E as EvmBridgeClients, f as DepositTokenSolanaParams, l as WithdrawTokenSolanaParams, S as SolanaProgramAdapter } from '../bridge-BCxf6AHE.cjs';
@@ -102,6 +102,35 @@ interface EvmBridge {
102
102
  */
103
103
  declare function useEvmBridge(client: IDosGamesClient, titleID: string): EvmBridge;
104
104
 
105
+ interface WalletLoginProps {
106
+ /** The (not yet authenticated) shared client. */
107
+ client: IDosGamesClient;
108
+ /** NetworkID the challenge is issued for — one of the title's configured networks. */
109
+ networkID: string;
110
+ /** Called once the wallet signature has been exchanged for a session. */
111
+ onAuthenticated: () => void;
112
+ /** A wagmi config, typically from {@link createEvmWalletConfig}. */
113
+ wagmiConfig: Config;
114
+ disabled?: boolean;
115
+ label?: string;
116
+ style?: CSSProperties;
117
+ }
118
+ /**
119
+ * Ready-made "sign in with wallet" button: connect → sign the challenge → session.
120
+ *
121
+ * It ships here rather than in each game because the flow has sharp edges that are easy to get
122
+ * wrong once and then copy everywhere — a rejected signature is a normal outcome rather than a
123
+ * throw, the login must not fire before the wallet client exists, and the challenge is per network.
124
+ *
125
+ * Self-contained: it brings its own wallet provider, so a login screen can drop it in before any
126
+ * other wallet UI exists. Inside a screen that already renders `IDosGamesWalletProvider`, use
127
+ * {@link WalletLoginButton} instead to avoid nesting a second provider.
128
+ */
129
+ declare function WalletLogin(props: WalletLoginProps): ReactNode;
130
+ type WalletLoginButtonProps = Omit<WalletLoginProps, "wagmiConfig">;
131
+ /** The button itself. Must be rendered inside an {@link IDosGamesWalletProvider}. */
132
+ declare function WalletLoginButton(props: WalletLoginButtonProps): ReactNode;
133
+
105
134
  interface SolanaWalletBridgeProviderProps {
106
135
  /** RPC endpoint for the Solana network the title uses (matches its blockchain config). */
107
136
  endpoint: string;
@@ -147,4 +176,4 @@ interface SolanaBridge {
147
176
  */
148
177
  declare function useSolanaBridge(client: IDosGamesClient, titleID: string, adapter: SolanaProgramAdapter): SolanaBridge;
149
178
 
150
- export { type EvmBridge, type EvmWalletConfigOptions, IDosGamesWalletProvider, type IDosGamesWalletProviderProps, type SolanaBridge, SolanaWalletBridgeProvider, type SolanaWalletBridgeProviderProps, createEvmWalletConfig, useEvmBridge, useEvmBridgeClients, useSolanaBridge };
179
+ export { type EvmBridge, type EvmWalletConfigOptions, IDosGamesWalletProvider, type IDosGamesWalletProviderProps, type SolanaBridge, SolanaWalletBridgeProvider, type SolanaWalletBridgeProviderProps, WalletLogin, WalletLoginButton, type WalletLoginButtonProps, type WalletLoginProps, createEvmWalletConfig, useEvmBridge, useEvmBridgeClients, useSolanaBridge };
@@ -2,7 +2,7 @@ import * as wagmi from 'wagmi';
2
2
  import { CreateConnectorFn, Config } from 'wagmi';
3
3
  import { Chain, Transport } from 'viem';
4
4
  import * as react from 'react';
5
- import { ReactNode } from 'react';
5
+ import { ReactNode, CSSProperties } from 'react';
6
6
  import { QueryClient } from '@tanstack/react-query';
7
7
  import { ClientState, DepositTokenResponse, DepositNFTResponse, TokenWithdrawalResponse, NFTWithdrawalResponse, IDosGamesClient } from '@idosgames/core';
8
8
  import { W as WalletLoginResult, e as DepositTokenEvmParams, a as BridgeResult, d as DepositNftEvmParams, k as WithdrawTokenEvmParams, j as WithdrawNftEvmParams, E as EvmBridgeClients, f as DepositTokenSolanaParams, l as WithdrawTokenSolanaParams, S as SolanaProgramAdapter } from '../bridge-BCxf6AHE.js';
@@ -102,6 +102,35 @@ interface EvmBridge {
102
102
  */
103
103
  declare function useEvmBridge(client: IDosGamesClient, titleID: string): EvmBridge;
104
104
 
105
+ interface WalletLoginProps {
106
+ /** The (not yet authenticated) shared client. */
107
+ client: IDosGamesClient;
108
+ /** NetworkID the challenge is issued for — one of the title's configured networks. */
109
+ networkID: string;
110
+ /** Called once the wallet signature has been exchanged for a session. */
111
+ onAuthenticated: () => void;
112
+ /** A wagmi config, typically from {@link createEvmWalletConfig}. */
113
+ wagmiConfig: Config;
114
+ disabled?: boolean;
115
+ label?: string;
116
+ style?: CSSProperties;
117
+ }
118
+ /**
119
+ * Ready-made "sign in with wallet" button: connect → sign the challenge → session.
120
+ *
121
+ * It ships here rather than in each game because the flow has sharp edges that are easy to get
122
+ * wrong once and then copy everywhere — a rejected signature is a normal outcome rather than a
123
+ * throw, the login must not fire before the wallet client exists, and the challenge is per network.
124
+ *
125
+ * Self-contained: it brings its own wallet provider, so a login screen can drop it in before any
126
+ * other wallet UI exists. Inside a screen that already renders `IDosGamesWalletProvider`, use
127
+ * {@link WalletLoginButton} instead to avoid nesting a second provider.
128
+ */
129
+ declare function WalletLogin(props: WalletLoginProps): ReactNode;
130
+ type WalletLoginButtonProps = Omit<WalletLoginProps, "wagmiConfig">;
131
+ /** The button itself. Must be rendered inside an {@link IDosGamesWalletProvider}. */
132
+ declare function WalletLoginButton(props: WalletLoginButtonProps): ReactNode;
133
+
105
134
  interface SolanaWalletBridgeProviderProps {
106
135
  /** RPC endpoint for the Solana network the title uses (matches its blockchain config). */
107
136
  endpoint: string;
@@ -147,4 +176,4 @@ interface SolanaBridge {
147
176
  */
148
177
  declare function useSolanaBridge(client: IDosGamesClient, titleID: string, adapter: SolanaProgramAdapter): SolanaBridge;
149
178
 
150
- export { type EvmBridge, type EvmWalletConfigOptions, IDosGamesWalletProvider, type IDosGamesWalletProviderProps, type SolanaBridge, SolanaWalletBridgeProvider, type SolanaWalletBridgeProviderProps, createEvmWalletConfig, useEvmBridge, useEvmBridgeClients, useSolanaBridge };
179
+ export { type EvmBridge, type EvmWalletConfigOptions, IDosGamesWalletProvider, type IDosGamesWalletProviderProps, type SolanaBridge, SolanaWalletBridgeProvider, type SolanaWalletBridgeProviderProps, WalletLogin, WalletLoginButton, type WalletLoginButtonProps, type WalletLoginProps, createEvmWalletConfig, useEvmBridge, useEvmBridgeClients, useSolanaBridge };
@@ -1 +1 @@
1
- import {r,b,q,l,k,s,c,u,t,v}from'../chunk-Q6C5EFPV.js';import {http,createConfig,WagmiProvider,useAccount,usePublicClient,useWalletClient}from'wagmi';import {injected,coinbaseWallet,walletConnect}from'wagmi/connectors';import {QueryClient,QueryClientProvider}from'@tanstack/react-query';import {useState}from'react';import {jsx}from'react/jsx-runtime';import {ConnectionProvider,WalletProvider,useWallet}from'@solana/wallet-adapter-react';function I(o){let{chains:r,walletConnectProjectId:e,appName:t,appUrl:n,appIcon:a,transports:i,connectors:l}=o,m=t||n?{name:t??"iDosGames",description:t??"iDosGames game",url:n??"",icons:a?[a]:[]}:void 0,E=l??[injected(),coinbaseWallet({appName:t??"iDosGames"}),...e?[walletConnect({projectId:e,metadata:m,showQrModal:true})]:[]],c={};for(let g of r)c[g.id]=i?.[g.id]??http();return createConfig({chains:r,connectors:E,transports:c})}function F(o){let{wagmiConfig:r,queryClient:e,children:t}=o,[n]=useState(()=>e??new QueryClient);return jsx(WagmiProvider,{config:r,children:jsx(QueryClientProvider,{client:n,children:t})})}function y(){let{address:o}=useAccount(),r=usePublicClient(),{data:e}=useWalletClient();return !o||!r||!e?null:{account:o,publicClient:r,walletClient:e}}var d="Wallet not connected.";function j(o,r$1){let e=y();return {connected:!!e,account:e?.account??null,loginWithWallet:(t,n)=>e?s({client:o,clients:e,networkID:t,walletAddress:n}):Promise.resolve(c("challenge",d)),depositToken:t=>e?k({client:o,clients:e,titleID:r$1,...t}):Promise.resolve(b("approve",d)),depositNft:t=>e?l({client:o,clients:e,titleID:r$1,...t}):Promise.resolve(b("deposit-onchain",d)),withdrawToken:t=>e?q({client:o,clients:e,...t}):Promise.resolve(b("withdraw-onchain",d)),withdrawNft:t=>e?r({client:o,clients:e,...t}):Promise.resolve(b("withdraw-onchain",d))}}function _(o){let{endpoint:r,wallets:e,autoConnect:t=true,children:n}=o;return jsx(ConnectionProvider,{endpoint:r,children:jsx(WalletProvider,{wallets:e,autoConnect:t,children:n})})}var D="Wallet not connected.";function z(o,r,e){let{publicKey:t$1,signMessage:n}=useWallet(),a=t$1?.toBase58()??null;return {connected:!!a,account:a,loginWithWallet:(i,l)=>{let m=l??a;return m?n?v({client:o,networkID:i,walletAddress:m,signMessage:n}):Promise.resolve(c("sign","The connected wallet does not support message signing.")):Promise.resolve(c("challenge",D))},depositToken:i=>t({client:o,adapter:e,titleID:r,...i}),withdrawToken:i=>{let l=i.walletAddress??a;return l?u({client:o,adapter:e,...i,walletAddress:l}):Promise.resolve(b("request",D))}}}export{F as IDosGamesWalletProvider,_ as SolanaWalletBridgeProvider,I as createEvmWalletConfig,j as useEvmBridge,y as useEvmBridgeClients,z as useSolanaBridge};
1
+ import {r,b,q,l,k,s,c,u,t,v}from'../chunk-YV6AQWSH.js';import {http,createConfig,WagmiProvider,useAccount,usePublicClient,useWalletClient,useConfig,useConnect}from'wagmi';import {injected,coinbaseWallet,walletConnect}from'wagmi/connectors';import {QueryClient,QueryClientProvider}from'@tanstack/react-query';import {useState}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {getWalletClient,getPublicClient}from'wagmi/actions';import {ConnectionProvider,WalletProvider,useWallet}from'@solana/wallet-adapter-react';function _(e){let{chains:o,walletConnectProjectId:t,appName:n,appUrl:r,appIcon:a,transports:i,connectors:s}=e,l=n||r?{name:n??"iDosGames",description:n??"iDosGames game",url:r??"",icons:a?[a]:[]}:void 0,y=s??[injected(),coinbaseWallet({appName:n??"iDosGames"}),...t?[walletConnect({projectId:t,metadata:l,showQrModal:true})]:[]],g={};for(let u of o)g[u.id]=i?.[u.id]??http();return createConfig({chains:o,connectors:y,transports:g})}function h(e){let{wagmiConfig:o,queryClient:t,children:n}=e,[r]=useState(()=>t??new QueryClient);return jsx(WagmiProvider,{config:o,children:jsx(QueryClientProvider,{client:r,children:n})})}function C(){let{address:e}=useAccount(),o=usePublicClient(),{data:t}=useWalletClient();return !e||!o||!t?null:{account:e,publicClient:o,walletClient:t}}var m="Wallet not connected.";function $(e,o){let t=C();return {connected:!!t,account:t?.account??null,loginWithWallet:(n,r)=>t?s({client:e,clients:t,networkID:n,walletAddress:r}):Promise.resolve(c("challenge",m)),depositToken:n=>t?k({client:e,clients:t,titleID:o,...n}):Promise.resolve(b("approve",m)),depositNft:n=>t?l({client:e,clients:t,titleID:o,...n}):Promise.resolve(b("deposit-onchain",m)),withdrawToken:n=>t?q({client:e,clients:t,...n}):Promise.resolve(b("withdraw-onchain",m)),withdrawNft:n=>t?r({client:e,clients:t,...n}):Promise.resolve(b("withdraw-onchain",m))}}function ie(e){let{wagmiConfig:o,...t}=e;return jsx(h,{wagmiConfig:o,children:jsx(G,{...t})})}function ae(e){return e instanceof Error&&(e.name==="ConnectorAlreadyConnectedError"||e.message.includes("already connected"))}function se(e){let o="Wallet sign-in failed. Please try again.";return e instanceof Error?e.name==="ProviderNotFoundError"||/provider not found/i.test(e.message)?"No crypto wallet found in this browser. Install a wallet extension (e.g. MetaMask) or open this page in your wallet's browser, then try again.":e.name==="UserRejectedRequestError"||/user (rejected|denied|cancelled|canceled)/i.test(e.message)?"Request declined in the wallet.":/timed? ?out/i.test(e.message)?"The wallet did not respond. Open your wallet and try again.":o:o}async function le(e){let o=await getWalletClient(e).catch(()=>null);if(!o)return null;let t=getPublicClient(e);return t?{account:o.account.address,publicClient:t,walletClient:o}:null}function G(e){let{client:o,networkID:t,onAuthenticated:n,disabled:r,label:a,style:i}=e,s$1=useConfig(),{isConnected:l}=useAccount(),{connectAsync:y,connectors:g}=useConnect(),u=C(),[P,T]=useState(false),[k,c]=useState(null),q=async()=>{T(true),c(null);try{if(!l){let E=g[0];if(!E){c("No wallet connector is configured.");return}try{await y({connector:E});}catch(D){if(!ae(D))throw D}}let f=u??await le(s$1);if(!f){c("Wallet client is not available.");return}let v=await s({client:o,clients:f,networkID:t});if(v.ok){n();return}c(v.stage==="sign"?"Signature declined.":v.error??"Wallet sign-in failed.");}catch(f){c(se(f));}finally{T(false);}};return jsxs(Fragment,{children:[jsx("button",{type:"button",onClick:()=>{q();},disabled:r||P,style:{...de,...r||P?{opacity:.6,cursor:"default"}:null,...i},children:P?"Check your wallet\u2026":l?a??"Sign in with wallet":"Connect wallet"}),k&&jsx("span",{role:"alert",style:ce,children:k})]})}var de={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},ce={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};function fe(e){let{endpoint:o,wallets:t,autoConnect:n=true,children:r}=e;return jsx(ConnectionProvider,{endpoint:o,children:jsx(WalletProvider,{wallets:t,autoConnect:n,children:r})})}var F="Wallet not connected.";function Ce(e,o,t$1){let{publicKey:n,signMessage:r}=useWallet(),a=n?.toBase58()??null;return {connected:!!a,account:a,loginWithWallet:(i,s)=>{let l=s??a;return l?r?v({client:e,networkID:i,walletAddress:l,signMessage:r}):Promise.resolve(c("sign","The connected wallet does not support message signing.")):Promise.resolve(c("challenge",F))},depositToken:i=>t({client:e,adapter:t$1,titleID:o,...i}),withdrawToken:i=>{let s=i.walletAddress??a;return s?u({client:e,adapter:t$1,...i,walletAddress:s}):Promise.resolve(b("request",F))}}}export{h as IDosGamesWalletProvider,fe as SolanaWalletBridgeProvider,ie as WalletLogin,G as WalletLoginButton,_ as createEvmWalletConfig,$ as useEvmBridge,C as useEvmBridgeClients,Ce as useSolanaBridge};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@idosgames/wallet",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
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",
@@ -1 +0,0 @@
1
- import {BaseError,encodeAbiParameters}from'viem';import {normalizeBlockchainCategory}from'@idosgames/core';function g(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 w(e,t){return {ok:false,stage:e,error:t}}var h=[{type:"function",name:"depositERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"amount",type:"uint256"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"withdrawERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"amount",type:"uint256"},{name:"burnAmount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC1155",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],D=[{type:"function",name:"withdrawERC1155Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],k=[{type:"function",name:"approve",stateMutability:"nonpayable",inputs:[{name:"spender",type:"address"},{name:"amount",type:"uint256"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"allowance",stateMutability:"view",inputs:[{name:"owner",type:"address"},{name:"spender",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"decimals",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint8"}]},{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]}],A=[{type:"function",name:"safeTransferFrom",stateMutability:"nonpayable",inputs:[{name:"from",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]},{type:"function",name:"isApprovedForAll",stateMutability:"view",inputs:[{name:"account",type:"address"},{name:"operator",type:"address"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"setApprovalForAll",stateMutability:"nonpayable",inputs:[{name:"operator",type:"address"},{name:"approved",type:"bool"}],outputs:[]},{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"},{name:"id",type:"uint256"}],outputs:[{name:"",type:"uint256"}]}],x=[{type:"function",name:"safeTransferFrom",stateMutability:"nonpayable",inputs:[{name:"from",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]}];function b(e,t,n){return encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[e,t,normalizeBlockchainCategory(n)])}async function f(e,t){let{walletClient:n,publicClient:i,account:c}=e,o=await n.writeContract({address:t.address,abi:t.abi,functionName:t.functionName,args:t.args,account:c,chain:n.chain,value:t.value});if((await i.waitForTransactionReceipt({hash:o})).status==="reverted")throw new Error(`On-chain transaction reverted (${o}).`);return o}function I(e){let t=e.PlatformPoolAddress;return t||null}async function T(e,t,n,i){return await e.publicClient.readContract({address:t,abi:k,functionName:"allowance",args:[e.account,n]})>=i?null:f(e,{address:t,abi:k,functionName:"approve",args:[n,i]})}async function S(e){let{client:t,clients:n,network:i,tokenAddress:c,amount:o,titleID:p,category:u}=e,r=t.auth.context?.userID;if(!r)return a("approve","Not logged in.");let d=I(i);if(!d)return a("approve","Network has no PlatformPoolAddress.");if(o<=0n)return a("approve","Amount must be positive.");try{await T(n,c,d,o);}catch(m){return a("approve",g(m))}let s;try{s=await f(n,{address:d,abi:h,functionName:"depositERC20",args:[c,o,r,p,u??""]});}catch(m){return a("deposit-onchain",g(m))}let l=await t.blockchain.depositToken(i.NetworkID??"",s);return l.ok?{ok:true,onChainTxHash:s,data:l.data}:a("report",l.error,{onChainTxHash:s})}async function R(e){let{client:t,clients:n,network:i,nftContractAddress:c,tokenId:o,amount:p,titleID:u,category:r}=e,d=t.auth.context?.userID;if(!d)return a("deposit-onchain","Not logged in.");let s=I(i);if(!s)return a("deposit-onchain","Network has no PlatformPoolAddress.");if(p<=0n)return a("deposit-onchain","Amount must be positive.");let l=b(d,u,r),m;try{m=await f(n,{address:c,abi:A,functionName:"safeTransferFrom",args:[n.account,s,o,p,l]});}catch(E){return a("deposit-onchain",g(E))}let y=await t.blockchain.depositNFT(i.NetworkID??"",m);return y.ok?{ok:true,onChainTxHash:m,data:y.data}:a("report",y.error,{onChainTxHash:m})}async function H(e){let{client:t,clients:n,network:i,nftContractAddress:c,tokenId:o,titleID:p,category:u}=e,r=t.auth.context?.userID;if(!r)return a("deposit-onchain","Not logged in.");let d=I(i);if(!d)return a("deposit-onchain","Network has no PlatformPoolAddress.");let s=b(r,p,u),l;try{l=await f(n,{address:c,abi:x,functionName:"safeTransferFrom",args:[n.account,d,o,s]});}catch(y){return a("deposit-onchain",g(y))}let m=await t.blockchain.depositNFT(i.NetworkID??"",l);return m.ok?{ok:true,onChainTxHash:l,data:m.data}:a("report",m.error,{onChainTxHash:l})}async function C(e,t){return f(e,{address:t.ContractAddress,abi:h,functionName:"withdrawERC20",args:[t.TokenAddress,t.WalletAddress,BigInt(t.Amount??"0"),BigInt(t.BurnAmount??"0"),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function W(e,t){return f(e,{address:t.ContractAddress,abi:D,functionName:"withdrawERC1155Mint",args:[t.TokenAddress,t.WalletAddress,BigInt(t.TokenId??"0"),BigInt(t.Amount??"0"),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function M(e,t){return f(e,{address:t.ContractAddress,abi:D,functionName:"withdrawERC721Mint",args:[t.TokenAddress,t.WalletAddress,BigInt(t.TokenId??"0"),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function F(e){let{client:t,clients:n,currencyID:i,networkID:c,walletAddress:o,amount:p,category:u}=e,r=await t.blockchain.requestTokenWithdrawal(i,c,o,p,u);if(!r.ok)return a("request",r.error);let d=r.data.EvmSignature,s=r.data.TitleTransactionID??void 0;if(!d)return a("request","Withdrawal response carried no EVM signature.",{titleTransactionID:s});let l;try{l=await C(n,d);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:s})}let m=await v(t,s,l);return m.ok?{ok:true,onChainTxHash:l,data:r.data}:m}async function L(e){let{client:t,clients:n,itemID:i,networkID:c,walletAddress:o,amount:p,category:u}=e,r=await t.blockchain.requestNFTWithdrawal(i,c,o,p,u);if(!r.ok)return a("request",r.error);let d=r.data.EvmSignature,s=r.data.TitleTransactionID??void 0;if(!d)return a("request","Withdrawal response carried no EVM signature.",{titleTransactionID:s});let l;try{l=await W(n,d);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:s})}let m=await v(t,s,l);return m.ok?{ok:true,onChainTxHash:l,data:r.data}:m}async function v(e,t,n){if(!t)return a("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let i=await e.blockchain.confirmWithdrawal(t,n);return i.ok?{ok:true,onChainTxHash:n,data:i.data}:a("confirm",i.error,{onChainTxHash:n,titleTransactionID:t})}async function G(e){let{client:t,clients:n,networkID:i}=e,c=e.walletAddress??n.account,o=await t.auth.requestWalletChallenge(c,i);if(!o.ok)return w("challenge",o.error);let p;try{p=await n.walletClient.signMessage({account:n.account,message:o.data.Message});}catch(r){return w("sign",g(r))}let u=await t.auth.loginWithWallet(c,i,p);return u.ok?{ok:true,data:u.data}:w("login",u.error)}async function U(e){let{client:t,adapter:n,network:i,mint:c,amountRaw:o,titleID:p,category:u}=e,r=t.auth.context?.userID;if(!r)return a("deposit-onchain","Not logged in.");if(o<=0n)return a("deposit-onchain","Amount must be positive.");let d;try{d=await n.depositSpl({mint:c,amountRaw:o,userID:r,titleID:p,category:normalizeBlockchainCategory(u)});}catch(l){return a("deposit-onchain",g(l))}let s=await t.blockchain.depositToken(i.NetworkID??"",d);return s.ok?{ok:true,onChainTxHash:d,data:s.data}:a("report",s.error,{onChainTxHash:d})}async function O(e){let{client:t,adapter:n,currencyID:i,networkID:c,walletAddress:o,amount:p,category:u}=e,r=await t.blockchain.requestTokenWithdrawal(i,c,o,p,u);if(!r.ok)return a("request",r.error);let d=r.data.SolanaSignature,s=r.data.TitleTransactionID??void 0;if(!d)return a("request","Withdrawal response carried no Solana signature.",{titleTransactionID:s});let l;try{l=await n.submitWithdrawal(d);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:s})}if(!s)return a("confirm","Missing TitleTransactionID.",{onChainTxHash:l});let m=await t.blockchain.confirmWithdrawal(s,l);return m.ok?{ok:true,onChainTxHash:l,data:r.data}:a("confirm",m.error,{onChainTxHash:l,titleTransactionID:s})}async function z(e){let{client:t,networkID:n,walletAddress:i,signMessage:c}=e,o=await t.auth.requestWalletChallenge(i,n);if(!o.ok)return w("challenge",o.error);let p;try{let r=await c(new TextEncoder().encode(o.data.Message));p=V(r);}catch(r){return w("sign",g(r))}let u=await t.auth.loginWithWallet(i,n,p);return u.ok?{ok:true,data:u.data}:w("login",u.error)}function V(e){let t="0x";for(let n of e)t+=n.toString(16).padStart(2,"0");return t}export{g as a,a as b,w as c,h as d,k as e,A as f,x as g,b as h,f as i,T as j,S as k,R as l,H as m,C as n,W as o,M as p,F as q,L as r,G as s,U as t,O as u,z as v};