@latticexyz/explorer 2.2.15-main-07b6be82ace9654ce043e616e28b347f3121f415 → 2.2.15-main-f5f772b44fc735c3874834fb14cc28e8a54f8957

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.
Files changed (59) hide show
  1. package/.next/standalone/packages/explorer/.next/BUILD_ID +1 -1
  2. package/.next/standalone/packages/explorer/.next/app-build-manifest.json +24 -24
  3. package/.next/standalone/packages/explorer/.next/app-path-routes-manifest.json +1 -1
  4. package/.next/standalone/packages/explorer/.next/build-manifest.json +5 -5
  5. package/.next/standalone/packages/explorer/.next/prerender-manifest.json +1 -1
  6. package/.next/standalone/packages/explorer/.next/react-loadable-manifest.json +4 -2
  7. package/.next/standalone/packages/explorer/.next/server/app/(explorer)/[chainName]/page.js +1 -1
  8. package/.next/standalone/packages/explorer/.next/server/app/(explorer)/[chainName]/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/packages/explorer/.next/server/app/(explorer)/[chainName]/worlds/[worldAddress]/explore/page.js +1 -1
  10. package/.next/standalone/packages/explorer/.next/server/app/(explorer)/[chainName]/worlds/[worldAddress]/explore/page.js.nft.json +1 -1
  11. package/.next/standalone/packages/explorer/.next/server/app/(explorer)/[chainName]/worlds/[worldAddress]/explore/page_client-reference-manifest.js +1 -1
  12. package/.next/standalone/packages/explorer/.next/server/app/(explorer)/[chainName]/worlds/[worldAddress]/interact/page.js +1 -1
  13. package/.next/standalone/packages/explorer/.next/server/app/(explorer)/[chainName]/worlds/[worldAddress]/interact/page.js.nft.json +1 -1
  14. package/.next/standalone/packages/explorer/.next/server/app/(explorer)/[chainName]/worlds/[worldAddress]/interact/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/packages/explorer/.next/server/app/(explorer)/[chainName]/worlds/[worldAddress]/observe/page.js +1 -1
  16. package/.next/standalone/packages/explorer/.next/server/app/(explorer)/[chainName]/worlds/[worldAddress]/observe/page.js.nft.json +1 -1
  17. package/.next/standalone/packages/explorer/.next/server/app/(explorer)/[chainName]/worlds/[worldAddress]/observe/page_client-reference-manifest.js +1 -1
  18. package/.next/standalone/packages/explorer/.next/server/app/(explorer)/[chainName]/worlds/[worldAddress]/page.js +1 -1
  19. package/.next/standalone/packages/explorer/.next/server/app/(explorer)/[chainName]/worlds/[worldAddress]/page.js.nft.json +1 -1
  20. package/.next/standalone/packages/explorer/.next/server/app/(explorer)/[chainName]/worlds/[worldAddress]/page_client-reference-manifest.js +1 -1
  21. package/.next/standalone/packages/explorer/.next/server/app/(explorer)/[chainName]/worlds/page.js +2 -2
  22. package/.next/standalone/packages/explorer/.next/server/app/(explorer)/[chainName]/worlds/page_client-reference-manifest.js +1 -1
  23. package/.next/standalone/packages/explorer/.next/server/app/(explorer)/api/world-abi/route.js +1 -1
  24. package/.next/standalone/packages/explorer/.next/server/app/(explorer)/page.js +1 -1
  25. package/.next/standalone/packages/explorer/.next/server/app/_not-found.html +1 -1
  26. package/.next/standalone/packages/explorer/.next/server/app/_not-found.rsc +1 -1
  27. package/.next/standalone/packages/explorer/.next/server/app/internal/observer-relay.html +1 -1
  28. package/.next/standalone/packages/explorer/.next/server/app/internal/observer-relay.rsc +1 -1
  29. package/.next/standalone/packages/explorer/.next/server/app-paths-manifest.json +1 -1
  30. package/.next/standalone/packages/explorer/.next/server/chunks/{8304.js → 3008.js} +6 -6
  31. package/.next/standalone/packages/explorer/.next/server/chunks/3883.js +1 -1
  32. package/.next/standalone/packages/explorer/.next/server/chunks/4197.js +2 -0
  33. package/.next/standalone/packages/explorer/.next/server/middleware-build-manifest.js +1 -1
  34. package/.next/standalone/packages/explorer/.next/server/middleware-react-loadable-manifest.js +1 -1
  35. package/.next/standalone/packages/explorer/.next/server/pages/404.html +1 -1
  36. package/.next/standalone/packages/explorer/.next/server/pages/500.html +1 -1
  37. package/.next/standalone/packages/explorer/.next/server/pages-manifest.json +1 -1
  38. package/.next/standalone/packages/explorer/.next/server/server-reference-manifest.js +1 -1
  39. package/.next/standalone/packages/explorer/.next/server/server-reference-manifest.json +1 -1
  40. package/.next/standalone/packages/explorer/.next/static/chunks/4417.bf11256031a5cb13.js +1 -0
  41. package/.next/standalone/packages/explorer/.next/static/chunks/{5401-b92b0316c21e4021.js → 5401-8311f701d1a1b450.js} +1 -1
  42. package/.next/standalone/packages/explorer/.next/static/chunks/7636-ba584de0cd367697.js +36 -0
  43. package/.next/standalone/packages/explorer/.next/static/chunks/app/(explorer)/[chainName]/layout-0f633b7a79b40ee1.js +1 -0
  44. package/.next/standalone/packages/explorer/.next/static/chunks/app/(explorer)/[chainName]/worlds/[worldAddress]/explore/{page-926ecf9293f76faa.js → page-92398711538c3938.js} +1 -1
  45. package/.next/standalone/packages/explorer/.next/static/chunks/app/(explorer)/[chainName]/worlds/[worldAddress]/interact/page-6a93b586c6f9adf9.js +1 -0
  46. package/.next/standalone/packages/explorer/.next/static/chunks/app/(explorer)/[chainName]/worlds/[worldAddress]/layout-c934a0b6b443c5db.js +1 -0
  47. package/.next/standalone/packages/explorer/.next/static/chunks/app/(explorer)/[chainName]/worlds/[worldAddress]/observe/{page-b8d17ad42f482cad.js → page-68e31dceaa643854.js} +2 -2
  48. package/.next/standalone/packages/explorer/.next/static/chunks/webpack-6234797831819f49.js +1 -0
  49. package/dist/exports/observer.d.ts +1 -1
  50. package/dist/exports/observer.js +85 -78
  51. package/dist/exports/observer.js.map +1 -1
  52. package/package.json +10 -10
  53. package/.next/standalone/packages/explorer/.next/static/chunks/4636-33a0bdd233799050.js +0 -36
  54. package/.next/standalone/packages/explorer/.next/static/chunks/app/(explorer)/[chainName]/layout-9f489448fa14a85f.js +0 -1
  55. package/.next/standalone/packages/explorer/.next/static/chunks/app/(explorer)/[chainName]/worlds/[worldAddress]/interact/page-984dda96e00e39c3.js +0 -1
  56. package/.next/standalone/packages/explorer/.next/static/chunks/app/(explorer)/[chainName]/worlds/[worldAddress]/layout-e0ff079cef353658.js +0 -1
  57. package/.next/standalone/packages/explorer/.next/static/chunks/webpack-f1cdee55022e98eb.js +0 -1
  58. /package/.next/standalone/packages/explorer/.next/static/{zR065i-zyPDAtrtiaXnTv → GfYzVX77-_gg5fNoKqS1j}/_buildManifest.js +0 -0
  59. /package/.next/standalone/packages/explorer/.next/static/{zR065i-zyPDAtrtiaXnTv → GfYzVX77-_gg5fNoKqS1j}/_ssgManifest.js +0 -0
@@ -13,9 +13,9 @@
13
13
  *
14
14
  * This source code is licensed under the ISC license.
15
15
  * See the LICENSE file in the root directory of this source tree.
