1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[41245],{15133:(e,t,n)=>{n.d(t,{Fy:()=>d,HF:()=>o,x3:()=>f});var a=n(24784);let l=new Map,r=new Map;function o(e){l.delete(e),r.delete(e)}function s(e){let[t,n,l]=e.split(":");return!!t&&!!n&&!!l&&!!(0,a.P)(n,{strict:!1})}function i(e){return{name:"Unknown Token",description:"Metadata could not be loaded",image:"",tokenRef:e,tokenType:"ERC721",balance:"0"}}function u(e,t){return e.tokenRef&&e.tokenRef!==t?{...e,emulatedTokenRef:e.tokenRef,tokenRef:t}:e}async function d(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!s(e))return;if(!t&&l.has(e))return l.get(e);if(!t&&r.has(e))return r.get(e);t&&(l.delete(e),r.delete(e));let n=c(e,t);r.set(e,n);try{return await n}finally{r.delete(e)}}async function c(e,t){try{let n=new URL("/metadata-api/metadata/token/".concat(e),window.location.origin);t&&n.searchParams.set("force","true");let a=await fetch(n.toString());if(!a.ok)throw Error("Failed to fetch metadata: ".concat(a.statusText));let r=await a.json(),o=u(r,e);return l.set(e,o),o}catch(t){return console.error("Error fetching token metadata:",t),i(e)}}async function f(e){var t,n;let a=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=new Map,d=[],c=[],f=[];for(let t of e)if(s(t)){if(a)l.delete(t),r.delete(t);else{let e=l.get(t);if(e){o.set(t,e);continue}let n=r.get(t);if(n){c.push(n),f.push(t);continue}}d.push(t)}if(c.length>0&&(await Promise.all(c.map(e=>e.catch(()=>void 0)))).forEach((e,t)=>{let n=f[t];o.set(n,null!=e?e:i(n))}),0===d.length)return o;let w=new Map;for(let e of d){let t=new Promise((t,n)=>{w.set(e,{resolve:t,reject:n})});r.set(e,t)}try{let e=[];for(let t=0;t<d.length;t+=200)e.push(d.slice(t,t+200));let n=await Promise.all(e.map(e=>g(e,a)));for(let a=0;a<e.length;a++){let r=e[a],s=n[a];for(let e of r){let n,a=s[e.toLowerCase()];!a||"error"in a?n=i(e):(n=u(a,e),l.set(e,n)),o.set(e,n),null==(t=w.get(e))||t.resolve(n)}}}catch(e){for(let e of d){let t=i(e);o.set(e,t),null==(n=w.get(e))||n.resolve(t)}console.error("Batch metadata request failed:",e)}finally{for(let e of d)r.delete(e)}return o}async function g(e,t){var n;let a=new URL("/metadata-api/metadata/tokens",window.location.origin),l=await fetch(a.toString(),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refs:e,force:t})});if(!l.ok)throw Error("Batch metadata fetch failed: ".concat(l.statusText));return null!=(n=(await l.json()).results)?n:{}}},17114:(e,t,n)=>{n.d(t,{PS:()=>m,QS:()=>w,V5:()=>p,Wr:()=>g,b3:()=>c,cn:()=>h,k_:()=>f,vv:()=>b,xC:()=>v});var a=n(2821),l=n(75889),r=n(48656),o=n(82050),s=n(13933),i=n(35326),u=n(8624),d=n(85758);function c(e){let t=e.quest;return"quest"===e.type&&(null==t?void 0:t.tasks)&&Array.isArray(t.tasks)&&!!t.tasks.length}let f=e=>parseInt(e.balance||"0")>=(e.quest.completionQuantity||0);function g(e){return"".concat(e.substring(0,6),"...").concat(e.substring(e.length-4,e.length))}function w(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:3,n=0;if("string"==typeof e){try{n=Number(e)}catch(t){return console.error(t),e}if(isNaN(n))return e}else n=e;if(n<1e3)return n.toFixed(t);if(n<1e6){let e=n/1e3;return"".concat(e.toFixed(0),"K")}if(n<1e9){let e=n/1e6;return"".concat(e.toFixed(0),"M")}return"".concat((n/1e9).toFixed(0),"B")}function h(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,l.QP)((0,a.$)(t))}let k=()=>d.oA,v=e=>{if(!e||"string"!=typeof e)return console.warn("getAssetPrefix: Invalid relativePath provided:",e),k();let t=e.startsWith("/")?e:"/".concat(e);return k()+t};function p(e,t){let n=Error("Unknown Error. Context: ".concat(t));if(e instanceof s.C){let r=e.walk(e=>e instanceof i.M);if(r instanceof i.M){var a,l;let e=null!=(l=null==(a=r.data)?void 0:a.errorName)?l:"UnknownError";console.log({errorType:"Contract Error",context:t,errorName:e}),n=Error(e)}}if(e&&"object"==typeof e&&"cause"in e){let t=e.cause;t&&"object"==typeof t&&"data"in t&&(n=Error(t.data))}return n}(0,r.l)({chain:u.Yy,transport:(0,o.L)()});let b=(e,t)=>new Intl.NumberFormat(["en-US"],{style:"currency",currency:t||"USD"}).format(Number(e||0)),m=e=>b(0,e).replace(/[.\d]/g,"").trim()}
1,36614:(e,t,n)=>{n.d(t,{h:()=>r});var a=n(53455),l=n(77608);let r=e=>(0,a.I)({queryKey:["linkedWallets",e],queryFn:async()=>{let t=await fetch("/api/userData?wallet=".concat(e),{cache:"no-store"});if(!t.ok)throw Error("Failed to fetch linked wallets");return(await t.json()).walletAddresses.map(e=>(0,l.b)(e))},enabled:!!e,staleTime:1e4})},82743:(e,t,n)=>{n.d(t,{IndexerStoreProvider:()=>p,u:()=>b});var a=n(95155),l=n(12115),r=n(71138),o=n(24784),s=n(77608),i=n(90490),u=n(15133);let d={wssUrl:"",loadingBalances:{},metadataResolving:{},wallets:[],balanceMetadata:{},error:null};function c(e,t,n,a){return{image:"",name:void 0,tokenRef:e,tokenType:t,balance:n,wallet:a}}function f(e){return""!==e.image||void 0!==e.name}function g(e,t){var n,a,l;if(e){for(let a of null!=(n=e.delegatedTokens)?n:[])t("delegatedTokens",a,"ERC721","1");for(let n of null!=(a=e.undelegatedTokens)?a:[])t("undelegatedTokens",n,"ERC721","1");for(let[n,a]of null!=(l=e.fungibleTokens)?l:[])t("undelegatedTokens",n,"ERC1155",a)}}function w(e){try{return 0n===BigInt(e)}catch(e){return!1}}async function h(e,t,n,a){for(let l=0;l<n.length;l+=200){let r;if(!a())return;let o=n.slice(l,l+200),s=o.map(e=>e.ref);try{r=await (0,u.x3)(s)}catch(e){console.warn("Batch metadata fetch failed for wallet ".concat(t,":"),e);continue}if(!a())return;let i=e.getState(),d=i.balanceMetadata[t];if(!d)return;for(let e of o){let n=r.get(e.ref);if(!n)continue;let a=e.ref.toLowerCase(),l=d[e.category].get(a);l&&d[e.category].set(a,{...n,tokenType:l.tokenType,balance:l.balance,wallet:t})}e.setState({balanceMetadata:{...i.balanceMetadata,[t]:{delegatedTokens:d.delegatedTokens,undelegatedTokens:d.undelegatedTokens}}})}}let k=(0,l.createContext)(void 0),v={0:"connecting",1:"open",2:"closing",3:"closed"};function p(e){let{children:t,wssUrl:n}=e,r=(0,l.useRef)(null);return null===r.current&&(r.current=function(e){let{initialState:t=d}=e,n=null,a=new Map,l=new Map,r=new Map,k=!1;function v(e){var t;a.set(e,(null!=(t=a.get(e))?t:0)+1),l.delete(e)}let p=(0,i.y)((e,i)=>{function d(t,n){let a=i().metadataResolving;a[t]!==n&&e({metadataResolving:{...a,[t]:n}})}function b(e,t){var n,o;if(!t.length)return;let s=null!=(n=a.get(e))?n:0,i=()=>{var t;return(null!=(t=a.get(e))?t:0)===s};l.set(e,(null!=(o=l.get(e))?o:0)+1),d(e,!0),h(p,e,t,i).catch(e=>{console.warn("Metadata resolution loop failed:",e)}).finally(()=>{var t;if(!i())return;if(!r.has(e))return void v(e);let n=(null!=(t=l.get(e))?t:1)-1;l.set(e,n),n<=0&&d(e,!1)})}function m(t,n){var r;let o=i(),{balance:s,pending:u}=function(e,t,n){let a={delegatedTokens:new Map,undelegatedTokens:new Map},l=[];return g(e,(e,r,o,s)=>{var i;if("ERC1155"===o&&w(s))return;let u=r.toLowerCase(),d=null!=(i=null==n?void 0:n.delegatedTokens.get(u))?i:null==n?void 0:n.undelegatedTokens.get(u);if(d&&f(d))return void a[e].set(u,{...d,tokenRef:r,tokenType:o,balance:s,wallet:t});a[e].set(u,c(r,o,s,t)),l.push({ref:r,category:e,tokenType:o,balance:s})}),{balance:a,pending:l}}(n,t,o.balanceMetadata[t]);a.set(t,(null!=(r=a.get(t))?r:0)+1),l.set(t,0),e({loadingBalances:{...o.loadingBalances,[t]:!1},metadataResolving:{...o.metadataResolving,[t]:u.length>0},balanceMetadata:{...o.balanceMetadata,[t]:s},error:null}),b(t,u)}function T(t,n){let a=i(),l=a.balanceMetadata[t];if(!l)return void console.warn("Ignoring indexer diff for ".concat(t,": no snapshot received yet"));let{balance:r,pending:o}=function(e,t,n){let a={delegatedTokens:new Map(e.delegatedTokens),undelegatedTokens:new Map(e.undelegatedTokens)},l=[],r=new Map;for(let t of[e.delegatedTokens,e.undelegatedTokens])for(let[e,n]of t)f(n)&&r.set(e,n);g(t.deletions,(e,t)=>{a[e].delete(t.toLowerCase())});let o=(e,t,o,s)=>{let i=t.toLowerCase();if(a["delegatedTokens"===e?"undelegatedTokens":"delegatedTokens"].delete(i),"ERC1155"===o&&w(s))return void a[e].delete(i);let u=r.get(i);if(u)return void a[e].set(i,{...u,tokenRef:t,tokenType:o,balance:s,wallet:n});a[e].set(i,c(t,o,s,n)),l.push({ref:t,category:e,tokenType:o,balance:s})};return g(t.additions,o),g(t.updates,o),{balance:a,pending:l}}(l,n,t);e({balanceMetadata:{...a.balanceMetadata,[t]:r},error:null}),b(t,o)}function y(){k||(k=!0,queueMicrotask(()=>{k=!1,function(){var t;let a=i().wssUrl;if(!a)return;let l=[...r.keys()],o=i().wallets;if(l.length===o.length&&o.every(e=>r.has(e)))return;for(let e of o)r.has(e)||v(e);let s={},u={},d={},c=i();for(let e of l){let n=c.balanceMetadata[e];n&&(d[e]=n),s[e]=!n,u[e]=null!=(t=c.metadataResolving[e])&&t}if(e({wallets:l,loadingBalances:s,metadataResolving:u,balanceMetadata:d}),!l.length){null==n||n.close(),n=null;return}(!n&&(n=function(e){let{wssUrl:t,handlers:n}=e,a=null,l=[],r=new Map,o=0,s=null,i=!1;function u(e){if("string"==typeof e){let t=r.get(e.toLowerCase());return t||void console.warn("Indexer message for an unsubscribed wallet:",e)}if(1===l.length)return l[0];console.warn("Indexer message with no wallet field on a multi-wallet connection")}function d(e,t){try{t()}catch(t){console.error("Error applying indexer message for ".concat(e),t),n.onMessageError(e,t instanceof Error?t:Error("Malformed message from indexer server"))}}function c(e){let t;try{t=JSON.parse(e.data)}catch(e){console.error("Error parsing indexer websocket message",e);return}if(o=0,i=!1,"object"!=typeof t||null===t)return void console.warn("Ignoring non-object indexer message:",t);!function(e){if("balanceDiff"in e){let t=u(e.wallet);if(!t)return;d(t,()=>n.onDiff(t,e.balanceDiff));return}if("balance"in e){let t=u(e.wallet);if(!t)return;d(t,()=>n.onSnapshot(t,e.balance));return}if(1===l.length){let t=l[0];d(t,()=>n.onSnapshot(t,e));return}console.warn("Ignoring unwrapped indexer balance on a multi-wallet connection")}(t)}function f(){s&&(clearTimeout(s),s=null)}function g(){let e=a;a=null,e&&(e.onmessage=null,e.onerror=null,e.onclose=null,e.close())}return{setWallets:e=>{l=e,r=new Map(e.map(e=>[e.toLowerCase(),e])),function e(){if(!l.length)return;f(),g();let r=new WebSocket("".concat(t,"/").concat(l.join("+"),"?mode=diff"));a=r,r.onmessage=c,r.onerror=()=>{i||o<3||(i=!0,n.onError(Error("Unable to connect to indexer server")))},r.onclose=()=>{a=null,function(){if(s||!l.length)return;let t=Math.min(500*2**o,3e4);o+=1,s=setTimeout(()=>{s=null,e()},t/2+t/2*Math.random())}()}}()},getStatus:()=>({readyState:a?a.readyState:null,reconnectAttempts:o,reconnectPending:null!==s}),close:()=>{l=[],r=new Map,f(),g()}}}({wssUrl:a,handlers:{onSnapshot:m,onDiff:T,onError:t=>{let n={...i().loadingBalances};for(let e of i().wallets)n[e]=!1;e({error:t,loadingBalances:n})},onMessageError:(t,n)=>{e({error:n,loadingBalances:{...i().loadingBalances,[t]:!1}})}}})),n).setWallets(l)}()}))}return{...t,subscribeWallets:t=>{if(!i().wssUrl)throw Error("WSS URL is not set");let n=[];for(let e of t){if(!(0,o.P)(e,{strict:!1})){console.warn("Skipping invalid indexer wallet address:",e);continue}n.push((0,s.b)(e))}let a=i(),l={...a.loadingBalances},u=!1;for(let e of n){var d;r.set(e,(null!=(d=r.get(e))?d:0)+1);let t=!a.balanceMetadata[e];l[e]!==t&&(l[e]=t,u=!0)}return u&&e({loadingBalances:l}),y(),()=>{for(let t of n){var e;let n=(null!=(e=r.get(t))?e:1)-1;n<=0?r.delete(t):r.set(t,n)}y()}},refreshTokenMetadata:t=>{let n=t.toLowerCase();(0,u.HF)(n),(async()=>{let t=await (0,u.Fy)(n,!0);if(!t)return;let{balanceMetadata:a}=i(),l={...a},r=!1;for(let e of Object.keys(a)){let o=a[e];if(!o)continue;let s=e=>{let a=e.get(n);return!!a&&(e.set(n,{...t,tokenRef:a.tokenRef,tokenType:a.tokenType,balance:a.balance,wallet:a.wallet}),!0)},i=s(o.delegatedTokens),u=s(o.undelegatedTokens);(i||u)&&(l[e]={delegatedTokens:o.delegatedTokens,undelegatedTokens:o.undelegatedTokens}
1,r=!0)}r&&e({balanceMetadata:l})})()},getConnectionStatus:()=>{var e;return null!=(e=null==n?void 0:n.getStatus())?e:{readyState:null,reconnectAttempts:0,reconnectPending:!1}},disconnect:()=>{for(let e of(null==n||n.close(),n=null,[...a.keys()]))v(e);l.clear(),r.clear(),e({wallets:[],loadingBalances:{},metadataResolving:{},balanceMetadata:{},error:null})}}});return p}({initialState:{...d,wssUrl:n}})),(0,l.useEffect)(()=>{let e=r.current;if(!e)return;let t=t=>{"string"==typeof t&&t&&e.getState().refreshTokenMetadata(t)},n=()=>{var t;let{wallets:n,balanceMetadata:a,loadingBalances:l,metadataResolving:r,error:o,getConnectionStatus:s}=e.getState(),{readyState:i,reconnectAttempts:u,reconnectPending:d}=s(),c={};for(let e of new Set([...n,...Object.keys(a)])){let t=a[e],n=t?[...t.delegatedTokens.values(),...t.undelegatedTokens.values()]:void 0;c[e]={tokens:n?n.length:"no snapshot yet",loadingBalances:l[e],metadataResolving:r[e],unresolvedTokens:null==n?void 0:n.filter(e=>""===e.image).length}}return{subscribedWallets:n,connection:{state:null===i?"no socket":null!=(t=v[i])?t:"unknown (".concat(i,")"),reconnectAttempts:u,reconnectPending:d},error:o?o.message:null,wallets:c}};return window.hub={...window.hub,refreshTokenMetadata:t,indexerDebug:n},()=>{var a,l;(null==(a=window.hub)?void 0:a.refreshTokenMetadata)===t&&delete window.hub.refreshTokenMetadata,(null==(l=window.hub)?void 0:l.indexerDebug)===n&&delete window.hub.indexerDebug,e.getState().disconnect()}},[]),(0,a.jsx)(k.Provider,{value:r.current,children:t})}function b(e){let t=(0,l.useContext)(k);if(!t)throw Error("useIndexerStore must be used within IndexerStoreProvider");if(!t.getState().wssUrl)throw Error("IndexerStoreProvider must be used with a valid wssUrl");return(0,r.P)(t,e)}},91566:(e,t,n)=>{n.d(t,{N:()=>f});var a=n(88601),l=n(12115),r=n(24784),o=n(32108),s=n(4538),i=n(82743),u=n(8624),d=n(36614);let c={balanceMetadata:{delegatedTokens:[],undelegatedTokens:[]},allTradeable:[],allNonTradeable:[],allLinked:[],error:null,loading:!1};function f(e){let{user:t}=(0,a.u)(),n=(0,i.u)(e=>e.subscribeWallets),{balanceMetadata:f,loadingBalances:g,error:w}=(0,i.u)((0,s.k)(e=>({balanceMetadata:e.balanceMetadata,loadingBalances:e.loadingBalances,error:e.error}))),h=(0,l.useMemo)(()=>{var n;return e&&(0,r.P)(e,{strict:!1})?e:(null==t||null==(n=t.wallet)?void 0:n.address)&&(0,r.P)(t.wallet.address,{strict:!1})?t.wallet.address:void 0},[e,t]),{data:k,error:v,isFetched:p}=(0,d.h)(h),b=(0,l.useMemo)(()=>null!=k?k:[],[k]);(0,l.useEffect)(()=>{if(b.length)return n(b)},[b,n]);let m=(0,l.useMemo)(()=>{if(!b.length)return{delegatedTokens:[],undelegatedTokens:[]};let e=[],t=[];for(let n of b){let a=f[n];if(a){for(let t of a.delegatedTokens.values())e.push(t);for(let e of a.undelegatedTokens.values())t.push(e)}}return{delegatedTokens:e,undelegatedTokens:t}},[f,b]),{allTradeable:T,allNonTradeable:y}=(0,l.useMemo)(()=>{if(!h||!b.length)return{allTradeable:[],allNonTradeable:[]};let e=[],t=[];for(let n of m.undelegatedTokens)if(n.wallet&&(0,r.P)(n.wallet,{strict:!1})&&(0,o.h)(n.wallet,h)){if(n.tokenRef.startsWith(u.Yy.id.toString())){e.push(n);continue}t.push(n)}for(let e of m.delegatedTokens)e.wallet&&(0,r.P)(e.wallet,{strict:!1})&&(0,o.h)(e.wallet,h)&&t.push(e);return{allTradeable:e,allNonTradeable:t}},[m,h,b]),M=(0,l.useMemo)(()=>{if(!h||!b.length)return[];let e=new Set,t=[];for(let n of[...(null==m?void 0:m.delegatedTokens)||[],...(null==m?void 0:m.undelegatedTokens)||[]].filter(e=>e.wallet&&(0,r.P)(e.wallet,{strict:!1})&&!(0,o.h)(e.wallet,h))){let a=n.tokenRef;e.has("".concat(a,"-").concat(n.wallet))||(e.add("".concat(a,"-").concat(n.wallet)),t.push(n))}return t},[m,h,b]),S=(0,l.useMemo)(()=>!v&&(!p||!!b.length&&b.some(e=>!0===g[e])),[p,b,v,g]);return h?{balanceMetadata:m,allTradeable:T,allNonTradeable:y,allLinked:M,error:v instanceof Error?v:w,loading:S}:c}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.