@idosgames/wallet 0.6.2 → 0.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -35,7 +35,7 @@ interface SolanaProgramAdapter {
35
35
  * from the instruction arguments and compares it byte-for-byte. So pass them all through, in
36
36
  * declaration order, and change nothing:
37
37
  *
38
- * `withdraw_spl(amount, burn_amount, nonce, expires_at, splits, user_id, title_id, category)`
38
+ * `withdraw_spl(amount, burn_amount, nonce, expires_at, splits, user_id, title_id, category, title_hash)`
39
39
  * — and `withdraw_spl_dev` when `Domain === "SPL_DEV"`; the two are
40
40
  * deliberately not interchangeable.
41
41
  *
@@ -35,7 +35,7 @@ interface SolanaProgramAdapter {
35
35
  * from the instruction arguments and compares it byte-for-byte. So pass them all through, in
36
36
  * declaration order, and change nothing:
37
37
  *
38
- * `withdraw_spl(amount, burn_amount, nonce, expires_at, splits, user_id, title_id, category)`
38
+ * `withdraw_spl(amount, burn_amount, nonce, expires_at, splits, user_id, title_id, category, title_hash)`
39
39
  * — and `withdraw_spl_dev` when `Domain === "SPL_DEV"`; the two are
40
40
  * deliberately not interchangeable.
41
41
  *
@@ -0,0 +1 @@
1
+ import {c}from'./chunk-K3THMWU2.js';import {PLATFORM_BRIDGE_ACK,PLATFORM_PAGE_UNAVAILABLE,askPlatformPage}from'@idosgames/core';var n={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:PLATFORM_BRIDGE_ACK,openRequest:"IDOS_PLATFORM_WALLET_OPEN_REQUEST",openResponse:"IDOS_PLATFORM_WALLET_OPEN_RESPONSE"},A=PLATFORM_PAGE_UNAVAILABLE;async function d(r,s,a){let t=await askPlatformPage(r,s,a),{address:e,signature:o}=t.data;return {ok:t.ok,error:t.error,address:typeof e=="string"?e:void 0,signature:typeof o=="string"?o:void 0}}async function k(){return (await d(n.openRequest,n.openResponse,{})).ok}async function E(r){let{client:s,networkID:a}=r;return P(r,async t=>{let e=await s.auth.requestWalletChallenge(t,a);return e.ok?{ok:true,message:e.data.Message}:{ok:false,error:e.error}},(t,e)=>s.auth.loginWithWallet(t,a,e))}async function S(r){let{client:s,networkID:a}=r;return P(r,async t=>{let e=await s.auth.linkWallet(t,a);return e.ok?e.data.Challenge?{ok:true,message:e.data.Challenge}:{ok:false,error:"No challenge was issued."}:{ok:false,error:e.error}},(t,e)=>s.auth.linkWallet(t,a,e))}async function P(r,s,a){let{client:t,family:e}=r,o=t.titleID,l=await d(n.addressRequest,n.addressResponse,{titleID:o,family:e});if(!l.ok||!l.address)return c("challenge",l.error??"NO_WALLET");let u=l.address,c$1=await s(u);if(!c$1.ok)return c("challenge",c$1.error);let g=await d(n.signRequest,n.signResponse,{titleID:o,family:e,address:u,message:c$1.message});if(!g.ok||!g.signature)return c("sign",g.error??"SIGN_FAILED");let L=await a(u,g.signature);return L.ok?{ok:true,data:L.data}:c("login",L.error)}export{n as a,A as b,k as c,E as d,S as e};
@@ -0,0 +1 @@
1
+ import {f,g}from'./chunk-K3THMWU2.js';import {useState,useEffect}from'react';function D(n){let[a,l]=useState(null);return useEffect(()=>{if(f()||g())return;let e=null;return n.checkout.setTopUpHandler(t=>new Promise(m=>{e?.(false);let r=false,o=p=>{r||(r=true,e===o&&(e=null),l(s=>s?.onDone===o?null:s),m(p));};e=o,l({currencyID:t.currencyID,amount:t.missingAmount??String(t.missing),onDone:o});})),()=>{n.checkout.setTopUpHandler(null),e?.(false);}},[n]),a}export{D as a};
@@ -0,0 +1,2 @@
1
+ import {a,b,d,e,h,g,f,c}from'./chunk-ZOWZE7MU.js';import {b as b$1}from'./chunk-K3THMWU2.js';import {useReducer,useState,useEffect,useMemo}from'react';import {jsxs,jsx,Fragment}from'react/jsx-runtime';var ue=null;function Ke(n){ue=n;}function _e(){return ue}var Ie=/^(Not enough confirmations|Transaction not found on chain)/,Te=8,Be=5e3;function Pe(n,r){let a=Math.max(0,Math.floor(r||0)),[d="0",s=""]=n.split(".");if(s.length<=a)return n;let u=s.slice(0,a),C=BigInt(d+u)+(/^0*$/.test(s.slice(a))?BigInt(0):BigInt(1));if(a===0)return C.toString();let w=C.toString().padStart(a+1,"0");return `${w.slice(0,-a)}.${w.slice(-a)}`.replace(/\.?0+$/,"")}function Z(n,r=6){let a=Number(n);return Number.isFinite(a)?a.toLocaleString("en-US",{maximumFractionDigits:Math.max(0,r)}).replace(/,/g," "):String(n)}var ye=n=>n.length>14?`${n.slice(0,6)}\u2026${n.slice(-4)}`:n,ge=n=>/^\d+(\.\d+)?$/.test(n)&&Number(n)>0;function Ye({client:n,engine:r,onClose:a$1,style:d$1,topUp:s}){let[,u]=useReducer(o=>o+1,0),[C,w]=useState(false),[v,B]=useState({}),[D,F]=useState({}),[P,be]=useState("deposit"),[m,ee]=useState(""),[y,te]=useState(""),[z,E]=useState(""),[O,ne]=useState(false),[V,j]=useState(null),[me,oe]=useState(false);useEffect(()=>{let o=true;return (async()=>{let[p]=await Promise.all([n.blockchain.getDefinitions(),n.cache.ensureState(["InventoryV2","Blockchain"])]);if(!o||(w(true),!p.ok))return;let c={};for(let[h,N]of Object.entries(p.data.Blockchain?.Networks??{}))N.Type===r.networkType&&(c[h]=N);B(c);let I=p.data.CryptoCurrencies??{};F(I);let W=s?I[s.currencyID]?.Networks?.find(h=>!!h.NetworkID&&!!c[h.NetworkID]&&!!h.ContractAddress&&h.DepositsEnabled!==false&&c[h.NetworkID]?.DepositsEnabled!==false)?.NetworkID:null;ee(W??Object.keys(c)[0]??"");})(),()=>{o=false;}},[n,r.networkType]),useEffect(()=>n.on("user:anyUpdated",u),[n]);let R=useMemo(()=>Object.entries(D).filter(([,o])=>o.Networks?.some(p=>p.NetworkID===m&&!!p.ContractAddress)),[D,m]);useEffect(()=>{let o=R[0]?.[0]??"";te(p=>s?s.currencyID:R.some(([c])=>c===p)?p:o);},[R,s]);let S=m?v[m]:void 0,A=y?D[y]:void 0,k=A?.Networks?.find(o=>o.NetworkID===m),K=y?n.data.user.getCryptoCurrencyAmount(y):"0",_=A?.DisplayName??y,H=y?A?.UnbackedRewardCurrencyID||`${y}_IOU`:"",he=H&&Number(n.data.user.state?.InventoryV2?.VirtualCurrencies?.[H]?.Amount??0)||0,we=!!H&&n.data.user.state?.InventoryV2?.VirtualCurrencies?.[H]!=null,ie=A?.DisplayDecimals??6,M=!!r.address,se=!!s&&!!k?.ContractAddress&&y===s.currencyID,L=s&&k?Pe(s.amount,k.Decimals??18):"",q=s?D[s.currencyID]?.DisplayName??s.currencyID:"",re=Number(k?.MinWithdraw??0);async function G(o,p){ne(true),j(null);try{let c=await p();return j({tab:o,res:c}),c.ok&&E(""),c}finally{ne(false);}}async function ae(o){let p=await le();if(!p)return b$1("approve",h("noNetworks"));let c=await r.deposit({...o,network:p});if(c.ok||c.stage!=="report"||!c.onChainTxHash)return c;let I=c.onChainTxHash,W=c.error;oe(true);try{for(let h=1;h<=Te&&Ie.test(W);h++){await new Promise(Ne=>setTimeout(Ne,Be));let N=await n.blockchain.depositToken(m,I);if(N.ok)return {ok:!0,onChainTxHash:I,data:N.data};if(/^Transaction hash already used/.test(N.error))return await n.cache.ensureState(["InventoryV2"],{force:!0}),{ok:!0,onChainTxHash:I,data:null};W=N.error;}}finally{oe(false);}return {...c,error:W}}async function le(){let o=await n.blockchain.getDefinitions({forceRefresh:true});return o.ok?o.data.Blockchain?.Networks?.[m]??null:null}async function ke(){let o=await le();return o?r.withdraw({network:o,networkID:m,currencyID:y,amount:z}):b$1("request",h("noNetworks"))}let U=me?h("confirming"):P==="withdraw"&&!s?h("withdrawing"):h("depositing"),xe=M?jsxs("div",{style:{...d,display:"flex",alignItems:"center",gap:10,padding:"8px 8px 8px 12px"},children:[jsx("span",{style:We,"aria-hidden":true}),jsxs("div",{style:{display:"grid",flex:1,minWidth:0},children:[jsx("span",{style:{...b,fontSize:15,fontFamily:"ui-monospace, Consolas, monospace"},children:ye(r.address)}),S?jsx("span",{style:{...g,fontSize:12},children:S.DisplayName??m}):null]}),jsx("button",{type:"button",className:"idos-press",style:$e,onClick:r.disconnect,children:h("disconnect")})]}):jsxs("div",{style:{display:"grid",gap:8},children:[jsx("span",{style:g,children:h("connectHint")}),r.connectChoices.length===0?jsx("div",{style:{...d,padding:"10px 12px",...g},children:h("notConfigured")}):r.connectChoices.length===1?jsx("button",{type:"button",className:"idos-press",style:{...e("blue",false,"lg"),width:"100%"},onClick:r.connectChoices[0].connect,children:h("connect")}):r.connectChoices.map(o=>jsxs("button",{type:"button",className:"idos-press",style:Ee,onClick:o.connect,children:[jsx("span",{style:{flex:1,textAlign:"left"},children:o.label}),jsx("span",{"aria-hidden":true,style:{color:a.textDim},children:"\u203A"})]},o.key))]}),de=y?jsx(Oe,{icon:jsx(Fe,{assets:A?.AssetPaths,name:_}),name:_,backed:Number(K)||0,unbacked:he,hasIou:we,decimals:ie}):null,Ce=jsxs(Fragment,{children:[Object.keys(v).length>1?jsx(fe,{caption:h("network"),value:m,onChange:ee,options:Object.entries(v).map(([o,p])=>[o,p.DisplayName??o])}):null,R.length===0?jsx("div",{style:{...d,padding:"10px 12px",...g},children:h("noTokens")}):R.length>1?jsx(fe,{caption:h("token"),value:y,onChange:te,options:R.map(([o,p])=>[o,p.DisplayName??o])}):null]}),ve=jsxs(Fragment,{children:[jsx(Ve,{value:P,onChange:o=>{be(o),j(null),E("");}}),Ce,jsxs("div",{style:{display:"grid",gap:6},children:[jsx("span",{style:g,children:h("amount")}),jsxs("div",{style:{...d,display:"flex",alignItems:"center",gap:8,padding:"4px 6px 4px 14px"},children:[jsx("input",{style:Me,inputMode:"decimal",placeholder:"0.0",value:z,onChange:o=>E(o.target.value.replace(",","."))}),jsx("span",{style:{...g,fontSize:14},children:_}),P==="withdraw"&&Number(K)>0?jsx("button",{type:"button",className:"idos-press",style:e("gold",false,"sm"),onClick:()=>E(String(K)),children:h("max")}):null]}),P==="withdraw"&&re>0?jsx("span",{style:{...g,fontSize:12},children:h("minWithdraw",{n:Z(re,ie)})}):null]}),P==="deposit"?jsx(X,{tone:"green",busy:O,busyText:U,disabled:!M||!k?.ContractAddress||!ge(z),onClick:()=>{!S||!k||G("deposit",()=>ae({network:S,binding:k,currencyID:y,amount:z}));},children:h("deposit")}):jsx(X,{tone:"blue",busy:O,busyText:U,disabled:!M||!y||!ge(z),onClick:()=>{S&&G("withdraw",()=>ke());},children:h("withdraw")})]}),Se=s?jsxs(Fragment,{children:[jsx("div",{style:{...f("gold"),padding:"12px 14px",display:"grid",gap:4},children:se?jsxs(Fragment,{children:[jsx("span",{style:{...b,color:"inherit",fontSize:13,opacity:.9},children:h("topUpNeed")}),jsxs("span",{style:{...b,color:"inherit",fontSize:24,lineHeight:1.1},children:[L," ",q," ",h("topUpMore")]}),jsx("span",{style:{fontSize:13,fontWeight:600,opacity:.95},children:h("topUpHint")})]}):jsx("span",{style:{...b,color:"inherit",fontSize:15},children:C?h("topUpCannot",{name:q}):h("loading")})}),de,jsx(X,{tone:"green",busy:O,busyText:U,disabled:!M||!se,onClick:()=>{!S||!k||G("deposit",()=>ae({network:S,binding:k,currencyID:y,amount:L})).then(o=>{o.ok&&s.onDone(true);});},children:h("depositAmount",{amount:L,name:q})})]}):null,ce=!!a$1;return jsxs("div",{style:{...Ae,...ce?{...c,padding:16,width:360,maxWidth:"100%",maxHeight:"80vh",overflow:"auto"}:{},...d$1},children:[jsx("style",{children:ze}),ce?jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[jsx("span",{style:{...b,fontSize:20},children:s?h("topUpTitle"):h("title")}),jsx("button",{type:"button",className:"idos-press",style:He,onClick:a$1,"aria-label":"\u2715",children:"\u2715"})]}):null,xe,C?Object.keys(v).length===0?jsx("div",{style:{...d,padding:"12px 14px",...g},children:h("noNetworks")}):s?Se:jsxs(Fragment,{children:[de,ve]}):jsx("div",{style:{...g,textAlign:"center",padding:12},children:h("loading")}),V?jsx(je,{tab:V.tab,result:V.res}):null]})}var ze="@keyframes idosw-spin { to { transform: rotate(360deg) } }",Ae={pointerEvents:"auto",color:a.text,fontFamily:a.font,display:"flex",flexDirection:"column",gap:12,boxSizing:"border-box",width:"100%",minWidth:0,maxWidth:"100%"},We={width:10,height:10,borderRadius:"50%",background:a.green,boxShadow:`0 0 0 3px color-mix(in srgb, ${a.green} 30%, transparent)`,flex:"none"},$e={...b,fontFamily:a.font,fontSize:13,color:a.textDim,background:"transparent",border:`2px solid ${a.line}`,borderRadius:10,padding:"5px 10px",cursor:"pointer"},Ee={...d,...b,fontFamily:a.font,fontSize:15,display:"flex",alignItems:"center",gap:10,padding:"10px 12px",cursor:"pointer",width:"100%"},He={...e("red",false,"sm"),width:36,minHeight:36,padding:0,borderRadius:"50%"},Me={...b,fontFamily:a.font,fontSize:22,flex:1,minWidth:0,background:"transparent",border:"none",outline:"none",padding:"6px 0"};function Fe({assets:n,name:r}){let a$1=n?.Default||n?.Icon||"",d={width:40,height:40,borderRadius:"50%",flex:"none",display:"grid",placeItems:"center",background:`linear-gradient(180deg, ${a.gold}, ${a.goldDeep})`,boxShadow:`0 3px 0 ${a.edge}`,overflow:"hidden",fontSize:22};return /^(https?:)?\/\/|^\//.test(a$1)?jsx("span",{style:d,children:jsx("img",{src:a$1,alt:"",style:{width:"100%",height:"100%",objectFit:"cover"}})}):jsx("span",{style:{...d,...b,fontSize:20},"aria-hidden":true,children:(r.trim()[0]??"?").toUpperCase()})}function Oe({icon:n,name:r,backed:a$1,unbacked:d$1,hasIou:s,decimals:u}){let[C,w]=useState(false),v=(B,D,F=false)=>jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:16},children:[jsx("span",{style:{...g,fontSize:13},children:B}),jsx("span",{style:{...b,fontSize:14,color:F?a.textDim:a.text},children:Z(D,u)})]});return jsxs("div",{style:{position:"relative"},onMouseEnter:()=>w(true),onMouseLeave:()=>w(false),children:[jsxs("button",{type:"button","aria-expanded":C,onClick:()=>w(B=>!B),onBlur:()=>w(false),style:{...d,display:"flex",alignItems:"center",gap:12,padding:"10px 14px",width:"100%",cursor:"pointer",font:"inherit",textAlign:"left"},children:[n,jsxs("span",{style:{display:"grid",minWidth:0,flex:1},children:[jsx("span",{style:{...g,fontSize:12},children:h("balance")}),jsxs("span",{style:{...b,fontSize:22,lineHeight:1.1},children:[Z(a$1+d$1,u)," ",jsx("span",{style:{fontSize:15,color:a.textDim},children:r})]})]}),jsx("span",{"aria-hidden":true,style:{...g,fontSize:16},children:"\u24D8"})]}),C?jsxs("div",{role:"tooltip",style:{...c,position:"absolute",left:0,right:0,top:"calc(100% + 6px)",zIndex:5,padding:"10px 12px",display:"grid",gap:6},children:[v(h("backed"),a$1),s?v(h("unbacked"),d$1,d$1===0):null,jsx("div",{style:{height:1,background:a.line}}),v(h("total"),a$1+d$1),jsx("span",{style:{fontSize:12,color:a.textDim,lineHeight:1.35},children:s?h("iouHint"):h("backedHint")})]}):null]})}function Ve({value:n,onChange:r}){let a$1=[["deposit",h("deposit")],["withdraw",h("withdraw")]];return jsx("div",{role:"tablist",style:{display:"flex",gap:6,padding:4,borderRadius:16,background:a.wellSoft},children:a$1.map(([d,s])=>{let u=d===n;return jsx("button",{role:"tab","aria-selected":u,type:"button",className:"idos-press",onClick:()=>!u&&r(d),style:{...b,fontFamily:a.font,fontSize:15,flex:1,border:"none",borderRadius:12,padding:"9px 14px",cursor:"pointer",color:u?a.onBlue:a.textDim,background:u?`linear-gradient(180deg, ${a.blue}, ${a.blueDeep})`:"transparent",boxShadow:u?`0 3px 0 ${a.edge}, inset 0 2px 0 rgba(255,255,255,.3)`:"none",transition:`background ${a.fast} ease`},children:s},d)})})}function fe({caption:n,value:r,onChange:a$1,options:d$1}){return jsxs("label",{style:{display:"grid",gap:6},children:[jsx("span",{style:g,children:n}),jsxs("span",{style:{position:"relative",display:"block"},children:[jsx("select",{value:r,onChange:s=>a$1(s.target.value),style:{...d,...b,fontFamily:a.font,fontSize:15,width:"100%",padding:"10px 36px 10px 12px",appearance:"none",WebkitAppearance:"none",cursor:"pointer",outline:"none"},children:d$1.map(([s,u])=>jsx("option",{value:s,style:{color:"#111"},children:u},s))}),jsx("span",{"aria-hidden":true,style:{position:"absolute",right:14,top:"50%",transform:"translateY(-50%)",color:a.textDim,pointerEvents:"none"},children:"\u25BE"})]})]})}function X({tone:n,busy:r,busyText:a,disabled:d,onClick:s,children:u}){return jsx("button",{type:"button",className:"idos-press",disabled:d||r,onClick:s,style:{...e(n,d&&!r,"lg"),width:"100%"},children:r?jsxs(Fragment,{children:[jsx("span",{"aria-hidden":true,style:{width:18,height:18,borderRadius:"50%",border:"3px solid rgba(255,255,255,.35)",borderTopColor:"#fff",animation:"idosw-spin .8s linear infinite"}}),a]}):u})}function je({tab:n,result:r}){let a$1=r.ok,d={borderRadius:14,padding:"10px 12px",display:"grid",gap:4,background:`color-mix(in srgb, ${a$1?a.green:a.red} 22%, transparent)`,border:`2px solid color-mix(in srgb, ${a$1?a.green:a.red} 60%, transparent)`,wordBreak:"break-word"};return a$1?jsxs("div",{style:d,role:"status",children:[jsxs("span",{style:{...b,fontSize:15},children:["\u2713 ",n==="withdraw"?h("doneWithdraw"):h("doneDeposit")]}),jsxs("span",{style:{...g,fontSize:12},children:[h("tx"),": ",ye(r.onChainTxHash)]})]}):jsxs("div",{style:d,role:"alert",children:[jsxs("span",{style:{...b,fontSize:15},children:["\u2715 ",h("failed")]}),jsx("span",{style:{fontSize:13,color:a.text,opacity:.9},children:r.error}),r.titleTransactionID?jsx("span",{style:{...g,fontSize:12},children:h("debited")}):null]})}
2
+ export{Ke as a,_e as b,Ye as c};
@@ -0,0 +1 @@
1
+ var e=(r,n)=>`var(--idos-ui-${r}, ${n})`,t={panel:e("panel","#2c3480"),panelDeep:e("panel-deep","#1d2360"),panelEdge:e("panel-edge","#4f5bc9"),text:e("text","#ffffff"),textDim:e("text-dim","#aeb6f0"),gold:e("gold","#ffd24a"),goldDeep:e("gold-deep","#e89a12"),green:e("green","#59d35b"),greenDeep:e("green-deep","#2b9936"),blue:e("blue","#4fb1ff"),blueDeep:e("blue-deep","#2276d6"),red:e("red","#ff5a5a"),redDeep:e("red-deep","#b83232"),onGreen:e("on-green","#ffffff"),onBlue:e("on-blue","#ffffff"),onGold:e("on-gold","#ffffff"),textOutline:e("text-outline","0 2px 0 rgba(0,0,0,.45), 0 0 1px rgba(0,0,0,.6)"),well:e("well","rgba(8, 10, 40, 0.6)"),wellSoft:e("well-soft","rgba(0, 0, 0, 0.3)"),wellShadow:e("well-shadow","inset 0 2px 4px rgba(0, 0, 0, 0.4)"),edge:e("edge","rgba(0, 0, 0, 0.35)"),line:e("line","rgba(255, 255, 255, 0.2)"),panelShadow:e("panel-shadow","0 6px 0 rgba(4, 6, 30, 0.55), inset 0 2px 0 rgba(255, 255, 255, 0.12)"),radius:e("radius","18px"),buttonRadius:e("button-radius","14px"),font:e("font","'Baloo 2', 'Nunito', 'Trebuchet MS', system-ui, sans-serif"),fast:e("fast","120ms")},p={green:[t.green,t.greenDeep,t.onGreen],blue:[t.blue,t.blueDeep,t.onBlue],gold:[t.gold,t.goldDeep,t.onGold],red:[t.red,t.redDeep,"#ffffff"]},l={color:t.text,fontWeight:800,textShadow:t.textOutline,letterSpacing:.2},u={boxSizing:"border-box",background:`linear-gradient(180deg, ${t.panel} 0%, ${t.panelDeep} 100%)`,border:`2px solid ${t.panelEdge}`,borderRadius:t.radius,boxShadow:t.panelShadow},b={boxSizing:"border-box",background:t.well,border:`2px solid ${t.panelEdge}`,boxShadow:t.wellShadow,borderRadius:14};function w(r,n=false,o="md"){let[i,a,s]=n?["#8e95b8","#5b6187","#ffffff"]:p[r];return {...l,color:s,boxSizing:"border-box",fontFamily:t.font,fontSize:o==="sm"?13:o==="lg"?18:16,border:"none",borderRadius:t.buttonRadius,padding:o==="sm"?"6px 12px":o==="lg"?"13px 22px":"10px 18px",minHeight:o==="sm"?34:o==="lg"?52:44,cursor:n?"default":"pointer",background:`linear-gradient(180deg, ${i} 0%, ${a} 100%)`,boxShadow:`0 4px 0 ${t.edge}, inset 0 2px 0 rgba(255,255,255,.35)`,opacity:n?.75:1,display:"inline-flex",alignItems:"center",justifyContent:"center",gap:8}}function x(r){let[n,o,i]=p[r];return {background:`linear-gradient(180deg, ${n} 0%, ${o} 100%)`,color:i,borderRadius:16,boxShadow:`0 4px 0 ${t.edge}, inset 0 2px 0 rgba(255,255,255,.3)`}}var h={...l,fontSize:13,color:t.textDim},g=["ru","kk","uk","be","ky","uz","tg"];function c(){if(typeof navigator>"u")return false;let r=(navigator.language||"").toLowerCase();return g.some(n=>r.startsWith(n))}var d={title:"Wallet",topUpTitle:"Top up to buy",connectHint:"Connect a wallet to deposit and withdraw",connect:"Connect wallet",notConfigured:"Wallet connection is not set up for this app.",disconnect:"Disconnect",balance:"In-game balance",deposit:"Deposit",withdraw:"Withdraw",network:"Network",token:"Token",amount:"Amount",max:"MAX",minWithdraw:"Minimum to withdraw: {n}",noNetworks:"Crypto is not set up for this app yet.",noTokens:"No tokens on this network.",depositing:"Confirm in your wallet\u2026",withdrawing:"Withdrawing\u2026",confirming:"Waiting for the network to confirm\u2026",loading:"Loading\u2026",doneDeposit:"Deposited \u2014 the balance is updated.",doneWithdraw:"Sent to your wallet.",topUpNeed:"This purchase needs",topUpMore:"more",topUpHint:"Deposit it from your wallet \u2014 the purchase completes by itself once it is credited.",topUpCannot:"{name} cannot be deposited here.",depositAmount:"Deposit {amount} {name}",failed:"Did not go through",debited:"The amount is already debited \u2014 retry this withdrawal, do not request a new one.",tx:"Transaction",backed:"Crypto (withdrawable)",unbacked:"IOU (not backed yet)",total:"Total",iouHint:"IOUs spend in the app like crypto, but you can withdraw only the backed part; the developer backs IOUs later.",backedHint:"All of it is real crypto and can be withdrawn."},f={title:"\u041A\u043E\u0448\u0435\u043B\u0451\u043A",topUpTitle:"\u041F\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 \u0434\u043B\u044F \u043F\u043E\u043A\u0443\u043F\u043A\u0438",connectHint:"\u041F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u0435 \u043A\u043E\u0448\u0435\u043B\u0451\u043A, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u043F\u043E\u043B\u043D\u044F\u0442\u044C \u0438 \u0432\u044B\u0432\u043E\u0434\u0438\u0442\u044C",connect:"\u041F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043A\u043E\u0448\u0435\u043B\u0451\u043A",notConfigured:"\u041F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 \u043A\u043E\u0448\u0435\u043B\u044C\u043A\u0430 \u0434\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u043D\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043D\u043E.",disconnect:"\u041E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u044C",balance:"\u0411\u0430\u043B\u0430\u043D\u0441 \u0432 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438",deposit:"\u041F\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u044C",withdraw:"\u0412\u044B\u0432\u0435\u0441\u0442\u0438",network:"\u0421\u0435\u0442\u044C",token:"\u0422\u043E\u043A\u0435\u043D",amount:"\u0421\u0443\u043C\u043C\u0430",max:"\u0412\u0421\u0401",minWithdraw:"\u041C\u0438\u043D\u0438\u043C\u0443\u043C \u0434\u043B\u044F \u0432\u044B\u0432\u043E\u0434\u0430: {n}",noNetworks:"\u041A\u0440\u0438\u043F\u0442\u0430 \u0434\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0435\u0449\u0451 \u043D\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043D\u0430.",noTokens:"\u0412 \u044D\u0442\u043E\u0439 \u0441\u0435\u0442\u0438 \u043D\u0435\u0442 \u0442\u043E\u043A\u0435\u043D\u043E\u0432.",depositing:"\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u0432 \u043A\u043E\u0448\u0435\u043B\u044C\u043A\u0435\u2026",withdrawing:"\u0412\u044B\u0432\u043E\u0434\u0438\u043C\u2026",confirming:"\u0416\u0434\u0451\u043C \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u044F \u0441\u0435\u0442\u0438\u2026",loading:"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430\u2026",doneDeposit:"\u041F\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u043E \u2014 \u0431\u0430\u043B\u0430\u043D\u0441 \u043E\u0431\u043D\u043E\u0432\u043B\u0451\u043D.",doneWithdraw:"\u041E\u0442\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043E \u043D\u0430 \u0432\u0430\u0448 \u043A\u043E\u0448\u0435\u043B\u0451\u043A.",topUpNeed:"\u0414\u043B\u044F \u043F\u043E\u043A\u0443\u043F\u043A\u0438 \u043D\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442",topUpMore:"",topUpHint:"\u041F\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435 \u0441 \u043A\u043E\u0448\u0435\u043B\u044C\u043A\u0430 \u2014 \u043F\u043E\u043A\u0443\u043F\u043A\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044F \u0441\u0430\u043C\u0430, \u043A\u0430\u043A \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 \u0437\u0430\u0447\u0438\u0441\u043B\u0438\u0442\u0441\u044F.",topUpCannot:"{name} \u0437\u0434\u0435\u0441\u044C \u043F\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u043D\u0435\u043B\u044C\u0437\u044F.",depositAmount:"\u041F\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u043D\u0430 {amount} {name}",failed:"\u041D\u0435 \u043F\u0440\u043E\u0448\u043B\u043E",debited:"\u0421\u0443\u043C\u043C\u0430 \u0443\u0436\u0435 \u0441\u043F\u0438\u0441\u0430\u043D\u0430 \u2014 \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0435 \u044D\u0442\u043E\u0442 \u0432\u044B\u0432\u043E\u0434, \u043D\u043E\u0432\u044B\u0439 \u043D\u0435 \u0437\u0430\u043F\u0440\u0430\u0448\u0438\u0432\u0430\u0439\u0442\u0435.",tx:"\u0422\u0440\u0430\u043D\u0437\u0430\u043A\u0446\u0438\u044F",backed:"\u041A\u0440\u0438\u043F\u0442\u0430 (\u043C\u043E\u0436\u043D\u043E \u0432\u044B\u0432\u0435\u0441\u0442\u0438)",unbacked:"\u0420\u0430\u0441\u043F\u0438\u0441\u043A\u0438 (\u043F\u043E\u043A\u0430 \u043D\u0435 \u043E\u0431\u0435\u0441\u043F\u0435\u0447\u0435\u043D\u044B)",total:"\u0412\u0441\u0435\u0433\u043E",iouHint:"\u0420\u0430\u0441\u043F\u0438\u0441\u043A\u0438 \u0442\u0440\u0430\u0442\u044F\u0442\u0441\u044F \u0432 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043A\u0430\u043A \u043A\u0440\u0438\u043F\u0442\u0430, \u043D\u043E \u0432\u044B\u0432\u0435\u0441\u0442\u0438 \u043C\u043E\u0436\u043D\u043E \u0442\u043E\u043B\u044C\u043A\u043E \u043E\u0431\u0435\u0441\u043F\u0435\u0447\u0435\u043D\u043D\u0443\u044E \u0447\u0430\u0441\u0442\u044C; \u0440\u0430\u0437\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A \u043E\u0431\u0435\u0441\u043F\u0435\u0447\u0438\u0442 \u0440\u0430\u0441\u043F\u0438\u0441\u043A\u0438 \u043F\u043E\u0437\u0436\u0435.",backedHint:"\u042D\u0442\u043E \u043D\u0430\u0441\u0442\u043E\u044F\u0449\u0430\u044F \u043A\u0440\u0438\u043F\u0442\u0430, \u0435\u0451 \u043C\u043E\u0436\u043D\u043E \u0432\u044B\u0432\u0435\u0441\u0442\u0438 \u0446\u0435\u043B\u0438\u043A\u043E\u043C."};function m(r,n){let o=(c()?f:d)[r]??d[r];for(let[i,a]of Object.entries(n??{}))o=o.replace(`{${i}}`,String(a));return o}export{t as a,l as b,u as c,b as d,w as e,x as f,h as g,m as h};
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var viem=require('viem'),core=require('@idosgames/core');function f(t){return t instanceof viem.BaseError?t.shortMessage:t instanceof Error?t.message:String(t)}function s(t,e,n){return {ok:false,stage:t,error:e,...n}}function g(t,e){return {ok:false,stage:t,error:e}}var C="WALLET_USE_SITE_PANEL",$=/^[a-z0-9]{8}-preview\.idos\.games$/;function B(t=typeof window>"u"?"":window.location.hostname){let e=t.toLowerCase();return $.test(e)?true:e!=="localhost"&&e!=="127.0.0.1"?false:globalThis.__IDOS_PREVIEW__!=null}function y(){if(typeof window>"u"||B())return false;try{return window.self!==window.top}catch{return true}}function Y(){if(typeof window>"u")return false;try{return window.parent!==window.top}catch{return true}}function w(t){return s(t,C)}function A(t){return g(t,C)}var z=core.PLATFORM_ORIGINS;function Z(t){if(typeof window>"u")return ()=>{};let e=n=>{z.includes(n.origin)&&n.data?.type==="IDOS_WALLET_BALANCE_CHANGED"&&t();};return window.addEventListener("message",e),()=>window.removeEventListener("message",e)}var E={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"},T="PLATFORM_WALLET_UNAVAILABLE",J=5e3,j=18e4;function X(){let t=[...core.PLATFORM_ORIGINS],e=window.location.ancestorOrigins?.[0];return e&&!t.includes(e)&&core.isPlatformParentOrigin(e)&&t.push(e),t}function ee(){return `wallet-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function D(t,e,n){if(typeof window>"u"||window.self===window.top)return Promise.resolve({ok:false,error:T});let r=window.parent;if(!r)return Promise.resolve({ok:false,error:T});let o=ee();return new Promise(i=>{let p=false,l,a=d=>{p||(p=true,window.removeEventListener("message",u),clearTimeout(l),i(d));},u=d=>{if(!core.isPlatformParentOrigin(d.origin))return;let c=d.data;if(!(!c||c.requestId!==o)){if(c.type===E.ack){clearTimeout(l),l=setTimeout(()=>a({ok:false,error:"TIMEOUT"}),j);return}c.type===e&&a({ok:c.ok===true,error:typeof c.error=="string"?c.error:void 0,address:typeof c.address=="string"?c.address:void 0,signature:typeof c.signature=="string"?c.signature:void 0});}};l=setTimeout(()=>a({ok:false,error:T}),J),window.addEventListener("message",u);for(let d of X())try{r.postMessage({type:t,requestId:o,...n},d);}catch{}})}async function te(){return (await D(E.openRequest,E.openResponse,{})).ok}async function ne(t){let{client:e,networkID:n}=t;return M(t,async r=>{let o=await e.auth.requestWalletChallenge(r,n);return o.ok?{ok:true,message:o.data.Message}:{ok:false,error:o.error}},(r,o)=>e.auth.loginWithWallet(r,n,o))}async function ae(t){let{client:e,networkID:n}=t;return M(t,async r=>{let o=await e.auth.linkWallet(r,n);return o.ok?o.data.Challenge?{ok:true,message:o.data.Challenge}:{ok:false,error:"No challenge was issued."}:{ok:false,error:o.error}},(r,o)=>e.auth.linkWallet(r,n,o))}async function M(t,e,n){let{client:r,family:o}=t,i=r.titleID,p=await D(E.addressRequest,E.addressResponse,{titleID:i,family:o});if(!p.ok||!p.address)return g("challenge",p.error??"NO_WALLET");let l=p.address,a=await e(l);if(!a.ok)return g("challenge",a.error);let u=await D(E.signRequest,E.signResponse,{titleID:i,family:o,address:l,message:a.message});if(!u.ok||!u.signature)return g("sign",u.error??"SIGN_FAILED");let d=await n(l,u.signature);return d.ok?{ok:true,data:d.data}:g("login",d.error)}var re={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"}}},oe={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"}}},ie={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"}}},se={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"}}},le={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"}}},de={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"}}},ce={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"}}},pe={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"}}},ue={mainnet:re,bsc:oe,polygon:ie,base:se,arbitrum:le,optimism:de,sepolia:ce,polygonAmoy:pe};function Oe(t){return Object.values(ue).find(e=>e.id===t)}function He(t){return {...t,chainNamespace:"eip155",caipNetworkId:`eip155:${t.id}`}}var Ge={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"},qe={id:"EtWTRABZaYq6iMfeYKouRu166VU2xqa1",name:"Solana Devnet",network:"solana-devnet",nativeCurrency:{name:"Solana",symbol:"SOL",decimals:9},rpcUrls:{default:{http:["https://api.devnet.solana.com"]}},blockExplorers:{default:{name:"Solscan",url:"https://solscan.io"}},testnet:true,chainNamespace:"solana",caipNetworkId:"solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1"};var b=[{type:"function",name:"depositERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"amount",type:"uint256"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"withdrawERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"amount",type:"uint256"},{name:"burnAmount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{name:"amount",type:"uint256"}]},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC1155",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{name:"amount",type:"uint256"}]},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],P=[{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:[]}],x=[{type:"function",name:"approve",stateMutability:"nonpayable",inputs:[{name:"spender",type:"address"},{name:"amount",type:"uint256"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"allowance",stateMutability:"view",inputs:[{name:"owner",type:"address"},{name:"spender",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"decimals",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint8"}]},{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]}],v=[{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"}]}],S=[{type:"function",name:"safeTransferFrom",stateMutability:"nonpayable",inputs:[{name:"from",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]}];function I(t,e,n){return viem.encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[t,e,core.normalizeBlockchainCategory(n)])}async function k(t,e){let{walletClient:n,publicClient:r,account:o}=t,i=await n.writeContract({address:e.address,abi:e.abi,functionName:e.functionName,args:e.args,account:o,chain:n.chain,value:e.value});if((await r.waitForTransactionReceipt({hash:i})).status==="reverted")throw new Error(`On-chain transaction reverted (${i}).`);return i}function R(t){let e=t.RewardPoolAddress;return e||null}async function L(t,e,n,r){return await t.publicClient.readContract({address:e,abi:x,functionName:"allowance",args:[t.account,n]})>=r?null:k(t,{address:e,abi:x,functionName:"approve",args:[n,r]})}async function N(t){let{client:e,clients:n,network:r,tokenAddress:o,amount:i,titleID:p,category:l}=t;if(y())return w("approve");let a=e.auth.context?.userID;if(!a)return s("approve","Not logged in.");let u=R(r);if(!u)return s("approve","Network has no RewardPoolAddress.");if(i<=0n)return s("approve","Amount must be positive.");try{await L(n,o,u,i);}catch(m){return s("approve",f(m))}let d;try{d=await k(n,{address:u,abi:b,functionName:"depositERC20",args:[o,i,a,p,l??""]});}catch(m){return s("deposit-onchain",f(m))}let c=await e.blockchain.depositToken(r.NetworkID??"",d);return c.ok?{ok:true,onChainTxHash:d,data:c.data}:s("report",c.error,{onChainTxHash:d})}async function fe(t){let{clients:e,poolAddress:n,tokenAddress:r,amount:o,userID:i,titleID:p,category:l}=t;if(y())return w("approve");if(!i)return s("approve","userID is required.");if(o<=0n)return s("approve","Amount must be positive.");try{await L(e,r,n,o);}catch(a){return s("approve",f(a))}try{let a=await k(e,{address:n,abi:b,functionName:"depositERC20",args:[r,o,i,p,l??""]});return {ok:!0,onChainTxHash:a,data:{txHash:a}}}catch(a){return s("deposit-onchain",f(a))}}async function ye(t){let{client:e,clients:n,network:r,nftContractAddress:o,tokenId:i,amount:p,titleID:l,category:a}=t;if(y())return w("deposit-onchain");let u=e.auth.context?.userID;if(!u)return s("deposit-onchain","Not logged in.");let d=R(r);if(!d)return s("deposit-onchain","Network has no RewardPoolAddress.");if(p<=0n)return s("deposit-onchain","Amount must be positive.");let c=I(u,l,a),m;try{m=await k(n,{address:o,abi:v,functionName:"safeTransferFrom",args:[n.account,d,i,p,c]});}catch(W){return s("deposit-onchain",f(W))}let h=await e.blockchain.depositNFT(r.NetworkID??"",m);return h.ok?{ok:true,onChainTxHash:m,data:h.data}:s("report",h.error,{onChainTxHash:m})}async function he(t){let{client:e,clients:n,network:r,nftContractAddress:o,tokenId:i,titleID:p,category:l}=t;if(y())return w("deposit-onchain");let a=e.auth.context?.userID;if(!a)return s("deposit-onchain","Not logged in.");let u=R(r);if(!u)return s("deposit-onchain","Network has no RewardPoolAddress.");let d=I(a,p,l),c;try{c=await k(n,{address:o,abi:S,functionName:"safeTransferFrom",args:[n.account,u,i,d]});}catch(h){return s("deposit-onchain",f(h))}let m=await e.blockchain.depositNFT(r.NetworkID??"",c);return m.ok?{ok:true,onChainTxHash:c,data:m.data}:s("report",m.error,{onChainTxHash:c})}function _(t){return (t.Splits??[]).map(e=>({to:e.To,amount:BigInt(e.Amount??"0")}))}async function O(t,e){return k(t,{address:e.ContractAddress,abi:b,functionName:"withdrawERC20",args:[e.TokenAddress,e.WalletAddress,BigInt(e.Amount??"0"),BigInt(e.BurnAmount??"0"),_(e),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function H(t,e){return k(t,{address:e.ContractAddress,abi:P,functionName:"withdrawERC1155Mint",args:[e.TokenAddress,e.WalletAddress,BigInt(e.TokenId??"0"),BigInt(e.Amount??"0"),_(e),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function we(t,e){return k(t,{address:e.ContractAddress,abi:P,functionName:"withdrawERC721Mint",args:[e.TokenAddress,e.WalletAddress,BigInt(e.TokenId??"0"),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function ke(t){let{client:e,clients:n,currencyID:r,networkID:o,walletAddress:i,amount:p,category:l}=t;if(y())return w("request");let a=await e.blockchain.requestTokenWithdrawal(r,o,i,p,l);if(!a.ok)return s("request",a.error);let u=a.data.EvmSignature,d=a.data.TitleTransactionID??void 0;if(!u)return s("request","Withdrawal response carried no EVM signature.",{titleTransactionID:d});let c;try{c=await O(n,u);}catch(h){return s("withdraw-onchain",f(h),{titleTransactionID:d})}let m=await G(e,d,c);return m.ok?{ok:true,onChainTxHash:c,data:a.data}:m}async function Ee(t){let{client:e,clients:n,itemID:r,networkID:o,walletAddress:i,amount:p,category:l}=t;if(y())return w("request");let a=await e.blockchain.requestNFTWithdrawal(r,o,i,p,l);if(!a.ok)return s("request",a.error);let u=a.data.EvmSignature,d=a.data.TitleTransactionID??void 0;if(!u)return s("request","Withdrawal response carried no EVM signature.",{titleTransactionID:d});let c;try{c=await H(n,u);}catch(h){return s("withdraw-onchain",f(h),{titleTransactionID:d})}let m=await G(e,d,c);return m.ok?{ok:true,onChainTxHash:c,data:a.data}:m}async function G(t,e,n){if(!e)return s("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let r=await t.blockchain.confirmWithdrawal(e,n);return r.ok?{ok:true,onChainTxHash:n,data:r.data}:s("confirm",r.error,{onChainTxHash:n,titleTransactionID:e})}async function Ae(t){let{client:e,clients:n,networkID:r}=t;if(y())return A("challenge");let o=t.walletAddress??n.account,i=await e.auth.requestWalletChallenge(o,r);if(!i.ok)return g("challenge",i.error);let p;try{p=await n.walletClient.signMessage({account:n.account,message:i.data.Message});}catch(a){return g("sign",f(a))}let l=await e.auth.loginWithWallet(o,r,p);return l.ok?{ok:true,data:l.data}:g("login",l.error)}async function be(t){let{client:e,clients:n,networkID:r}=t;if(y())return A("challenge");let o=t.walletAddress??n.account,i=await e.auth.linkWallet(o,r);if(!i.ok)return g("challenge",i.error);if(!i.data.Challenge)return g("challenge","No challenge was issued.");let p;try{p=await n.walletClient.signMessage({account:n.account,message:i.data.Challenge});}catch(a){return g("sign",f(a))}let l=await e.auth.linkWallet(o,r,p);return l.ok?{ok:true,data:l.data}:g("login",l.error)}async function Te(t){let{client:e,clients:n,network:r,tokenAddress:o,decimals:i,titleID:p,shortfall:l,completePurchase:a,bufferRatio:u=0,category:d}=t;if(y())return w("approve");if(l.missing<=0)return s("approve","Nothing to deposit.");let c=l.missing*(1+Math.max(0,u)),m;try{m=viem.parseUnits(xe(c,i),i);}catch(U){return s("approve",f(U))}let h=await N({client:e,clients:n,network:r,tokenAddress:o,amount:m,titleID:p,category:d});if(!h.ok)return h;let W=await a();return W.ok?{ok:true,onChainTxHash:h.onChainTxHash,data:W.data}:s("report",W.error,{onChainTxHash:h.onChainTxHash})}function xe(t,e){return t.toFixed(Math.min(e,18)).replace(/0+$/,"").replace(/\.$/,"")||"0"}async function Ce(t){let{client:e,adapter:n,network:r,mint:o,amountRaw:i,titleID:p,category:l}=t;if(y())return w("deposit-onchain");let a=e.auth.context?.userID;if(!a)return s("deposit-onchain","Not logged in.");if(i<=0n)return s("deposit-onchain","Amount must be positive.");let u;try{u=await n.depositSpl({mint:o,amountRaw:i,userID:a,titleID:p,category:core.normalizeBlockchainCategory(l)});}catch(c){return s("deposit-onchain",f(c))}let d=await e.blockchain.depositToken(r.NetworkID??"",u);return d.ok?{ok:true,onChainTxHash:u,data:d.data}:s("report",d.error,{onChainTxHash:u})}async function De(t){let{client:e,adapter:n,currencyID:r,networkID:o,walletAddress:i,amount:p,category:l}=t;if(y())return w("request");let a=await e.blockchain.requestTokenWithdrawal(r,o,i,p,l);if(!a.ok)return s("request",a.error);let u=a.data.SolanaSignature,d=a.data.TitleTransactionID??void 0;if(!u)return s("request","Withdrawal response carried no Solana signature.",{titleTransactionID:d});let c;try{c=await n.submitWithdrawal(u);}catch(h){return s("withdraw-onchain",f(h),{titleTransactionID:d})}if(!d)return s("confirm","Missing TitleTransactionID.",{onChainTxHash:c});let m=await e.blockchain.confirmWithdrawal(d,c);return m.ok?{ok:true,onChainTxHash:c,data:a.data}:s("confirm",m.error,{onChainTxHash:c,titleTransactionID:d})}async function Pe(t){let{client:e,networkID:n,walletAddress:r,signMessage:o}=t;if(y())return A("challenge");let i=await e.auth.requestWalletChallenge(r,n);if(!i.ok)return g("challenge",i.error);let p;try{let a=await o(new TextEncoder().encode(i.data.Message));p=q(a);}catch(a){return g("sign",f(a))}let l=await e.auth.loginWithWallet(r,n,p);return l.ok?{ok:true,data:l.data}:g("login",l.error)}async function ve(t){let{client:e,networkID:n,walletAddress:r,signMessage:o}=t;if(y())return A("challenge");let i=await e.auth.linkWallet(r,n);if(!i.ok)return g("challenge",i.error);if(!i.data.Challenge)return g("challenge","No challenge was issued.");let p;try{let a=await o(new TextEncoder().encode(i.data.Challenge));p=q(a);}catch(a){return g("sign",f(a))}let l=await e.auth.linkWallet(r,n,p);return l.ok?{ok:true,data:l.data}:g("login",l.error)}function q(t){let e="0x";for(let n of t)e+=n.toString(16).padStart(2,"0");return e}
2
- exports.PLATFORM_WALLET_MESSAGES=E;exports.PLATFORM_WALLET_UNAVAILABLE=T;exports.WALLET_USE_SITE_PANEL=C;exports.arbitrum=le;exports.base=se;exports.bridgeFail=s;exports.bsc=oe;exports.chainById=Oe;exports.depositNftEvm=ye;exports.depositNftEvm721=he;exports.depositTokenEvm=N;exports.depositTokenOnChainEvm=fe;exports.depositTokenSolana=Ce;exports.encodeNftDepositData=I;exports.ensureErc20Allowance=L;exports.erc1155Abi=v;exports.erc20Abi=x;exports.erc721Abi=S;exports.idosChains=ue;exports.isAiCoderPreview=B;exports.isEmbeddedInPlatform=y;exports.isEmbeddedOnForeignSite=Y;exports.linkWalletEvm=be;exports.linkWalletSolana=ve;exports.linkWalletViaPlatform=ae;exports.loginWithWalletEvm=Ae;exports.loginWithWalletSolana=Pe;exports.loginWithWalletViaPlatform=ne;exports.mainnet=re;exports.onWalletBalanceChanged=Z;exports.openPlatformWalletPanel=te;exports.optimism=de;exports.payWithWalletEvm=Te;exports.polygon=ie;exports.polygonAmoy=pe;exports.rewardPoolAbi=b;exports.sepolia=ce;exports.solanaDevnet=qe;exports.solanaMainnet=Ge;exports.submitEvmNftWithdrawal=H;exports.submitEvmNftWithdrawal721=we;exports.submitEvmTokenWithdrawal=O;exports.toAppKitNetwork=He;exports.toErrorMessage=f;exports.walletLoginFail=g;exports.withdrawNftEvm=Ee;exports.withdrawTokenEvm=ke;exports.withdrawTokenSolana=De;exports.writeAndWait=k;
1
+ 'use strict';var viem=require('viem'),core=require('@idosgames/core');function f(t){return t instanceof viem.BaseError?t.shortMessage:t instanceof Error?t.message:String(t)}function s(t,e,n){return {ok:false,stage:t,error:e,...n}}function g(t,e){return {ok:false,stage:t,error:e}}var I="WALLET_USE_SITE_PANEL",V=/^[a-z0-9]{8}-preview\.idos\.games$/;function N(t=typeof window>"u"?"":window.location.hostname){let e=t.toLowerCase();return V.test(e)?true:e!=="localhost"&&e!=="127.0.0.1"?false:globalThis.__IDOS_PREVIEW__!=null}function y(){if(typeof window>"u"||N())return false;try{return window.self!==window.top}catch{return true}}function K(){if(typeof window>"u")return false;try{return window.parent!==window.top}catch{return true}}function w(t){return s(t,I)}function A(t){return g(t,I)}var $=core.PLATFORM_ORIGINS;function Y(t){if(typeof window>"u")return ()=>{};let e=n=>{$.includes(n.origin)&&n.data?.type==="IDOS_WALLET_BALANCE_CHANGED"&&t();};return window.addEventListener("message",e),()=>window.removeEventListener("message",e)}var E={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:core.PLATFORM_BRIDGE_ACK,openRequest:"IDOS_PLATFORM_WALLET_OPEN_REQUEST",openResponse:"IDOS_PLATFORM_WALLET_OPEN_RESPONSE"},J=core.PLATFORM_PAGE_UNAVAILABLE;async function C(t,e,n){let a=await core.askPlatformPage(t,e,n),{address:o,signature:i}=a.data;return {ok:a.ok,error:a.error,address:typeof o=="string"?o:void 0,signature:typeof i=="string"?i:void 0}}async function j(){return (await C(E.openRequest,E.openResponse,{})).ok}async function X(t){let{client:e,networkID:n}=t;return B(t,async a=>{let o=await e.auth.requestWalletChallenge(a,n);return o.ok?{ok:true,message:o.data.Message}:{ok:false,error:o.error}},(a,o)=>e.auth.loginWithWallet(a,n,o))}async function ee(t){let{client:e,networkID:n}=t;return B(t,async a=>{let o=await e.auth.linkWallet(a,n);return o.ok?o.data.Challenge?{ok:true,message:o.data.Challenge}:{ok:false,error:"No challenge was issued."}:{ok:false,error:o.error}},(a,o)=>e.auth.linkWallet(a,n,o))}async function B(t,e,n){let{client:a,family:o}=t,i=a.titleID,d=await C(E.addressRequest,E.addressResponse,{titleID:i,family:o});if(!d.ok||!d.address)return g("challenge",d.error??"NO_WALLET");let l=d.address,r=await e(l);if(!r.ok)return g("challenge",r.error);let p=await C(E.signRequest,E.signResponse,{titleID:i,family:o,address:l,message:r.message});if(!p.ok||!p.signature)return g("sign",p.error??"SIGN_FAILED");let c=await n(l,p.signature);return c.ok?{ok:true,data:c.data}:g("login",c.error)}var te={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"}}},ne={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"}}},ae={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"}}},re={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"}}},oe={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"}}},ie={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"}}},se={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"}}},le={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"}}},de={mainnet:te,bsc:ne,polygon:ae,base:re,arbitrum:oe,optimism:ie,sepolia:se,polygonAmoy:le};function Fe(t){return Object.values(de).find(e=>e.id===t)}function Me(t){return {...t,chainNamespace:"eip155",caipNetworkId:`eip155:${t.id}`}}var _e={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"},He={id:"EtWTRABZaYq6iMfeYKouRu166VU2xqa1",name:"Solana Devnet",network:"solana-devnet",nativeCurrency:{name:"Solana",symbol:"SOL",decimals:9},rpcUrls:{default:{http:["https://api.devnet.solana.com"]}},blockExplorers:{default:{name:"Solscan",url:"https://solscan.io"}},testnet:true,chainNamespace:"solana",caipNetworkId:"solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1"};var b=[{type:"function",name:"depositERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"amount",type:"uint256"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"withdrawERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"amount",type:"uint256"},{name:"burnAmount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{name:"amount",type:"uint256"}]},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC1155",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{name:"amount",type:"uint256"}]},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],D=[{type:"function",name:"withdrawERC1155Mint",stateMutability:"nonpayable",inputs:[{name:"collection",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"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:[]}],x=[{type:"function",name:"approve",stateMutability:"nonpayable",inputs:[{name:"spender",type:"address"},{name:"amount",type:"uint256"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"allowance",stateMutability:"view",inputs:[{name:"owner",type:"address"},{name:"spender",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"decimals",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint8"}]},{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]}],P=[{type:"function",name:"safeTransferFrom",stateMutability:"nonpayable",inputs:[{name:"from",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]},{type:"function",name:"isApprovedForAll",stateMutability:"view",inputs:[{name:"account",type:"address"},{name:"operator",type:"address"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"setApprovalForAll",stateMutability:"nonpayable",inputs:[{name:"operator",type:"address"},{name:"approved",type:"bool"}],outputs:[]},{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"},{name:"id",type:"uint256"}],outputs:[{name:"",type:"uint256"}]}],v=[{type:"function",name:"safeTransferFrom",stateMutability:"nonpayable",inputs:[{name:"from",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]}];function T(t,e,n){return viem.encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[t,e,core.normalizeBlockchainCategory(n)])}async function k(t,e){let{walletClient:n,publicClient:a,account:o}=t,i=await n.writeContract({address:e.address,abi:e.abi,functionName:e.functionName,args:e.args,account:o,chain:n.chain,value:e.value});if((await a.waitForTransactionReceipt({hash:i})).status==="reverted")throw new Error(`On-chain transaction reverted (${i}).`);return i}function S(t){let e=t.RewardPoolAddress;return e||null}async function R(t,e,n,a){return await t.publicClient.readContract({address:e,abi:x,functionName:"allowance",args:[t.account,n]})>=a?null:k(t,{address:e,abi:x,functionName:"approve",args:[n,a]})}async function L(t){let{client:e,clients:n,network:a,tokenAddress:o,amount:i,titleID:d,category:l}=t;if(y())return w("approve");let r=e.auth.context?.userID;if(!r)return s("approve","Not logged in.");let p=S(a);if(!p)return s("approve","Network has no RewardPoolAddress.");if(i<=0n)return s("approve","Amount must be positive.");try{await R(n,o,p,i);}catch(m){return s("approve",f(m))}let c;try{c=await k(n,{address:p,abi:b,functionName:"depositERC20",args:[o,i,r,d,l??""]});}catch(m){return s("deposit-onchain",f(m))}let u=await e.blockchain.depositToken(a.NetworkID??"",c);return u.ok?{ok:true,onChainTxHash:c,data:u.data}:s("report",u.error,{onChainTxHash:c})}async function ue(t){let{clients:e,poolAddress:n,tokenAddress:a,amount:o,userID:i,titleID:d,category:l}=t;if(y())return w("approve");if(!i)return s("approve","userID is required.");if(o<=0n)return s("approve","Amount must be positive.");try{await R(e,a,n,o);}catch(r){return s("approve",f(r))}try{let r=await k(e,{address:n,abi:b,functionName:"depositERC20",args:[a,o,i,d,l??""]});return {ok:!0,onChainTxHash:r,data:{txHash:r}}}catch(r){return s("deposit-onchain",f(r))}}async function me(t){let{client:e,clients:n,network:a,nftContractAddress:o,tokenId:i,amount:d,titleID:l,category:r}=t;if(y())return w("deposit-onchain");let p=e.auth.context?.userID;if(!p)return s("deposit-onchain","Not logged in.");let c=S(a);if(!c)return s("deposit-onchain","Network has no RewardPoolAddress.");if(d<=0n)return s("deposit-onchain","Amount must be positive.");let u=T(p,l,r),m;try{m=await k(n,{address:o,abi:P,functionName:"safeTransferFrom",args:[n.account,c,i,d,u]});}catch(W){return s("deposit-onchain",f(W))}let h=await e.blockchain.depositNFT(a.NetworkID??"",m);return h.ok?{ok:true,onChainTxHash:m,data:h.data}:s("report",h.error,{onChainTxHash:m})}async function ge(t){let{client:e,clients:n,network:a,nftContractAddress:o,tokenId:i,titleID:d,category:l}=t;if(y())return w("deposit-onchain");let r=e.auth.context?.userID;if(!r)return s("deposit-onchain","Not logged in.");let p=S(a);if(!p)return s("deposit-onchain","Network has no RewardPoolAddress.");let c=T(r,d,l),u;try{u=await k(n,{address:o,abi:v,functionName:"safeTransferFrom",args:[n.account,p,i,c]});}catch(h){return s("deposit-onchain",f(h))}let m=await e.blockchain.depositNFT(a.NetworkID??"",u);return m.ok?{ok:true,onChainTxHash:u,data:m.data}:s("report",m.error,{onChainTxHash:u})}function F(t){return (t.Splits??[]).map(e=>({to:e.To,amount:BigInt(e.Amount??"0")}))}async function M(t,e){return k(t,{address:e.ContractAddress,abi:b,functionName:"withdrawERC20",args:[e.TokenAddress,e.WalletAddress,BigInt(e.Amount??"0"),BigInt(e.BurnAmount??"0"),F(e),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function _(t,e){return k(t,{address:e.ContractAddress,abi:D,functionName:"withdrawERC1155Mint",args:[e.TokenAddress,e.WalletAddress,BigInt(e.TokenId??"0"),BigInt(e.Amount??"0"),F(e),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function fe(t,e){return k(t,{address:e.ContractAddress,abi:D,functionName:"withdrawERC721Mint",args:[e.TokenAddress,e.WalletAddress,BigInt(e.TokenId??"0"),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function ye(t){let{client:e,clients:n,currencyID:a,networkID:o,walletAddress:i,amount:d,category:l}=t;if(y())return w("request");let r=await e.blockchain.requestTokenWithdrawal(a,o,i,d,l);if(!r.ok)return s("request",r.error);let p=r.data.EvmSignature,c=r.data.TitleTransactionID??void 0;if(!p)return s("request","Withdrawal response carried no EVM signature.",{titleTransactionID:c});let u;try{u=await M(n,p);}catch(h){return s("withdraw-onchain",f(h),{titleTransactionID:c})}let m=await H(e,c,u);return m.ok?{ok:true,onChainTxHash:u,data:r.data}:m}async function he(t){let{client:e,clients:n,itemID:a,networkID:o,walletAddress:i,amount:d,category:l}=t;if(y())return w("request");let r=await e.blockchain.requestNFTWithdrawal(a,o,i,d,l);if(!r.ok)return s("request",r.error);let p=r.data.EvmSignature,c=r.data.TitleTransactionID??void 0;if(!p)return s("request","Withdrawal response carried no EVM signature.",{titleTransactionID:c});let u;try{u=await _(n,p);}catch(h){return s("withdraw-onchain",f(h),{titleTransactionID:c})}let m=await H(e,c,u);return m.ok?{ok:true,onChainTxHash:u,data:r.data}:m}async function H(t,e,n){if(!e)return s("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let a=await t.blockchain.confirmWithdrawal(e,n);return a.ok?{ok:true,onChainTxHash:n,data:a.data}:s("confirm",a.error,{onChainTxHash:n,titleTransactionID:e})}async function we(t){let{client:e,clients:n,networkID:a}=t;if(y())return A("challenge");let o=t.walletAddress??n.account,i=await e.auth.requestWalletChallenge(o,a);if(!i.ok)return g("challenge",i.error);let d;try{d=await n.walletClient.signMessage({account:n.account,message:i.data.Message});}catch(r){return g("sign",f(r))}let l=await e.auth.loginWithWallet(o,a,d);return l.ok?{ok:true,data:l.data}:g("login",l.error)}async function ke(t){let{client:e,clients:n,networkID:a}=t;if(y())return A("challenge");let o=t.walletAddress??n.account,i=await e.auth.linkWallet(o,a);if(!i.ok)return g("challenge",i.error);if(!i.data.Challenge)return g("challenge","No challenge was issued.");let d;try{d=await n.walletClient.signMessage({account:n.account,message:i.data.Challenge});}catch(r){return g("sign",f(r))}let l=await e.auth.linkWallet(o,a,d);return l.ok?{ok:true,data:l.data}:g("login",l.error)}async function Ae(t){let{client:e,clients:n,network:a,tokenAddress:o,decimals:i,titleID:d,shortfall:l,completePurchase:r,bufferRatio:p=0,category:c}=t;if(y())return w("approve");if(l.missing<=0)return s("approve","Nothing to deposit.");let u=l.missing*(1+Math.max(0,p)),m;try{m=viem.parseUnits(be(u,i),i);}catch(G){return s("approve",f(G))}let h=await L({client:e,clients:n,network:a,tokenAddress:o,amount:m,titleID:d,category:c});if(!h.ok)return h;let W=await r();return W.ok?{ok:true,onChainTxHash:h.onChainTxHash,data:W.data}:s("report",W.error,{onChainTxHash:h.onChainTxHash})}function be(t,e){return t.toFixed(Math.min(e,18)).replace(/0+$/,"").replace(/\.$/,"")||"0"}async function xe(t){let{client:e,adapter:n,network:a,mint:o,amountRaw:i,titleID:d,category:l}=t;if(y())return w("deposit-onchain");let r=e.auth.context?.userID;if(!r)return s("deposit-onchain","Not logged in.");if(i<=0n)return s("deposit-onchain","Amount must be positive.");let p;try{p=await n.depositSpl({mint:o,amountRaw:i,userID:r,titleID:d,category:core.normalizeBlockchainCategory(l)});}catch(u){return s("deposit-onchain",f(u))}let c=await e.blockchain.depositToken(a.NetworkID??"",p);return c.ok?{ok:true,onChainTxHash:p,data:c.data}:s("report",c.error,{onChainTxHash:p})}async function Te(t){let{client:e,adapter:n,currencyID:a,networkID:o,walletAddress:i,amount:d,category:l}=t;if(y())return w("request");let r=await e.blockchain.requestTokenWithdrawal(a,o,i,d,l);if(!r.ok)return s("request",r.error);let p=r.data.SolanaSignature,c=r.data.TitleTransactionID??void 0;if(!p)return s("request","Withdrawal response carried no Solana signature.",{titleTransactionID:c});let u;try{u=await n.submitWithdrawal(p);}catch(h){return s("withdraw-onchain",f(h),{titleTransactionID:c})}if(!c)return s("confirm","Missing TitleTransactionID.",{onChainTxHash:u});let m=await e.blockchain.confirmWithdrawal(c,u);return m.ok?{ok:true,onChainTxHash:u,data:r.data}:s("confirm",m.error,{onChainTxHash:u,titleTransactionID:c})}async function Ie(t){let{client:e,networkID:n,walletAddress:a,signMessage:o}=t;if(y())return A("challenge");let i=await e.auth.requestWalletChallenge(a,n);if(!i.ok)return g("challenge",i.error);let d;try{let r=await o(new TextEncoder().encode(i.data.Message));d=O(r);}catch(r){return g("sign",f(r))}let l=await e.auth.loginWithWallet(a,n,d);return l.ok?{ok:true,data:l.data}:g("login",l.error)}async function Ce(t){let{client:e,networkID:n,walletAddress:a,signMessage:o}=t;if(y())return A("challenge");let i=await e.auth.linkWallet(a,n);if(!i.ok)return g("challenge",i.error);if(!i.data.Challenge)return g("challenge","No challenge was issued.");let d;try{let r=await o(new TextEncoder().encode(i.data.Challenge));d=O(r);}catch(r){return g("sign",f(r))}let l=await e.auth.linkWallet(a,n,d);return l.ok?{ok:true,data:l.data}:g("login",l.error)}function O(t){let e="0x";for(let n of t)e+=n.toString(16).padStart(2,"0");return e}
2
+ exports.PLATFORM_WALLET_MESSAGES=E;exports.PLATFORM_WALLET_UNAVAILABLE=J;exports.WALLET_USE_SITE_PANEL=I;exports.arbitrum=oe;exports.base=re;exports.bridgeFail=s;exports.bsc=ne;exports.chainById=Fe;exports.depositNftEvm=me;exports.depositNftEvm721=ge;exports.depositTokenEvm=L;exports.depositTokenOnChainEvm=ue;exports.depositTokenSolana=xe;exports.encodeNftDepositData=T;exports.ensureErc20Allowance=R;exports.erc1155Abi=P;exports.erc20Abi=x;exports.erc721Abi=v;exports.idosChains=de;exports.isAiCoderPreview=N;exports.isEmbeddedInPlatform=y;exports.isEmbeddedOnForeignSite=K;exports.linkWalletEvm=ke;exports.linkWalletSolana=Ce;exports.linkWalletViaPlatform=ee;exports.loginWithWalletEvm=we;exports.loginWithWalletSolana=Ie;exports.loginWithWalletViaPlatform=X;exports.mainnet=te;exports.onWalletBalanceChanged=Y;exports.openPlatformWalletPanel=j;exports.optimism=ie;exports.payWithWalletEvm=Ae;exports.polygon=ae;exports.polygonAmoy=le;exports.rewardPoolAbi=b;exports.sepolia=se;exports.solanaDevnet=He;exports.solanaMainnet=_e;exports.submitEvmNftWithdrawal=_;exports.submitEvmNftWithdrawal721=fe;exports.submitEvmTokenWithdrawal=M;exports.toAppKitNetwork=Me;exports.toErrorMessage=f;exports.walletLoginFail=g;exports.withdrawNftEvm=he;exports.withdrawTokenEvm=ye;exports.withdrawTokenSolana=Te;exports.writeAndWait=k;
package/dist/index.d.cts CHANGED
@@ -1,11 +1,11 @@
1
1
  import { W as WalletLoginResult, B as BridgeResult } from './chains-B2jQ-L0B.cjs';
2
2
  export { A as AppKitEvmNetwork, a as AppKitSolanaNetwork, b as BridgeFailure, c as BridgeStage, d as BridgeSuccess, e as WalletLoginFailure, f as WalletLoginStage, g as WalletLoginSuccess, h as arbitrum, i as base, j as bridgeFail, k as bsc, l as chainById, m as idosChains, n as mainnet, o as optimism, p as polygon, q as polygonAmoy, s as sepolia, r as solanaDevnet, t as solanaMainnet, u as toAppKitNetwork, v as toErrorMessage, w as walletLoginFail } from './chains-B2jQ-L0B.cjs';
3
- export { L as LoginWithWalletViaPlatformParams, P as PLATFORM_WALLET_MESSAGES, a as PLATFORM_WALLET_UNAVAILABLE, b as PlatformWalletFamily, W as WALLET_USE_SITE_PANEL, i as isAiCoderPreview, c as isEmbeddedInPlatform, d as isEmbeddedOnForeignSite, l as linkWalletViaPlatform, e as loginWithWalletViaPlatform, o as onWalletBalanceChanged, f as openPlatformWalletPanel } from './platformWalletLogin-Ysdf-Tt8.cjs';
3
+ export { L as LoginWithWalletViaPlatformParams, P as PLATFORM_WALLET_MESSAGES, a as PLATFORM_WALLET_UNAVAILABLE, b as PlatformWalletFamily, W as WALLET_USE_SITE_PANEL, i as isAiCoderPreview, c as isEmbeddedInPlatform, d as isEmbeddedOnForeignSite, l as linkWalletViaPlatform, e as loginWithWalletViaPlatform, o as onWalletBalanceChanged, f as openPlatformWalletPanel } from './platformWalletLogin-BBBBN68y.cjs';
4
4
  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-C5z9TgKG.cjs';
8
+ export { D as DepositTokenSolanaParams, S as SolanaProgramAdapter, W as WithdrawTokenSolanaParams, d as depositTokenSolana, w as withdrawTokenSolana } from './bridge-BAyA43hM.cjs';
9
9
 
10
10
  declare const rewardPoolAbi: readonly [{
11
11
  readonly type: "function";
package/dist/index.d.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  import { W as WalletLoginResult, B as BridgeResult } from './chains-B2jQ-L0B.js';
2
2
  export { A as AppKitEvmNetwork, a as AppKitSolanaNetwork, b as BridgeFailure, c as BridgeStage, d as BridgeSuccess, e as WalletLoginFailure, f as WalletLoginStage, g as WalletLoginSuccess, h as arbitrum, i as base, j as bridgeFail, k as bsc, l as chainById, m as idosChains, n as mainnet, o as optimism, p as polygon, q as polygonAmoy, s as sepolia, r as solanaDevnet, t as solanaMainnet, u as toAppKitNetwork, v as toErrorMessage, w as walletLoginFail } from './chains-B2jQ-L0B.js';
3
- export { L as LoginWithWalletViaPlatformParams, P as PLATFORM_WALLET_MESSAGES, a as PLATFORM_WALLET_UNAVAILABLE, b as PlatformWalletFamily, W as WALLET_USE_SITE_PANEL, i as isAiCoderPreview, c as isEmbeddedInPlatform, d as isEmbeddedOnForeignSite, l as linkWalletViaPlatform, e as loginWithWalletViaPlatform, o as onWalletBalanceChanged, f as openPlatformWalletPanel } from './platformWalletLogin-DNC2Ajle.js';
3
+ export { L as LoginWithWalletViaPlatformParams, P as PLATFORM_WALLET_MESSAGES, a as PLATFORM_WALLET_UNAVAILABLE, b as PlatformWalletFamily, W as WALLET_USE_SITE_PANEL, i as isAiCoderPreview, c as isEmbeddedInPlatform, d as isEmbeddedOnForeignSite, l as linkWalletViaPlatform, e as loginWithWalletViaPlatform, o as onWalletBalanceChanged, f as openPlatformWalletPanel } from './platformWalletLogin-BxAoMCd9.js';
4
4
  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-BPZNXQuQ.js';
8
+ export { D as DepositTokenSolanaParams, S as SolanaProgramAdapter, W as WithdrawTokenSolanaParams, d as depositTokenSolana, w as withdrawTokenSolana } from './bridge-BsVqE7-T.js';
9
9
 
10
10
  declare const rewardPoolAbi: readonly [{
11
11
  readonly type: "function";
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- export{j as depositNftEvm,k as depositNftEvm721,h as depositTokenEvm,i as depositTokenOnChainEvm,e as encodeNftDepositData,g as ensureErc20Allowance,c as erc1155Abi,b as erc20Abi,d as erc721Abi,r as linkWalletEvm,q as loginWithWalletEvm,s as payWithWalletEvm,a as rewardPoolAbi,m as submitEvmNftWithdrawal,n as submitEvmNftWithdrawal721,l as submitEvmTokenWithdrawal,p as withdrawNftEvm,o as withdrawTokenEvm,f as writeAndWait}from'./chunk-YTTVLBAW.js';export{a as PLATFORM_WALLET_MESSAGES,b as PLATFORM_WALLET_UNAVAILABLE,e as linkWalletViaPlatform,d as loginWithWalletViaPlatform,c as openPlatformWalletPanel}from'./chunk-D2ZPJ33L.js';export{a as depositTokenSolana,d as linkWalletSolana,c as loginWithWalletSolana,b as withdrawTokenSolana}from'./chunk-MLIXKTS6.js';export{d as WALLET_USE_SITE_PANEL,o as arbitrum,n as base,b as bridgeFail,l as bsc,t as chainById,s as idosChains,e as isAiCoderPreview,f as isEmbeddedInPlatform,g as isEmbeddedOnForeignSite,k as mainnet,j as onWalletBalanceChanged,p as optimism,m as polygon,r as polygonAmoy,q as sepolia,w as solanaDevnet,v as solanaMainnet,u as toAppKitNetwork,a as toErrorMessage,c as walletLoginFail}from'./chunk-K3THMWU2.js';
1
+ export{j as depositNftEvm,k as depositNftEvm721,h as depositTokenEvm,i as depositTokenOnChainEvm,e as encodeNftDepositData,g as ensureErc20Allowance,c as erc1155Abi,b as erc20Abi,d as erc721Abi,r as linkWalletEvm,q as loginWithWalletEvm,s as payWithWalletEvm,a as rewardPoolAbi,m as submitEvmNftWithdrawal,n as submitEvmNftWithdrawal721,l as submitEvmTokenWithdrawal,p as withdrawNftEvm,o as withdrawTokenEvm,f as writeAndWait}from'./chunk-YTTVLBAW.js';export{a as PLATFORM_WALLET_MESSAGES,b as PLATFORM_WALLET_UNAVAILABLE,e as linkWalletViaPlatform,d as loginWithWalletViaPlatform,c as openPlatformWalletPanel}from'./chunk-B4KT5CVC.js';export{a as depositTokenSolana,d as linkWalletSolana,c as loginWithWalletSolana,b as withdrawTokenSolana}from'./chunk-MLIXKTS6.js';export{d as WALLET_USE_SITE_PANEL,o as arbitrum,n as base,b as bridgeFail,l as bsc,t as chainById,s as idosChains,e as isAiCoderPreview,f as isEmbeddedInPlatform,g as isEmbeddedOnForeignSite,k as mainnet,j as onWalletBalanceChanged,p as optimism,m as polygon,r as polygonAmoy,q as sepolia,w as solanaDevnet,v as solanaMainnet,u as toAppKitNetwork,a as toErrorMessage,c as walletLoginFail}from'./chunk-K3THMWU2.js';
@@ -47,7 +47,7 @@ declare function isEmbeddedOnForeignSite(): boolean;
47
47
  * embedded (see the module docblock above). After it completes an operation it posts
48
48
  * `{type: "IDOS_WALLET_BALANCE_CHANGED"}` to this page — a game that wants its on-screen balance
49
49
  * to update without the player reloading should call this once (e.g. in its HUD/wallet-display
50
- * setup) and refresh from `client.blockchain.getUserState()` when it fires. A no-op when not
50
+ * setup) and refresh by revision — `client.cache.ensureState(["InventoryV2"], { force: true })` — when it fires. A no-op when not
51
51
  * embedded (the site panel doesn't exist there to send it) or outside the browser.
52
52
  *
53
53
  * Returns an unsubscribe function.
@@ -47,7 +47,7 @@ declare function isEmbeddedOnForeignSite(): boolean;
47
47
  * embedded (see the module docblock above). After it completes an operation it posts
48
48
  * `{type: "IDOS_WALLET_BALANCE_CHANGED"}` to this page — a game that wants its on-screen balance
49
49
  * to update without the player reloading should call this once (e.g. in its HUD/wallet-display
50
- * setup) and refresh from `client.blockchain.getUserState()` when it fires. A no-op when not
50
+ * setup) and refresh by revision — `client.cache.ensureState(["InventoryV2"], { force: true })` — when it fires. A no-op when not
51
51
  * embedded (the site panel doesn't exist there to send it) or outside the browser.
52
52
  *
53
53
  * Returns an unsubscribe function.
@@ -1,2 +1,2 @@
1
- 'use strict';var wagmi=require('wagmi'),connectors=require('wagmi/connectors'),appkitAdapterWagmi=require('@reown/appkit-adapter-wagmi'),react=require('@reown/appkit/react'),reactQuery=require('@tanstack/react-query'),react$1=require('react'),jsxRuntime=require('react/jsx-runtime'),viem=require('viem'),core=require('@idosgames/core'),actions=require('wagmi/actions');var q={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"}}},j={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"}}},V={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"}}},z={id:8453,name:"Base",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://mainnet.base.org"]}},blockExplorers:{default:{name:"BaseScan",url:"https://basescan.org"}}},Y={id:42161,name:"Arbitrum One",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://arb1.arbitrum.io/rpc"]}},blockExplorers:{default:{name:"Arbiscan",url:"https://arbiscan.io"}}},$={id:10,name:"OP Mainnet",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://mainnet.optimism.io"]}},blockExplorers:{default:{name:"Optimistic Etherscan",url:"https://optimistic.etherscan.io"}}},Q={id:11155111,name:"Sepolia",testnet:true,nativeCurrency:{name:"Sepolia Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.sepolia.org"]}},blockExplorers:{default:{name:"Etherscan",url:"https://sepolia.etherscan.io"}}},Z={id:80002,name:"Polygon Amoy",testnet:true,nativeCurrency:{name:"POL",symbol:"POL",decimals:18},rpcUrls:{default:{http:["https://rpc-amoy.polygon.technology"]}},blockExplorers:{default:{name:"PolygonScan",url:"https://amoy.polygonscan.com"}}},ve={mainnet:q,bsc:j,polygon:V,base:z,arbitrum:Y,optimism:$,sepolia:Q,polygonAmoy:Z};function qe(t){return Object.values(ve).find(e=>e.id===t)}function ke(t){return {...t,chainNamespace:"eip155",caipNetworkId:`eip155:${t.id}`}}var Ee=null;function Ae(t){Ee=t;}function ne(){return Ee}var Pe=[q,j,V,z,Y,$,Q,Z],re=new Map;function oe(t){let{chains:e=Pe,walletConnectProjectId:n,appName:r,appUrl:i,appIcon:o,transports:f,connectors:a}=t,s=n??"__extension_only__";if(!a){let w=re.get(s);if(w)return w}let u={};for(let w of e)u[w.id]=f?.[w.id]??wagmi.http();let c=i??(typeof window<"u"?window.location.origin:""),d={name:r??"iDosGames",description:r??"iDosGames game",url:c,icons:o?[o]:[]};if(n&&!a){let w=e.map(ke),b=new appkitAdapterWagmi.WagmiAdapter({networks:w,projectId:n,transports:u});return Ae(react.createAppKit({adapters:[b],networks:w,projectId:n,metadata:d,features:{analytics:false,email:false,socials:false}})),re.set(s,b.wagmiConfig),b.wagmiConfig}let g=a??[connectors.injected(),connectors.coinbaseWallet({appName:r??"iDosGames"})],m=wagmi.createConfig({chains:e,connectors:g,transports:u});return a||re.set(s,m),m}function O(t){let{wagmiConfig:e,queryClient:n,children:r}=t,[i]=react$1.useState(()=>n??new reactQuery.QueryClient);return jsxRuntime.jsx(wagmi.WagmiProvider,{config:e,children:jsxRuntime.jsx(reactQuery.QueryClientProvider,{client:i,children:r})})}var J=[{type:"function",name:"depositERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"amount",type:"uint256"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"withdrawERC20",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"amount",type:"uint256"},{name:"burnAmount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{name:"amount",type:"uint256"}]},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC1155",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"splits",type:"tuple[]",components:[{name:"to",type:"address"},{name:"amount",type:"uint256"}]},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"withdrawERC721",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"to",type:"address"},{name:"tokenId",type:"uint256"},{name:"nonce",type:"uint256"},{name:"signature",type:"bytes"},{name:"userID",type:"string"},{name:"titleID",type:"string"},{name:"category",type:"string"},{name:"deadline",type:"uint256"}],outputs:[]}],We=[{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:[]}],ie=[{type:"function",name:"approve",stateMutability:"nonpayable",inputs:[{name:"spender",type:"address"},{name:"amount",type:"uint256"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"allowance",stateMutability:"view",inputs:[{name:"owner",type:"address"},{name:"spender",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"decimals",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint8"}]},{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]}],De=[{type:"function",name:"safeTransferFrom",stateMutability:"nonpayable",inputs:[{name:"from",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]},{type:"function",name:"isApprovedForAll",stateMutability:"view",inputs:[{name:"account",type:"address"},{name:"operator",type:"address"}],outputs:[{name:"",type:"bool"}]},{type:"function",name:"setApprovalForAll",stateMutability:"nonpayable",inputs:[{name:"operator",type:"address"},{name:"approved",type:"bool"}],outputs:[]},{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"},{name:"id",type:"uint256"}],outputs:[{name:"",type:"uint256"}]}];function Te(t,e,n){return viem.encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[t,e,core.normalizeBlockchainCategory(n)])}async function N(t,e){let{walletClient:n,publicClient:r,account:i}=t,o=await n.writeContract({address:e.address,abi:e.abi,functionName:e.functionName,args:e.args,account:i,chain:n.chain,value:e.value});if((await r.waitForTransactionReceipt({hash:o})).status==="reverted")throw new Error(`On-chain transaction reverted (${o}).`);return o}function x(t){return t instanceof viem.BaseError?t.shortMessage:t instanceof Error?t.message:String(t)}function l(t,e,n){return {ok:false,stage:t,error:e,...n}}function E(t,e){return {ok:false,stage:t,error:e}}var Ie="WALLET_USE_SITE_PANEL",ot=/^[a-z0-9]{8}-preview\.idos\.games$/;function it(t=typeof window>"u"?"":window.location.hostname){let e=t.toLowerCase();return ot.test(e)?true:e!=="localhost"&&e!=="127.0.0.1"?false:globalThis.__IDOS_PREVIEW__!=null}function W(){if(typeof window>"u"||it())return false;try{return window.self!==window.top}catch{return true}}function L(t){return l(t,Ie)}function ae(t){return E(t,Ie)}function Ne(t){let e=t.RewardPoolAddress;return e||null}async function Se(t,e,n,r){return await t.publicClient.readContract({address:e,abi:ie,functionName:"allowance",args:[t.account,n]})>=r?null:N(t,{address:e,abi:ie,functionName:"approve",args:[n,r]})}async function se(t){let{client:e,clients:n,network:r,tokenAddress:i,amount:o,titleID:f,category:a}=t;if(W())return L("approve");let s=e.auth.context?.userID;if(!s)return l("approve","Not logged in.");let u=Ne(r);if(!u)return l("approve","Network has no RewardPoolAddress.");if(o<=0n)return l("approve","Amount must be positive.");try{await Se(n,i,u,o);}catch(g){return l("approve",x(g))}let c;try{c=await N(n,{address:u,abi:J,functionName:"depositERC20",args:[i,o,s,f,a??""]});}catch(g){return l("deposit-onchain",x(g))}let d=await e.blockchain.depositToken(r.NetworkID??"",c);return d.ok?{ok:true,onChainTxHash:c,data:d.data}:l("report",d.error,{onChainTxHash:c})}async function le(t){let{client:e,clients:n,network:r,nftContractAddress:i,tokenId:o,amount:f,titleID:a,category:s}=t;if(W())return L("deposit-onchain");let u=e.auth.context?.userID;if(!u)return l("deposit-onchain","Not logged in.");let c=Ne(r);if(!c)return l("deposit-onchain","Network has no RewardPoolAddress.");if(f<=0n)return l("deposit-onchain","Amount must be positive.");let d=Te(u,a,s),g;try{g=await N(n,{address:i,abi:De,functionName:"safeTransferFrom",args:[n.account,c,o,f,d]});}catch(w){return l("deposit-onchain",x(w))}let m=await e.blockchain.depositNFT(r.NetworkID??"",g);return m.ok?{ok:true,onChainTxHash:g,data:m.data}:l("report",m.error,{onChainTxHash:g})}function Be(t){return (t.Splits??[]).map(e=>({to:e.To,amount:BigInt(e.Amount??"0")}))}async function Re(t,e){return N(t,{address:e.ContractAddress,abi:J,functionName:"withdrawERC20",args:[e.TokenAddress,e.WalletAddress,BigInt(e.Amount??"0"),BigInt(e.BurnAmount??"0"),Be(e),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function Le(t,e){return N(t,{address:e.ContractAddress,abi:We,functionName:"withdrawERC1155Mint",args:[e.TokenAddress,e.WalletAddress,BigInt(e.TokenId??"0"),BigInt(e.Amount??"0"),Be(e),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function ce(t){let{client:e,clients:n,currencyID:r,networkID:i,walletAddress:o,amount:f,category:a}=t;if(W())return L("request");let s=await e.blockchain.requestTokenWithdrawal(r,i,o,f,a);if(!s.ok)return l("request",s.error);let u=s.data.EvmSignature,c=s.data.TitleTransactionID??void 0;if(!u)return l("request","Withdrawal response carried no EVM signature.",{titleTransactionID:c});let d;try{d=await Re(n,u);}catch(m){return l("withdraw-onchain",x(m),{titleTransactionID:c})}let g=await Fe(e,c,d);return g.ok?{ok:true,onChainTxHash:d,data:s.data}:g}async function de(t){let{client:e,clients:n,itemID:r,networkID:i,walletAddress:o,amount:f,category:a}=t;if(W())return L("request");let s=await e.blockchain.requestNFTWithdrawal(r,i,o,f,a);if(!s.ok)return l("request",s.error);let u=s.data.EvmSignature,c=s.data.TitleTransactionID??void 0;if(!u)return l("request","Withdrawal response carried no EVM signature.",{titleTransactionID:c});let d;try{d=await Le(n,u);}catch(m){return l("withdraw-onchain",x(m),{titleTransactionID:c})}let g=await Fe(e,c,d);return g.ok?{ok:true,onChainTxHash:d,data:s.data}:g}async function Fe(t,e,n){if(!e)return l("confirm","Missing TitleTransactionID.",{onChainTxHash:n});let r=await t.blockchain.confirmWithdrawal(e,n);return r.ok?{ok:true,onChainTxHash:n,data:r.data}:l("confirm",r.error,{onChainTxHash:n,titleTransactionID:e})}async function H(t){let{client:e,clients:n,networkID:r}=t;if(W())return ae("challenge");let i=t.walletAddress??n.account,o=await e.auth.requestWalletChallenge(i,r);if(!o.ok)return E("challenge",o.error);let f;try{f=await n.walletClient.signMessage({account:n.account,message:o.data.Message});}catch(s){return E("sign",x(s))}let a=await e.auth.loginWithWallet(i,r,f);return a.ok?{ok:true,data:a.data}:E("login",a.error)}async function pe(t){let{client:e,clients:n,networkID:r}=t;if(W())return ae("challenge");let i=t.walletAddress??n.account,o=await e.auth.linkWallet(i,r);if(!o.ok)return E("challenge",o.error);if(!o.data.Challenge)return E("challenge","No challenge was issued.");let f;try{f=await n.walletClient.signMessage({account:n.account,message:o.data.Challenge});}catch(s){return E("sign",x(s))}let a=await e.auth.linkWallet(i,r,f);return a.ok?{ok:true,data:a.data}:E("login",a.error)}function X(){let{address:t}=wagmi.useAccount(),e=wagmi.usePublicClient(),{data:n}=wagmi.useWalletClient();return !t||!e||!n?null:{account:t,publicClient:e,walletClient:n}}var M="Wallet not connected.";function ue(t,e){let n=X();return {connected:!!n,account:n?.account??null,loginWithWallet:(r,i)=>n?H({client:t,clients:n,networkID:r,walletAddress:i}):Promise.resolve(E("challenge",M)),depositToken:r=>n?se({client:t,clients:n,titleID:e,...r}):Promise.resolve(l("approve",M)),depositNft:r=>n?le({client:t,clients:n,titleID:e,...r}):Promise.resolve(l("deposit-onchain",M)),withdrawToken:r=>n?ce({client:t,clients:n,...r}):Promise.resolve(l("withdraw-onchain",M)),withdrawNft:r=>n?de({client:t,clients:n,...r}):Promise.resolve(l("withdraw-onchain",M))}}function me(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}}function gt(t){let{wagmiConfig:e,...n}=t;return jsxRuntime.jsx(O,{wagmiConfig:e,children:jsxRuntime.jsx(Ue,{...n})})}function yt(t){return t instanceof Error&&(t.name==="ConnectorAlreadyConnectedError"||t.message.includes("already connected"))}function wt(t){let e="Wallet sign-in failed. Please try again.";return t instanceof Error?t.name==="ProviderNotFoundError"||/provider not found/i.test(t.message)?"No crypto wallet found in this browser. Install a wallet extension (e.g. MetaMask) or open this page in your wallet's browser, then try again.":t.name==="UserRejectedRequestError"||/user (rejected|denied|cancelled|canceled)/i.test(t.message)?"Request declined in the wallet.":/timed? ?out/i.test(t.message)?"The wallet did not respond. Open your wallet and try again.":e:e}async function Oe(t){let e=await actions.getWalletClient(t).catch(()=>null);if(!e)return null;let n=actions.getPublicClient(t);return n?{account:e.account.address,publicClient:n,walletClient:e}:null}function ht(t,e=18e4){return actions.getAccount(t).isConnected?Promise.resolve(true):new Promise(n=>{let r=false,i=a=>{r||(r=true,o(),clearTimeout(f),n(a));},o=actions.watchAccount(t,{onChange:a=>{a.isConnected&&i(true);}}),f=setTimeout(()=>i(false),e);})}function Ct(t,e=8e3){let n=r=>r==="reconnecting"||r==="connecting";return n(actions.getAccount(t).status)?new Promise(r=>{let i=false,o=()=>{i||(i=true,f(),clearTimeout(a),r());},f=actions.watchAccount(t,{onChange:s=>{n(s.status)||o();}}),a=setTimeout(o,e);}):Promise.resolve()}function bt(t){let e=i=>t.find(o=>o.id===i||o.type===i),n=e("injected"),r=typeof window<"u"&&window.ethereum!=null;return n&&r?n:e("walletConnect")??n??t[0]}var He=9e4;async function vt(t){try{let r=(await actions.getAccount(t).connector?.getProvider?.())?.session?.peer?.metadata?.redirect,i=r?.native||r?.universal;return !i||typeof window>"u"?!1:(window.location.href=i,!0)}catch{return false}}function Me(t,e){return new Promise((n,r)=>{let i=setTimeout(()=>r(new Error("The wallet request timed out.")),e);t.then(o=>{clearTimeout(i),n(o);},o=>{clearTimeout(i),r(o instanceof Error?o:new Error(String(o)));});})}function Ue(t){let{client:e,networkID:n,onAuthenticated:r,disabled:i,label:o,style:f,autoStart:a,mode:s="login",onLinked:u}=t,c=wagmi.useConfig(),{isConnected:d}=wagmi.useAccount(),{connectAsync:g,connectors:m}=wagmi.useConnect(),w=X(),[b,A]=react$1.useState(false),[F,P]=react$1.useState(null),[D,I]=react$1.useState(false),B=react$1.useRef(0),U=react$1.useRef(false),R=async()=>{let p=++B.current,y=()=>B.current===p;A(true),P(null);try{if(await Ct(c),!y())return;if(!actions.getAccount(c).isConnected){let k=ne();if(k){if(await k.open(),!await ht(c)){P("No wallet was connected.");return}}else {let Ce=bt(m);if(!Ce){P("No wallet connector is configured.");return}try{await g({connector:Ce});}catch(be){if(!yt(be))throw be}}}let v=w??await Oe(c);if(!v&&actions.getAccount(c).isConnected&&(await new Promise(k=>setTimeout(k,300)),v=await Oe(c),!y()))return;if(!v){P("Wallet client is not available.");return}if(I(!0),s==="link"){let k=await Me(pe({client:e,clients:v,networkID:n}),He);if(!y())return;if(k.ok){u?.(k.data.PlayAccess??null);return}P(k.stage==="sign"?"Signature declined.":me(k.error,"Could not link the wallet."));return}let _=await Me(H({client:e,clients:v,networkID:n}),He);if(!y())return;if(_.ok){r();return}P(_.stage==="sign"?"Signature declined.":me(_.error,"Wallet sign-in failed."));}catch(v){if(!y())return;console.error("[idosgames/wallet] wallet sign-in failed:",v),P(wt(v));}finally{y()&&(A(false),I(false));}};react$1.useEffect(()=>{!a||U.current||(U.current=true,R());},[a]);let K=async()=>{await vt(c)||await ne()?.open();};return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:()=>{D?K():R();},disabled:i,style:{...kt,...i?{opacity:.6,cursor:"default"}:null,...f},children:D?"Waiting for signature \u2014 tap to open wallet":b?"Check your wallet\u2026":d?o??(s==="link"?"Link wallet":"Sign in with wallet"):"Connect wallet"}),F&&jsxRuntime.jsx("span",{role:"alert",style:Et,children:F})]})}var kt={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},Et={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};var Dt={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"},Tt={fontWeight:700,fontSize:16},T={fontSize:12,opacity:.7},ye={background:"#052e7e",border:"1px solid #1e59c8",borderRadius:8,color:"#fff",padding:"8px 10px",width:"100%",boxSizing:"border-box"},It={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 Ke({client:t,engine:e,onClose:n,style:r}){let[,i]=react$1.useReducer(p=>p+1,0),[o,f]=react$1.useState({}),[a,s]=react$1.useState({}),[u,c]=react$1.useState(""),[d,g]=react$1.useState(""),[m,w]=react$1.useState(""),[b,A]=react$1.useState(false),[F,P]=react$1.useState(null);react$1.useEffect(()=>{let p=true;return (async()=>{let y=await t.blockchain.getDefinitions();if(await t.blockchain.getUserState(),!p||!y.ok)return;let v={};for(let[_,k]of Object.entries(y.data.Blockchain?.Networks??{}))k.Type===e.networkType&&(v[_]=k);f(v),s(y.data.CryptoCurrencies??{}),c(Object.keys(v)[0]??"");})(),()=>{p=false;}},[t,e.networkType]),react$1.useEffect(()=>t.on("user:anyUpdated",i),[t]);let D=react$1.useMemo(()=>Object.entries(a).filter(([,p])=>p.Networks?.some(y=>y.NetworkID===u&&!!y.ContractAddress)),[a,u]);react$1.useEffect(()=>{let p=D[0]?.[0]??"";g(y=>D.some(([v])=>v===y)?y:p);},[D]);let I=u?o[u]:void 0,B=d?a[d]?.Networks?.find(p=>p.NetworkID===u):void 0,U=d?t.data.user.getCryptoCurrencyAmount(d):"0",R=!!e.address;async function K(p){A(true),P(null);try{let y=await p();P(y),y.ok&&await t.blockchain.getUserState();}finally{A(false);}}return jsxRuntime.jsxs("div",{style:{...Dt,...r},children:[jsxRuntime.jsxs("div",{style:{...we,justifyContent:"space-between"},children:[jsxRuntime.jsx("span",{style:Tt,children:"Crypto wallet"}),n&&jsxRuntime.jsx("button",{type:"button",style:te,onClick:n,children:"\u2715"})]}),R?jsxRuntime.jsxs("div",{style:we,children:[jsxRuntime.jsxs("span",{style:{...T,flex:1,alignSelf:"center"},children:[e.address.slice(0,6),"\u2026",e.address.slice(-4)]}),jsxRuntime.jsx("button",{type:"button",style:te,onClick:e.disconnect,children:"Disconnect"})]}):jsxRuntime.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6},children:[jsxRuntime.jsx("span",{style:T,children:"Connect a browser or mobile wallet"}),e.connectChoices.length===0?jsxRuntime.jsx("span",{style:T,children:"Wallet connection is not configured for this title."}):e.connectChoices.map(p=>jsxRuntime.jsx("button",{type:"button",style:te,onClick:p.connect,children:p.label},p.key))]}),Object.keys(o).length===0?jsxRuntime.jsxs("span",{style:T,children:["No ",e.networkType," networks configured for this title."]}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:T,children:"Network"}),jsxRuntime.jsx("select",{style:ye,value:u,onChange:p=>c(p.target.value),children:Object.entries(o).map(([p,y])=>jsxRuntime.jsx("option",{value:p,children:y.DisplayName??p},p))})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:T,children:"Token"}),jsxRuntime.jsxs("select",{style:ye,value:d,onChange:p=>g(p.target.value),children:[D.length===0&&jsxRuntime.jsx("option",{value:"",children:"\u2014 no depositable tokens \u2014"}),D.map(([p,y])=>jsxRuntime.jsx("option",{value:p,children:y.DisplayName??p},p))]})]}),jsxRuntime.jsxs("div",{style:T,children:["In-game balance: ",jsxRuntime.jsx("b",{children:U})," ",d]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{style:T,children:"Amount"}),jsxRuntime.jsx("input",{style:ye,inputMode:"decimal",placeholder:"0.0",value:m,onChange:p=>w(p.target.value)})]}),jsxRuntime.jsxs("div",{style:we,children:[jsxRuntime.jsx("button",{type:"button",style:{...It,flex:1,opacity:b?.6:1},disabled:b||!R||!B?.ContractAddress,onClick:()=>{!I||!B||K(()=>e.deposit({network:I,binding:B,currencyID:d,amount:m||"0"}));},children:"Deposit"}),jsxRuntime.jsx("button",{type:"button",style:{...te,flex:1,opacity:b?.6:1},disabled:b||!R||!d,onClick:()=>{I&&K(()=>e.withdraw({network:I,networkID:u,currencyID:d,amount:m||"0"}));},children:"Withdraw"})]})]}),F&&jsxRuntime.jsx(Nt,{result:F})]})}function Nt({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`:""]})}function Gt(t){let{client:e,walletConnectProjectId:n,appName:r,onClose:i,style:o}=t,[f,a]=react$1.useState(n??"");react$1.useEffect(()=>{if(n)return;let u=true;return (async()=>{let c=await e.blockchain.getDefinitions();if(!u||!c.ok)return;let d=c.data.Blockchain?.WalletLogin?.WalletConnectProjectId;d&&a(d);})(),()=>{u=false;}},[e,n]);let s=react$1.useMemo(()=>oe({walletConnectProjectId:f||void 0,appName:r}),[f,r]);return jsxRuntime.jsx(O,{wagmiConfig:s,children:jsxRuntime.jsx(Ut,{client:e,onClose:i,style:o})})}function Ut({client:t,onClose:e,style:n}){let r=ue(t,t.titleID),{address:i,isConnected:o,chainId:f}=wagmi.useAccount(),{connect:a,connectors:s}=wagmi.useConnect(),{disconnect:u}=wagmi.useDisconnect(),{switchChainAsync:c}=wagmi.useSwitchChain();async function d(m){if(!m||f===m)return true;try{return await c({chainId:m}),!0}catch{return false}}let g={networkType:"EVM",address:o&&i?i:null,connectChoices:s.map(m=>({key:m.uid,label:m.name,connect:()=>a({connector:m})})),disconnect:()=>u(),deposit:async({network:m,binding:w,amount:b})=>{if(!w.ContractAddress)return l("approve","This token cannot be deposited.");if(!await d(m.ChainID))return l("approve",`Switch your wallet to chain ${m.ChainID} to continue.`);let A;try{A=viem.parseUnits(b,w.Decimals??18);}catch{return l("approve","Invalid amount.")}return r.depositToken({network:m,tokenAddress:w.ContractAddress,amount:A})},withdraw:async({network:m,networkID:w,currencyID:b,amount:A})=>r.account?await d(m.ChainID)?r.withdrawToken({currencyID:b,networkID:w,walletAddress:r.account,amount:A}):l("request",`Switch your wallet to chain ${m.ChainID} to continue.`):l("request","Wallet not connected.")};return jsxRuntime.jsx(Ke,{client:t,engine:g,onClose:e,style:n})}
2
- exports.DEFAULT_EVM_CHAINS=Pe;exports.IDosGamesWalletProvider=O;exports.WalletLogin=gt;exports.WalletLoginButton=Ue;exports.WalletPanel=Gt;exports.arbitrum=Y;exports.base=z;exports.bsc=j;exports.chainById=qe;exports.createEvmWalletConfig=oe;exports.idosChains=ve;exports.mainnet=q;exports.optimism=$;exports.polygon=V;exports.polygonAmoy=Z;exports.sepolia=Q;exports.useEvmBridge=ue;exports.useEvmBridgeClients=X;
1
+ 'use strict';var wagmi=require('wagmi'),connectors=require('wagmi/connectors'),appkitAdapterWagmi=require('@reown/appkit-adapter-wagmi'),react=require('@reown/appkit/react'),reactQuery=require('@tanstack/react-query'),react$1=require('react'),jsxRuntime=require('react/jsx-runtime'),viem=require('viem'),core=require('@idosgames/core'),actions=require('wagmi/actions');var se={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"}}},le={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"}}},ce={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"}}},de={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"}}},pe={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"}}},ue={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"}}},me={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"}}},fe={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"}}},je={mainnet:se,bsc:le,polygon:ce,base:de,arbitrum:pe,optimism:ue,sepolia:me,polygonAmoy:fe};function St(t){return Object.values(je).find(e=>e.id===t)}function Ve(t){return {...t,chainNamespace:"eip155",caipNetworkId:`eip155:${t.id}`}}var Ye=null;function Qe(t){Ye=t;}function ve(){return Ye}var Ze=[se,le,ce,de,pe,ue,me,fe],De=new Map;function Ee(t){let{chains:e=Ze,walletConnectProjectId:n,appName:o,appUrl:r,appIcon:i,transports:p,connectors:l}=t,c=n??"__extension_only__";if(!l){let u=De.get(c);if(u)return u}let y={};for(let u of e)y[u.id]=p?.[u.id]??wagmi.http();let m=r??(typeof window<"u"?window.location.origin:""),k={name:o??"iDosGames",description:o??"iDosGames game",url:m,icons:i?[i]:[]};if(n&&!l){let u=e.map(Ve),A=new appkitAdapterWagmi.WagmiAdapter({networks:u,projectId:n,transports:y});return Qe(react.createAppKit({adapters:[A],networks:u,projectId:n,metadata:k,features:{analytics:false,email:false,socials:false}})),De.set(c,A.wagmiConfig),A.wagmiConfig}let w=l??[connectors.injected(),connectors.coinbaseWallet({appName:o??"iDosGames"})],T=wagmi.createConfig({chains:e,connectors:w,transports:y});return l||De.set(c,T),T}function X(t){let{wagmiConfig:e,queryClient:n,children:o}=t,[r]=react$1.useState(()=>n??new reactQuery.QueryClient);return jsxRuntime.jsx(wagmi.WagmiProvider,{config:e,children:jsxRuntime.jsx(reactQuery.QueryClientProvider,{client:r,children:o})})}var ge=[{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:[]}],Xe=[{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:[]}],Te=[{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"}]}],et=[{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 tt(t,e,n){return viem.encodeAbiParameters([{type:"string"},{type:"string"},{type:"string"}],[t,e,core.normalizeBlockchainCategory(n)])}async function _(t,e){let{walletClient:n,publicClient:o,account:r}=t,i=await n.writeContract({address:e.address,abi:e.abi,functionName:e.functionName,args:e.args,account:r,chain:n.chain,value:e.value});if((await o.waitForTransactionReceipt({hash:i})).status==="reverted")throw new Error(`On-chain transaction reverted (${i}).`);return i}function H(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 S(t,e){return {ok:false,stage:t,error:e}}var nt="WALLET_USE_SITE_PANEL",Kt=/^[a-z0-9]{8}-preview\.idos\.games$/;function jt(t=typeof window>"u"?"":window.location.hostname){let e=t.toLowerCase();return Kt.test(e)?true:e!=="localhost"&&e!=="127.0.0.1"?false:globalThis.__IDOS_PREVIEW__!=null}function R(){if(typeof window>"u"||jt())return false;try{return window.self!==window.top}catch{return true}}function ot(){if(typeof window>"u")return false;try{return window.parent!==window.top}catch{return true}}function Y(t){return f(t,nt)}function Ie(t){return S(t,nt)}function rt(t){let e=t.RewardPoolAddress;return e||null}async function it(t,e,n,o){return await t.publicClient.readContract({address:e,abi:Te,functionName:"allowance",args:[t.account,n]})>=o?null:_(t,{address:e,abi:Te,functionName:"approve",args:[n,o]})}async function Ne(t){let{client:e,clients:n,network:o,tokenAddress:r,amount:i,titleID:p,category:l}=t;if(R())return Y("approve");let c=e.auth.context?.userID;if(!c)return f("approve","Not logged in.");let y=rt(o);if(!y)return f("approve","Network has no RewardPoolAddress.");if(i<=0n)return f("approve","Amount must be positive.");try{await it(n,r,y,i);}catch(w){return f("approve",H(w))}let m;try{m=await _(n,{address:y,abi:ge,functionName:"depositERC20",args:[r,i,c,p,l??""]});}catch(w){return f("deposit-onchain",H(w))}let k=await e.blockchain.depositToken(o.NetworkID??"",m);return k.ok?{ok:true,onChainTxHash:m,data:k.data}:f("report",k.error,{onChainTxHash:m})}async function Ae(t){let{client:e,clients:n,network:o,nftContractAddress:r,tokenId:i,amount:p,titleID:l,category:c}=t;if(R())return Y("deposit-onchain");let y=e.auth.context?.userID;if(!y)return f("deposit-onchain","Not logged in.");let m=rt(o);if(!m)return f("deposit-onchain","Network has no RewardPoolAddress.");if(p<=0n)return f("deposit-onchain","Amount must be positive.");let k=tt(y,l,c),w;try{w=await _(n,{address:r,abi:et,functionName:"safeTransferFrom",args:[n.account,m,i,p,k]});}catch(u){return f("deposit-onchain",H(u))}let T=await e.blockchain.depositNFT(o.NetworkID??"",w);return T.ok?{ok:true,onChainTxHash:w,data:T.data}:f("report",T.error,{onChainTxHash:w})}function at(t){return (t.Splits??[]).map(e=>({to:e.To,amount:BigInt(e.Amount??"0")}))}async function st(t,e){return _(t,{address:e.ContractAddress,abi:ge,functionName:"withdrawERC20",args:[e.TokenAddress,e.WalletAddress,BigInt(e.Amount??"0"),BigInt(e.BurnAmount??"0"),at(e),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function lt(t,e){return _(t,{address:e.ContractAddress,abi:Xe,functionName:"withdrawERC1155Mint",args:[e.TokenAddress,e.WalletAddress,BigInt(e.TokenId??"0"),BigInt(e.Amount??"0"),at(e),BigInt(e.Nonce??"0"),e.Signature??"0x",e.UserID??"",e.TitleID??"",e.Category??"",BigInt(e.Deadline??"0")]})}async function Pe(t){let{client:e,clients:n,currencyID:o,networkID:r,walletAddress:i,amount:p,category:l}=t;if(R())return Y("request");let c=await e.blockchain.requestTokenWithdrawal(o,r,i,p,l);if(!c.ok)return f("request",c.error);let y=c.data.EvmSignature,m=c.data.TitleTransactionID??void 0;if(!y)return f("request","Withdrawal response carried no EVM signature.",{titleTransactionID:m});let k;try{k=await st(n,y);}catch(T){return f("withdraw-onchain",H(T),{titleTransactionID:m})}let w=await ct(e,m,k);return w.ok?{ok:true,onChainTxHash:k,data:c.data}:w}async function We(t){let{client:e,clients:n,itemID:o,networkID:r,walletAddress:i,amount:p,category:l}=t;if(R())return Y("request");let c=await e.blockchain.requestNFTWithdrawal(o,r,i,p,l);if(!c.ok)return f("request",c.error);let y=c.data.EvmSignature,m=c.data.TitleTransactionID??void 0;if(!y)return f("request","Withdrawal response carried no EVM signature.",{titleTransactionID:m});let k;try{k=await lt(n,y);}catch(T){return f("withdraw-onchain",H(T),{titleTransactionID:m})}let w=await ct(e,m,k);return w.ok?{ok:true,onChainTxHash:k,data:c.data}:w}async function ct(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})}async function ee(t){let{client:e,clients:n,networkID:o}=t;if(R())return Ie("challenge");let r=t.walletAddress??n.account,i=await e.auth.requestWalletChallenge(r,o);if(!i.ok)return S("challenge",i.error);let p;try{p=await n.walletClient.signMessage({account:n.account,message:i.data.Message});}catch(c){return S("sign",H(c))}let l=await e.auth.loginWithWallet(r,o,p);return l.ok?{ok:true,data:l.data}:S("login",l.error)}async function Se(t){let{client:e,clients:n,networkID:o}=t;if(R())return Ie("challenge");let r=t.walletAddress??n.account,i=await e.auth.linkWallet(r,o);if(!i.ok)return S("challenge",i.error);if(!i.data.Challenge)return S("challenge","No challenge was issued.");let p;try{p=await n.walletClient.signMessage({account:n.account,message:i.data.Challenge});}catch(c){return S("sign",H(c))}let l=await e.auth.linkWallet(r,o,p);return l.ok?{ok:true,data:l.data}:S("login",l.error)}function ye(){let{address:t}=wagmi.useAccount(),e=wagmi.usePublicClient(),{data:n}=wagmi.useWalletClient();return !t||!e||!n?null:{account:t,publicClient:e,walletClient:n}}var te="Wallet not connected.";function Re(t,e){let n=ye();return {connected:!!n,account:n?.account??null,loginWithWallet:(o,r)=>n?ee({client:t,clients:n,networkID:o,walletAddress:r}):Promise.resolve(S("challenge",te)),depositToken:o=>n?Ne({client:t,clients:n,titleID:e,...o}):Promise.resolve(f("approve",te)),depositNft:o=>n?Ae({client:t,clients:n,titleID:e,...o}):Promise.resolve(f("deposit-onchain",te)),withdrawToken:o=>n?Pe({client:t,clients:n,...o}):Promise.resolve(f("withdraw-onchain",te)),withdrawNft:o=>n?We({client:t,clients:n,...o}):Promise.resolve(f("withdraw-onchain",te))}}function on(t){let{wagmiConfig:e,...n}=t;return jsxRuntime.jsx(X,{wagmiConfig:e,children:jsxRuntime.jsx(yt,{...n})})}function rn(t){return t instanceof Error&&(t.name==="ConnectorAlreadyConnectedError"||t.message.includes("already connected"))}function an(t){let e="Wallet sign-in failed. Please try again.";return t instanceof Error?t.name==="ProviderNotFoundError"||/provider not found/i.test(t.message)?"No crypto wallet found in this browser. Install a wallet extension (e.g. MetaMask) or open this page in your wallet's browser, then try again.":t.name==="UserRejectedRequestError"||/user (rejected|denied|cancelled|canceled)/i.test(t.message)?"Request declined in the wallet.":/timed? ?out/i.test(t.message)?"The wallet did not respond. Open your wallet and try again.":e:e}async function ut(t){let e=await actions.getWalletClient(t).catch(()=>null);if(!e)return null;let n=actions.getPublicClient(t);return n?{account:e.account.address,publicClient:n,walletClient:e}:null}function sn(t,e=18e4){return actions.getAccount(t).isConnected?Promise.resolve(true):new Promise(n=>{let o=false,r=l=>{o||(o=true,i(),clearTimeout(p),n(l));},i=actions.watchAccount(t,{onChange:l=>{l.isConnected&&r(true);}}),p=setTimeout(()=>r(false),e);})}function ln(t,e=8e3){let n=o=>o==="reconnecting"||o==="connecting";return n(actions.getAccount(t).status)?new Promise(o=>{let r=false,i=()=>{r||(r=true,p(),clearTimeout(l),o());},p=actions.watchAccount(t,{onChange:c=>{n(c.status)||i();}}),l=setTimeout(i,e);}):Promise.resolve()}function cn(t){let e=r=>t.find(i=>i.id===r||i.type===r),n=e("injected"),o=typeof window<"u"&&window.ethereum!=null;return n&&o?n:e("walletConnect")??n??t[0]}var mt=9e4;async function dn(t){try{let o=(await actions.getAccount(t).connector?.getProvider?.())?.session?.peer?.metadata?.redirect,r=o?.native||o?.universal;return !r||typeof window>"u"?!1:(window.location.href=r,!0)}catch{return false}}function ft(t,e){return new Promise((n,o)=>{let r=setTimeout(()=>o(new Error("The wallet request timed out.")),e);t.then(i=>{clearTimeout(r),n(i);},i=>{clearTimeout(r),o(i instanceof Error?i:new Error(String(i)));});})}function yt(t){let{client:e,networkID:n,onAuthenticated:o,disabled:r,label:i,style:p,autoStart:l,mode:c="login",onLinked:y}=t,m=wagmi.useConfig(),{isConnected:k}=wagmi.useAccount(),{connectAsync:w,connectors:T}=wagmi.useConnect(),u=ye(),[A,C]=react$1.useState(false),[F,P]=react$1.useState(null),[O,$]=react$1.useState(false),Z=react$1.useRef(0),q=react$1.useRef(false),z=async()=>{let re=++Z.current,W=()=>Z.current===re;C(true),P(null);try{if(await ln(m),!W())return;if(!actions.getAccount(m).isConnected){let x=ve();if(x){if(await x.open(),!await sn(m)){P("No wallet was connected.");return}}else {let K=cn(T);if(!K){P("No wallet connector is configured.");return}try{await w({connector:K});}catch(j){if(!rn(j))throw j}}}let I=u??await ut(m);if(!I&&actions.getAccount(m).isConnected&&(await new Promise(x=>setTimeout(x,300)),I=await ut(m),!W()))return;if(!I){P("Wallet client is not available.");return}if($(!0),c==="link"){let x=await ft(Se({client:e,clients:I,networkID:n}),mt);if(!W())return;if(x.ok){y?.(x.data.PlayAccess??null);return}P(x.stage==="sign"?"Signature declined.":core.authErrorText(x.error,"Could not link the wallet."));return}let M=await ft(ee({client:e,clients:I,networkID:n}),mt);if(!W())return;if(M.ok){o();return}P(M.stage==="sign"?"Signature declined.":core.authErrorText(M.error,"Wallet sign-in failed."));}catch(I){if(!W())return;console.error("[idosgames/wallet] wallet sign-in failed:",I),P(an(I));}finally{W()&&(C(false),$(false));}};react$1.useEffect(()=>{!l||q.current||(q.current=true,z());},[l]);let he=async()=>{await dn(m)||await ve()?.open();};return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:()=>{O?he():z();},disabled:r,style:{...pn,...r?{opacity:.6,cursor:"default"}:null,...p},children:O?"Waiting for signature \u2014 tap to open wallet":A?"Check your wallet\u2026":k?i??(c==="link"?"Link wallet":"Sign in with wallet"):"Connect wallet"}),F&&jsxRuntime.jsx("span",{role:"alert",style:un,children:F})]})}var pn={padding:"11px 16px",borderRadius:"8px",border:"none",background:"#4c3fa8",color:"#fff",font:"inherit",fontWeight:600,cursor:"pointer"},un={display:"block",marginTop:"6px",color:"#ff9b9b",fontSize:"13px",textAlign:"center"};var b=(t,e)=>`var(--idos-ui-${t}, ${e})`,a={panel:b("panel","#2c3480"),panelDeep:b("panel-deep","#1d2360"),panelEdge:b("panel-edge","#4f5bc9"),text:b("text","#ffffff"),textDim:b("text-dim","#aeb6f0"),gold:b("gold","#ffd24a"),goldDeep:b("gold-deep","#e89a12"),green:b("green","#59d35b"),greenDeep:b("green-deep","#2b9936"),blue:b("blue","#4fb1ff"),blueDeep:b("blue-deep","#2276d6"),red:b("red","#ff5a5a"),redDeep:b("red-deep","#b83232"),onGreen:b("on-green","#ffffff"),onBlue:b("on-blue","#ffffff"),onGold:b("on-gold","#ffffff"),textOutline:b("text-outline","0 2px 0 rgba(0,0,0,.45), 0 0 1px rgba(0,0,0,.6)"),well:b("well","rgba(8, 10, 40, 0.6)"),wellSoft:b("well-soft","rgba(0, 0, 0, 0.3)"),wellShadow:b("well-shadow","inset 0 2px 4px rgba(0, 0, 0, 0.4)"),edge:b("edge","rgba(0, 0, 0, 0.35)"),line:b("line","rgba(255, 255, 255, 0.2)"),panelShadow:b("panel-shadow","0 6px 0 rgba(4, 6, 30, 0.55), inset 0 2px 0 rgba(255, 255, 255, 0.12)"),radius:b("radius","18px"),buttonRadius:b("button-radius","14px"),font:b("font","'Baloo 2', 'Nunito', 'Trebuchet MS', system-ui, sans-serif"),fast:b("fast","120ms")},ht={green:[a.green,a.greenDeep,a.onGreen],blue:[a.blue,a.blueDeep,a.onBlue],gold:[a.gold,a.goldDeep,a.onGold],red:[a.red,a.redDeep,"#ffffff"]},E={color:a.text,fontWeight:800,textShadow:a.textOutline,letterSpacing:.2},Fe={boxSizing:"border-box",background:`linear-gradient(180deg, ${a.panel} 0%, ${a.panelDeep} 100%)`,border:`2px solid ${a.panelEdge}`,borderRadius:a.radius,boxShadow:a.panelShadow},U={boxSizing:"border-box",background:a.well,border:`2px solid ${a.panelEdge}`,boxShadow:a.wellShadow,borderRadius:14};function oe(t,e=false,n="md"){let[o,r,i]=e?["#8e95b8","#5b6187","#ffffff"]:ht[t];return {...E,color:i,boxSizing:"border-box",fontFamily:a.font,fontSize:n==="sm"?13:n==="lg"?18:16,border:"none",borderRadius:a.buttonRadius,padding:n==="sm"?"6px 12px":n==="lg"?"13px 22px":"10px 18px",minHeight:n==="sm"?34:n==="lg"?52:44,cursor:e?"default":"pointer",background:`linear-gradient(180deg, ${o} 0%, ${r} 100%)`,boxShadow:`0 4px 0 ${a.edge}, inset 0 2px 0 rgba(255,255,255,.35)`,opacity:e?.75:1,display:"inline-flex",alignItems:"center",justifyContent:"center",gap:8}}function bt(t){let[e,n,o]=ht[t];return {background:`linear-gradient(180deg, ${e} 0%, ${n} 100%)`,color:o,borderRadius:16,boxShadow:`0 4px 0 ${a.edge}, inset 0 2px 0 rgba(255,255,255,.3)`}}var N={...E,fontSize:13,color:a.textDim},gn=["ru","kk","uk","be","ky","uz","tg"];function yn(){if(typeof navigator>"u")return false;let t=(navigator.language||"").toLowerCase();return gn.some(e=>t.startsWith(e))}var wt={title:"Wallet",topUpTitle:"Top up to buy",connectHint:"Connect a wallet to deposit and withdraw",connect:"Connect wallet",notConfigured:"Wallet connection is not set up for this app.",disconnect:"Disconnect",balance:"In-game balance",deposit:"Deposit",withdraw:"Withdraw",network:"Network",token:"Token",amount:"Amount",max:"MAX",minWithdraw:"Minimum to withdraw: {n}",noNetworks:"Crypto is not set up for this app yet.",noTokens:"No tokens on this network.",depositing:"Confirm in your wallet\u2026",withdrawing:"Withdrawing\u2026",confirming:"Waiting for the network to confirm\u2026",loading:"Loading\u2026",doneDeposit:"Deposited \u2014 the balance is updated.",doneWithdraw:"Sent to your wallet.",topUpNeed:"This purchase needs",topUpMore:"more",topUpHint:"Deposit it from your wallet \u2014 the purchase completes by itself once it is credited.",topUpCannot:"{name} cannot be deposited here.",depositAmount:"Deposit {amount} {name}",failed:"Did not go through",debited:"The amount is already debited \u2014 retry this withdrawal, do not request a new one.",tx:"Transaction",backed:"Crypto (withdrawable)",unbacked:"IOU (not backed yet)",total:"Total",iouHint:"IOUs spend in the app like crypto, but you can withdraw only the backed part; the developer backs IOUs later.",backedHint:"All of it is real crypto and can be withdrawn."},wn={title:"\u041A\u043E\u0448\u0435\u043B\u0451\u043A",topUpTitle:"\u041F\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 \u0434\u043B\u044F \u043F\u043E\u043A\u0443\u043F\u043A\u0438",connectHint:"\u041F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u0435 \u043A\u043E\u0448\u0435\u043B\u0451\u043A, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u043F\u043E\u043B\u043D\u044F\u0442\u044C \u0438 \u0432\u044B\u0432\u043E\u0434\u0438\u0442\u044C",connect:"\u041F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043A\u043E\u0448\u0435\u043B\u0451\u043A",notConfigured:"\u041F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 \u043A\u043E\u0448\u0435\u043B\u044C\u043A\u0430 \u0434\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u043D\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043D\u043E.",disconnect:"\u041E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u044C",balance:"\u0411\u0430\u043B\u0430\u043D\u0441 \u0432 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438",deposit:"\u041F\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u044C",withdraw:"\u0412\u044B\u0432\u0435\u0441\u0442\u0438",network:"\u0421\u0435\u0442\u044C",token:"\u0422\u043E\u043A\u0435\u043D",amount:"\u0421\u0443\u043C\u043C\u0430",max:"\u0412\u0421\u0401",minWithdraw:"\u041C\u0438\u043D\u0438\u043C\u0443\u043C \u0434\u043B\u044F \u0432\u044B\u0432\u043E\u0434\u0430: {n}",noNetworks:"\u041A\u0440\u0438\u043F\u0442\u0430 \u0434\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0435\u0449\u0451 \u043D\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043D\u0430.",noTokens:"\u0412 \u044D\u0442\u043E\u0439 \u0441\u0435\u0442\u0438 \u043D\u0435\u0442 \u0442\u043E\u043A\u0435\u043D\u043E\u0432.",depositing:"\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u0432 \u043A\u043E\u0448\u0435\u043B\u044C\u043A\u0435\u2026",withdrawing:"\u0412\u044B\u0432\u043E\u0434\u0438\u043C\u2026",confirming:"\u0416\u0434\u0451\u043C \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u044F \u0441\u0435\u0442\u0438\u2026",loading:"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430\u2026",doneDeposit:"\u041F\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u043E \u2014 \u0431\u0430\u043B\u0430\u043D\u0441 \u043E\u0431\u043D\u043E\u0432\u043B\u0451\u043D.",doneWithdraw:"\u041E\u0442\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043E \u043D\u0430 \u0432\u0430\u0448 \u043A\u043E\u0448\u0435\u043B\u0451\u043A.",topUpNeed:"\u0414\u043B\u044F \u043F\u043E\u043A\u0443\u043F\u043A\u0438 \u043D\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442",topUpMore:"",topUpHint:"\u041F\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435 \u0441 \u043A\u043E\u0448\u0435\u043B\u044C\u043A\u0430 \u2014 \u043F\u043E\u043A\u0443\u043F\u043A\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044F \u0441\u0430\u043C\u0430, \u043A\u0430\u043A \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 \u0437\u0430\u0447\u0438\u0441\u043B\u0438\u0442\u0441\u044F.",topUpCannot:"{name} \u0437\u0434\u0435\u0441\u044C \u043F\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u043D\u0435\u043B\u044C\u0437\u044F.",depositAmount:"\u041F\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u043D\u0430 {amount} {name}",failed:"\u041D\u0435 \u043F\u0440\u043E\u0448\u043B\u043E",debited:"\u0421\u0443\u043C\u043C\u0430 \u0443\u0436\u0435 \u0441\u043F\u0438\u0441\u0430\u043D\u0430 \u2014 \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0435 \u044D\u0442\u043E\u0442 \u0432\u044B\u0432\u043E\u0434, \u043D\u043E\u0432\u044B\u0439 \u043D\u0435 \u0437\u0430\u043F\u0440\u0430\u0448\u0438\u0432\u0430\u0439\u0442\u0435.",tx:"\u0422\u0440\u0430\u043D\u0437\u0430\u043A\u0446\u0438\u044F",backed:"\u041A\u0440\u0438\u043F\u0442\u0430 (\u043C\u043E\u0436\u043D\u043E \u0432\u044B\u0432\u0435\u0441\u0442\u0438)",unbacked:"\u0420\u0430\u0441\u043F\u0438\u0441\u043A\u0438 (\u043F\u043E\u043A\u0430 \u043D\u0435 \u043E\u0431\u0435\u0441\u043F\u0435\u0447\u0435\u043D\u044B)",total:"\u0412\u0441\u0435\u0433\u043E",iouHint:"\u0420\u0430\u0441\u043F\u0438\u0441\u043A\u0438 \u0442\u0440\u0430\u0442\u044F\u0442\u0441\u044F \u0432 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043A\u0430\u043A \u043A\u0440\u0438\u043F\u0442\u0430, \u043D\u043E \u0432\u044B\u0432\u0435\u0441\u0442\u0438 \u043C\u043E\u0436\u043D\u043E \u0442\u043E\u043B\u044C\u043A\u043E \u043E\u0431\u0435\u0441\u043F\u0435\u0447\u0435\u043D\u043D\u0443\u044E \u0447\u0430\u0441\u0442\u044C; \u0440\u0430\u0437\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A \u043E\u0431\u0435\u0441\u043F\u0435\u0447\u0438\u0442 \u0440\u0430\u0441\u043F\u0438\u0441\u043A\u0438 \u043F\u043E\u0437\u0436\u0435.",backedHint:"\u042D\u0442\u043E \u043D\u0430\u0441\u0442\u043E\u044F\u0449\u0430\u044F \u043A\u0440\u0438\u043F\u0442\u0430, \u0435\u0451 \u043C\u043E\u0436\u043D\u043E \u0432\u044B\u0432\u0435\u0441\u0442\u0438 \u0446\u0435\u043B\u0438\u043A\u043E\u043C."};function d(t,e){let n=(yn()?wn:wt)[t]??wt[t];for(let[o,r]of Object.entries(e??{}))n=n.replace(`{${o}}`,String(r));return n}var kn=/^(Not enough confirmations|Transaction not found on chain)/,Cn=8,xn=5e3;function vn(t,e){let n=Math.max(0,Math.floor(e||0)),[o="0",r=""]=t.split(".");if(r.length<=n)return t;let i=r.slice(0,n),p=BigInt(o+i)+(/^0*$/.test(r.slice(n))?BigInt(0):BigInt(1));if(n===0)return p.toString();let l=p.toString().padStart(n+1,"0");return `${l.slice(0,-n)}.${l.slice(-n)}`.replace(/\.?0+$/,"")}function Me(t,e=6){let n=Number(t);return Number.isFinite(n)?n.toLocaleString("en-US",{maximumFractionDigits:Math.max(0,e)}).replace(/,/g," "):String(t)}var xt=t=>t.length>14?`${t.slice(0,6)}\u2026${t.slice(-4)}`:t,kt=t=>/^\d+(\.\d+)?$/.test(t)&&Number(t)>0;function vt({client:t,engine:e,onClose:n,style:o,topUp:r}){let[,i]=react$1.useReducer(g=>g+1,0),[p,l]=react$1.useState(false),[c,y]=react$1.useState({}),[m,k]=react$1.useState({}),[w,T]=react$1.useState("deposit"),[u,A]=react$1.useState(""),[C,F]=react$1.useState(""),[P,O]=react$1.useState(""),[$,Z]=react$1.useState(false),[q,z]=react$1.useState(null),[he,re]=react$1.useState(false);react$1.useEffect(()=>{let g=true;return (async()=>{let[D]=await Promise.all([t.blockchain.getDefinitions(),t.cache.ensureState(["InventoryV2","Blockchain"])]);if(!g||(l(true),!D.ok))return;let v={};for(let[L,G]of Object.entries(D.data.Blockchain?.Networks??{}))G.Type===e.networkType&&(v[L]=G);y(v);let V=D.data.CryptoCurrencies??{};k(V);let J=r?V[r.currencyID]?.Networks?.find(L=>!!L.NetworkID&&!!v[L.NetworkID]&&!!L.ContractAddress&&L.DepositsEnabled!==false&&v[L.NetworkID]?.DepositsEnabled!==false)?.NetworkID:null;A(J??Object.keys(v)[0]??"");})(),()=>{g=false;}},[t,e.networkType]),react$1.useEffect(()=>t.on("user:anyUpdated",i),[t]);let W=react$1.useMemo(()=>Object.entries(m).filter(([,g])=>g.Networks?.some(D=>D.NetworkID===u&&!!D.ContractAddress)),[m,u]);react$1.useEffect(()=>{let g=W[0]?.[0]??"";F(D=>r?r.currencyID:W.some(([v])=>v===D)?D:g);},[W,r]);let I=u?c[u]:void 0,M=C?m[C]:void 0,x=M?.Networks?.find(g=>g.NetworkID===u),K=C?t.data.user.getCryptoCurrencyAmount(C):"0",j=M?.DisplayName??C,ie=C?M?.UnbackedRewardCurrencyID||`${C}_IOU`:"",Dt=ie&&Number(t.data.user.state?.InventoryV2?.VirtualCurrencies?.[ie]?.Amount??0)||0,Et=!!ie&&t.data.user.state?.InventoryV2?.VirtualCurrencies?.[ie]!=null,Oe=M?.DisplayDecimals??6,ae=!!e.address,Ge=!!r&&!!x?.ContractAddress&&C===r.currencyID,be=r&&x?vn(r.amount,x.Decimals??18):"",ke=r?m[r.currencyID]?.DisplayName??r.currencyID:"",_e=Number(x?.MinWithdraw??0);async function Ce(g,D){Z(true),z(null);try{let v=await D();return z({tab:g,res:v}),v.ok&&O(""),v}finally{Z(false);}}async function $e(g){let D=await qe();if(!D)return f("approve",d("noNetworks"));let v=await e.deposit({...g,network:D});if(v.ok||v.stage!=="report"||!v.onChainTxHash)return v;let V=v.onChainTxHash,J=v.error;re(true);try{for(let L=1;L<=Cn&&kn.test(J);L++){await new Promise(Wt=>setTimeout(Wt,xn));let G=await t.blockchain.depositToken(u,V);if(G.ok)return {ok:!0,onChainTxHash:V,data:G.data};if(/^Transaction hash already used/.test(G.error))return await t.cache.ensureState(["InventoryV2"],{force:!0}),{ok:!0,onChainTxHash:V,data:null};J=G.error;}}finally{re(false);}return {...v,error:J}}async function qe(){let g=await t.blockchain.getDefinitions({forceRefresh:true});return g.ok?g.data.Blockchain?.Networks?.[u]??null:null}async function Tt(){let g=await qe();return g?e.withdraw({network:g,networkID:u,currencyID:C,amount:P}):f("request",d("noNetworks"))}let xe=he?d("confirming"):w==="withdraw"&&!r?d("withdrawing"):d("depositing"),It=ae?jsxRuntime.jsxs("div",{style:{...U,display:"flex",alignItems:"center",gap:10,padding:"8px 8px 8px 12px"},children:[jsxRuntime.jsx("span",{style:Tn,"aria-hidden":true}),jsxRuntime.jsxs("div",{style:{display:"grid",flex:1,minWidth:0},children:[jsxRuntime.jsx("span",{style:{...E,fontSize:15,fontFamily:"ui-monospace, Consolas, monospace"},children:xt(e.address)}),I?jsxRuntime.jsx("span",{style:{...N,fontSize:12},children:I.DisplayName??u}):null]}),jsxRuntime.jsx("button",{type:"button",className:"idos-press",style:In,onClick:e.disconnect,children:d("disconnect")})]}):jsxRuntime.jsxs("div",{style:{display:"grid",gap:8},children:[jsxRuntime.jsx("span",{style:N,children:d("connectHint")}),e.connectChoices.length===0?jsxRuntime.jsx("div",{style:{...U,padding:"10px 12px",...N},children:d("notConfigured")}):e.connectChoices.length===1?jsxRuntime.jsx("button",{type:"button",className:"idos-press",style:{...oe("blue",false,"lg"),width:"100%"},onClick:e.connectChoices[0].connect,children:d("connect")}):e.connectChoices.map(g=>jsxRuntime.jsxs("button",{type:"button",className:"idos-press",style:Nn,onClick:g.connect,children:[jsxRuntime.jsx("span",{style:{flex:1,textAlign:"left"},children:g.label}),jsxRuntime.jsx("span",{"aria-hidden":true,style:{color:a.textDim},children:"\u203A"})]},g.key))]}),ze=C?jsxRuntime.jsx(Sn,{icon:jsxRuntime.jsx(Wn,{assets:M?.AssetPaths,name:j}),name:j,backed:Number(K)||0,unbacked:Dt,hasIou:Et,decimals:Oe}):null,Nt=jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[Object.keys(c).length>1?jsxRuntime.jsx(Ct,{caption:d("network"),value:u,onChange:A,options:Object.entries(c).map(([g,D])=>[g,D.DisplayName??g])}):null,W.length===0?jsxRuntime.jsx("div",{style:{...U,padding:"10px 12px",...N},children:d("noTokens")}):W.length>1?jsxRuntime.jsx(Ct,{caption:d("token"),value:C,onChange:F,options:W.map(([g,D])=>[g,D.DisplayName??g])}):null]}),At=jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(Rn,{value:w,onChange:g=>{T(g),z(null),O("");}}),Nt,jsxRuntime.jsxs("div",{style:{display:"grid",gap:6},children:[jsxRuntime.jsx("span",{style:N,children:d("amount")}),jsxRuntime.jsxs("div",{style:{...U,display:"flex",alignItems:"center",gap:8,padding:"4px 6px 4px 14px"},children:[jsxRuntime.jsx("input",{style:Pn,inputMode:"decimal",placeholder:"0.0",value:P,onChange:g=>O(g.target.value.replace(",","."))}),jsxRuntime.jsx("span",{style:{...N,fontSize:14},children:j}),w==="withdraw"&&Number(K)>0?jsxRuntime.jsx("button",{type:"button",className:"idos-press",style:oe("gold",false,"sm"),onClick:()=>O(String(K)),children:d("max")}):null]}),w==="withdraw"&&_e>0?jsxRuntime.jsx("span",{style:{...N,fontSize:12},children:d("minWithdraw",{n:Me(_e,Oe)})}):null]}),w==="deposit"?jsxRuntime.jsx(He,{tone:"green",busy:$,busyText:xe,disabled:!ae||!x?.ContractAddress||!kt(P),onClick:()=>{!I||!x||Ce("deposit",()=>$e({network:I,binding:x,currencyID:C,amount:P}));},children:d("deposit")}):jsxRuntime.jsx(He,{tone:"blue",busy:$,busyText:xe,disabled:!ae||!C||!kt(P),onClick:()=>{I&&Ce("withdraw",()=>Tt());},children:d("withdraw")})]}),Pt=r?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{style:{...bt("gold"),padding:"12px 14px",display:"grid",gap:4},children:Ge?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("span",{style:{...E,color:"inherit",fontSize:13,opacity:.9},children:d("topUpNeed")}),jsxRuntime.jsxs("span",{style:{...E,color:"inherit",fontSize:24,lineHeight:1.1},children:[be," ",ke," ",d("topUpMore")]}),jsxRuntime.jsx("span",{style:{fontSize:13,fontWeight:600,opacity:.95},children:d("topUpHint")})]}):jsxRuntime.jsx("span",{style:{...E,color:"inherit",fontSize:15},children:p?d("topUpCannot",{name:ke}):d("loading")})}),ze,jsxRuntime.jsx(He,{tone:"green",busy:$,busyText:xe,disabled:!ae||!Ge,onClick:()=>{!I||!x||Ce("deposit",()=>$e({network:I,binding:x,currencyID:C,amount:be})).then(g=>{g.ok&&r.onDone(true);});},children:d("depositAmount",{amount:be,name:ke})})]}):null,Ke=!!n;return jsxRuntime.jsxs("div",{style:{...En,...Ke?{...Fe,padding:16,width:360,maxWidth:"100%",maxHeight:"80vh",overflow:"auto"}:{},...o},children:[jsxRuntime.jsx("style",{children:Dn}),Ke?jsxRuntime.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[jsxRuntime.jsx("span",{style:{...E,fontSize:20},children:r?d("topUpTitle"):d("title")}),jsxRuntime.jsx("button",{type:"button",className:"idos-press",style:An,onClick:n,"aria-label":"\u2715",children:"\u2715"})]}):null,It,p?Object.keys(c).length===0?jsxRuntime.jsx("div",{style:{...U,padding:"12px 14px",...N},children:d("noNetworks")}):r?Pt:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[ze,At]}):jsxRuntime.jsx("div",{style:{...N,textAlign:"center",padding:12},children:d("loading")}),q?jsxRuntime.jsx(Bn,{tab:q.tab,result:q.res}):null]})}var Dn="@keyframes idosw-spin { to { transform: rotate(360deg) } }",En={pointerEvents:"auto",color:a.text,fontFamily:a.font,display:"flex",flexDirection:"column",gap:12,boxSizing:"border-box",width:"100%",minWidth:0,maxWidth:"100%"},Tn={width:10,height:10,borderRadius:"50%",background:a.green,boxShadow:`0 0 0 3px color-mix(in srgb, ${a.green} 30%, transparent)`,flex:"none"},In={...E,fontFamily:a.font,fontSize:13,color:a.textDim,background:"transparent",border:`2px solid ${a.line}`,borderRadius:10,padding:"5px 10px",cursor:"pointer"},Nn={...U,...E,fontFamily:a.font,fontSize:15,display:"flex",alignItems:"center",gap:10,padding:"10px 12px",cursor:"pointer",width:"100%"},An={...oe("red",false,"sm"),width:36,minHeight:36,padding:0,borderRadius:"50%"},Pn={...E,fontFamily:a.font,fontSize:22,flex:1,minWidth:0,background:"transparent",border:"none",outline:"none",padding:"6px 0"};function Wn({assets:t,name:e}){let n=t?.Default||t?.Icon||"",o={width:40,height:40,borderRadius:"50%",flex:"none",display:"grid",placeItems:"center",background:`linear-gradient(180deg, ${a.gold}, ${a.goldDeep})`,boxShadow:`0 3px 0 ${a.edge}`,overflow:"hidden",fontSize:22};return /^(https?:)?\/\/|^\//.test(n)?jsxRuntime.jsx("span",{style:o,children:jsxRuntime.jsx("img",{src:n,alt:"",style:{width:"100%",height:"100%",objectFit:"cover"}})}):jsxRuntime.jsx("span",{style:{...o,...E,fontSize:20},"aria-hidden":true,children:(e.trim()[0]??"?").toUpperCase()})}function Sn({icon:t,name:e,backed:n,unbacked:o,hasIou:r,decimals:i}){let[p,l]=react$1.useState(false),c=(y,m,k=false)=>jsxRuntime.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:16},children:[jsxRuntime.jsx("span",{style:{...N,fontSize:13},children:y}),jsxRuntime.jsx("span",{style:{...E,fontSize:14,color:k?a.textDim:a.text},children:Me(m,i)})]});return jsxRuntime.jsxs("div",{style:{position:"relative"},onMouseEnter:()=>l(true),onMouseLeave:()=>l(false),children:[jsxRuntime.jsxs("button",{type:"button","aria-expanded":p,onClick:()=>l(y=>!y),onBlur:()=>l(false),style:{...U,display:"flex",alignItems:"center",gap:12,padding:"10px 14px",width:"100%",cursor:"pointer",font:"inherit",textAlign:"left"},children:[t,jsxRuntime.jsxs("span",{style:{display:"grid",minWidth:0,flex:1},children:[jsxRuntime.jsx("span",{style:{...N,fontSize:12},children:d("balance")}),jsxRuntime.jsxs("span",{style:{...E,fontSize:22,lineHeight:1.1},children:[Me(n+o,i)," ",jsxRuntime.jsx("span",{style:{fontSize:15,color:a.textDim},children:e})]})]}),jsxRuntime.jsx("span",{"aria-hidden":true,style:{...N,fontSize:16},children:"\u24D8"})]}),p?jsxRuntime.jsxs("div",{role:"tooltip",style:{...Fe,position:"absolute",left:0,right:0,top:"calc(100% + 6px)",zIndex:5,padding:"10px 12px",display:"grid",gap:6},children:[c(d("backed"),n),r?c(d("unbacked"),o,o===0):null,jsxRuntime.jsx("div",{style:{height:1,background:a.line}}),c(d("total"),n+o),jsxRuntime.jsx("span",{style:{fontSize:12,color:a.textDim,lineHeight:1.35},children:r?d("iouHint"):d("backedHint")})]}):null]})}function Rn({value:t,onChange:e}){let n=[["deposit",d("deposit")],["withdraw",d("withdraw")]];return jsxRuntime.jsx("div",{role:"tablist",style:{display:"flex",gap:6,padding:4,borderRadius:16,background:a.wellSoft},children:n.map(([o,r])=>{let i=o===t;return jsxRuntime.jsx("button",{role:"tab","aria-selected":i,type:"button",className:"idos-press",onClick:()=>!i&&e(o),style:{...E,fontFamily:a.font,fontSize:15,flex:1,border:"none",borderRadius:12,padding:"9px 14px",cursor:"pointer",color:i?a.onBlue:a.textDim,background:i?`linear-gradient(180deg, ${a.blue}, ${a.blueDeep})`:"transparent",boxShadow:i?`0 3px 0 ${a.edge}, inset 0 2px 0 rgba(255,255,255,.3)`:"none",transition:`background ${a.fast} ease`},children:r},o)})})}function Ct({caption:t,value:e,onChange:n,options:o}){return jsxRuntime.jsxs("label",{style:{display:"grid",gap:6},children:[jsxRuntime.jsx("span",{style:N,children:t}),jsxRuntime.jsxs("span",{style:{position:"relative",display:"block"},children:[jsxRuntime.jsx("select",{value:e,onChange:r=>n(r.target.value),style:{...U,...E,fontFamily:a.font,fontSize:15,width:"100%",padding:"10px 36px 10px 12px",appearance:"none",WebkitAppearance:"none",cursor:"pointer",outline:"none"},children:o.map(([r,i])=>jsxRuntime.jsx("option",{value:r,style:{color:"#111"},children:i},r))}),jsxRuntime.jsx("span",{"aria-hidden":true,style:{position:"absolute",right:14,top:"50%",transform:"translateY(-50%)",color:a.textDim,pointerEvents:"none"},children:"\u25BE"})]})]})}function He({tone:t,busy:e,busyText:n,disabled:o,onClick:r,children:i}){return jsxRuntime.jsx("button",{type:"button",className:"idos-press",disabled:o||e,onClick:r,style:{...oe(t,o&&!e,"lg"),width:"100%"},children:e?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("span",{"aria-hidden":true,style:{width:18,height:18,borderRadius:"50%",border:"3px solid rgba(255,255,255,.35)",borderTopColor:"#fff",animation:"idosw-spin .8s linear infinite"}}),n]}):i})}function Bn({tab:t,result:e}){let n=e.ok,o={borderRadius:14,padding:"10px 12px",display:"grid",gap:4,background:`color-mix(in srgb, ${n?a.green:a.red} 22%, transparent)`,border:`2px solid color-mix(in srgb, ${n?a.green:a.red} 60%, transparent)`,wordBreak:"break-word"};return n?jsxRuntime.jsxs("div",{style:o,role:"status",children:[jsxRuntime.jsxs("span",{style:{...E,fontSize:15},children:["\u2713 ",t==="withdraw"?d("doneWithdraw"):d("doneDeposit")]}),jsxRuntime.jsxs("span",{style:{...N,fontSize:12},children:[d("tx"),": ",xt(e.onChainTxHash)]})]}):jsxRuntime.jsxs("div",{style:o,role:"alert",children:[jsxRuntime.jsxs("span",{style:{...E,fontSize:15},children:["\u2715 ",d("failed")]}),jsxRuntime.jsx("span",{style:{fontSize:13,color:a.text,opacity:.9},children:e.error}),e.titleTransactionID?jsxRuntime.jsx("span",{style:{...N,fontSize:12},children:d("debited")}):null]})}function $n(t){let{client:e,walletConnectProjectId:n,appName:o,onClose:r,style:i,topUp:p}=t,[l,c]=react$1.useState(n??"");react$1.useEffect(()=>{if(n)return;let m=true;return (async()=>{let k=await e.blockchain.getDefinitions();if(!m||!k.ok)return;let w=k.data.Blockchain?.WalletLogin?.WalletConnectProjectId;w&&c(w);})(),()=>{m=false;}},[e,n]);let y=react$1.useMemo(()=>Ee({walletConnectProjectId:l||void 0,appName:o}),[l,o]);return jsxRuntime.jsx(X,{wagmiConfig:y,children:jsxRuntime.jsx(qn,{client:e,onClose:r,style:i,topUp:p})})}function qn({client:t,onClose:e,style:n,topUp:o}){let r=Re(t,t.titleID),{address:i,isConnected:p,chainId:l}=wagmi.useAccount(),{connect:c,connectors:y}=wagmi.useConnect(),{disconnect:m}=wagmi.useDisconnect(),{switchChainAsync:k}=wagmi.useSwitchChain();async function w(u){if(!u||l===u)return true;try{return await k({chainId:u}),!0}catch{return false}}let T={networkType:"EVM",address:p&&i?i:null,connectChoices:y.map(u=>({key:u.uid,label:u.name,connect:()=>c({connector:u})})),disconnect:()=>m(),deposit:async({network:u,binding:A,amount:C})=>{if(!A.ContractAddress)return f("approve","This token cannot be deposited.");if(!await w(u.ChainID))return f("approve",`Switch your wallet to chain ${u.ChainID} to continue.`);let F;try{F=viem.parseUnits(C,A.Decimals??18);}catch{return f("approve","Invalid amount.")}return r.depositToken({network:u,tokenAddress:A.ContractAddress,amount:F})},withdraw:async({network:u,networkID:A,currencyID:C,amount:F})=>r.account?await w(u.ChainID)?r.withdrawToken({currencyID:C,networkID:A,walletAddress:r.account,amount:F}):f("request",`Switch your wallet to chain ${u.ChainID} to continue.`):f("request","Wallet not connected.")};return jsxRuntime.jsx(vt,{client:t,engine:T,onClose:e,style:n,topUp:o})}function jn(t){let[e,n]=react$1.useState(null);return react$1.useEffect(()=>{if(R()||ot())return;let o=null;return t.checkout.setTopUpHandler(r=>new Promise(i=>{o?.(false);let p=false,l=c=>{p||(p=true,o===l&&(o=null),n(y=>y?.onDone===l?null:y),i(c));};o=l,n({currencyID:r.currencyID,amount:r.missingAmount??String(r.missing),onDone:l});})),()=>{t.checkout.setTopUpHandler(null),o?.(false);}},[t]),e}
2
+ exports.DEFAULT_EVM_CHAINS=Ze;exports.IDosGamesWalletProvider=X;exports.WalletLogin=on;exports.WalletLoginButton=yt;exports.WalletPanel=$n;exports.arbitrum=pe;exports.base=de;exports.bsc=le;exports.chainById=St;exports.createEvmWalletConfig=Ee;exports.idosChains=je;exports.mainnet=se;exports.optimism=ue;exports.polygon=ce;exports.polygonAmoy=fe;exports.sepolia=me;exports.useEvmBridge=Re;exports.useEvmBridgeClients=ye;exports.useWalletTopUp=jn;
@@ -7,6 +7,8 @@ import { ReactNode, CSSProperties } from 'react';
7
7
  import { QueryClient } from '@tanstack/react-query';
8
8
  import { ClientState, DepositTokenResponse, DepositNFTResponse, TokenWithdrawalResponse, NFTWithdrawalResponse, IDosGamesClient, PlayAccessStatus } from '@idosgames/core';
9
9
  import { b as DepositTokenEvmParams, a as DepositNftEvmParams, d as WithdrawTokenEvmParams, W as WithdrawNftEvmParams, E as EvmBridgeClients } from '../withdraw-DttqktSS.cjs';
10
+ import { W as WalletTopUpRequest } from '../topUp-CCNQcHcH.cjs';
11
+ export { u as useWalletTopUp } from '../topUp-CCNQcHcH.cjs';
10
12
 
11
13
  /**
12
14
  * The EVM chains a game supports out of the box. Both the sign-in button and the in-game wallet
@@ -166,6 +168,11 @@ interface WalletPanelProps {
166
168
  onClose?: () => void;
167
169
  /** Overrides for the outer card container, merged over the defaults key by key. */
168
170
  style?: CSSProperties;
171
+ /**
172
+ * Top up for a purchase the engine refused for a crypto shortfall: the panel shows only this
173
+ * currency and the missing amount, then calls `topUp.onDone(true)` (see `useWalletTopUp`).
174
+ */
175
+ topUp?: WalletTopUpRequest;
169
176
  }
170
177
  /**
171
178
  * Public entry: the in-game wallet panel wrapped in its own wagmi/react-query provider.
@@ -175,4 +182,4 @@ interface WalletPanelProps {
175
182
  */
176
183
  declare function WalletPanel(props: WalletPanelProps): ReactNode;
177
184
 
178
- export { DEFAULT_EVM_CHAINS, type EvmBridge, type EvmWalletConfigOptions, IDosGamesWalletProvider, type IDosGamesWalletProviderProps, WalletLogin, WalletLoginButton, type WalletLoginButtonProps, type WalletLoginProps, WalletPanel, type WalletPanelProps, createEvmWalletConfig, useEvmBridge, useEvmBridgeClients };
185
+ export { DEFAULT_EVM_CHAINS, type EvmBridge, type EvmWalletConfigOptions, IDosGamesWalletProvider, type IDosGamesWalletProviderProps, WalletLogin, WalletLoginButton, type WalletLoginButtonProps, type WalletLoginProps, WalletPanel, type WalletPanelProps, WalletTopUpRequest, createEvmWalletConfig, useEvmBridge, useEvmBridgeClients };
@@ -7,6 +7,8 @@ import { ReactNode, CSSProperties } from 'react';
7
7
  import { QueryClient } from '@tanstack/react-query';
8
8
  import { ClientState, DepositTokenResponse, DepositNFTResponse, TokenWithdrawalResponse, NFTWithdrawalResponse, IDosGamesClient, PlayAccessStatus } from '@idosgames/core';
9
9
  import { b as DepositTokenEvmParams, a as DepositNftEvmParams, d as WithdrawTokenEvmParams, W as WithdrawNftEvmParams, E as EvmBridgeClients } from '../withdraw-BPbJQVNt.js';
10
+ import { W as WalletTopUpRequest } from '../topUp-CCNQcHcH.js';
11
+ export { u as useWalletTopUp } from '../topUp-CCNQcHcH.js';
10
12
 
11
13
  /**
12
14
  * The EVM chains a game supports out of the box. Both the sign-in button and the in-game wallet
@@ -166,6 +168,11 @@ interface WalletPanelProps {
166
168
  onClose?: () => void;
167
169
  /** Overrides for the outer card container, merged over the defaults key by key. */
168
170
  style?: CSSProperties;
171
+ /**
172
+ * Top up for a purchase the engine refused for a crypto shortfall: the panel shows only this
173
+ * currency and the missing amount, then calls `topUp.onDone(true)` (see `useWalletTopUp`).
174
+ */
175
+ topUp?: WalletTopUpRequest;
169
176
  }
170
177
  /**
171
178
  * Public entry: the in-game wallet panel wrapped in its own wagmi/react-query provider.
@@ -175,4 +182,4 @@ interface WalletPanelProps {
175
182
  */
176
183
  declare function WalletPanel(props: WalletPanelProps): ReactNode;
177
184
 
178
- export { DEFAULT_EVM_CHAINS, type EvmBridge, type EvmWalletConfigOptions, IDosGamesWalletProvider, type IDosGamesWalletProviderProps, WalletLogin, WalletLoginButton, type WalletLoginButtonProps, type WalletLoginProps, WalletPanel, type WalletPanelProps, createEvmWalletConfig, useEvmBridge, useEvmBridgeClients };
185
+ export { DEFAULT_EVM_CHAINS, type EvmBridge, type EvmWalletConfigOptions, IDosGamesWalletProvider, type IDosGamesWalletProviderProps, WalletLogin, WalletLoginButton, type WalletLoginButtonProps, type WalletLoginProps, WalletPanel, type WalletPanelProps, WalletTopUpRequest, createEvmWalletConfig, useEvmBridge, useEvmBridgeClients };