16
- */let a=(0,s.Z)("Box",[["path",{d:"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z",key:"hh9hay"}],["path",{d:"m3.3 7 8.7 5 8.7-5",key:"g66t2b"}],["path",{d:"M12 22V12",key:"d0xqtd"}]]),i=(0,s.Z)("UserPen",[["path",{d:"M11.5 15H7a4 4 0 0 0-4 4v2",key:"15lzij"}],["path",{d:"M21.378 16.626a1 1 0 0 0-3.004-3.004l-4.01 4.012a2 2 0 0 0-.506.854l-.837 2.87a.5.5 0 0 0 .62.62l2.87-.837a2 2 0 0 0 .854-.506z",key:"1817ys"}],["circle",{cx:"10",cy:"7",r:"4",key:"e45bow"}]]),l=(0,s.Z)("CheckCheck",[["path",{d:"M18 6 7 17l-5-5",key:"116fxf"}],["path",{d:"m22 10-7.5 7.5L13 16",key:"ke71qq"}]]);var c=r(11471);/**
16
+ */let a=(0,s.Z)("Box",[["path",{d:"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z",key:"hh9hay"}],["path",{d:"m3.3 7 8.7 5 8.7-5",key:"g66t2b"}],["path",{d:"M12 22V12",key:"d0xqtd"}]]),i=(0,s.Z)("UserPen",[["path",{d:"M11.5 15H7a4 4 0 0 0-4 4v2",key:"15lzij"}],["path",{d:"M21.378 16.626a1 1 0 0 0-3.004-3.004l-4.01 4.012a2 2 0 0 0-.506.854l-.837 2.87a.5.5 0 0 0 .62.62l2.87-.837a2 2 0 0 0 .854-.506z",key:"1817ys"}],["circle",{cx:"10",cy:"7",r:"4",key:"e45bow"}]]),l=(0,s.Z)("CheckCheck",[["path",{d:"M18 6 7 17l-5-5",key:"116fxf"}],["path",{d:"m22 10-7.5 7.5L13 16",key:"ke71qq"}]]);var o=r(11471);/**
17
17
  * @license lucide-react v0.408.0 - ISC
18
18
  *
19
19
  * This source code is licensed under the ISC license.
20
20
  * See the LICENSE file in the root directory of this source tree.
21
- */let o=(0,s.Z)("ReceiptText",[["path",{d:"M4 2v20l2-1 2 1 2-1 2 1 2-1 2 1 2-1 2 1V2l-2 1-2-1-2 1-2-1-2 1-2-1-2 1Z",key:"q3az6g"}],["path",{d:"M14 8H8",key:"1l3xfs"}],["path",{d:"M16 12H8",key:"1fr5h0"}],["path",{d:"M13 16H8",key:"wsln4y"}]]);var u=r(89702),d=r(46721),h=r(96917),p=r(67157),f=r(66585);let m=(0,p.j)((0,f.cn)("inline-flex items-center px-2.5 py-0.5","rounded-md border","text-xs font-semibold transition-colors","focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2"),{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",tertiary:"border-transparent bg-tertiary text-tertiary-foreground hover:bg-tertiary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function x(e){let{className:t,variant:r,...s}=e;return(0,n.jsx)("div",{className:(0,f.cn)(m({variant:r}),t),...s})}var g=r(68347),b=r(34431),j=r(71118),v=r(35605),w=r(84367);function y(e){let{hash:t,children:r}=e,{id:s}=(0,v.A)(),a=function(e){var t;let{hash:r,chainId:n}=e;if(!r)return;(0,w.wG)(n);let s=w.is[n],a=w.df[s],i="blockExplorers"in a&&(null===(t=a.blockExplorers)||void 0===t?void 0:t.default.url);if(i)return"".concat(i,"/tx/").concat(r)}({chainId:s,hash:t});return a?(0,n.jsx)("a",{href:a,target:"_blank",rel:"noopener noreferrer",className:"flex hover:underline",children:r}):r}function N(e){let t=Math.floor(Date.now()/1e3)-Number(e);for(let e of[{name:"y",limit:31536e3,inSeconds:31536e3},{name:"mth",limit:2592e3,inSeconds:2592e3},{name:"d",limit:86400,inSeconds:86400},{name:"h",limit:3600,inSeconds:3600},{name:"m",limit:60,inSeconds:60},{name:"s",limit:1,inSeconds:1}])if(t>=e.limit){let r=Math.floor(t/e.inSeconds);return"".concat(r).concat(e.name," ago")}return"0s ago"}function k(e){let{timestamp:t}=e,[r,s]=(0,u.useState)(()=>N(t));return(0,u.useEffect)(()=>{let e=setInterval(()=>{s(N(t))},1e3);return()=>clearInterval(e)},[t]),(0,n.jsx)("span",{className:"inline-block min-w-[60px] text-white/60",title:new Date(1e3*Number(t)).toISOString(),children:r})}var S=r(32858);let R={write:{priority:1,label:"write"},"write:result":{priority:2},waitForTransaction:{priority:3,label:"state update"},"waitForTransaction:result":{priority:4},waitForTransactionReceipt:{priority:5,label:"transaction receipt"},"waitForTransactionReceipt:result":{priority:6},waitForUserOperationReceipt:{priority:5,label:"user operation receipt"},"waitForUserOperationReceipt:result":{priority:6}};function T(e){let{time:t,events:r}=e,n=Math.max(...r.map(e=>e.time-t));return Object.values(r).sort((e,t)=>{var r,n;return(null===(r=R[e.type])||void 0===r?void 0:r.priority)-(null===(n=R[t.type])||void 0===n?void 0:n.priority)}).map(e=>{var s;let a=e.type;if(a.endsWith(":result"))return;let i=r.find(e=>e.type==="".concat(a,":result")),l=(null!==(s=null==i?void 0:i.time)&&void 0!==s?s:e.time)-e.time,c=e.time-t,o=R[a];return{type:a,label:"label"in o?o.label:a,duration:l,startPercentage:c/n*100,widthPercentage:l/n*100}}).filter(S.$K)}function O(e){let t=T(e);return(0,n.jsx)("div",{className:"ml-4 inline-block h-full w-14 grayscale lg:-mr-8 lg:ml-8 xl:-mr-16 xl:ml-16",children:t.map(e=>(0,n.jsx)("div",{title:e.label,className:(0,f.cn)("h-1",{"bg-[#5c9af6]":"write"===e.type,"mt-0.5 bg-[#4d7cc0]":"waitForTransaction"===e.type,"mt-0.5 bg-[#3d5c8a]":"waitForTransactionReceipt"===e.type||"waitForUserOperationReceipt"===e.type}),style:{width:"".concat(e.widthPercentage,"%"),marginLeft:"".concat(e.startPercentage,"%")}},e.label))})}var M=r(19362),E=r(55823),C=r(84141),F=r(35431),I=r(79701),Z=r(37979),U=r(33586),A=r(42473),H=r(368),P=r(97869);function z(e){let{hash:t}=e,{id:r}=(0,v.A)(),{data:s}=function(){var e,t;let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{hash:n,transactionReceipt:s,query:a={}}=r,i=(0,P.Z)(r),l=(0,H.x)({config:i}),c=function(e,t={}){return{async queryFn({queryKey:t}){let{hash:r,transactionReceipt:n,scopeKey:s,...a}=t[1];if(!r&&!n)throw Error("hash or transactionReceipt is required");return await function(e,t){let{chainId:r,...n}=t,s=e.getClient({chainId:r});return(0,Z.s)(s,I.a,"getTransactionConfirmations")(n)}(e,{hash:r,transactionReceipt:n,...a})??null},queryKey:function(e={}){return["transactionConfirmations",(0,U.OP)(e)]}(t)}}(i,{...r,chainId:null!==(e=r.chainId)&&void 0!==e?e:l}),o=!!(!(n&&s)&&(n||s)&&(null===(t=a.enabled)||void 0===t||t));return(0,A.aM)({...a,...c,enabled:o})}({hash:t,chainId:r,query:{refetchInterval:1e3,enabled:!!t}});return s?(0,n.jsxs)("span",{className:"flex items-center text-xs font-extrabold text-green-600",children:[(0,n.jsx)("span",{className:"mr-2 inline-block h-2 w-2 animate-pulse rounded-full bg-success"}),(0,n.jsx)("span",{className:"opacity-70",children:s.toString()})]}):(0,n.jsx)(g.O,{className:"h-4 w-[50px]"})}function D(e){let t=T(e);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(F.Z,{className:"my-5"}),(0,n.jsxs)("div",{className:"flex items-start gap-x-4 pb-2",children:[(0,n.jsx)("h3",{className:"inline-block w-[45px] pb-2 text-2xs font-bold uppercase",children:"Timing"}),(0,n.jsx)("div",{className:"w-full border border-white/20 p-2 pb-3",children:(0,n.jsx)("div",{className:"grid grid-cols-[auto_1fr_auto] items-center gap-x-4 gap-y-1",children:t.map(e=>(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("span",{className:"text-xs",children:[e.label,":"]}),(0,n.jsx)("span",{className:(0,f.cn)("h-1",{"bg-[#5c9af6]":"write"===e.type,"bg-[#4d7cc0]":"waitForTransaction"===e.type,"bg-[#3d5c8a]":"waitForTransactionReceipt"===e.type||"waitForUserOperationReceipt"===e.type}),style:{width:"".concat(e.widthPercentage,"%"),marginLeft:"".concat(e.startPercentage,"%")}}),(0,n.jsxs)("span",{className:"text-right text-xs",children:[e.duration,"ms"]})]}))})})]})]})}function V(e){let{label:t,status:r,children:s}=e;return(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{className:"text-2xs font-bold uppercase text-white/60",children:t}),(0,n.jsx)("p",{className:"pt-1 text-xs uppercase",children:null!=s?s:"rejected"===r?(0,n.jsx)("span",{className:"text-white/60",children:"N/A"}):(0,n.jsx)(g.O,{className:"h-4 w-[100px]"})})]})}function _(e){var t;let{row:r}=e,s=null==r?void 0:r.original,a=s.status,i=null==s?void 0:s.logs,l=null==s?void 0:s.receipt;return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(b.SC,{className:(0,f.cn)("relative cursor-pointer",{"bg-muted/50":r.getIsExpanded()}),onClick:()=>r.toggleExpanded(),children:[r.getVisibleCells().map(e=>(0,n.jsx)(b.pj,{children:(0,d.ie)(e.column.columnDef.cell,e.getContext())},e.id)),r.getIsExpanded()?(0,n.jsx)(M.Z,{className:"absolute right-4 top-1/2 h-4 w-4 -translate-y-1/2 text-white/60"}):(0,n.jsx)(E.Z,{className:"absolute right-4 top-1/2 h-4 w-4 -translate-y-1/2 text-white/60"})]}),r.getIsExpanded()&&(0,n.jsx)(b.SC,{className:"border-b-white/20 bg-muted/50 hover:bg-muted/50",children:(0,n.jsx)(b.pj,{colSpan:$.length,children:s&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"grid grid-cols-2 gap-x-2 gap-y-5 sm:grid-cols-4 md:grid-cols-5",children:[(0,n.jsx)(V,{label:"Confirmations",status:a,children:"rejected"!==a?(0,n.jsx)(z,{hash:null===(t=s.transaction)||void 0===t?void 0:t.hash}):null}),(0,n.jsxs)(V,{label:"Tx value",status:a,children:[s.value?(0,C.d)(s.value):0," ETH"]}),(0,n.jsx)(V,{label:"Gas used",status:a,children:null==l?void 0:l.gasUsed.toString()}),(0,n.jsx)(V,{label:"Gas price",status:a,children:null==l?void 0:l.effectiveGasPrice.toString()}),(0,n.jsx)(V,{label:"Tx cost",status:a,children:l?"".concat((0,C.d)(l.gasUsed*l.effectiveGasPrice)," ETH"):null})]}),(0,n.jsx)(F.Z,{className:"my-5"}),(0,n.jsxs)("div",{className:"flex items-start gap-x-4",children:[(0,n.jsx)("h3",{className:"w-[45px] flex-shrink-0 text-2xs font-bold uppercase",children:"Inputs"}),s.calls.length>0?(0,n.jsx)("div",{className:"flex w-full flex-col gap-y-4",children:s.calls.map((e,t)=>{var r;return(0,n.jsxs)("div",{className:"min-w-0 flex-grow border border-white/20 p-2 pt-1",children:[(0,n.jsxs)("span",{className:"text-xs",children:[e.functionName,":"]}),null===(r=e.args)||void 0===r?void 0:r.map((e,t)=>(0,n.jsxs)("div",{className:"flex",children:[(0,n.jsxs)("span",{className:"flex-shrink-0 text-xs text-white/60",children:["arg ",t+1,":"]}),(0,n.jsx)("span",{className:"ml-2 break-all text-xs",children:"object"==typeof e&&null!==e?JSON.stringify(e,null,2):String(e)})]},t)),e.value&&e.value>0n?(0,n.jsxs)("div",{className:"text-xs text-white/60",children:["value: ",(0,C.d)(e.value)," ETH"]}):null]},t)})}):(0,n.jsx)("p",{className:"text-2xs uppercase text-white/60",children:"No inputs"})]}),s.error?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(F.Z,{className:"my-5"}),(0,n.jsxs)("div",{className:"flex items-start gap-x-4",children:[(0,n.jsx)("h3",{className:"w-[45px] flex-shrink-0 text-2xs font-bold uppercase",children:"Error"}),(0,n.jsx)("div",{className:"flex-grow whitespace-pre-wrap border border-red-500 p-2 font-mono text-xs",children:s.error.message})]})]}):null,s.error?null:(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(F.Z,{className:"my-5"}),(0,n.jsxs)("div",{className:"flex items-start gap-x-4",children:[(0,n.jsx)("h3",{className:"inline-block w-[45px] flex-shrink-0 text-2xs font-bold uppercase",children:"Logs"}),Array.isArray(i)&&i.length>0?(0,n.jsx)("div",{className:"flex-grow break-all border border-white/20 p-2 pb-3",children:(0,n.jsx)("ul",{children:i.map((e,t)=>{let r="eventName"in e?e.eventName:null,s="args"in e?e.args:null;return(0,n.jsxs)("li",{children:[!!r&&(0,n.jsxs)("span",{className:"text-xs",children:[null==r?void 0:r.toString(),":"]}),s&&(0,n.jsx)("ul",{className:"list-inside",children:Object.entries(s).map(e=>{let[t,r]=e;return(0,n.jsxs)("li",{className:"mt-1 flex",children:[(0,n.jsxs)("span",{className:"flex-shrink-0 text-xs text-white/60",children:[t,": "]}),(0,n.jsx)("span",{className:"ml-2 break-all text-xs",children:String(r)})]},t)})}),t<i.length-1&&(0,n.jsx)(F.Z,{className:"my-4"})]},t)})})}):"pending"===a?(0,n.jsx)(g.O,{className:"h-4 w-full"}):(0,n.jsx)("p",{className:"text-2xs uppercase text-white/60",children:"No logs"})]})]}),s.write&&(0,n.jsx)(D,{...s.write})]})})})]})}var q=r(6270),G=r(55024),K=r(60188),L=r(57253),B=r(50011);let W=(0,h.Cl)(),$=[W.accessor("receipt.blockNumber",{header:"Block",cell:e=>{if("rejected"===e.row.original.status)return(0,n.jsx)("span",{className:"text-white/60",children:"N/A"});let t=e.getValue();return t?(0,n.jsxs)("div",{className:"flex items-center gap-1",children:[(0,n.jsx)(a,{className:"mr-1 h-3 w-3"}),t.toString()]}):(0,n.jsx)(g.O,{className:"h-4 w-full"})}}),W.accessor("from",{header:"From",cell:e=>{let t=e.getValue();return t?(0,n.jsxs)("div",{className:"flex items-center gap-1",children:[(0,n.jsx)(i,{className:"mr-1 h-3 w-3"}),(0,n.jsx)(j.a,{hex:t})]}):(0,n.jsx)(g.O,{className:"h-4 w-full"})}}),W.accessor("calls",{header:"Function(s)",cell:e=>{let t=e.getValue(),r=e.row.original.status;return(0,n.jsxs)("div",{className:"flex items-center",children:[(0,n.jsx)("div",{className:"flex gap-2",children:t.map((e,t)=>{let{functionName:r}=e;return(0,n.jsx)(x,{variant:"secondary",children:r},t)})}),"pending"===r&&(0,n.jsx)(l,{className:"ml-2 h-4 w-4 text-white/60"}),"success"===r&&(0,n.jsx)(l,{className:"ml-2 h-4 w-4 text-green-400"}),("reverted"===r||"rejected"===r)&&(0,n.jsx)(c.Z,{className:"ml-2 h-4 w-4 text-red-400"})]})}}),W.accessor("hash",{header:"Tx hash",cell:e=>{if("rejected"===e.row.original.status)return(0,n.jsx)("span",{className:"text-white/60",children:"N/A"});let t=e.getValue();return t?(0,n.jsxs)("div",{className:"flex items-center gap-1",children:[(0,n.jsx)(o,{className:"mr-1 h-3 w-3"}),(0,n.jsx)(y,{hash:t,children:(0,n.jsx)(j.a,{hex:t})})]}):(0,n.jsx)(g.O,{className:"h-4 w-full"})}}),W.accessor("timestamp",{header:"Time",cell:e=>{let t=e.getValue(),r=e.row.original.write;return(0,n.jsxs)(n.Fragment,{children:[t?(0,n.jsx)(k,{timestamp:t}):(0,n.jsx)(g.O,{className:"h-4 w-14"}),r&&(0,n.jsx)(O,{...r})]})}})];function Y(){var e;let t=function(){let{worldAddress:e}=(0,q.useParams)(),t=(0,K.oR)(B.h,e=>e.transactions),r=(0,K.oR)(L.store,e=>e.writes),n=(0,u.useMemo)(()=>Object.values(r).map(t=>({...t,calls:t.calls.filter(t=>t.to&&(0,G.K)(t.to)===(0,G.K)(e))})).filter(e=>{let{calls:t}=e;return t.length>0}),[r,e]);return(0,u.useMemo)(()=>{let r=new Map;for(let t of n){let n=t.events.find(e=>"write:result"===e.type);r.set(t.hash||t.writeId,{hash:t.hash,writeId:t.writeId,from:t.from,status:(null==n?void 0:n.status)==="rejected"?"rejected":"pending",timestamp:BigInt(t.time)/1000n,calls:t.calls.filter(t=>t.to===e),error:n&&"reason"in n?n.reason:void 0,write:t})}for(let e of t){let t=r.get(e.hash);t?r.set(e.hash,{...e,write:t.write}):r.set(e.hash,{...e})}return Array.from(r.values()).sort((e,t)=>{var r,n;return Number(null!==(r=t.timestamp)&&void 0!==r?r:0n)-Number(null!==(n=e.timestamp)&&void 0!==n?n:0n)})},[t,n,e])}(),[r,s]=(0,u.useState)({}),a=(0,d.b7)({data:t,columns:$,state:{expanded:r},getRowId:e=>e.writeId,onExpandedChange:s,getCoreRowModel:(0,h.sC)(),getExpandedRowModel:(0,h.rV)()});return(0,n.jsxs)(b.iA,{children:[(0,n.jsx)(b.xD,{className:"sticky top-0 z-10 bg-[var(--color-background)]",children:a.getHeaderGroups().map(e=>(0,n.jsx)(b.SC,{children:e.headers.map(e=>(0,n.jsx)(b.ss,{className:"text-xs uppercase",children:e.isPlaceholder?null:(0,d.ie)(e.column.columnDef.header,e.getContext())},e.id))},e.id))}),(0,n.jsx)(b.RM,{children:(null===(e=a.getRowModel().rows)||void 0===e?void 0:e.length)?a.getRowModel().rows.map(e=>(0,n.jsx)(_,{row:e},e.id)):(0,n.jsx)(b.SC,{children:(0,n.jsx)(b.pj,{colSpan:$.length,children:(0,n.jsxs)("p",{className:"flex items-center justify-center gap-3 py-4 font-mono text-xs font-bold uppercase text-muted-foreground",children:[(0,n.jsx)("span",{className:"inline-block h-1.5 w-1.5 animate-ping rounded-full bg-muted-foreground"})," Waiting for transactions…"]})})})})]})}},50011:function(e,t,r){"use strict";r.d(t,{h:function(){return n}});let n=(0,r(30521).M)()(e=>({transactions:[],setTransaction:t=>e(e=>({transactions:[...e.transactions,t]})),updateTransaction:(t,r)=>e(e=>({transactions:e.transactions.map(e=>e.hash===t?{...e,...r}:e)}))}))},35605:function(e,t,r){"use strict";r.d(t,{A:function(){return a}});var n=r(6270),s=r(84367);function a(){let{chainName:e}=(0,n.useParams)();return(0,s.Yx)(e),s.df[e]}},84367:function(e,t,r){"use strict";r.d(t,{is:function(){return p},M0:function(){return d},oK:function(){return f},df:function(){return h},wG:function(){return m},Yx:function(){return x}});var n=r(79617),s=r(53103),a=r(20536),i=r(49249),l=r(76271);({...s.t});var c={...a.g,iconUrls:["https://redstone.xyz/chain-icons/redstone.png"],indexerUrl:"https://indexer.mud.redstonechain.com"},o={...i.T,iconUrls:["https://redstone.xyz/chain-icons/garnet.png"],indexerUrl:"https://indexer.mud.garnetchain.com"},u={...l.i,name:"Rhodolite Devnet",testnet:!0,id:17420,sourceId:17001,nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.rhodolitechain.com"],webSocket:["wss://rpc.rhodolitechain.com"]}},iconUrls:["https://redstone.xyz/chain-icons/rhodolite.png"],indexerUrl:"https://indexer.mud.rhodolitechain.com"};let d=["world","store","metadata","puppet","erc20-puppet","erc721-puppet"],h={anvil:n.O,rhodolite:u,garnet:o,redstone:c},p=Object.fromEntries(Object.entries(h).map(e=>{let[t,r]=e;return[r.id,t]}));function f(e){return"string"==typeof e&&e in h}function m(e){if(!("number"==typeof e&&e in p))throw Error("Invalid chain ID. Supported chains are: ".concat(Object.keys(p).join(", "),"."))}function x(e){if(!f(e))throw Error("Invalid chain name. Supported chains are: ".concat(Object.keys(h).join(", "),"."))}},35431:function(e,t,r){"use strict";r.d(t,{Z:function(){return l}});var n=r(75536),s=r(89702),a=r(80967),i=r(66585);let l=s.forwardRef((e,t)=>{let{className:r,orientation:s="horizontal",decorative:l=!0,...c}=e;return(0,n.jsx)(a.f,{ref:t,decorative:l,orientation:s,className:(0,i.cn)("shrink-0 bg-border","horizontal"===s?"h-[1px] w-full":"h-full w-[1px]",r),...c})});l.displayName=a.f.displayName},68347:function(e,t,r){"use strict";r.d(t,{O:function(){return a}});var n=r(75536),s=r(66585);function a(e){let{className:t,...r}=e;return(0,n.jsx)("div",{className:(0,s.cn)("animate-pulse rounded-md bg-muted",t),...r})}},34431:function(e,t,r){"use strict";r.d(t,{RM:function(){return c},SC:function(){return o},iA:function(){return i},pj:function(){return d},ss:function(){return u},xD:function(){return l}});var n=r(75536),s=r(89702),a=r(66585);let i=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,n.jsx)("table",{ref:t,className:(0,a.cn)("w-full caption-bottom text-sm",r),...s})});i.displayName="Table";let l=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,n.jsx)("thead",{ref:t,className:(0,a.cn)("[&_tr]:border-b",r),...s})});l.displayName="TableHeader";let c=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,n.jsx)("tbody",{ref:t,className:(0,a.cn)("[&_tr:last-child]:border-0",r),...s})});c.displayName="TableBody",s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,n.jsx)("tfoot",{ref:t,className:(0,a.cn)("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",r),...s})}).displayName="TableFooter";let o=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,n.jsx)("tr",{ref:t,className:(0,a.cn)("border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",r),...s})});o.displayName="TableRow";let u=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,n.jsx)("th",{ref:t,className:(0,a.cn)("h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0",r),...s})});u.displayName="TableHead";let d=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,n.jsx)("td",{ref:t,className:(0,a.cn)("p-4 align-middle [&:has([role=checkbox])]:pr-0",r),...s})});d.displayName="TableCell",s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,n.jsx)("caption",{ref:t,className:(0,a.cn)("mt-4 text-sm text-muted-foreground",r),...s})}).displayName="TableCaption"},71118:function(e,t,r){"use strict";r.d(t,{a:function(){return s}});var n=r(75536);function s(e){let{hex:t}=e;return t.length<=10?(0,n.jsx)("span",{children:t}):(0,n.jsxs)("span",{children:[(0,n.jsx)("span",{className:"after:select-none after:content-['…']",children:t.slice(0,6)}),(0,n.jsx)("span",{className:"tracking-[-1ch] text-transparent",children:t.slice(6,-4)}),t.slice(-4)]})}},83966:function(e,t,r){"use strict";r.d(t,{M:function(){return n}});let n="explorer/observer"},41374:function(e,t,r){"use strict";r.d(t,{f:function(){return s}});var n=r(95674);let s=r.n(n)()("mud:explorer").extend("observer")},57253:function(e,t,r){"use strict";r.d(t,{store:function(){return l}});var n=r(30521),s=r(66585),a=r(83966),i=r(41374);let l=(0,n.M)(()=>({writes:{}}));(0,i.f)("listening for relayed messages",a.M);let c=[];new BroadcastChannel(a.M).addEventListener("message",e=>{"ping"!==e.data.type&&c.push(e)}),setInterval(function(){0!==c.length&&l.setState(e=>{let t=e;for(let{data:e}of c){if("ping"===e.type)continue;let r="write"===e.type?{...e,events:[]}:t.writes[e.writeId];if(!r)continue;let n=r.hash;"waitForTransactionReceipt"===e.type?n=e.hash:"waitForUserOperationReceipt:result"===e.type&&(0,s.r8)(e)&&(n=e.value.receipt.transactionHash),t={...t,writes:{...t.writes,[e.writeId]:{...r,type:e.type,hash:n,userOpHash:"waitForUserOperationReceipt"===e.type?e.userOpHash:r.userOpHash,events:[...r.events,e]}}}}return c.length=0,t})},100)},66585:function(e,t,r){"use strict";r.d(t,{az:function(){return c},cn:function(){return i},fu:function(){return l},r8:function(){return o}});var n=r(84141),s=r(88014),a=r(47228);function i(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return(0,a.m)((0,s.W)(t))}function l(e){return e.replace(/[A-Z]/g,e=>"_".concat(e.toLowerCase())).replace(/^_/,"")}function c(e){let t=(0,n.d)(e),r=Math.floor(parseFloat(t)).toString().length;return parseFloat(t).toLocaleString("en-US",{maximumFractionDigits:Math.max(0,6-r)})}function o(e){return"fulfilled"===e.status}},91502:function(e,t,r){"use strict";r.d(t,{WV:function(){return l},jH:function(){return c}});var n=r(89702),s=r(3020),a=r(14292),i=r(75536),l=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","span","svg","ul"].reduce((e,t)=>{let r=n.forwardRef((e,r)=>{let{asChild:n,...s}=e,l=n?a.g7:t;return"undefined"!=typeof window&&(window[Symbol.for("radix-ui")]=!0),(0,i.jsx)(l,{...s,ref:r})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function c(e,t){e&&s.flushSync(()=>e.dispatchEvent(t))}},80967:function(e,t,r){"use strict";r.d(t,{f:function(){return o}});var n=r(89702),s=r(91502),a=r(75536),i="horizontal",l=["horizontal","vertical"],c=n.forwardRef((e,t)=>{let{decorative:r,orientation:n=i,...c}=e,o=l.includes(n)?n:i;return(0,a.jsx)(s.WV.div,{"data-orientation":o,...r?{role:"none"}:{"aria-orientation":"vertical"===o?o:void 0,role:"separator"},...c,ref:t})});c.displayName="Separator";var o=c},60188:function(e,t,r){"use strict";r.d(t,{oR:function(){return a}});var n=r(89702);let{useSyncExternalStoreWithSelector:s}=r(44666);function a(e,t=e.getState,r){let a=s(e.subscribe,e.getState,e.getServerState||e.getState,t,r);return(0,n.useDebugValue)(a),a}},30521:function(e,t,r){"use strict";r.d(t,{M:function(){return s}});let n=e=>{let t;let r=new Set,n=(e,n)=>{let s="function"==typeof e?e(t):e;if(!Object.is(s,t)){let e=t;t=(null!=n?n:"object"!=typeof s)?s:Object.assign({},t,s),r.forEach(r=>r(t,e))}},s=()=>t,a={setState:n,getState:s,subscribe:e=>(r.add(e),()=>r.delete(e)),destroy:()=>{console.warn("[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected."),r.clear()}};return t=e(n,s,a),a},s=e=>e?n(e):n},32858:function(e,t,r){"use strict";function n(e,t){return e<t?-1:e>t?1:0}function s(e,t){let r=new Map;for(let n of e){let e=t(n);r.has(e)||r.set(e,[]),r.get(e).push(n)}return r}function a(e){return void 0!==e}function i(e,t){return Object.fromEntries(Object.entries(e).map(e=>{let[r,n]=e;return[r,t(n,r)]}))}r.d(t,{$K:function(){return a},Xc:function(){return i},iN:function(){return n},vM:function(){return s}})}},function(e){e.O(0,[6095,3388,855,5674,6658,1461,9213,8474,1744],function(){return e(e.s=42981)}),_N_E=e.O()}]);
21
+ */let c=(0,s.Z)("ReceiptText",[["path",{d:"M4 2v20l2-1 2 1 2-1 2 1 2-1 2 1 2-1 2 1V2l-2 1-2-1-2 1-2-1-2 1-2-1-2 1Z",key:"q3az6g"}],["path",{d:"M14 8H8",key:"1l3xfs"}],["path",{d:"M16 12H8",key:"1fr5h0"}],["path",{d:"M13 16H8",key:"wsln4y"}]]);var u=r(89702),d=r(46721),p=r(96917),h=r(67157),f=r(66585);let m=(0,h.j)((0,f.cn)("inline-flex items-center px-2.5 py-0.5","rounded-md border","text-xs font-semibold transition-colors","focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2"),{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",tertiary:"border-transparent bg-tertiary text-tertiary-foreground hover:bg-tertiary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function x(e){let{className:t,variant:r,...s}=e;return(0,n.jsx)("div",{className:(0,f.cn)(m({variant:r}),t),...s})}var g=r(68347),b=r(34431),j=r(71118),v=r(35605),w=r(84367);function y(e){let{hash:t,children:r}=e,{id:s}=(0,v.A)(),a=function(e){var t;let{hash:r,chainId:n}=e;if(!r)return;(0,w.wG)(n);let s=w.is[n],a=w.df[s],i="blockExplorers"in a&&(null===(t=a.blockExplorers)||void 0===t?void 0:t.default.url);if(i)return"".concat(i,"/tx/").concat(r)}({chainId:s,hash:t});return a?(0,n.jsx)("a",{href:a,target:"_blank",rel:"noopener noreferrer",className:"flex hover:underline",children:r}):r}function N(e){let t=Math.floor(Date.now()/1e3)-Number(e);for(let e of[{name:"y",limit:31536e3,inSeconds:31536e3},{name:"mth",limit:2592e3,inSeconds:2592e3},{name:"d",limit:86400,inSeconds:86400},{name:"h",limit:3600,inSeconds:3600},{name:"m",limit:60,inSeconds:60},{name:"s",limit:1,inSeconds:1}])if(t>=e.limit){let r=Math.floor(t/e.inSeconds);return"".concat(r).concat(e.name," ago")}return"0s ago"}function k(e){let{timestamp:t}=e,[r,s]=(0,u.useState)(()=>N(t));return(0,u.useEffect)(()=>{let e=setInterval(()=>{s(N(t))},1e3);return()=>clearInterval(e)},[t]),(0,n.jsx)("span",{className:"inline-block min-w-[60px] text-white/60",title:new Date(1e3*Number(t)).toISOString(),children:r})}var S=r(32858);let R={write:{priority:1,label:"write"},"write:result":{priority:2},waitForTransaction:{priority:3,label:"state update"},"waitForTransaction:result":{priority:4},waitForTransactionReceipt:{priority:5,label:"transaction receipt"},"waitForTransactionReceipt:result":{priority:6},waitForUserOperationReceipt:{priority:5,label:"user operation receipt"},"waitForUserOperationReceipt:result":{priority:6}};function T(e){let{time:t,events:r}=e,n=Math.max(...r.map(e=>e.time-t));return Object.values(r).sort((e,t)=>{var r,n;return(null===(r=R[e.type])||void 0===r?void 0:r.priority)-(null===(n=R[t.type])||void 0===n?void 0:n.priority)}).map(e=>{var s;let a=e.type;if(a.endsWith(":result"))return;let i=r.find(e=>e.type==="".concat(a,":result")),l=(null!==(s=null==i?void 0:i.time)&&void 0!==s?s:e.time)-e.time,o=e.time-t,c=R[a];return{type:a,label:"label"in c?c.label:a,duration:l,startPercentage:o/n*100,widthPercentage:l/n*100}}).filter(S.$K)}function M(e){let t=T(e);return(0,n.jsx)("div",{className:"ml-4 inline-block h-full w-14 grayscale lg:-mr-8 lg:ml-8 xl:-mr-16 xl:ml-16",children:t.map(e=>(0,n.jsx)("div",{title:e.label,className:(0,f.cn)("h-1",{"bg-[#5c9af6]":"write"===e.type,"mt-0.5 bg-[#4d7cc0]":"waitForTransaction"===e.type,"mt-0.5 bg-[#3d5c8a]":"waitForTransactionReceipt"===e.type||"waitForUserOperationReceipt"===e.type}),style:{width:"".concat(e.widthPercentage,"%"),marginLeft:"".concat(e.startPercentage,"%")}},e.label))})}var O=r(19362),E=r(55823),C=r(84141),F=r(35431),I=r(79701),Z=r(37979),U=r(33586),P=r(42473),A=r(368),H=r(97869);function z(e){let{hash:t}=e,{id:r}=(0,v.A)(),{data:s}=function(){var e,t;let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{hash:n,transactionReceipt:s,query:a={}}=r,i=(0,H.Z)(r),l=(0,A.x)({config:i}),o=function(e,t={}){return{async queryFn({queryKey:t}){let{hash:r,transactionReceipt:n,scopeKey:s,...a}=t[1];if(!r&&!n)throw Error("hash or transactionReceipt is required");return await function(e,t){let{chainId:r,...n}=t,s=e.getClient({chainId:r});return(0,Z.s)(s,I.a,"getTransactionConfirmations")(n)}(e,{hash:r,transactionReceipt:n,...a})??null},queryKey:function(e={}){return["transactionConfirmations",(0,U.OP)(e)]}(t)}}(i,{...r,chainId:null!==(e=r.chainId)&&void 0!==e?e:l}),c=!!(!(n&&s)&&(n||s)&&(null===(t=a.enabled)||void 0===t||t));return(0,P.aM)({...a,...o,enabled:c})}({hash:t,chainId:r,query:{refetchInterval:1e3,enabled:!!t}});return s?(0,n.jsxs)("span",{className:"flex items-center text-xs font-extrabold text-green-600",children:[(0,n.jsx)("span",{className:"mr-2 inline-block h-2 w-2 animate-pulse rounded-full bg-success"}),(0,n.jsx)("span",{className:"opacity-70",children:s.toString()})]}):(0,n.jsx)(g.O,{className:"h-4 w-[50px]"})}function D(e){let t=T(e);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(F.Z,{className:"my-5"}),(0,n.jsxs)("div",{className:"flex items-start gap-x-4 pb-2",children:[(0,n.jsx)("h3",{className:"inline-block w-[45px] pb-2 text-2xs font-bold uppercase",children:"Timing"}),(0,n.jsx)("div",{className:"w-full border border-white/20 p-2 pb-3",children:(0,n.jsx)("div",{className:"grid grid-cols-[auto_1fr_auto] items-center gap-x-4 gap-y-1",children:t.map(e=>(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("span",{className:"text-xs",children:[e.label,":"]}),(0,n.jsx)("span",{className:(0,f.cn)("h-1",{"bg-[#5c9af6]":"write"===e.type,"bg-[#4d7cc0]":"waitForTransaction"===e.type,"bg-[#3d5c8a]":"waitForTransactionReceipt"===e.type||"waitForUserOperationReceipt"===e.type}),style:{width:"".concat(e.widthPercentage,"%"),marginLeft:"".concat(e.startPercentage,"%")}}),(0,n.jsxs)("span",{className:"text-right text-xs",children:[e.duration,"ms"]})]}))})})]})]})}function V(e){let{label:t,status:r,children:s}=e;return(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{className:"text-2xs font-bold uppercase text-white/60",children:t}),(0,n.jsx)("p",{className:"pt-1 text-xs uppercase",children:null!=s?s:"rejected"===r?(0,n.jsx)("span",{className:"text-white/60",children:"N/A"}):(0,n.jsx)(g.O,{className:"h-4 w-[100px]"})})]})}function _(e){var t;let{row:r}=e,s=null==r?void 0:r.original,a=s.status,i=null==s?void 0:s.logs,l=null==s?void 0:s.receipt;return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(b.SC,{className:(0,f.cn)("relative cursor-pointer",{"bg-muted/50":r.getIsExpanded()}),onClick:()=>r.toggleExpanded(),children:[r.getVisibleCells().map(e=>(0,n.jsx)(b.pj,{children:(0,d.ie)(e.column.columnDef.cell,e.getContext())},e.id)),r.getIsExpanded()?(0,n.jsx)(O.Z,{className:"absolute right-4 top-1/2 h-4 w-4 -translate-y-1/2 text-white/60"}):(0,n.jsx)(E.Z,{className:"absolute right-4 top-1/2 h-4 w-4 -translate-y-1/2 text-white/60"})]}),r.getIsExpanded()&&(0,n.jsx)(b.SC,{className:"border-b-white/20 bg-muted/50 hover:bg-muted/50",children:(0,n.jsx)(b.pj,{colSpan:$.length,children:s&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"grid grid-cols-2 gap-x-2 gap-y-5 sm:grid-cols-4 md:grid-cols-5",children:[(0,n.jsx)(V,{label:"Confirmations",status:a,children:"rejected"!==a?(0,n.jsx)(z,{hash:null===(t=s.transaction)||void 0===t?void 0:t.hash}):null}),(0,n.jsxs)(V,{label:"Tx value",status:a,children:[s.value?(0,C.d)(s.value):0," ETH"]}),(0,n.jsx)(V,{label:"Gas used",status:a,children:null==l?void 0:l.gasUsed.toString()}),(0,n.jsx)(V,{label:"Gas price",status:a,children:null==l?void 0:l.effectiveGasPrice.toString()}),(0,n.jsx)(V,{label:"Tx cost",status:a,children:l?"".concat((0,C.d)(l.gasUsed*l.effectiveGasPrice)," ETH"):null})]}),(0,n.jsx)(F.Z,{className:"my-5"}),(0,n.jsxs)("div",{className:"flex items-start gap-x-4",children:[(0,n.jsx)("h3",{className:"w-[45px] flex-shrink-0 text-2xs font-bold uppercase",children:"Inputs"}),s.calls.length>0?(0,n.jsx)("div",{className:"flex w-full flex-col gap-y-4",children:s.calls.map((e,t)=>{var r;return(0,n.jsxs)("div",{className:"min-w-0 flex-grow border border-white/20 p-2 pt-1",children:[(0,n.jsxs)("span",{className:"text-xs",children:[e.functionName,":"]}),null===(r=e.args)||void 0===r?void 0:r.map((e,t)=>(0,n.jsxs)("div",{className:"flex",children:[(0,n.jsxs)("span",{className:"flex-shrink-0 text-xs text-white/60",children:["arg ",t+1,":"]}),(0,n.jsx)("span",{className:"ml-2 break-all text-xs",children:"object"==typeof e&&null!==e?JSON.stringify(e,null,2):String(e)})]},t)),e.value&&e.value>0n?(0,n.jsxs)("div",{className:"text-xs text-white/60",children:["value: ",(0,C.d)(e.value)," ETH"]}):null]},t)})}):(0,n.jsx)("p",{className:"text-2xs uppercase text-white/60",children:"No inputs"})]}),s.error?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(F.Z,{className:"my-5"}),(0,n.jsxs)("div",{className:"flex items-start gap-x-4",children:[(0,n.jsx)("h3",{className:"w-[45px] flex-shrink-0 text-2xs font-bold uppercase",children:"Error"}),(0,n.jsx)("div",{className:"flex-grow whitespace-pre-wrap border border-red-500 p-2 font-mono text-xs",children:s.error.message})]})]}):null,s.error?null:(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(F.Z,{className:"my-5"}),(0,n.jsxs)("div",{className:"flex items-start gap-x-4",children:[(0,n.jsx)("h3",{className:"inline-block w-[45px] flex-shrink-0 text-2xs font-bold uppercase",children:"Logs"}),Array.isArray(i)&&i.length>0?(0,n.jsx)("div",{className:"flex-grow break-all border border-white/20 p-2 pb-3",children:(0,n.jsx)("ul",{children:i.map((e,t)=>{let r="eventName"in e?e.eventName:null,s="args"in e?e.args:null;return(0,n.jsxs)("li",{children:[!!r&&(0,n.jsxs)("span",{className:"text-xs",children:[null==r?void 0:r.toString(),":"]}),s&&(0,n.jsx)("ul",{className:"list-inside",children:Object.entries(s).map(e=>{let[t,r]=e;return(0,n.jsxs)("li",{className:"mt-1 flex",children:[(0,n.jsxs)("span",{className:"flex-shrink-0 text-xs text-white/60",children:[t,": "]}),(0,n.jsx)("span",{className:"ml-2 break-all text-xs",children:String(r)})]},t)})}),t<i.length-1&&(0,n.jsx)(F.Z,{className:"my-4"})]},t)})})}):"pending"===a?(0,n.jsx)(g.O,{className:"h-4 w-full"}):(0,n.jsx)("p",{className:"text-2xs uppercase text-white/60",children:"No logs"})]})]}),s.write&&(0,n.jsx)(D,{...s.write})]})})})]})}var q=r(6270),G=r(55024),K=r(60188),L=r(57253),B=r(50011);let W=(0,p.Cl)(),$=[W.accessor("receipt.blockNumber",{header:"Block",cell:e=>{if("rejected"===e.row.original.status)return(0,n.jsx)("span",{className:"text-white/60",children:"N/A"});let t=e.getValue();return t?(0,n.jsxs)("div",{className:"flex items-center gap-1",children:[(0,n.jsx)(a,{className:"mr-1 h-3 w-3"}),t.toString()]}):(0,n.jsx)(g.O,{className:"h-4 w-full"})}}),W.accessor("from",{header:"From",cell:e=>{let t=e.getValue();return t?(0,n.jsxs)("div",{className:"flex items-center gap-1",children:[(0,n.jsx)(i,{className:"mr-1 h-3 w-3"}),(0,n.jsx)(j.a,{hex:t})]}):(0,n.jsx)(g.O,{className:"h-4 w-full"})}}),W.accessor("calls",{header:"Function(s)",cell:e=>{let t=e.getValue(),r=e.row.original.status;return(0,n.jsxs)("div",{className:"flex items-center",children:[(0,n.jsx)("div",{className:"flex gap-2",children:t.map((e,t)=>{let{functionName:r}=e;return(0,n.jsx)(x,{variant:"secondary",children:r},t)})}),"pending"===r&&(0,n.jsx)(l,{className:"ml-2 h-4 w-4 text-white/60"}),"success"===r&&(0,n.jsx)(l,{className:"ml-2 h-4 w-4 text-green-400"}),("reverted"===r||"rejected"===r)&&(0,n.jsx)(o.Z,{className:"ml-2 h-4 w-4 text-red-400"})]})}}),W.accessor("hash",{header:"Tx hash",cell:e=>{if("rejected"===e.row.original.status)return(0,n.jsx)("span",{className:"text-white/60",children:"N/A"});let t=e.getValue();return t?(0,n.jsxs)("div",{className:"flex items-center gap-1",children:[(0,n.jsx)(c,{className:"mr-1 h-3 w-3"}),(0,n.jsx)(y,{hash:t,children:(0,n.jsx)(j.a,{hex:t})})]}):(0,n.jsx)(g.O,{className:"h-4 w-full"})}}),W.accessor("timestamp",{header:"Time",cell:e=>{let t=e.getValue(),r=e.row.original.write;return(0,n.jsxs)(n.Fragment,{children:[t?(0,n.jsx)(k,{timestamp:t}):(0,n.jsx)(g.O,{className:"h-4 w-14"}),r&&(0,n.jsx)(M,{...r})]})}})];function Y(){var e;let t=function(){let{worldAddress:e}=(0,q.useParams)(),t=(0,K.oR)(B.h,e=>e.transactions),r=(0,K.oR)(L.store,e=>e.writes),n=(0,u.useMemo)(()=>Object.values(r).map(t=>({...t,calls:t.calls.filter(t=>t.to&&(0,G.K)(t.to)===(0,G.K)(e))})).filter(e=>{let{calls:t}=e;return t.length>0}),[r,e]);return(0,u.useMemo)(()=>{let r=new Map;for(let t of n){let n=t.events.find(e=>"write:result"===e.type);r.set(t.hash||t.writeId,{hash:t.hash,writeId:t.writeId,from:t.from,status:(null==n?void 0:n.status)==="rejected"?"rejected":"pending",timestamp:BigInt(t.time)/1000n,calls:t.calls.filter(t=>t.to===e),error:n&&"reason"in n?n.reason:void 0,write:t})}for(let e of t){let t=r.get(e.hash);t?r.set(e.hash,{...e,write:t.write}):r.set(e.hash,{...e})}return Array.from(r.values()).sort((e,t)=>{var r,n;return Number(null!==(r=t.timestamp)&&void 0!==r?r:0n)-Number(null!==(n=e.timestamp)&&void 0!==n?n:0n)})},[t,n,e])}(),[r,s]=(0,u.useState)({}),a=(0,d.b7)({data:t,columns:$,state:{expanded:r},getRowId:e=>e.writeId,onExpandedChange:s,getCoreRowModel:(0,p.sC)(),getExpandedRowModel:(0,p.rV)()});return(0,n.jsxs)(b.iA,{children:[(0,n.jsx)(b.xD,{className:"sticky top-0 z-10 bg-[var(--color-background)]",children:a.getHeaderGroups().map(e=>(0,n.jsx)(b.SC,{children:e.headers.map(e=>(0,n.jsx)(b.ss,{className:"text-xs uppercase",children:e.isPlaceholder?null:(0,d.ie)(e.column.columnDef.header,e.getContext())},e.id))},e.id))}),(0,n.jsx)(b.RM,{children:(null===(e=a.getRowModel().rows)||void 0===e?void 0:e.length)?a.getRowModel().rows.map(e=>(0,n.jsx)(_,{row:e},e.id)):(0,n.jsx)(b.SC,{children:(0,n.jsx)(b.pj,{colSpan:$.length,children:(0,n.jsxs)("p",{className:"flex items-center justify-center gap-3 py-4 font-mono text-xs font-bold uppercase text-muted-foreground",children:[(0,n.jsx)("span",{className:"inline-block h-1.5 w-1.5 animate-ping rounded-full bg-muted-foreground"})," Waiting for transactions…"]})})})})]})}},50011:function(e,t,r){"use strict";r.d(t,{h:function(){return n}});let n=(0,r(30521).M)()(e=>({transactions:[],setTransaction:t=>e(e=>({transactions:[...e.transactions,t]})),updateTransaction:(t,r)=>e(e=>({transactions:e.transactions.map(e=>e.hash===t?{...e,...r}:e)}))}))},35605:function(e,t,r){"use strict";r.d(t,{A:function(){return a}});var n=r(6270),s=r(84367);function a(){let{chainName:e}=(0,n.useParams)();return(0,s.Yx)(e),s.df[e]}},84367:function(e,t,r){"use strict";r.d(t,{is:function(){return f},M0:function(){return p},oK:function(){return m},df:function(){return h},wG:function(){return x},Yx:function(){return g}});var n=r(79617),s=r(53103),a=r(20536),i=r(49249),l=r(76271);({...s.t});var o={...a.g,iconUrls:["https://redstone.xyz/chain-icons/redstone.png"],indexerUrl:"https://indexer.mud.redstonechain.com"},c={...i.T,iconUrls:["https://redstone.xyz/chain-icons/garnet.png"],indexerUrl:"https://indexer.mud.garnetchain.com"},u={http:["https://rpc.rhodolitechain.com"],webSocket:["wss://rpc.rhodolitechain.com"]},d={...l.i,name:"Rhodolite Devnet",testnet:!0,id:17420,sourceId:17001,nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:u,bundler:u,quarryPassIssuer:u,wiresaw:u},contracts:{...l.i.contracts,quarryPaymaster:{address:"0x61f22c3827d90c390e0e2aaf220971524ac0a68d",blockCreated:11262}},blockExplorers:{default:{name:"Blockscout",url:"https://explorer.rhodolitechain.com"},worldsExplorer:{name:"MUD Worlds Explorer",url:"https://explorer.mud.dev/rhodolite/worlds"}},iconUrls:["https://redstone.xyz/chain-icons/rhodolite.png"],indexerUrl:"https://indexer.mud.rhodolitechain.com"};let p=["world","store","metadata","puppet","erc20-puppet","erc721-puppet"],h={anvil:n.O,rhodolite:d,garnet:c,redstone:o},f=Object.fromEntries(Object.entries(h).map(e=>{let[t,r]=e;return[r.id,t]}));function m(e){return"string"==typeof e&&e in h}function x(e){if(!("number"==typeof e&&e in f))throw Error("Invalid chain ID. Supported chains are: ".concat(Object.keys(f).join(", "),"."))}function g(e){if(!m(e))throw Error("Invalid chain name. Supported chains are: ".concat(Object.keys(h).join(", "),"."))}},35431:function(e,t,r){"use strict";r.d(t,{Z:function(){return l}});var n=r(75536),s=r(89702),a=r(80967),i=r(66585);let l=s.forwardRef((e,t)=>{let{className:r,orientation:s="horizontal",decorative:l=!0,...o}=e;return(0,n.jsx)(a.f,{ref:t,decorative:l,orientation:s,className:(0,i.cn)("shrink-0 bg-border","horizontal"===s?"h-[1px] w-full":"h-full w-[1px]",r),...o})});l.displayName=a.f.displayName},68347:function(e,t,r){"use strict";r.d(t,{O:function(){return a}});var n=r(75536),s=r(66585);function a(e){let{className:t,...r}=e;return(0,n.jsx)("div",{className:(0,s.cn)("animate-pulse rounded-md bg-muted",t),...r})}},34431:function(e,t,r){"use strict";r.d(t,{RM:function(){return o},SC:function(){return c},iA:function(){return i},pj:function(){return d},ss:function(){return u},xD:function(){return l}});var n=r(75536),s=r(89702),a=r(66585);let i=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,n.jsx)("table",{ref:t,className:(0,a.cn)("w-full caption-bottom text-sm",r),...s})});i.displayName="Table";let l=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,n.jsx)("thead",{ref:t,className:(0,a.cn)("[&_tr]:border-b",r),...s})});l.displayName="TableHeader";let o=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,n.jsx)("tbody",{ref:t,className:(0,a.cn)("[&_tr:last-child]:border-0",r),...s})});o.displayName="TableBody",s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,n.jsx)("tfoot",{ref:t,className:(0,a.cn)("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",r),...s})}).displayName="TableFooter";let c=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,n.jsx)("tr",{ref:t,className:(0,a.cn)("border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",r),...s})});c.displayName="TableRow";let u=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,n.jsx)("th",{ref:t,className:(0,a.cn)("h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0",r),...s})});u.displayName="TableHead";let d=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,n.jsx)("td",{ref:t,className:(0,a.cn)("p-4 align-middle [&:has([role=checkbox])]:pr-0",r),...s})});d.displayName="TableCell",s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,n.jsx)("caption",{ref:t,className:(0,a.cn)("mt-4 text-sm text-muted-foreground",r),...s})}).displayName="TableCaption"},71118:function(e,t,r){"use strict";r.d(t,{a:function(){return s}});var n=r(75536);function s(e){let{hex:t}=e;return t.length<=10?(0,n.jsx)("span",{children:t}):(0,n.jsxs)("span",{children:[(0,n.jsx)("span",{className:"after:select-none after:content-['…']",children:t.slice(0,6)}),(0,n.jsx)("span",{className:"tracking-[-1ch] text-transparent",children:t.slice(6,-4)}),t.slice(-4)]})}},83966:function(e,t,r){"use strict";r.d(t,{M:function(){return n}});let n="explorer/observer"},41374:function(e,t,r){"use strict";r.d(t,{f:function(){return s}});var n=r(95674);let s=r.n(n)()("mud:explorer").extend("observer")},57253:function(e,t,r){"use strict";r.d(t,{store:function(){return l}});var n=r(30521),s=r(66585),a=r(83966),i=r(41374);let l=(0,n.M)(()=>({writes:{}}));(0,i.f)("listening for relayed messages",a.M);let o=[];new BroadcastChannel(a.M).addEventListener("message",e=>{"ping"!==e.data.type&&o.push(e)}),setInterval(function(){0!==o.length&&l.setState(e=>{let t=e;for(let{data:e}of o){if("ping"===e.type)continue;let r="write"===e.type?{...e,events:[]}:t.writes[e.writeId];if(!r)continue;let n=r.hash;"waitForTransactionReceipt"===e.type?n=e.hash:"waitForUserOperationReceipt:result"===e.type&&(0,s.r8)(e)&&(n=e.value.receipt.transactionHash),t={...t,writes:{...t.writes,[e.writeId]:{...r,type:e.type,hash:n,userOpHash:"waitForUserOperationReceipt"===e.type?e.userOpHash:r.userOpHash,events:[...r.events,e]}}}}return o.length=0,t})},100)},66585:function(e,t,r){"use strict";r.d(t,{az:function(){return o},cn:function(){return i},fu:function(){return l},r8:function(){return c}});var n=r(84141),s=r(88014),a=r(47228);function i(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return(0,a.m)((0,s.W)(t))}function l(e){return e.replace(/[A-Z]/g,e=>"_".concat(e.toLowerCase())).replace(/^_/,"")}function o(e){let t=(0,n.d)(e),r=Math.floor(parseFloat(t)).toString().length;return parseFloat(t).toLocaleString("en-US",{maximumFractionDigits:Math.max(0,6-r)})}function c(e){return"fulfilled"===e.status}},91502:function(e,t,r){"use strict";r.d(t,{WV:function(){return l},jH:function(){return o}});var n=r(89702),s=r(3020),a=r(14292),i=r(75536),l=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","span","svg","ul"].reduce((e,t)=>{let r=n.forwardRef((e,r)=>{let{asChild:n,...s}=e,l=n?a.g7:t;return"undefined"!=typeof window&&(window[Symbol.for("radix-ui")]=!0),(0,i.jsx)(l,{...s,ref:r})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function o(e,t){e&&s.flushSync(()=>e.dispatchEvent(t))}},80967:function(e,t,r){"use strict";r.d(t,{f:function(){return c}});var n=r(89702),s=r(91502),a=r(75536),i="horizontal",l=["horizontal","vertical"],o=n.forwardRef((e,t)=>{let{decorative:r,orientation:n=i,...o}=e,c=l.includes(n)?n:i;return(0,a.jsx)(s.WV.div,{"data-orientation":c,...r?{role:"none"}:{"aria-orientation":"vertical"===c?c:void 0,role:"separator"},...o,ref:t})});o.displayName="Separator";var c=o},60188:function(e,t,r){"use strict";r.d(t,{oR:function(){return a}});var n=r(89702);let{useSyncExternalStoreWithSelector:s}=r(44666);function a(e,t=e.getState,r){let a=s(e.subscribe,e.getState,e.getServerState||e.getState,t,r);return(0,n.useDebugValue)(a),a}},30521:function(e,t,r){"use strict";r.d(t,{M:function(){return s}});let n=e=>{let t;let r=new Set,n=(e,n)=>{let s="function"==typeof e?e(t):e;if(!Object.is(s,t)){let e=t;t=(null!=n?n:"object"!=typeof s)?s:Object.assign({},t,s),r.forEach(r=>r(t,e))}},s=()=>t,a={setState:n,getState:s,subscribe:e=>(r.add(e),()=>r.delete(e)),destroy:()=>{console.warn("[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected."),r.clear()}};return t=e(n,s,a),a},s=e=>e?n(e):n},32858:function(e,t,r){"use strict";function n(e,t){return e<t?-1:e>t?1:0}function s(e,t){let r=new Map;for(let n of e){let e=t(n);r.has(e)||r.set(e,[]),r.get(e).push(n)}return r}function a(e){return void 0!==e}function i(e,t){return Object.fromEntries(Object.entries(e).map(e=>{let[r,n]=e;return[r,t(n,r)]}))}r.d(t,{$K:function(){return a},Xc:function(){return i},iN:function(){return n},vM:function(){return s}})}},function(e){e.O(0,[6095,3388,855,5674,6658,1461,9213,8474,1744],function(){return e(e.s=42981)}),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ !function(){"use strict";var e,t,n,r,c,f,a,o,d,u={},i={};function b(e){var t=i[e];if(void 0!==t)return t.exports;var n=i[e]={id:e,loaded:!1,exports:{}},r=!0;try{u[e].call(n.exports,n,n.exports,b),r=!1}finally{r&&delete i[e]}return n.loaded=!0,n.exports}b.m=u,b.amdO={},e=[],b.O=function(t,n,r,c){if(n){c=c||0;for(var f=e.length;f>0&&e[f-1][2]>c;f--)e[f]=e[f-1];e[f]=[n,r,c];return}for(var a=1/0,f=0;f<e.length;f++){for(var n=e[f][0],r=e[f][1],c=e[f][2],o=!0,d=0;d<n.length;d++)a>=c&&Object.keys(b.O).every(function(e){return b.O[e](n[d])})?n.splice(d--,1):(o=!1,c<a&&(a=c));if(o){e.splice(f--,1);var u=r();void 0!==u&&(t=u)}}return t},b.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return b.d(t,{a:t}),t},n=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},b.t=function(e,r){if(1&r&&(e=this(e)),8&r||"object"==typeof e&&e&&(4&r&&e.__esModule||16&r&&"function"==typeof e.then))return e;var c=Object.create(null);b.r(c);var f={};t=t||[null,n({}),n([]),n(n)];for(var a=2&r&&e;"object"==typeof a&&!~t.indexOf(a);a=n(a))Object.getOwnPropertyNames(a).forEach(function(t){f[t]=function(){return e[t]}});return f.default=function(){return e},b.d(c,f),c},b.d=function(e,t){for(var n in t)b.o(t,n)&&!b.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},b.f={},b.e=function(e){return Promise.all(Object.keys(b.f).reduce(function(t,n){return b.f[n](e,t),t},[]))},b.u=function(e){return 2771===e?"static/chunks/2771-65a928e06b26bf49.js":"static/chunks/"+(2341===e?"a9393dd2":e)+"."+({62:"adca6ba66c01b817",64:"65061eb25600a094",121:"fc69e632ac73ffef",176:"7bb5d76573df3ebf",775:"7b7de713cc38c402",1202:"c9b51dc5c7b2c205",1231:"c26841ed6ac18eb8",1291:"eae10f5b2ff90889",1538:"76bf5f58b67ff190",1630:"27deefb78da9cd4f",1689:"ff6e774127b05dfd",1712:"01bb8891da1c32e9",1872:"a0e938afbac42495",1881:"dc0dca9d79a1aae1",1940:"c33c5896608d67e3",1966:"ba9fba316fb20919",2144:"0d29276ccc21a265",2341:"eb42a6c8a0038985",2684:"b31da6229ea69715",2758:"24993fffee18bf03",2831:"fbb5181c0aea8a5e",2951:"ef7042fef2395a78",3079:"3ebfdb9657943281",3337:"bcdff29ba1823b12",3673:"643e7ea9f9f444f5",4301:"d75c8e8485069945",4417:"bf11256031a5cb13",4602:"f62629bd8466b19c",4685:"f5bf2ccf605210b1",4862:"a95d121ba057d01f",4995:"795c8a2d8abf219b",5037:"68a49afb73b474e8",5361:"72697688cf0ab2c5",5546:"e36304ff263fcf36",5756:"ddd466a79c575d8a",5993:"3b4022657d999537",6007:"0ef8f616f328137e",6013:"74f629aded86b7e2",6375:"b0ab2f54ed143ba1",6428:"422562de71f24e79",6481:"1609a5560e0b7f32",6742:"4cc83938fed80abf",6771:"f2eb69644930c397",6795:"dd211a5533bd1363",6996:"f06a04fda6e8285f",7258:"cbdf63183f28572a",7328:"ffaae9d6c3b75598",7629:"13a762ecad0b7ac8",7647:"27a1b1609922f492",7680:"eb1691f8ad21162d",7708:"62893091e0dc8c89",7789:"d52ad01497ab313b",7949:"8b21fffcc84c71cf",8128:"ea10a4f5fdfd3d70",8347:"9a9e02f5f0915b0e",8557:"8a6311ef26065cd0",8559:"c184ac88a08c4f40",8605:"2396acb06da515e9",8715:"c3b771ec52f973b8",8759:"bfe0364644924115",8761:"c38f09095cc339d2",9150:"ef451f01fe13ecde",9464:"fbc60ccc660495e7",9469:"642ea817e27c9e98"})[e]+".js"},b.miniCssF=function(e){},b.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),b.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r={},c="_N_E:",b.l=function(e,t,n,f){if(r[e]){r[e].push(t);return}if(void 0!==n)for(var a,o,d=document.getElementsByTagName("script"),u=0;u<d.length;u++){var i=d[u];if(i.getAttribute("src")==e||i.getAttribute("data-webpack")==c+n){a=i;break}}a||(o=!0,(a=document.createElement("script")).charset="utf-8",a.timeout=120,b.nc&&a.setAttribute("nonce",b.nc),a.setAttribute("data-webpack",c+n),a.src=b.tu(e)),r[e]=[t];var l=function(t,n){a.onerror=a.onload=null,clearTimeout(s);var c=r[e];if(delete r[e],a.parentNode&&a.parentNode.removeChild(a),c&&c.forEach(function(e){return e(n)}),t)return t(n)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=l.bind(null,a.onerror),a.onload=l.bind(null,a.onload),o&&document.head.appendChild(a)},b.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},b.nmd=function(e){return e.paths=[],e.children||(e.children=[]),e},b.tt=function(){return void 0===f&&(f={createScriptURL:function(e){return e}},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(f=trustedTypes.createPolicy("nextjs#bundler",f))),f},b.tu=function(e){return b.tt().createScriptURL(e)},b.p="/_next/",a={2272:0,8917:0,1889:0,1366:0,2387:0},b.f.j=function(e,t){var n=b.o(a,e)?a[e]:void 0;if(0!==n){if(n)t.push(n[2]);else if(/^(1366|1889|2272|2387|8917)$/.test(e))a[e]=0;else{var r=new Promise(function(t,r){n=a[e]=[t,r]});t.push(n[2]=r);var c=b.p+b.u(e),f=Error();b.l(c,function(t){if(b.o(a,e)&&(0!==(n=a[e])&&(a[e]=void 0),n)){var r=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;f.message="Loading chunk "+e+" failed.\n("+r+": "+c+")",f.name="ChunkLoadError",f.type=r,f.request=c,n[1](f)}},"chunk-"+e,e)}}},b.O.j=function(e){return 0===a[e]},o=function(e,t){var n,r,c=t[0],f=t[1],o=t[2],d=0;if(c.some(function(e){return 0!==a[e]})){for(n in f)b.o(f,n)&&(b.m[n]=f[n]);if(o)var u=o(b)}for(e&&e(t);d<c.length;d++)r=c[d],b.o(a,r)&&a[r]&&a[r][0](),a[r]=0;return b.O(u)},(d=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(o.bind(null,0)),d.push=o.bind(null,d.push.bind(d)),b.nc=void 0}();
@@ -57,6 +57,6 @@ type ObserverOptions = {
57
57
  explorerUrl?: string;
58
58
  waitForTransaction?: WaitForTransaction;
59
59
  };
60
- declare function observer({ explorerUrl, waitForTransaction }?: ObserverOptions): <transport extends Transport, chain extends Chain | undefined = Chain | undefined, account extends Account | undefined = Account | undefined>(client: Client<transport, chain, account>) => Pick<WalletActions<chain, account>, "writeContract"> & Pick<BundlerActions, "sendUserOperation">;
60
+ declare function observer({ explorerUrl: initialExplorerUrl, waitForTransaction }?: ObserverOptions): <transport extends Transport, chain extends Chain | undefined = Chain | undefined, account extends Account | undefined = Account | undefined>(client: Client<transport, chain, account>) => Pick<WalletActions<chain, account>, "writeContract"> & Pick<BundlerActions, "sendUserOperation">;
61
61
 
62
62
  export { CreateBridgeOpts, EmitMessage, MessageType, Messages, ObserverOptions, WaitForTransaction, createBridge, observer };
@@ -72,92 +72,99 @@ import { waitForTransactionReceipt, writeContract } from "viem/actions";
72
72
  import { getAction } from "viem/utils";
73
73
  import { isDefined } from "@latticexyz/common/utils";
74
74
  var writeCounter = 0;
75
- function observer({ explorerUrl = "http://localhost:13690", waitForTransaction } = {}) {
76
- const emit = createBridge({ url: `${explorerUrl}/internal/observer-relay` });
77
- return (client) => ({
78
- async sendUserOperation(args) {
79
- const writeId = `${client.uid}-${++writeCounter}`;
80
- const write = getAction(client, sendUserOperation, "sendUserOperation")(args);
81
- if (!("calls" in args) || !args.calls)
82
- return write;
83
- const calls = args.calls.map((call) => {
84
- if (!call || typeof call !== "object")
85
- return void 0;
86
- if (!("to" in call) || typeof call.to !== "string")
87
- return void 0;
88
- if (!("functionName" in call) || typeof call.functionName !== "string")
89
- return void 0;
90
- if (!("args" in call) || !Array.isArray(call.args))
91
- return void 0;
92
- return {
93
- to: call.to,
94
- functionName: call.functionName,
95
- args: call.args,
96
- ..."value" in call && typeof call.value === "bigint" && { value: call.value }
97
- };
98
- }).filter(isDefined);
99
- if (calls.length === 0)
75
+ function observer({ explorerUrl: initialExplorerUrl, waitForTransaction } = {}) {
76
+ return (client) => {
77
+ const explorerUrl = initialExplorerUrl ?? client.chain?.blockExplorers?.worldsExplorer?.url;
78
+ if (!explorerUrl)
79
+ return {};
80
+ const emit = createBridge({ url: new URL("/internal/observer-relay", explorerUrl).toString() });
81
+ return {
82
+ async sendUserOperation(args) {
83
+ const writeId = `${client.uid}-${++writeCounter}`;
84
+ const write = getAction(client, sendUserOperation, "sendUserOperation")(args);
85
+ if (!("calls" in args) || !args.calls)
86
+ return write;
87
+ const calls = args.calls.map((call) => {
88
+ if (!call || typeof call !== "object")
89
+ return void 0;
90
+ if (!("to" in call) || typeof call.to !== "string")
91
+ return void 0;
92
+ if (!("functionName" in call) || typeof call.functionName !== "string")
93
+ return void 0;
94
+ if (!("args" in call) || !Array.isArray(call.args))
95
+ return void 0;
96
+ return {
97
+ to: call.to,
98
+ functionName: call.functionName,
99
+ args: call.args,
100
+ ..."value" in call && typeof call.value === "bigint" && { value: call.value }
101
+ };
102
+ }).filter(isDefined);
103
+ if (calls.length === 0)
104
+ return write;
105
+ emit("write", {
106
+ writeId,
107
+ // TODO: type as SessionClient once available from entrykit
108
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
109
+ from: client.userAddress ?? client.account.address,
110
+ calls
111
+ });
112
+ Promise.allSettled([write]).then(([result]) => {
113
+ emit("write:result", { ...result, writeId });
114
+ });
115
+ write.then((userOpHash) => {
116
+ const receipt = getAction(
117
+ client,
118
+ waitForUserOperationReceipt,
119
+ "waitForUserOperationReceipt"
120
+ )({ hash: userOpHash });
121
+ emit("waitForUserOperationReceipt", { writeId, userOpHash });
122
+ Promise.allSettled([receipt]).then(([result]) => {
123
+ emit("waitForUserOperationReceipt:result", { ...result, writeId });
124
+ });
125
+ });
100
126
  return write;
101
- emit("write", {
102
- writeId,
103
- // TODO: type as SessionClient once available from entrykit
104
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
105
- from: client.userAddress ?? client.account.address,
106
- calls
107
- });
108
- Promise.allSettled([write]).then(([result]) => {
109
- emit("write:result", { ...result, writeId });
110
- });
111
- write.then((userOpHash) => {
112
- const receipt = getAction(
113
- client,
114
- waitForUserOperationReceipt,
115
- "waitForUserOperationReceipt"
116
- )({ hash: userOpHash });
117
- emit("waitForUserOperationReceipt", { writeId, userOpHash });
118
- Promise.allSettled([receipt]).then(([result]) => {
119
- emit("waitForUserOperationReceipt:result", { ...result, writeId });
127
+ },
128
+ async writeContract(args) {
129
+ const writeId = `${client.uid}-${++writeCounter}`;
130
+ const write = getAction(client, writeContract, "writeContract")(args);
131
+ emit("write", {
132
+ writeId,
133
+ // TODO: type as SessionClient once available from entrykit
134
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
135
+ from: client.userAddress ?? client.account.address,
136
+ calls: [
137
+ {
138
+ to: args.address,
139
+ functionName: args.functionName,
140
+ args: args.args ?? [],
141
+ ...args.value && { value: args.value }
142
+ }
143
+ ]
120
144
  });
121
- });
122
- return write;
123
- },
124
- async writeContract(args) {
125
- const writeId = `${client.uid}-${++writeCounter}`;
126
- const write = getAction(client, writeContract, "writeContract")(args);
127
- emit("write", {
128
- writeId,
129
- from: client.account.address,
130
- calls: [
131
- {
132
- to: args.address,
133
- functionName: args.functionName,
134
- args: args.args ?? [],
135
- ...args.value && { value: args.value }
136
- }
137
- ]
138
- });
139
- Promise.allSettled([write]).then(([result]) => {
140
- emit("write:result", { ...result, writeId });
141
- });
142
- write.then((hash) => {
143
- const receipt = getAction(client, waitForTransactionReceipt, "waitForTransactionReceipt")({ hash });
144
- emit("waitForTransactionReceipt", { writeId, hash });
145
- Promise.allSettled([receipt]).then(([result]) => {
146
- emit("waitForTransactionReceipt:result", { ...result, writeId });
145
+ Promise.allSettled([write]).then(([result]) => {
146
+ emit("write:result", { ...result, writeId });
147
147
  });
148
- });
149
- if (waitForTransaction) {
150
148
  write.then((hash) => {
151
- const receipt = waitForTransaction(hash);
152
- emit("waitForTransaction", { writeId });
149
+ const receipt = getAction(client, waitForTransactionReceipt, "waitForTransactionReceipt")({ hash });
150
+ emit("waitForTransactionReceipt", { writeId, hash });
153
151
  Promise.allSettled([receipt]).then(([result]) => {
154
- emit("waitForTransaction:result", { ...result, writeId });
152
+ emit("waitForTransactionReceipt:result", { ...result, writeId });
155
153
  });
156
154
  });
155
+ if (waitForTransaction) {
156
+ write.then((hash) => {
157
+ const receipt = waitForTransaction(hash);
158
+ emit("waitForTransaction", { writeId });
159
+ Promise.allSettled([receipt]).then(([result]) => {
160
+ emit("waitForTransaction:result", { ...result, writeId });
161
+ });
162
+ });
163
+ }
164
+ return write;
157
165
  }
158
- return write;
159
- }
160
- });
166
+ };
167
+ };
161
168
  }
162
169
  export {
163
170
  createBridge,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/observer/bridge.ts","../../src/debug.ts","../../src/observer/debug.ts","../../src/observer/decorator.ts"],"sourcesContent":["\"use client\";\n\nimport { wait } from \"@latticexyz/common/utils\";\nimport { debug } from \"./debug\";\nimport { EmitMessage } from \"./messages\";\n\nexport type BridgeEnvelope = { mud: \"explorer/observer\"; data: unknown };\n\nexport function isBridgeEnvelope(input: unknown): input is BridgeEnvelope {\n return (\n typeof input === \"object\" &&\n input !== null &&\n \"mud\" in input &&\n input.mud === \"explorer/observer\" &&\n \"data\" in input\n );\n}\n\nexport function wrapMessage(data: unknown): BridgeEnvelope {\n return { mud: \"explorer/observer\", data };\n}\n\nexport type CreateBridgeOpts = {\n url: string;\n timeout?: number;\n};\n\nexport function createBridge({ url, timeout = 10_000 }: CreateBridgeOpts): EmitMessage {\n const bridge = new Promise<HTMLIFrameElement>((resolve, reject) => {\n const iframe =\n Array.from(document.querySelectorAll(\"iframe[data-bridge][src]\"))\n .filter((el): el is HTMLIFrameElement => true)\n .find((el) => el.src === url) ?? document.createElement(\"iframe\");\n\n if (iframe.dataset.bridge === \"ready\") {\n debug(\"reusing observer iframe\", iframe.src);\n return resolve(iframe);\n }\n\n Promise.race([\n new Promise<void>((resolve, reject) => {\n iframe.addEventListener(\"load\", () => resolve(), { once: true });\n iframe.addEventListener(\"error\", (error) => reject(error), { once: true });\n }),\n wait(timeout).then(() => {\n throw new Error(\"Timed out waiting for observer iframe to load.\");\n }),\n ]).then(\n () => {\n debug(\"observer iframe ready\", iframe.src);\n iframe.dataset.bridge = \"ready\";\n resolve(iframe);\n },\n (error) => {\n debug(\"observer iframe error\", error);\n iframe.remove();\n reject(error);\n },\n );\n\n if (iframe.dataset.bridge !== \"loading\") {\n iframe.tabIndex = -1;\n iframe.ariaHidden = \"true\";\n iframe.style.position = \"absolute\";\n iframe.style.border = \"0\";\n iframe.style.width = \"0\";\n iframe.style.height = \"0\";\n iframe.dataset.bridge = \"loading\";\n iframe.src = url;\n debug(\"mounting observer iframe\", url);\n parent.document.body.appendChild(iframe);\n }\n });\n\n return (type, data) => {\n debug(\"got message for bridge\", type, data);\n bridge.then(\n (iframe) => {\n debug(\"posting message to bridge\", type, data);\n const message = wrapMessage({ type, time: Date.now(), ...data });\n iframe.contentWindow!.postMessage(message, \"*\");\n },\n (error) => debug(\"could not deliver message\", type, data, error),\n );\n };\n}\n","import createDebug from \"debug\";\n\nexport const debug = createDebug(\"mud:explorer\");\n","import { debug as parentDebug } from \"../debug\";\n\nexport const debug = parentDebug.extend(\"observer\");\n","import { Account, Address, Chain, Client, Hex, Transport, WalletActions } from \"viem\";\nimport { BundlerActions, sendUserOperation, waitForUserOperationReceipt } from \"viem/account-abstraction\";\nimport { waitForTransactionReceipt, writeContract } from \"viem/actions\";\nimport { getAction } from \"viem/utils\";\nimport { isDefined } from \"@latticexyz/common/utils\";\nimport { createBridge } from \"./bridge\";\nimport { ReceiptSummary } from \"./common\";\n\nexport type WaitForTransaction = (hash: Hex) => Promise<ReceiptSummary>;\n\nexport type ObserverOptions = {\n explorerUrl?: string;\n waitForTransaction?: WaitForTransaction;\n};\n\nlet writeCounter = 0;\n\nexport function observer({ explorerUrl = \"http://localhost:13690\", waitForTransaction }: ObserverOptions = {}): <\n transport extends Transport,\n chain extends Chain | undefined = Chain | undefined,\n account extends Account | undefined = Account | undefined,\n>(\n client: Client<transport, chain, account>,\n) => Pick<WalletActions<chain, account>, \"writeContract\"> & Pick<BundlerActions, \"sendUserOperation\"> {\n const emit = createBridge({ url: `${explorerUrl}/internal/observer-relay` });\n\n return (client) => ({\n async sendUserOperation(args) {\n const writeId = `${client.uid}-${++writeCounter}`;\n const write = getAction(client, sendUserOperation, \"sendUserOperation\")(args);\n if (!(\"calls\" in args) || !args.calls) return write;\n\n const calls = args.calls\n .map((call) => {\n if (!call || typeof call !== \"object\") return undefined;\n if (!(\"to\" in call) || typeof call.to !== \"string\") return undefined;\n if (!(\"functionName\" in call) || typeof call.functionName !== \"string\") return undefined;\n if (!(\"args\" in call) || !Array.isArray(call.args)) return undefined;\n\n return {\n to: call.to as Address,\n functionName: call.functionName,\n args: call.args,\n ...(\"value\" in call && typeof call.value === \"bigint\" && { value: call.value }),\n };\n })\n .filter(isDefined);\n if (calls.length === 0) return write;\n\n emit(\"write\", {\n writeId,\n // TODO: type as SessionClient once available from entrykit\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n from: (client as any).userAddress ?? client.account!.address,\n calls,\n });\n Promise.allSettled([write]).then(([result]) => {\n emit(\"write:result\", { ...result, writeId });\n });\n\n write.then((userOpHash) => {\n const receipt = getAction(\n client,\n waitForUserOperationReceipt,\n \"waitForUserOperationReceipt\",\n )({ hash: userOpHash });\n\n emit(\"waitForUserOperationReceipt\", { writeId, userOpHash });\n Promise.allSettled([receipt]).then(([result]) => {\n emit(\"waitForUserOperationReceipt:result\", { ...result, writeId });\n });\n });\n\n return write;\n },\n\n async writeContract(args) {\n const writeId = `${client.uid}-${++writeCounter}`;\n const write = getAction(client, writeContract, \"writeContract\")(args);\n\n emit(\"write\", {\n writeId,\n from: client.account!.address,\n calls: [\n {\n to: args.address,\n functionName: args.functionName,\n args: (args.args ?? []) as never,\n ...(args.value && { value: args.value }),\n },\n ],\n });\n Promise.allSettled([write]).then(([result]) => {\n emit(\"write:result\", { ...result, writeId });\n });\n\n write.then((hash) => {\n const receipt = getAction(client, waitForTransactionReceipt, \"waitForTransactionReceipt\")({ hash });\n\n emit(\"waitForTransactionReceipt\", { writeId, hash });\n Promise.allSettled([receipt]).then(([result]) => {\n emit(\"waitForTransactionReceipt:result\", { ...result, writeId });\n });\n });\n\n if (waitForTransaction) {\n write.then((hash) => {\n const receipt = waitForTransaction(hash);\n\n emit(\"waitForTransaction\", { writeId });\n Promise.allSettled([receipt]).then(([result]) => {\n emit(\"waitForTransaction:result\", { ...result, writeId });\n });\n });\n }\n\n return write;\n },\n });\n}\n"],"mappings":"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","names":["debug","debug","resolve","reject"]}
1
+ {"version":3,"sources":["../../src/observer/bridge.ts","../../src/debug.ts","../../src/observer/debug.ts","../../src/observer/decorator.ts"],"sourcesContent":["\"use client\";\n\nimport { wait } from \"@latticexyz/common/utils\";\nimport { debug } from \"./debug\";\nimport { EmitMessage } from \"./messages\";\n\nexport type BridgeEnvelope = { mud: \"explorer/observer\"; data: unknown };\n\nexport function isBridgeEnvelope(input: unknown): input is BridgeEnvelope {\n return (\n typeof input === \"object\" &&\n input !== null &&\n \"mud\" in input &&\n input.mud === \"explorer/observer\" &&\n \"data\" in input\n );\n}\n\nexport function wrapMessage(data: unknown): BridgeEnvelope {\n return { mud: \"explorer/observer\", data };\n}\n\nexport type CreateBridgeOpts = {\n url: string;\n timeout?: number;\n};\n\nexport function createBridge({ url, timeout = 10_000 }: CreateBridgeOpts): EmitMessage {\n const bridge = new Promise<HTMLIFrameElement>((resolve, reject) => {\n const iframe =\n Array.from(document.querySelectorAll(\"iframe[data-bridge][src]\"))\n .filter((el): el is HTMLIFrameElement => true)\n .find((el) => el.src === url) ?? document.createElement(\"iframe\");\n\n if (iframe.dataset.bridge === \"ready\") {\n debug(\"reusing observer iframe\", iframe.src);\n return resolve(iframe);\n }\n\n Promise.race([\n new Promise<void>((resolve, reject) => {\n iframe.addEventListener(\"load\", () => resolve(), { once: true });\n iframe.addEventListener(\"error\", (error) => reject(error), { once: true });\n }),\n wait(timeout).then(() => {\n throw new Error(\"Timed out waiting for observer iframe to load.\");\n }),\n ]).then(\n () => {\n debug(\"observer iframe ready\", iframe.src);\n iframe.dataset.bridge = \"ready\";\n resolve(iframe);\n },\n (error) => {\n debug(\"observer iframe error\", error);\n iframe.remove();\n reject(error);\n },\n );\n\n if (iframe.dataset.bridge !== \"loading\") {\n iframe.tabIndex = -1;\n iframe.ariaHidden = \"true\";\n iframe.style.position = \"absolute\";\n iframe.style.border = \"0\";\n iframe.style.width = \"0\";\n iframe.style.height = \"0\";\n iframe.dataset.bridge = \"loading\";\n iframe.src = url;\n debug(\"mounting observer iframe\", url);\n parent.document.body.appendChild(iframe);\n }\n });\n\n return (type, data) => {\n debug(\"got message for bridge\", type, data);\n bridge.then(\n (iframe) => {\n debug(\"posting message to bridge\", type, data);\n const message = wrapMessage({ type, time: Date.now(), ...data });\n iframe.contentWindow!.postMessage(message, \"*\");\n },\n (error) => debug(\"could not deliver message\", type, data, error),\n );\n };\n}\n","import createDebug from \"debug\";\n\nexport const debug = createDebug(\"mud:explorer\");\n","import { debug as parentDebug } from \"../debug\";\n\nexport const debug = parentDebug.extend(\"observer\");\n","import { Account, Address, Chain, Client, Hex, Transport, WalletActions } from \"viem\";\nimport { BundlerActions, sendUserOperation, waitForUserOperationReceipt } from \"viem/account-abstraction\";\nimport { waitForTransactionReceipt, writeContract } from \"viem/actions\";\nimport { getAction } from \"viem/utils\";\nimport { isDefined } from \"@latticexyz/common/utils\";\nimport { createBridge } from \"./bridge\";\nimport { ReceiptSummary } from \"./common\";\n\nexport type WaitForTransaction = (hash: Hex) => Promise<ReceiptSummary>;\n\nexport type ObserverOptions = {\n explorerUrl?: string;\n waitForTransaction?: WaitForTransaction;\n};\n\nlet writeCounter = 0;\n\nexport function observer({ explorerUrl: initialExplorerUrl, waitForTransaction }: ObserverOptions = {}): <\n transport extends Transport,\n chain extends Chain | undefined = Chain | undefined,\n account extends Account | undefined = Account | undefined,\n>(\n client: Client<transport, chain, account>,\n) => Pick<WalletActions<chain, account>, \"writeContract\"> & Pick<BundlerActions, \"sendUserOperation\"> {\n return (client) => {\n const explorerUrl = initialExplorerUrl ?? client.chain?.blockExplorers?.worldsExplorer?.url;\n if (!explorerUrl) return {} as never;\n\n const emit = createBridge({ url: new URL(\"/internal/observer-relay\", explorerUrl).toString() });\n\n return {\n async sendUserOperation(args) {\n const writeId = `${client.uid}-${++writeCounter}`;\n const write = getAction(client, sendUserOperation, \"sendUserOperation\")(args);\n if (!(\"calls\" in args) || !args.calls) return write;\n\n const calls = args.calls\n .map((call) => {\n if (!call || typeof call !== \"object\") return undefined;\n if (!(\"to\" in call) || typeof call.to !== \"string\") return undefined;\n if (!(\"functionName\" in call) || typeof call.functionName !== \"string\") return undefined;\n if (!(\"args\" in call) || !Array.isArray(call.args)) return undefined;\n\n return {\n to: call.to as Address,\n functionName: call.functionName,\n args: call.args,\n ...(\"value\" in call && typeof call.value === \"bigint\" && { value: call.value }),\n };\n })\n .filter(isDefined);\n if (calls.length === 0) return write;\n\n emit(\"write\", {\n writeId,\n // TODO: type as SessionClient once available from entrykit\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n from: (client as any).userAddress ?? client.account!.address,\n calls,\n });\n Promise.allSettled([write]).then(([result]) => {\n emit(\"write:result\", { ...result, writeId });\n });\n\n write.then((userOpHash) => {\n const receipt = getAction(\n client,\n waitForUserOperationReceipt,\n \"waitForUserOperationReceipt\",\n )({ hash: userOpHash });\n\n emit(\"waitForUserOperationReceipt\", { writeId, userOpHash });\n Promise.allSettled([receipt]).then(([result]) => {\n emit(\"waitForUserOperationReceipt:result\", { ...result, writeId });\n });\n });\n\n return write;\n },\n\n async writeContract(args) {\n const writeId = `${client.uid}-${++writeCounter}`;\n const write = getAction(client, writeContract, \"writeContract\")(args);\n\n emit(\"write\", {\n writeId,\n // TODO: type as SessionClient once available from entrykit\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n from: (client as any).userAddress ?? client.account!.address,\n calls: [\n {\n to: args.address,\n functionName: args.functionName,\n args: (args.args ?? []) as never,\n ...(args.value && { value: args.value }),\n },\n ],\n });\n Promise.allSettled([write]).then(([result]) => {\n emit(\"write:result\", { ...result, writeId });\n });\n\n write.then((hash) => {\n const receipt = getAction(client, waitForTransactionReceipt, \"waitForTransactionReceipt\")({ hash });\n\n emit(\"waitForTransactionReceipt\", { writeId, hash });\n Promise.allSettled([receipt]).then(([result]) => {\n emit(\"waitForTransactionReceipt:result\", { ...result, writeId });\n });\n });\n\n if (waitForTransaction) {\n write.then((hash) => {\n const receipt = waitForTransaction(hash);\n\n emit(\"waitForTransaction\", { writeId });\n Promise.allSettled([receipt]).then(([result]) => {\n emit(\"waitForTransaction:result\", { ...result, writeId });\n });\n });\n }\n\n return write;\n },\n };\n };\n}\n"],"mappings":"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","names":["debug","debug","resolve","reject"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@latticexyz/explorer",
3
- "version": "2.2.15-main-07b6be82ace9654ce043e616e28b347f3121f415",
3
+ "version": "2.2.15-main-f5f772b44fc735c3874834fb14cc28e8a54f8957",
4
4
  "description": "World Explorer is a tool for visually exploring and manipulating the state of worlds",
5
5
  "type": "module",
6
6
  "exports": {
@@ -58,15 +58,15 @@
58
58
  "yargs": "^17.7.1",
59
59
  "zod": "3.23.8",
60
60
  "zustand": "^4.3.7",
61
- "@latticexyz/block-logs-stream": "2.2.15-main-07b6be82ace9654ce043e616e28b347f3121f415",
62
- "@latticexyz/common": "2.2.15-main-07b6be82ace9654ce043e616e28b347f3121f415",
63
- "@latticexyz/config": "2.2.15-main-07b6be82ace9654ce043e616e28b347f3121f415",
64
- "@latticexyz/protocol-parser": "2.2.15-main-07b6be82ace9654ce043e616e28b347f3121f415",
65
- "@latticexyz/schema-type": "2.2.15-main-07b6be82ace9654ce043e616e28b347f3121f415",
66
- "@latticexyz/store": "2.2.15-main-07b6be82ace9654ce043e616e28b347f3121f415",
67
- "@latticexyz/store-indexer": "2.2.15-main-07b6be82ace9654ce043e616e28b347f3121f415",
68
- "@latticexyz/store-sync": "2.2.15-main-07b6be82ace9654ce043e616e28b347f3121f415",
69
- "@latticexyz/world": "2.2.15-main-07b6be82ace9654ce043e616e28b347f3121f415"
61
+ "@latticexyz/block-logs-stream": "2.2.15-main-f5f772b44fc735c3874834fb14cc28e8a54f8957",
62
+ "@latticexyz/common": "2.2.15-main-f5f772b44fc735c3874834fb14cc28e8a54f8957",
63
+ "@latticexyz/config": "2.2.15-main-f5f772b44fc735c3874834fb14cc28e8a54f8957",
64
+ "@latticexyz/protocol-parser": "2.2.15-main-f5f772b44fc735c3874834fb14cc28e8a54f8957",
65
+ "@latticexyz/schema-type": "2.2.15-main-f5f772b44fc735c3874834fb14cc28e8a54f8957",
66
+ "@latticexyz/store": "2.2.15-main-f5f772b44fc735c3874834fb14cc28e8a54f8957",
67
+ "@latticexyz/store-indexer": "2.2.15-main-f5f772b44fc735c3874834fb14cc28e8a54f8957",
68
+ "@latticexyz/store-sync": "2.2.15-main-f5f772b44fc735c3874834fb14cc28e8a54f8957",
69
+ "@latticexyz/world": "2.2.15-main-f5f772b44fc735c3874834fb14cc28e8a54f8957"
70
70
  },
71
71
  "devDependencies": {
72
72
  "@trivago/prettier-plugin-sort-imports": "^4.3.0",