@hivemindhq/snap 1.2.1 → 1.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle.js +1 -1
- package/package.json +1 -1
- package/snap.manifest.json +2 -2
- package/src/images/logo.svg +3 -7
package/dist/bundle.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{"use strict";var t={d:(e,n)=>{for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};function n(t,e,n){if("string"==typeof t)throw new Error(`An HTML element ("${String(t)}") was used in a Snap component, which is not supported by Snaps UI. Please use one of the supported Snap components.`);if(!t)throw new Error("A JSX fragment was used in a Snap component, which is not supported by Snaps UI. Please use one of the supported Snap components.");return t({...e,key:n})}function r(t,e,r){return n(t,e,r)}function i(t){return Object.fromEntries(Object.entries(t).filter((([,t])=>void 0!==t)))}function o(t){return e=>{const{key:n=null,...r}=e;return{type:t,props:i(r),key:n}}}t.r(e),t.d(e,{onHomePage:()=>mt,onTransaction:()=>pt,onUserInput:()=>ht});const a=o("Box"),s=o("Heading"),l=o("Text"),c=o("Divider"),d=o("Link"),u={backendUrl:"https://testnet.intuition.sh/v1/graphql",rpcUrl:"https://testnet.rpc.intuition.systems",chainId:13579,chainIdHex:"0x350B",chainName:"Intuition Testnet",chainKey:"intuition-testnet",currencySymbol:"TTRUST",decimalPrecision:18,hasTagAtomId:"0x6de69cc0ae3efe4000279b1bf365065096c8715d8180bc2a98046ee07d3356fd",trustworthyAtomId:"0xe9c0e287737685382bd34d51090148935bdb671c98d20180b2fec15bd263f73a",hasAliasAtomId:"0xf8cfb4e3f1db08f72f255cf7afaceb4b32684a64dac0f423cdca04dd15cf4fd6"},p=u,h=async(t,e)=>{const n=await fetch(p.backendUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:t,variables:e})});if(!n.ok)throw new Error(`GraphQL request failed: ${n.status} ${n.statusText}`);const r=await n.json();if(r.errors&&r.errors.length>0)throw new Error(`GraphQL error: ${r.errors[0].message}`);return r},m='\nquery TripleWithPositionAggregates($subjectId: String!, $predicateId: String!, $objectId: String!) {\n triples(where: {\n subject_id: { _eq: $subjectId },\n predicate_id: { _eq: $predicateId },\n object_id: { _eq: $objectId }\n }) {\n term_id\n subject_id\n predicate_id\n object_id\n creator_id\n counter_term_id\n\n # Main vault (support) market data\n term {\n vaults(where: { curve_id: { _eq: "1" } }) {\n term_id\n market_cap\n position_count\n curve_id\n }\n }\n\n # Counter vault (oppose) market data\n counter_term {\n vaults(where: { curve_id: { _eq: "1" } }) {\n term_id\n market_cap\n position_count\n curve_id\n }\n }\n\n # Triple-specific aggregated market data\n triple_term {\n term_id\n counter_term_id\n total_market_cap\n total_position_count\n }\n\n # Detailed triple vault data per curve\n triple_vault {\n term_id\n counter_term_id\n curve_id\n position_count\n market_cap\n }\n\n positions_aggregate {\n aggregate {\n count\n sum {\n shares\n }\n avg {\n shares\n }\n }\n }\n\n counter_positions_aggregate {\n aggregate {\n count\n sum {\n shares\n }\n avg {\n shares\n }\n }\n }\n\n positions(\n order_by: { shares: desc }\n limit: 30\n ) {\n id\n account_id\n term_id\n curve_id\n shares\n account {\n id\n label\n }\n }\n\n counter_positions(\n order_by: { shares: desc }\n limit: 30\n ) {\n id\n account_id\n term_id\n curve_id\n shares\n account {\n id\n label\n }\n }\n }\n chainlink_prices(limit: 1, order_by: { id: desc }) {\n usd\n }\n backup_chainlink_prices: chainlink_prices(\n limit: 1,\n order_by: { id: desc },\n where: { usd: { _is_null: false } }\n ) {\n usd\n }\n}\n',_="\nquery OriginAtom($originUrl: String!) {\n atoms(\n where: {\n _or: [\n { label: { _ilike: $originUrl } },\n { data: { _ilike: $originUrl } }\n ]\n },\n order_by: { term: { total_market_cap: desc_nulls_last } },\n limit: 1\n ) {\n term_id\n type\n label\n image\n data\n emoji\n creator_id\n }\n}\n",g="\nquery UserTrustedCircle($userAddress: String!, $predicateId: String!, $objectId: String!) {\n positions(\n where: {\n account_id: { _ilike: $userAddress },\n triple: {\n predicate_id: { _eq: $predicateId },\n object_id: { _eq: $objectId }\n }\n },\n order_by: { shares: desc },\n limit: 200\n ) {\n triple {\n subject_id\n subject {\n label\n }\n }\n }\n}\n";var f,b;!function(t){t.NoAtom="NoAtom",t.AtomWithoutTrustTriple="AtomWithoutTrustTriple",t.AtomWithTrustTriple="AtomWithTrustTriple"}(f||(f={})),function(t){t.NoOrigin="NoOrigin",t.NoAtom="OriginNoAtom",t.AtomWithoutTrustTriple="OriginAtomWithoutTrustTriple",t.AtomWithTrustTriple="OriginAtomWithTrustTriple"}(b||(b={}));const v=(t,e)=>`caip10:${e}:${t}`,w=(t,e)=>{const n=BigInt(t),r=BigInt(10**e),i=n/r,o=(n%r).toString().padStart(e,"0").slice(0,6);return Number(`${i}.${o}`)},y=o("Section"),T=o("Row"),A=o("Address"),I=o("Bold"),C=o("Value"),S={"well-distributed":"success",moderate:"warning",concentrated:"warning","whale-dominated":"warning"},k={"well-distributed":"#22c55e",moderate:"#eab308",concentrated:"#f97316","whale-dominated":"#ef4444"},$={"well-distributed":"Well Distributed",moderate:"Moderate",concentrated:"Concentrated","whale-dominated":"Whale Dominated"},j={"well-distributed":"🟢 Distributed",moderate:"🟡 Moderate",concentrated:"⚠️ Concentrated","whale-dominated":"⛔️ Whale"};function P(t,e){const n=t.filter((t=>t>0));if(0===n.length)return 0;const r=n.reduce(((t,e)=>t+e),0);if(0===r)return 0;return[...n].sort(((t,e)=>e-t)).slice(0,e).reduce(((t,e)=>t+e),0)/r*100}const W={gini:{wellDistributed:.35,moderate:.55,concentrated:.75},top1:{wellDistributed:30,moderate:50,concentrated:80},minStakersForAnalysis:3};function N(t,e,n){const{gini:r,top1:i,minStakersForAnalysis:o}=W;return e>=i.concentrated?"whale-dominated":n<o?e>=i.moderate?"concentrated":0===n?"well-distributed":"moderate":t<=r.wellDistributed?"well-distributed":t<=r.moderate?"moderate":t<=r.concentrated?"concentrated":"whale-dominated"}function O(t){const e=t.filter((t=>t>0)),n=e.length,r=e.reduce(((t,e)=>t+e),0);if(0===n){const t="well-distributed";return{gini:0,nakamoto:0,top1Percent:0,top3Percent:0,stakerCount:0,totalShares:0,status:t,snapColor:S[t],hexColor:k[t],label:"No Stakes",shortLabel:"None"}}const i=function(t){const e=t.filter((t=>t>0)),n=e.length;if(0===n)return 0;if(1===n)return 0;const r=e.reduce(((t,e)=>t+e),0)/n;if(0===r)return 0;let i=0;for(let t=0;t<n;t++)for(let r=0;r<n;r++){const n=e[t],o=e[r];void 0!==n&&void 0!==o&&(i+=Math.abs(n-o))}const o=i/(2*n*n*r);return Math.max(0,Math.min(1,o))}(e),o=function(t){const e=t.filter((t=>t>0));if(0===e.length)return 0;const n=.51*e.reduce(((t,e)=>t+e),0),r=[...e].sort(((t,e)=>e-t));let i=0;for(let t=0;t<r.length;t++){const e=r[t];if(void 0!==e&&(i+=e,i>=n))return t+1}return r.length}(e),a=P(e,1),s=P(e,3),l=N(i,a,n);return{gini:i,nakamoto:o,top1Percent:a,top3Percent:s,stakerCount:n,totalShares:r,status:l,snapColor:S[l],hexColor:k[l],label:$[l],shortLabel:j[l]}}function x(t){return O(t.map((t=>t.shares)).filter((t=>!isNaN(t)&&t>0)))}function q(t){var e,n;if(!t||0===t.count)return O([]);const{count:r,sum:i,avg:o}=t,a=(null===(e=i)||void 0===e?void 0:e.shares)||0;null===(n=o)||void 0===n||n.shares;if(0===r||0===a)return O([]);let s,l;s=1===r?100:2===r?70:r<=5?100/Math.sqrt(r):Math.max(20,100/Math.pow(r,.7)),l=1===r?0:2===r?.5:r<=5?.6:r<=10?.5:.4;const c=N(l,s,r);return{gini:l,nakamoto:1===r?1:Math.ceil(.3*r),top1Percent:s,top3Percent:Math.min(100,1.3*s),stakerCount:r,totalShares:a,status:c,snapColor:S[c],hexColor:k[c],label:$[c],shortLabel:j[c]}}function U(t,e,n,r,i,o){const{level:a,ratio:s}=function(t,e){const n=t+e;if(0===n)return{level:"no-stakes",ratio:50};const r=t/n*100;return r>=70?{level:"trusted",ratio:r}:r>=30?{level:"mixed",ratio:r}:{level:"untrusted",ratio:r}}(t,e),l=n&&n.length>0?x(n):q(i),c=r&&r.length>0?x(r):q(o),d=function(t,e){const n=["well-distributed","moderate","concentrated","whale-dominated"];return n.indexOf(t)>=n.indexOf(e)?t:e}(l.status,c.status);return{trustLevel:a,trustRatio:s,forDistribution:l,againstDistribution:c,overallDistribution:d,overallSnapColor:S[d]}}function D(t){if(0===t.length)return"";const e=t.slice(0,3).map((t=>function(t){if(/^0x[a-fA-F0-9]{40}$/u.test(t))return`${t.slice(0,6)}...${t.slice(-4)}`;if(t.startsWith("caip10:")){const e=t.split(":"),n=e[e.length-1];if(n&&/^0x[a-fA-F0-9]{40}$/u.test(n))return`${n.slice(0,6)}...${n.slice(-4)}`}return t}(t.label)));if(t.length>3){const n=t.length-3;return`${e.join(", ")} +${n} more`}return e.join(", ")}const L=({forContacts:t,againstContacts:e})=>0===t.length&&0===e.length?null:r(y,{children:[n(s,{size:"sm",children:"Your Trusted Contacts"}),t.length>0&&n(T,{label:"FOR",children:n(l,{color:"success",children:n(I,{children:D(t)})})}),e.length>0&&n(T,{label:"AGAINST",children:n(l,{color:"warning",children:n(I,{children:D(e)})})})]}),M=()=>n(s,{size:"sm",children:"Destination"}),E=t=>t.map((t=>({shares:parseFloat(t.shares)||0}))),F=({alternateTrustData:t,isContract:e})=>{if(!t.hasAlternateTrustData)return null;const r=t.alternateIsCaip?`Also has data as a contract on ${p.chainName}`:"Also has data as an EOA";return n(l,{color:"default",children:r})},R={[f.NoAtom]:t=>{const{address:e,isContract:i,alternateTrustData:o}=t,a=i?"contract":"address";return r(y,{children:[n(M,{}),n(T,{label:"Address",children:n(A,{address:e})}),n(T,{label:"Status",variant:"warning",children:n(l,{color:"warning",children:r(I,{children:["Unknown ",a]})})}),n(l,{color:"default",children:"No community data on Intuition"}),n(F,{alternateTrustData:o,isContract:i})]})},[f.AtomWithoutTrustTriple]:t=>{const{address:e,account:i,alias:o,isContract:a,alternateTrustData:s}=t;return r(y,{children:[n(M,{}),n(T,{label:"Address",children:n(A,{address:e})}),!!o&&n(T,{label:"Alias",children:n(l,{children:n(I,{children:o})})}),n(T,{label:"Status",children:n(l,{color:"default",children:"No trust rating yet"})}),n(l,{color:"default",children:"Known address, awaiting community votes"}),n(F,{alternateTrustData:s,isContract:a})]})},[f.AtomWithTrustTriple]:t=>{var e,i,o,a;const{address:s,triple:c,alias:d,isContract:u,alternateTrustData:h,trustedCircle:m}=t,{counter_term:{vaults:[_]},term:{vaults:[g]},positions:f,counter_positions:b,positions_aggregate:v,counter_positions_aggregate:S}=c,k=(null===(e=g)||void 0===e?void 0:e.market_cap)||"0",$=w(k,18),j=(null===(i=_)||void 0===i?void 0:i.market_cap)||"0",P=w(j,18),{badge:W,color:N}=((t,e)=>{const n=t+e;if(0===n)return{badge:"No Stakes",color:"muted"};const r=t/n*100;return r>=70?{badge:"Trusted",color:"success"}:r>=30?{badge:"Mixed",color:"warning"}:{badge:"Untrusted",color:"warning"}})($,P),O=(t=>{const{forDistribution:e}=t,n=["success","warning","muted","default"].includes(e.snapColor)?e.snapColor:"default";return{label:e.shortLabel,color:n}})(U($,P,E(f),E(b),null===(o=v)||void 0===o?void 0:o.aggregate,null===(a=S)||void 0===a?void 0:a.aggregate));return r(y,{children:[n(M,{}),n(T,{label:"Address",children:n(A,{address:s})}),!!d&&n(T,{label:"Alias",children:n(l,{children:n(I,{children:d})})}),n(T,{label:"Trust",children:n(l,{color:N,children:n(I,{children:W})})}),n(T,{label:"Distribution",children:n(l,{color:O.color,children:n(I,{children:O.label})})}),n(T,{label:`FOR (${f.length})`,children:n(C,{value:`${$.toFixed(2)} ${p.currencySymbol}`,extra:""})}),n(T,{label:`AGAINST (${b.length})`,children:n(C,{value:`${P.toFixed(2)} ${p.currencySymbol}`,extra:""})}),n(F,{alternateTrustData:h,isContract:u}),m?n(L,{forContacts:m.forContacts,againstContacts:m.againstContacts}):null]})}},H={1155:"https://explorer.hivemindhq.io",13579:"https://testnet.explorer.hivemindhq.io"}[p.chainId],B={name:"Hive Mind Explorer",noAtom:t=>{const{address:e,chainId:n,isContract:r}=t,i=r?v(e,n):e,o=new URL("/snap/action",H);return o.searchParams.set("intent","complete_trust_triple"),o.searchParams.set("address",i),o.searchParams.set("chain_id",n),{url:o.toString()}},atomWithoutTrustTriple:t=>{const{account:e}=t;if(!e)throw new Error("atomWithoutTrustTriple: account not found");const{term_id:n}=e,r=new URL("/snap/action",H);return r.searchParams.set("intent","create_trust_triple"),r.searchParams.set("atom_id",n),{url:r.toString()}},atomWithTrustTriple:t=>{const{triple:e}=t;if(!e)throw new Error("atomWithTrustTriple: triple not found");const{term_id:n}=e,r=new URL("/snap/action",H);return r.searchParams.set("intent","stake_trust_triple"),r.searchParams.set("triple_id",n),{url:r.toString()}},viewAtom:t=>{const{account:e}=t;if(!e)throw new Error("viewAtom: account not found");const{term_id:n}=e;return{url:new URL(`/atoms/${n}`,H).toString()}},createAlias:t=>{const{account:e}=t;if(!e)throw new Error("createAlias: account not found");const{term_id:n}=e,r=new URL("/snap/action",H);return r.searchParams.set("intent","create_alias"),r.searchParams.set("subject_id",n),{url:r.toString()}},originAtomWithoutTrustTriple:t=>{const{origin:e}=t;if(!e)throw new Error("originAtomWithoutTrustTriple: origin not found");const{term_id:n}=e,r=new URL("/snap/action",H);return r.searchParams.set("intent","create_trust_triple"),r.searchParams.set("atom_id",n),{url:r.toString()}},originAtomWithTrustTriple:t=>{const{triple:e}=t;if(!e)throw new Error("originAtomWithTrustTriple: triple not found");const{term_id:n}=e,r=new URL("/snap/action",H);return r.searchParams.set("intent","stake_trust_triple"),r.searchParams.set("triple_id",n),{url:r.toString()}},viewOriginAtom:t=>{const{origin:e}=t;if(!e)throw new Error("viewOriginAtom: origin not found");const{term_id:n}=e;return{url:new URL(`/atoms/${n}`,H).toString()}}},V=B,G=({href:t,label:e})=>n(a,{children:n(d,{href:t,children:e})}),J=t=>{if(t.accountType!==f.NoAtom)return null;const{url:e}=V.noAtom(t);return n(G,{href:e,label:"Create trust claim"})},z=t=>{if(t.accountType===f.NoAtom)return null;if(t.accountType===f.AtomWithoutTrustTriple){const{url:e}=V.atomWithoutTrustTriple(t);return n(G,{href:e,label:"Is this address trustworthy? Vote"})}if(t.accountType===f.AtomWithTrustTriple){const{triple:e,userAddress:r}=t;if(!!r&&(e.positions.some((t=>{var e;return(null===(e=t.account_id)||void 0===e?void 0:e.toLowerCase())===r.toLowerCase()}))||e.counter_positions.some((t=>{var e;return(null===(e=t.account_id)||void 0===e?void 0:e.toLowerCase())===r.toLowerCase()}))))return null;const{url:i}=V.atomWithTrustTriple(t);return n(G,{href:i,label:"Is this address trustworthy? Vote"})}return null},K=t=>{if(t.accountType===f.NoAtom)return null;if(t.alias)return null;const{url:e}=V.createAlias(t);return n(G,{href:e,label:"Add alias"})},Q=t=>{if(t.accountType===f.NoAtom)return null;const{url:e}=V.viewAtom(t);return n(G,{href:e,label:"View more about this address"})},X=()=>n(s,{size:"sm",children:"dApp Origin"}),Y=t=>t.map((t=>({shares:parseFloat(t.shares)||0}))),Z={[b.NoOrigin]:t=>null,[b.NoAtom]:t=>{const{hostname:e}=t;return r(y,{children:[n(X,{}),n(T,{label:"From",children:n(l,{children:n(I,{children:e||"Unknown"})})}),n(T,{label:"Status",variant:"warning",children:n(l,{color:"warning",children:n(I,{children:"Unknown dApp"})})}),n(l,{color:"default",children:"No community data. Proceed with caution."})]})},[b.AtomWithoutTrustTriple]:t=>{var e;const{hostname:i,origin:o}=t;return r(y,{children:[n(X,{}),n(T,{label:"From",children:n(l,{children:n(I,{children:i||(null===(e=o)||void 0===e?void 0:e.label)||"Unknown"})})}),n(T,{label:"Status",children:n(l,{color:"default",children:"No trust rating yet"})}),n(l,{color:"default",children:"Known dApp, awaiting community votes"})]})},[b.AtomWithTrustTriple]:t=>{var e,i,o,a,s,c,d,u,h;const{hostname:m,origin:_,triple:g,trustedCircle:f}=t,b=null===(i=g.term)||void 0===i||null===(e=i.vaults)||void 0===e?void 0:e[0],v=null===(a=g.counter_term)||void 0===a||null===(o=a.vaults)||void 0===o?void 0:o[0],A=(null===(s=b)||void 0===s?void 0:s.market_cap)||"0",S=w(A,18),k=(null===(c=v)||void 0===c?void 0:c.market_cap)||"0",$=w(k,18),j=(null===(d=g.positions)||void 0===d?void 0:d.length)||0,P=(null===(u=g.counter_positions)||void 0===u?void 0:u.length)||0,{badge:W,color:N}=((t,e)=>{const n=t+e;if(0===n)return{badge:"No Stakes",color:"muted"};const r=t/n*100;return r>=70?{badge:"Trusted",color:"success"}:r>=30?{badge:"Mixed",color:"warning"}:{badge:"Untrusted",color:"warning"}})(S,$),O=(t=>{const{forDistribution:e}=t,n=["success","warning","muted","default"].includes(e.snapColor)?e.snapColor:"default";return{label:e.shortLabel,color:n}})(U(S,$,Y(g.positions||[]),Y(g.counter_positions||[])));return r(y,{children:[n(X,{}),n(T,{label:"From",children:n(l,{children:n(I,{children:m||(null===(h=_)||void 0===h?void 0:h.label)||"Unknown"})})}),n(T,{label:"Trust",children:n(l,{color:N,children:n(I,{children:W})})}),n(T,{label:"Distribution",children:n(l,{color:O.color,children:n(I,{children:O.label})})}),n(T,{label:`FOR (${j})`,children:n(C,{value:`${S.toFixed(2)} ${p.currencySymbol}`,extra:""})}),n(T,{label:`AGAINST (${P})`,children:n(C,{value:`${$.toFixed(2)} ${p.currencySymbol}`,extra:""})}),f?n(L,{forContacts:f.forContacts,againstContacts:f.againstContacts}):null]})}},tt=t=>{if(t.originType===b.NoOrigin||t.originType===b.NoAtom)return null;if(t.originType===b.AtomWithoutTrustTriple){const{url:e}=V.originAtomWithoutTrustTriple(t);return n(G,{href:e,label:"Is this dApp trustworthy? Vote"})}if(t.originType===b.AtomWithTrustTriple){const{url:e}=V.originAtomWithTrustTriple(t);return n(G,{href:e,label:"Is this dApp trustworthy? Vote"})}return null},et=t=>{if(t.originType===b.NoOrigin||t.originType===b.NoAtom)return null;const{url:e}=V.viewOriginAtom(t);return n(G,{href:e,label:"View more about this dApp"})},nt=({accountProps:t,originProps:e})=>{const i=e.originType===b.AtomWithoutTrustTriple||e.originType===b.AtomWithTrustTriple;return r(a,{children:[n(c,{}),r(a,{children:[n(J,{...t}),n(z,{...t}),n(K,{...t}),n(Q,{...t}),i&&n(tt,{...e}),i&&n(et,{...e})]})]})},rt=t=>{var e,n,r,i,o,a;if(!t)return 0n;return BigInt((null===(r=t.term)||void 0===r||null===(n=r.vaults)||void 0===n||null===(e=n[0])||void 0===e?void 0:e.market_cap)??"0")+BigInt((null===(a=t.counter_term)||void 0===a||null===(o=a.vaults)||void 0===o||null===(i=o[0])||void 0===i?void 0:i.market_cap)??"0")},it=async(t,e)=>{const{to:n,data:r}=t,i=v(n,e),o=await(async(t,e)=>{if("0x"!==e)return{type:"contract",certainty:"definite"};try{const e=await fetch(p.rpcUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",method:"eth_getCode",params:[t,"latest"],id:1})});if(!e.ok)return{type:"unknown",certainty:"uncertain",reason:"eth_getCode_failed"};const n=(await e.json()).result;return"0x"===n||null===n?{type:"eoa",certainty:"definite"}:{type:"contract",certainty:"definite"}}catch(t){return{type:"unknown",certainty:"uncertain",reason:"eth_getCode_failed"}}})(n,r),a="contract"===o.type||"uncertain"===o.certainty;try{var s,l,c;const[t]=await Promise.all([h("\nquery AddressAtoms($plainAddress: String!, $caipAddress: String!) {\n # Atoms matching plain address format (for EOAs)\n plainAtoms: atoms(\n where: {\n _or: [\n { label: { _ilike: $plainAddress } },\n { data: { _ilike: $plainAddress } }\n ]\n },\n order_by: { term: { total_market_cap: desc_nulls_last } },\n limit: 1\n ) {\n term_id\n type\n label\n image\n data\n emoji\n creator_id\n }\n\n # Atoms matching CAIP format (for smart contracts)\n caipAtoms: atoms(\n where: {\n _or: [\n { label: { _ilike: $caipAddress } },\n { data: { _ilike: $caipAddress } }\n ]\n },\n order_by: { term: { total_market_cap: desc_nulls_last } },\n limit: 1\n ) {\n term_id\n type\n label\n image\n data\n emoji\n creator_id\n }\n}\n",{plainAddress:n,caipAddress:i})]),{plainAtoms:e,caipAtoms:r}=t.data,_=null===(s=e)||void 0===s?void 0:s[0],g=null===(l=r)||void 0===l?void 0:l[0];if(!_&&!g)return{account:null,triple:null,isContract:a,alias:null,classification:o,alternateTrustData:{hasAlternateTrustData:!1}};const{hasTagAtomId:f,trustworthyAtomId:b,hasAliasAtomId:v}=p,w=[],y=[];_&&(w.push(h(m,{subjectId:_.term_id,predicateId:f,objectId:b})),y.push("plain")),g&&(w.push(h(m,{subjectId:g.term_id,predicateId:f,objectId:b})),y.push("caip"));const T=await Promise.all(w),A={};y.forEach(((t,e)=>{A[t]=T[e].data.triples[0]||null}));const I=((t,e,n,r,i)=>n||e?n?e?"definite"===t.certainty?"contract"===t.type?{primary:n,primaryTriple:i,alternate:e,alternateTriple:r,usedCaip:!0}:{primary:e,primaryTriple:r,alternate:n,alternateTriple:i,usedCaip:!1}:rt(i)>=rt(r)?{primary:n,primaryTriple:i,alternate:e,alternateTriple:r,usedCaip:!0}:{primary:e,primaryTriple:r,alternate:n,alternateTriple:i,usedCaip:!1}:{primary:n,primaryTriple:i,alternate:null,alternateTriple:null,usedCaip:!0}:{primary:e,primaryTriple:r,alternate:null,alternateTriple:null,usedCaip:!1}:{primary:null,primaryTriple:null,alternate:null,alternateTriple:null,usedCaip:!1})(o,_||null,g||null,A.plain||null,A.caip||null),C=rt(I.alternateTriple),S={hasAlternateTrustData:C>0n,alternateAtomId:null===(c=I.alternate)||void 0===c?void 0:c.term_id,alternateMarketCap:C.toString(),alternateIsCaip:!I.usedCaip};let k=null;if(I.primary){var d,u;const t=await h('\n query GetTriplesWithHighestStake($subjectId: String!, $predicateId: String!) {\n triples(\n where: {\n subject_id: { _eq: $subjectId },\n predicate_id: { _eq: $predicateId }\n },\n order_by: { triple_term: { total_market_cap: desc } }\n ) {\n term_id\n subject_id\n predicate_id\n object_id\n creator_id\n counter_term_id\n\n # Triple-specific aggregated market data (stake information)\n triple_term {\n term_id\n counter_term_id\n total_market_cap\n total_position_count\n }\n\n # Individual vault data\n term {\n vaults(where: { curve_id: { _eq: "1" } }) {\n term_id\n market_cap\n position_count\n curve_id\n }\n }\n\n counter_term {\n vaults(where: { curve_id: { _eq: "1" } }) {\n term_id\n market_cap\n position_count\n curve_id\n }\n }\n\n # Object information for context\n object {\n label\n image\n data\n }\n }\n\n chainlink_prices(limit: 1, order_by: { id: desc }) {\n usd\n }\n }\n',{subjectId:I.primary.term_id,predicateId:v});k=(null===(u=t.data.triples[0])||void 0===u||null===(d=u.object)||void 0===d?void 0:d.label)||null}return{account:I.primary,triple:I.primaryTriple,isContract:a,alias:k,classification:o,alternateTrustData:S}}catch(t){throw t}},ot=async t=>{const e=(t=>{if(t)try{return new URL(t).hostname}catch{var e;return null===(e=t.match(/^(?:https?:\/\/)?([^\/]+)/))||void 0===e?void 0:e[1]}})(t);if(!t||!e)return{origin:null,triple:null,hostname:void 0};try{var n;const i=null===(n=(await h(_,{originUrl:t})).data.atoms)||void 0===n?void 0:n[0];if(!i){var r;const t=null===(r=(await h(_,{originUrl:e})).data.atoms)||void 0===r?void 0:r[0];return t?await at(t,e):{origin:null,triple:null,hostname:e}}return await at(i,e)}catch{return{origin:null,triple:null,hostname:e}}},at=async(t,e)=>{const{hasTagAtomId:n,trustworthyAtomId:r}=p;try{var i;const o=await h('\nquery OriginTrustTriple($subjectId: String!, $predicateId: String!, $objectId: String!) {\n triples(where: {\n subject_id: { _eq: $subjectId },\n predicate_id: { _eq: $predicateId },\n object_id: { _eq: $objectId }\n }) {\n term_id\n\n term {\n vaults(where: { curve_id: { _eq: "1" } }) {\n term_id\n market_cap\n position_count\n }\n }\n\n counter_term {\n vaults(where: { curve_id: { _eq: "1" } }) {\n term_id\n market_cap\n position_count\n }\n }\n\n positions(order_by: { shares: desc }, limit: 30) {\n id\n shares\n account_id\n }\n\n counter_positions(order_by: { shares: desc }, limit: 30) {\n id\n shares\n account_id\n }\n }\n}\n',{subjectId:t.term_id,predicateId:n,objectId:r});return{origin:t,triple:(null===(i=o.data.triples)||void 0===i?void 0:i[0])||null,hostname:e}}catch{return{origin:t,triple:null,hostname:e}}},st=36e5;async function lt(t){try{const n=await snap.request({method:"snap_manageState",params:{operation:"get"}});if(!n)return null;const r=n[t.toLowerCase()];return r?(e=r.timestamp,Date.now()-e<st?r.contacts:null):null}catch{return null}var e}async function ct(t){const e=await lt(t);if(null!==e)return e;const n=await async function(t){var e,n;const{hasTagAtomId:r,trustworthyAtomId:i}=p,o=(null===(n=await h(g,{userAddress:t,predicateId:r,objectId:i}))||void 0===n||null===(e=n.data)||void 0===e?void 0:e.positions)||[],a=new Map;for(const t of o){const{subject_id:e,subject:n}=t.triple;var s;a.has(e)||a.set(e,{accountId:e,label:(null===(s=n)||void 0===s?void 0:s.label)||e})}return Array.from(a.values())}(t);return await async function(t,e){try{const n=await snap.request({method:"snap_manageState",params:{operation:"get"}}),r=t.toLowerCase(),i={contacts:e,timestamp:Date.now()},o={...n||{},[r]:i};await snap.request({method:"snap_manageState",params:{operation:"update",newState:o}})}catch{}}(t,n),n}function dt(t,e,n){const r=new Set(t.map((t=>t.accountId.toLowerCase()))),i=new Map(t.map((t=>[t.accountId.toLowerCase(),t.label]))),o=[];for(const t of e){var a;const e=null===(a=t.account_id)||void 0===a?void 0:a.toLowerCase();var s;if(e&&r.has(e))o.push({accountId:t.account_id,label:i.get(e)||(null===(s=t.account)||void 0===s?void 0:s.label)||ut(t.account_id)})}const l=[];for(const t of n){var c;const e=null===(c=t.account_id)||void 0===c?void 0:c.toLowerCase();var d;if(e&&r.has(e))l.push({accountId:t.account_id,label:i.get(e)||(null===(d=t.account)||void 0===d?void 0:d.label)||ut(t.account_id)})}return{forContacts:o,againstContacts:l}}function ut(t){return!t||t.length<12?t||"Unknown":`${t.slice(0,6)}...${t.slice(-4)}`}const pt=async({transaction:t,chainId:e,transactionOrigin:i})=>{let o;try{var s;o=null===(s=await ethereum.request({method:"eth_accounts"}))||void 0===s?void 0:s[0]}catch(t){}const[l,c,d]=await Promise.all([it(t,e),ot(i),o?ct(o):Promise.resolve([])]),u=(t=>{const{account:e,triple:n}=t;return e?null===n?f.AtomWithoutTrustTriple:f.AtomWithTrustTriple:f.NoAtom})(l),p=((t,e)=>{if(!e)return b.NoOrigin;const{origin:n,triple:r}=t;return n?r?b.AtomWithTrustTriple:b.AtomWithoutTrustTriple:b.NoAtom})(c,i);let h,m;if(d.length>0&&l.triple){h=dt(d,l.triple.positions||[],l.triple.counter_positions||[]),0===h.forContacts.length&&0===h.againstContacts.length&&(h=void 0)}if(d.length>0&&c.triple){m=dt(d,c.triple.positions||[],c.triple.counter_positions||[]),0===m.forContacts.length&&0===m.againstContacts.length&&(m=void 0)}const _={...l,accountType:u,address:t.to,userAddress:o,chainId:e,transactionOrigin:i,trustedCircle:h},g={...c,originType:p,originUrl:i,trustedCircle:m},v=(t=>{const{accountType:e}=t;return R[e](t)})(_),w=(t=>{const{originType:e}=t;return Z[e](t)})(g),y=n(nt,{accountProps:_,originProps:g}),T=r(a,{children:[v,w,y]}),A=(t=>JSON.parse(JSON.stringify(t)))({account:_,origin:g});return{id:await snap.request({method:"snap_createInterface",params:{ui:T,context:A}})}},ht=async t=>{},mt=async()=>({content:r(a,{children:[n(s,{children:"Welcome to Hive Mind, powered by Intuition"}),n(l,{children:"Real-time trust and sentiment insights for every transaction."}),n(c,{}),n(l,{children:"Hive Mind shows you community trust data from the Intuition knowledge graph during transactions."}),r(a,{children:[n(d,{href:"https://hivemindhq.io",children:"Check out Hive Mind's product suite"}),n(d,{href:"https://intuition.systems",children:"Learn about Intuition"})]})]})});var _t=exports;for(var gt in e)_t[gt]=e[gt];e.__esModule&&Object.defineProperty(_t,"__esModule",{value:!0})})();
|
|
1
|
+
(()=>{"use strict";var t={d:(e,n)=>{for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};function n(t,e,n){if("string"==typeof t)throw new Error(`An HTML element ("${String(t)}") was used in a Snap component, which is not supported by Snaps UI. Please use one of the supported Snap components.`);if(!t)throw new Error("A JSX fragment was used in a Snap component, which is not supported by Snaps UI. Please use one of the supported Snap components.");return t({...e,key:n})}function r(t,e,r){return n(t,e,r)}function i(t){return Object.fromEntries(Object.entries(t).filter((([,t])=>void 0!==t)))}function a(t){return e=>{const{key:n=null,...r}=e;return{type:t,props:i(r),key:n}}}t.r(e),t.d(e,{onHomePage:()=>mt,onTransaction:()=>pt,onUserInput:()=>ht});const o=a("Box"),s=a("Heading"),l=a("Text"),c=a("Divider"),d=a("Link"),u={backendUrl:"https://mainnet.intuition.sh/v1/graphql",rpcUrl:"https://rpc.intuition.systems",chainId:1155,chainIdHex:"0x483",chainName:"Intuition Mainnet",chainKey:"intuition-mainnet",currencySymbol:"TRUST",decimalPrecision:18,hasTagAtomId:"0x6de69cc0ae3efe4000279b1bf365065096c8715d8180bc2a98046ee07d3356fd",trustworthyAtomId:"0xe9c0e287737685382bd34d51090148935bdb671c98d20180b2fec15bd263f73a",hasAliasAtomId:"0xf8cfb4e3f1db08f72f255cf7afaceb4b32684a64dac0f423cdca04dd15cf4fd6"},p=u,h=async(t,e)=>{const n=await fetch(p.backendUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:t,variables:e})});if(!n.ok)throw new Error(`GraphQL request failed: ${n.status} ${n.statusText}`);const r=await n.json();if(r.errors&&r.errors.length>0)throw new Error(`GraphQL error: ${r.errors[0].message}`);return r},m='\nquery TripleWithPositionAggregates($subjectId: String!, $predicateId: String!, $objectId: String!) {\n triples(where: {\n subject_id: { _eq: $subjectId },\n predicate_id: { _eq: $predicateId },\n object_id: { _eq: $objectId }\n }) {\n term_id\n subject_id\n predicate_id\n object_id\n creator_id\n counter_term_id\n\n # Main vault (support) market data\n term {\n vaults(where: { curve_id: { _eq: "1" } }) {\n term_id\n market_cap\n position_count\n curve_id\n }\n }\n\n # Counter vault (oppose) market data\n counter_term {\n vaults(where: { curve_id: { _eq: "1" } }) {\n term_id\n market_cap\n position_count\n curve_id\n }\n }\n\n # Triple-specific aggregated market data\n triple_term {\n term_id\n counter_term_id\n total_market_cap\n total_position_count\n }\n\n # Detailed triple vault data per curve\n triple_vault {\n term_id\n counter_term_id\n curve_id\n position_count\n market_cap\n }\n\n positions_aggregate {\n aggregate {\n count\n sum {\n shares\n }\n avg {\n shares\n }\n }\n }\n\n counter_positions_aggregate {\n aggregate {\n count\n sum {\n shares\n }\n avg {\n shares\n }\n }\n }\n\n positions(\n order_by: { shares: desc }\n limit: 30\n ) {\n id\n account_id\n term_id\n curve_id\n shares\n account {\n id\n label\n }\n }\n\n counter_positions(\n order_by: { shares: desc }\n limit: 30\n ) {\n id\n account_id\n term_id\n curve_id\n shares\n account {\n id\n label\n }\n }\n }\n chainlink_prices(limit: 1, order_by: { id: desc }) {\n usd\n }\n backup_chainlink_prices: chainlink_prices(\n limit: 1,\n order_by: { id: desc },\n where: { usd: { _is_null: false } }\n ) {\n usd\n }\n}\n',_="\nquery OriginAtom($originUrl: String!) {\n atoms(\n where: {\n _or: [\n { label: { _ilike: $originUrl } },\n { data: { _ilike: $originUrl } }\n ]\n },\n order_by: { term: { total_market_cap: desc_nulls_last } },\n limit: 1\n ) {\n term_id\n type\n label\n image\n data\n emoji\n creator_id\n }\n}\n",g="\nquery UserTrustedCircle($userAddress: String!, $predicateId: String!, $objectId: String!) {\n positions(\n where: {\n account_id: { _ilike: $userAddress },\n triple: {\n predicate_id: { _eq: $predicateId },\n object_id: { _eq: $objectId }\n }\n },\n order_by: { shares: desc },\n limit: 200\n ) {\n triple {\n subject_id\n subject {\n label\n }\n }\n }\n}\n";var f,b;!function(t){t.NoAtom="NoAtom",t.AtomWithoutTrustTriple="AtomWithoutTrustTriple",t.AtomWithTrustTriple="AtomWithTrustTriple"}(f||(f={})),function(t){t.NoOrigin="NoOrigin",t.NoAtom="OriginNoAtom",t.AtomWithoutTrustTriple="OriginAtomWithoutTrustTriple",t.AtomWithTrustTriple="OriginAtomWithTrustTriple"}(b||(b={}));const v=(t,e)=>`caip10:${e}:${t}`,w=(t,e)=>{const n=BigInt(t),r=BigInt(10**e),i=n/r,a=(n%r).toString().padStart(e,"0").slice(0,6);return Number(`${i}.${a}`)},y=a("Section"),T=a("Row"),A=a("Address"),I=a("Bold"),C=a("Value"),S={"well-distributed":"success",moderate:"warning",concentrated:"warning","whale-dominated":"warning"},k={"well-distributed":"#22c55e",moderate:"#eab308",concentrated:"#f97316","whale-dominated":"#ef4444"},$={"well-distributed":"Well Distributed",moderate:"Moderate",concentrated:"Concentrated","whale-dominated":"Whale Dominated"},j={"well-distributed":"🟢 Distributed",moderate:"🟡 Moderate",concentrated:"⚠️ Concentrated","whale-dominated":"⛔️ Whale"};function P(t,e){const n=t.filter((t=>t>0));if(0===n.length)return 0;const r=n.reduce(((t,e)=>t+e),0);if(0===r)return 0;return[...n].sort(((t,e)=>e-t)).slice(0,e).reduce(((t,e)=>t+e),0)/r*100}const W={gini:{wellDistributed:.35,moderate:.55,concentrated:.75},top1:{wellDistributed:30,moderate:50,concentrated:80},minStakersForAnalysis:3};function N(t,e,n){const{gini:r,top1:i,minStakersForAnalysis:a}=W;return e>=i.concentrated?"whale-dominated":n<a?e>=i.moderate?"concentrated":0===n?"well-distributed":"moderate":t<=r.wellDistributed?"well-distributed":t<=r.moderate?"moderate":t<=r.concentrated?"concentrated":"whale-dominated"}function O(t){const e=t.filter((t=>t>0)),n=e.length,r=e.reduce(((t,e)=>t+e),0);if(0===n){const t="well-distributed";return{gini:0,nakamoto:0,top1Percent:0,top3Percent:0,stakerCount:0,totalShares:0,status:t,snapColor:S[t],hexColor:k[t],label:"No Stakes",shortLabel:"None"}}const i=function(t){const e=t.filter((t=>t>0)),n=e.length;if(0===n)return 0;if(1===n)return 0;const r=e.reduce(((t,e)=>t+e),0)/n;if(0===r)return 0;let i=0;for(let t=0;t<n;t++)for(let r=0;r<n;r++){const n=e[t],a=e[r];void 0!==n&&void 0!==a&&(i+=Math.abs(n-a))}const a=i/(2*n*n*r);return Math.max(0,Math.min(1,a))}(e),a=function(t){const e=t.filter((t=>t>0));if(0===e.length)return 0;const n=.51*e.reduce(((t,e)=>t+e),0),r=[...e].sort(((t,e)=>e-t));let i=0;for(let t=0;t<r.length;t++){const e=r[t];if(void 0!==e&&(i+=e,i>=n))return t+1}return r.length}(e),o=P(e,1),s=P(e,3),l=N(i,o,n);return{gini:i,nakamoto:a,top1Percent:o,top3Percent:s,stakerCount:n,totalShares:r,status:l,snapColor:S[l],hexColor:k[l],label:$[l],shortLabel:j[l]}}function x(t){return O(t.map((t=>t.shares)).filter((t=>!isNaN(t)&&t>0)))}function q(t){var e,n;if(!t||0===t.count)return O([]);const{count:r,sum:i,avg:a}=t,o=(null===(e=i)||void 0===e?void 0:e.shares)||0;null===(n=a)||void 0===n||n.shares;if(0===r||0===o)return O([]);let s,l;s=1===r?100:2===r?70:r<=5?100/Math.sqrt(r):Math.max(20,100/Math.pow(r,.7)),l=1===r?0:2===r?.5:r<=5?.6:r<=10?.5:.4;const c=N(l,s,r);return{gini:l,nakamoto:1===r?1:Math.ceil(.3*r),top1Percent:s,top3Percent:Math.min(100,1.3*s),stakerCount:r,totalShares:o,status:c,snapColor:S[c],hexColor:k[c],label:$[c],shortLabel:j[c]}}function U(t,e,n,r,i,a){const{level:o,ratio:s}=function(t,e){const n=t+e;if(0===n)return{level:"no-stakes",ratio:50};const r=t/n*100;return r>=70?{level:"trusted",ratio:r}:r>=30?{level:"mixed",ratio:r}:{level:"untrusted",ratio:r}}(t,e),l=n&&n.length>0?x(n):q(i),c=r&&r.length>0?x(r):q(a),d=function(t,e){const n=["well-distributed","moderate","concentrated","whale-dominated"];return n.indexOf(t)>=n.indexOf(e)?t:e}(l.status,c.status);return{trustLevel:o,trustRatio:s,forDistribution:l,againstDistribution:c,overallDistribution:d,overallSnapColor:S[d]}}function D(t){if(0===t.length)return"";const e=t.slice(0,3).map((t=>function(t){if(/^0x[a-fA-F0-9]{40}$/u.test(t))return`${t.slice(0,6)}...${t.slice(-4)}`;if(t.startsWith("caip10:")){const e=t.split(":"),n=e[e.length-1];if(n&&/^0x[a-fA-F0-9]{40}$/u.test(n))return`${n.slice(0,6)}...${n.slice(-4)}`}return t}(t.label)));if(t.length>3){const n=t.length-3;return`${e.join(", ")} +${n} more`}return e.join(", ")}const L=({forContacts:t,againstContacts:e})=>0===t.length&&0===e.length?null:r(y,{children:[n(s,{size:"sm",children:"Your Trusted Contacts"}),t.length>0&&n(T,{label:"FOR",children:n(l,{color:"success",children:n(I,{children:D(t)})})}),e.length>0&&n(T,{label:"AGAINST",children:n(l,{color:"warning",children:n(I,{children:D(e)})})})]}),M=()=>n(s,{size:"sm",children:"Destination"}),E=t=>t.map((t=>({shares:parseFloat(t.shares)||0}))),F=({alternateTrustData:t,isContract:e})=>{if(!t.hasAlternateTrustData)return null;const r=t.alternateIsCaip?`Also has data as a contract on ${p.chainName}`:"Also has data as an EOA";return n(l,{color:"default",children:r})},R={[f.NoAtom]:t=>{const{address:e,isContract:i,alternateTrustData:a}=t,o=i?"contract":"address";return r(y,{children:[n(M,{}),n(T,{label:"Address",children:n(A,{address:e})}),n(T,{label:"Status",variant:"warning",children:n(l,{color:"warning",children:r(I,{children:["Unknown ",o]})})}),n(l,{color:"default",children:"No community data on Intuition"}),n(F,{alternateTrustData:a,isContract:i})]})},[f.AtomWithoutTrustTriple]:t=>{const{address:e,account:i,alias:a,isContract:o,alternateTrustData:s}=t;return r(y,{children:[n(M,{}),n(T,{label:"Address",children:n(A,{address:e})}),!!a&&n(T,{label:"Alias",children:n(l,{children:n(I,{children:a})})}),n(T,{label:"Status",children:n(l,{color:"default",children:"No trust rating yet"})}),n(l,{color:"default",children:"Known address, awaiting community votes"}),n(F,{alternateTrustData:s,isContract:o})]})},[f.AtomWithTrustTriple]:t=>{var e,i,a,o;const{address:s,triple:c,alias:d,isContract:u,alternateTrustData:h,trustedCircle:m}=t,{counter_term:{vaults:[_]},term:{vaults:[g]},positions:f,counter_positions:b,positions_aggregate:v,counter_positions_aggregate:S}=c,k=(null===(e=g)||void 0===e?void 0:e.market_cap)||"0",$=w(k,18),j=(null===(i=_)||void 0===i?void 0:i.market_cap)||"0",P=w(j,18),{badge:W,color:N}=((t,e)=>{const n=t+e;if(0===n)return{badge:"No Stakes",color:"muted"};const r=t/n*100;return r>=70?{badge:"Trusted",color:"success"}:r>=30?{badge:"Mixed",color:"warning"}:{badge:"Untrusted",color:"warning"}})($,P),O=(t=>{const{forDistribution:e}=t,n=["success","warning","muted","default"].includes(e.snapColor)?e.snapColor:"default";return{label:e.shortLabel,color:n}})(U($,P,E(f),E(b),null===(a=v)||void 0===a?void 0:a.aggregate,null===(o=S)||void 0===o?void 0:o.aggregate));return r(y,{children:[n(M,{}),n(T,{label:"Address",children:n(A,{address:s})}),!!d&&n(T,{label:"Alias",children:n(l,{children:n(I,{children:d})})}),n(T,{label:"Trust",children:n(l,{color:N,children:n(I,{children:W})})}),n(T,{label:"Distribution",children:n(l,{color:O.color,children:n(I,{children:O.label})})}),n(T,{label:`FOR (${f.length})`,children:n(C,{value:`${$.toFixed(2)} ${p.currencySymbol}`,extra:""})}),n(T,{label:`AGAINST (${b.length})`,children:n(C,{value:`${P.toFixed(2)} ${p.currencySymbol}`,extra:""})}),n(F,{alternateTrustData:h,isContract:u}),m?n(L,{forContacts:m.forContacts,againstContacts:m.againstContacts}):null]})}},H={1155:"https://explorer.hivemindhq.io",13579:"https://testnet.explorer.hivemindhq.io"}[p.chainId],V={name:"Hive Mind Explorer",noAtom:t=>{const{address:e,chainId:n,isContract:r}=t,i=r?v(e,n):e,a=new URL("/snap/action",H);return a.searchParams.set("intent","complete_trust_triple"),a.searchParams.set("address",i),a.searchParams.set("chain_id",n),{url:a.toString()}},atomWithoutTrustTriple:t=>{const{account:e}=t;if(!e)throw new Error("atomWithoutTrustTriple: account not found");const{term_id:n}=e,r=new URL("/snap/action",H);return r.searchParams.set("intent","create_trust_triple"),r.searchParams.set("atom_id",n),{url:r.toString()}},atomWithTrustTriple:t=>{const{triple:e}=t;if(!e)throw new Error("atomWithTrustTriple: triple not found");const{term_id:n}=e,r=new URL("/snap/action",H);return r.searchParams.set("intent","stake_trust_triple"),r.searchParams.set("triple_id",n),{url:r.toString()}},viewAtom:t=>{const{account:e}=t;if(!e)throw new Error("viewAtom: account not found");const{term_id:n}=e;return{url:new URL(`/atoms/${n}`,H).toString()}},createAlias:t=>{const{account:e}=t;if(!e)throw new Error("createAlias: account not found");const{term_id:n}=e,r=new URL("/snap/action",H);return r.searchParams.set("intent","create_alias"),r.searchParams.set("subject_id",n),{url:r.toString()}},originAtomWithoutTrustTriple:t=>{const{origin:e}=t;if(!e)throw new Error("originAtomWithoutTrustTriple: origin not found");const{term_id:n}=e,r=new URL("/snap/action",H);return r.searchParams.set("intent","create_trust_triple"),r.searchParams.set("atom_id",n),{url:r.toString()}},originAtomWithTrustTriple:t=>{const{triple:e}=t;if(!e)throw new Error("originAtomWithTrustTriple: triple not found");const{term_id:n}=e,r=new URL("/snap/action",H);return r.searchParams.set("intent","stake_trust_triple"),r.searchParams.set("triple_id",n),{url:r.toString()}},viewOriginAtom:t=>{const{origin:e}=t;if(!e)throw new Error("viewOriginAtom: origin not found");const{term_id:n}=e;return{url:new URL(`/atoms/${n}`,H).toString()}}},B=V,G=({href:t,label:e})=>n(o,{children:n(d,{href:t,children:e})}),J=t=>{if(t.accountType!==f.NoAtom)return null;const{url:e}=B.noAtom(t);return n(G,{href:e,label:"Create trust claim"})},z=t=>{if(t.accountType===f.NoAtom)return null;if(t.accountType===f.AtomWithoutTrustTriple){const{url:e}=B.atomWithoutTrustTriple(t);return n(G,{href:e,label:"Is this address trustworthy? Vote"})}if(t.accountType===f.AtomWithTrustTriple){const{triple:e,userAddress:r}=t;if(!!r&&(e.positions.some((t=>{var e;return(null===(e=t.account_id)||void 0===e?void 0:e.toLowerCase())===r.toLowerCase()}))||e.counter_positions.some((t=>{var e;return(null===(e=t.account_id)||void 0===e?void 0:e.toLowerCase())===r.toLowerCase()}))))return null;const{url:i}=B.atomWithTrustTriple(t);return n(G,{href:i,label:"Is this address trustworthy? Vote"})}return null},K=t=>{if(t.accountType===f.NoAtom)return null;if(t.alias)return null;const{url:e}=B.createAlias(t);return n(G,{href:e,label:"Add alias"})},Q=t=>{if(t.accountType===f.NoAtom)return null;const{url:e}=B.viewAtom(t);return n(G,{href:e,label:"View more about this address"})},X=()=>n(s,{size:"sm",children:"dApp Origin"}),Y=t=>t.map((t=>({shares:parseFloat(t.shares)||0}))),Z={[b.NoOrigin]:t=>null,[b.NoAtom]:t=>{const{hostname:e}=t;return r(y,{children:[n(X,{}),n(T,{label:"From",children:n(l,{children:n(I,{children:e||"Unknown"})})}),n(T,{label:"Status",variant:"warning",children:n(l,{color:"warning",children:n(I,{children:"Unknown dApp"})})}),n(l,{color:"default",children:"No community data. Proceed with caution."})]})},[b.AtomWithoutTrustTriple]:t=>{var e;const{hostname:i,origin:a}=t;return r(y,{children:[n(X,{}),n(T,{label:"From",children:n(l,{children:n(I,{children:i||(null===(e=a)||void 0===e?void 0:e.label)||"Unknown"})})}),n(T,{label:"Status",children:n(l,{color:"default",children:"No trust rating yet"})}),n(l,{color:"default",children:"Known dApp, awaiting community votes"})]})},[b.AtomWithTrustTriple]:t=>{var e,i,a,o,s,c,d,u,h;const{hostname:m,origin:_,triple:g,trustedCircle:f}=t,b=null===(i=g.term)||void 0===i||null===(e=i.vaults)||void 0===e?void 0:e[0],v=null===(o=g.counter_term)||void 0===o||null===(a=o.vaults)||void 0===a?void 0:a[0],A=(null===(s=b)||void 0===s?void 0:s.market_cap)||"0",S=w(A,18),k=(null===(c=v)||void 0===c?void 0:c.market_cap)||"0",$=w(k,18),j=(null===(d=g.positions)||void 0===d?void 0:d.length)||0,P=(null===(u=g.counter_positions)||void 0===u?void 0:u.length)||0,{badge:W,color:N}=((t,e)=>{const n=t+e;if(0===n)return{badge:"No Stakes",color:"muted"};const r=t/n*100;return r>=70?{badge:"Trusted",color:"success"}:r>=30?{badge:"Mixed",color:"warning"}:{badge:"Untrusted",color:"warning"}})(S,$),O=(t=>{const{forDistribution:e}=t,n=["success","warning","muted","default"].includes(e.snapColor)?e.snapColor:"default";return{label:e.shortLabel,color:n}})(U(S,$,Y(g.positions||[]),Y(g.counter_positions||[])));return r(y,{children:[n(X,{}),n(T,{label:"From",children:n(l,{children:n(I,{children:m||(null===(h=_)||void 0===h?void 0:h.label)||"Unknown"})})}),n(T,{label:"Trust",children:n(l,{color:N,children:n(I,{children:W})})}),n(T,{label:"Distribution",children:n(l,{color:O.color,children:n(I,{children:O.label})})}),n(T,{label:`FOR (${j})`,children:n(C,{value:`${S.toFixed(2)} ${p.currencySymbol}`,extra:""})}),n(T,{label:`AGAINST (${P})`,children:n(C,{value:`${$.toFixed(2)} ${p.currencySymbol}`,extra:""})}),f?n(L,{forContacts:f.forContacts,againstContacts:f.againstContacts}):null]})}},tt=t=>{if(t.originType===b.NoOrigin||t.originType===b.NoAtom)return null;if(t.originType===b.AtomWithoutTrustTriple){const{url:e}=B.originAtomWithoutTrustTriple(t);return n(G,{href:e,label:"Is this dApp trustworthy? Vote"})}if(t.originType===b.AtomWithTrustTriple){const{url:e}=B.originAtomWithTrustTriple(t);return n(G,{href:e,label:"Is this dApp trustworthy? Vote"})}return null},et=t=>{if(t.originType===b.NoOrigin||t.originType===b.NoAtom)return null;const{url:e}=B.viewOriginAtom(t);return n(G,{href:e,label:"View more about this dApp"})},nt=({accountProps:t,originProps:e})=>{const i=e.originType===b.AtomWithoutTrustTriple||e.originType===b.AtomWithTrustTriple;return r(o,{children:[n(c,{}),r(o,{children:[n(J,{...t}),n(z,{...t}),n(K,{...t}),n(Q,{...t}),i&&n(tt,{...e}),i&&n(et,{...e})]})]})},rt=t=>{var e,n,r,i,a,o;if(!t)return 0n;return BigInt((null===(r=t.term)||void 0===r||null===(n=r.vaults)||void 0===n||null===(e=n[0])||void 0===e?void 0:e.market_cap)??"0")+BigInt((null===(o=t.counter_term)||void 0===o||null===(a=o.vaults)||void 0===a||null===(i=a[0])||void 0===i?void 0:i.market_cap)??"0")},it=async(t,e)=>{const{to:n,data:r}=t,i=v(n,e),a=await(async(t,e)=>{if("0x"!==e)return{type:"contract",certainty:"definite"};try{const e=await fetch(p.rpcUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",method:"eth_getCode",params:[t,"latest"],id:1})});if(!e.ok)return{type:"unknown",certainty:"uncertain",reason:"eth_getCode_failed"};const n=(await e.json()).result;return"0x"===n||null===n?{type:"eoa",certainty:"definite"}:{type:"contract",certainty:"definite"}}catch(t){return{type:"unknown",certainty:"uncertain",reason:"eth_getCode_failed"}}})(n,r),o="contract"===a.type||"uncertain"===a.certainty;try{var s,l,c;const[t]=await Promise.all([h("\nquery AddressAtoms($plainAddress: String!, $caipAddress: String!) {\n # Atoms matching plain address format (for EOAs)\n plainAtoms: atoms(\n where: {\n _or: [\n { label: { _ilike: $plainAddress } },\n { data: { _ilike: $plainAddress } }\n ]\n },\n order_by: { term: { total_market_cap: desc_nulls_last } },\n limit: 1\n ) {\n term_id\n type\n label\n image\n data\n emoji\n creator_id\n }\n\n # Atoms matching CAIP format (for smart contracts)\n caipAtoms: atoms(\n where: {\n _or: [\n { label: { _ilike: $caipAddress } },\n { data: { _ilike: $caipAddress } }\n ]\n },\n order_by: { term: { total_market_cap: desc_nulls_last } },\n limit: 1\n ) {\n term_id\n type\n label\n image\n data\n emoji\n creator_id\n }\n}\n",{plainAddress:n,caipAddress:i})]),{plainAtoms:e,caipAtoms:r}=t.data,_=null===(s=e)||void 0===s?void 0:s[0],g=null===(l=r)||void 0===l?void 0:l[0];if(!_&&!g)return{account:null,triple:null,isContract:o,alias:null,classification:a,alternateTrustData:{hasAlternateTrustData:!1}};const{hasTagAtomId:f,trustworthyAtomId:b,hasAliasAtomId:v}=p,w=[],y=[];_&&(w.push(h(m,{subjectId:_.term_id,predicateId:f,objectId:b})),y.push("plain")),g&&(w.push(h(m,{subjectId:g.term_id,predicateId:f,objectId:b})),y.push("caip"));const T=await Promise.all(w),A={};y.forEach(((t,e)=>{A[t]=T[e].data.triples[0]||null}));const I=((t,e,n,r,i)=>n||e?n?e?"definite"===t.certainty?"contract"===t.type?{primary:n,primaryTriple:i,alternate:e,alternateTriple:r,usedCaip:!0}:{primary:e,primaryTriple:r,alternate:n,alternateTriple:i,usedCaip:!1}:rt(i)>=rt(r)?{primary:n,primaryTriple:i,alternate:e,alternateTriple:r,usedCaip:!0}:{primary:e,primaryTriple:r,alternate:n,alternateTriple:i,usedCaip:!1}:{primary:n,primaryTriple:i,alternate:null,alternateTriple:null,usedCaip:!0}:{primary:e,primaryTriple:r,alternate:null,alternateTriple:null,usedCaip:!1}:{primary:null,primaryTriple:null,alternate:null,alternateTriple:null,usedCaip:!1})(a,_||null,g||null,A.plain||null,A.caip||null),C=rt(I.alternateTriple),S={hasAlternateTrustData:C>0n,alternateAtomId:null===(c=I.alternate)||void 0===c?void 0:c.term_id,alternateMarketCap:C.toString(),alternateIsCaip:!I.usedCaip};let k=null;if(I.primary){var d,u;const t=await h('\n query GetTriplesWithHighestStake($subjectId: String!, $predicateId: String!) {\n triples(\n where: {\n subject_id: { _eq: $subjectId },\n predicate_id: { _eq: $predicateId }\n },\n order_by: { triple_term: { total_market_cap: desc } }\n ) {\n term_id\n subject_id\n predicate_id\n object_id\n creator_id\n counter_term_id\n\n # Triple-specific aggregated market data (stake information)\n triple_term {\n term_id\n counter_term_id\n total_market_cap\n total_position_count\n }\n\n # Individual vault data\n term {\n vaults(where: { curve_id: { _eq: "1" } }) {\n term_id\n market_cap\n position_count\n curve_id\n }\n }\n\n counter_term {\n vaults(where: { curve_id: { _eq: "1" } }) {\n term_id\n market_cap\n position_count\n curve_id\n }\n }\n\n # Object information for context\n object {\n label\n image\n data\n }\n }\n\n chainlink_prices(limit: 1, order_by: { id: desc }) {\n usd\n }\n }\n',{subjectId:I.primary.term_id,predicateId:v});k=(null===(u=t.data.triples[0])||void 0===u||null===(d=u.object)||void 0===d?void 0:d.label)||null}return{account:I.primary,triple:I.primaryTriple,isContract:o,alias:k,classification:a,alternateTrustData:S}}catch(t){throw t}},at=async t=>{const e=(t=>{if(t)try{return new URL(t).hostname}catch{var e;return null===(e=t.match(/^(?:https?:\/\/)?([^\/]+)/))||void 0===e?void 0:e[1]}})(t);if(!t||!e)return{origin:null,triple:null,hostname:void 0};try{var n;const i=null===(n=(await h(_,{originUrl:t})).data.atoms)||void 0===n?void 0:n[0];if(!i){var r;const t=null===(r=(await h(_,{originUrl:e})).data.atoms)||void 0===r?void 0:r[0];return t?await ot(t,e):{origin:null,triple:null,hostname:e}}return await ot(i,e)}catch{return{origin:null,triple:null,hostname:e}}},ot=async(t,e)=>{const{hasTagAtomId:n,trustworthyAtomId:r}=p;try{var i;const a=await h('\nquery OriginTrustTriple($subjectId: String!, $predicateId: String!, $objectId: String!) {\n triples(where: {\n subject_id: { _eq: $subjectId },\n predicate_id: { _eq: $predicateId },\n object_id: { _eq: $objectId }\n }) {\n term_id\n\n term {\n vaults(where: { curve_id: { _eq: "1" } }) {\n term_id\n market_cap\n position_count\n }\n }\n\n counter_term {\n vaults(where: { curve_id: { _eq: "1" } }) {\n term_id\n market_cap\n position_count\n }\n }\n\n positions(order_by: { shares: desc }, limit: 30) {\n id\n shares\n account_id\n }\n\n counter_positions(order_by: { shares: desc }, limit: 30) {\n id\n shares\n account_id\n }\n }\n}\n',{subjectId:t.term_id,predicateId:n,objectId:r});return{origin:t,triple:(null===(i=a.data.triples)||void 0===i?void 0:i[0])||null,hostname:e}}catch{return{origin:t,triple:null,hostname:e}}},st=36e5;async function lt(t){try{const n=await snap.request({method:"snap_manageState",params:{operation:"get"}});if(!n)return null;const r=n[t.toLowerCase()];return r?(e=r.timestamp,Date.now()-e<st?r.contacts:null):null}catch{return null}var e}async function ct(t){const e=await lt(t);if(null!==e)return e;const n=await async function(t){var e,n;const{hasTagAtomId:r,trustworthyAtomId:i}=p,a=(null===(n=await h(g,{userAddress:t,predicateId:r,objectId:i}))||void 0===n||null===(e=n.data)||void 0===e?void 0:e.positions)||[],o=new Map;for(const t of a){const{subject_id:e,subject:n}=t.triple;var s;o.has(e)||o.set(e,{accountId:e,label:(null===(s=n)||void 0===s?void 0:s.label)||e})}return Array.from(o.values())}(t);return await async function(t,e){try{const n=await snap.request({method:"snap_manageState",params:{operation:"get"}}),r=t.toLowerCase(),i={contacts:e,timestamp:Date.now()},a={...n||{},[r]:i};await snap.request({method:"snap_manageState",params:{operation:"update",newState:a}})}catch{}}(t,n),n}function dt(t,e,n){const r=new Set(t.map((t=>t.accountId.toLowerCase()))),i=new Map(t.map((t=>[t.accountId.toLowerCase(),t.label]))),a=[];for(const t of e){var o;const e=null===(o=t.account_id)||void 0===o?void 0:o.toLowerCase();var s;if(e&&r.has(e))a.push({accountId:t.account_id,label:i.get(e)||(null===(s=t.account)||void 0===s?void 0:s.label)||ut(t.account_id)})}const l=[];for(const t of n){var c;const e=null===(c=t.account_id)||void 0===c?void 0:c.toLowerCase();var d;if(e&&r.has(e))l.push({accountId:t.account_id,label:i.get(e)||(null===(d=t.account)||void 0===d?void 0:d.label)||ut(t.account_id)})}return{forContacts:a,againstContacts:l}}function ut(t){return!t||t.length<12?t||"Unknown":`${t.slice(0,6)}...${t.slice(-4)}`}const pt=async({transaction:t,chainId:e,transactionOrigin:i})=>{let a;try{var s;a=null===(s=await ethereum.request({method:"eth_accounts"}))||void 0===s?void 0:s[0]}catch(t){}const[l,c,d]=await Promise.all([it(t,e),at(i),a?ct(a):Promise.resolve([])]),u=(t=>{const{account:e,triple:n}=t;return e?null===n?f.AtomWithoutTrustTriple:f.AtomWithTrustTriple:f.NoAtom})(l),p=((t,e)=>{if(!e)return b.NoOrigin;const{origin:n,triple:r}=t;return n?r?b.AtomWithTrustTriple:b.AtomWithoutTrustTriple:b.NoAtom})(c,i);let h,m;if(d.length>0&&l.triple){h=dt(d,l.triple.positions||[],l.triple.counter_positions||[]),0===h.forContacts.length&&0===h.againstContacts.length&&(h=void 0)}if(d.length>0&&c.triple){m=dt(d,c.triple.positions||[],c.triple.counter_positions||[]),0===m.forContacts.length&&0===m.againstContacts.length&&(m=void 0)}const _={...l,accountType:u,address:t.to,userAddress:a,chainId:e,transactionOrigin:i,trustedCircle:h},g={...c,originType:p,originUrl:i,trustedCircle:m},v=(t=>{const{accountType:e}=t;return R[e](t)})(_),w=(t=>{const{originType:e}=t;return Z[e](t)})(g),y=n(nt,{accountProps:_,originProps:g}),T=r(o,{children:[v,w,y]}),A=(t=>JSON.parse(JSON.stringify(t)))({account:_,origin:g});return{id:await snap.request({method:"snap_createInterface",params:{ui:T,context:A}})}},ht=async t=>{},mt=async()=>({content:r(o,{children:[n(s,{children:"Welcome to Hive Mind, powered by Intuition"}),n(l,{children:"Real-time trust and sentiment insights for every transaction."}),n(c,{}),n(l,{children:"Hive Mind shows you community trust data from the Intuition knowledge graph during transactions."}),r(o,{children:[n(d,{href:"https://hivemindhq.io",children:"Check out Hive Mind's product suite"}),n(d,{href:"https://intuition.systems",children:"Learn about Intuition"})]})]})});var _t=exports;for(var gt in e)_t[gt]=e[gt];e.__esModule&&Object.defineProperty(_t,"__esModule",{value:!0})})();
|
package/package.json
CHANGED
package/snap.manifest.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.2.
|
|
2
|
+
"version": "1.2.4",
|
|
3
3
|
"description": "Community trust signals for every transaction, powered by Intuition.",
|
|
4
4
|
"proposedName": "Hive Mind",
|
|
5
5
|
"repository": {
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"url": "https://github.com/hivemindhq-io/snap"
|
|
8
8
|
},
|
|
9
9
|
"source": {
|
|
10
|
-
"shasum": "+
|
|
10
|
+
"shasum": "ffdfxK4L0hmiIj8b93NQUVFhLcSqm8PZKpTTWea+0XU=",
|
|
11
11
|
"location": {
|
|
12
12
|
"npm": {
|
|
13
13
|
"filePath": "dist/bundle.js",
|
package/src/images/logo.svg
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
<
|
|
3
|
-
|
|
4
|
-
<circle cx="15.03" cy="15.03" r="15.03" fill="#000000"/>
|
|
5
|
-
|
|
6
|
-
<!-- Orange logo, centered with 150% of doubled gap (21% total, 10.5% top and bottom) -->
|
|
7
|
-
<g id="Layer_4" data-name="Layer 4" transform="translate(4.4495, 2.7654)">
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="150" height="150" viewBox="0 0 150 150">
|
|
2
|
+
<circle cx="75" cy="75" r="75" fill="#000000"/>
|
|
3
|
+
<g transform="translate(20, 11.25) scale(5.1986)">
|
|
8
4
|
<path d="M21.1582,6.1641L10.9077.1514l-.4019-.1514L.0005,6.165l-.0005,12.2197,10.4644,6.1416.231-.0015,10.5132-6.1426-.0503-12.2183ZM19.1802,12.2734l-3.4512,2.1265-3.6367-2.1265,3.6401-2.1582,3.4478,2.1582ZM14.9927,15.7437v3.6025l-3.6646-2.1187-.0117-3.6509,3.6763,2.167ZM9.8115,13.6294v3.6323l-3.645,2.1167v-3.6177l3.645-2.1313ZM6.1665,8.8047v-3.6323l3.645,2.1313v3.6177l-3.645-2.1167ZM14.1499,20.667l-3.5723,2.1304-3.5991-2.0859,3.6021-2.1431,3.5693,2.0986ZM6.979,3.895l3.606-2.1689,3.5654,2.124-3.5728,2.0991-3.5986-2.0542ZM11.3477,10.9214v-3.666l3.645-2.0874v3.6367l-3.645,2.1167ZM9.0654,12.2886l-3.6592,2.1182-3.4312-2.1484,3.4214-2.1421,3.6689,2.1724ZM1.4863,10.7681v-3.7148l3.1772-1.8481v3.5557l-3.1772,2.0073ZM4.6626,19.312l-3.1763-1.8335v-3.7012l3.1699,1.9697.0063,3.5649ZM19.6724,13.7812v3.6973l-3.1768,1.834v-3.5239l3.1768-2.0073ZM19.6724,7.1021v3.666l-3.1768-2.0073v-3.5503l3.1768,1.8916Z" fill="#e59200"/>
|
|
9
5
|
</g>
|
|
10
6
|
</svg>
|