@idosgames/wallet 0.6.1 → 0.6.2
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-CcNWVuIE.d.ts → bridge-BPZNXQuQ.d.ts} +6 -6
- package/dist/{bridge-ZHrosWG-.d.cts → bridge-C5z9TgKG.d.cts} +6 -6
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/react/lazyIndex.cjs +2 -2
- package/dist/react/solanaIndex.cjs +2 -2
- package/dist/react/solanaIndex.d.cts +1 -1
- package/dist/react/solanaIndex.d.ts +1 -1
- package/dist/react/solanaIndex.js +1 -1
- package/package.json +2 -2
|
@@ -27,23 +27,23 @@ interface SolanaProgramAdapter {
|
|
|
27
27
|
}): Promise<string>;
|
|
28
28
|
/**
|
|
29
29
|
* Builds and sends the on-chain `withdraw_spl` transaction from a server-issued signature
|
|
30
|
-
* payload — including the ed25519 sig-verify instruction
|
|
31
|
-
* `Ed25519PublicKey`/`Ed25519Message`/`SignatureHex
|
|
30
|
+
* payload — including the ed25519 sig-verify instruction carrying
|
|
31
|
+
* `Ed25519PublicKey`/`Ed25519Message`/`SignatureHex` (anywhere in the transaction: the program
|
|
32
|
+
* finds it itself). Returns the transaction signature.
|
|
32
33
|
*
|
|
33
34
|
* Everything in `sig` is bound into the signed message, and the program rebuilds that message
|
|
34
35
|
* from the instruction arguments and compares it byte-for-byte. So pass them all through, in
|
|
35
36
|
* declaration order, and change nothing:
|
|
36
37
|
*
|
|
37
|
-
* `withdraw_spl(amount, burn_amount, nonce, expires_at, splits, user_id, title_id, category
|
|
38
|
-
*
|
|
38
|
+
* `withdraw_spl(amount, burn_amount, nonce, expires_at, splits, user_id, title_id, category)`
|
|
39
|
+
* — and `withdraw_spl_dev` when `Domain === "SPL_DEV"`; the two are
|
|
39
40
|
* deliberately not interchangeable.
|
|
40
41
|
*
|
|
41
42
|
* Two things the SDK cannot do for you:
|
|
42
43
|
* - **`Splits`** — besides the `splits` argument, each recipient's associated token account must
|
|
43
44
|
* be appended to `remaining_accounts` in the SAME order. The program derives the expected ATA
|
|
44
45
|
* from the signed owner key and rejects anything else, and it cannot create a missing one:
|
|
45
|
-
* put `createAssociatedTokenAccountIdempotent` for each into the same transaction.
|
|
46
|
-
* instructions must come AFTER the ed25519 instruction, or `SigIxIndex` stops pointing at it.
|
|
46
|
+
* put `createAssociatedTokenAccountIdempotent` for each into the same transaction.
|
|
47
47
|
* - **Transaction size** — a legacy transaction fits roughly two splits; beyond that use a
|
|
48
48
|
* versioned transaction with an address lookup table (and raise the compute budget for the
|
|
49
49
|
* extra CPI transfers). The program's own cap is higher on purpose, so this is a transport
|
|
@@ -27,23 +27,23 @@ interface SolanaProgramAdapter {
|
|
|
27
27
|
}): Promise<string>;
|
|
28
28
|
/**
|
|
29
29
|
* Builds and sends the on-chain `withdraw_spl` transaction from a server-issued signature
|
|
30
|
-
* payload — including the ed25519 sig-verify instruction
|
|
31
|
-
* `Ed25519PublicKey`/`Ed25519Message`/`SignatureHex
|
|
30
|
+
* payload — including the ed25519 sig-verify instruction carrying
|
|
31
|
+
* `Ed25519PublicKey`/`Ed25519Message`/`SignatureHex` (anywhere in the transaction: the program
|
|
32
|
+
* finds it itself). Returns the transaction signature.
|
|
32
33
|
*
|
|
33
34
|
* Everything in `sig` is bound into the signed message, and the program rebuilds that message
|
|
34
35
|
* from the instruction arguments and compares it byte-for-byte. So pass them all through, in
|
|
35
36
|
* declaration order, and change nothing:
|
|
36
37
|
*
|
|
37
|
-
* `withdraw_spl(amount, burn_amount, nonce, expires_at, splits, user_id, title_id, category
|
|
38
|
-
*
|
|
38
|
+
* `withdraw_spl(amount, burn_amount, nonce, expires_at, splits, user_id, title_id, category)`
|
|
39
|
+
* — and `withdraw_spl_dev` when `Domain === "SPL_DEV"`; the two are
|
|
39
40
|
* deliberately not interchangeable.
|
|
40
41
|
*
|
|
41
42
|
* Two things the SDK cannot do for you:
|
|
42
43
|
* - **`Splits`** — besides the `splits` argument, each recipient's associated token account must
|
|
43
44
|
* be appended to `remaining_accounts` in the SAME order. The program derives the expected ATA
|
|
44
45
|
* from the signed owner key and rejects anything else, and it cannot create a missing one:
|
|
45
|
-
* put `createAssociatedTokenAccountIdempotent` for each into the same transaction.
|
|
46
|
-
* instructions must come AFTER the ed25519 instruction, or `SigIxIndex` stops pointing at it.
|
|
46
|
+
* put `createAssociatedTokenAccountIdempotent` for each into the same transaction.
|
|
47
47
|
* - **Transaction size** — a legacy transaction fits roughly two splits; beyond that use a
|
|
48
48
|
* versioned transaction with an address lookup table (and raise the compute budget for the
|
|
49
49
|
* extra CPI transfers). The program's own cap is higher on purpose, so this is a transport
|
package/dist/index.d.cts
CHANGED
|
@@ -5,7 +5,7 @@ import { Hex, Address } from 'viem';
|
|
|
5
5
|
import { E as EvmBridgeClients } from './withdraw-DttqktSS.cjs';
|
|
6
6
|
export { D as DepositNft721EvmParams, a as DepositNftEvmParams, b as DepositTokenEvmParams, c as DepositTokenOnChainParams, W as WithdrawNftEvmParams, d as WithdrawTokenEvmParams, e as depositNftEvm, f as depositNftEvm721, g as depositTokenEvm, h as depositTokenOnChainEvm, i as ensureErc20Allowance, s as submitEvmNftWithdrawal, j as submitEvmNftWithdrawal721, k as submitEvmTokenWithdrawal, w as withdrawNftEvm, l as withdrawTokenEvm, m as writeAndWait } from './withdraw-DttqktSS.cjs';
|
|
7
7
|
import { IDosGamesClient, WalletLinkResponse, ClientState, BlockchainNetworkDefinition, CryptoShortfall, OperationResult } from '@idosgames/core';
|
|
8
|
-
export { D as DepositTokenSolanaParams, S as SolanaProgramAdapter, W as WithdrawTokenSolanaParams, d as depositTokenSolana, w as withdrawTokenSolana } from './bridge-
|
|
8
|
+
export { D as DepositTokenSolanaParams, S as SolanaProgramAdapter, W as WithdrawTokenSolanaParams, d as depositTokenSolana, w as withdrawTokenSolana } from './bridge-C5z9TgKG.cjs';
|
|
9
9
|
|
|
10
10
|
declare const rewardPoolAbi: readonly [{
|
|
11
11
|
readonly type: "function";
|
package/dist/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { Hex, Address } from 'viem';
|
|
|
5
5
|
import { E as EvmBridgeClients } from './withdraw-BPbJQVNt.js';
|
|
6
6
|
export { D as DepositNft721EvmParams, a as DepositNftEvmParams, b as DepositTokenEvmParams, c as DepositTokenOnChainParams, W as WithdrawNftEvmParams, d as WithdrawTokenEvmParams, e as depositNftEvm, f as depositNftEvm721, g as depositTokenEvm, h as depositTokenOnChainEvm, i as ensureErc20Allowance, s as submitEvmNftWithdrawal, j as submitEvmNftWithdrawal721, k as submitEvmTokenWithdrawal, w as withdrawNftEvm, l as withdrawTokenEvm, m as writeAndWait } from './withdraw-BPbJQVNt.js';
|
|
7
7
|
import { IDosGamesClient, WalletLinkResponse, ClientState, BlockchainNetworkDefinition, CryptoShortfall, OperationResult } from '@idosgames/core';
|
|
8
|
-
export { D as DepositTokenSolanaParams, S as SolanaProgramAdapter, W as WithdrawTokenSolanaParams, d as depositTokenSolana, w as withdrawTokenSolana } from './bridge-
|
|
8
|
+
export { D as DepositTokenSolanaParams, S as SolanaProgramAdapter, W as WithdrawTokenSolanaParams, d as depositTokenSolana, w as withdrawTokenSolana } from './bridge-BPZNXQuQ.js';
|
|
9
9
|
|
|
10
10
|
declare const rewardPoolAbi: readonly [{
|
|
11
11
|
readonly type: "function";
|
package/dist/react/lazyIndex.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var viem=require('viem'),core=require('@idosgames/core'),wagmi=require('wagmi'),connectors=require('wagmi/connectors'),appkitAdapterWagmi=require('@reown/appkit-adapter-wagmi'),react$1=require('@reown/appkit/react'),reactQuery=require('@tanstack/react-query'),react=require('react'),jsxRuntime=require('react/jsx-runtime'),actions=require('wagmi/actions'),appkitAdapterSolana=require('@reown/appkit-adapter-solana'),buffer=require('buffer'),web3_js=require('@solana/web3.js');var Tn=Object.defineProperty;var k=(t,e)=>()=>(t&&(e=t(t=0)),e);var Wt=(t,e)=>{for(var n in e)Tn(t,n,{get:e[n],enumerable:true});};function I(t){return t instanceof viem.BaseError?t.shortMessage:t instanceof Error?t.message:String(t)}function f(t,e,n){return {ok:false,stage:t,error:e,...n}}function b(t,e){return {ok:false,stage:t,error:e}}var L=k(()=>{});function Dn(t=typeof window>"u"?"":window.location.hostname){let e=t.toLowerCase();return In.test(e)?true:e!=="localhost"&&e!=="127.0.0.1"?false:globalThis.__IDOS_PREVIEW__!=null}function S(){if(typeof window>"u"||Dn())return false;try{return window.self!==window.top}catch{return true}}function Ue(){if(typeof window>"u")return false;try{return window.parent!==window.top}catch{return true}}function U(t){return f(t,At)}function ee(t){return b(t,At)}var At,In,V=k(()=>{L();At="WALLET_USE_SITE_PANEL",In=/^[a-z0-9]{8}-preview\.idos\.games$/;});function qe(t){return Object.values(exports.idosChains).find(e=>e.id===t)}function Dt(t){return {...t,chainNamespace:"eip155",caipNetworkId:`eip155:${t.id}`}}exports.mainnet=void 0;exports.bsc=void 0;exports.polygon=void 0;exports.base=void 0;exports.arbitrum=void 0;exports.optimism=void 0;exports.sepolia=void 0;exports.polygonAmoy=void 0;exports.idosChains=void 0;exports.solanaMainnet=void 0;exports.solanaDevnet=void 0;var Q=k(()=>{exports.mainnet={id:1,name:"Ethereum",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://eth.llamarpc.com"]}},blockExplorers:{default:{name:"Etherscan",url:"https://etherscan.io"}}},exports.bsc={id:56,name:"BNB Smart Chain",nativeCurrency:{name:"BNB",symbol:"BNB",decimals:18},rpcUrls:{default:{http:["https://bsc-dataseed.binance.org"]}},blockExplorers:{default:{name:"BscScan",url:"https://bscscan.com"}}},exports.polygon={id:137,name:"Polygon",nativeCurrency:{name:"POL",symbol:"POL",decimals:18},rpcUrls:{default:{http:["https://polygon-rpc.com"]}},blockExplorers:{default:{name:"PolygonScan",url:"https://polygonscan.com"}}},exports.base={id:8453,name:"Base",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://mainnet.base.org"]}},blockExplorers:{default:{name:"BaseScan",url:"https://basescan.org"}}},exports.arbitrum={id:42161,name:"Arbitrum One",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://arb1.arbitrum.io/rpc"]}},blockExplorers:{default:{name:"Arbiscan",url:"https://arbiscan.io"}}},exports.optimism={id:10,name:"OP Mainnet",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://mainnet.optimism.io"]}},blockExplorers:{default:{name:"Optimistic Etherscan",url:"https://optimistic.etherscan.io"}}},exports.sepolia={id:11155111,name:"Sepolia",testnet:true,nativeCurrency:{name:"Sepolia Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.sepolia.org"]}},blockExplorers:{default:{name:"Etherscan",url:"https://sepolia.etherscan.io"}}},exports.polygonAmoy={id:80002,name:"Polygon Amoy",testnet:true,nativeCurrency:{name:"POL",symbol:"POL",decimals:18},rpcUrls:{default:{http:["https://rpc-amoy.polygon.technology"]}},blockExplorers:{default:{name:"PolygonScan",url:"https://amoy.polygonscan.com"}}},exports.idosChains={mainnet:exports.mainnet,bsc:exports.bsc,polygon:exports.polygon,base:exports.base,arbitrum:exports.arbitrum,optimism:exports.optimism,sepolia:exports.sepolia,polygonAmoy:exports.polygonAmoy};exports.solanaMainnet={id:"5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",name:"Solana",network:"solana-mainnet",nativeCurrency:{name:"Solana",symbol:"SOL",decimals:9},rpcUrls:{default:{http:["https://api.mainnet-beta.solana.com"]}},blockExplorers:{default:{name:"Solscan",url:"https://solscan.io"}},testnet:false,chainNamespace:"solana",caipNetworkId:"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp"},exports.solanaDevnet={id:"EtWTRABZaYq6iMfeYKouRu166VU2xqa1",name:"Solana Devnet",network:"solana-devnet",nativeCurrency:{name:"Solana",symbol:"SOL",decimals:9},rpcUrls:{default:{http:["https://api.devnet.solana.com"]}},blockExplorers:{default:{name:"Solscan",url:"https://solscan.io"}},testnet:true,chainNamespace:"solana",caipNetworkId:"solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1"};});function Te(t){xt=t;}function H(){return xt}var xt,ce=k(()=>{xt=null;});function ve(t){let{chains:e=ze,walletConnectProjectId:n,appName:o,appUrl:a,appIcon:r,transports:c,connectors:l}=t,i=n??"__extension_only__";if(!l){let g=Ve.get(i);if(g)return g}let d={};for(let g of e)d[g.id]=c?.[g.id]??wagmi.http();let s=a??(typeof window<"u"?window.location.origin:""),u={name:o??"iDosGames",description:o??"iDosGames game",url:s,icons:r?[r]:[]};if(n&&!l){let g=e.map(Dt),y=new appkitAdapterWagmi.WagmiAdapter({networks:g,projectId:n,transports:d});return Te(react$1.createAppKit({adapters:[y],networks:g,projectId:n,metadata:u,features:{analytics:false,email:false,socials:false}})),Ve.set(i,y.wagmiConfig),y.wagmiConfig}let p=l??[connectors.injected(),connectors.coinbaseWallet({appName:o??"iDosGames"})],m=wagmi.createConfig({chains:e,connectors:p,transports:d});return l||Ve.set(i,m),m}var ze,Ve,je=k(()=>{Q();ce();ze=[exports.mainnet,exports.bsc,exports.polygon,exports.base,exports.arbitrum,exports.optimism,exports.sepolia,exports.polygonAmoy],Ve=new Map;});function de(t){let{wagmiConfig:e,queryClient:n,children:o}=t,[a]=react.useState(()=>n??new reactQuery.QueryClient);return jsxRuntime.jsx(wagmi.WagmiProvider,{config:e,children:jsxRuntime.jsx(reactQuery.QueryClientProvider,{client:a,children:o})})}var Ie=k(()=>{});var De,Lt,$e,Rt,Ye=k(()=>{De=[{type:"function",name:"depositERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"amount",type:"uint256"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"withdrawERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"amount",type:"uint256"},{name:"burnAmount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{name:"amount",type:"uint256"}]},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC1155",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{name:"amount",type:"uint256"}]},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],Lt=[{type:"function",name:"withdrawERC1155Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{name:"amount",type:"uint256"}]},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],$e=[{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"}]}],Rt=[{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 Bt(t,e,n){return viem.encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[t,e,core.normalizeBlockchainCategory(n)])}var _t=k(()=>{});async function Z(t,e){let{walletClient:n,publicClient:o,account:a}=t,r=await n.writeContract({address:e.address,abi:e.abi,functionName:e.functionName,args:e.args,account:a,chain:n.chain,value:e.value});if((await o.waitForTransactionReceipt({hash:r})).status==="reverted")throw new Error(`On-chain transaction reverted (${r}).`);return r}var Qe=k(()=>{});function Ot(t){let e=t.RewardPoolAddress;return e||null}async function Mt(t,e,n,o){return await t.publicClient.readContract({address:e,abi:$e,functionName:"allowance",args:[t.account,n]})>=o?null:Z(t,{address:e,abi:$e,functionName:"approve",args:[n,o]})}async function Ze(t){let{client:e,clients:n,network:o,tokenAddress:a,amount:r,titleID:c,category:l}=t;if(S())return U("approve");let i=e.auth.context?.userID;if(!i)return f("approve","Not logged in.");let d=Ot(o);if(!d)return f("approve","Network has no RewardPoolAddress.");if(r<=0n)return f("approve","Amount must be positive.");try{await Mt(n,a,d,r);}catch(p){return f("approve",I(p))}let s;try{s=await Z(n,{address:d,abi:De,functionName:"depositERC20",args:[a,r,i,c,l??""]});}catch(p){return f("deposit-onchain",I(p))}let u=await e.blockchain.depositToken(o.NetworkID??"",s);return u.ok?{ok:true,onChainTxHash:s,data:u.data}:f("report",u.error,{onChainTxHash:s})}async function Je(t){let{client:e,clients:n,network:o,nftContractAddress:a,tokenId:r,amount:c,titleID:l,category:i}=t;if(S())return U("deposit-onchain");let d=e.auth.context?.userID;if(!d)return f("deposit-onchain","Not logged in.");let s=Ot(o);if(!s)return f("deposit-onchain","Network has no RewardPoolAddress.");if(c<=0n)return f("deposit-onchain","Amount must be positive.");let u=Bt(d,l,i),p;try{p=await Z(n,{address:a,abi:Rt,functionName:"safeTransferFrom",args:[n.account,s,r,c,u]});}catch(g){return f("deposit-onchain",I(g))}let m=await e.blockchain.depositNFT(o.NetworkID??"",p);return m.ok?{ok:true,onChainTxHash:p,data:m.data}:f("report",m.error,{onChainTxHash:p})}var Ft=k(()=>{Ye();_t();Qe();L();V();});function Kt(t){return (t.Splits??[]).map(e=>({to:e.To,amount:BigInt(e.Amount??"0")}))}async function Gt(t,e){return Z(t,{address:e.ContractAddress,abi:De,functionName:"withdrawERC20",args:[e.TokenAddress,e.WalletAddress,BigInt(e.Amount??"0"),BigInt(e.BurnAmount??"0"),Kt(e),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function Ut(t,e){return Z(t,{address:e.ContractAddress,abi:Lt,functionName:"withdrawERC1155Mint",args:[e.TokenAddress,e.WalletAddress,BigInt(e.TokenId??"0"),BigInt(e.Amount??"0"),Kt(e),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function Xe(t){let{client:e,clients:n,currencyID:o,networkID:a,walletAddress:r,amount:c,category:l}=t;if(S())return U("request");let i=await e.blockchain.requestTokenWithdrawal(o,a,r,c,l);if(!i.ok)return f("request",i.error);let d=i.data.EvmSignature,s=i.data.TitleTransactionID??void 0;if(!d)return f("request","Withdrawal response carried no EVM signature.",{titleTransactionID:s});let u;try{u=await Gt(n,d);}catch(m){return f("withdraw-onchain",I(m),{titleTransactionID:s})}let p=await Ht(e,s,u);return p.ok?{ok:true,onChainTxHash:u,data:i.data}:p}async function et(t){let{client:e,clients:n,itemID:o,networkID:a,walletAddress:r,amount:c,category:l}=t;if(S())return U("request");let i=await e.blockchain.requestNFTWithdrawal(o,a,r,c,l);if(!i.ok)return f("request",i.error);let d=i.data.EvmSignature,s=i.data.TitleTransactionID??void 0;if(!d)return f("request","Withdrawal response carried no EVM signature.",{titleTransactionID:s});let u;try{u=await Ut(n,d);}catch(m){return f("withdraw-onchain",I(m),{titleTransactionID:s})}let p=await Ht(e,s,u);return p.ok?{ok:true,onChainTxHash:u,data:i.data}:p}async function Ht(t,e,n){if(!e)return f("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let o=await t.blockchain.confirmWithdrawal(e,n);return o.ok?{ok:true,onChainTxHash:n,data:o.data}:f("confirm",o.error,{onChainTxHash:n,titleTransactionID:e})}var qt=k(()=>{Ye();Qe();L();V();});async function he(t){let{client:e,clients:n,networkID:o}=t;if(S())return ee("challenge");let a=t.walletAddress??n.account,r=await e.auth.requestWalletChallenge(a,o);if(!r.ok)return b("challenge",r.error);let c;try{c=await n.walletClient.signMessage({account:n.account,message:r.data.Message});}catch(i){return b("sign",I(i))}let l=await e.auth.loginWithWallet(a,o,c);return l.ok?{ok:true,data:l.data}:b("login",l.error)}async function tt(t){let{client:e,clients:n,networkID:o}=t;if(S())return ee("challenge");let a=t.walletAddress??n.account,r=await e.auth.linkWallet(a,o);if(!r.ok)return b("challenge",r.error);if(!r.data.Challenge)return b("challenge","No challenge was issued.");let c;try{c=await n.walletClient.signMessage({account:n.account,message:r.data.Challenge});}catch(i){return b("sign",I(i))}let l=await e.auth.linkWallet(a,o,c);return l.ok?{ok:true,data:l.data}:b("login",l.error)}var Vt=k(()=>{L();V();});var nt=k(()=>{Ft();qt();Vt();});function be(){let{address:t}=wagmi.useAccount(),e=wagmi.usePublicClient(),{data:n}=wagmi.useWalletClient();return !t||!e||!n?null:{account:t,publicClient:e,walletClient:n}}function xe(t,e){let n=be();return {connected:!!n,account:n?.account??null,loginWithWallet:(o,a)=>n?he({client:t,clients:n,networkID:o,walletAddress:a}):Promise.resolve(b("challenge",ke)),depositToken:o=>n?Ze({client:t,clients:n,titleID:e,...o}):Promise.resolve(f("approve",ke)),depositNft:o=>n?Je({client:t,clients:n,titleID:e,...o}):Promise.resolve(f("deposit-onchain",ke)),withdrawToken:o=>n?Xe({client:t,clients:n,...o}):Promise.resolve(f("withdraw-onchain",ke)),withdrawNft:o=>n?et({client:t,clients:n,...o}):Promise.resolve(f("withdraw-onchain",ke))}}var ke,Ne=k(()=>{nt();L();ke="Wallet not connected.";});function ue(t,e){switch(t){case null:case void 0:case "":return e;case "PLAY_ACCESS_WALLET_USED_BY_ANOTHER_ACCOUNT":return "This wallet already plays with another account.";case "WALLET_UNLINK_COOLDOWN":return "This wallet was unlinked from another account less than 7 days ago. Try again after the 7 days.";case "WALLET_CHANGES_TOO_FREQUENT":return "Too many wallets were changed this week. Try again in a few days.";case "PLAY_ACCESS_WALLET_LOGIN_ONLY":return "This game is played with a wallet login only.";case "INVALID_WALLET_SIGNATURE":return "The signature does not match the wallet. Please try again.";case "WALLET_CHALLENGE_EXPIRED":return "The request expired. Please try again.";default:return t}}var ot=k(()=>{});function Zt(t){let{wagmiConfig:e,...n}=t;return jsxRuntime.jsx(de,{wagmiConfig:e,children:jsxRuntime.jsx(at,{...n})})}function ro(t){return t instanceof Error&&(t.name==="ConnectorAlreadyConnectedError"||t.message.includes("already connected"))}function ao(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 jt(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 io(t,e=18e4){return actions.getAccount(t).isConnected?Promise.resolve(true):new Promise(n=>{let o=false,a=l=>{o||(o=true,r(),clearTimeout(c),n(l));},r=actions.watchAccount(t,{onChange:l=>{l.isConnected&&a(true);}}),c=setTimeout(()=>a(false),e);})}function so(t,e=8e3){let n=o=>o==="reconnecting"||o==="connecting";return n(actions.getAccount(t).status)?new Promise(o=>{let a=false,r=()=>{a||(a=true,c(),clearTimeout(l),o());},c=actions.watchAccount(t,{onChange:i=>{n(i.status)||r();}}),l=setTimeout(r,e);}):Promise.resolve()}function lo(t){let e=a=>t.find(r=>r.id===a||r.type===a),n=e("injected"),o=typeof window<"u"&&window.ethereum!=null;return n&&o?n:e("walletConnect")??n??t[0]}async function co(t){try{let o=(await actions.getAccount(t).connector?.getProvider?.())?.session?.peer?.metadata?.redirect,a=o?.native||o?.universal;return !a||typeof window>"u"?!1:(window.location.href=a,!0)}catch{return false}}function Yt(t,e){return new Promise((n,o)=>{let a=setTimeout(()=>o(new Error("The wallet request timed out.")),e);t.then(r=>{clearTimeout(a),n(r);},r=>{clearTimeout(a),o(r instanceof Error?r:new Error(String(r)));});})}function at(t){let{client:e,networkID:n,onAuthenticated:o,disabled:a,label:r,style:c,autoStart:l,mode:i="login",onLinked:d}=t,s=wagmi.useConfig(),{isConnected:u}=wagmi.useAccount(),{connectAsync:p,connectors:m}=wagmi.useConnect(),g=be(),[y,w]=react.useState(false),[W,A]=react.useState(null),[B,M]=react.useState(false),_=react.useRef(0),j=react.useRef(false),N=async()=>{let h=++_.current,P=()=>_.current===h;w(true),A(null);try{if(await so(s),!P())return;if(!actions.getAccount(s).isConnected){let v=H();if(v){if(await v.open(),!await io(s)){A("No wallet was connected.");return}}else {let X=lo(m);if(!X){A("No wallet connector is configured.");return}try{await p({connector:X});}catch(G){if(!ro(G))throw G}}}let T=g??await jt(s);if(!T&&actions.getAccount(s).isConnected&&(await new Promise(v=>setTimeout(v,300)),T=await jt(s),!P()))return;if(!T){A("Wallet client is not available.");return}if(M(!0),i==="link"){let v=await Yt(tt({client:e,clients:T,networkID:n}),$t);if(!P())return;if(v.ok){d?.(v.data.PlayAccess??null);return}A(v.stage==="sign"?"Signature declined.":ue(v.error,"Could not link the wallet."));return}let F=await Yt(he({client:e,clients:T,networkID:n}),$t);if(!P())return;if(F.ok){o();return}A(F.stage==="sign"?"Signature declined.":ue(F.error,"Wallet sign-in failed."));}catch(T){if(!P())return;console.error("[idosgames/wallet] wallet sign-in failed:",T),A(ao(T));}finally{P()&&(w(false),M(false));}};react.useEffect(()=>{!l||j.current||(j.current=true,N());},[l]);let q=async()=>{await co(s)||await H()?.open();};return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:()=>{B?q():N();},disabled:a,style:{...uo,...a?{opacity:.6,cursor:"default"}:null,...c},children:B?"Waiting for signature \u2014 tap to open wallet":y?"Check your wallet\u2026":u?r??(i==="link"?"Link wallet":"Sign in with wallet"):"Connect wallet"}),W&&jsxRuntime.jsx("span",{role:"alert",style:po,children:W})]})}var $t,uo,po,Jt=k(()=>{ce();ot();nt();Ie();Ne();$t=9e4;uo={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},po={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};});function Be({client:t,engine:e,onClose:n,style:o}){let[,a]=react.useReducer(h=>h+1,0),[r,c]=react.useState({}),[l,i]=react.useState({}),[d,s]=react.useState(""),[u,p]=react.useState(""),[m,g]=react.useState(""),[y,w]=react.useState(false),[W,A]=react.useState(null);react.useEffect(()=>{let h=true;return (async()=>{let P=await t.blockchain.getDefinitions();if(await t.blockchain.getUserState(),!h||!P.ok)return;let T={};for(let[F,v]of Object.entries(P.data.Blockchain?.Networks??{}))v.Type===e.networkType&&(T[F]=v);c(T),i(P.data.CryptoCurrencies??{}),s(Object.keys(T)[0]??"");})(),()=>{h=false;}},[t,e.networkType]),react.useEffect(()=>t.on("user:anyUpdated",a),[t]);let B=react.useMemo(()=>Object.entries(l).filter(([,h])=>h.Networks?.some(P=>P.NetworkID===d&&!!P.ContractAddress)),[l,d]);react.useEffect(()=>{let h=B[0]?.[0]??"";p(P=>B.some(([T])=>T===P)?P:h);},[B]);let M=d?r[d]:void 0,_=u?l[u]?.Networks?.find(h=>h.NetworkID===d):void 0,j=u?t.data.user.getCryptoCurrencyAmount(u):"0",N=!!e.address;async function q(h){w(true),A(null);try{let P=await h();A(P),P.ok&&await t.blockchain.getUserState();}finally{w(false);}}return jsxRuntime.jsxs("div",{style:{...wo,...o},children:[jsxRuntime.jsxs("div",{style:{...lt,justifyContent:"space-between"},children:[jsxRuntime.jsx("span",{style:ho,children:"Crypto wallet"}),n&&jsxRuntime.jsx("button",{type:"button",style:Re,onClick:n,children:"\u2715"})]}),N?jsxRuntime.jsxs("div",{style:lt,children:[jsxRuntime.jsxs("span",{style:{...z,flex:1,alignSelf:"center"},children:[e.address.slice(0,6),"\u2026",e.address.slice(-4)]}),jsxRuntime.jsx("button",{type:"button",style:Re,onClick:e.disconnect,children:"Disconnect"})]}):jsxRuntime.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6},children:[jsxRuntime.jsx("span",{style:z,children:"Connect a browser or mobile wallet"}),e.connectChoices.length===0?jsxRuntime.jsx("span",{style:z,children:"Wallet connection is not configured for this title."}):e.connectChoices.map(h=>jsxRuntime.jsx("button",{type:"button",style:Re,onClick:h.connect,children:h.label},h.key))]}),Object.keys(r).length===0?jsxRuntime.jsxs("span",{style:z,children:["No ",e.networkType," networks configured for this title."]}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:z,children:"Network"}),jsxRuntime.jsx("select",{style:st,value:d,onChange:h=>s(h.target.value),children:Object.entries(r).map(([h,P])=>jsxRuntime.jsx("option",{value:h,children:P.DisplayName??h},h))})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:z,children:"Token"}),jsxRuntime.jsxs("select",{style:st,value:u,onChange:h=>p(h.target.value),children:[B.length===0&&jsxRuntime.jsx("option",{value:"",children:"\u2014 no depositable tokens \u2014"}),B.map(([h,P])=>jsxRuntime.jsx("option",{value:h,children:P.DisplayName??h},h))]})]}),jsxRuntime.jsxs("div",{style:z,children:["In-game balance: ",jsxRuntime.jsx("b",{children:j})," ",u]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:z,children:"Amount"}),jsxRuntime.jsx("input",{style:st,inputMode:"decimal",placeholder:"0.0",value:m,onChange:h=>g(h.target.value)})]}),jsxRuntime.jsxs("div",{style:lt,children:[jsxRuntime.jsx("button",{type:"button",style:{...ko,flex:1,opacity:y?.6:1},disabled:y||!N||!_?.ContractAddress,onClick:()=>{!M||!_||q(()=>e.deposit({network:M,binding:_,currencyID:u,amount:m||"0"}));},children:"Deposit"}),jsxRuntime.jsx("button",{type:"button",style:{...Re,flex:1,opacity:y?.6:1},disabled:y||!N||!u,onClick:()=>{M&&q(()=>e.withdraw({network:M,networkID:d,currencyID:u,amount:m||"0"}));},children:"Withdraw"})]})]}),W&&jsxRuntime.jsx(bo,{result:W})]})}function bo({result:t}){let e={fontSize:12,borderRadius:8,padding:"8px 10px",background:t.ok?"#1e3a2a":"#3a1e28",color:t.ok?"#8ef0b0":"#f2a0b4",wordBreak:"break-all"};return t.ok?jsxRuntime.jsxs("div",{style:e,children:["\u2713 Done \xB7 tx ",t.onChainTxHash]}):jsxRuntime.jsxs("div",{style:e,children:["\u2715 [",t.stage,"] ",t.error,t.titleTransactionID?` \xB7 already debited (tx ${t.titleTransactionID}) \u2014 retry/confirm, don't re-request`:""]})}var wo,ho,z,st,ko,Re,lt,ct=k(()=>{wo={pointerEvents:"auto",background:"#04276bf5",border:"1px solid #1e59c8",borderRadius:12,padding:16,color:"#fff",width:320,boxSizing:"border-box",fontFamily:"system-ui, sans-serif",display:"flex",flexDirection:"column",gap:10,maxHeight:"80vh",overflow:"auto"},ho={fontWeight:700,fontSize:16},z={fontSize:12,opacity:.7},st={background:"#052e7e",border:"1px solid #1e59c8",borderRadius:8,color:"#fff",padding:"8px 10px",width:"100%",boxSizing:"border-box"},ko={background:"#0d66fe",color:"#fff",border:"none",borderRadius:8,padding:"9px 14px",fontWeight:700,cursor:"pointer"},Re={background:"#1e59c8",color:"#fff",border:"none",borderRadius:8,padding:"7px 12px",fontWeight:600,cursor:"pointer"},lt={display:"flex",gap:8};});function Xt(t){let{client:e,walletConnectProjectId:n,appName:o,onClose:a,style:r}=t,[c,l]=react.useState(n??"");react.useEffect(()=>{if(n)return;let d=true;return (async()=>{let s=await e.blockchain.getDefinitions();if(!d||!s.ok)return;let u=s.data.Blockchain?.WalletLogin?.WalletConnectProjectId;u&&l(u);})(),()=>{d=false;}},[e,n]);let i=react.useMemo(()=>ve({walletConnectProjectId:c||void 0,appName:o}),[c,o]);return jsxRuntime.jsx(de,{wagmiConfig:i,children:jsxRuntime.jsx(Do,{client:e,onClose:a,style:r})})}function Do({client:t,onClose:e,style:n}){let o=xe(t,t.titleID),{address:a,isConnected:r,chainId:c}=wagmi.useAccount(),{connect:l,connectors:i}=wagmi.useConnect(),{disconnect:d}=wagmi.useDisconnect(),{switchChainAsync:s}=wagmi.useSwitchChain();async function u(m){if(!m||c===m)return true;try{return await s({chainId:m}),!0}catch{return false}}let p={networkType:"EVM",address:r&&a?a:null,connectChoices:i.map(m=>({key:m.uid,label:m.name,connect:()=>l({connector:m})})),disconnect:()=>d(),deposit:async({network:m,binding:g,amount:y})=>{if(!g.ContractAddress)return f("approve","This token cannot be deposited.");if(!await u(m.ChainID))return f("approve",`Switch your wallet to chain ${m.ChainID} to continue.`);let w;try{w=viem.parseUnits(y,g.Decimals??18);}catch{return f("approve","Invalid amount.")}return o.depositToken({network:m,tokenAddress:g.ContractAddress,amount:w})},withdraw:async({network:m,networkID:g,currencyID:y,amount:w})=>o.account?await u(m.ChainID)?o.withdrawToken({currencyID:y,networkID:g,walletAddress:o.account,amount:w}):f("request",`Switch your wallet to chain ${m.ChainID} to continue.`):f("request","Wallet not connected.")};return jsxRuntime.jsx(Be,{client:t,engine:p,onClose:e,style:n})}var en=k(()=>{je();Ie();Ne();L();ct();});var ut={};Wt(ut,{DEFAULT_EVM_CHAINS:()=>ze,IDosGamesWalletProvider:()=>de,WalletLogin:()=>Zt,WalletLoginButton:()=>at,WalletPanel:()=>Xt,arbitrum:()=>exports.arbitrum,base:()=>exports.base,bsc:()=>exports.bsc,chainById:()=>qe,createEvmWalletConfig:()=>ve,idosChains:()=>exports.idosChains,mainnet:()=>exports.mainnet,optimism:()=>exports.optimism,polygon:()=>exports.polygon,polygonAmoy:()=>exports.polygonAmoy,sepolia:()=>exports.sepolia,useEvmBridge:()=>xe,useEvmBridgeClients:()=>be});var pt=k(()=>{je();Q();Ie();Ne();Jt();en();});function _e(t){let{walletConnectProjectId:e,appName:n,appUrl:o,appIcon:a,wallets:r}=t,c=tn.get(e);if(c)return c;let l=t.networks??[exports.solanaMainnet],i=o??(typeof window<"u"?window.location.origin:""),d={name:n??"iDosGames",description:n??"iDosGames game",url:i,icons:a?[a]:[]},s=new appkitAdapterSolana.SolanaAdapter(r?{wallets:r}:{});return Te(react$1.createAppKit({adapters:[s],networks:l,projectId:e,metadata:d,features:{analytics:false,email:false,socials:false}})),tn.set(e,s),s}var tn,mt=k(()=>{Q();ce();tn=new Map;});async function Ce(t){let{client:e,adapter:n,network:o,mint:a,amountRaw:r,titleID:c,category:l}=t;if(S())return U("deposit-onchain");let i=e.auth.context?.userID;if(!i)return f("deposit-onchain","Not logged in.");if(r<=0n)return f("deposit-onchain","Amount must be positive.");let d;try{d=await n.depositSpl({mint:a,amountRaw:r,userID:i,titleID:c,category:core.normalizeBlockchainCategory(l)});}catch(u){return f("deposit-onchain",I(u))}let s=await e.blockchain.depositToken(o.NetworkID??"",d);return s.ok?{ok:true,onChainTxHash:d,data:s.data}:f("report",s.error,{onChainTxHash:d})}async function Se(t){let{client:e,adapter:n,currencyID:o,networkID:a,walletAddress:r,amount:c,category:l}=t;if(S())return U("request");let i=await e.blockchain.requestTokenWithdrawal(o,a,r,c,l);if(!i.ok)return f("request",i.error);let d=i.data.SolanaSignature,s=i.data.TitleTransactionID??void 0;if(!d)return f("request","Withdrawal response carried no Solana signature.",{titleTransactionID:s});let u;try{u=await n.submitWithdrawal(d);}catch(m){return f("withdraw-onchain",I(m),{titleTransactionID:s})}if(!s)return f("confirm","Missing TitleTransactionID.",{onChainTxHash:u});let p=await e.blockchain.confirmWithdrawal(s,u);return p.ok?{ok:true,onChainTxHash:u,data:i.data}:f("confirm",p.error,{onChainTxHash:u,titleTransactionID:s})}var nn=k(()=>{L();V();});async function We(t){let{client:e,networkID:n,walletAddress:o,signMessage:a}=t;if(S())return ee("challenge");let r=await e.auth.requestWalletChallenge(o,n);if(!r.ok)return b("challenge",r.error);let c;try{let i=await a(new TextEncoder().encode(r.data.Message));c=on(i);}catch(i){return b("sign",I(i))}let l=await e.auth.loginWithWallet(o,n,c);return l.ok?{ok:true,data:l.data}:b("login",l.error)}async function ft(t){let{client:e,networkID:n,walletAddress:o,signMessage:a}=t;if(S())return ee("challenge");let r=await e.auth.linkWallet(o,n);if(!r.ok)return b("challenge",r.error);if(!r.data.Challenge)return b("challenge","No challenge was issued.");let c;try{let i=await a(new TextEncoder().encode(r.data.Challenge));c=on(i);}catch(i){return b("sign",I(i))}let l=await e.auth.linkWallet(o,n,c);return l.ok?{ok:true,data:l.data}:b("login",l.error)}function on(t){let e="0x";for(let n of t)e+=n.toString(16).padStart(2,"0");return e}var rn=k(()=>{L();V();});var Oe=k(()=>{nn();rn();});function sn(t,e,n){let{address:o}=react$1.useAppKitAccount(),{walletProvider:a}=react$1.useAppKitProvider("solana"),r=o??null,c=a?.signMessage?.bind(a);return {connected:!!r,account:r,loginWithWallet:(l,i)=>{let d=i??r;return d?c?We({client:t,networkID:l,walletAddress:d,signMessage:c}):Promise.resolve(b("sign","The connected wallet does not support message signing.")):Promise.resolve(b("challenge",an))},depositToken:l=>Ce({client:t,adapter:n,titleID:e,...l}),withdrawToken:l=>{let i=l.walletAddress??r;return i?Se({client:t,adapter:n,...l,walletAddress:i}):Promise.resolve(f("request",an))}}}var an,ln=k(()=>{Oe();L();an="Wallet not connected.";});function Fo(t){try{let n=t?.session?.peer?.metadata?.redirect,o=n?.native||n?.universal;return !o||typeof window>"u"?!1:(window.location.href=o,!0)}catch{return false}}function dn(t,e){return new Promise((n,o)=>{let a=setTimeout(()=>o(new Error("The wallet request timed out.")),e);t.then(r=>{clearTimeout(a),n(r);},r=>{clearTimeout(a),o(r instanceof Error?r:new Error(String(r)));});})}function Ko(t){let e="Wallet sign-in failed. Please try again.";return t instanceof Error?/user (rejected|denied|cancelled|canceled)|rejected the request/i.test(t.message)?"Request declined in the wallet.":/timed? ?out/i.test(t.message)?"The wallet did not respond. Open your wallet and try again.":e:e}function pn(t){let{client:e,networkID:n,onAuthenticated:o,disabled:a,label:r,style:c,autoStart:l,mode:i="login",onLinked:d}=t,{address:s,isConnected:u}=react$1.useAppKitAccount(),{walletProvider:p}=react$1.useAppKitProvider("solana"),[m,g]=react.useState(false),[y,w]=react.useState(null),[W,A]=react.useState(false),[B,M]=react.useState(false),_=react.useRef(null),j=react.useRef(0),N=react.useCallback(()=>{_.current&&clearTimeout(_.current),_.current=null;},[]);react.useEffect(()=>N,[N]);let q=react.useRef(false),h=react.useCallback(async()=>{let F=++j.current,v=()=>j.current===F,X=p?.signMessage?.bind(p);if(!s||!X){w("The connected wallet cannot sign messages."),g(false);return}g(true),w(null);try{if(M(!0),i==="link"){let Ae=await dn(ft({client:e,networkID:n,walletAddress:s,signMessage:X}),cn);if(!v())return;if(Ae.ok){d?.(Ae.data.PlayAccess??null);return}w(Ae.stage==="sign"?"Signature declined.":ue(Ae.error,"Could not link the wallet."));return}let G=await dn(We({client:e,networkID:n,walletAddress:s,signMessage:X}),cn);if(!v())return;if(G.ok){o();return}w(G.stage==="sign"?"Signature declined.":ue(G.error,"Wallet sign-in failed."));}catch(G){if(!v())return;console.error("[idosgames/wallet] solana sign-in failed:",G),w(Ko(G));}finally{v()&&(g(false),M(false));}},[s,p,e,n,o,i,d]),P=react.useCallback(()=>{Fo(p)||H()?.open();},[p]);react.useEffect(()=>{!W||!u||!s||!p||(A(false),N(),h());},[W,u,s,p,h,N]);let T=()=>{if(B){P();return}if(w(null),q.current=true,u&&s&&p){h();return}let F=H();if(!F){w("Wallet sign-in is not configured for this title.");return}g(true),A(true),N(),_.current=setTimeout(()=>{A(false),g(false),w("No wallet was connected.");},Mo),F.open();};return react.useEffect(()=>{!l||q.current||(q.current=true,T());},[l]),jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:T,disabled:a,style:{...Go,...a?{opacity:.6,cursor:"default"}:null,...c},children:B?"Waiting for signature \u2014 tap to open wallet":m?"Check your wallet\u2026":u?r??(i==="link"?"Link wallet":"Sign in with wallet"):"Connect wallet"}),y&&jsxRuntime.jsx("span",{role:"alert",style:Uo,children:y})]})}var Mo,cn,Go,Uo,mn=k(()=>{ot();Oe();ce();Mo=18e4,cn=9e4;Go={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},Uo={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};});function Fe(t){let e=(t??"").replace(/^0x/i,""),n=new Uint8Array(e.length>>1);for(let o=0;o<n.length;o++)n[o]=parseInt(e.slice(o*2,o*2+2),16);return n}function pe(t){let e=buffer.Buffer.alloc(8);return e.writeBigUInt64LE(BigInt(t||0)),e}function Xo(t){let e=buffer.Buffer.alloc(8);return e.writeBigInt64LE(BigInt(t||0)),e}function fe(t){let e=buffer.Buffer.from(t??"","utf8"),n=buffer.Buffer.alloc(4);return n.writeUInt32LE(e.length),buffer.Buffer.concat([n,e])}function er(t){return buffer.Buffer.concat([buffer.Buffer.from($o,"hex"),pe(t.amountRaw),fe(t.userID),fe(t.titleID),fe(t.category)])}function tr(t){let e=t.Splits??[],n=buffer.Buffer.alloc(4);return n.writeUInt32LE(e.length),buffer.Buffer.concat([buffer.Buffer.from(t.Domain==="SPL_DEV"?Qo:Yo,"hex"),pe(t.Amount),pe(t.BurnAmount),pe(t.Nonce),Xo(t.ExpiresAt),n,...e.map(o=>buffer.Buffer.concat([buffer.Buffer.from(new web3_js.PublicKey(o.To??"").toBytes()),pe(o.Amount)])),fe(t.UserID),fe(t.TitleID),fe(t.Category),buffer.Buffer.from([t.SigIxIndex??0])])}function me(t,e,n){return web3_js.PublicKey.findProgramAddressSync([e.toBuffer(),n.toBuffer(),t.toBuffer()],Ke)[0]}function nr(t,e,n,o,a){return new web3_js.TransactionInstruction({programId:Ke,keys:[{pubkey:t,isSigner:true,isWritable:true},{pubkey:e,isSigner:false,isWritable:true},{pubkey:n,isSigner:false,isWritable:false},{pubkey:o,isSigner:false,isWritable:false},{pubkey:web3_js.SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:a,isSigner:false,isWritable:false}],data:buffer.Buffer.from([1])})}function ge(t,...e){return web3_js.PublicKey.findProgramAddressSync(e,t)[0]}function or(t){let{programId:e,user:n,mint:o,tokenProgram:a}=t,r=ge(e,buffer.Buffer.from("vault"));return new web3_js.TransactionInstruction({programId:e,keys:[{pubkey:ge(e,buffer.Buffer.from("config")),isSigner:false,isWritable:false},{pubkey:r,isSigner:false,isWritable:true},{pubkey:o,isSigner:false,isWritable:false},{pubkey:n,isSigner:true,isWritable:true},{pubkey:me(o,n,a),isSigner:false,isWritable:true},{pubkey:me(o,r,a),isSigner:false,isWritable:true},{pubkey:a,isSigner:false,isWritable:false},{pubkey:Ke,isSigner:false,isWritable:false},{pubkey:web3_js.SystemProgram.programId,isSigner:false,isWritable:false}],data:er(t)})}function rr(t){let{sig:e,payer:n,tokenProgram:o}=t,a=new web3_js.PublicKey(e.ProgramID??""),r=new web3_js.PublicKey(e.Mint??""),c=new web3_js.PublicKey(e.WalletAddress??""),l=ge(a,buffer.Buffer.from("vault")),i=new web3_js.PublicKey(Zo),d=(e.Splits??[]).map(g=>new web3_js.PublicKey(g.To??"")),s=d.map(g=>me(r,g,o)),u=web3_js.Ed25519Program.createInstructionWithPublicKey({publicKey:Fe(e.Ed25519PublicKey),message:Fe(e.Ed25519Message),signature:Fe(e.SignatureHex)}),p=d.map((g,y)=>nr(n,s[y],g,r,o)),m=new web3_js.TransactionInstruction({programId:a,keys:[{pubkey:ge(a,buffer.Buffer.from("config")),isSigner:false,isWritable:false},{pubkey:n,isSigner:true,isWritable:true},{pubkey:l,isSigner:false,isWritable:true},{pubkey:ge(a,buffer.Buffer.from("nonce"),pe(e.Nonce)),isSigner:false,isWritable:true},{pubkey:r,isSigner:false,isWritable:false},{pubkey:c,isSigner:false,isWritable:false},{pubkey:me(r,l,o),isSigner:false,isWritable:true},{pubkey:me(r,c,o),isSigner:false,isWritable:true},{pubkey:i,isSigner:false,isWritable:false},{pubkey:me(r,i,o),isSigner:false,isWritable:true},{pubkey:web3_js.SYSVAR_INSTRUCTIONS_PUBKEY,isSigner:false,isWritable:false},{pubkey:o,isSigner:false,isWritable:false},{pubkey:Ke,isSigner:false,isWritable:false},{pubkey:web3_js.SystemProgram.programId,isSigner:false,isWritable:false},...s.map(g=>({pubkey:g,isSigner:false,isWritable:true}))],data:tr(e)});return [u,...p,m]}function Ge(t){let{connection:e,signTransaction:n}=t;async function o(r){let c=await e.getAccountInfo(r);if(!c)throw new O("MINT_NOT_FOUND",`mint ${r.toBase58()} not found`);return c.owner}async function a(r,c){let{blockhash:l,lastValidBlockHeight:i}=await e.getLatestBlockhash("confirmed"),d=new web3_js.Transaction;d.feePayer=r,d.recentBlockhash=l,d.add(...c);let s=await n(d),u=await e.sendRawTransaction(s.serialize());return await e.confirmTransaction({signature:u,blockhash:l,lastValidBlockHeight:i},"confirmed"),u}return {async depositSpl({mint:r,amountRaw:c,userID:l,titleID:i,category:d}){let s=new web3_js.PublicKey(t.owner),u=new web3_js.PublicKey(r),p=await o(u);return a(s,[or({programId:new web3_js.PublicKey(t.programId),user:s,mint:u,tokenProgram:p,amountRaw:c,userID:l,titleID:i,category:d})])},async submitWithdrawal(r){if(!r.ProgramID||!r.Mint||!r.WalletAddress)throw new O("BAD_VOUCHER","the voucher has no program, mint or wallet");let c=new web3_js.PublicKey(t.owner),l=new web3_js.PublicKey(r.ProgramID),i=await e.getAccountInfo(ge(l,buffer.Buffer.from("config")));if(!i)throw new O("POOL_NOT_ON_THIS_CLUSTER","the pool's config account is not on this cluster");if(i.data.length!==fn)throw new O("POOL_NOT_MIGRATED",`config is ${i.data.length} bytes, expected ${fn} (migrate_config not run)`);let d=buffer.Buffer.from(i.data);if(d[Jo]===1)throw new O("POOL_PAUSED","pool withdrawals are paused");let s=d.readBigUInt64LE(wn);if(s!==BigInt(r.SignatureEpoch||0))throw new O("VOUCHER_REVOKED",`signature epoch mismatch: voucher ${r.SignatureEpoch}, on-chain ${s}`);let u=buffer.Buffer.from(Fe(r.Ed25519PublicKey)),p=false;for(let g=0;g<yn;g++){let y=gn+g*32;u.equals(d.subarray(y,y+32))&&(p=true);}if(!p)throw new O("SIGNER_NOT_TRUSTED","the voucher's signer is not in the pool's server_pubkeys");let m=await o(new web3_js.PublicKey(r.Mint));return a(c,rr({sig:r,payer:c,tokenProgram:m}))}}}var $o,Yo,Qo,Ke,Zo,fn,gn,yn,wn,Jo,O,bt=k(()=>{$o="e000c6afc62f69cc",Yo="b59a5e563e7306ba",Qo="d668e18c1bdc33f1",Ke=new web3_js.PublicKey("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"),Zo="1nc1nerator11111111111111111111111111111111",fn=177,gn=40,yn=4,wn=gn+32*yn,Jo=wn+8,O=class extends Error{constructor(n,o){super(o);this.code=n;this.name="PlatformPoolError";}code};});function mr(t){return (t.ChainID===pr?exports.solanaDevnet:exports.solanaMainnet).rpcUrls.default.http[0]}function hn(t){let{client:e,walletConnectProjectId:n,appName:o,onClose:a,style:r}=t,[c,l]=react.useState(n??"");react.useEffect(()=>{if(n)return;let y=true;return (async()=>{let w=await e.blockchain.getDefinitions();if(!y||!w.ok)return;let W=w.data.Blockchain?.WalletLogin?.WalletConnectProjectId;W&&l(W);})(),()=>{y=false;}},[e,n]);let i=react.useMemo(()=>c?(_e({walletConnectProjectId:c,appName:o}),true):false,[c,o]),{address:d,isConnected:s}=react$1.useAppKitAccount(),{walletProvider:u}=react$1.useAppKitProvider("solana"),p=s&&d?d:null,m=(y,w)=>Ge({connection:new web3_js.Connection(mr(y),"confirmed"),owner:w,programId:y.RewardPoolAddress??"",signTransaction:async W=>{if(!u)throw new Error("Wallet not connected.");return u.signTransaction(W)}});return jsxRuntime.jsx(Be,{client:e,engine:{networkType:"Solana",address:p,connectChoices:i?[{key:"appkit",label:"Connect wallet",connect:()=>{H()?.open();}}]:[],disconnect:()=>{H()?.disconnect("solana");},deposit:async({network:y,binding:w,amount:W})=>{if(!p)return f("deposit-onchain","Wallet not connected.");if(!w.ContractAddress)return f("deposit-onchain","This token cannot be deposited.");if(!y.RewardPoolAddress)return f("deposit-onchain","POOL_NOT_IN_REGISTRY");let A;try{A=viem.parseUnits(W,w.Decimals??9);}catch{return f("deposit-onchain","Invalid amount.")}return Ce({client:e,adapter:m(y,p),network:y,mint:w.ContractAddress,amountRaw:A,titleID:e.titleID})},withdraw:async({network:y,networkID:w,currencyID:W,amount:A})=>p?Se({client:e,adapter:m(y,p),currencyID:W,networkID:w,walletAddress:p,amount:A}):f("request","Wallet not connected.")},onClose:a,style:r})}var pr,kn=k(()=>{Q();Oe();bt();L();ce();mt();ct();pr=103;});var Pt={};Wt(Pt,{PlatformPoolError:()=>O,SolanaWalletLogin:()=>pn,SolanaWalletPanel:()=>hn,createPlatformPoolAdapter:()=>Ge,createSolanaWalletConfig:()=>_e,solanaDevnet:()=>exports.solanaDevnet,solanaMainnet:()=>exports.solanaMainnet,useSolanaBridge:()=>sn});var Ct=k(()=>{mt();ln();mn();kn();bt();Q();});V();L();var $={addressRequest:"IDOS_PLATFORM_WALLET_ADDRESS_REQUEST",addressResponse:"IDOS_PLATFORM_WALLET_ADDRESS_RESPONSE",signRequest:"IDOS_PLATFORM_WALLET_SIGN_REQUEST",signResponse:"IDOS_PLATFORM_WALLET_SIGN_RESPONSE",ack:"IDOS_PLATFORM_WALLET_ACK",openRequest:"IDOS_PLATFORM_WALLET_OPEN_REQUEST",openResponse:"IDOS_PLATFORM_WALLET_OPEN_RESPONSE"},ye="PLATFORM_WALLET_UNAVAILABLE",Nn=5e3,Ln=18e4;function Rn(){let t=[...core.PLATFORM_ORIGINS],e=window.location.ancestorOrigins?.[0];return e&&!t.includes(e)&&core.isPlatformParentOrigin(e)&&t.push(e),t}function Bn(){return `wallet-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function He(t,e,n){if(typeof window>"u"||window.self===window.top)return Promise.resolve({ok:false,error:ye});let o=window.parent;if(!o)return Promise.resolve({ok:false,error:ye});let a=Bn();return new Promise(r=>{let c=false,l,i=s=>{c||(c=true,window.removeEventListener("message",d),clearTimeout(l),r(s));},d=s=>{if(!core.isPlatformParentOrigin(s.origin))return;let u=s.data;if(!(!u||u.requestId!==a)){if(u.type===$.ack){clearTimeout(l),l=setTimeout(()=>i({ok:false,error:"TIMEOUT"}),Ln);return}u.type===e&&i({ok:u.ok===true,error:typeof u.error=="string"?u.error:void 0,address:typeof u.address=="string"?u.address:void 0,signature:typeof u.signature=="string"?u.signature:void 0});}};l=setTimeout(()=>i({ok:false,error:ye}),Nn),window.addEventListener("message",d);for(let s of Rn())try{o.postMessage({type:t,requestId:a,...n},s);}catch{}})}async function _n(){return (await He($.openRequest,$.openResponse,{})).ok}async function Tt(t){let{client:e,networkID:n}=t;return It(t,async o=>{let a=await e.auth.requestWalletChallenge(o,n);return a.ok?{ok:true,message:a.data.Message}:{ok:false,error:a.error}},(o,a)=>e.auth.loginWithWallet(o,n,a))}async function vt(t){let{client:e,networkID:n}=t;return It(t,async o=>{let a=await e.auth.linkWallet(o,n);return a.ok?a.data.Challenge?{ok:true,message:a.data.Challenge}:{ok:false,error:"No challenge was issued."}:{ok:false,error:a.error}},(o,a)=>e.auth.linkWallet(o,n,a))}async function It(t,e,n){let{client:o,family:a}=t,r=o.titleID,c=await He($.addressRequest,$.addressResponse,{titleID:r,family:a});if(!c.ok||!c.address)return b("challenge",c.error??"NO_WALLET");let l=c.address,i=await e(l);if(!i.ok)return b("challenge",i.error);let d=await He($.signRequest,$.signResponse,{titleID:r,family:a,address:l,message:i.message});if(!d.ok||!d.signature)return b("sign",d.error??"SIGN_FAILED");let s=await n(l,d.signature);return s.ok?{ok:true,data:s.data}:b("login",s.error)}var Pn={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},Cn={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};function bn(t){switch(t){case ye:return "Wallet sign-in is not available on this page.";case "NO_WALLET":case "CANCELLED":return "Connect a wallet on the page to sign in.";case "REJECTED":return "The signature was declined.";case "TIMEOUT":return "The wallet did not answer. Please try again.";default:return t}}function yr(t){let{client:e,networkID:n,onAuthenticated:o,onLinked:a,mode:r="login",family:c,disabled:l,label:i,style:d}=t,[s,u]=react.useState(false),[p,m]=react.useState(null);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:()=>{u(true),m(null),(async()=>{if(r==="link"){let w=await vt({client:e,networkID:n,family:c});if(w.ok){u(false),a?.(w.data.PlayAccess??null);return}m(bn(w.error)),u(false);return}let y=await Tt({client:e,networkID:n,family:c});if(y.ok){o?.();return}m(bn(y.error)),u(false);})();},disabled:l||s,style:{...Pn,...l||s?{opacity:.6,cursor:"default"}:null,...d},children:s?"Waiting for the wallet\u2026":i??(r==="link"?"Link wallet":"Sign in with wallet")}),p&&jsxRuntime.jsx("span",{role:"alert",style:Cn,children:p})]})}function Sn(t,e){return Ue()?null:jsxRuntime.jsx(yr,{...t,family:e})}function Wn(t){let{loading:e,disabled:n,label:o,style:a,error:r,onClick:c}=t;return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:c,disabled:n||e,style:{...Pn,...n||e?{opacity:.6,cursor:"default"}:null,...a},children:e?"Loading wallet\u2026":o??"Sign in with wallet"}),r&&jsxRuntime.jsx("span",{role:"alert",style:Cn,children:r})]})}function wr(t){let{chains:e,walletConnectProjectId:n,appName:o,disabled:a,label:r,style:c,onAuthenticated:l,...i}=t,[d,s]=react.useState(null),[u,p]=react.useState(false),[m,g]=react.useState(null);if(S())return Sn(t,"evm");let y=()=>{p(true),g(null),(async()=>{try{let w=await Promise.resolve().then(()=>(pt(),ut)),W=w.createEvmWalletConfig({chains:e,walletConnectProjectId:n,appName:o});s({mod:w,config:W});}catch(w){console.error("[idosgames/wallet] failed to load the wallet module:",w),g("Could not load the wallet. Please try again.");}finally{p(false);}})();};if(d){let{WalletLogin:w}=d.mod;return jsxRuntime.jsx(w,{...i,onAuthenticated:l??An,wagmiConfig:d.config,disabled:a,label:r,style:c,autoStart:true})}return jsxRuntime.jsx(Wn,{loading:u,disabled:a,label:r??(t.mode==="link"?"Link wallet":void 0),style:c,error:m,onClick:y})}function An(){}function hr(t){let{walletConnectProjectId:e,appName:n,disabled:o,label:a,style:r,onAuthenticated:c,...l}=t,[i,d]=react.useState(null),[s,u]=react.useState(false),[p,m]=react.useState(null);if(S())return Sn(t,"solana");let g=()=>{u(true),m(null),(async()=>{try{let y=await Promise.resolve().then(()=>(Ct(),Pt));e&&y.createSolanaWalletConfig({walletConnectProjectId:e,appName:n}),d(y);}catch(y){console.error("[idosgames/wallet] failed to load the wallet module:",y),m("Could not load the wallet. Please try again.");}finally{u(false);}})();};if(i){let{SolanaWalletLogin:y}=i;return jsxRuntime.jsx(y,{...l,onAuthenticated:c??An,disabled:o,label:a,style:r,autoStart:true})}return jsxRuntime.jsx(Wn,{loading:s,disabled:o,label:a??(t.mode==="link"?"Link wallet":void 0),style:r,error:p,onClick:g})}var kr={pointerEvents:"auto",background:"#04276bf5",border:"1px solid #1e59c8",borderRadius:12,padding:16,color:"#fff",width:320,boxSizing:"border-box",fontFamily:"system-ui, sans-serif",fontSize:13};function br(t){let{client:e,onClose:n,style:o}=t,a=S(),[r,c]=react.useState(null),[l,i]=react.useState(null);return react.useEffect(()=>{if(a)return;let d=true;return (async()=>{try{let s=await e.blockchain.getDefinitions(),u=Object.values((s.ok?s.data.Blockchain?.Networks:null)??{}).map(g=>g.Type),m=u.includes("Solana")&&!u.includes("EVM")?{kind:"solana",mod:await Promise.resolve().then(()=>(Ct(),Pt))}:{kind:"evm",mod:await Promise.resolve().then(()=>(pt(),ut))};d&&c(m);}catch(s){console.error("[idosgames/wallet] failed to load the wallet panel:",s),d&&i("Could not load the wallet.");}})(),()=>{d=false;}},[a,e]),a?null:r?.kind==="evm"?jsxRuntime.jsx(r.mod.WalletPanel,{...t}):r?.kind==="solana"?jsxRuntime.jsx(r.mod.SolanaWalletPanel,{...t}):jsxRuntime.jsxs("div",{style:{...kr,...o},children:[l??"Loading wallet\u2026",n&&jsxRuntime.jsx("button",{type:"button",onClick:n,style:{background:"#1e59c8",color:"#fff",border:"none",borderRadius:8,padding:"7px 12px",fontWeight:600,cursor:"pointer",marginLeft:10},children:"\u2715"})]})}V();Q();
|
|
2
|
-
exports.LazySolanaWalletLogin=
|
|
1
|
+
'use strict';var viem=require('viem'),core=require('@idosgames/core'),wagmi=require('wagmi'),connectors=require('wagmi/connectors'),appkitAdapterWagmi=require('@reown/appkit-adapter-wagmi'),react$1=require('@reown/appkit/react'),reactQuery=require('@tanstack/react-query'),react=require('react'),jsxRuntime=require('react/jsx-runtime'),actions=require('wagmi/actions'),appkitAdapterSolana=require('@reown/appkit-adapter-solana'),buffer=require('buffer'),web3_js=require('@solana/web3.js');var Tn=Object.defineProperty;var k=(t,e)=>()=>(t&&(e=t(t=0)),e);var Wt=(t,e)=>{for(var n in e)Tn(t,n,{get:e[n],enumerable:true});};function I(t){return t instanceof viem.BaseError?t.shortMessage:t instanceof Error?t.message:String(t)}function f(t,e,n){return {ok:false,stage:t,error:e,...n}}function b(t,e){return {ok:false,stage:t,error:e}}var L=k(()=>{});function Dn(t=typeof window>"u"?"":window.location.hostname){let e=t.toLowerCase();return In.test(e)?true:e!=="localhost"&&e!=="127.0.0.1"?false:globalThis.__IDOS_PREVIEW__!=null}function S(){if(typeof window>"u"||Dn())return false;try{return window.self!==window.top}catch{return true}}function Ue(){if(typeof window>"u")return false;try{return window.parent!==window.top}catch{return true}}function U(t){return f(t,At)}function ee(t){return b(t,At)}var At,In,V=k(()=>{L();At="WALLET_USE_SITE_PANEL",In=/^[a-z0-9]{8}-preview\.idos\.games$/;});function qe(t){return Object.values(exports.idosChains).find(e=>e.id===t)}function Dt(t){return {...t,chainNamespace:"eip155",caipNetworkId:`eip155:${t.id}`}}exports.mainnet=void 0;exports.bsc=void 0;exports.polygon=void 0;exports.base=void 0;exports.arbitrum=void 0;exports.optimism=void 0;exports.sepolia=void 0;exports.polygonAmoy=void 0;exports.idosChains=void 0;exports.solanaMainnet=void 0;exports.solanaDevnet=void 0;var Q=k(()=>{exports.mainnet={id:1,name:"Ethereum",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://eth.llamarpc.com"]}},blockExplorers:{default:{name:"Etherscan",url:"https://etherscan.io"}}},exports.bsc={id:56,name:"BNB Smart Chain",nativeCurrency:{name:"BNB",symbol:"BNB",decimals:18},rpcUrls:{default:{http:["https://bsc-dataseed.binance.org"]}},blockExplorers:{default:{name:"BscScan",url:"https://bscscan.com"}}},exports.polygon={id:137,name:"Polygon",nativeCurrency:{name:"POL",symbol:"POL",decimals:18},rpcUrls:{default:{http:["https://polygon-rpc.com"]}},blockExplorers:{default:{name:"PolygonScan",url:"https://polygonscan.com"}}},exports.base={id:8453,name:"Base",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://mainnet.base.org"]}},blockExplorers:{default:{name:"BaseScan",url:"https://basescan.org"}}},exports.arbitrum={id:42161,name:"Arbitrum One",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://arb1.arbitrum.io/rpc"]}},blockExplorers:{default:{name:"Arbiscan",url:"https://arbiscan.io"}}},exports.optimism={id:10,name:"OP Mainnet",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://mainnet.optimism.io"]}},blockExplorers:{default:{name:"Optimistic Etherscan",url:"https://optimistic.etherscan.io"}}},exports.sepolia={id:11155111,name:"Sepolia",testnet:true,nativeCurrency:{name:"Sepolia Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.sepolia.org"]}},blockExplorers:{default:{name:"Etherscan",url:"https://sepolia.etherscan.io"}}},exports.polygonAmoy={id:80002,name:"Polygon Amoy",testnet:true,nativeCurrency:{name:"POL",symbol:"POL",decimals:18},rpcUrls:{default:{http:["https://rpc-amoy.polygon.technology"]}},blockExplorers:{default:{name:"PolygonScan",url:"https://amoy.polygonscan.com"}}},exports.idosChains={mainnet:exports.mainnet,bsc:exports.bsc,polygon:exports.polygon,base:exports.base,arbitrum:exports.arbitrum,optimism:exports.optimism,sepolia:exports.sepolia,polygonAmoy:exports.polygonAmoy};exports.solanaMainnet={id:"5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",name:"Solana",network:"solana-mainnet",nativeCurrency:{name:"Solana",symbol:"SOL",decimals:9},rpcUrls:{default:{http:["https://api.mainnet-beta.solana.com"]}},blockExplorers:{default:{name:"Solscan",url:"https://solscan.io"}},testnet:false,chainNamespace:"solana",caipNetworkId:"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp"},exports.solanaDevnet={id:"EtWTRABZaYq6iMfeYKouRu166VU2xqa1",name:"Solana Devnet",network:"solana-devnet",nativeCurrency:{name:"Solana",symbol:"SOL",decimals:9},rpcUrls:{default:{http:["https://api.devnet.solana.com"]}},blockExplorers:{default:{name:"Solscan",url:"https://solscan.io"}},testnet:true,chainNamespace:"solana",caipNetworkId:"solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1"};});function Te(t){xt=t;}function H(){return xt}var xt,ce=k(()=>{xt=null;});function ve(t){let{chains:e=ze,walletConnectProjectId:n,appName:o,appUrl:a,appIcon:r,transports:c,connectors:l}=t,i=n??"__extension_only__";if(!l){let g=Ve.get(i);if(g)return g}let d={};for(let g of e)d[g.id]=c?.[g.id]??wagmi.http();let s=a??(typeof window<"u"?window.location.origin:""),u={name:o??"iDosGames",description:o??"iDosGames game",url:s,icons:r?[r]:[]};if(n&&!l){let g=e.map(Dt),y=new appkitAdapterWagmi.WagmiAdapter({networks:g,projectId:n,transports:d});return Te(react$1.createAppKit({adapters:[y],networks:g,projectId:n,metadata:u,features:{analytics:false,email:false,socials:false}})),Ve.set(i,y.wagmiConfig),y.wagmiConfig}let p=l??[connectors.injected(),connectors.coinbaseWallet({appName:o??"iDosGames"})],m=wagmi.createConfig({chains:e,connectors:p,transports:d});return l||Ve.set(i,m),m}var ze,Ve,je=k(()=>{Q();ce();ze=[exports.mainnet,exports.bsc,exports.polygon,exports.base,exports.arbitrum,exports.optimism,exports.sepolia,exports.polygonAmoy],Ve=new Map;});function de(t){let{wagmiConfig:e,queryClient:n,children:o}=t,[a]=react.useState(()=>n??new reactQuery.QueryClient);return jsxRuntime.jsx(wagmi.WagmiProvider,{config:e,children:jsxRuntime.jsx(reactQuery.QueryClientProvider,{client:a,children:o})})}var Ie=k(()=>{});var De,Lt,$e,Rt,Ye=k(()=>{De=[{type:"function",name:"depositERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"amount",type:"uint256"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"withdrawERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"amount",type:"uint256"},{name:"burnAmount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{name:"amount",type:"uint256"}]},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC1155",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{name:"amount",type:"uint256"}]},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],Lt=[{type:"function",name:"withdrawERC1155Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{name:"amount",type:"uint256"}]},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],$e=[{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"}]}],Rt=[{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 Bt(t,e,n){return viem.encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[t,e,core.normalizeBlockchainCategory(n)])}var _t=k(()=>{});async function Z(t,e){let{walletClient:n,publicClient:o,account:a}=t,r=await n.writeContract({address:e.address,abi:e.abi,functionName:e.functionName,args:e.args,account:a,chain:n.chain,value:e.value});if((await o.waitForTransactionReceipt({hash:r})).status==="reverted")throw new Error(`On-chain transaction reverted (${r}).`);return r}var Qe=k(()=>{});function Ot(t){let e=t.RewardPoolAddress;return e||null}async function Mt(t,e,n,o){return await t.publicClient.readContract({address:e,abi:$e,functionName:"allowance",args:[t.account,n]})>=o?null:Z(t,{address:e,abi:$e,functionName:"approve",args:[n,o]})}async function Ze(t){let{client:e,clients:n,network:o,tokenAddress:a,amount:r,titleID:c,category:l}=t;if(S())return U("approve");let i=e.auth.context?.userID;if(!i)return f("approve","Not logged in.");let d=Ot(o);if(!d)return f("approve","Network has no RewardPoolAddress.");if(r<=0n)return f("approve","Amount must be positive.");try{await Mt(n,a,d,r);}catch(p){return f("approve",I(p))}let s;try{s=await Z(n,{address:d,abi:De,functionName:"depositERC20",args:[a,r,i,c,l??""]});}catch(p){return f("deposit-onchain",I(p))}let u=await e.blockchain.depositToken(o.NetworkID??"",s);return u.ok?{ok:true,onChainTxHash:s,data:u.data}:f("report",u.error,{onChainTxHash:s})}async function Je(t){let{client:e,clients:n,network:o,nftContractAddress:a,tokenId:r,amount:c,titleID:l,category:i}=t;if(S())return U("deposit-onchain");let d=e.auth.context?.userID;if(!d)return f("deposit-onchain","Not logged in.");let s=Ot(o);if(!s)return f("deposit-onchain","Network has no RewardPoolAddress.");if(c<=0n)return f("deposit-onchain","Amount must be positive.");let u=Bt(d,l,i),p;try{p=await Z(n,{address:a,abi:Rt,functionName:"safeTransferFrom",args:[n.account,s,r,c,u]});}catch(g){return f("deposit-onchain",I(g))}let m=await e.blockchain.depositNFT(o.NetworkID??"",p);return m.ok?{ok:true,onChainTxHash:p,data:m.data}:f("report",m.error,{onChainTxHash:p})}var Ft=k(()=>{Ye();_t();Qe();L();V();});function Kt(t){return (t.Splits??[]).map(e=>({to:e.To,amount:BigInt(e.Amount??"0")}))}async function Gt(t,e){return Z(t,{address:e.ContractAddress,abi:De,functionName:"withdrawERC20",args:[e.TokenAddress,e.WalletAddress,BigInt(e.Amount??"0"),BigInt(e.BurnAmount??"0"),Kt(e),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function Ut(t,e){return Z(t,{address:e.ContractAddress,abi:Lt,functionName:"withdrawERC1155Mint",args:[e.TokenAddress,e.WalletAddress,BigInt(e.TokenId??"0"),BigInt(e.Amount??"0"),Kt(e),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function Xe(t){let{client:e,clients:n,currencyID:o,networkID:a,walletAddress:r,amount:c,category:l}=t;if(S())return U("request");let i=await e.blockchain.requestTokenWithdrawal(o,a,r,c,l);if(!i.ok)return f("request",i.error);let d=i.data.EvmSignature,s=i.data.TitleTransactionID??void 0;if(!d)return f("request","Withdrawal response carried no EVM signature.",{titleTransactionID:s});let u;try{u=await Gt(n,d);}catch(m){return f("withdraw-onchain",I(m),{titleTransactionID:s})}let p=await Ht(e,s,u);return p.ok?{ok:true,onChainTxHash:u,data:i.data}:p}async function et(t){let{client:e,clients:n,itemID:o,networkID:a,walletAddress:r,amount:c,category:l}=t;if(S())return U("request");let i=await e.blockchain.requestNFTWithdrawal(o,a,r,c,l);if(!i.ok)return f("request",i.error);let d=i.data.EvmSignature,s=i.data.TitleTransactionID??void 0;if(!d)return f("request","Withdrawal response carried no EVM signature.",{titleTransactionID:s});let u;try{u=await Ut(n,d);}catch(m){return f("withdraw-onchain",I(m),{titleTransactionID:s})}let p=await Ht(e,s,u);return p.ok?{ok:true,onChainTxHash:u,data:i.data}:p}async function Ht(t,e,n){if(!e)return f("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let o=await t.blockchain.confirmWithdrawal(e,n);return o.ok?{ok:true,onChainTxHash:n,data:o.data}:f("confirm",o.error,{onChainTxHash:n,titleTransactionID:e})}var qt=k(()=>{Ye();Qe();L();V();});async function he(t){let{client:e,clients:n,networkID:o}=t;if(S())return ee("challenge");let a=t.walletAddress??n.account,r=await e.auth.requestWalletChallenge(a,o);if(!r.ok)return b("challenge",r.error);let c;try{c=await n.walletClient.signMessage({account:n.account,message:r.data.Message});}catch(i){return b("sign",I(i))}let l=await e.auth.loginWithWallet(a,o,c);return l.ok?{ok:true,data:l.data}:b("login",l.error)}async function tt(t){let{client:e,clients:n,networkID:o}=t;if(S())return ee("challenge");let a=t.walletAddress??n.account,r=await e.auth.linkWallet(a,o);if(!r.ok)return b("challenge",r.error);if(!r.data.Challenge)return b("challenge","No challenge was issued.");let c;try{c=await n.walletClient.signMessage({account:n.account,message:r.data.Challenge});}catch(i){return b("sign",I(i))}let l=await e.auth.linkWallet(a,o,c);return l.ok?{ok:true,data:l.data}:b("login",l.error)}var Vt=k(()=>{L();V();});var nt=k(()=>{Ft();qt();Vt();});function be(){let{address:t}=wagmi.useAccount(),e=wagmi.usePublicClient(),{data:n}=wagmi.useWalletClient();return !t||!e||!n?null:{account:t,publicClient:e,walletClient:n}}function xe(t,e){let n=be();return {connected:!!n,account:n?.account??null,loginWithWallet:(o,a)=>n?he({client:t,clients:n,networkID:o,walletAddress:a}):Promise.resolve(b("challenge",ke)),depositToken:o=>n?Ze({client:t,clients:n,titleID:e,...o}):Promise.resolve(f("approve",ke)),depositNft:o=>n?Je({client:t,clients:n,titleID:e,...o}):Promise.resolve(f("deposit-onchain",ke)),withdrawToken:o=>n?Xe({client:t,clients:n,...o}):Promise.resolve(f("withdraw-onchain",ke)),withdrawNft:o=>n?et({client:t,clients:n,...o}):Promise.resolve(f("withdraw-onchain",ke))}}var ke,Ne=k(()=>{nt();L();ke="Wallet not connected.";});function ue(t,e){switch(t){case null:case void 0:case "":return e;case "PLAY_ACCESS_WALLET_USED_BY_ANOTHER_ACCOUNT":return "This wallet already plays with another account.";case "WALLET_UNLINK_COOLDOWN":return "This wallet was unlinked from another account less than 7 days ago. Try again after the 7 days.";case "WALLET_CHANGES_TOO_FREQUENT":return "Too many wallets were changed this week. Try again in a few days.";case "PLAY_ACCESS_WALLET_LOGIN_ONLY":return "This game is played with a wallet login only.";case "INVALID_WALLET_SIGNATURE":return "The signature does not match the wallet. Please try again.";case "WALLET_CHALLENGE_EXPIRED":return "The request expired. Please try again.";default:return t}}var ot=k(()=>{});function Zt(t){let{wagmiConfig:e,...n}=t;return jsxRuntime.jsx(de,{wagmiConfig:e,children:jsxRuntime.jsx(at,{...n})})}function ro(t){return t instanceof Error&&(t.name==="ConnectorAlreadyConnectedError"||t.message.includes("already connected"))}function ao(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 jt(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 io(t,e=18e4){return actions.getAccount(t).isConnected?Promise.resolve(true):new Promise(n=>{let o=false,a=l=>{o||(o=true,r(),clearTimeout(c),n(l));},r=actions.watchAccount(t,{onChange:l=>{l.isConnected&&a(true);}}),c=setTimeout(()=>a(false),e);})}function so(t,e=8e3){let n=o=>o==="reconnecting"||o==="connecting";return n(actions.getAccount(t).status)?new Promise(o=>{let a=false,r=()=>{a||(a=true,c(),clearTimeout(l),o());},c=actions.watchAccount(t,{onChange:i=>{n(i.status)||r();}}),l=setTimeout(r,e);}):Promise.resolve()}function lo(t){let e=a=>t.find(r=>r.id===a||r.type===a),n=e("injected"),o=typeof window<"u"&&window.ethereum!=null;return n&&o?n:e("walletConnect")??n??t[0]}async function co(t){try{let o=(await actions.getAccount(t).connector?.getProvider?.())?.session?.peer?.metadata?.redirect,a=o?.native||o?.universal;return !a||typeof window>"u"?!1:(window.location.href=a,!0)}catch{return false}}function Yt(t,e){return new Promise((n,o)=>{let a=setTimeout(()=>o(new Error("The wallet request timed out.")),e);t.then(r=>{clearTimeout(a),n(r);},r=>{clearTimeout(a),o(r instanceof Error?r:new Error(String(r)));});})}function at(t){let{client:e,networkID:n,onAuthenticated:o,disabled:a,label:r,style:c,autoStart:l,mode:i="login",onLinked:d}=t,s=wagmi.useConfig(),{isConnected:u}=wagmi.useAccount(),{connectAsync:p,connectors:m}=wagmi.useConnect(),g=be(),[y,w]=react.useState(false),[W,A]=react.useState(null),[B,M]=react.useState(false),_=react.useRef(0),j=react.useRef(false),N=async()=>{let h=++_.current,C=()=>_.current===h;w(true),A(null);try{if(await so(s),!C())return;if(!actions.getAccount(s).isConnected){let v=H();if(v){if(await v.open(),!await io(s)){A("No wallet was connected.");return}}else {let X=lo(m);if(!X){A("No wallet connector is configured.");return}try{await p({connector:X});}catch(G){if(!ro(G))throw G}}}let T=g??await jt(s);if(!T&&actions.getAccount(s).isConnected&&(await new Promise(v=>setTimeout(v,300)),T=await jt(s),!C()))return;if(!T){A("Wallet client is not available.");return}if(M(!0),i==="link"){let v=await Yt(tt({client:e,clients:T,networkID:n}),$t);if(!C())return;if(v.ok){d?.(v.data.PlayAccess??null);return}A(v.stage==="sign"?"Signature declined.":ue(v.error,"Could not link the wallet."));return}let F=await Yt(he({client:e,clients:T,networkID:n}),$t);if(!C())return;if(F.ok){o();return}A(F.stage==="sign"?"Signature declined.":ue(F.error,"Wallet sign-in failed."));}catch(T){if(!C())return;console.error("[idosgames/wallet] wallet sign-in failed:",T),A(ao(T));}finally{C()&&(w(false),M(false));}};react.useEffect(()=>{!l||j.current||(j.current=true,N());},[l]);let q=async()=>{await co(s)||await H()?.open();};return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:()=>{B?q():N();},disabled:a,style:{...uo,...a?{opacity:.6,cursor:"default"}:null,...c},children:B?"Waiting for signature \u2014 tap to open wallet":y?"Check your wallet\u2026":u?r??(i==="link"?"Link wallet":"Sign in with wallet"):"Connect wallet"}),W&&jsxRuntime.jsx("span",{role:"alert",style:po,children:W})]})}var $t,uo,po,Jt=k(()=>{ce();ot();nt();Ie();Ne();$t=9e4;uo={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},po={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};});function Be({client:t,engine:e,onClose:n,style:o}){let[,a]=react.useReducer(h=>h+1,0),[r,c]=react.useState({}),[l,i]=react.useState({}),[d,s]=react.useState(""),[u,p]=react.useState(""),[m,g]=react.useState(""),[y,w]=react.useState(false),[W,A]=react.useState(null);react.useEffect(()=>{let h=true;return (async()=>{let C=await t.blockchain.getDefinitions();if(await t.blockchain.getUserState(),!h||!C.ok)return;let T={};for(let[F,v]of Object.entries(C.data.Blockchain?.Networks??{}))v.Type===e.networkType&&(T[F]=v);c(T),i(C.data.CryptoCurrencies??{}),s(Object.keys(T)[0]??"");})(),()=>{h=false;}},[t,e.networkType]),react.useEffect(()=>t.on("user:anyUpdated",a),[t]);let B=react.useMemo(()=>Object.entries(l).filter(([,h])=>h.Networks?.some(C=>C.NetworkID===d&&!!C.ContractAddress)),[l,d]);react.useEffect(()=>{let h=B[0]?.[0]??"";p(C=>B.some(([T])=>T===C)?C:h);},[B]);let M=d?r[d]:void 0,_=u?l[u]?.Networks?.find(h=>h.NetworkID===d):void 0,j=u?t.data.user.getCryptoCurrencyAmount(u):"0",N=!!e.address;async function q(h){w(true),A(null);try{let C=await h();A(C),C.ok&&await t.blockchain.getUserState();}finally{w(false);}}return jsxRuntime.jsxs("div",{style:{...wo,...o},children:[jsxRuntime.jsxs("div",{style:{...lt,justifyContent:"space-between"},children:[jsxRuntime.jsx("span",{style:ho,children:"Crypto wallet"}),n&&jsxRuntime.jsx("button",{type:"button",style:Re,onClick:n,children:"\u2715"})]}),N?jsxRuntime.jsxs("div",{style:lt,children:[jsxRuntime.jsxs("span",{style:{...z,flex:1,alignSelf:"center"},children:[e.address.slice(0,6),"\u2026",e.address.slice(-4)]}),jsxRuntime.jsx("button",{type:"button",style:Re,onClick:e.disconnect,children:"Disconnect"})]}):jsxRuntime.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6},children:[jsxRuntime.jsx("span",{style:z,children:"Connect a browser or mobile wallet"}),e.connectChoices.length===0?jsxRuntime.jsx("span",{style:z,children:"Wallet connection is not configured for this title."}):e.connectChoices.map(h=>jsxRuntime.jsx("button",{type:"button",style:Re,onClick:h.connect,children:h.label},h.key))]}),Object.keys(r).length===0?jsxRuntime.jsxs("span",{style:z,children:["No ",e.networkType," networks configured for this title."]}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:z,children:"Network"}),jsxRuntime.jsx("select",{style:st,value:d,onChange:h=>s(h.target.value),children:Object.entries(r).map(([h,C])=>jsxRuntime.jsx("option",{value:h,children:C.DisplayName??h},h))})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:z,children:"Token"}),jsxRuntime.jsxs("select",{style:st,value:u,onChange:h=>p(h.target.value),children:[B.length===0&&jsxRuntime.jsx("option",{value:"",children:"\u2014 no depositable tokens \u2014"}),B.map(([h,C])=>jsxRuntime.jsx("option",{value:h,children:C.DisplayName??h},h))]})]}),jsxRuntime.jsxs("div",{style:z,children:["In-game balance: ",jsxRuntime.jsx("b",{children:j})," ",u]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:z,children:"Amount"}),jsxRuntime.jsx("input",{style:st,inputMode:"decimal",placeholder:"0.0",value:m,onChange:h=>g(h.target.value)})]}),jsxRuntime.jsxs("div",{style:lt,children:[jsxRuntime.jsx("button",{type:"button",style:{...ko,flex:1,opacity:y?.6:1},disabled:y||!N||!_?.ContractAddress,onClick:()=>{!M||!_||q(()=>e.deposit({network:M,binding:_,currencyID:u,amount:m||"0"}));},children:"Deposit"}),jsxRuntime.jsx("button",{type:"button",style:{...Re,flex:1,opacity:y?.6:1},disabled:y||!N||!u,onClick:()=>{M&&q(()=>e.withdraw({network:M,networkID:d,currencyID:u,amount:m||"0"}));},children:"Withdraw"})]})]}),W&&jsxRuntime.jsx(bo,{result:W})]})}function bo({result:t}){let e={fontSize:12,borderRadius:8,padding:"8px 10px",background:t.ok?"#1e3a2a":"#3a1e28",color:t.ok?"#8ef0b0":"#f2a0b4",wordBreak:"break-all"};return t.ok?jsxRuntime.jsxs("div",{style:e,children:["\u2713 Done \xB7 tx ",t.onChainTxHash]}):jsxRuntime.jsxs("div",{style:e,children:["\u2715 [",t.stage,"] ",t.error,t.titleTransactionID?` \xB7 already debited (tx ${t.titleTransactionID}) \u2014 retry/confirm, don't re-request`:""]})}var wo,ho,z,st,ko,Re,lt,ct=k(()=>{wo={pointerEvents:"auto",background:"#04276bf5",border:"1px solid #1e59c8",borderRadius:12,padding:16,color:"#fff",width:320,boxSizing:"border-box",fontFamily:"system-ui, sans-serif",display:"flex",flexDirection:"column",gap:10,maxHeight:"80vh",overflow:"auto"},ho={fontWeight:700,fontSize:16},z={fontSize:12,opacity:.7},st={background:"#052e7e",border:"1px solid #1e59c8",borderRadius:8,color:"#fff",padding:"8px 10px",width:"100%",boxSizing:"border-box"},ko={background:"#0d66fe",color:"#fff",border:"none",borderRadius:8,padding:"9px 14px",fontWeight:700,cursor:"pointer"},Re={background:"#1e59c8",color:"#fff",border:"none",borderRadius:8,padding:"7px 12px",fontWeight:600,cursor:"pointer"},lt={display:"flex",gap:8};});function Xt(t){let{client:e,walletConnectProjectId:n,appName:o,onClose:a,style:r}=t,[c,l]=react.useState(n??"");react.useEffect(()=>{if(n)return;let d=true;return (async()=>{let s=await e.blockchain.getDefinitions();if(!d||!s.ok)return;let u=s.data.Blockchain?.WalletLogin?.WalletConnectProjectId;u&&l(u);})(),()=>{d=false;}},[e,n]);let i=react.useMemo(()=>ve({walletConnectProjectId:c||void 0,appName:o}),[c,o]);return jsxRuntime.jsx(de,{wagmiConfig:i,children:jsxRuntime.jsx(Do,{client:e,onClose:a,style:r})})}function Do({client:t,onClose:e,style:n}){let o=xe(t,t.titleID),{address:a,isConnected:r,chainId:c}=wagmi.useAccount(),{connect:l,connectors:i}=wagmi.useConnect(),{disconnect:d}=wagmi.useDisconnect(),{switchChainAsync:s}=wagmi.useSwitchChain();async function u(m){if(!m||c===m)return true;try{return await s({chainId:m}),!0}catch{return false}}let p={networkType:"EVM",address:r&&a?a:null,connectChoices:i.map(m=>({key:m.uid,label:m.name,connect:()=>l({connector:m})})),disconnect:()=>d(),deposit:async({network:m,binding:g,amount:y})=>{if(!g.ContractAddress)return f("approve","This token cannot be deposited.");if(!await u(m.ChainID))return f("approve",`Switch your wallet to chain ${m.ChainID} to continue.`);let w;try{w=viem.parseUnits(y,g.Decimals??18);}catch{return f("approve","Invalid amount.")}return o.depositToken({network:m,tokenAddress:g.ContractAddress,amount:w})},withdraw:async({network:m,networkID:g,currencyID:y,amount:w})=>o.account?await u(m.ChainID)?o.withdrawToken({currencyID:y,networkID:g,walletAddress:o.account,amount:w}):f("request",`Switch your wallet to chain ${m.ChainID} to continue.`):f("request","Wallet not connected.")};return jsxRuntime.jsx(Be,{client:t,engine:p,onClose:e,style:n})}var en=k(()=>{je();Ie();Ne();L();ct();});var ut={};Wt(ut,{DEFAULT_EVM_CHAINS:()=>ze,IDosGamesWalletProvider:()=>de,WalletLogin:()=>Zt,WalletLoginButton:()=>at,WalletPanel:()=>Xt,arbitrum:()=>exports.arbitrum,base:()=>exports.base,bsc:()=>exports.bsc,chainById:()=>qe,createEvmWalletConfig:()=>ve,idosChains:()=>exports.idosChains,mainnet:()=>exports.mainnet,optimism:()=>exports.optimism,polygon:()=>exports.polygon,polygonAmoy:()=>exports.polygonAmoy,sepolia:()=>exports.sepolia,useEvmBridge:()=>xe,useEvmBridgeClients:()=>be});var pt=k(()=>{je();Q();Ie();Ne();Jt();en();});function _e(t){let{walletConnectProjectId:e,appName:n,appUrl:o,appIcon:a,wallets:r}=t,c=tn.get(e);if(c)return c;let l=t.networks??[exports.solanaMainnet],i=o??(typeof window<"u"?window.location.origin:""),d={name:n??"iDosGames",description:n??"iDosGames game",url:i,icons:a?[a]:[]},s=new appkitAdapterSolana.SolanaAdapter(r?{wallets:r}:{});return Te(react$1.createAppKit({adapters:[s],networks:l,projectId:e,metadata:d,features:{analytics:false,email:false,socials:false}})),tn.set(e,s),s}var tn,mt=k(()=>{Q();ce();tn=new Map;});async function Pe(t){let{client:e,adapter:n,network:o,mint:a,amountRaw:r,titleID:c,category:l}=t;if(S())return U("deposit-onchain");let i=e.auth.context?.userID;if(!i)return f("deposit-onchain","Not logged in.");if(r<=0n)return f("deposit-onchain","Amount must be positive.");let d;try{d=await n.depositSpl({mint:a,amountRaw:r,userID:i,titleID:c,category:core.normalizeBlockchainCategory(l)});}catch(u){return f("deposit-onchain",I(u))}let s=await e.blockchain.depositToken(o.NetworkID??"",d);return s.ok?{ok:true,onChainTxHash:d,data:s.data}:f("report",s.error,{onChainTxHash:d})}async function Se(t){let{client:e,adapter:n,currencyID:o,networkID:a,walletAddress:r,amount:c,category:l}=t;if(S())return U("request");let i=await e.blockchain.requestTokenWithdrawal(o,a,r,c,l);if(!i.ok)return f("request",i.error);let d=i.data.SolanaSignature,s=i.data.TitleTransactionID??void 0;if(!d)return f("request","Withdrawal response carried no Solana signature.",{titleTransactionID:s});let u;try{u=await n.submitWithdrawal(d);}catch(m){return f("withdraw-onchain",I(m),{titleTransactionID:s})}if(!s)return f("confirm","Missing TitleTransactionID.",{onChainTxHash:u});let p=await e.blockchain.confirmWithdrawal(s,u);return p.ok?{ok:true,onChainTxHash:u,data:i.data}:f("confirm",p.error,{onChainTxHash:u,titleTransactionID:s})}var nn=k(()=>{L();V();});async function We(t){let{client:e,networkID:n,walletAddress:o,signMessage:a}=t;if(S())return ee("challenge");let r=await e.auth.requestWalletChallenge(o,n);if(!r.ok)return b("challenge",r.error);let c;try{let i=await a(new TextEncoder().encode(r.data.Message));c=on(i);}catch(i){return b("sign",I(i))}let l=await e.auth.loginWithWallet(o,n,c);return l.ok?{ok:true,data:l.data}:b("login",l.error)}async function ft(t){let{client:e,networkID:n,walletAddress:o,signMessage:a}=t;if(S())return ee("challenge");let r=await e.auth.linkWallet(o,n);if(!r.ok)return b("challenge",r.error);if(!r.data.Challenge)return b("challenge","No challenge was issued.");let c;try{let i=await a(new TextEncoder().encode(r.data.Challenge));c=on(i);}catch(i){return b("sign",I(i))}let l=await e.auth.linkWallet(o,n,c);return l.ok?{ok:true,data:l.data}:b("login",l.error)}function on(t){let e="0x";for(let n of t)e+=n.toString(16).padStart(2,"0");return e}var rn=k(()=>{L();V();});var Oe=k(()=>{nn();rn();});function sn(t,e,n){let{address:o}=react$1.useAppKitAccount(),{walletProvider:a}=react$1.useAppKitProvider("solana"),r=o??null,c=a?.signMessage?.bind(a);return {connected:!!r,account:r,loginWithWallet:(l,i)=>{let d=i??r;return d?c?We({client:t,networkID:l,walletAddress:d,signMessage:c}):Promise.resolve(b("sign","The connected wallet does not support message signing.")):Promise.resolve(b("challenge",an))},depositToken:l=>Pe({client:t,adapter:n,titleID:e,...l}),withdrawToken:l=>{let i=l.walletAddress??r;return i?Se({client:t,adapter:n,...l,walletAddress:i}):Promise.resolve(f("request",an))}}}var an,ln=k(()=>{Oe();L();an="Wallet not connected.";});function Fo(t){try{let n=t?.session?.peer?.metadata?.redirect,o=n?.native||n?.universal;return !o||typeof window>"u"?!1:(window.location.href=o,!0)}catch{return false}}function dn(t,e){return new Promise((n,o)=>{let a=setTimeout(()=>o(new Error("The wallet request timed out.")),e);t.then(r=>{clearTimeout(a),n(r);},r=>{clearTimeout(a),o(r instanceof Error?r:new Error(String(r)));});})}function Ko(t){let e="Wallet sign-in failed. Please try again.";return t instanceof Error?/user (rejected|denied|cancelled|canceled)|rejected the request/i.test(t.message)?"Request declined in the wallet.":/timed? ?out/i.test(t.message)?"The wallet did not respond. Open your wallet and try again.":e:e}function pn(t){let{client:e,networkID:n,onAuthenticated:o,disabled:a,label:r,style:c,autoStart:l,mode:i="login",onLinked:d}=t,{address:s,isConnected:u}=react$1.useAppKitAccount(),{walletProvider:p}=react$1.useAppKitProvider("solana"),[m,g]=react.useState(false),[y,w]=react.useState(null),[W,A]=react.useState(false),[B,M]=react.useState(false),_=react.useRef(null),j=react.useRef(0),N=react.useCallback(()=>{_.current&&clearTimeout(_.current),_.current=null;},[]);react.useEffect(()=>N,[N]);let q=react.useRef(false),h=react.useCallback(async()=>{let F=++j.current,v=()=>j.current===F,X=p?.signMessage?.bind(p);if(!s||!X){w("The connected wallet cannot sign messages."),g(false);return}g(true),w(null);try{if(M(!0),i==="link"){let Ae=await dn(ft({client:e,networkID:n,walletAddress:s,signMessage:X}),cn);if(!v())return;if(Ae.ok){d?.(Ae.data.PlayAccess??null);return}w(Ae.stage==="sign"?"Signature declined.":ue(Ae.error,"Could not link the wallet."));return}let G=await dn(We({client:e,networkID:n,walletAddress:s,signMessage:X}),cn);if(!v())return;if(G.ok){o();return}w(G.stage==="sign"?"Signature declined.":ue(G.error,"Wallet sign-in failed."));}catch(G){if(!v())return;console.error("[idosgames/wallet] solana sign-in failed:",G),w(Ko(G));}finally{v()&&(g(false),M(false));}},[s,p,e,n,o,i,d]),C=react.useCallback(()=>{Fo(p)||H()?.open();},[p]);react.useEffect(()=>{!W||!u||!s||!p||(A(false),N(),h());},[W,u,s,p,h,N]);let T=()=>{if(B){C();return}if(w(null),q.current=true,u&&s&&p){h();return}let F=H();if(!F){w("Wallet sign-in is not configured for this title.");return}g(true),A(true),N(),_.current=setTimeout(()=>{A(false),g(false),w("No wallet was connected.");},Mo),F.open();};return react.useEffect(()=>{!l||q.current||(q.current=true,T());},[l]),jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:T,disabled:a,style:{...Go,...a?{opacity:.6,cursor:"default"}:null,...c},children:B?"Waiting for signature \u2014 tap to open wallet":m?"Check your wallet\u2026":u?r??(i==="link"?"Link wallet":"Sign in with wallet"):"Connect wallet"}),y&&jsxRuntime.jsx("span",{role:"alert",style:Uo,children:y})]})}var Mo,cn,Go,Uo,mn=k(()=>{ot();Oe();ce();Mo=18e4,cn=9e4;Go={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},Uo={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};});function Fe(t){let e=(t??"").replace(/^0x/i,""),n=new Uint8Array(e.length>>1);for(let o=0;o<n.length;o++)n[o]=parseInt(e.slice(o*2,o*2+2),16);return n}function pe(t){let e=buffer.Buffer.alloc(8);return e.writeBigUInt64LE(BigInt(t||0)),e}function tr(t){let e=buffer.Buffer.alloc(8);return e.writeBigInt64LE(BigInt(t||0)),e}function fe(t){let e=buffer.Buffer.from(t??"","utf8"),n=buffer.Buffer.alloc(4);return n.writeUInt32LE(e.length),buffer.Buffer.concat([n,e])}function nr(t){return buffer.Buffer.concat([buffer.Buffer.from(Yo,"hex"),pe(t.amountRaw),fe(t.userID),fe(t.titleID),fe(t.category)])}function or(t){let e=t.Splits??[],n=buffer.Buffer.alloc(4);return n.writeUInt32LE(e.length),buffer.Buffer.concat([buffer.Buffer.from(t.Domain==="SPL_DEV"?Zo:Qo,"hex"),pe(t.Amount),pe(t.BurnAmount),pe(t.Nonce),tr(t.ExpiresAt),n,...e.map(o=>buffer.Buffer.concat([buffer.Buffer.from(new web3_js.PublicKey(o.To??"").toBytes()),pe(o.Amount)])),fe(t.UserID),fe(t.TitleID),fe(t.Category)])}function me(t,e,n){return web3_js.PublicKey.findProgramAddressSync([e.toBuffer(),n.toBuffer(),t.toBuffer()],Ke)[0]}function rr(t,e,n,o,a){return new web3_js.TransactionInstruction({programId:Ke,keys:[{pubkey:t,isSigner:true,isWritable:true},{pubkey:e,isSigner:false,isWritable:true},{pubkey:n,isSigner:false,isWritable:false},{pubkey:o,isSigner:false,isWritable:false},{pubkey:web3_js.SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:a,isSigner:false,isWritable:false}],data:buffer.Buffer.from([1])})}function ge(t,...e){return web3_js.PublicKey.findProgramAddressSync(e,t)[0]}function ar(t){let{programId:e,user:n,mint:o,tokenProgram:a}=t,r=ge(e,buffer.Buffer.from("vault"));return new web3_js.TransactionInstruction({programId:e,keys:[{pubkey:ge(e,buffer.Buffer.from("config")),isSigner:false,isWritable:false},{pubkey:r,isSigner:false,isWritable:true},{pubkey:o,isSigner:false,isWritable:false},{pubkey:n,isSigner:true,isWritable:true},{pubkey:me(o,n,a),isSigner:false,isWritable:true},{pubkey:me(o,r,a),isSigner:false,isWritable:true},{pubkey:a,isSigner:false,isWritable:false},{pubkey:Ke,isSigner:false,isWritable:false},{pubkey:web3_js.SystemProgram.programId,isSigner:false,isWritable:false}],data:nr(t)})}function ir(t){let{sig:e,payer:n,tokenProgram:o}=t,a=new web3_js.PublicKey(e.ProgramID??""),r=new web3_js.PublicKey(e.Mint??""),c=new web3_js.PublicKey(e.WalletAddress??""),l=ge(a,buffer.Buffer.from("vault")),i=new web3_js.PublicKey(Jo),d=(e.Splits??[]).map(g=>new web3_js.PublicKey(g.To??"")),s=d.map(g=>me(r,g,o)),u=web3_js.Ed25519Program.createInstructionWithPublicKey({publicKey:Fe(e.Ed25519PublicKey),message:Fe(e.Ed25519Message),signature:Fe(e.SignatureHex)}),p=d.map((g,y)=>rr(n,s[y],g,r,o)),m=new web3_js.TransactionInstruction({programId:a,keys:[{pubkey:ge(a,buffer.Buffer.from("config")),isSigner:false,isWritable:false},{pubkey:n,isSigner:true,isWritable:true},{pubkey:l,isSigner:false,isWritable:true},{pubkey:ge(a,buffer.Buffer.from("nonce"),pe(e.Nonce)),isSigner:false,isWritable:true},{pubkey:r,isSigner:false,isWritable:false},{pubkey:c,isSigner:false,isWritable:false},{pubkey:me(r,l,o),isSigner:false,isWritable:true},{pubkey:me(r,c,o),isSigner:false,isWritable:true},{pubkey:i,isSigner:false,isWritable:false},{pubkey:me(r,i,o),isSigner:false,isWritable:true},{pubkey:web3_js.SYSVAR_INSTRUCTIONS_PUBKEY,isSigner:false,isWritable:false},{pubkey:o,isSigner:false,isWritable:false},{pubkey:Ke,isSigner:false,isWritable:false},{pubkey:web3_js.SystemProgram.programId,isSigner:false,isWritable:false},...s.map(g=>({pubkey:g,isSigner:false,isWritable:true}))],data:or(e)});return [u,...p,m]}function Ge(t){let{connection:e,signTransaction:n}=t;async function o(r){let c=await e.getAccountInfo(r);if(!c)throw new O("MINT_NOT_FOUND",`mint ${r.toBase58()} not found`);return c.owner}async function a(r,c){let{blockhash:l,lastValidBlockHeight:i}=await e.getLatestBlockhash("confirmed"),d=new web3_js.Transaction;d.feePayer=r,d.recentBlockhash=l,d.add(...c);let s=await n(d),u=await e.sendRawTransaction(s.serialize());return await e.confirmTransaction({signature:u,blockhash:l,lastValidBlockHeight:i},"confirmed"),u}return {async depositSpl({mint:r,amountRaw:c,userID:l,titleID:i,category:d}){let s=new web3_js.PublicKey(t.owner),u=new web3_js.PublicKey(r),p=await o(u);return a(s,[ar({programId:new web3_js.PublicKey(t.programId),user:s,mint:u,tokenProgram:p,amountRaw:c,userID:l,titleID:i,category:d})])},async submitWithdrawal(r){if(!r.ProgramID||!r.Mint||!r.WalletAddress)throw new O("BAD_VOUCHER","the voucher has no program, mint or wallet");let c=new web3_js.PublicKey(t.owner),l=new web3_js.PublicKey(r.ProgramID),i=await e.getAccountInfo(ge(l,buffer.Buffer.from("config")));if(!i)throw new O("POOL_NOT_ON_THIS_CLUSTER","the pool's config account is not on this cluster");if(i.data.length!==fn)throw new O("POOL_NOT_MIGRATED",`config is ${i.data.length} bytes, expected ${fn} (migrate_config not run)`);let d=buffer.Buffer.from(i.data);if(d[er]===1)throw new O("POOL_PAUSED","pool withdrawals are paused");let s=d.readBigUInt64LE(wn);if(s!==BigInt(r.SignatureEpoch||0))throw new O("VOUCHER_REVOKED",`signature epoch mismatch: voucher ${r.SignatureEpoch}, on-chain ${s}`);let u=buffer.Buffer.from(Fe(r.Ed25519PublicKey)),p=false;for(let g=0;g<yn;g++){let y=gn+g*32;u.equals(d.subarray(y,y+32))&&(p=true);}if(!p)throw new O("SIGNER_NOT_TRUSTED","the voucher's signer is not in the pool's server_pubkeys");let m=await o(new web3_js.PublicKey(r.Mint));return a(c,[web3_js.ComputeBudgetProgram.setComputeUnitLimit({units:Xo}),...ir({sig:r,payer:c,tokenProgram:m})])}}}var Yo,Qo,Zo,Ke,Jo,fn,Xo,gn,yn,wn,er,O,bt=k(()=>{Yo="e000c6afc62f69cc",Qo="b59a5e563e7306ba",Zo="d668e18c1bdc33f1",Ke=new web3_js.PublicKey("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"),Jo="1nc1nerator11111111111111111111111111111111",fn=177,Xo=3e5,gn=40,yn=4,wn=gn+32*yn,er=wn+8,O=class extends Error{constructor(n,o){super(o);this.code=n;this.name="PlatformPoolError";}code};});function gr(t){return (t.ChainID===fr?exports.solanaDevnet:exports.solanaMainnet).rpcUrls.default.http[0]}function hn(t){let{client:e,walletConnectProjectId:n,appName:o,onClose:a,style:r}=t,[c,l]=react.useState(n??"");react.useEffect(()=>{if(n)return;let y=true;return (async()=>{let w=await e.blockchain.getDefinitions();if(!y||!w.ok)return;let W=w.data.Blockchain?.WalletLogin?.WalletConnectProjectId;W&&l(W);})(),()=>{y=false;}},[e,n]);let i=react.useMemo(()=>c?(_e({walletConnectProjectId:c,appName:o}),true):false,[c,o]),{address:d,isConnected:s}=react$1.useAppKitAccount(),{walletProvider:u}=react$1.useAppKitProvider("solana"),p=s&&d?d:null,m=(y,w)=>Ge({connection:new web3_js.Connection(gr(y),"confirmed"),owner:w,programId:y.RewardPoolAddress??"",signTransaction:async W=>{if(!u)throw new Error("Wallet not connected.");return u.signTransaction(W)}});return jsxRuntime.jsx(Be,{client:e,engine:{networkType:"Solana",address:p,connectChoices:i?[{key:"appkit",label:"Connect wallet",connect:()=>{H()?.open();}}]:[],disconnect:()=>{H()?.disconnect("solana");},deposit:async({network:y,binding:w,amount:W})=>{if(!p)return f("deposit-onchain","Wallet not connected.");if(!w.ContractAddress)return f("deposit-onchain","This token cannot be deposited.");if(!y.RewardPoolAddress)return f("deposit-onchain","POOL_NOT_IN_REGISTRY");let A;try{A=viem.parseUnits(W,w.Decimals??9);}catch{return f("deposit-onchain","Invalid amount.")}return Pe({client:e,adapter:m(y,p),network:y,mint:w.ContractAddress,amountRaw:A,titleID:e.titleID})},withdraw:async({network:y,networkID:w,currencyID:W,amount:A})=>p?Se({client:e,adapter:m(y,p),currencyID:W,networkID:w,walletAddress:p,amount:A}):f("request","Wallet not connected.")},onClose:a,style:r})}var fr,kn=k(()=>{Q();Oe();bt();L();ce();mt();ct();fr=103;});var Ct={};Wt(Ct,{PlatformPoolError:()=>O,SolanaWalletLogin:()=>pn,SolanaWalletPanel:()=>hn,createPlatformPoolAdapter:()=>Ge,createSolanaWalletConfig:()=>_e,solanaDevnet:()=>exports.solanaDevnet,solanaMainnet:()=>exports.solanaMainnet,useSolanaBridge:()=>sn});var Pt=k(()=>{mt();ln();mn();kn();bt();Q();});V();L();var $={addressRequest:"IDOS_PLATFORM_WALLET_ADDRESS_REQUEST",addressResponse:"IDOS_PLATFORM_WALLET_ADDRESS_RESPONSE",signRequest:"IDOS_PLATFORM_WALLET_SIGN_REQUEST",signResponse:"IDOS_PLATFORM_WALLET_SIGN_RESPONSE",ack:"IDOS_PLATFORM_WALLET_ACK",openRequest:"IDOS_PLATFORM_WALLET_OPEN_REQUEST",openResponse:"IDOS_PLATFORM_WALLET_OPEN_RESPONSE"},ye="PLATFORM_WALLET_UNAVAILABLE",Nn=5e3,Ln=18e4;function Rn(){let t=[...core.PLATFORM_ORIGINS],e=window.location.ancestorOrigins?.[0];return e&&!t.includes(e)&&core.isPlatformParentOrigin(e)&&t.push(e),t}function Bn(){return `wallet-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function He(t,e,n){if(typeof window>"u"||window.self===window.top)return Promise.resolve({ok:false,error:ye});let o=window.parent;if(!o)return Promise.resolve({ok:false,error:ye});let a=Bn();return new Promise(r=>{let c=false,l,i=s=>{c||(c=true,window.removeEventListener("message",d),clearTimeout(l),r(s));},d=s=>{if(!core.isPlatformParentOrigin(s.origin))return;let u=s.data;if(!(!u||u.requestId!==a)){if(u.type===$.ack){clearTimeout(l),l=setTimeout(()=>i({ok:false,error:"TIMEOUT"}),Ln);return}u.type===e&&i({ok:u.ok===true,error:typeof u.error=="string"?u.error:void 0,address:typeof u.address=="string"?u.address:void 0,signature:typeof u.signature=="string"?u.signature:void 0});}};l=setTimeout(()=>i({ok:false,error:ye}),Nn),window.addEventListener("message",d);for(let s of Rn())try{o.postMessage({type:t,requestId:a,...n},s);}catch{}})}async function _n(){return (await He($.openRequest,$.openResponse,{})).ok}async function Tt(t){let{client:e,networkID:n}=t;return It(t,async o=>{let a=await e.auth.requestWalletChallenge(o,n);return a.ok?{ok:true,message:a.data.Message}:{ok:false,error:a.error}},(o,a)=>e.auth.loginWithWallet(o,n,a))}async function vt(t){let{client:e,networkID:n}=t;return It(t,async o=>{let a=await e.auth.linkWallet(o,n);return a.ok?a.data.Challenge?{ok:true,message:a.data.Challenge}:{ok:false,error:"No challenge was issued."}:{ok:false,error:a.error}},(o,a)=>e.auth.linkWallet(o,n,a))}async function It(t,e,n){let{client:o,family:a}=t,r=o.titleID,c=await He($.addressRequest,$.addressResponse,{titleID:r,family:a});if(!c.ok||!c.address)return b("challenge",c.error??"NO_WALLET");let l=c.address,i=await e(l);if(!i.ok)return b("challenge",i.error);let d=await He($.signRequest,$.signResponse,{titleID:r,family:a,address:l,message:i.message});if(!d.ok||!d.signature)return b("sign",d.error??"SIGN_FAILED");let s=await n(l,d.signature);return s.ok?{ok:true,data:s.data}:b("login",s.error)}var Cn={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},Pn={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};function bn(t){switch(t){case ye:return "Wallet sign-in is not available on this page.";case "NO_WALLET":case "CANCELLED":return "Connect a wallet on the page to sign in.";case "REJECTED":return "The signature was declined.";case "TIMEOUT":return "The wallet did not answer. Please try again.";default:return t}}function hr(t){let{client:e,networkID:n,onAuthenticated:o,onLinked:a,mode:r="login",family:c,disabled:l,label:i,style:d}=t,[s,u]=react.useState(false),[p,m]=react.useState(null);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:()=>{u(true),m(null),(async()=>{if(r==="link"){let w=await vt({client:e,networkID:n,family:c});if(w.ok){u(false),a?.(w.data.PlayAccess??null);return}m(bn(w.error)),u(false);return}let y=await Tt({client:e,networkID:n,family:c});if(y.ok){o?.();return}m(bn(y.error)),u(false);})();},disabled:l||s,style:{...Cn,...l||s?{opacity:.6,cursor:"default"}:null,...d},children:s?"Waiting for the wallet\u2026":i??(r==="link"?"Link wallet":"Sign in with wallet")}),p&&jsxRuntime.jsx("span",{role:"alert",style:Pn,children:p})]})}function Sn(t,e){return Ue()?null:jsxRuntime.jsx(hr,{...t,family:e})}function Wn(t){let{loading:e,disabled:n,label:o,style:a,error:r,onClick:c}=t;return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:c,disabled:n||e,style:{...Cn,...n||e?{opacity:.6,cursor:"default"}:null,...a},children:e?"Loading wallet\u2026":o??"Sign in with wallet"}),r&&jsxRuntime.jsx("span",{role:"alert",style:Pn,children:r})]})}function kr(t){let{chains:e,walletConnectProjectId:n,appName:o,disabled:a,label:r,style:c,onAuthenticated:l,...i}=t,[d,s]=react.useState(null),[u,p]=react.useState(false),[m,g]=react.useState(null);if(S())return Sn(t,"evm");let y=()=>{p(true),g(null),(async()=>{try{let w=await Promise.resolve().then(()=>(pt(),ut)),W=w.createEvmWalletConfig({chains:e,walletConnectProjectId:n,appName:o});s({mod:w,config:W});}catch(w){console.error("[idosgames/wallet] failed to load the wallet module:",w),g("Could not load the wallet. Please try again.");}finally{p(false);}})();};if(d){let{WalletLogin:w}=d.mod;return jsxRuntime.jsx(w,{...i,onAuthenticated:l??An,wagmiConfig:d.config,disabled:a,label:r,style:c,autoStart:true})}return jsxRuntime.jsx(Wn,{loading:u,disabled:a,label:r??(t.mode==="link"?"Link wallet":void 0),style:c,error:m,onClick:y})}function An(){}function br(t){let{walletConnectProjectId:e,appName:n,disabled:o,label:a,style:r,onAuthenticated:c,...l}=t,[i,d]=react.useState(null),[s,u]=react.useState(false),[p,m]=react.useState(null);if(S())return Sn(t,"solana");let g=()=>{u(true),m(null),(async()=>{try{let y=await Promise.resolve().then(()=>(Pt(),Ct));e&&y.createSolanaWalletConfig({walletConnectProjectId:e,appName:n}),d(y);}catch(y){console.error("[idosgames/wallet] failed to load the wallet module:",y),m("Could not load the wallet. Please try again.");}finally{u(false);}})();};if(i){let{SolanaWalletLogin:y}=i;return jsxRuntime.jsx(y,{...l,onAuthenticated:c??An,disabled:o,label:a,style:r,autoStart:true})}return jsxRuntime.jsx(Wn,{loading:s,disabled:o,label:a??(t.mode==="link"?"Link wallet":void 0),style:r,error:p,onClick:g})}var Cr={pointerEvents:"auto",background:"#04276bf5",border:"1px solid #1e59c8",borderRadius:12,padding:16,color:"#fff",width:320,boxSizing:"border-box",fontFamily:"system-ui, sans-serif",fontSize:13};function Pr(t){let{client:e,onClose:n,style:o}=t,a=S(),[r,c]=react.useState(null),[l,i]=react.useState(null);return react.useEffect(()=>{if(a)return;let d=true;return (async()=>{try{let s=await e.blockchain.getDefinitions(),u=Object.values((s.ok?s.data.Blockchain?.Networks:null)??{}).map(g=>g.Type),m=u.includes("Solana")&&!u.includes("EVM")?{kind:"solana",mod:await Promise.resolve().then(()=>(Pt(),Ct))}:{kind:"evm",mod:await Promise.resolve().then(()=>(pt(),ut))};d&&c(m);}catch(s){console.error("[idosgames/wallet] failed to load the wallet panel:",s),d&&i("Could not load the wallet.");}})(),()=>{d=false;}},[a,e]),a?null:r?.kind==="evm"?jsxRuntime.jsx(r.mod.WalletPanel,{...t}):r?.kind==="solana"?jsxRuntime.jsx(r.mod.SolanaWalletPanel,{...t}):jsxRuntime.jsxs("div",{style:{...Cr,...o},children:[l??"Loading wallet\u2026",n&&jsxRuntime.jsx("button",{type:"button",onClick:n,style:{background:"#1e59c8",color:"#fff",border:"none",borderRadius:8,padding:"7px 12px",fontWeight:600,cursor:"pointer",marginLeft:10},children:"\u2715"})]})}V();Q();
|
|
2
|
+
exports.LazySolanaWalletLogin=br;exports.LazyWalletLogin=kr;exports.LazyWalletPanel=Pr;exports.chainById=qe;exports.isEmbeddedInPlatform=S;exports.isEmbeddedOnForeignSite=Ue;exports.openPlatformWalletPanel=_n;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var appkitAdapterSolana=require('@reown/appkit-adapter-solana'),react=require('@reown/appkit/react'),core=require('@idosgames/core'),viem=require('viem'),react$1=require('react'),jsxRuntime=require('react/jsx-runtime'),web3_js=require('@solana/web3.js'),buffer=require('buffer');var j={id:"5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",name:"Solana",network:"solana-mainnet",nativeCurrency:{name:"Solana",symbol:"SOL",decimals:9},rpcUrls:{default:{http:["https://api.mainnet-beta.solana.com"]}},blockExplorers:{default:{name:"Solscan",url:"https://solscan.io"}},testnet:false,chainNamespace:"solana",caipNetworkId:"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp"},re={id:"EtWTRABZaYq6iMfeYKouRu166VU2xqa1",name:"Solana Devnet",network:"solana-devnet",nativeCurrency:{name:"Solana",symbol:"SOL",decimals:9},rpcUrls:{default:{http:["https://api.devnet.solana.com"]}},blockExplorers:{default:{name:"Solscan",url:"https://solscan.io"}},testnet:true,chainNamespace:"solana",caipNetworkId:"solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1"};var he=null;function Se(e){he=e;}function U(){return he}var ke=new Map;function oe(e){let{walletConnectProjectId:t,appName:r,appUrl:o,appIcon:l,wallets:n}=e,p=ke.get(t);if(p)return p;let s=e.networks??[j],a=o??(typeof window<"u"?window.location.origin:""),i={name:r??"iDosGames",description:r??"iDosGames game",url:a,icons:l?[l]:[]},c=new appkitAdapterSolana.SolanaAdapter(n?{wallets:n}:{});return Se(react.createAppKit({adapters:[c],networks:s,projectId:t,metadata:i,features:{analytics:false,email:false,socials:false}})),ke.set(t,c),c}function F(e){return e instanceof viem.BaseError?e.shortMessage:e instanceof Error?e.message:String(e)}function h(e,t,r){return {ok:false,stage:e,error:t,...r}}function C(e,t){return {ok:false,stage:e,error:t}}var be="WALLET_USE_SITE_PANEL",_e=/^[a-z0-9]{8}-preview\.idos\.games$/;function Oe(e=typeof window>"u"?"":window.location.hostname){let t=e.toLowerCase();return _e.test(t)?true:t!=="localhost"&&t!=="127.0.0.1"?false:globalThis.__IDOS_PREVIEW__!=null}function M(){if(typeof window>"u"||Oe())return false;try{return window.self!==window.top}catch{return true}}function ae(e){return h(e,be)}function ie(e){return C(e,be)}async function Y(e){let{client:t,adapter:r,network:o,mint:l,amountRaw:n,titleID:p,category:s}=e;if(M())return ae("deposit-onchain");let a=t.auth.context?.userID;if(!a)return h("deposit-onchain","Not logged in.");if(n<=0n)return h("deposit-onchain","Amount must be positive.");let i;try{i=await r.depositSpl({mint:l,amountRaw:n,userID:a,titleID:p,category:core.normalizeBlockchainCategory(s)});}catch(u){return h("deposit-onchain",F(u))}let c=await t.blockchain.depositToken(o.NetworkID??"",i);return c.ok?{ok:true,onChainTxHash:i,data:c.data}:h("report",c.error,{onChainTxHash:i})}async function z(e){let{client:t,adapter:r,currencyID:o,networkID:l,walletAddress:n,amount:p,category:s}=e;if(M())return ae("request");let a=await t.blockchain.requestTokenWithdrawal(o,l,n,p,s);if(!a.ok)return h("request",a.error);let i=a.data.SolanaSignature,c=a.data.TitleTransactionID??void 0;if(!i)return h("request","Withdrawal response carried no Solana signature.",{titleTransactionID:c});let u;try{u=await r.submitWithdrawal(i);}catch(T){return h("withdraw-onchain",F(T),{titleTransactionID:c})}if(!c)return h("confirm","Missing TitleTransactionID.",{onChainTxHash:u});let f=await t.blockchain.confirmWithdrawal(c,u);return f.ok?{ok:true,onChainTxHash:u,data:a.data}:h("confirm",f.error,{onChainTxHash:u,titleTransactionID:c})}async function $(e){let{client:t,networkID:r,walletAddress:o,signMessage:l}=e;if(M())return ie("challenge");let n=await t.auth.requestWalletChallenge(o,r);if(!n.ok)return C("challenge",n.error);let p;try{let a=await l(new TextEncoder().encode(n.data.Message));p=Pe(a);}catch(a){return C("sign",F(a))}let s=await t.auth.loginWithWallet(o,r,p);return s.ok?{ok:true,data:s.data}:C("login",s.error)}async function se(e){let{client:t,networkID:r,walletAddress:o,signMessage:l}=e;if(M())return ie("challenge");let n=await t.auth.linkWallet(o,r);if(!n.ok)return C("challenge",n.error);if(!n.data.Challenge)return C("challenge","No challenge was issued.");let p;try{let a=await l(new TextEncoder().encode(n.data.Challenge));p=Pe(a);}catch(a){return C("sign",F(a))}let s=await t.auth.linkWallet(o,r,p);return s.ok?{ok:true,data:s.data}:C("login",s.error)}function Pe(e){let t="0x";for(let r of e)t+=r.toString(16).padStart(2,"0");return t}var Te="Wallet not connected.";function Fe(e,t,r){let{address:o}=react.useAppKitAccount(),{walletProvider:l}=react.useAppKitProvider("solana"),n=o??null,p=l?.signMessage?.bind(l);return {connected:!!n,account:n,loginWithWallet:(s,a)=>{let i=a??n;return i?p?$({client:e,networkID:s,walletAddress:i,signMessage:p}):Promise.resolve(C("sign","The connected wallet does not support message signing.")):Promise.resolve(C("challenge",Te))},depositToken:s=>Y({client:e,adapter:r,titleID:t,...s}),withdrawToken:s=>{let a=s.walletAddress??n;return a?z({client:e,adapter:r,...s,walletAddress:a}):Promise.resolve(h("request",Te))}}}function le(e,t){switch(e){case null:case void 0:case "":return t;case "PLAY_ACCESS_WALLET_USED_BY_ANOTHER_ACCOUNT":return "This wallet already plays with another account.";case "WALLET_UNLINK_COOLDOWN":return "This wallet was unlinked from another account less than 7 days ago. Try again after the 7 days.";case "WALLET_CHANGES_TOO_FREQUENT":return "Too many wallets were changed this week. Try again in a few days.";case "PLAY_ACCESS_WALLET_LOGIN_ONLY":return "This game is played with a wallet login only.";case "INVALID_WALLET_SIGNATURE":return "The signature does not match the wallet. Please try again.";case "WALLET_CHALLENGE_EXPIRED":return "The request expired. Please try again.";default:return e}}var He=18e4,Ie=9e4;function qe(e){try{let r=e?.session?.peer?.metadata?.redirect,o=r?.native||r?.universal;return !o||typeof window>"u"?!1:(window.location.href=o,!0)}catch{return false}}function Ce(e,t){return new Promise((r,o)=>{let l=setTimeout(()=>o(new Error("The wallet request timed out.")),t);e.then(n=>{clearTimeout(l),r(n);},n=>{clearTimeout(l),o(n instanceof Error?n:new Error(String(n)));});})}function Ve(e){let t="Wallet sign-in failed. Please try again.";return e instanceof Error?/user (rejected|denied|cancelled|canceled)|rejected the request/i.test(e.message)?"Request declined in the wallet.":/timed? ?out/i.test(e.message)?"The wallet did not respond. Open your wallet and try again.":t:t}function je(e){let{client:t,networkID:r,onAuthenticated:o,disabled:l,label:n,style:p,autoStart:s,mode:a="login",onLinked:i}=e,{address:c,isConnected:u}=react.useAppKitAccount(),{walletProvider:f}=react.useAppKitProvider("solana"),[T,w]=react$1.useState(false),[g,m]=react$1.useState(null),[I,A]=react$1.useState(false),[x,R]=react$1.useState(false),D=react$1.useRef(null),Z=react$1.useRef(0),E=react$1.useCallback(()=>{D.current&&clearTimeout(D.current),D.current=null;},[]);react$1.useEffect(()=>E,[E]);let O=react$1.useRef(false),d=react$1.useCallback(async()=>{let B=++Z.current,L=()=>Z.current===B,ne=f?.signMessage?.bind(f);if(!c||!ne){m("The connected wallet cannot sign messages."),w(false);return}w(true),m(null);try{if(R(!0),a==="link"){let J=await Ce(se({client:t,networkID:r,walletAddress:c,signMessage:ne}),Ie);if(!L())return;if(J.ok){i?.(J.data.PlayAccess??null);return}m(J.stage==="sign"?"Signature declined.":le(J.error,"Could not link the wallet."));return}let K=await Ce($({client:t,networkID:r,walletAddress:c,signMessage:ne}),Ie);if(!L())return;if(K.ok){o();return}m(K.stage==="sign"?"Signature declined.":le(K.error,"Wallet sign-in failed."));}catch(K){if(!L())return;console.error("[idosgames/wallet] solana sign-in failed:",K),m(Ve(K));}finally{L()&&(w(false),R(false));}},[c,f,t,r,o,a,i]),S=react$1.useCallback(()=>{qe(f)||U()?.open();},[f]);react$1.useEffect(()=>{!I||!u||!c||!f||(A(false),E(),d());},[I,u,c,f,d,E]);let v=()=>{if(x){S();return}if(m(null),O.current=true,u&&c&&f){d();return}let B=U();if(!B){m("Wallet sign-in is not configured for this title.");return}w(true),A(true),E(),D.current=setTimeout(()=>{A(false),w(false),m("No wallet was connected.");},He),B.open();};return react$1.useEffect(()=>{!s||O.current||(O.current=true,v());},[s]),jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:v,disabled:l,style:{...Ye,...l?{opacity:.6,cursor:"default"}:null,...p},children:x?"Waiting for signature \u2014 tap to open wallet":T?"Check your wallet\u2026":u?n??(a==="link"?"Link wallet":"Sign in with wallet"):"Connect wallet"}),g&&jsxRuntime.jsx("span",{role:"alert",style:ze,children:g})]})}var Ye={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},ze={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};var et="e000c6afc62f69cc",tt="b59a5e563e7306ba",nt="d668e18c1bdc33f1",ee=new web3_js.PublicKey("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"),rt="1nc1nerator11111111111111111111111111111111",We=177,Ee=40,xe=4,De=Ee+32*xe,ot=De+8,W=class extends Error{constructor(r,o){super(o);this.code=r;this.name="PlatformPoolError";}code};function X(e){let t=(e??"").replace(/^0x/i,""),r=new Uint8Array(t.length>>1);for(let o=0;o<r.length;o++)r[o]=parseInt(t.slice(o*2,o*2+2),16);return r}function G(e){let t=buffer.Buffer.alloc(8);return t.writeBigUInt64LE(BigInt(e||0)),t}function at(e){let t=buffer.Buffer.alloc(8);return t.writeBigInt64LE(BigInt(e||0)),t}function q(e){let t=buffer.Buffer.from(e??"","utf8"),r=buffer.Buffer.alloc(4);return r.writeUInt32LE(t.length),buffer.Buffer.concat([r,t])}function it(e){return buffer.Buffer.concat([buffer.Buffer.from(et,"hex"),G(e.amountRaw),q(e.userID),q(e.titleID),q(e.category)])}function st(e){let t=e.Splits??[],r=buffer.Buffer.alloc(4);return r.writeUInt32LE(t.length),buffer.Buffer.concat([buffer.Buffer.from(e.Domain==="SPL_DEV"?nt:tt,"hex"),G(e.Amount),G(e.BurnAmount),G(e.Nonce),at(e.ExpiresAt),r,...t.map(o=>buffer.Buffer.concat([buffer.Buffer.from(new web3_js.PublicKey(o.To??"").toBytes()),G(o.Amount)])),q(e.UserID),q(e.TitleID),q(e.Category),buffer.Buffer.from([e.SigIxIndex??0])])}function H(e,t,r){return web3_js.PublicKey.findProgramAddressSync([t.toBuffer(),r.toBuffer(),e.toBuffer()],ee)[0]}function lt(e,t,r,o,l){return new web3_js.TransactionInstruction({programId:ee,keys:[{pubkey:e,isSigner:true,isWritable:true},{pubkey:t,isSigner:false,isWritable:true},{pubkey:r,isSigner:false,isWritable:false},{pubkey:o,isSigner:false,isWritable:false},{pubkey:web3_js.SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:l,isSigner:false,isWritable:false}],data:buffer.Buffer.from([1])})}function V(e,...t){return web3_js.PublicKey.findProgramAddressSync(t,e)[0]}function ct(e){let{programId:t,user:r,mint:o,tokenProgram:l}=e,n=V(t,buffer.Buffer.from("vault"));return new web3_js.TransactionInstruction({programId:t,keys:[{pubkey:V(t,buffer.Buffer.from("config")),isSigner:false,isWritable:false},{pubkey:n,isSigner:false,isWritable:true},{pubkey:o,isSigner:false,isWritable:false},{pubkey:r,isSigner:true,isWritable:true},{pubkey:H(o,r,l),isSigner:false,isWritable:true},{pubkey:H(o,n,l),isSigner:false,isWritable:true},{pubkey:l,isSigner:false,isWritable:false},{pubkey:ee,isSigner:false,isWritable:false},{pubkey:web3_js.SystemProgram.programId,isSigner:false,isWritable:false}],data:it(e)})}function pt(e){let{sig:t,payer:r,tokenProgram:o}=e,l=new web3_js.PublicKey(t.ProgramID??""),n=new web3_js.PublicKey(t.Mint??""),p=new web3_js.PublicKey(t.WalletAddress??""),s=V(l,buffer.Buffer.from("vault")),a=new web3_js.PublicKey(rt),i=(t.Splits??[]).map(w=>new web3_js.PublicKey(w.To??"")),c=i.map(w=>H(n,w,o)),u=web3_js.Ed25519Program.createInstructionWithPublicKey({publicKey:X(t.Ed25519PublicKey),message:X(t.Ed25519Message),signature:X(t.SignatureHex)}),f=i.map((w,g)=>lt(r,c[g],w,n,o)),T=new web3_js.TransactionInstruction({programId:l,keys:[{pubkey:V(l,buffer.Buffer.from("config")),isSigner:false,isWritable:false},{pubkey:r,isSigner:true,isWritable:true},{pubkey:s,isSigner:false,isWritable:true},{pubkey:V(l,buffer.Buffer.from("nonce"),G(t.Nonce)),isSigner:false,isWritable:true},{pubkey:n,isSigner:false,isWritable:false},{pubkey:p,isSigner:false,isWritable:false},{pubkey:H(n,s,o),isSigner:false,isWritable:true},{pubkey:H(n,p,o),isSigner:false,isWritable:true},{pubkey:a,isSigner:false,isWritable:false},{pubkey:H(n,a,o),isSigner:false,isWritable:true},{pubkey:web3_js.SYSVAR_INSTRUCTIONS_PUBKEY,isSigner:false,isWritable:false},{pubkey:o,isSigner:false,isWritable:false},{pubkey:ee,isSigner:false,isWritable:false},{pubkey:web3_js.SystemProgram.programId,isSigner:false,isWritable:false},...c.map(w=>({pubkey:w,isSigner:false,isWritable:true}))],data:st(t)});return [u,...f,T]}function ge(e){let{connection:t,signTransaction:r}=e;async function o(n){let p=await t.getAccountInfo(n);if(!p)throw new W("MINT_NOT_FOUND",`mint ${n.toBase58()} not found`);return p.owner}async function l(n,p){let{blockhash:s,lastValidBlockHeight:a}=await t.getLatestBlockhash("confirmed"),i=new web3_js.Transaction;i.feePayer=n,i.recentBlockhash=s,i.add(...p);let c=await r(i),u=await t.sendRawTransaction(c.serialize());return await t.confirmTransaction({signature:u,blockhash:s,lastValidBlockHeight:a},"confirmed"),u}return {async depositSpl({mint:n,amountRaw:p,userID:s,titleID:a,category:i}){let c=new web3_js.PublicKey(e.owner),u=new web3_js.PublicKey(n),f=await o(u);return l(c,[ct({programId:new web3_js.PublicKey(e.programId),user:c,mint:u,tokenProgram:f,amountRaw:p,userID:s,titleID:a,category:i})])},async submitWithdrawal(n){if(!n.ProgramID||!n.Mint||!n.WalletAddress)throw new W("BAD_VOUCHER","the voucher has no program, mint or wallet");let p=new web3_js.PublicKey(e.owner),s=new web3_js.PublicKey(n.ProgramID),a=await t.getAccountInfo(V(s,buffer.Buffer.from("config")));if(!a)throw new W("POOL_NOT_ON_THIS_CLUSTER","the pool's config account is not on this cluster");if(a.data.length!==We)throw new W("POOL_NOT_MIGRATED",`config is ${a.data.length} bytes, expected ${We} (migrate_config not run)`);let i=buffer.Buffer.from(a.data);if(i[ot]===1)throw new W("POOL_PAUSED","pool withdrawals are paused");let c=i.readBigUInt64LE(De);if(c!==BigInt(n.SignatureEpoch||0))throw new W("VOUCHER_REVOKED",`signature epoch mismatch: voucher ${n.SignatureEpoch}, on-chain ${c}`);let u=buffer.Buffer.from(X(n.Ed25519PublicKey)),f=false;for(let w=0;w<xe;w++){let g=Ee+w*32;u.equals(i.subarray(g,g+32))&&(f=true);}if(!f)throw new W("SIGNER_NOT_TRUSTED","the voucher's signer is not in the pool's server_pubkeys");let T=await o(new web3_js.PublicKey(n.Mint));return l(p,pt({sig:n,payer:p,tokenProgram:T}))}}}var ft={pointerEvents:"auto",background:"#04276bf5",border:"1px solid #1e59c8",borderRadius:12,padding:16,color:"#fff",width:320,boxSizing:"border-box",fontFamily:"system-ui, sans-serif",display:"flex",flexDirection:"column",gap:10,maxHeight:"80vh",overflow:"auto"},gt={fontWeight:700,fontSize:16},N={fontSize:12,opacity:.7},ye={background:"#052e7e",border:"1px solid #1e59c8",borderRadius:8,color:"#fff",padding:"8px 10px",width:"100%",boxSizing:"border-box"},mt={background:"#0d66fe",color:"#fff",border:"none",borderRadius:8,padding:"9px 14px",fontWeight:700,cursor:"pointer"},te={background:"#1e59c8",color:"#fff",border:"none",borderRadius:8,padding:"7px 12px",fontWeight:600,cursor:"pointer"},we={display:"flex",gap:8};function ve({client:e,engine:t,onClose:r,style:o}){let[,l]=react$1.useReducer(d=>d+1,0),[n,p]=react$1.useState({}),[s,a]=react$1.useState({}),[i,c]=react$1.useState(""),[u,f]=react$1.useState(""),[T,w]=react$1.useState(""),[g,m]=react$1.useState(false),[I,A]=react$1.useState(null);react$1.useEffect(()=>{let d=true;return (async()=>{let S=await e.blockchain.getDefinitions();if(await e.blockchain.getUserState(),!d||!S.ok)return;let v={};for(let[B,L]of Object.entries(S.data.Blockchain?.Networks??{}))L.Type===t.networkType&&(v[B]=L);p(v),a(S.data.CryptoCurrencies??{}),c(Object.keys(v)[0]??"");})(),()=>{d=false;}},[e,t.networkType]),react$1.useEffect(()=>e.on("user:anyUpdated",l),[e]);let x=react$1.useMemo(()=>Object.entries(s).filter(([,d])=>d.Networks?.some(S=>S.NetworkID===i&&!!S.ContractAddress)),[s,i]);react$1.useEffect(()=>{let d=x[0]?.[0]??"";f(S=>x.some(([v])=>v===S)?S:d);},[x]);let R=i?n[i]:void 0,D=u?s[u]?.Networks?.find(d=>d.NetworkID===i):void 0,Z=u?e.data.user.getCryptoCurrencyAmount(u):"0",E=!!t.address;async function O(d){m(true),A(null);try{let S=await d();A(S),S.ok&&await e.blockchain.getUserState();}finally{m(false);}}return jsxRuntime.jsxs("div",{style:{...ft,...o},children:[jsxRuntime.jsxs("div",{style:{...we,justifyContent:"space-between"},children:[jsxRuntime.jsx("span",{style:gt,children:"Crypto wallet"}),r&&jsxRuntime.jsx("button",{type:"button",style:te,onClick:r,children:"\u2715"})]}),E?jsxRuntime.jsxs("div",{style:we,children:[jsxRuntime.jsxs("span",{style:{...N,flex:1,alignSelf:"center"},children:[t.address.slice(0,6),"\u2026",t.address.slice(-4)]}),jsxRuntime.jsx("button",{type:"button",style:te,onClick:t.disconnect,children:"Disconnect"})]}):jsxRuntime.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6},children:[jsxRuntime.jsx("span",{style:N,children:"Connect a browser or mobile wallet"}),t.connectChoices.length===0?jsxRuntime.jsx("span",{style:N,children:"Wallet connection is not configured for this title."}):t.connectChoices.map(d=>jsxRuntime.jsx("button",{type:"button",style:te,onClick:d.connect,children:d.label},d.key))]}),Object.keys(n).length===0?jsxRuntime.jsxs("span",{style:N,children:["No ",t.networkType," networks configured for this title."]}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:N,children:"Network"}),jsxRuntime.jsx("select",{style:ye,value:i,onChange:d=>c(d.target.value),children:Object.entries(n).map(([d,S])=>jsxRuntime.jsx("option",{value:d,children:S.DisplayName??d},d))})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:N,children:"Token"}),jsxRuntime.jsxs("select",{style:ye,value:u,onChange:d=>f(d.target.value),children:[x.length===0&&jsxRuntime.jsx("option",{value:"",children:"\u2014 no depositable tokens \u2014"}),x.map(([d,S])=>jsxRuntime.jsx("option",{value:d,children:S.DisplayName??d},d))]})]}),jsxRuntime.jsxs("div",{style:N,children:["In-game balance: ",jsxRuntime.jsx("b",{children:Z})," ",u]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:N,children:"Amount"}),jsxRuntime.jsx("input",{style:ye,inputMode:"decimal",placeholder:"0.0",value:T,onChange:d=>w(d.target.value)})]}),jsxRuntime.jsxs("div",{style:we,children:[jsxRuntime.jsx("button",{type:"button",style:{...mt,flex:1,opacity:g?.6:1},disabled:g||!E||!D?.ContractAddress,onClick:()=>{!R||!D||O(()=>t.deposit({network:R,binding:D,currencyID:u,amount:T||"0"}));},children:"Deposit"}),jsxRuntime.jsx("button",{type:"button",style:{...te,flex:1,opacity:g?.6:1},disabled:g||!E||!u,onClick:()=>{R&&O(()=>t.withdraw({network:R,networkID:i,currencyID:u,amount:T||"0"}));},children:"Withdraw"})]})]}),I&&jsxRuntime.jsx(yt,{result:I})]})}function yt({result:e}){let t={fontSize:12,borderRadius:8,padding:"8px 10px",background:e.ok?"#1e3a2a":"#3a1e28",color:e.ok?"#8ef0b0":"#f2a0b4",wordBreak:"break-all"};return e.ok?jsxRuntime.jsxs("div",{style:t,children:["\u2713 Done \xB7 tx ",e.onChainTxHash]}):jsxRuntime.jsxs("div",{style:t,children:["\u2715 [",e.stage,"] ",e.error,e.titleTransactionID?` \xB7 already debited (tx ${e.titleTransactionID}) \u2014 retry/confirm, don't re-request`:""]})}var Ct=103;function At(e){return (e.ChainID===Ct?re:j).rpcUrls.default.http[0]}function Wt(e){let{client:t,walletConnectProjectId:r,appName:o,onClose:l,style:n}=e,[p,s]=react$1.useState(r??"");react$1.useEffect(()=>{if(r)return;let g=true;return (async()=>{let m=await t.blockchain.getDefinitions();if(!g||!m.ok)return;let I=m.data.Blockchain?.WalletLogin?.WalletConnectProjectId;I&&s(I);})(),()=>{g=false;}},[t,r]);let a=react$1.useMemo(()=>p?(oe({walletConnectProjectId:p,appName:o}),true):false,[p,o]),{address:i,isConnected:c}=react.useAppKitAccount(),{walletProvider:u}=react.useAppKitProvider("solana"),f=c&&i?i:null,T=(g,m)=>ge({connection:new web3_js.Connection(At(g),"confirmed"),owner:m,programId:g.RewardPoolAddress??"",signTransaction:async I=>{if(!u)throw new Error("Wallet not connected.");return u.signTransaction(I)}});return jsxRuntime.jsx(ve,{client:t,engine:{networkType:"Solana",address:f,connectChoices:a?[{key:"appkit",label:"Connect wallet",connect:()=>{U()?.open();}}]:[],disconnect:()=>{U()?.disconnect("solana");},deposit:async({network:g,binding:m,amount:I})=>{if(!f)return h("deposit-onchain","Wallet not connected.");if(!m.ContractAddress)return h("deposit-onchain","This token cannot be deposited.");if(!g.RewardPoolAddress)return h("deposit-onchain","POOL_NOT_IN_REGISTRY");let A;try{A=viem.parseUnits(I,m.Decimals??9);}catch{return h("deposit-onchain","Invalid amount.")}return Y({client:t,adapter:T(g,f),network:g,mint:m.ContractAddress,amountRaw:A,titleID:t.titleID})},withdraw:async({network:g,networkID:m,currencyID:I,amount:A})=>f?z({client:t,adapter:T(g,f),currencyID:I,networkID:m,walletAddress:f,amount:A}):h("request","Wallet not connected.")},onClose:l,style:n})}
|
|
2
|
-
exports.PlatformPoolError=
|
|
1
|
+
'use strict';var appkitAdapterSolana=require('@reown/appkit-adapter-solana'),react=require('@reown/appkit/react'),core=require('@idosgames/core'),viem=require('viem'),react$1=require('react'),jsxRuntime=require('react/jsx-runtime'),web3_js=require('@solana/web3.js'),buffer=require('buffer');var j={id:"5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",name:"Solana",network:"solana-mainnet",nativeCurrency:{name:"Solana",symbol:"SOL",decimals:9},rpcUrls:{default:{http:["https://api.mainnet-beta.solana.com"]}},blockExplorers:{default:{name:"Solscan",url:"https://solscan.io"}},testnet:false,chainNamespace:"solana",caipNetworkId:"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp"},re={id:"EtWTRABZaYq6iMfeYKouRu166VU2xqa1",name:"Solana Devnet",network:"solana-devnet",nativeCurrency:{name:"Solana",symbol:"SOL",decimals:9},rpcUrls:{default:{http:["https://api.devnet.solana.com"]}},blockExplorers:{default:{name:"Solscan",url:"https://solscan.io"}},testnet:true,chainNamespace:"solana",caipNetworkId:"solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1"};var he=null;function Se(e){he=e;}function U(){return he}var ke=new Map;function oe(e){let{walletConnectProjectId:t,appName:r,appUrl:o,appIcon:l,wallets:n}=e,p=ke.get(t);if(p)return p;let s=e.networks??[j],a=o??(typeof window<"u"?window.location.origin:""),i={name:r??"iDosGames",description:r??"iDosGames game",url:a,icons:l?[l]:[]},c=new appkitAdapterSolana.SolanaAdapter(n?{wallets:n}:{});return Se(react.createAppKit({adapters:[c],networks:s,projectId:t,metadata:i,features:{analytics:false,email:false,socials:false}})),ke.set(t,c),c}function M(e){return e instanceof viem.BaseError?e.shortMessage:e instanceof Error?e.message:String(e)}function h(e,t,r){return {ok:false,stage:e,error:t,...r}}function C(e,t){return {ok:false,stage:e,error:t}}var be="WALLET_USE_SITE_PANEL",Le=/^[a-z0-9]{8}-preview\.idos\.games$/;function Oe(e=typeof window>"u"?"":window.location.hostname){let t=e.toLowerCase();return Le.test(t)?true:t!=="localhost"&&t!=="127.0.0.1"?false:globalThis.__IDOS_PREVIEW__!=null}function F(){if(typeof window>"u"||Oe())return false;try{return window.self!==window.top}catch{return true}}function ae(e){return h(e,be)}function ie(e){return C(e,be)}async function Y(e){let{client:t,adapter:r,network:o,mint:l,amountRaw:n,titleID:p,category:s}=e;if(F())return ae("deposit-onchain");let a=t.auth.context?.userID;if(!a)return h("deposit-onchain","Not logged in.");if(n<=0n)return h("deposit-onchain","Amount must be positive.");let i;try{i=await r.depositSpl({mint:l,amountRaw:n,userID:a,titleID:p,category:core.normalizeBlockchainCategory(s)});}catch(u){return h("deposit-onchain",M(u))}let c=await t.blockchain.depositToken(o.NetworkID??"",i);return c.ok?{ok:true,onChainTxHash:i,data:c.data}:h("report",c.error,{onChainTxHash:i})}async function z(e){let{client:t,adapter:r,currencyID:o,networkID:l,walletAddress:n,amount:p,category:s}=e;if(F())return ae("request");let a=await t.blockchain.requestTokenWithdrawal(o,l,n,p,s);if(!a.ok)return h("request",a.error);let i=a.data.SolanaSignature,c=a.data.TitleTransactionID??void 0;if(!i)return h("request","Withdrawal response carried no Solana signature.",{titleTransactionID:c});let u;try{u=await r.submitWithdrawal(i);}catch(T){return h("withdraw-onchain",M(T),{titleTransactionID:c})}if(!c)return h("confirm","Missing TitleTransactionID.",{onChainTxHash:u});let f=await t.blockchain.confirmWithdrawal(c,u);return f.ok?{ok:true,onChainTxHash:u,data:a.data}:h("confirm",f.error,{onChainTxHash:u,titleTransactionID:c})}async function $(e){let{client:t,networkID:r,walletAddress:o,signMessage:l}=e;if(F())return ie("challenge");let n=await t.auth.requestWalletChallenge(o,r);if(!n.ok)return C("challenge",n.error);let p;try{let a=await l(new TextEncoder().encode(n.data.Message));p=Pe(a);}catch(a){return C("sign",M(a))}let s=await t.auth.loginWithWallet(o,r,p);return s.ok?{ok:true,data:s.data}:C("login",s.error)}async function se(e){let{client:t,networkID:r,walletAddress:o,signMessage:l}=e;if(F())return ie("challenge");let n=await t.auth.linkWallet(o,r);if(!n.ok)return C("challenge",n.error);if(!n.data.Challenge)return C("challenge","No challenge was issued.");let p;try{let a=await l(new TextEncoder().encode(n.data.Challenge));p=Pe(a);}catch(a){return C("sign",M(a))}let s=await t.auth.linkWallet(o,r,p);return s.ok?{ok:true,data:s.data}:C("login",s.error)}function Pe(e){let t="0x";for(let r of e)t+=r.toString(16).padStart(2,"0");return t}var Te="Wallet not connected.";function Me(e,t,r){let{address:o}=react.useAppKitAccount(),{walletProvider:l}=react.useAppKitProvider("solana"),n=o??null,p=l?.signMessage?.bind(l);return {connected:!!n,account:n,loginWithWallet:(s,a)=>{let i=a??n;return i?p?$({client:e,networkID:s,walletAddress:i,signMessage:p}):Promise.resolve(C("sign","The connected wallet does not support message signing.")):Promise.resolve(C("challenge",Te))},depositToken:s=>Y({client:e,adapter:r,titleID:t,...s}),withdrawToken:s=>{let a=s.walletAddress??n;return a?z({client:e,adapter:r,...s,walletAddress:a}):Promise.resolve(h("request",Te))}}}function le(e,t){switch(e){case null:case void 0:case "":return t;case "PLAY_ACCESS_WALLET_USED_BY_ANOTHER_ACCOUNT":return "This wallet already plays with another account.";case "WALLET_UNLINK_COOLDOWN":return "This wallet was unlinked from another account less than 7 days ago. Try again after the 7 days.";case "WALLET_CHANGES_TOO_FREQUENT":return "Too many wallets were changed this week. Try again in a few days.";case "PLAY_ACCESS_WALLET_LOGIN_ONLY":return "This game is played with a wallet login only.";case "INVALID_WALLET_SIGNATURE":return "The signature does not match the wallet. Please try again.";case "WALLET_CHALLENGE_EXPIRED":return "The request expired. Please try again.";default:return e}}var He=18e4,Ie=9e4;function qe(e){try{let r=e?.session?.peer?.metadata?.redirect,o=r?.native||r?.universal;return !o||typeof window>"u"?!1:(window.location.href=o,!0)}catch{return false}}function Ce(e,t){return new Promise((r,o)=>{let l=setTimeout(()=>o(new Error("The wallet request timed out.")),t);e.then(n=>{clearTimeout(l),r(n);},n=>{clearTimeout(l),o(n instanceof Error?n:new Error(String(n)));});})}function Ve(e){let t="Wallet sign-in failed. Please try again.";return e instanceof Error?/user (rejected|denied|cancelled|canceled)|rejected the request/i.test(e.message)?"Request declined in the wallet.":/timed? ?out/i.test(e.message)?"The wallet did not respond. Open your wallet and try again.":t:t}function je(e){let{client:t,networkID:r,onAuthenticated:o,disabled:l,label:n,style:p,autoStart:s,mode:a="login",onLinked:i}=e,{address:c,isConnected:u}=react.useAppKitAccount(),{walletProvider:f}=react.useAppKitProvider("solana"),[T,w]=react$1.useState(false),[g,m]=react$1.useState(null),[I,W]=react$1.useState(false),[x,R]=react$1.useState(false),D=react$1.useRef(null),Z=react$1.useRef(0),E=react$1.useCallback(()=>{D.current&&clearTimeout(D.current),D.current=null;},[]);react$1.useEffect(()=>E,[E]);let O=react$1.useRef(false),d=react$1.useCallback(async()=>{let B=++Z.current,_=()=>Z.current===B,ne=f?.signMessage?.bind(f);if(!c||!ne){m("The connected wallet cannot sign messages."),w(false);return}w(true),m(null);try{if(R(!0),a==="link"){let J=await Ce(se({client:t,networkID:r,walletAddress:c,signMessage:ne}),Ie);if(!_())return;if(J.ok){i?.(J.data.PlayAccess??null);return}m(J.stage==="sign"?"Signature declined.":le(J.error,"Could not link the wallet."));return}let K=await Ce($({client:t,networkID:r,walletAddress:c,signMessage:ne}),Ie);if(!_())return;if(K.ok){o();return}m(K.stage==="sign"?"Signature declined.":le(K.error,"Wallet sign-in failed."));}catch(K){if(!_())return;console.error("[idosgames/wallet] solana sign-in failed:",K),m(Ve(K));}finally{_()&&(w(false),R(false));}},[c,f,t,r,o,a,i]),S=react$1.useCallback(()=>{qe(f)||U()?.open();},[f]);react$1.useEffect(()=>{!I||!u||!c||!f||(W(false),E(),d());},[I,u,c,f,d,E]);let v=()=>{if(x){S();return}if(m(null),O.current=true,u&&c&&f){d();return}let B=U();if(!B){m("Wallet sign-in is not configured for this title.");return}w(true),W(true),E(),D.current=setTimeout(()=>{W(false),w(false),m("No wallet was connected.");},He),B.open();};return react$1.useEffect(()=>{!s||O.current||(O.current=true,v());},[s]),jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:v,disabled:l,style:{...Ye,...l?{opacity:.6,cursor:"default"}:null,...p},children:x?"Waiting for signature \u2014 tap to open wallet":T?"Check your wallet\u2026":u?n??(a==="link"?"Link wallet":"Sign in with wallet"):"Connect wallet"}),g&&jsxRuntime.jsx("span",{role:"alert",style:ze,children:g})]})}var Ye={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},ze={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};var tt="e000c6afc62f69cc",nt="b59a5e563e7306ba",rt="d668e18c1bdc33f1",ee=new web3_js.PublicKey("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"),ot="1nc1nerator11111111111111111111111111111111",Ae=177,at=3e5,Ee=40,xe=4,De=Ee+32*xe,it=De+8,A=class extends Error{constructor(r,o){super(o);this.code=r;this.name="PlatformPoolError";}code};function X(e){let t=(e??"").replace(/^0x/i,""),r=new Uint8Array(t.length>>1);for(let o=0;o<r.length;o++)r[o]=parseInt(t.slice(o*2,o*2+2),16);return r}function G(e){let t=buffer.Buffer.alloc(8);return t.writeBigUInt64LE(BigInt(e||0)),t}function st(e){let t=buffer.Buffer.alloc(8);return t.writeBigInt64LE(BigInt(e||0)),t}function q(e){let t=buffer.Buffer.from(e??"","utf8"),r=buffer.Buffer.alloc(4);return r.writeUInt32LE(t.length),buffer.Buffer.concat([r,t])}function lt(e){return buffer.Buffer.concat([buffer.Buffer.from(tt,"hex"),G(e.amountRaw),q(e.userID),q(e.titleID),q(e.category)])}function ct(e){let t=e.Splits??[],r=buffer.Buffer.alloc(4);return r.writeUInt32LE(t.length),buffer.Buffer.concat([buffer.Buffer.from(e.Domain==="SPL_DEV"?rt:nt,"hex"),G(e.Amount),G(e.BurnAmount),G(e.Nonce),st(e.ExpiresAt),r,...t.map(o=>buffer.Buffer.concat([buffer.Buffer.from(new web3_js.PublicKey(o.To??"").toBytes()),G(o.Amount)])),q(e.UserID),q(e.TitleID),q(e.Category)])}function H(e,t,r){return web3_js.PublicKey.findProgramAddressSync([t.toBuffer(),r.toBuffer(),e.toBuffer()],ee)[0]}function pt(e,t,r,o,l){return new web3_js.TransactionInstruction({programId:ee,keys:[{pubkey:e,isSigner:true,isWritable:true},{pubkey:t,isSigner:false,isWritable:true},{pubkey:r,isSigner:false,isWritable:false},{pubkey:o,isSigner:false,isWritable:false},{pubkey:web3_js.SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:l,isSigner:false,isWritable:false}],data:buffer.Buffer.from([1])})}function V(e,...t){return web3_js.PublicKey.findProgramAddressSync(t,e)[0]}function ut(e){let{programId:t,user:r,mint:o,tokenProgram:l}=e,n=V(t,buffer.Buffer.from("vault"));return new web3_js.TransactionInstruction({programId:t,keys:[{pubkey:V(t,buffer.Buffer.from("config")),isSigner:false,isWritable:false},{pubkey:n,isSigner:false,isWritable:true},{pubkey:o,isSigner:false,isWritable:false},{pubkey:r,isSigner:true,isWritable:true},{pubkey:H(o,r,l),isSigner:false,isWritable:true},{pubkey:H(o,n,l),isSigner:false,isWritable:true},{pubkey:l,isSigner:false,isWritable:false},{pubkey:ee,isSigner:false,isWritable:false},{pubkey:web3_js.SystemProgram.programId,isSigner:false,isWritable:false}],data:lt(e)})}function dt(e){let{sig:t,payer:r,tokenProgram:o}=e,l=new web3_js.PublicKey(t.ProgramID??""),n=new web3_js.PublicKey(t.Mint??""),p=new web3_js.PublicKey(t.WalletAddress??""),s=V(l,buffer.Buffer.from("vault")),a=new web3_js.PublicKey(ot),i=(t.Splits??[]).map(w=>new web3_js.PublicKey(w.To??"")),c=i.map(w=>H(n,w,o)),u=web3_js.Ed25519Program.createInstructionWithPublicKey({publicKey:X(t.Ed25519PublicKey),message:X(t.Ed25519Message),signature:X(t.SignatureHex)}),f=i.map((w,g)=>pt(r,c[g],w,n,o)),T=new web3_js.TransactionInstruction({programId:l,keys:[{pubkey:V(l,buffer.Buffer.from("config")),isSigner:false,isWritable:false},{pubkey:r,isSigner:true,isWritable:true},{pubkey:s,isSigner:false,isWritable:true},{pubkey:V(l,buffer.Buffer.from("nonce"),G(t.Nonce)),isSigner:false,isWritable:true},{pubkey:n,isSigner:false,isWritable:false},{pubkey:p,isSigner:false,isWritable:false},{pubkey:H(n,s,o),isSigner:false,isWritable:true},{pubkey:H(n,p,o),isSigner:false,isWritable:true},{pubkey:a,isSigner:false,isWritable:false},{pubkey:H(n,a,o),isSigner:false,isWritable:true},{pubkey:web3_js.SYSVAR_INSTRUCTIONS_PUBKEY,isSigner:false,isWritable:false},{pubkey:o,isSigner:false,isWritable:false},{pubkey:ee,isSigner:false,isWritable:false},{pubkey:web3_js.SystemProgram.programId,isSigner:false,isWritable:false},...c.map(w=>({pubkey:w,isSigner:false,isWritable:true}))],data:ct(t)});return [u,...f,T]}function ge(e){let{connection:t,signTransaction:r}=e;async function o(n){let p=await t.getAccountInfo(n);if(!p)throw new A("MINT_NOT_FOUND",`mint ${n.toBase58()} not found`);return p.owner}async function l(n,p){let{blockhash:s,lastValidBlockHeight:a}=await t.getLatestBlockhash("confirmed"),i=new web3_js.Transaction;i.feePayer=n,i.recentBlockhash=s,i.add(...p);let c=await r(i),u=await t.sendRawTransaction(c.serialize());return await t.confirmTransaction({signature:u,blockhash:s,lastValidBlockHeight:a},"confirmed"),u}return {async depositSpl({mint:n,amountRaw:p,userID:s,titleID:a,category:i}){let c=new web3_js.PublicKey(e.owner),u=new web3_js.PublicKey(n),f=await o(u);return l(c,[ut({programId:new web3_js.PublicKey(e.programId),user:c,mint:u,tokenProgram:f,amountRaw:p,userID:s,titleID:a,category:i})])},async submitWithdrawal(n){if(!n.ProgramID||!n.Mint||!n.WalletAddress)throw new A("BAD_VOUCHER","the voucher has no program, mint or wallet");let p=new web3_js.PublicKey(e.owner),s=new web3_js.PublicKey(n.ProgramID),a=await t.getAccountInfo(V(s,buffer.Buffer.from("config")));if(!a)throw new A("POOL_NOT_ON_THIS_CLUSTER","the pool's config account is not on this cluster");if(a.data.length!==Ae)throw new A("POOL_NOT_MIGRATED",`config is ${a.data.length} bytes, expected ${Ae} (migrate_config not run)`);let i=buffer.Buffer.from(a.data);if(i[it]===1)throw new A("POOL_PAUSED","pool withdrawals are paused");let c=i.readBigUInt64LE(De);if(c!==BigInt(n.SignatureEpoch||0))throw new A("VOUCHER_REVOKED",`signature epoch mismatch: voucher ${n.SignatureEpoch}, on-chain ${c}`);let u=buffer.Buffer.from(X(n.Ed25519PublicKey)),f=false;for(let w=0;w<xe;w++){let g=Ee+w*32;u.equals(i.subarray(g,g+32))&&(f=true);}if(!f)throw new A("SIGNER_NOT_TRUSTED","the voucher's signer is not in the pool's server_pubkeys");let T=await o(new web3_js.PublicKey(n.Mint));return l(p,[web3_js.ComputeBudgetProgram.setComputeUnitLimit({units:at}),...dt({sig:n,payer:p,tokenProgram:T})])}}}var mt={pointerEvents:"auto",background:"#04276bf5",border:"1px solid #1e59c8",borderRadius:12,padding:16,color:"#fff",width:320,boxSizing:"border-box",fontFamily:"system-ui, sans-serif",display:"flex",flexDirection:"column",gap:10,maxHeight:"80vh",overflow:"auto"},yt={fontWeight:700,fontSize:16},N={fontSize:12,opacity:.7},ye={background:"#052e7e",border:"1px solid #1e59c8",borderRadius:8,color:"#fff",padding:"8px 10px",width:"100%",boxSizing:"border-box"},wt={background:"#0d66fe",color:"#fff",border:"none",borderRadius:8,padding:"9px 14px",fontWeight:700,cursor:"pointer"},te={background:"#1e59c8",color:"#fff",border:"none",borderRadius:8,padding:"7px 12px",fontWeight:600,cursor:"pointer"},we={display:"flex",gap:8};function ve({client:e,engine:t,onClose:r,style:o}){let[,l]=react$1.useReducer(d=>d+1,0),[n,p]=react$1.useState({}),[s,a]=react$1.useState({}),[i,c]=react$1.useState(""),[u,f]=react$1.useState(""),[T,w]=react$1.useState(""),[g,m]=react$1.useState(false),[I,W]=react$1.useState(null);react$1.useEffect(()=>{let d=true;return (async()=>{let S=await e.blockchain.getDefinitions();if(await e.blockchain.getUserState(),!d||!S.ok)return;let v={};for(let[B,_]of Object.entries(S.data.Blockchain?.Networks??{}))_.Type===t.networkType&&(v[B]=_);p(v),a(S.data.CryptoCurrencies??{}),c(Object.keys(v)[0]??"");})(),()=>{d=false;}},[e,t.networkType]),react$1.useEffect(()=>e.on("user:anyUpdated",l),[e]);let x=react$1.useMemo(()=>Object.entries(s).filter(([,d])=>d.Networks?.some(S=>S.NetworkID===i&&!!S.ContractAddress)),[s,i]);react$1.useEffect(()=>{let d=x[0]?.[0]??"";f(S=>x.some(([v])=>v===S)?S:d);},[x]);let R=i?n[i]:void 0,D=u?s[u]?.Networks?.find(d=>d.NetworkID===i):void 0,Z=u?e.data.user.getCryptoCurrencyAmount(u):"0",E=!!t.address;async function O(d){m(true),W(null);try{let S=await d();W(S),S.ok&&await e.blockchain.getUserState();}finally{m(false);}}return jsxRuntime.jsxs("div",{style:{...mt,...o},children:[jsxRuntime.jsxs("div",{style:{...we,justifyContent:"space-between"},children:[jsxRuntime.jsx("span",{style:yt,children:"Crypto wallet"}),r&&jsxRuntime.jsx("button",{type:"button",style:te,onClick:r,children:"\u2715"})]}),E?jsxRuntime.jsxs("div",{style:we,children:[jsxRuntime.jsxs("span",{style:{...N,flex:1,alignSelf:"center"},children:[t.address.slice(0,6),"\u2026",t.address.slice(-4)]}),jsxRuntime.jsx("button",{type:"button",style:te,onClick:t.disconnect,children:"Disconnect"})]}):jsxRuntime.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6},children:[jsxRuntime.jsx("span",{style:N,children:"Connect a browser or mobile wallet"}),t.connectChoices.length===0?jsxRuntime.jsx("span",{style:N,children:"Wallet connection is not configured for this title."}):t.connectChoices.map(d=>jsxRuntime.jsx("button",{type:"button",style:te,onClick:d.connect,children:d.label},d.key))]}),Object.keys(n).length===0?jsxRuntime.jsxs("span",{style:N,children:["No ",t.networkType," networks configured for this title."]}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:N,children:"Network"}),jsxRuntime.jsx("select",{style:ye,value:i,onChange:d=>c(d.target.value),children:Object.entries(n).map(([d,S])=>jsxRuntime.jsx("option",{value:d,children:S.DisplayName??d},d))})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:N,children:"Token"}),jsxRuntime.jsxs("select",{style:ye,value:u,onChange:d=>f(d.target.value),children:[x.length===0&&jsxRuntime.jsx("option",{value:"",children:"\u2014 no depositable tokens \u2014"}),x.map(([d,S])=>jsxRuntime.jsx("option",{value:d,children:S.DisplayName??d},d))]})]}),jsxRuntime.jsxs("div",{style:N,children:["In-game balance: ",jsxRuntime.jsx("b",{children:Z})," ",u]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:N,children:"Amount"}),jsxRuntime.jsx("input",{style:ye,inputMode:"decimal",placeholder:"0.0",value:T,onChange:d=>w(d.target.value)})]}),jsxRuntime.jsxs("div",{style:we,children:[jsxRuntime.jsx("button",{type:"button",style:{...wt,flex:1,opacity:g?.6:1},disabled:g||!E||!D?.ContractAddress,onClick:()=>{!R||!D||O(()=>t.deposit({network:R,binding:D,currencyID:u,amount:T||"0"}));},children:"Deposit"}),jsxRuntime.jsx("button",{type:"button",style:{...te,flex:1,opacity:g?.6:1},disabled:g||!E||!u,onClick:()=>{R&&O(()=>t.withdraw({network:R,networkID:i,currencyID:u,amount:T||"0"}));},children:"Withdraw"})]})]}),I&&jsxRuntime.jsx(ht,{result:I})]})}function ht({result:e}){let t={fontSize:12,borderRadius:8,padding:"8px 10px",background:e.ok?"#1e3a2a":"#3a1e28",color:e.ok?"#8ef0b0":"#f2a0b4",wordBreak:"break-all"};return e.ok?jsxRuntime.jsxs("div",{style:t,children:["\u2713 Done \xB7 tx ",e.onChainTxHash]}):jsxRuntime.jsxs("div",{style:t,children:["\u2715 [",e.stage,"] ",e.error,e.titleTransactionID?` \xB7 already debited (tx ${e.titleTransactionID}) \u2014 retry/confirm, don't re-request`:""]})}var At=103;function Et(e){return (e.ChainID===At?re:j).rpcUrls.default.http[0]}function xt(e){let{client:t,walletConnectProjectId:r,appName:o,onClose:l,style:n}=e,[p,s]=react$1.useState(r??"");react$1.useEffect(()=>{if(r)return;let g=true;return (async()=>{let m=await t.blockchain.getDefinitions();if(!g||!m.ok)return;let I=m.data.Blockchain?.WalletLogin?.WalletConnectProjectId;I&&s(I);})(),()=>{g=false;}},[t,r]);let a=react$1.useMemo(()=>p?(oe({walletConnectProjectId:p,appName:o}),true):false,[p,o]),{address:i,isConnected:c}=react.useAppKitAccount(),{walletProvider:u}=react.useAppKitProvider("solana"),f=c&&i?i:null,T=(g,m)=>ge({connection:new web3_js.Connection(Et(g),"confirmed"),owner:m,programId:g.RewardPoolAddress??"",signTransaction:async I=>{if(!u)throw new Error("Wallet not connected.");return u.signTransaction(I)}});return jsxRuntime.jsx(ve,{client:t,engine:{networkType:"Solana",address:f,connectChoices:a?[{key:"appkit",label:"Connect wallet",connect:()=>{U()?.open();}}]:[],disconnect:()=>{U()?.disconnect("solana");},deposit:async({network:g,binding:m,amount:I})=>{if(!f)return h("deposit-onchain","Wallet not connected.");if(!m.ContractAddress)return h("deposit-onchain","This token cannot be deposited.");if(!g.RewardPoolAddress)return h("deposit-onchain","POOL_NOT_IN_REGISTRY");let W;try{W=viem.parseUnits(I,m.Decimals??9);}catch{return h("deposit-onchain","Invalid amount.")}return Y({client:t,adapter:T(g,f),network:g,mint:m.ContractAddress,amountRaw:W,titleID:t.titleID})},withdraw:async({network:g,networkID:m,currencyID:I,amount:W})=>f?z({client:t,adapter:T(g,f),currencyID:I,networkID:m,walletAddress:f,amount:W}):h("request","Wallet not connected.")},onClose:l,style:n})}
|
|
2
|
+
exports.PlatformPoolError=A;exports.SolanaWalletLogin=je;exports.SolanaWalletPanel=xt;exports.createPlatformPoolAdapter=ge;exports.createSolanaWalletConfig=oe;exports.solanaDevnet=re;exports.solanaMainnet=j;exports.useSolanaBridge=Me;
|
|
@@ -3,7 +3,7 @@ import { BaseWalletAdapter } from '@solana/wallet-adapter-base';
|
|
|
3
3
|
import { a as AppKitSolanaNetwork, W as WalletLoginResult, B as BridgeResult } from '../chains-B2jQ-L0B.cjs';
|
|
4
4
|
export { r as solanaDevnet, t as solanaMainnet } from '../chains-B2jQ-L0B.cjs';
|
|
5
5
|
import { ClientState, DepositTokenResponse, TokenWithdrawalResponse, IDosGamesClient, PlayAccessStatus } from '@idosgames/core';
|
|
6
|
-
import { D as DepositTokenSolanaParams, W as WithdrawTokenSolanaParams, S as SolanaProgramAdapter } from '../bridge-
|
|
6
|
+
import { D as DepositTokenSolanaParams, W as WithdrawTokenSolanaParams, S as SolanaProgramAdapter } from '../bridge-C5z9TgKG.cjs';
|
|
7
7
|
import { CSSProperties, ReactNode } from 'react';
|
|
8
8
|
import { Connection, Transaction } from '@solana/web3.js';
|
|
9
9
|
import 'viem';
|
|
@@ -3,7 +3,7 @@ import { BaseWalletAdapter } from '@solana/wallet-adapter-base';
|
|
|
3
3
|
import { a as AppKitSolanaNetwork, W as WalletLoginResult, B as BridgeResult } from '../chains-B2jQ-L0B.js';
|
|
4
4
|
export { r as solanaDevnet, t as solanaMainnet } from '../chains-B2jQ-L0B.js';
|
|
5
5
|
import { ClientState, DepositTokenResponse, TokenWithdrawalResponse, IDosGamesClient, PlayAccessStatus } from '@idosgames/core';
|
|
6
|
-
import { D as DepositTokenSolanaParams, W as WithdrawTokenSolanaParams, S as SolanaProgramAdapter } from '../bridge-
|
|
6
|
+
import { D as DepositTokenSolanaParams, W as WithdrawTokenSolanaParams, S as SolanaProgramAdapter } from '../bridge-BPZNXQuQ.js';
|
|
7
7
|
import { CSSProperties, ReactNode } from 'react';
|
|
8
8
|
import { Connection, Transaction } from '@solana/web3.js';
|
|
9
9
|
import 'viem';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import {b,a as a$1,c,d}from'../chunk-MLIXKTS6.js';import {a,c as c$2,b as b$2,d as d$1}from'../chunk-XJV2C5QX.js';import {v,b as b$1,c as c$1,w}from'../chunk-K3THMWU2.js';export{w as solanaDevnet,v as solanaMainnet}from'../chunk-K3THMWU2.js';import {SolanaAdapter}from'@reown/appkit-adapter-solana';import {createAppKit,useAppKitAccount,useAppKitProvider}from'@reown/appkit/react';import {useState,useRef,useCallback,useEffect,useMemo}from'react';import {jsxs,Fragment,jsx}from'react/jsx-runtime';import {parseUnits}from'viem';import {PublicKey,Connection,Transaction,Ed25519Program,TransactionInstruction,SYSVAR_INSTRUCTIONS_PUBKEY,SystemProgram}from'@solana/web3.js';import {Buffer}from'buffer';var se=new Map;function $(t){let{walletConnectProjectId:e,appName:o,appUrl:r,appIcon:a$1,wallets:n}=t,i=se.get(e);if(i)return i;let p=t.networks??[v],s=r??(typeof window<"u"?window.location.origin:""),l={name:o??"iDosGames",description:o??"iDosGames game",url:s,icons:a$1?[a$1]:[]},c=new SolanaAdapter(n?{wallets:n}:{});return a(createAppKit({adapters:[c],networks:p,projectId:e,metadata:l,features:{analytics:false,email:false,socials:false}})),se.set(e,c),c}var le="Wallet not connected.";function Ie(t,e,o){let{address:r}=useAppKitAccount(),{walletProvider:a}=useAppKitProvider("solana"),n=r??null,i=a?.signMessage?.bind(a);return {connected:!!n,account:n,loginWithWallet:(p,s)=>{let l=s??n;return l?i?c({client:t,networkID:p,walletAddress:l,signMessage:i}):Promise.resolve(c$1("sign","The connected wallet does not support message signing.")):Promise.resolve(c$1("challenge",le))},depositToken:p=>a$1({client:t,adapter:o,titleID:e,...p}),withdrawToken:p=>{let s=p.walletAddress??n;return s?b({client:t,adapter:o,...p,walletAddress:s}):Promise.resolve(b$1("request",le))}}}var Ae=18e4,ce=9e4;function he(t){try{let o=t?.session?.peer?.metadata?.redirect,r=o?.native||o?.universal;return !r||typeof window>"u"?!1:(window.location.href=r,!0)}catch{return false}}function pe(t,e){return new Promise((o,r)=>{let a=setTimeout(()=>r(new Error("The wallet request timed out.")),e);t.then(n=>{clearTimeout(a),o(n);},n=>{clearTimeout(a),r(n instanceof Error?n:new Error(String(n)));});})}function We(t){let e="Wallet sign-in failed. Please try again.";return t instanceof Error?/user (rejected|denied|cancelled|canceled)|rejected the request/i.test(t.message)?"Request declined in the wallet.":/timed? ?out/i.test(t.message)?"The wallet did not respond. Open your wallet and try again.":e:e}function Ee(t){let{client:e,networkID:o,onAuthenticated:r,disabled:a,label:n,style:i,autoStart:p,mode:s="login",onLinked:l}=t,{address:c$1,isConnected:S}=useAppKitAccount(),{walletProvider:u}=useAppKitProvider("solana"),[b,m]=useState(false),[f,g]=useState(null),[y,I]=useState(false),[ee,te]=useState(false),_=useRef(null),ne=useRef(0),C=useCallback(()=>{_.current&&clearTimeout(_.current),_.current=null;},[]);useEffect(()=>C,[C]);let G=useRef(false),F=useCallback(async()=>{let N=++ne.current,R=()=>ne.current===N,H=u?.signMessage?.bind(u);if(!c$1||!H){g("The connected wallet cannot sign messages."),m(false);return}m(true),g(null);try{if(te(!0),s==="link"){let x=await pe(d({client:e,networkID:o,walletAddress:c$1,signMessage:H}),ce);if(!R())return;if(x.ok){l?.(x.data.PlayAccess??null);return}g(x.stage==="sign"?"Signature declined.":c$2(x.error,"Could not link the wallet."));return}let k=await pe(c({client:e,networkID:o,walletAddress:c$1,signMessage:H}),ce);if(!R())return;if(k.ok){r();return}g(k.stage==="sign"?"Signature declined.":c$2(k.error,"Wallet sign-in failed."));}catch(k){if(!R())return;console.error("[idosgames/wallet] solana sign-in failed:",k),g(We(k));}finally{R()&&(m(false),te(false));}},[c$1,u,e,o,r,s,l]),Se=useCallback(()=>{he(u)||b$2()?.open();},[u]);useEffect(()=>{!y||!S||!c$1||!u||(I(false),C(),F());},[y,S,c$1,u,F,C]);let re=()=>{if(ee){Se();return}if(g(null),G.current=true,S&&c$1&&u){F();return}let N=b$2();if(!N){g("Wallet sign-in is not configured for this title.");return}m(true),I(true),C(),_.current=setTimeout(()=>{I(false),m(false),g("No wallet was connected.");},Ae),N.open();};return useEffect(()=>{!p||G.current||(G.current=true,re());},[p]),jsxs(Fragment,{children:[jsx("button",{type:"button",onClick:re,disabled:a,style:{...De,...a?{opacity:.6,cursor:"default"}:null,...i},children:ee?"Waiting for signature \u2014 tap to open wallet":b?"Check your wallet\u2026":S?n??(s==="link"?"Link wallet":"Sign in with wallet"):"Connect wallet"}),f&&jsx("span",{role:"alert",style:Ce,children:f})]})}var De={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},Ce={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};var Ke="e000c6afc62f69cc",ve="b59a5e563e7306ba",Be="d668e18c1bdc33f1",M=new PublicKey("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"),Le="1nc1nerator11111111111111111111111111111111",de=177,fe=40,ge=4,me=fe+32*ge,Ue=me+8,P=class extends Error{constructor(o,r){super(r);this.code=o;this.name="PlatformPoolError";}code};function U(t){let e=(t??"").replace(/^0x/i,""),o=new Uint8Array(e.length>>1);for(let r=0;r<o.length;r++)o[r]=parseInt(e.slice(r*2,r*2+2),16);return o}function h(t){let e=Buffer.alloc(8);return e.writeBigUInt64LE(BigInt(t||0)),e}function Me(t){let e=Buffer.alloc(8);return e.writeBigInt64LE(BigInt(t||0)),e}function E(t){let e=Buffer.from(t??"","utf8"),o=Buffer.alloc(4);return o.writeUInt32LE(e.length),Buffer.concat([o,e])}function Ge(t){return Buffer.concat([Buffer.from(Ke,"hex"),h(t.amountRaw),E(t.userID),E(t.titleID),E(t.category)])}function Fe(t){let e=t.Splits??[],o=Buffer.alloc(4);return o.writeUInt32LE(e.length),Buffer.concat([Buffer.from(t.Domain==="SPL_DEV"?Be:ve,"hex"),h(t.Amount),h(t.BurnAmount),h(t.Nonce),Me(t.ExpiresAt),o,...e.map(r=>Buffer.concat([Buffer.from(new PublicKey(r.To??"").toBytes()),h(r.Amount)])),E(t.UserID),E(t.TitleID),E(t.Category),Buffer.from([t.SigIxIndex??0])])}function W(t,e,o){return PublicKey.findProgramAddressSync([e.toBuffer(),o.toBuffer(),t.toBuffer()],M)[0]}function He(t,e,o,r,a){return new TransactionInstruction({programId:M,keys:[{pubkey:t,isSigner:true,isWritable:true},{pubkey:e,isSigner:false,isWritable:true},{pubkey:o,isSigner:false,isWritable:false},{pubkey:r,isSigner:false,isWritable:false},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:a,isSigner:false,isWritable:false}],data:Buffer.from([1])})}function D(t,...e){return PublicKey.findProgramAddressSync(e,t)[0]}function Ve(t){let{programId:e,user:o,mint:r,tokenProgram:a}=t,n=D(e,Buffer.from("vault"));return new TransactionInstruction({programId:e,keys:[{pubkey:D(e,Buffer.from("config")),isSigner:false,isWritable:false},{pubkey:n,isSigner:false,isWritable:true},{pubkey:r,isSigner:false,isWritable:false},{pubkey:o,isSigner:true,isWritable:true},{pubkey:W(r,o,a),isSigner:false,isWritable:true},{pubkey:W(r,n,a),isSigner:false,isWritable:true},{pubkey:a,isSigner:false,isWritable:false},{pubkey:M,isSigner:false,isWritable:false},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false}],data:Ge(t)})}function je(t){let{sig:e,payer:o,tokenProgram:r}=t,a=new PublicKey(e.ProgramID??""),n=new PublicKey(e.Mint??""),i=new PublicKey(e.WalletAddress??""),p=D(a,Buffer.from("vault")),s=new PublicKey(Le),l=(e.Splits??[]).map(m=>new PublicKey(m.To??"")),c=l.map(m=>W(n,m,r)),S=Ed25519Program.createInstructionWithPublicKey({publicKey:U(e.Ed25519PublicKey),message:U(e.Ed25519Message),signature:U(e.SignatureHex)}),u=l.map((m,f)=>He(o,c[f],m,n,r)),b=new TransactionInstruction({programId:a,keys:[{pubkey:D(a,Buffer.from("config")),isSigner:false,isWritable:false},{pubkey:o,isSigner:true,isWritable:true},{pubkey:p,isSigner:false,isWritable:true},{pubkey:D(a,Buffer.from("nonce"),h(e.Nonce)),isSigner:false,isWritable:true},{pubkey:n,isSigner:false,isWritable:false},{pubkey:i,isSigner:false,isWritable:false},{pubkey:W(n,p,r),isSigner:false,isWritable:true},{pubkey:W(n,i,r),isSigner:false,isWritable:true},{pubkey:s,isSigner:false,isWritable:false},{pubkey:W(n,s,r),isSigner:false,isWritable:true},{pubkey:SYSVAR_INSTRUCTIONS_PUBKEY,isSigner:false,isWritable:false},{pubkey:r,isSigner:false,isWritable:false},{pubkey:M,isSigner:false,isWritable:false},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false},...c.map(m=>({pubkey:m,isSigner:false,isWritable:true}))],data:Fe(e)});return [S,...u,b]}function X(t){let{connection:e,signTransaction:o}=t;async function r(n){let i=await e.getAccountInfo(n);if(!i)throw new P("MINT_NOT_FOUND",`mint ${n.toBase58()} not found`);return i.owner}async function a(n,i){let{blockhash:p,lastValidBlockHeight:s}=await e.getLatestBlockhash("confirmed"),l=new Transaction;l.feePayer=n,l.recentBlockhash=p,l.add(...i);let c=await o(l),S=await e.sendRawTransaction(c.serialize());return await e.confirmTransaction({signature:S,blockhash:p,lastValidBlockHeight:s},"confirmed"),S}return {async depositSpl({mint:n,amountRaw:i,userID:p,titleID:s,category:l}){let c=new PublicKey(t.owner),S=new PublicKey(n),u=await r(S);return a(c,[Ve({programId:new PublicKey(t.programId),user:c,mint:S,tokenProgram:u,amountRaw:i,userID:p,titleID:s,category:l})])},async submitWithdrawal(n){if(!n.ProgramID||!n.Mint||!n.WalletAddress)throw new P("BAD_VOUCHER","the voucher has no program, mint or wallet");let i=new PublicKey(t.owner),p=new PublicKey(n.ProgramID),s=await e.getAccountInfo(D(p,Buffer.from("config")));if(!s)throw new P("POOL_NOT_ON_THIS_CLUSTER","the pool's config account is not on this cluster");if(s.data.length!==de)throw new P("POOL_NOT_MIGRATED",`config is ${s.data.length} bytes, expected ${de} (migrate_config not run)`);let l=Buffer.from(s.data);if(l[Ue]===1)throw new P("POOL_PAUSED","pool withdrawals are paused");let c=l.readBigUInt64LE(me);if(c!==BigInt(n.SignatureEpoch||0))throw new P("VOUCHER_REVOKED",`signature epoch mismatch: voucher ${n.SignatureEpoch}, on-chain ${c}`);let S=Buffer.from(U(n.Ed25519PublicKey)),u=false;for(let m=0;m<ge;m++){let f=fe+m*32;S.equals(l.subarray(f,f+32))&&(u=true);}if(!u)throw new P("SIGNER_NOT_TRUSTED","the voucher's signer is not in the pool's server_pubkeys");let b=await r(new PublicKey(n.Mint));return a(i,je({sig:n,payer:i,tokenProgram:b}))}}}var Xe=103;function et(t){return (t.ChainID===Xe?w:v).rpcUrls.default.http[0]}function tt(t){let{client:e,walletConnectProjectId:o,appName:r,onClose:a,style:n}=t,[i,p]=useState(o??"");useEffect(()=>{if(o)return;let f=true;return (async()=>{let g=await e.blockchain.getDefinitions();if(!f||!g.ok)return;let y=g.data.Blockchain?.WalletLogin?.WalletConnectProjectId;y&&p(y);})(),()=>{f=false;}},[e,o]);let s=useMemo(()=>i?($({walletConnectProjectId:i,appName:r}),true):false,[i,r]),{address:l,isConnected:c}=useAppKitAccount(),{walletProvider:S}=useAppKitProvider("solana"),u=c&&l?l:null,b$3=(f,g)=>X({connection:new Connection(et(f),"confirmed"),owner:g,programId:f.RewardPoolAddress??"",signTransaction:async y=>{if(!S)throw new Error("Wallet not connected.");return S.signTransaction(y)}});return jsx(d$1,{client:e,engine:{networkType:"Solana",address:u,connectChoices:s?[{key:"appkit",label:"Connect wallet",connect:()=>{b$2()?.open();}}]:[],disconnect:()=>{b$2()?.disconnect("solana");},deposit:async({network:f,binding:g,amount:y})=>{if(!u)return b$1("deposit-onchain","Wallet not connected.");if(!g.ContractAddress)return b$1("deposit-onchain","This token cannot be deposited.");if(!f.RewardPoolAddress)return b$1("deposit-onchain","POOL_NOT_IN_REGISTRY");let I;try{I=parseUnits(y,g.Decimals??9);}catch{return b$1("deposit-onchain","Invalid amount.")}return a$1({client:e,adapter:b$3(f,u),network:f,mint:g.ContractAddress,amountRaw:I,titleID:e.titleID})},withdraw:async({network:f,networkID:g,currencyID:y,amount:I})=>u?b({client:e,adapter:b$3(f,u),currencyID:y,networkID:g,walletAddress:u,amount:I}):b$1("request","Wallet not connected.")},onClose:a,style:n})}export{P as PlatformPoolError,Ee as SolanaWalletLogin,tt as SolanaWalletPanel,X as createPlatformPoolAdapter,$ as createSolanaWalletConfig,Ie as useSolanaBridge};
|
|
1
|
+
import {b,a as a$1,c,d}from'../chunk-MLIXKTS6.js';import {a,c as c$2,b as b$2,d as d$1}from'../chunk-XJV2C5QX.js';import {v,b as b$1,c as c$1,w}from'../chunk-K3THMWU2.js';export{w as solanaDevnet,v as solanaMainnet}from'../chunk-K3THMWU2.js';import {SolanaAdapter}from'@reown/appkit-adapter-solana';import {createAppKit,useAppKitAccount,useAppKitProvider}from'@reown/appkit/react';import {useState,useRef,useCallback,useEffect,useMemo}from'react';import {jsxs,Fragment,jsx}from'react/jsx-runtime';import {parseUnits}from'viem';import {PublicKey,ComputeBudgetProgram,Connection,Transaction,Ed25519Program,TransactionInstruction,SYSVAR_INSTRUCTIONS_PUBKEY,SystemProgram}from'@solana/web3.js';import {Buffer}from'buffer';var se=new Map;function $(t){let{walletConnectProjectId:e,appName:o,appUrl:r,appIcon:a$1,wallets:n}=t,i=se.get(e);if(i)return i;let u=t.networks??[v],s=r??(typeof window<"u"?window.location.origin:""),l={name:o??"iDosGames",description:o??"iDosGames game",url:s,icons:a$1?[a$1]:[]},c=new SolanaAdapter(n?{wallets:n}:{});return a(createAppKit({adapters:[c],networks:u,projectId:e,metadata:l,features:{analytics:false,email:false,socials:false}})),se.set(e,c),c}var le="Wallet not connected.";function Te(t,e,o){let{address:r}=useAppKitAccount(),{walletProvider:a}=useAppKitProvider("solana"),n=r??null,i=a?.signMessage?.bind(a);return {connected:!!n,account:n,loginWithWallet:(u,s)=>{let l=s??n;return l?i?c({client:t,networkID:u,walletAddress:l,signMessage:i}):Promise.resolve(c$1("sign","The connected wallet does not support message signing.")):Promise.resolve(c$1("challenge",le))},depositToken:u=>a$1({client:t,adapter:o,titleID:e,...u}),withdrawToken:u=>{let s=u.walletAddress??n;return s?b({client:t,adapter:o,...u,walletAddress:s}):Promise.resolve(b$1("request",le))}}}var Ae=18e4,ce=9e4;function he(t){try{let o=t?.session?.peer?.metadata?.redirect,r=o?.native||o?.universal;return !r||typeof window>"u"?!1:(window.location.href=r,!0)}catch{return false}}function ue(t,e){return new Promise((o,r)=>{let a=setTimeout(()=>r(new Error("The wallet request timed out.")),e);t.then(n=>{clearTimeout(a),o(n);},n=>{clearTimeout(a),r(n instanceof Error?n:new Error(String(n)));});})}function We(t){let e="Wallet sign-in failed. Please try again.";return t instanceof Error?/user (rejected|denied|cancelled|canceled)|rejected the request/i.test(t.message)?"Request declined in the wallet.":/timed? ?out/i.test(t.message)?"The wallet did not respond. Open your wallet and try again.":e:e}function Ce(t){let{client:e,networkID:o,onAuthenticated:r,disabled:a,label:n,style:i,autoStart:u,mode:s="login",onLinked:l}=t,{address:c$1,isConnected:S}=useAppKitAccount(),{walletProvider:p}=useAppKitProvider("solana"),[b,m]=useState(false),[f,g]=useState(null),[y,T]=useState(false),[ee,te]=useState(false),_=useRef(null),ne=useRef(0),D=useCallback(()=>{_.current&&clearTimeout(_.current),_.current=null;},[]);useEffect(()=>D,[D]);let G=useRef(false),F=useCallback(async()=>{let N=++ne.current,R=()=>ne.current===N,H=p?.signMessage?.bind(p);if(!c$1||!H){g("The connected wallet cannot sign messages."),m(false);return}m(true),g(null);try{if(te(!0),s==="link"){let K=await ue(d({client:e,networkID:o,walletAddress:c$1,signMessage:H}),ce);if(!R())return;if(K.ok){l?.(K.data.PlayAccess??null);return}g(K.stage==="sign"?"Signature declined.":c$2(K.error,"Could not link the wallet."));return}let k=await ue(c({client:e,networkID:o,walletAddress:c$1,signMessage:H}),ce);if(!R())return;if(k.ok){r();return}g(k.stage==="sign"?"Signature declined.":c$2(k.error,"Wallet sign-in failed."));}catch(k){if(!R())return;console.error("[idosgames/wallet] solana sign-in failed:",k),g(We(k));}finally{R()&&(m(false),te(false));}},[c$1,p,e,o,r,s,l]),Se=useCallback(()=>{he(p)||b$2()?.open();},[p]);useEffect(()=>{!y||!S||!c$1||!p||(T(false),D(),F());},[y,S,c$1,p,F,D]);let re=()=>{if(ee){Se();return}if(g(null),G.current=true,S&&c$1&&p){F();return}let N=b$2();if(!N){g("Wallet sign-in is not configured for this title.");return}m(true),T(true),D(),_.current=setTimeout(()=>{T(false),m(false),g("No wallet was connected.");},Ae),N.open();};return useEffect(()=>{!u||G.current||(G.current=true,re());},[u]),jsxs(Fragment,{children:[jsx("button",{type:"button",onClick:re,disabled:a,style:{...Ee,...a?{opacity:.6,cursor:"default"}:null,...i},children:ee?"Waiting for signature \u2014 tap to open wallet":b?"Check your wallet\u2026":S?n??(s==="link"?"Link wallet":"Sign in with wallet"):"Connect wallet"}),f&&jsx("span",{role:"alert",style:De,children:f})]})}var Ee={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},De={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};var ve="e000c6afc62f69cc",Be="b59a5e563e7306ba",Le="d668e18c1bdc33f1",M=new PublicKey("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"),Ue="1nc1nerator11111111111111111111111111111111",de=177,Me=3e5,fe=40,ge=4,me=fe+32*ge,Ge=me+8,P=class extends Error{constructor(o,r){super(r);this.code=o;this.name="PlatformPoolError";}code};function U(t){let e=(t??"").replace(/^0x/i,""),o=new Uint8Array(e.length>>1);for(let r=0;r<o.length;r++)o[r]=parseInt(e.slice(r*2,r*2+2),16);return o}function h(t){let e=Buffer.alloc(8);return e.writeBigUInt64LE(BigInt(t||0)),e}function Fe(t){let e=Buffer.alloc(8);return e.writeBigInt64LE(BigInt(t||0)),e}function C(t){let e=Buffer.from(t??"","utf8"),o=Buffer.alloc(4);return o.writeUInt32LE(e.length),Buffer.concat([o,e])}function He(t){return Buffer.concat([Buffer.from(ve,"hex"),h(t.amountRaw),C(t.userID),C(t.titleID),C(t.category)])}function Ve(t){let e=t.Splits??[],o=Buffer.alloc(4);return o.writeUInt32LE(e.length),Buffer.concat([Buffer.from(t.Domain==="SPL_DEV"?Le:Be,"hex"),h(t.Amount),h(t.BurnAmount),h(t.Nonce),Fe(t.ExpiresAt),o,...e.map(r=>Buffer.concat([Buffer.from(new PublicKey(r.To??"").toBytes()),h(r.Amount)])),C(t.UserID),C(t.TitleID),C(t.Category)])}function W(t,e,o){return PublicKey.findProgramAddressSync([e.toBuffer(),o.toBuffer(),t.toBuffer()],M)[0]}function je(t,e,o,r,a){return new TransactionInstruction({programId:M,keys:[{pubkey:t,isSigner:true,isWritable:true},{pubkey:e,isSigner:false,isWritable:true},{pubkey:o,isSigner:false,isWritable:false},{pubkey:r,isSigner:false,isWritable:false},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:a,isSigner:false,isWritable:false}],data:Buffer.from([1])})}function E(t,...e){return PublicKey.findProgramAddressSync(e,t)[0]}function qe(t){let{programId:e,user:o,mint:r,tokenProgram:a}=t,n=E(e,Buffer.from("vault"));return new TransactionInstruction({programId:e,keys:[{pubkey:E(e,Buffer.from("config")),isSigner:false,isWritable:false},{pubkey:n,isSigner:false,isWritable:true},{pubkey:r,isSigner:false,isWritable:false},{pubkey:o,isSigner:true,isWritable:true},{pubkey:W(r,o,a),isSigner:false,isWritable:true},{pubkey:W(r,n,a),isSigner:false,isWritable:true},{pubkey:a,isSigner:false,isWritable:false},{pubkey:M,isSigner:false,isWritable:false},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false}],data:He(t)})}function $e(t){let{sig:e,payer:o,tokenProgram:r}=t,a=new PublicKey(e.ProgramID??""),n=new PublicKey(e.Mint??""),i=new PublicKey(e.WalletAddress??""),u=E(a,Buffer.from("vault")),s=new PublicKey(Ue),l=(e.Splits??[]).map(m=>new PublicKey(m.To??"")),c=l.map(m=>W(n,m,r)),S=Ed25519Program.createInstructionWithPublicKey({publicKey:U(e.Ed25519PublicKey),message:U(e.Ed25519Message),signature:U(e.SignatureHex)}),p=l.map((m,f)=>je(o,c[f],m,n,r)),b=new TransactionInstruction({programId:a,keys:[{pubkey:E(a,Buffer.from("config")),isSigner:false,isWritable:false},{pubkey:o,isSigner:true,isWritable:true},{pubkey:u,isSigner:false,isWritable:true},{pubkey:E(a,Buffer.from("nonce"),h(e.Nonce)),isSigner:false,isWritable:true},{pubkey:n,isSigner:false,isWritable:false},{pubkey:i,isSigner:false,isWritable:false},{pubkey:W(n,u,r),isSigner:false,isWritable:true},{pubkey:W(n,i,r),isSigner:false,isWritable:true},{pubkey:s,isSigner:false,isWritable:false},{pubkey:W(n,s,r),isSigner:false,isWritable:true},{pubkey:SYSVAR_INSTRUCTIONS_PUBKEY,isSigner:false,isWritable:false},{pubkey:r,isSigner:false,isWritable:false},{pubkey:M,isSigner:false,isWritable:false},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false},...c.map(m=>({pubkey:m,isSigner:false,isWritable:true}))],data:Ve(e)});return [S,...p,b]}function X(t){let{connection:e,signTransaction:o}=t;async function r(n){let i=await e.getAccountInfo(n);if(!i)throw new P("MINT_NOT_FOUND",`mint ${n.toBase58()} not found`);return i.owner}async function a(n,i){let{blockhash:u,lastValidBlockHeight:s}=await e.getLatestBlockhash("confirmed"),l=new Transaction;l.feePayer=n,l.recentBlockhash=u,l.add(...i);let c=await o(l),S=await e.sendRawTransaction(c.serialize());return await e.confirmTransaction({signature:S,blockhash:u,lastValidBlockHeight:s},"confirmed"),S}return {async depositSpl({mint:n,amountRaw:i,userID:u,titleID:s,category:l}){let c=new PublicKey(t.owner),S=new PublicKey(n),p=await r(S);return a(c,[qe({programId:new PublicKey(t.programId),user:c,mint:S,tokenProgram:p,amountRaw:i,userID:u,titleID:s,category:l})])},async submitWithdrawal(n){if(!n.ProgramID||!n.Mint||!n.WalletAddress)throw new P("BAD_VOUCHER","the voucher has no program, mint or wallet");let i=new PublicKey(t.owner),u=new PublicKey(n.ProgramID),s=await e.getAccountInfo(E(u,Buffer.from("config")));if(!s)throw new P("POOL_NOT_ON_THIS_CLUSTER","the pool's config account is not on this cluster");if(s.data.length!==de)throw new P("POOL_NOT_MIGRATED",`config is ${s.data.length} bytes, expected ${de} (migrate_config not run)`);let l=Buffer.from(s.data);if(l[Ge]===1)throw new P("POOL_PAUSED","pool withdrawals are paused");let c=l.readBigUInt64LE(me);if(c!==BigInt(n.SignatureEpoch||0))throw new P("VOUCHER_REVOKED",`signature epoch mismatch: voucher ${n.SignatureEpoch}, on-chain ${c}`);let S=Buffer.from(U(n.Ed25519PublicKey)),p=false;for(let m=0;m<ge;m++){let f=fe+m*32;S.equals(l.subarray(f,f+32))&&(p=true);}if(!p)throw new P("SIGNER_NOT_TRUSTED","the voucher's signer is not in the pool's server_pubkeys");let b=await r(new PublicKey(n.Mint));return a(i,[ComputeBudgetProgram.setComputeUnitLimit({units:Me}),...$e({sig:n,payer:i,tokenProgram:b})])}}}var tt=103;function nt(t){return (t.ChainID===tt?w:v).rpcUrls.default.http[0]}function rt(t){let{client:e,walletConnectProjectId:o,appName:r,onClose:a,style:n}=t,[i,u]=useState(o??"");useEffect(()=>{if(o)return;let f=true;return (async()=>{let g=await e.blockchain.getDefinitions();if(!f||!g.ok)return;let y=g.data.Blockchain?.WalletLogin?.WalletConnectProjectId;y&&u(y);})(),()=>{f=false;}},[e,o]);let s=useMemo(()=>i?($({walletConnectProjectId:i,appName:r}),true):false,[i,r]),{address:l,isConnected:c}=useAppKitAccount(),{walletProvider:S}=useAppKitProvider("solana"),p=c&&l?l:null,b$3=(f,g)=>X({connection:new Connection(nt(f),"confirmed"),owner:g,programId:f.RewardPoolAddress??"",signTransaction:async y=>{if(!S)throw new Error("Wallet not connected.");return S.signTransaction(y)}});return jsx(d$1,{client:e,engine:{networkType:"Solana",address:p,connectChoices:s?[{key:"appkit",label:"Connect wallet",connect:()=>{b$2()?.open();}}]:[],disconnect:()=>{b$2()?.disconnect("solana");},deposit:async({network:f,binding:g,amount:y})=>{if(!p)return b$1("deposit-onchain","Wallet not connected.");if(!g.ContractAddress)return b$1("deposit-onchain","This token cannot be deposited.");if(!f.RewardPoolAddress)return b$1("deposit-onchain","POOL_NOT_IN_REGISTRY");let T;try{T=parseUnits(y,g.Decimals??9);}catch{return b$1("deposit-onchain","Invalid amount.")}return a$1({client:e,adapter:b$3(f,p),network:f,mint:g.ContractAddress,amountRaw:T,titleID:e.titleID})},withdraw:async({network:f,networkID:g,currencyID:y,amount:T})=>p?b({client:e,adapter:b$3(f,p),currencyID:y,networkID:g,walletAddress:p,amount:T}):b$1("request","Wallet not connected.")},onClose:a,style:n})}export{P as PlatformPoolError,Ce as SolanaWalletLogin,rt as SolanaWalletPanel,X as createPlatformPoolAdapter,$ as createSolanaWalletConfig,Te as useSolanaBridge};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@idosgames/wallet",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.2",
|
|
4
4
|
"description": "Wallet-bridge companion to @idosgames/core: connect browser & mobile wallets (EVM via wagmi/viem/WalletConnect, Solana via wallet-adapter) and move tokens/NFTs in and out of the game through client.blockchain.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
},
|
|
71
71
|
"//": "@idosgames/core не '*': опубликованный пакет обязан назвать диапазон, иначе установка wallet притянет любую версию core, включая будущую ломающую. На 0.x '^' даёт >=0.1.0 <0.2.0 — ровно ту зону, где core обещает совместимость (см. RELEASING.md). Поднимать при мажорном/минорном бампе core.",
|
|
72
72
|
"dependencies": {
|
|
73
|
-
"@idosgames/core": "^0.
|
|
73
|
+
"@idosgames/core": "^0.21.0",
|
|
74
74
|
"viem": "^2.55.2"
|
|
75
75
|
},
|
|
76
76
|
"peerDependencies": {
|