@idosgames/wallet 0.1.4 → 0.1.6
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/dist/{bridge-BCxf6AHE.d.cts → bridge-DvafuXl9.d.cts} +37 -2
- package/dist/{bridge-BCxf6AHE.d.ts → bridge-DvafuXl9.d.ts} +37 -2
- package/dist/chunk-ZPNBMRUO.js +2 -0
- package/dist/index.cjs +2 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/react/index.cjs +2 -1
- package/dist/react/index.d.cts +15 -11
- package/dist/react/index.d.ts +15 -11
- package/dist/react/index.js +1 -1
- package/package.json +4 -1
- package/dist/chunk-YV6AQWSH.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PublicClient, WalletClient, Address, Abi, ContractFunctionName, ContractFunctionArgs, Hex } from 'viem';
|
|
1
|
+
import { Chain, PublicClient, WalletClient, Address, Abi, ContractFunctionName, ContractFunctionArgs, Hex } from 'viem';
|
|
2
2
|
import { IDosGamesClient, BlockchainNetworkDefinition, DepositNFTResponse, DepositTokenResponse, WithdrawalSignatureResponse, NFTWithdrawalResponse, TokenWithdrawalResponse, SolanaWithdrawalSignature } from '@idosgames/core';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -57,6 +57,41 @@ interface WalletLoginFailure {
|
|
|
57
57
|
type WalletLoginResult<T> = WalletLoginSuccess<T> | WalletLoginFailure;
|
|
58
58
|
declare function walletLoginFail(stage: WalletLoginStage, error: string): WalletLoginFailure;
|
|
59
59
|
|
|
60
|
+
declare const mainnet: Chain;
|
|
61
|
+
declare const bsc: Chain;
|
|
62
|
+
declare const polygon: Chain;
|
|
63
|
+
declare const base: Chain;
|
|
64
|
+
declare const arbitrum: Chain;
|
|
65
|
+
declare const optimism: Chain;
|
|
66
|
+
declare const sepolia: Chain;
|
|
67
|
+
declare const polygonAmoy: Chain;
|
|
68
|
+
/** Every chain declared here, keyed by NetworkID-style name — handy for a title-driven picker. */
|
|
69
|
+
declare const idosChains: {
|
|
70
|
+
readonly mainnet: Chain;
|
|
71
|
+
readonly bsc: Chain;
|
|
72
|
+
readonly polygon: Chain;
|
|
73
|
+
readonly base: Chain;
|
|
74
|
+
readonly arbitrum: Chain;
|
|
75
|
+
readonly optimism: Chain;
|
|
76
|
+
readonly sepolia: Chain;
|
|
77
|
+
readonly polygonAmoy: Chain;
|
|
78
|
+
};
|
|
79
|
+
/** Look up a declared chain by its EVM chain id (e.g. from the title's blockchain config). */
|
|
80
|
+
declare function chainById(id: number): Chain | undefined;
|
|
81
|
+
/**
|
|
82
|
+
* A chain in the CAIP shape Reown AppKit expects.
|
|
83
|
+
*
|
|
84
|
+
* AppKit ships its own network list at `@reown/appkit/networks`, but that module is
|
|
85
|
+
* `export * from "viem/chains"` — the very barrel this file exists to avoid. Converting our own
|
|
86
|
+
* chains keeps AppKit working without dragging `tempo`/`ox` (and its BigInt `**`) into the bundle.
|
|
87
|
+
*/
|
|
88
|
+
type AppKitEvmNetwork = Chain & {
|
|
89
|
+
chainNamespace: "eip155";
|
|
90
|
+
caipNetworkId: `eip155:${number}`;
|
|
91
|
+
};
|
|
92
|
+
/** Wraps a chain in the CAIP fields AppKit needs. */
|
|
93
|
+
declare function toAppKitNetwork(chain: Chain): AppKitEvmNetwork;
|
|
94
|
+
|
|
60
95
|
/**
|
|
61
96
|
* The viem clients + signing account the EVM bridge needs. wagmi supplies all three:
|
|
62
97
|
* `usePublicClient()`, `useWalletClient().data`, and `useAccount().address`. Kept as plain viem
|
|
@@ -266,4 +301,4 @@ interface WithdrawTokenSolanaParams {
|
|
|
266
301
|
*/
|
|
267
302
|
declare function withdrawTokenSolana(params: WithdrawTokenSolanaParams): Promise<BridgeResult<TokenWithdrawalResponse>>;
|
|
268
303
|
|
|
269
|
-
export {
|
|
304
|
+
export { type AppKitEvmNetwork as A, type BridgeFailure as B, polygonAmoy as C, type DepositNft721EvmParams as D, type EvmBridgeClients as E, sepolia as F, submitEvmNftWithdrawal as G, submitEvmNftWithdrawal721 as H, submitEvmTokenWithdrawal as I, toAppKitNetwork as J, toErrorMessage as K, walletLoginFail as L, withdrawNftEvm as M, withdrawTokenEvm as N, withdrawTokenSolana as O, writeAndWait as P, type SolanaProgramAdapter as S, type WalletLoginResult as W, type BridgeResult as a, type BridgeStage as b, type BridgeSuccess as c, type DepositNftEvmParams as d, type DepositTokenEvmParams as e, type DepositTokenSolanaParams as f, type WalletLoginFailure as g, type WalletLoginStage as h, type WalletLoginSuccess as i, type WithdrawNftEvmParams as j, type WithdrawTokenEvmParams as k, type WithdrawTokenSolanaParams as l, arbitrum as m, base as n, bridgeFail as o, bsc as p, chainById as q, depositNftEvm as r, depositNftEvm721 as s, depositTokenEvm as t, depositTokenSolana as u, ensureErc20Allowance as v, idosChains as w, mainnet as x, optimism as y, polygon as z };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PublicClient, WalletClient, Address, Abi, ContractFunctionName, ContractFunctionArgs, Hex } from 'viem';
|
|
1
|
+
import { Chain, PublicClient, WalletClient, Address, Abi, ContractFunctionName, ContractFunctionArgs, Hex } from 'viem';
|
|
2
2
|
import { IDosGamesClient, BlockchainNetworkDefinition, DepositNFTResponse, DepositTokenResponse, WithdrawalSignatureResponse, NFTWithdrawalResponse, TokenWithdrawalResponse, SolanaWithdrawalSignature } from '@idosgames/core';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -57,6 +57,41 @@ interface WalletLoginFailure {
|
|
|
57
57
|
type WalletLoginResult<T> = WalletLoginSuccess<T> | WalletLoginFailure;
|
|
58
58
|
declare function walletLoginFail(stage: WalletLoginStage, error: string): WalletLoginFailure;
|
|
59
59
|
|
|
60
|
+
declare const mainnet: Chain;
|
|
61
|
+
declare const bsc: Chain;
|
|
62
|
+
declare const polygon: Chain;
|
|
63
|
+
declare const base: Chain;
|
|
64
|
+
declare const arbitrum: Chain;
|
|
65
|
+
declare const optimism: Chain;
|
|
66
|
+
declare const sepolia: Chain;
|
|
67
|
+
declare const polygonAmoy: Chain;
|
|
68
|
+
/** Every chain declared here, keyed by NetworkID-style name — handy for a title-driven picker. */
|
|
69
|
+
declare const idosChains: {
|
|
70
|
+
readonly mainnet: Chain;
|
|
71
|
+
readonly bsc: Chain;
|
|
72
|
+
readonly polygon: Chain;
|
|
73
|
+
readonly base: Chain;
|
|
74
|
+
readonly arbitrum: Chain;
|
|
75
|
+
readonly optimism: Chain;
|
|
76
|
+
readonly sepolia: Chain;
|
|
77
|
+
readonly polygonAmoy: Chain;
|
|
78
|
+
};
|
|
79
|
+
/** Look up a declared chain by its EVM chain id (e.g. from the title's blockchain config). */
|
|
80
|
+
declare function chainById(id: number): Chain | undefined;
|
|
81
|
+
/**
|
|
82
|
+
* A chain in the CAIP shape Reown AppKit expects.
|
|
83
|
+
*
|
|
84
|
+
* AppKit ships its own network list at `@reown/appkit/networks`, but that module is
|
|
85
|
+
* `export * from "viem/chains"` — the very barrel this file exists to avoid. Converting our own
|
|
86
|
+
* chains keeps AppKit working without dragging `tempo`/`ox` (and its BigInt `**`) into the bundle.
|
|
87
|
+
*/
|
|
88
|
+
type AppKitEvmNetwork = Chain & {
|
|
89
|
+
chainNamespace: "eip155";
|
|
90
|
+
caipNetworkId: `eip155:${number}`;
|
|
91
|
+
};
|
|
92
|
+
/** Wraps a chain in the CAIP fields AppKit needs. */
|
|
93
|
+
declare function toAppKitNetwork(chain: Chain): AppKitEvmNetwork;
|
|
94
|
+
|
|
60
95
|
/**
|
|
61
96
|
* The viem clients + signing account the EVM bridge needs. wagmi supplies all three:
|
|
62
97
|
* `usePublicClient()`, `useWalletClient().data`, and `useAccount().address`. Kept as plain viem
|
|
@@ -266,4 +301,4 @@ interface WithdrawTokenSolanaParams {
|
|
|
266
301
|
*/
|
|
267
302
|
declare function withdrawTokenSolana(params: WithdrawTokenSolanaParams): Promise<BridgeResult<TokenWithdrawalResponse>>;
|
|
268
303
|
|
|
269
|
-
export {
|
|
304
|
+
export { type AppKitEvmNetwork as A, type BridgeFailure as B, polygonAmoy as C, type DepositNft721EvmParams as D, type EvmBridgeClients as E, sepolia as F, submitEvmNftWithdrawal as G, submitEvmNftWithdrawal721 as H, submitEvmTokenWithdrawal as I, toAppKitNetwork as J, toErrorMessage as K, walletLoginFail as L, withdrawNftEvm as M, withdrawTokenEvm as N, withdrawTokenSolana as O, writeAndWait as P, type SolanaProgramAdapter as S, type WalletLoginResult as W, type BridgeResult as a, type BridgeStage as b, type BridgeSuccess as c, type DepositNftEvmParams as d, type DepositTokenEvmParams as e, type DepositTokenSolanaParams as f, type WalletLoginFailure as g, type WalletLoginStage as h, type WalletLoginSuccess as i, type WithdrawNftEvmParams as j, type WithdrawTokenEvmParams as k, type WithdrawTokenSolanaParams as l, arbitrum as m, base as n, bridgeFail as o, bsc as p, chainById as q, depositNftEvm as r, depositNftEvm721 as s, depositTokenEvm as t, depositTokenSolana as u, ensureErc20Allowance as v, idosChains as w, mainnet as x, optimism as y, polygon as z };
|
|
@@ -0,0 +1,2 @@
|
|
|
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 f(e,t){return {ok:false,stage:e,error:t}}var B={id:1,name:"Ethereum",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://eth.llamarpc.com"]}},blockExplorers:{default:{name:"Etherscan",url:"https://etherscan.io"}}},P={id:56,name:"BNB Smart Chain",nativeCurrency:{name:"BNB",symbol:"BNB",decimals:18},rpcUrls:{default:{http:["https://bsc-dataseed.binance.org"]}},blockExplorers:{default:{name:"BscScan",url:"https://bscscan.com"}}},S={id:137,name:"Polygon",nativeCurrency:{name:"POL",symbol:"POL",decimals:18},rpcUrls:{default:{http:["https://polygon-rpc.com"]}},blockExplorers:{default:{name:"PolygonScan",url:"https://polygonscan.com"}}},R={id:8453,name:"Base",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://mainnet.base.org"]}},blockExplorers:{default:{name:"BaseScan",url:"https://basescan.org"}}},H={id:42161,name:"Arbitrum One",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://arb1.arbitrum.io/rpc"]}},blockExplorers:{default:{name:"Arbiscan",url:"https://arbiscan.io"}}},M={id:10,name:"OP Mainnet",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://mainnet.optimism.io"]}},blockExplorers:{default:{name:"Optimistic Etherscan",url:"https://optimistic.etherscan.io"}}},F={id:11155111,name:"Sepolia",testnet:true,nativeCurrency:{name:"Sepolia Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.sepolia.org"]}},blockExplorers:{default:{name:"Etherscan",url:"https://sepolia.etherscan.io"}}},L={id:80002,name:"Polygon Amoy",testnet:true,nativeCurrency:{name:"POL",symbol:"POL",decimals:18},rpcUrls:{default:{http:["https://rpc-amoy.polygon.technology"]}},blockExplorers:{default:{name:"PolygonScan",url:"https://amoy.polygonscan.com"}}},G={mainnet:B,bsc:P,polygon:S,base:R,arbitrum:H,optimism:M,sepolia:F,polygonAmoy:L};function nt(e){return Object.values(G).find(t=>t.id===e)}function at(e){return {...e,chainNamespace:"eip155",caipNetworkId:`eip155:${e.id}`}}var w=[{type:"function",name:"depositERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"amount",type:"uint256"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"withdrawERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"amount",type:"uint256"},{name:"burnAmount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC1155",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],x=[{type:"function",name:"withdrawERC1155Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],k=[{type:"function",name:"approve",stateMutability:"nonpayable",inputs:[{name:"spender",type:"address"},{name:"amount",type:"uint256"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"allowance",stateMutability:"view",inputs:[{name:"owner",type:"address"},{name:"spender",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"decimals",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint8"}]},{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]}],C=[{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"}]}],D=[{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 h(e,t){let{walletClient:n,publicClient:i,account:d}=e,o=await n.writeContract({address:t.address,abi:t.abi,functionName:t.functionName,args:t.args,account:d,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 A(e){let t=e.RewardPoolAddress;return t||null}async function E(e,t,n,i){return await e.publicClient.readContract({address:t,abi:k,functionName:"allowance",args:[e.account,n]})>=i?null:h(e,{address:t,abi:k,functionName:"approve",args:[n,i]})}async function O(e){let{client:t,clients:n,network:i,tokenAddress:d,amount:o,titleID:p,category:m}=e,r=t.auth.context?.userID;if(!r)return a("approve","Not logged in.");let c=A(i);if(!c)return a("approve","Network has no RewardPoolAddress.");if(o<=0n)return a("approve","Amount must be positive.");try{await E(n,d,c,o);}catch(u){return a("approve",g(u))}let s;try{s=await h(n,{address:c,abi:w,functionName:"depositERC20",args:[d,o,r,p,m??""]});}catch(u){return a("deposit-onchain",g(u))}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 K(e){let{client:t,clients:n,network:i,nftContractAddress:d,tokenId:o,amount:p,titleID:m,category:r}=e,c=t.auth.context?.userID;if(!c)return a("deposit-onchain","Not logged in.");let s=A(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(c,m,r),u;try{u=await h(n,{address:d,abi:C,functionName:"safeTransferFrom",args:[n.account,s,o,p,l]});}catch(W){return a("deposit-onchain",g(W))}let y=await t.blockchain.depositNFT(i.NetworkID??"",u);return y.ok?{ok:true,onChainTxHash:u,data:y.data}:a("report",y.error,{onChainTxHash:u})}async function $(e){let{client:t,clients:n,network:i,nftContractAddress:d,tokenId:o,titleID:p,category:m}=e,r=t.auth.context?.userID;if(!r)return a("deposit-onchain","Not logged in.");let c=A(i);if(!c)return a("deposit-onchain","Network has no RewardPoolAddress.");let s=b(r,p,m),l;try{l=await h(n,{address:d,abi:D,functionName:"safeTransferFrom",args:[n.account,c,o,s]});}catch(y){return a("deposit-onchain",g(y))}let u=await t.blockchain.depositNFT(i.NetworkID??"",l);return u.ok?{ok:true,onChainTxHash:l,data:u.data}:a("report",u.error,{onChainTxHash:l})}async function T(e,t){return h(e,{address:t.ContractAddress,abi:w,functionName:"withdrawERC20",args:[t.TokenAddress,t.WalletAddress,BigInt(t.Amount??"0"),BigInt(t.BurnAmount??"0"),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function I(e,t){return h(e,{address:t.ContractAddress,abi:x,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 z(e,t){return h(e,{address:t.ContractAddress,abi:x,functionName:"withdrawERC721Mint",args:[t.TokenAddress,t.WalletAddress,BigInt(t.TokenId??"0"),BigInt(t.Nonce??"0"),t.Signature??"0x",t.UserID??"",t.TitleID??"",t.Category??"",BigInt(t.Deadline??"0")]})}async function V(e){let{client:t,clients:n,currencyID:i,networkID:d,walletAddress:o,amount:p,category:m}=e,r=await t.blockchain.requestTokenWithdrawal(i,d,o,p,m);if(!r.ok)return a("request",r.error);let c=r.data.EvmSignature,s=r.data.TitleTransactionID??void 0;if(!c)return a("request","Withdrawal response carried no EVM signature.",{titleTransactionID:s});let l;try{l=await T(n,c);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:s})}let u=await v(t,s,l);return u.ok?{ok:true,onChainTxHash:l,data:r.data}:u}async function j(e){let{client:t,clients:n,itemID:i,networkID:d,walletAddress:o,amount:p,category:m}=e,r=await t.blockchain.requestNFTWithdrawal(i,d,o,p,m);if(!r.ok)return a("request",r.error);let c=r.data.EvmSignature,s=r.data.TitleTransactionID??void 0;if(!c)return a("request","Withdrawal response carried no EVM signature.",{titleTransactionID:s});let l;try{l=await I(n,c);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:s})}let u=await v(t,s,l);return u.ok?{ok:true,onChainTxHash:l,data:r.data}:u}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 J(e){let{client:t,clients:n,networkID:i}=e,d=e.walletAddress??n.account,o=await t.auth.requestWalletChallenge(d,i);if(!o.ok)return f("challenge",o.error);let p;try{p=await n.walletClient.signMessage({account:n.account,message:o.data.Message});}catch(r){return f("sign",g(r))}let m=await t.auth.loginWithWallet(d,i,p);return m.ok?{ok:true,data:m.data}:f("login",m.error)}async function X(e){let{client:t,adapter:n,network:i,mint:d,amountRaw:o,titleID:p,category:m}=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 c;try{c=await n.depositSpl({mint:d,amountRaw:o,userID:r,titleID:p,category:normalizeBlockchainCategory(m)});}catch(l){return a("deposit-onchain",g(l))}let s=await t.blockchain.depositToken(i.NetworkID??"",c);return s.ok?{ok:true,onChainTxHash:c,data:s.data}:a("report",s.error,{onChainTxHash:c})}async function Y(e){let{client:t,adapter:n,currencyID:i,networkID:d,walletAddress:o,amount:p,category:m}=e,r=await t.blockchain.requestTokenWithdrawal(i,d,o,p,m);if(!r.ok)return a("request",r.error);let c=r.data.SolanaSignature,s=r.data.TitleTransactionID??void 0;if(!c)return a("request","Withdrawal response carried no Solana signature.",{titleTransactionID:s});let l;try{l=await n.submitWithdrawal(c);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:s})}if(!s)return a("confirm","Missing TitleTransactionID.",{onChainTxHash:l});let u=await t.blockchain.confirmWithdrawal(s,l);return u.ok?{ok:true,onChainTxHash:l,data:r.data}:a("confirm",u.error,{onChainTxHash:l,titleTransactionID:s})}async function Z(e){let{client:t,networkID:n,walletAddress:i,signMessage:d}=e,o=await t.auth.requestWalletChallenge(i,n);if(!o.ok)return f("challenge",o.error);let p;try{let r=await d(new TextEncoder().encode(o.data.Message));p=_(r);}catch(r){return f("sign",g(r))}let m=await t.auth.loginWithWallet(i,n,p);return m.ok?{ok:true,data:m.data}:f("login",m.error)}function _(e){let t="0x";for(let n of e)t+=n.toString(16).padStart(2,"0");return t}
|
|
2
|
+
export{z as A,V as B,j as C,J as D,X as E,Y as F,Z as G,g as a,a as b,f as c,B as d,P as e,S as f,R as g,H as h,M as i,F as j,L as k,G as l,nt as m,at as n,w as o,k as p,C as q,D as r,b as s,h as t,E as u,O as v,K as w,$ as x,T as y,I as z};
|
package/dist/index.cjs
CHANGED
|
@@ -1 +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 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;
|
|
1
|
+
'use strict';var viem=require('viem'),core=require('@idosgames/core');function g(t){return t instanceof viem.BaseError?t.shortMessage:t instanceof Error?t.message:String(t)}function a(t,e,n){return {ok:false,stage:t,error:e,...n}}function h(t,e){return {ok:false,stage:t,error:e}}var B={id:1,name:"Ethereum",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://eth.llamarpc.com"]}},blockExplorers:{default:{name:"Etherscan",url:"https://etherscan.io"}}},P={id:56,name:"BNB Smart Chain",nativeCurrency:{name:"BNB",symbol:"BNB",decimals:18},rpcUrls:{default:{http:["https://bsc-dataseed.binance.org"]}},blockExplorers:{default:{name:"BscScan",url:"https://bscscan.com"}}},S={id:137,name:"Polygon",nativeCurrency:{name:"POL",symbol:"POL",decimals:18},rpcUrls:{default:{http:["https://polygon-rpc.com"]}},blockExplorers:{default:{name:"PolygonScan",url:"https://polygonscan.com"}}},R={id:8453,name:"Base",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://mainnet.base.org"]}},blockExplorers:{default:{name:"BaseScan",url:"https://basescan.org"}}},H={id:42161,name:"Arbitrum One",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://arb1.arbitrum.io/rpc"]}},blockExplorers:{default:{name:"Arbiscan",url:"https://arbiscan.io"}}},M={id:10,name:"OP Mainnet",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://mainnet.optimism.io"]}},blockExplorers:{default:{name:"Optimistic Etherscan",url:"https://optimistic.etherscan.io"}}},F={id:11155111,name:"Sepolia",testnet:true,nativeCurrency:{name:"Sepolia Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.sepolia.org"]}},blockExplorers:{default:{name:"Etherscan",url:"https://sepolia.etherscan.io"}}},L={id:80002,name:"Polygon Amoy",testnet:true,nativeCurrency:{name:"POL",symbol:"POL",decimals:18},rpcUrls:{default:{http:["https://rpc-amoy.polygon.technology"]}},blockExplorers:{default:{name:"PolygonScan",url:"https://amoy.polygonscan.com"}}},G={mainnet:B,bsc:P,polygon:S,base:R,arbitrum:H,optimism:M,sepolia:F,polygonAmoy:L};function ne(t){return Object.values(G).find(e=>e.id===t)}function ae(t){return {...t,chainNamespace:"eip155",caipNetworkId:`eip155:${t.id}`}}var w=[{type:"function",name:"depositERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"amount",type:"uint256"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"withdrawERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"amount",type:"uint256"},{name:"burnAmount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC1155",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],x=[{type:"function",name:"withdrawERC1155Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],b=[{type:"function",name:"approve",stateMutability:"nonpayable",inputs:[{name:"spender",type:"address"},{name:"amount",type:"uint256"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"allowance",stateMutability:"view",inputs:[{name:"owner",type:"address"},{name:"spender",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"decimals",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint8"}]},{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]}],C=[{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"}]}],D=[{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 k(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:p}=t,o=await n.writeContract({address:e.address,abi:e.abi,functionName:e.functionName,args:e.args,account:p,chain:n.chain,value:e.value});if((await i.waitForTransactionReceipt({hash:o})).status==="reverted")throw new Error(`On-chain transaction reverted (${o}).`);return o}function A(t){let e=t.RewardPoolAddress;return e||null}async function E(t,e,n,i){return await t.publicClient.readContract({address:e,abi:b,functionName:"allowance",args:[t.account,n]})>=i?null:f(t,{address:e,abi:b,functionName:"approve",args:[n,i]})}async function O(t){let{client:e,clients:n,network:i,tokenAddress:p,amount:o,titleID:d,category:m}=t,r=e.auth.context?.userID;if(!r)return a("approve","Not logged in.");let c=A(i);if(!c)return a("approve","Network has no RewardPoolAddress.");if(o<=0n)return a("approve","Amount must be positive.");try{await E(n,p,c,o);}catch(u){return a("approve",g(u))}let s;try{s=await f(n,{address:c,abi:w,functionName:"depositERC20",args:[p,o,r,d,m??""]});}catch(u){return a("deposit-onchain",g(u))}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 K(t){let{client:e,clients:n,network:i,nftContractAddress:p,tokenId:o,amount:d,titleID:m,category:r}=t,c=e.auth.context?.userID;if(!c)return a("deposit-onchain","Not logged in.");let s=A(i);if(!s)return a("deposit-onchain","Network has no RewardPoolAddress.");if(d<=0n)return a("deposit-onchain","Amount must be positive.");let l=k(c,m,r),u;try{u=await f(n,{address:p,abi:C,functionName:"safeTransferFrom",args:[n.account,s,o,d,l]});}catch(W){return a("deposit-onchain",g(W))}let y=await e.blockchain.depositNFT(i.NetworkID??"",u);return y.ok?{ok:true,onChainTxHash:u,data:y.data}:a("report",y.error,{onChainTxHash:u})}async function $(t){let{client:e,clients:n,network:i,nftContractAddress:p,tokenId:o,titleID:d,category:m}=t,r=e.auth.context?.userID;if(!r)return a("deposit-onchain","Not logged in.");let c=A(i);if(!c)return a("deposit-onchain","Network has no RewardPoolAddress.");let s=k(r,d,m),l;try{l=await f(n,{address:p,abi:D,functionName:"safeTransferFrom",args:[n.account,c,o,s]});}catch(y){return a("deposit-onchain",g(y))}let u=await e.blockchain.depositNFT(i.NetworkID??"",l);return u.ok?{ok:true,onChainTxHash:l,data:u.data}:a("report",u.error,{onChainTxHash:l})}async function T(t,e){return f(t,{address:e.ContractAddress,abi:w,functionName:"withdrawERC20",args:[e.TokenAddress,e.WalletAddress,BigInt(e.Amount??"0"),BigInt(e.BurnAmount??"0"),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function I(t,e){return f(t,{address:e.ContractAddress,abi:x,functionName:"withdrawERC1155Mint",args:[e.TokenAddress,e.WalletAddress,BigInt(e.TokenId??"0"),BigInt(e.Amount??"0"),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function z(t,e){return f(t,{address:e.ContractAddress,abi:x,functionName:"withdrawERC721Mint",args:[e.TokenAddress,e.WalletAddress,BigInt(e.TokenId??"0"),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function V(t){let{client:e,clients:n,currencyID:i,networkID:p,walletAddress:o,amount:d,category:m}=t,r=await e.blockchain.requestTokenWithdrawal(i,p,o,d,m);if(!r.ok)return a("request",r.error);let c=r.data.EvmSignature,s=r.data.TitleTransactionID??void 0;if(!c)return a("request","Withdrawal response carried no EVM signature.",{titleTransactionID:s});let l;try{l=await T(n,c);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:s})}let u=await v(e,s,l);return u.ok?{ok:true,onChainTxHash:l,data:r.data}:u}async function j(t){let{client:e,clients:n,itemID:i,networkID:p,walletAddress:o,amount:d,category:m}=t,r=await e.blockchain.requestNFTWithdrawal(i,p,o,d,m);if(!r.ok)return a("request",r.error);let c=r.data.EvmSignature,s=r.data.TitleTransactionID??void 0;if(!c)return a("request","Withdrawal response carried no EVM signature.",{titleTransactionID:s});let l;try{l=await I(n,c);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:s})}let u=await v(e,s,l);return u.ok?{ok:true,onChainTxHash:l,data:r.data}:u}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 J(t){let{client:e,clients:n,networkID:i}=t,p=t.walletAddress??n.account,o=await e.auth.requestWalletChallenge(p,i);if(!o.ok)return h("challenge",o.error);let d;try{d=await n.walletClient.signMessage({account:n.account,message:o.data.Message});}catch(r){return h("sign",g(r))}let m=await e.auth.loginWithWallet(p,i,d);return m.ok?{ok:true,data:m.data}:h("login",m.error)}async function X(t){let{client:e,adapter:n,network:i,mint:p,amountRaw:o,titleID:d,category:m}=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 c;try{c=await n.depositSpl({mint:p,amountRaw:o,userID:r,titleID:d,category:core.normalizeBlockchainCategory(m)});}catch(l){return a("deposit-onchain",g(l))}let s=await e.blockchain.depositToken(i.NetworkID??"",c);return s.ok?{ok:true,onChainTxHash:c,data:s.data}:a("report",s.error,{onChainTxHash:c})}async function Y(t){let{client:e,adapter:n,currencyID:i,networkID:p,walletAddress:o,amount:d,category:m}=t,r=await e.blockchain.requestTokenWithdrawal(i,p,o,d,m);if(!r.ok)return a("request",r.error);let c=r.data.SolanaSignature,s=r.data.TitleTransactionID??void 0;if(!c)return a("request","Withdrawal response carried no Solana signature.",{titleTransactionID:s});let l;try{l=await n.submitWithdrawal(c);}catch(y){return a("withdraw-onchain",g(y),{titleTransactionID:s})}if(!s)return a("confirm","Missing TitleTransactionID.",{onChainTxHash:l});let u=await e.blockchain.confirmWithdrawal(s,l);return u.ok?{ok:true,onChainTxHash:l,data:r.data}:a("confirm",u.error,{onChainTxHash:l,titleTransactionID:s})}async function Z(t){let{client:e,networkID:n,walletAddress:i,signMessage:p}=t,o=await e.auth.requestWalletChallenge(i,n);if(!o.ok)return h("challenge",o.error);let d;try{let r=await p(new TextEncoder().encode(o.data.Message));d=_(r);}catch(r){return h("sign",g(r))}let m=await e.auth.loginWithWallet(i,n,d);return m.ok?{ok:true,data:m.data}:h("login",m.error)}function _(t){let e="0x";for(let n of t)e+=n.toString(16).padStart(2,"0");return e}
|
|
2
|
+
exports.arbitrum=H;exports.base=R;exports.bridgeFail=a;exports.bsc=P;exports.chainById=ne;exports.depositNftEvm=K;exports.depositNftEvm721=$;exports.depositTokenEvm=O;exports.depositTokenSolana=X;exports.encodeNftDepositData=k;exports.ensureErc20Allowance=E;exports.erc1155Abi=C;exports.erc20Abi=b;exports.erc721Abi=D;exports.idosChains=G;exports.loginWithWalletEvm=J;exports.loginWithWalletSolana=Z;exports.mainnet=B;exports.optimism=M;exports.polygon=S;exports.polygonAmoy=L;exports.rewardPoolAbi=w;exports.sepolia=F;exports.submitEvmNftWithdrawal=I;exports.submitEvmNftWithdrawal721=z;exports.submitEvmTokenWithdrawal=T;exports.toAppKitNetwork=ae;exports.toErrorMessage=g;exports.walletLoginFail=h;exports.withdrawNftEvm=j;exports.withdrawTokenEvm=V;exports.withdrawTokenSolana=Y;exports.writeAndWait=f;
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { E as EvmBridgeClients, W as WalletLoginResult } from './bridge-
|
|
2
|
-
export { B as BridgeFailure, a as BridgeResult, b as BridgeStage, c as BridgeSuccess, D as DepositNft721EvmParams, d as DepositNftEvmParams, e as DepositTokenEvmParams, f as DepositTokenSolanaParams, S as SolanaProgramAdapter, g as WalletLoginFailure, h as WalletLoginStage, i as WalletLoginSuccess, j as WithdrawNftEvmParams, k as WithdrawTokenEvmParams, l as WithdrawTokenSolanaParams, m as
|
|
1
|
+
import { E as EvmBridgeClients, W as WalletLoginResult } from './bridge-DvafuXl9.cjs';
|
|
2
|
+
export { A as AppKitEvmNetwork, B as BridgeFailure, a as BridgeResult, b as BridgeStage, c as BridgeSuccess, D as DepositNft721EvmParams, d as DepositNftEvmParams, e as DepositTokenEvmParams, f as DepositTokenSolanaParams, S as SolanaProgramAdapter, g as WalletLoginFailure, h as WalletLoginStage, i as WalletLoginSuccess, j as WithdrawNftEvmParams, k as WithdrawTokenEvmParams, l as WithdrawTokenSolanaParams, m as arbitrum, n as base, o as bridgeFail, p as bsc, q as chainById, r as depositNftEvm, s as depositNftEvm721, t as depositTokenEvm, u as depositTokenSolana, v as ensureErc20Allowance, w as idosChains, x as mainnet, y as optimism, z as polygon, C as polygonAmoy, F as sepolia, G as submitEvmNftWithdrawal, H as submitEvmNftWithdrawal721, I as submitEvmTokenWithdrawal, J as toAppKitNetwork, K as toErrorMessage, L as walletLoginFail, M as withdrawNftEvm, N as withdrawTokenEvm, O as withdrawTokenSolana, P as writeAndWait } from './bridge-DvafuXl9.cjs';
|
|
3
3
|
import { Hex } from 'viem';
|
|
4
4
|
import { IDosGamesClient, ClientState } from '@idosgames/core';
|
|
5
5
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { E as EvmBridgeClients, W as WalletLoginResult } from './bridge-
|
|
2
|
-
export { B as BridgeFailure, a as BridgeResult, b as BridgeStage, c as BridgeSuccess, D as DepositNft721EvmParams, d as DepositNftEvmParams, e as DepositTokenEvmParams, f as DepositTokenSolanaParams, S as SolanaProgramAdapter, g as WalletLoginFailure, h as WalletLoginStage, i as WalletLoginSuccess, j as WithdrawNftEvmParams, k as WithdrawTokenEvmParams, l as WithdrawTokenSolanaParams, m as
|
|
1
|
+
import { E as EvmBridgeClients, W as WalletLoginResult } from './bridge-DvafuXl9.js';
|
|
2
|
+
export { A as AppKitEvmNetwork, B as BridgeFailure, a as BridgeResult, b as BridgeStage, c as BridgeSuccess, D as DepositNft721EvmParams, d as DepositNftEvmParams, e as DepositTokenEvmParams, f as DepositTokenSolanaParams, S as SolanaProgramAdapter, g as WalletLoginFailure, h as WalletLoginStage, i as WalletLoginSuccess, j as WithdrawNftEvmParams, k as WithdrawTokenEvmParams, l as WithdrawTokenSolanaParams, m as arbitrum, n as base, o as bridgeFail, p as bsc, q as chainById, r as depositNftEvm, s as depositNftEvm721, t as depositTokenEvm, u as depositTokenSolana, v as ensureErc20Allowance, w as idosChains, x as mainnet, y as optimism, z as polygon, C as polygonAmoy, F as sepolia, G as submitEvmNftWithdrawal, H as submitEvmNftWithdrawal721, I as submitEvmTokenWithdrawal, J as toAppKitNetwork, K as toErrorMessage, L as walletLoginFail, M as withdrawNftEvm, N as withdrawTokenEvm, O as withdrawTokenSolana, P as writeAndWait } from './bridge-DvafuXl9.js';
|
|
3
3
|
import { Hex } from 'viem';
|
|
4
4
|
import { IDosGamesClient, ClientState } from '@idosgames/core';
|
|
5
5
|
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{b as bridgeFail,
|
|
1
|
+
export{h as arbitrum,g as base,b as bridgeFail,e as bsc,m as chainById,w as depositNftEvm,x as depositNftEvm721,v as depositTokenEvm,E as depositTokenSolana,s as encodeNftDepositData,u as ensureErc20Allowance,q as erc1155Abi,p as erc20Abi,r as erc721Abi,l as idosChains,D as loginWithWalletEvm,G as loginWithWalletSolana,d as mainnet,i as optimism,f as polygon,k as polygonAmoy,o as rewardPoolAbi,j as sepolia,z as submitEvmNftWithdrawal,A as submitEvmNftWithdrawal721,y as submitEvmTokenWithdrawal,n as toAppKitNetwork,a as toErrorMessage,c as walletLoginFail,C as withdrawNftEvm,B as withdrawTokenEvm,F as withdrawTokenSolana,t as writeAndWait}from'./chunk-ZPNBMRUO.js';
|
package/dist/react/index.cjs
CHANGED
|
@@ -1 +1,2 @@
|
|
|
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:i,appIcon:o,transports:l,connectors:c}=t,a=r||i?{name:r??"iDosGames",description:r??"iDosGames game",url:i??"",icons:o?[o]:[]}:void 0,m=c??[connectors.injected(),connectors.coinbaseWallet({appName:r??"iDosGames"}),...n?[connectors.walletConnect({projectId:n,metadata:a,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,[i]=react.useState(()=>n??new reactQuery.QueryClient);return jsxRuntime.jsx(wagmi.WagmiProvider,{config:e,children:jsxRuntime.jsx(reactQuery.QueryClientProvider,{client:i,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:i}=t,o=await n.writeContract({address:e.address,abi:e.abi,functionName:e.functionName,args:e.args,account:i,chain:n.chain,value:e.value});if((await r.waitForTransactionReceipt({hash:o})).status==="reverted")throw new Error(`On-chain transaction reverted (${o}).`);return o}function g(t){return t instanceof viem.BaseError?t.shortMessage:t instanceof Error?t.message:String(t)}function s(t,e,n){return {ok:false,stage:t,error:e,...n}}function f(t,e){return {ok:false,stage:t,error:e}}function U(t){let e=t.RewardPoolAddress;return e||null}async function j(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 I(t){let{client:e,clients:n,network:r,tokenAddress:i,amount:o,titleID:l,category:c}=t,a=e.auth.context?.userID;if(!a)return s("approve","Not logged in.");let m=U(r);if(!m)return s("approve","Network has no RewardPoolAddress.");if(o<=0n)return s("approve","Amount must be positive.");try{await j(n,i,m,o);}catch(u){return s("approve",g(u))}let d;try{d=await w(n,{address:m,abi:D,functionName:"depositERC20",args:[i,o,a,l,c??""]});}catch(u){return s("deposit-onchain",g(u))}let p=await e.blockchain.depositToken(r.NetworkID??"",d);return p.ok?{ok:true,onChainTxHash:d,data:p.data}:s("report",p.error,{onChainTxHash:d})}async function E(t){let{client:e,clients:n,network:r,nftContractAddress:i,tokenId:o,amount:l,titleID:c,category:a}=t,m=e.auth.context?.userID;if(!m)return s("deposit-onchain","Not logged in.");let d=U(r);if(!d)return s("deposit-onchain","Network has no RewardPoolAddress.");if(l<=0n)return s("deposit-onchain","Amount must be positive.");let p=q(m,c,a),u;try{u=await w(n,{address:i,abi:O,functionName:"safeTransferFrom",args:[n.account,d,o,l,p]});}catch(W){return s("deposit-onchain",g(W))}let y=await e.blockchain.depositNFT(r.NetworkID??"",u);return y.ok?{ok:true,onChainTxHash:u,data:y.data}:s("report",y.error,{onChainTxHash:u})}async function Q(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 z(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:i,walletAddress:o,amount:l,category:c}=t,a=await e.blockchain.requestTokenWithdrawal(r,i,o,l,c);if(!a.ok)return s("request",a.error);let m=a.data.EvmSignature,d=a.data.TitleTransactionID??void 0;if(!m)return s("request","Withdrawal response carried no EVM signature.",{titleTransactionID:d});let p;try{p=await Q(n,m);}catch(y){return s("withdraw-onchain",g(y),{titleTransactionID:d})}let u=await V(e,d,p);return u.ok?{ok:true,onChainTxHash:p,data:a.data}:u}async function B(t){let{client:e,clients:n,itemID:r,networkID:i,walletAddress:o,amount:l,category:c}=t,a=await e.blockchain.requestNFTWithdrawal(r,i,o,l,c);if(!a.ok)return s("request",a.error);let m=a.data.EvmSignature,d=a.data.TitleTransactionID??void 0;if(!m)return s("request","Withdrawal response carried no EVM signature.",{titleTransactionID:d});let p;try{p=await z(n,m);}catch(y){return s("withdraw-onchain",g(y),{titleTransactionID:d})}let u=await V(e,d,p);return u.ok?{ok:true,onChainTxHash:p,data:a.data}:u}async function V(t,e,n){if(!e)return s("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let r=await t.blockchain.confirmWithdrawal(e,n);return r.ok?{ok:true,onChainTxHash:n,data:r.data}:s("confirm",r.error,{onChainTxHash:n,titleTransactionID:e})}async function k(t){let{client:e,clients:n,networkID:r}=t,i=t.walletAddress??n.account,o=await e.auth.requestWalletChallenge(i,r);if(!o.ok)return f("challenge",o.error);let l;try{l=await n.walletClient.signMessage({account:n.account,message:o.data.Message});}catch(a){return f("sign",g(a))}let c=await e.auth.loginWithWallet(i,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,i)=>n?k({client:t,clients:n,networkID:r,walletAddress:i}):Promise.resolve(f("challenge",C)),depositToken:r=>n?I({client:t,clients:n,titleID:e,...r}):Promise.resolve(s("approve",C)),depositNft:r=>n?E({client:t,clients:n,titleID:e,...r}):Promise.resolve(s("deposit-onchain",C)),withdrawToken:r=>n?N({client:t,clients:n,...r}):Promise.resolve(s("withdraw-onchain",C)),withdrawNft:r=>n?B({client:t,clients:n,...r}):Promise.resolve(s("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 be(t){let e=i=>t.find(o=>o.id===i||o.type===i),n=e("injected"),r=typeof window<"u"&&window.ethereum!=null;return n&&r?n:e("walletConnect")??n??t[0]}function K(t){let{client:e,networkID:n,onAuthenticated:r,disabled:i,label:o,style:l}=t,c=wagmi.useConfig(),{isConnected:a}=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(!a){let M=be(d);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:i||u,style:{...Te,...i||u?{opacity:.6,cursor:"default"}:null,...l},children:u?"Check your wallet\u2026":a?o??"Sign in with wallet":"Connect wallet"}),W&&jsxRuntime.jsx("span",{role:"alert",style:Ae,children:W})]})}var Te={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},Ae={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};function Ne(t){let{endpoint:e,wallets:n,autoConnect:r=true,children:i}=t;return jsxRuntime.jsx(walletAdapterReact.ConnectionProvider,{endpoint:e,children:jsxRuntime.jsx(walletAdapterReact.WalletProvider,{wallets:n,autoConnect:r,children:i})})}async function S(t){let{client:e,adapter:n,network:r,mint:i,amountRaw:o,titleID:l,category:c}=t,a=e.auth.context?.userID;if(!a)return s("deposit-onchain","Not logged in.");if(o<=0n)return s("deposit-onchain","Amount must be positive.");let m;try{m=await n.depositSpl({mint:i,amountRaw:o,userID:a,titleID:l,category:core.normalizeBlockchainCategory(c)});}catch(p){return s("deposit-onchain",g(p))}let d=await e.blockchain.depositToken(r.NetworkID??"",m);return d.ok?{ok:true,onChainTxHash:m,data:d.data}:s("report",d.error,{onChainTxHash:m})}async function R(t){let{client:e,adapter:n,currencyID:r,networkID:i,walletAddress:o,amount:l,category:c}=t,a=await e.blockchain.requestTokenWithdrawal(r,i,o,l,c);if(!a.ok)return s("request",a.error);let m=a.data.SolanaSignature,d=a.data.TitleTransactionID??void 0;if(!m)return s("request","Withdrawal response carried no Solana signature.",{titleTransactionID:d});let p;try{p=await n.submitWithdrawal(m);}catch(y){return s("withdraw-onchain",g(y),{titleTransactionID:d})}if(!d)return s("confirm","Missing TitleTransactionID.",{onChainTxHash:p});let u=await e.blockchain.confirmWithdrawal(d,p);return u.ok?{ok:true,onChainTxHash:p,data:a.data}:s("confirm",u.error,{onChainTxHash:p,titleTransactionID:d})}async function F(t){let{client:e,networkID:n,walletAddress:r,signMessage:i}=t,o=await e.auth.requestWalletChallenge(r,n);if(!o.ok)return f("challenge",o.error);let l;try{let a=await i(new TextEncoder().encode(o.data.Message));l=Se(a);}catch(a){return f("sign",g(a))}let c=await e.auth.loginWithWallet(r,n,l);return c.ok?{ok:true,data:c.data}:f("login",c.error)}function Se(t){let e="0x";for(let n of t)e+=n.toString(16).padStart(2,"0");return e}var J="Wallet not connected.";function Fe(t,e,n){let{publicKey:r,signMessage:i}=walletAdapterReact.useWallet(),o=r?.toBase58()??null;return {connected:!!o,account:o,loginWithWallet:(l,c)=>{let a=c??o;return a?i?F({client:t,networkID:l,walletAddress:a,signMessage:i}):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??o;return c?R({client:t,adapter:n,...l,walletAddress:c}):Promise.resolve(s("request",J))}}}exports.IDosGamesWalletProvider=P;exports.SolanaWalletBridgeProvider=Ne;exports.WalletLogin=Ce;exports.WalletLoginButton=K;exports.createEvmWalletConfig=re;exports.useEvmBridge=ge;exports.useEvmBridgeClients=b;exports.useSolanaBridge=Fe;
|
|
1
|
+
'use strict';var wagmi=require('wagmi'),connectors=require('wagmi/connectors'),appkitAdapterWagmi=require('@reown/appkit-adapter-wagmi'),react=require('@reown/appkit/react'),reactQuery=require('@tanstack/react-query'),react$1=require('react'),jsxRuntime=require('react/jsx-runtime'),viem=require('viem'),core=require('@idosgames/core'),actions=require('wagmi/actions'),walletAdapterReact=require('@solana/wallet-adapter-react');var G={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"}}},O={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"}}},q={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"}}},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"}}},j={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"}}},Q={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"}}},_={mainnet:G,bsc:O,polygon:q,base:U,arbitrum:K,optimism:j,sepolia:z,polygonAmoy:Q};function de(t){return Object.values(_).find(e=>e.id===t)}function $(t){return {...t,chainNamespace:"eip155",caipNetworkId:`eip155:${t.id}`}}var V=null;function J(){return V}function he(t){let{chains:e,walletConnectProjectId:n,appName:r,appUrl:i,appIcon:o,transports:c,connectors:l}=t,a={};for(let d of e)a[d.id]=c?.[d.id]??wagmi.http();let u=i??(typeof window<"u"?window.location.origin:""),p={name:r??"iDosGames",description:r??"iDosGames game",url:u,icons:o?[o]:[]};if(n&&!l){let d=e.map($),g=new appkitAdapterWagmi.WagmiAdapter({networks:d,projectId:n,transports:a});return V=react.createAppKit({adapters:[g],networks:d,projectId:n,metadata:p,features:{analytics:false,email:false,socials:false}}),g.wagmiConfig}let m=l??[connectors.injected(),connectors.coinbaseWallet({appName:r??"iDosGames"})];return wagmi.createConfig({chains:e,connectors:m,transports:a})}function E(t){let{wagmiConfig:e,queryClient:n,children:r}=t,[i]=react$1.useState(()=>n??new reactQuery.QueryClient);return jsxRuntime.jsx(wagmi.WagmiProvider,{config:e,children:jsxRuntime.jsx(reactQuery.QueryClientProvider,{client:i,children:r})})}var W=[{type:"function",name:"depositERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"amount",type:"uint256"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"withdrawERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"amount",type:"uint256"},{name:"burnAmount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC1155",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],Y=[{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"}]}],Z=[{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 ee(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:i}=t,o=await n.writeContract({address:e.address,abi:e.abi,functionName:e.functionName,args:e.args,account:i,chain:n.chain,value:e.value});if((await r.waitForTransactionReceipt({hash:o})).status==="reverted")throw new Error(`On-chain transaction reverted (${o}).`);return o}function f(t){return t instanceof viem.BaseError?t.shortMessage:t instanceof Error?t.message:String(t)}function s(t,e,n){return {ok:false,stage:t,error:e,...n}}function y(t,e){return {ok:false,stage:t,error:e}}function te(t){let e=t.RewardPoolAddress;return e||null}async function ne(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 P(t){let{client:e,clients:n,network:r,tokenAddress:i,amount:o,titleID:c,category:l}=t,a=e.auth.context?.userID;if(!a)return s("approve","Not logged in.");let u=te(r);if(!u)return s("approve","Network has no RewardPoolAddress.");if(o<=0n)return s("approve","Amount must be positive.");try{await ne(n,i,u,o);}catch(d){return s("approve",f(d))}let p;try{p=await w(n,{address:u,abi:W,functionName:"depositERC20",args:[i,o,a,c,l??""]});}catch(d){return s("deposit-onchain",f(d))}let m=await e.blockchain.depositToken(r.NetworkID??"",p);return m.ok?{ok:true,onChainTxHash:p,data:m.data}:s("report",m.error,{onChainTxHash:p})}async function I(t){let{client:e,clients:n,network:r,nftContractAddress:i,tokenId:o,amount:c,titleID:l,category:a}=t,u=e.auth.context?.userID;if(!u)return s("deposit-onchain","Not logged in.");let p=te(r);if(!p)return s("deposit-onchain","Network has no RewardPoolAddress.");if(c<=0n)return s("deposit-onchain","Amount must be positive.");let m=ee(u,l,a),d;try{d=await w(n,{address:i,abi:Z,functionName:"safeTransferFrom",args:[n.account,p,o,c,m]});}catch(v){return s("deposit-onchain",f(v))}let g=await e.blockchain.depositNFT(r.NetworkID??"",d);return g.ok?{ok:true,onChainTxHash:d,data:g.data}:s("report",g.error,{onChainTxHash:d})}async function re(t,e){return w(t,{address:e.ContractAddress,abi:W,functionName:"withdrawERC20",args:[e.TokenAddress,e.WalletAddress,BigInt(e.Amount??"0"),BigInt(e.BurnAmount??"0"),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function oe(t,e){return w(t,{address:e.ContractAddress,abi:Y,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:i,walletAddress:o,amount:c,category:l}=t,a=await e.blockchain.requestTokenWithdrawal(r,i,o,c,l);if(!a.ok)return s("request",a.error);let u=a.data.EvmSignature,p=a.data.TitleTransactionID??void 0;if(!u)return s("request","Withdrawal response carried no EVM signature.",{titleTransactionID:p});let m;try{m=await re(n,u);}catch(g){return s("withdraw-onchain",f(g),{titleTransactionID:p})}let d=await ae(e,p,m);return d.ok?{ok:true,onChainTxHash:m,data:a.data}:d}async function B(t){let{client:e,clients:n,itemID:r,networkID:i,walletAddress:o,amount:c,category:l}=t,a=await e.blockchain.requestNFTWithdrawal(r,i,o,c,l);if(!a.ok)return s("request",a.error);let u=a.data.EvmSignature,p=a.data.TitleTransactionID??void 0;if(!u)return s("request","Withdrawal response carried no EVM signature.",{titleTransactionID:p});let m;try{m=await oe(n,u);}catch(g){return s("withdraw-onchain",f(g),{titleTransactionID:p})}let d=await ae(e,p,m);return d.ok?{ok:true,onChainTxHash:m,data:a.data}:d}async function ae(t,e,n){if(!e)return s("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let r=await t.blockchain.confirmWithdrawal(e,n);return r.ok?{ok:true,onChainTxHash:n,data:r.data}:s("confirm",r.error,{onChainTxHash:n,titleTransactionID:e})}async function k(t){let{client:e,clients:n,networkID:r}=t,i=t.walletAddress??n.account,o=await e.auth.requestWalletChallenge(i,r);if(!o.ok)return y("challenge",o.error);let c;try{c=await n.walletClient.signMessage({account:n.account,message:o.data.Message});}catch(a){return y("sign",f(a))}let l=await e.auth.loginWithWallet(i,r,c);return l.ok?{ok:true,data:l.data}:y("login",l.error)}function T(){let{address:t}=wagmi.useAccount(),e=wagmi.usePublicClient(),{data:n}=wagmi.useWalletClient();return !t||!e||!n?null:{account:t,publicClient:e,walletClient:n}}var b="Wallet not connected.";function Pe(t,e){let n=T();return {connected:!!n,account:n?.account??null,loginWithWallet:(r,i)=>n?k({client:t,clients:n,networkID:r,walletAddress:i}):Promise.resolve(y("challenge",b)),depositToken:r=>n?P({client:t,clients:n,titleID:e,...r}):Promise.resolve(s("approve",b)),depositNft:r=>n?I({client:t,clients:n,titleID:e,...r}):Promise.resolve(s("deposit-onchain",b)),withdrawToken:r=>n?N({client:t,clients:n,...r}):Promise.resolve(s("withdraw-onchain",b)),withdrawNft:r=>n?B({client:t,clients:n,...r}):Promise.resolve(s("withdraw-onchain",b))}}function Le(t){let{wagmiConfig:e,...n}=t;return jsxRuntime.jsx(E,{wagmiConfig:e,children:jsxRuntime.jsx(se,{...n})})}function Me(t){return t instanceof Error&&(t.name==="ConnectorAlreadyConnectedError"||t.message.includes("already connected"))}function Ge(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 Oe(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 qe(t,e=18e4){return actions.getAccount(t).isConnected?Promise.resolve(true):new Promise(n=>{let r=false,i=l=>{r||(r=true,o(),clearTimeout(c),n(l));},o=actions.watchAccount(t,{onChange:l=>{l.isConnected&&i(true);}}),c=setTimeout(()=>i(false),e);})}function Ue(t){let e=i=>t.find(o=>o.id===i||o.type===i),n=e("injected"),r=typeof window<"u"&&window.ethereum!=null;return n&&r?n:e("walletConnect")??n??t[0]}function se(t){let{client:e,networkID:n,onAuthenticated:r,disabled:i,label:o,style:c}=t,l=wagmi.useConfig(),{isConnected:a}=wagmi.useAccount(),{connectAsync:u,connectors:p}=wagmi.useConnect(),m=T(),[d,g]=react$1.useState(false),[v,h]=react$1.useState(null),pe=async()=>{g(true),h(null);try{if(!a){let H=J();if(H){if(await H.open(),!await qe(l)){h("No wallet was connected.");return}}else {let L=Ue(p);if(!L){h("No wallet connector is configured.");return}try{await u({connector:L});}catch(M){if(!Me(M))throw M}}}let C=m??await Oe(l);if(!C){h("Wallet client is not available.");return}let D=await k({client:e,clients:C,networkID:n});if(D.ok){r();return}h(D.stage==="sign"?"Signature declined.":D.error??"Wallet sign-in failed.");}catch(C){console.error("[idosgames/wallet] wallet sign-in failed:",C),h(Ge(C));}finally{g(false);}};return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:()=>{pe();},disabled:i||d,style:{...Ke,...i||d?{opacity:.6,cursor:"default"}:null,...c},children:d?"Check your wallet\u2026":a?o??"Sign in with wallet":"Connect wallet"}),v&&jsxRuntime.jsx("span",{role:"alert",style:je,children:v})]})}var Ke={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},je={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};function Ve(t){let{endpoint:e,wallets:n,autoConnect:r=true,children:i}=t;return jsxRuntime.jsx(walletAdapterReact.ConnectionProvider,{endpoint:e,children:jsxRuntime.jsx(walletAdapterReact.WalletProvider,{wallets:n,autoConnect:r,children:i})})}async function S(t){let{client:e,adapter:n,network:r,mint:i,amountRaw:o,titleID:c,category:l}=t,a=e.auth.context?.userID;if(!a)return s("deposit-onchain","Not logged in.");if(o<=0n)return s("deposit-onchain","Amount must be positive.");let u;try{u=await n.depositSpl({mint:i,amountRaw:o,userID:a,titleID:c,category:core.normalizeBlockchainCategory(l)});}catch(m){return s("deposit-onchain",f(m))}let p=await e.blockchain.depositToken(r.NetworkID??"",u);return p.ok?{ok:true,onChainTxHash:u,data:p.data}:s("report",p.error,{onChainTxHash:u})}async function R(t){let{client:e,adapter:n,currencyID:r,networkID:i,walletAddress:o,amount:c,category:l}=t,a=await e.blockchain.requestTokenWithdrawal(r,i,o,c,l);if(!a.ok)return s("request",a.error);let u=a.data.SolanaSignature,p=a.data.TitleTransactionID??void 0;if(!u)return s("request","Withdrawal response carried no Solana signature.",{titleTransactionID:p});let m;try{m=await n.submitWithdrawal(u);}catch(g){return s("withdraw-onchain",f(g),{titleTransactionID:p})}if(!p)return s("confirm","Missing TitleTransactionID.",{onChainTxHash:m});let d=await e.blockchain.confirmWithdrawal(p,m);return d.ok?{ok:true,onChainTxHash:m,data:a.data}:s("confirm",d.error,{onChainTxHash:m,titleTransactionID:p})}async function F(t){let{client:e,networkID:n,walletAddress:r,signMessage:i}=t,o=await e.auth.requestWalletChallenge(r,n);if(!o.ok)return y("challenge",o.error);let c;try{let a=await i(new TextEncoder().encode(o.data.Message));c=Xe(a);}catch(a){return y("sign",f(a))}let l=await e.auth.loginWithWallet(r,n,c);return l.ok?{ok:true,data:l.data}:y("login",l.error)}function Xe(t){let e="0x";for(let n of t)e+=n.toString(16).padStart(2,"0");return e}var ce="Wallet not connected.";function Ze(t,e,n){let{publicKey:r,signMessage:i}=walletAdapterReact.useWallet(),o=r?.toBase58()??null;return {connected:!!o,account:o,loginWithWallet:(c,l)=>{let a=l??o;return a?i?F({client:t,networkID:c,walletAddress:a,signMessage:i}):Promise.resolve(y("sign","The connected wallet does not support message signing.")):Promise.resolve(y("challenge",ce))},depositToken:c=>S({client:t,adapter:n,titleID:e,...c}),withdrawToken:c=>{let l=c.walletAddress??o;return l?R({client:t,adapter:n,...c,walletAddress:l}):Promise.resolve(s("request",ce))}}}
|
|
2
|
+
exports.IDosGamesWalletProvider=E;exports.SolanaWalletBridgeProvider=Ve;exports.WalletLogin=Le;exports.WalletLoginButton=se;exports.arbitrum=K;exports.base=U;exports.bsc=O;exports.chainById=de;exports.createEvmWalletConfig=he;exports.idosChains=_;exports.mainnet=G;exports.optimism=j;exports.polygon=q;exports.polygonAmoy=Q;exports.sepolia=z;exports.useEvmBridge=Pe;exports.useEvmBridgeClients=T;exports.useSolanaBridge=Ze;
|
package/dist/react/index.d.cts
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
|
-
import * as wagmi from 'wagmi';
|
|
2
1
|
import { CreateConnectorFn, Config } from 'wagmi';
|
|
3
2
|
import { Chain, Transport } from 'viem';
|
|
3
|
+
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-DvafuXl9.cjs';
|
|
4
|
+
export { m as arbitrum, n as base, p as bsc, q as chainById, w as idosChains, x as mainnet, y as optimism, z as polygon, C as polygonAmoy, F as sepolia } from '../bridge-DvafuXl9.cjs';
|
|
4
5
|
import * as react from 'react';
|
|
5
6
|
import { ReactNode, CSSProperties } from 'react';
|
|
6
7
|
import { QueryClient } from '@tanstack/react-query';
|
|
7
8
|
import { ClientState, DepositTokenResponse, DepositNFTResponse, TokenWithdrawalResponse, NFTWithdrawalResponse, IDosGamesClient } from '@idosgames/core';
|
|
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';
|
|
9
9
|
import { Adapter } from '@solana/wallet-adapter-base';
|
|
10
10
|
|
|
11
11
|
interface EvmWalletConfigOptions {
|
|
12
12
|
/** Chains the game supports, matching the EVM networks in the title's blockchain config. */
|
|
13
13
|
chains: readonly [Chain, ...Chain[]];
|
|
14
14
|
/**
|
|
15
|
-
* WalletConnect Cloud project id — required
|
|
16
|
-
*
|
|
15
|
+
* WalletConnect Cloud / Reown project id — required for MOBILE wallets. With it, the connect
|
|
16
|
+
* button opens the Reown AppKit modal (wallet list, QR on desktop, deep-link on phones). Omit it
|
|
17
|
+
* and the config degrades to browser-extension wallets only. Get one at dashboard.reown.com.
|
|
17
18
|
*/
|
|
18
19
|
walletConnectProjectId?: string;
|
|
19
20
|
/** App name/metadata shown in the wallet's connect prompt. */
|
|
@@ -26,9 +27,8 @@ interface EvmWalletConfigOptions {
|
|
|
26
27
|
*/
|
|
27
28
|
transports?: Record<number, Transport>;
|
|
28
29
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* `coinbaseWallet()`.
|
|
30
|
+
* Escape hatch: take over the connector list entirely. Supplying this opts OUT of AppKit and
|
|
31
|
+
* builds a plain wagmi config from exactly these connectors.
|
|
32
32
|
*/
|
|
33
33
|
connectors?: CreateConnectorFn[];
|
|
34
34
|
}
|
|
@@ -36,11 +36,15 @@ interface EvmWalletConfigOptions {
|
|
|
36
36
|
* Builds a wagmi `Config` wired for both browser and mobile wallets, ready to hand to
|
|
37
37
|
* {@link IDosGamesWalletProvider} (or a bare `WagmiProvider`).
|
|
38
38
|
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
39
|
+
* With a `walletConnectProjectId` this goes through **Reown AppKit** (the successor to
|
|
40
|
+
* WalletConnect's own modal): AppKit owns the wallet picker, the QR/deep-link handshake and — the
|
|
41
|
+
* part that matters on phones — re-opening the wallet app for every signature request. The bare
|
|
42
|
+
* wagmi WalletConnect connector left that to the player, which is why signatures appeared to hang.
|
|
43
|
+
*
|
|
44
|
+
* Without a project id it falls back to a plain wagmi config with `injected()` + `coinbaseWallet()`:
|
|
45
|
+
* browser extensions keep working, mobile wallets are simply unavailable.
|
|
42
46
|
*/
|
|
43
|
-
declare function createEvmWalletConfig(options: EvmWalletConfigOptions):
|
|
47
|
+
declare function createEvmWalletConfig(options: EvmWalletConfigOptions): Config;
|
|
44
48
|
|
|
45
49
|
interface IDosGamesWalletProviderProps {
|
|
46
50
|
/** A wagmi config, typically from {@link createEvmWalletConfig}. */
|
package/dist/react/index.d.ts
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
|
-
import * as wagmi from 'wagmi';
|
|
2
1
|
import { CreateConnectorFn, Config } from 'wagmi';
|
|
3
2
|
import { Chain, Transport } from 'viem';
|
|
3
|
+
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-DvafuXl9.js';
|
|
4
|
+
export { m as arbitrum, n as base, p as bsc, q as chainById, w as idosChains, x as mainnet, y as optimism, z as polygon, C as polygonAmoy, F as sepolia } from '../bridge-DvafuXl9.js';
|
|
4
5
|
import * as react from 'react';
|
|
5
6
|
import { ReactNode, CSSProperties } from 'react';
|
|
6
7
|
import { QueryClient } from '@tanstack/react-query';
|
|
7
8
|
import { ClientState, DepositTokenResponse, DepositNFTResponse, TokenWithdrawalResponse, NFTWithdrawalResponse, IDosGamesClient } from '@idosgames/core';
|
|
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';
|
|
9
9
|
import { Adapter } from '@solana/wallet-adapter-base';
|
|
10
10
|
|
|
11
11
|
interface EvmWalletConfigOptions {
|
|
12
12
|
/** Chains the game supports, matching the EVM networks in the title's blockchain config. */
|
|
13
13
|
chains: readonly [Chain, ...Chain[]];
|
|
14
14
|
/**
|
|
15
|
-
* WalletConnect Cloud project id — required
|
|
16
|
-
*
|
|
15
|
+
* WalletConnect Cloud / Reown project id — required for MOBILE wallets. With it, the connect
|
|
16
|
+
* button opens the Reown AppKit modal (wallet list, QR on desktop, deep-link on phones). Omit it
|
|
17
|
+
* and the config degrades to browser-extension wallets only. Get one at dashboard.reown.com.
|
|
17
18
|
*/
|
|
18
19
|
walletConnectProjectId?: string;
|
|
19
20
|
/** App name/metadata shown in the wallet's connect prompt. */
|
|
@@ -26,9 +27,8 @@ interface EvmWalletConfigOptions {
|
|
|
26
27
|
*/
|
|
27
28
|
transports?: Record<number, Transport>;
|
|
28
29
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* `coinbaseWallet()`.
|
|
30
|
+
* Escape hatch: take over the connector list entirely. Supplying this opts OUT of AppKit and
|
|
31
|
+
* builds a plain wagmi config from exactly these connectors.
|
|
32
32
|
*/
|
|
33
33
|
connectors?: CreateConnectorFn[];
|
|
34
34
|
}
|
|
@@ -36,11 +36,15 @@ interface EvmWalletConfigOptions {
|
|
|
36
36
|
* Builds a wagmi `Config` wired for both browser and mobile wallets, ready to hand to
|
|
37
37
|
* {@link IDosGamesWalletProvider} (or a bare `WagmiProvider`).
|
|
38
38
|
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
39
|
+
* With a `walletConnectProjectId` this goes through **Reown AppKit** (the successor to
|
|
40
|
+
* WalletConnect's own modal): AppKit owns the wallet picker, the QR/deep-link handshake and — the
|
|
41
|
+
* part that matters on phones — re-opening the wallet app for every signature request. The bare
|
|
42
|
+
* wagmi WalletConnect connector left that to the player, which is why signatures appeared to hang.
|
|
43
|
+
*
|
|
44
|
+
* Without a project id it falls back to a plain wagmi config with `injected()` + `coinbaseWallet()`:
|
|
45
|
+
* browser extensions keep working, mobile wallets are simply unavailable.
|
|
42
46
|
*/
|
|
43
|
-
declare function createEvmWalletConfig(options: EvmWalletConfigOptions):
|
|
47
|
+
declare function createEvmWalletConfig(options: EvmWalletConfigOptions): Config;
|
|
44
48
|
|
|
45
49
|
interface IDosGamesWalletProviderProps {
|
|
46
50
|
/** A wagmi config, typically from {@link createEvmWalletConfig}. */
|
package/dist/react/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {n,C as C$1,b,B,w,v,D,c,F,E,G as G$1}from'../chunk-ZPNBMRUO.js';export{h as arbitrum,g as base,e as bsc,m as chainById,l as idosChains,d as mainnet,i as optimism,f as polygon,k as polygonAmoy,j as sepolia}from'../chunk-ZPNBMRUO.js';import {http,createConfig,WagmiProvider,useAccount,usePublicClient,useWalletClient,useConfig,useConnect}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}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {getAccount,watchAccount,getWalletClient,getPublicClient}from'wagmi/actions';import {ConnectionProvider,WalletProvider,useWallet}from'@solana/wallet-adapter-react';var G=null;function O(){return G}function ae(e){let{chains:o,walletConnectProjectId:t,appName:n$1,appUrl:r,appIcon:i,transports:s,connectors:a}=e,l={};for(let p of o)l[p.id]=s?.[p.id]??http();let W=r??(typeof window<"u"?window.location.origin:""),v={name:n$1??"iDosGames",description:n$1??"iDosGames game",url:W,icons:i?[i]:[]};if(t&&!a){let p=o.map(n),m=new WagmiAdapter({networks:p,projectId:t,transports:l});return G=createAppKit({adapters:[m],networks:p,projectId:t,metadata:v,features:{analytics:false,email:false,socials:false}}),m.wagmiConfig}let P=a??[injected(),coinbaseWallet({appName:n$1??"iDosGames"})];return createConfig({chains:o,connectors:P,transports:l})}function k(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 f="Wallet not connected.";function ge(e,o){let t=C();return {connected:!!t,account:t?.account??null,loginWithWallet:(n,r)=>t?D({client:e,clients:t,networkID:n,walletAddress:r}):Promise.resolve(c("challenge",f)),depositToken:n=>t?v({client:e,clients:t,titleID:o,...n}):Promise.resolve(b("approve",f)),depositNft:n=>t?w({client:e,clients:t,titleID:o,...n}):Promise.resolve(b("deposit-onchain",f)),withdrawToken:n=>t?B({client:e,clients:t,...n}):Promise.resolve(b("withdraw-onchain",f)),withdrawNft:n=>t?C$1({client:e,clients:t,...n}):Promise.resolve(b("withdraw-onchain",f))}}function he(e){let{wagmiConfig:o,...t}=e;return jsx(k,{wagmiConfig:o,children:jsx(j,{...t})})}function ke(e){return e instanceof Error&&(e.name==="ConnectorAlreadyConnectedError"||e.message.includes("already connected"))}function Te(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 Ee(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 Ae(e,o=18e4){return getAccount(e).isConnected?Promise.resolve(true):new Promise(t=>{let n=false,r=a=>{n||(n=true,i(),clearTimeout(s),t(a));},i=watchAccount(e,{onChange:a=>{a.isConnected&&r(true);}}),s=setTimeout(()=>r(false),o);})}function De(e){let o=r=>e.find(i=>i.id===r||i.type===r),t=o("injected"),n=typeof window<"u"&&window.ethereum!=null;return t&&n?t:o("walletConnect")??t??e[0]}function j(e){let{client:o,networkID:t,onAuthenticated:n,disabled:r,label:i,style:s}=e,a=useConfig(),{isConnected:l}=useAccount(),{connectAsync:W,connectors:v}=useConnect(),P=C(),[p,m]=useState(false),[T,d]=useState(null),M=async()=>{m(true),d(null);try{if(!l){let E=O();if(E){if(await E.open(),!await Ae(a)){d("No wallet was connected.");return}}else {let A=De(v);if(!A){d("No wallet connector is configured.");return}try{await W({connector:A});}catch(D){if(!ke(D))throw D}}}let u=P??await Ee(a);if(!u){d("Wallet client is not available.");return}let h=await D({client:o,clients:u,networkID:t});if(h.ok){n();return}d(h.stage==="sign"?"Signature declined.":h.error??"Wallet sign-in failed.");}catch(u){console.error("[idosgames/wallet] wallet sign-in failed:",u),d(Te(u));}finally{m(false);}};return jsxs(Fragment,{children:[jsx("button",{type:"button",onClick:()=>{M();},disabled:r||p,style:{...Ne,...r||p?{opacity:.6,cursor:"default"}:null,...s},children:p?"Check your wallet\u2026":l?i??"Sign in with wallet":"Connect wallet"}),T&&jsx("span",{role:"alert",style:Be,children:T})]})}var Ne={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},Be={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};function xe(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 Q="Wallet not connected.";function Ge(e,o,t){let{publicKey:n,signMessage:r}=useWallet(),i=n?.toBase58()??null;return {connected:!!i,account:i,loginWithWallet:(s,a)=>{let l=a??i;return l?r?G$1({client:e,networkID:s,walletAddress:l,signMessage:r}):Promise.resolve(c("sign","The connected wallet does not support message signing.")):Promise.resolve(c("challenge",Q))},depositToken:s=>E({client:e,adapter:t,titleID:o,...s}),withdrawToken:s=>{let a=s.walletAddress??i;return a?F({client:e,adapter:t,...s,walletAddress:a}):Promise.resolve(b("request",Q))}}}export{k as IDosGamesWalletProvider,xe as SolanaWalletBridgeProvider,he as WalletLogin,j as WalletLoginButton,ae as createEvmWalletConfig,ge as useEvmBridge,C as useEvmBridgeClients,Ge as useSolanaBridge};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@idosgames/wallet",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
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",
|
|
@@ -56,7 +56,10 @@
|
|
|
56
56
|
"//": "@idosgames/core не '*': опубликованный пакет обязан назвать диапазон, иначе установка wallet притянет любую версию core, включая будущую ломающую. На 0.x '^' даёт >=0.1.0 <0.2.0 — ровно ту зону, где core обещает совместимость (см. RELEASING.md). Поднимать при мажорном/минорном бампе core.",
|
|
57
57
|
"dependencies": {
|
|
58
58
|
"@idosgames/core": "^0.1.1",
|
|
59
|
+
"@reown/appkit": "^1.8.23",
|
|
60
|
+
"@reown/appkit-adapter-wagmi": "^1.8.23",
|
|
59
61
|
"@solana/web3.js": "^1.98.4",
|
|
62
|
+
"@walletconnect/ethereum-provider": "^2.21.1",
|
|
60
63
|
"viem": "^2.55.2"
|
|
61
64
|
},
|
|
62
65
|
"peerDependencies": {
|
package/dist/chunk-YV6AQWSH.js
DELETED
|
@@ -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.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};
|