@forta/usemetamask
Advanced tools
Comparing version 0.1.2 to 0.1.3
@@ -29,3 +29,3 @@ import { | ||
hexToInt: (s: string) => number | ||
toWei: (s: string) => number | ||
toWei: (s: number) => number | ||
toTxWei: (n: number) => string | ||
@@ -32,0 +32,0 @@ weiToEth: (n: number) => number |
@@ -1,2 +0,2 @@ | ||
import {useState,useRef,useEffect,useMemo,useCallback}from'react';const ERRORS={METAMASK_NOT_INSTALLED:{code:-600,message:"Metamask not installed"},USER_NOT_CONNECTED:{code:-601,message:"User not connected"}},EVENTS={ON_METAMASK_ERROR:"ON_METAMASK_ERROR"},STR_TRUE="true",STR_FALSE="false";const i="ethereum",o$2="USEMETAMASK_USERDATA";class m$1{constructor(){this.noOp=()=>{};this.getStoreState=()=>localStorage.getItem(o$2);this.setStoreState=e=>{localStorage.setItem(o$2,e);};this.userIsForceDisconnected=()=>this.getStoreState()==STR_TRUE;this.getGlobalWindow=()=>typeof window<"u"?window:{};this.getMetamaskProvider=()=>{const e=this.getGlobalWindow()[i];return e&&e.isMetaMask?(e.isUserUnlocked=e._metamask.isUnlocked,e):null};this.withError=({code:e,message:t})=>{const r={message:t,code:e};return dispatchEvent(new CustomEvent(EVENTS.ON_METAMASK_ERROR,{detail:r})),Promise.reject(r)};this.runIfMetamask=(e,t)=>{const r=this.getMetamaskProvider();return r?t&&this.userIsForceDisconnected()?this.withError(ERRORS.USER_NOT_CONNECTED):e(r):this.withError(ERRORS.METAMASK_NOT_INSTALLED)};this.switchNetwork=e=>this.runIfMetamask(t=>t.request({method:"wallet_switchEthereumChain",params:[{chainId:e}]}));}}var z = new m$1;const e=t=>(t<0&&(t=4294967295+t+1),`0x${t.toString(16).toUpperCase()}`),o$1=t=>parseInt(t,16),n=t=>t*1e18,f=t=>e(n(t)),r=t=>t*1e-18,s=t=>r(o$1(t));var b = {toHex:e,hexToInt:o$1,toWei:n,toTxWei:f,weiToEth:r,txWeiToEth:s};const{withError:o,runIfMetamask:a,switchNetwork:m}=z;const getMetamaskProvider=z.getMetamaskProvider,addEtherToken=({address:t,symbol:e,decimals:r=18,image:s=""})=>a(n=>n.request({method:"wallet_watchAsset",params:{type:"ERC20",options:{address:t,symbol:e,decimals:r,image:s}}}).catch(o)),switchEtherNetwork=t=>m(t).catch(o),addEtherNetwork=({chainName:t,chainId:e,rpcUrl:r,reloadOnSuccess:s,blockExplorerUrl:n,currencySymbol:c="ETH"})=>a(i=>{i.request({method:"wallet_addEthereumChain",params:[{chainName:t,chainId:e,rpcUrls:[r],blockExplorerUrls:[n],nativeCurrency:{name:c,symbol:c,decimals:18}}]}).then(()=>{s&&window.location.reload();}).catch(o);}),switchOrAppendNetwork=({chainId:t,chainName:e,rpcUrl:r,reloadOnSuccess:s,blockExplorerUrl:n,currencySymbol:c="ETH"})=>m(t).catch(i=>i.code===4902?addEtherNetwork({chainName:e,chainId:t,rpcUrl:r,reloadOnSuccess:s,blockExplorerUrl:n,currencySymbol:c}).then(()=>m(t)).catch(o):o(i)),metamaskRequest=t=>a(e=>e.request(t).catch(o)),sendEther=({from:t,to:e,value:r})=>a(s=>s.request({method:"eth_sendTransaction",params:[{from:t,to:e,value:r}]}).catch(o)),connectToMetamask=()=>a(t=>t.request({method:"eth_requestAccounts"}).then(([e])=>e),!1),formatEther=t=>{const e=t<0?t.toPrecision(2):t.toFixed(3);return `${parseFloat(e)}`},getFIATBalance=(t,e)=>parseFloat((t*e).toFixed(2));const{noOp:h$1,setStoreState:C$1,userIsForceDisconnected:G}=z,_="accountsChanged",A="disconnect",V=6e4,N="0.00";function W(f){const[E,l]=useState(null),[c,R]=useState({}),[w,k]=useState(0),[o,s]=useState([]),[n,g]=useState(null),[i,B]=useState({raw:0,formatted:N}),u=useRef(null),O=()=>l(null),p=e=>{console.error("useMetamask::Error",e),l(e);},M=e=>{const t=e||{};C$1(STR_TRUE),s([]),t.reload&&window.location.reload();};useEffect(()=>{const e=getMetamaskProvider();let t=h$1;function r(T){T.detail&&p(T.detail);}function S(){M({reload:!0});}return e&&(R(e),e.on(_,s),e.on(A,S),e.request({method:"eth_accounts"}).then(s),t=f?f(e):h$1),window.addEventListener(EVENTS.ON_METAMASK_ERROR,r),()=>{t(),e&&(e.removeListener(_,s),e.removeListener(A,S)),window.removeEventListener(EVENTS.ON_METAMASK_ERROR,r);}},[]),useEffect(()=>{const e=G(),t=o.length&&!e;g(t?o[0]:null);},[o]),useEffect(()=>{l(null);},[o,n]),useEffect(()=>(clearTimeout(u.current),c&&n&&c.request({method:"eth_getBalance",params:[n,"latest"]}).then(e=>{const t=b.txWeiToEth(e);B({formatted:formatEther(t),raw:t}),u.current=setTimeout(()=>k(r=>r+1),V*3);}).catch(h$1),()=>clearTimeout(u.current)),[o,n,E,w]);const D=({to:e,value:t,...r})=>sendEther({...r,from:n,to:e,value:t}),v=()=>{connectToMetamask().then(e=>{C$1(STR_FALSE),s([e]);}).catch(p);},d=useMemo(()=>{const e=c.chainId?c.chainId:"0x0",t=typeof n=="string";return {chainId:e,chainIdDecimal:parseInt(e,16),isConnected:t,formattedBalance:t?i.formatted:N,balance:t?i.raw:0}},[n,i]);return {send:D,isConnected:d.isConnected,chainIdDecimal:d.chainIdDecimal,chainId:d.chainId,metamask:c,formattedBalance:d.formattedBalance,balance:i.raw,connect:v,disconnect:M,account:n,resetError:O,error:E,accounts:o}}const T="https://api.coingecko.com/api/v3/simple/price",h={usd:0,jpy:0,eur:0},C=1e3,d=(t,c=60)=>{const s=useRef(null),[u,i]=useState(h),[l,a]=useState(0),n=useCallback(function(){a(r=>r+1);},[]);return useEffect(()=>(clearTimeout(s.current),fetch(`${T}?ids=${t}&vs_currencies=usd,eur,jpy`).then(e=>e.json()).then(e=>{t in e&&i(r=>({...r,...e[t]}));}).catch(console.error).finally(()=>{const e=c<10?10:c;setTimeout(n,e*C);}),()=>clearTimeout(s.current)),[l]),[u,n]}; | ||
export{addEtherNetwork,addEtherToken,connectToMetamask,formatEther,getFIATBalance,getMetamaskProvider,metamaskRequest,b as parse,sendEther,switchEtherNetwork,switchOrAppendNetwork,W as useMetamask,d as useTokenPrice}; | ||
import {useState,useRef,useEffect,useMemo,useCallback}from'react';const ERRORS={METAMASK_NOT_INSTALLED:{code:-600,message:"Metamask not installed"},USER_NOT_CONNECTED:{code:-601,message:"User not connected"}},EVENTS={ON_METAMASK_ERROR:"ON_METAMASK_ERROR"},STR_TRUE="true",STR_FALSE="false";const i="ethereum",o$2="USEMETAMASK_USERDATA",m$1="_metamask";class E$1{constructor(){this.noOp=()=>{};this.getStoreState=()=>localStorage.getItem(o$2);this.setStoreState=t=>{localStorage.setItem(o$2,t);};this.userIsForceDisconnected=()=>this.getStoreState()==STR_TRUE;this.getGlobalWindow=()=>typeof window<"u"?window:{};this.getMetamaskProvider=()=>{const t=this.getGlobalWindow()[i];if(t&&t.isMetaMask){const e=t[m$1],r=e&&e.isUnlocked;return t.isUserUnlocked=r||this.noOp,t}return null};this.withError=({code:t,message:e})=>{const r={message:e,code:t};return dispatchEvent(new CustomEvent(EVENTS.ON_METAMASK_ERROR,{detail:r})),Promise.reject(r)};this.runIfMetamask=(t,e)=>{const r=this.getMetamaskProvider();return r?e&&this.userIsForceDisconnected()?this.withError(ERRORS.USER_NOT_CONNECTED):t(r):this.withError(ERRORS.METAMASK_NOT_INSTALLED)};this.switchNetwork=t=>this.runIfMetamask(e=>e.request({method:"wallet_switchEthereumChain",params:[{chainId:t}]}));}}var G = new E$1;const e=t=>(t<0&&(t=4294967295+t+1),`0x${t.toString(16).toUpperCase()}`),o$1=t=>parseInt(t,16),n=t=>t*1e18,f=t=>e(n(t)),r=t=>t*1e-18,s=t=>r(o$1(t));var y = {toHex:e,hexToInt:o$1,toWei:n,toTxWei:f,weiToEth:r,txWeiToEth:s};const{withError:o,runIfMetamask:a,switchNetwork:m}=G;const getMetamaskProvider=G.getMetamaskProvider,addEtherToken=({address:t,symbol:e,decimals:r=18,image:s=""})=>a(n=>n.request({method:"wallet_watchAsset",params:{type:"ERC20",options:{address:t,symbol:e,decimals:r,image:s}}}).catch(o)),switchEtherNetwork=t=>m(t).catch(o),addEtherNetwork=({chainName:t,chainId:e,rpcUrl:r,reloadOnSuccess:s,blockExplorerUrl:n,currencySymbol:c="ETH"})=>a(i=>{i.request({method:"wallet_addEthereumChain",params:[{chainName:t,chainId:e,rpcUrls:[r],blockExplorerUrls:[n],nativeCurrency:{name:c,symbol:c,decimals:18}}]}).then(()=>{s&&window.location.reload();}).catch(o);}),switchOrAppendNetwork=({chainId:t,chainName:e,rpcUrl:r,reloadOnSuccess:s,blockExplorerUrl:n,currencySymbol:c="ETH"})=>m(t).catch(i=>i.code===4902?addEtherNetwork({chainName:e,chainId:t,rpcUrl:r,reloadOnSuccess:s,blockExplorerUrl:n,currencySymbol:c}).then(()=>m(t)).catch(o):o(i)),metamaskRequest=t=>a(e=>e.request(t).catch(o)),sendEther=({from:t,to:e,value:r})=>a(s=>s.request({method:"eth_sendTransaction",params:[{from:t,to:e,value:r}]}).catch(o)),connectToMetamask=()=>a(t=>t.request({method:"eth_requestAccounts"}).then(([e])=>e),!1),formatEther=t=>{const e=t<0?t.toPrecision(2):t.toFixed(3);return `${parseFloat(e)}`},getFIATBalance=(t,e)=>parseFloat((t*e).toFixed(2));const{noOp:E,setStoreState:I,userIsForceDisconnected:V}=G,_="accountsChanged",A="disconnect",W=6e4,N="0.00",R=d=>typeof d=="function";function Y(d){const[p,h]=useState(null),[a,k]=useState({}),[w,g]=useState(0),[o,s]=useState([]),[n,B]=useState(null),[m,O]=useState({raw:0,formatted:N}),f=useRef(null),D=()=>h(null),M=e=>{console.error("useMetamask::Error",e),h(e);},S=e=>{const t=e||{};I(STR_TRUE),s([]),t.reload&&window.location.reload();};useEffect(()=>{const e=getMetamaskProvider();let t=E;function c(i){i.detail&&M(i.detail);}function T(){S({reload:!0});}if(e){k(e),e.on(_,s),e.on(A,T),e.request({method:"eth_accounts"}).then(s);const i=R(d)&&d(e);t=R(i)?i:E;}return window.addEventListener(EVENTS.ON_METAMASK_ERROR,c),()=>{t(),e&&(e.removeListener(_,s),e.removeListener(A,T)),window.removeEventListener(EVENTS.ON_METAMASK_ERROR,c);}},[]),useEffect(()=>{const e=V(),t=o.length&&!e;B(t?o[0]:null);},[o]),useEffect(()=>{h(null);},[o,n]),useEffect(()=>(clearTimeout(f.current),a&&n&&a.request({method:"eth_getBalance",params:[n,"latest"]}).then(e=>{const t=y.txWeiToEth(e);O({formatted:formatEther(t),raw:t}),f.current=setTimeout(()=>g(c=>c+1),W*3);}).catch(E),()=>clearTimeout(f.current)),[o,n,p,w]);const v=({to:e,value:t,...c})=>sendEther({...c,from:n,to:e,value:t}),L=()=>{connectToMetamask().then(e=>{I(STR_FALSE),s([e]);}).catch(M);},l=useMemo(()=>{const e=a.chainId?a.chainId:"0x0",t=typeof n=="string";return {chainId:e,chainIdDecimal:parseInt(e,16),isConnected:t,formattedBalance:t?m.formatted:N,balance:t?m.raw:0}},[n,m]);return {send:v,isConnected:l.isConnected,chainIdDecimal:l.chainIdDecimal,chainId:l.chainId,metamask:a,formattedBalance:l.formattedBalance,balance:m.raw,connect:L,disconnect:S,account:n,resetError:D,error:p,accounts:o}}const T="https://api.coingecko.com/api/v3/simple/price",h={usd:0,jpy:0,eur:0},C=1e3,d=(t,c=60)=>{const s=useRef(null),[u,i]=useState(h),[l,a]=useState(0),n=useCallback(function(){a(r=>r+1);},[]);return useEffect(()=>(clearTimeout(s.current),fetch(`${T}?ids=${t}&vs_currencies=usd,eur,jpy`).then(e=>e.json()).then(e=>{t in e&&i(r=>({...r,...e[t]}));}).catch(console.error).finally(()=>{const e=c<10?10:c;setTimeout(n,e*C);}),()=>clearTimeout(s.current)),[l]),[u,n]}; | ||
export{addEtherNetwork,addEtherToken,connectToMetamask,formatEther,getFIATBalance,getMetamaskProvider,metamaskRequest,y as parse,sendEther,switchEtherNetwork,switchOrAppendNetwork,Y as useMetamask,d as useTokenPrice}; |
@@ -1,1 +0,1 @@ | ||
(function(r,n){typeof exports=="object"&&typeof module<"u"?n(exports,require("react")):typeof define=="function"&&define.amd?define(["exports","react"],n):(r=typeof globalThis<"u"?globalThis:r||self,n(r["@forta/usemetamask"]={},r.React))})(this,function(r,n){"use strict";const N={METAMASK_NOT_INSTALLED:{code:-600,message:"Metamask not installed"},USER_NOT_CONNECTED:{code:-601,message:"User not connected"}},k={ON_METAMASK_ERROR:"ON_METAMASK_ERROR"},g="true",G="false",H="ethereum",A="USEMETAMASK_USERDATA";class V{constructor(){this.noOp=()=>{},this.getStoreState=()=>localStorage.getItem(A),this.setStoreState=t=>{localStorage.setItem(A,t)},this.userIsForceDisconnected=()=>this.getStoreState()==g,this.getGlobalWindow=()=>typeof window<"u"?window:{},this.getMetamaskProvider=()=>{const t=this.getGlobalWindow()[H];return t&&t.isMetaMask?(t.isUserUnlocked=t._metamask.isUnlocked,t):null},this.withError=({code:t,message:s})=>{const a={message:s,code:t};return dispatchEvent(new CustomEvent(k.ON_METAMASK_ERROR,{detail:a})),Promise.reject(a)},this.runIfMetamask=(t,s)=>{const a=this.getMetamaskProvider();return a?s&&this.userIsForceDisconnected()?this.withError(N.USER_NOT_CONNECTED):t(a):this.withError(N.METAMASK_NOT_INSTALLED)},this.switchNetwork=t=>this.runIfMetamask(s=>s.request({method:"wallet_switchEthereumChain",params:[{chainId:t}]}))}}var M=new V;const I=e=>(e<0&&(e=4294967295+e+1),`0x${e.toString(16).toUpperCase()}`),O=e=>parseInt(e,16),v=e=>e*1e18,z=e=>I(v(e)),b=e=>e*1e-18;var y={toHex:I,hexToInt:O,toWei:v,toTxWei:z,weiToEth:b,txWeiToEth:e=>b(O(e))};const{withError:E,runIfMetamask:S,switchNetwork:p}=M,U=M.getMetamaskProvider,J=({address:e,symbol:t,decimals:s=18,image:a=""})=>S(d=>d.request({method:"wallet_watchAsset",params:{type:"ERC20",options:{address:e,symbol:t,decimals:s,image:a}}}).catch(E)),Q=e=>p(e).catch(E),C=({chainName:e,chainId:t,rpcUrl:s,reloadOnSuccess:a,blockExplorerUrl:d,currencySymbol:h="ETH"})=>S(m=>{m.request({method:"wallet_addEthereumChain",params:[{chainName:e,chainId:t,rpcUrls:[s],blockExplorerUrls:[d],nativeCurrency:{name:h,symbol:h,decimals:18}}]}).then(()=>{a&&window.location.reload()}).catch(E)}),X=({chainId:e,chainName:t,rpcUrl:s,reloadOnSuccess:a,blockExplorerUrl:d,currencySymbol:h="ETH"})=>p(e).catch(m=>m.code===4902?C({chainName:t,chainId:e,rpcUrl:s,reloadOnSuccess:a,blockExplorerUrl:d,currencySymbol:h}).then(()=>p(e)).catch(E):E(m)),Y=e=>S(t=>t.request(e).catch(E)),q=({from:e,to:t,value:s})=>S(a=>a.request({method:"eth_sendTransaction",params:[{from:e,to:t,value:s}]}).catch(E)),D=()=>S(e=>e.request({method:"eth_requestAccounts"}).then(([t])=>t),!1),F=e=>{const t=e<0?e.toPrecision(2):e.toFixed(3);return`${parseFloat(t)}`},Z=(e,t)=>parseFloat((e*t).toFixed(2)),{noOp:_,setStoreState:L,userIsForceDisconnected:ee}=M,P="accountsChanged",$="disconnect",te=6e4,K="0.00";function oe(e){const[t,s]=n.useState(null),[a,d]=n.useState({}),[h,m]=n.useState(0),[u,i]=n.useState([]),[l,ce]=n.useState(null),[w,ie]=n.useState({raw:0,formatted:K}),R=n.useRef(null),le=()=>s(null),B=o=>{console.error("useMetamask::Error",o),s(o)},W=o=>{const c=o||{};L(g),i([]),c.reload&&window.location.reload()};n.useEffect(()=>{const o=U();let c=_;function f(x){x.detail&&B(x.detail)}function j(){W({reload:!0})}return o&&(d(o),o.on(P,i),o.on($,j),o.request({method:"eth_accounts"}).then(i),c=e?e(o):_),window.addEventListener(k.ON_METAMASK_ERROR,f),()=>{c(),o&&(o.removeListener(P,i),o.removeListener($,j)),window.removeEventListener(k.ON_METAMASK_ERROR,f)}},[]),n.useEffect(()=>{const o=ee(),c=u.length&&!o;ce(c?u[0]:null)},[u]),n.useEffect(()=>{s(null)},[u,l]),n.useEffect(()=>(clearTimeout(R.current),a&&l&&a.request({method:"eth_getBalance",params:[l,"latest"]}).then(o=>{const c=y.txWeiToEth(o);ie({formatted:F(c),raw:c}),R.current=setTimeout(()=>m(f=>f+1),te*3)}).catch(_),()=>clearTimeout(R.current)),[u,l,t,h]);const de=({to:o,value:c,...f})=>q({...f,from:l,to:o,value:c}),ue=()=>{D().then(o=>{L(G),i([o])}).catch(B)},T=n.useMemo(()=>{const o=a.chainId?a.chainId:"0x0",c=typeof l=="string";return{chainId:o,chainIdDecimal:parseInt(o,16),isConnected:c,formattedBalance:c?w.formatted:K,balance:c?w.raw:0}},[l,w]);return{send:de,isConnected:T.isConnected,chainIdDecimal:T.chainIdDecimal,chainId:T.chainId,metamask:a,formattedBalance:T.formattedBalance,balance:w.raw,connect:ue,disconnect:W,account:l,resetError:le,error:t,accounts:u}}const ne="https://api.coingecko.com/api/v3/simple/price",ae={usd:0,jpy:0,eur:0},se=1e3,re=(e,t=60)=>{const s=n.useRef(null),[a,d]=n.useState(ae),[h,m]=n.useState(0),u=n.useCallback(function(){m(i=>i+1)},[]);return n.useEffect(()=>(clearTimeout(s.current),fetch(`${ne}?ids=${e}&vs_currencies=usd,eur,jpy`).then(i=>i.json()).then(i=>{e in i&&d(l=>({...l,...i[e]}))}).catch(console.error).finally(()=>{const i=t<10?10:t;setTimeout(u,i*se)}),()=>clearTimeout(s.current)),[h]),[a,u]};r.addEtherNetwork=C,r.addEtherToken=J,r.connectToMetamask=D,r.formatEther=F,r.getFIATBalance=Z,r.getMetamaskProvider=U,r.metamaskRequest=Y,r.parse=y,r.sendEther=q,r.switchEtherNetwork=Q,r.switchOrAppendNetwork=X,r.useMetamask=oe,r.useTokenPrice=re,Object.defineProperties(r,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}); | ||
(function(r,a){typeof exports=="object"&&typeof module<"u"?a(exports,require("react")):typeof define=="function"&&define.amd?define(["exports","react"],a):(r=typeof globalThis<"u"?globalThis:r||self,a(r["@forta/usemetamask"]={},r.React))})(this,function(r,a){"use strict";const N={METAMASK_NOT_INSTALLED:{code:-600,message:"Metamask not installed"},USER_NOT_CONNECTED:{code:-601,message:"User not connected"}},p={ON_METAMASK_ERROR:"ON_METAMASK_ERROR"},g="true",H="false",V="ethereum",A="USEMETAMASK_USERDATA",Y="_metamask";class z{constructor(){this.noOp=()=>{},this.getStoreState=()=>localStorage.getItem(A),this.setStoreState=t=>{localStorage.setItem(A,t)},this.userIsForceDisconnected=()=>this.getStoreState()==g,this.getGlobalWindow=()=>typeof window<"u"?window:{},this.getMetamaskProvider=()=>{const t=this.getGlobalWindow()[V];if(t&&t.isMetaMask){const n=t[Y],s=n&&n.isUnlocked;return t.isUserUnlocked=s||this.noOp,t}return null},this.withError=({code:t,message:n})=>{const s={message:n,code:t};return dispatchEvent(new CustomEvent(p.ON_METAMASK_ERROR,{detail:s})),Promise.reject(s)},this.runIfMetamask=(t,n)=>{const s=this.getMetamaskProvider();return s?n&&this.userIsForceDisconnected()?this.withError(N.USER_NOT_CONNECTED):t(s):this.withError(N.METAMASK_NOT_INSTALLED)},this.switchNetwork=t=>this.runIfMetamask(n=>n.request({method:"wallet_switchEthereumChain",params:[{chainId:t}]}))}}var M=new z;const O=e=>(e<0&&(e=4294967295+e+1),`0x${e.toString(16).toUpperCase()}`),v=e=>parseInt(e,16),y=e=>e*1e18,J=e=>O(y(e)),b=e=>e*1e-18;var U={toHex:O,hexToInt:v,toWei:y,toTxWei:J,weiToEth:b,txWeiToEth:e=>b(v(e))};const{withError:E,runIfMetamask:S,switchNetwork:_}=M,C=M.getMetamaskProvider,Q=({address:e,symbol:t,decimals:n=18,image:s=""})=>S(u=>u.request({method:"wallet_watchAsset",params:{type:"ERC20",options:{address:e,symbol:t,decimals:n,image:s}}}).catch(E)),X=e=>_(e).catch(E),q=({chainName:e,chainId:t,rpcUrl:n,reloadOnSuccess:s,blockExplorerUrl:u,currencySymbol:h="ETH"})=>S(m=>{m.request({method:"wallet_addEthereumChain",params:[{chainName:e,chainId:t,rpcUrls:[n],blockExplorerUrls:[u],nativeCurrency:{name:h,symbol:h,decimals:18}}]}).then(()=>{s&&window.location.reload()}).catch(E)}),Z=({chainId:e,chainName:t,rpcUrl:n,reloadOnSuccess:s,blockExplorerUrl:u,currencySymbol:h="ETH"})=>_(e).catch(m=>m.code===4902?q({chainName:t,chainId:e,rpcUrl:n,reloadOnSuccess:s,blockExplorerUrl:u,currencySymbol:h}).then(()=>_(e)).catch(E):E(m)),ee=e=>S(t=>t.request(e).catch(E)),D=({from:e,to:t,value:n})=>S(s=>s.request({method:"eth_sendTransaction",params:[{from:e,to:t,value:n}]}).catch(E)),F=()=>S(e=>e.request({method:"eth_requestAccounts"}).then(([t])=>t),!1),L=e=>{const t=e<0?e.toPrecision(2):e.toFixed(3);return`${parseFloat(t)}`},te=(e,t)=>parseFloat((e*t).toFixed(2)),{noOp:R,setStoreState:P,userIsForceDisconnected:oe}=M,K="accountsChanged",$="disconnect",ne=6e4,B="0.00",W=e=>typeof e=="function";function se(e){const[t,n]=a.useState(null),[s,u]=a.useState({}),[h,m]=a.useState(0),[d,i]=a.useState([]),[l,le]=a.useState(null),[w,ue]=a.useState({raw:0,formatted:B}),I=a.useRef(null),de=()=>n(null),j=o=>{console.error("useMetamask::Error",o),n(o)},x=o=>{const c=o||{};P(g),i([]),c.reload&&window.location.reload()};a.useEffect(()=>{const o=C();let c=R;function f(T){T.detail&&j(T.detail)}function G(){x({reload:!0})}if(o){u(o),o.on(K,i),o.on($,G),o.request({method:"eth_accounts"}).then(i);const T=W(e)&&e(o);c=W(T)?T:R}return window.addEventListener(p.ON_METAMASK_ERROR,f),()=>{c(),o&&(o.removeListener(K,i),o.removeListener($,G)),window.removeEventListener(p.ON_METAMASK_ERROR,f)}},[]),a.useEffect(()=>{const o=oe(),c=d.length&&!o;le(c?d[0]:null)},[d]),a.useEffect(()=>{n(null)},[d,l]),a.useEffect(()=>(clearTimeout(I.current),s&&l&&s.request({method:"eth_getBalance",params:[l,"latest"]}).then(o=>{const c=U.txWeiToEth(o);ue({formatted:L(c),raw:c}),I.current=setTimeout(()=>m(f=>f+1),ne*3)}).catch(R),()=>clearTimeout(I.current)),[d,l,t,h]);const he=({to:o,value:c,...f})=>D({...f,from:l,to:o,value:c}),me=()=>{F().then(o=>{P(H),i([o])}).catch(j)},k=a.useMemo(()=>{const o=s.chainId?s.chainId:"0x0",c=typeof l=="string";return{chainId:o,chainIdDecimal:parseInt(o,16),isConnected:c,formattedBalance:c?w.formatted:B,balance:c?w.raw:0}},[l,w]);return{send:he,isConnected:k.isConnected,chainIdDecimal:k.chainIdDecimal,chainId:k.chainId,metamask:s,formattedBalance:k.formattedBalance,balance:w.raw,connect:me,disconnect:x,account:l,resetError:de,error:t,accounts:d}}const ae="https://api.coingecko.com/api/v3/simple/price",re={usd:0,jpy:0,eur:0},ce=1e3,ie=(e,t=60)=>{const n=a.useRef(null),[s,u]=a.useState(re),[h,m]=a.useState(0),d=a.useCallback(function(){m(i=>i+1)},[]);return a.useEffect(()=>(clearTimeout(n.current),fetch(`${ae}?ids=${e}&vs_currencies=usd,eur,jpy`).then(i=>i.json()).then(i=>{e in i&&u(l=>({...l,...i[e]}))}).catch(console.error).finally(()=>{const i=t<10?10:t;setTimeout(d,i*ce)}),()=>clearTimeout(n.current)),[h]),[s,d]};r.addEtherNetwork=q,r.addEtherToken=Q,r.connectToMetamask=F,r.formatEther=L,r.getFIATBalance=te,r.getMetamaskProvider=C,r.metamaskRequest=ee,r.parse=U,r.sendEther=D,r.switchEtherNetwork=X,r.switchOrAppendNetwork=Z,r.useMetamask=se,r.useTokenPrice=ie,Object.defineProperties(r,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}); |
{ | ||
"name": "@forta/usemetamask", | ||
"version": "0.1.2", | ||
"version": "0.1.3", | ||
"license": "MIT", | ||
@@ -42,14 +42,20 @@ "author": { | ||
"start:pack": "npm run build:pack && vite --mode PACK playground", | ||
"start:docs": "cd docs && next", | ||
"start": "npm run build:pack && vite playground" | ||
"start:docs": "npm run build:pack && cd docs && next", | ||
"start": "npm run build:pack && vite playground", | ||
"test": "jest __tests__" | ||
}, | ||
"devDependencies": { | ||
"@testing-library/react": "^12.1.5", | ||
"@types/jest": "^28.1.1", | ||
"@types/react": "^18.0.0", | ||
"@types/react-dom": "^18.0.0", | ||
"@vitejs/plugin-react": "^1.3.0", | ||
"next": "^12.1.6", | ||
"jest": "^28.1.1", | ||
"jest-environment-jsdom": "^28.1.1", | ||
"next": "^12.1.0", | ||
"nextra": "^2.0.0-alpha.50", | ||
"nextra-theme-docs": "^2.0.0-alpha.53", | ||
"react": "^18.0.0", | ||
"react-dom": "^18.0.0", | ||
"react": "^17.0.2", | ||
"react-dom": "^17.0.2", | ||
"ts-jest": "^28.0.5", | ||
"typescript": "^4.6.3", | ||
@@ -56,0 +62,0 @@ "vite": "^2.9.9" |
19438
7
15