@rango-dev/provider-metamask 0.50.1-next.3 → 0.51.0

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.
@@ -0,0 +1,4 @@
1
+ import { type ProviderMetadata } from '@rango-dev/wallets-core';
2
+ export declare const WALLET_ID = "metamask";
3
+ export declare const metadata: ProviderMetadata;
4
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAMhE,eAAO,MAAM,SAAS,aAAa,CAAC;AAEpC,eAAO,MAAM,QAAQ,EAAE,gBAmCtB,CAAC"}
@@ -1,7 +1,8 @@
1
+ import type { LegacyProviderInterface } from '@rango-dev/wallets-core/legacy';
1
2
  import type { CanEagerConnect, CanSwitchNetwork, Connect, Subscribe, SwitchNetwork, WalletInfo } from '@rango-dev/wallets-shared';
2
3
  import type { BlockchainMeta, SignerFactory } from 'rango-types';
3
4
  import { WalletTypes } from '@rango-dev/wallets-shared';
4
- import { metamask as metamask_instance } from './helpers.js';
5
+ import { metamask as metamask_instance, type Provider } from '../utils.js';
5
6
  export declare const config: {
6
7
  type: WalletTypes;
7
8
  };
@@ -10,7 +11,9 @@ export declare const connect: Connect;
10
11
  export declare const subscribe: Subscribe;
11
12
  export declare const switchNetwork: SwitchNetwork;
12
13
  export declare const canSwitchNetworkTo: CanSwitchNetwork;
13
- export declare const getSigners: (provider: any) => Promise<SignerFactory>;
14
+ export declare const getSigners: (provider: Provider) => Promise<SignerFactory>;
14
15
  export declare const canEagerConnect: CanEagerConnect;
15
16
  export declare const getWalletInfo: (allBlockChains: BlockchainMeta[]) => WalletInfo;
17
+ declare const buildLegacyProvider: () => LegacyProviderInterface;
18
+ export { buildLegacyProvider };
16
19
  //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/legacy/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,OAAO,EACP,SAAS,EACT,aAAa,EACb,UAAU,EACX,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,EAML,WAAW,EACZ,MAAM,2BAA2B,CAAC;AAInC,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAI3E,eAAO,MAAM,MAAM;;CAElB,CAAC;AAEF,eAAO,MAAM,WAAW,0BAAoB,CAAC;AAC7C,eAAO,MAAM,OAAO,EAAE,OAarB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,SAA0B,CAAC;AAEnD,eAAO,MAAM,aAAa,EAAE,aAAmC,CAAC;AAEhE,eAAO,MAAM,kBAAkB,EAAE,gBAAwC,CAAC;AAE1E,eAAO,MAAM,UAAU,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,aAAa,CAC9D,CAAC;AAET,eAAO,MAAM,eAAe,EAAE,eAAwC,CAAC;AAEvE,eAAO,MAAM,aAAa,EAAE,CAAC,cAAc,EAAE,cAAc,EAAE,KAAK,UAoBjE,CAAC;AACF,QAAA,MAAM,mBAAmB,EAAE,MAAM,uBAS/B,CAAC;AAEH,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
package/dist/mod.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ declare const versions: () => import("@rango-dev/wallets-core/utils").VersionedProviders;
2
+ export { versions };
3
+ //# sourceMappingURL=mod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAKA,QAAA,MAAM,QAAQ,kEAIF,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,CAAC"}
package/dist/mod.js ADDED
@@ -0,0 +1,2 @@
1
+ var v=Object.defineProperty;var o=(e,t)=>v(e,"name",{value:t,configurable:!0});import{defineVersions as Q}from"@rango-dev/wallets-core/utils";import{canEagerlyConnectToEvm as M,canSwitchNetworkToEvm as x,getEvmAccounts as A,subscribeToEvm as T,switchNetworkForEvm as ce,WalletTypes as I}from"@rango-dev/wallets-shared";import{evmBlockchains as C}from"rango-types";import{LegacyNetworks as w}from"@rango-dev/wallets-core/legacy";import{dynamicImportWithRefinedError as b,getNetworkInstance as E}from"@rango-dev/wallets-shared";import{DefaultSignerFactory as y,TransactionType as P}from"rango-types";async function n(e){let t=E(e,w.ETHEREUM),r=new y,{DefaultEvmSigner:h}=await b(async()=>await import("@rango-dev/signer-evm"));return r.registerSigner(P.EVM,new h(t)),r}o(n,"getSigners");import{LegacyNetworks as m}from"@rango-dev/wallets-core/legacy";function a(){let{ethereum:e}=window;if(!e||!S(e))return null;let t=new Map;return e&&t.set(m.ETHEREUM,e),t}o(a,"metamask");function S(e){return!(!e?.isMetaMask||e.isBraveWallet&&!e._events&&!e._state||e.isApexWallet||e.isAvalanche||e.isBitKeep||e.isBlockWallet||e.isCoin98||e.isFordefi||e.__XDEFI||e.isMathWallet||e.isOkxWallet||e.isOKExWallet||e.isOneInchIOSWallet||e.isOneInchAndroidWallet||e.isOpera||e.isPortal||e.isRabby||e.isDefiant||e.isTokenPocket||e.isTokenary||e.isZeal||e.isZerion||e.isPhantom||e.isSafePal)}o(S,"isEthereumMetamaskProvider");function i(){let t=a()?.get(m.ETHEREUM);if(!t)throw new Error("Metamask not injected or EVM not enabled. Please check your wallet.");return t}o(i,"evmMetamask");function f(){let e=a();if(!e)throw new Error("MetaMask is not injected. Please check your wallet.");return e}o(f,"getInstanceOrThrow");var W=I.META_MASK,L={type:W},N=a,B=o(async({instance:e})=>{let{accounts:t,chainId:r}=await A(e);return{accounts:t,chainId:r}},"connect"),F=T;var O=x,_=n,D=M,R=o(e=>{let t=C(e);return{name:"MetaMask",img:"https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/metamask/icon.svg",installLink:{CHROME:"https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn?hl=en",BRAVE:"https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn?hl=en",FIREFOX:"https://addons.mozilla.org/en-US/firefox/addon/ether-metamask",EDGE:"https://microsoftedge.microsoft.com/addons/detail/metamask/ejbalbakoplchlghecdalmeeeajnimhm?hl=en-US",DEFAULT:"https://metamask.io/download/"},color:"#dac7ae",supportedChains:t}},"getWalletInfo"),d=o(()=>({config:L,getInstance:N,connect:B,subscribe:F,getSigners:_,getWalletInfo:R,canSwitchNetworkTo:O,canEagerConnect:D}),"buildLegacyProvider");import{ProviderBuilder as J}from"@rango-dev/wallets-core";import"@rango-dev/wallets-core";import{evmBlockchains as U}from"rango-types";var s="metamask",p={name:"MetaMask",icon:"https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/metamask/icon.svg",extensions:{chrome:"https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn?hl=en",brave:"https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn?hl=en",firefox:"https://addons.mozilla.org/en-US/firefox/addon/ether-metamask",edge:"https://microsoftedge.microsoft.com/addons/detail/metamask/ejbalbakoplchlghecdalmeeeajnimhm?hl=en-US",homepage:"https://metamask.io/download/"},properties:[{name:"namespaces",value:{selection:"multiple",data:[{label:"EVM",value:"EVM",id:"ETH",getSupportedChains:e=>U(e)}]}},{name:"signers",value:{getSigners:async()=>n(f())}}]};import{NamespaceBuilder as j}from"@rango-dev/wallets-core";import{builders as V,standardizeAndThrowError as H}from"@rango-dev/wallets-core/namespaces/common";import{actions as l,builders as c,utils as z}from"@rango-dev/wallets-core/namespaces/evm";var[K,g]=c.changeAccountSubscriber(i).format(async(e,t)=>{let r=await e.request({method:"eth_chainId"});return z.formatAccountsToCAIP([t[0]],r)}).build(),X=c.connect().action(l.connect(i)).before(K).or(g).or(H).build(),Z=c.canEagerConnect().action(l.canEagerConnect(i)).build(),q=V.disconnect().after(g).build(),G=c.canSwitchNetwork().action(l.canSwitchNetwork()).build(),k=new j("EVM",s).action(X).action(q).action(G).action(Z).build();var u=o(()=>new J(s).init(function(e){let[,t]=e.state();a()&&(t("installed",!0),console.debug("[metamask] instance detected.",e))}).config("metadata",p).add("evm",k).build(),"buildProvider");var Be=o(()=>Q().version("0.0.0",d()).version("1.0.0",u()).build(),"versions");export{Be as versions};
2
+ //# sourceMappingURL=mod.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/mod.ts", "../src/legacy/index.ts", "../src/signer.ts", "../src/utils.ts", "../src/provider.ts", "../src/constants.ts", "../src/namespaces/evm.ts"],
4
+ "sourcesContent": ["import { defineVersions } from '@rango-dev/wallets-core/utils';\n\nimport { buildLegacyProvider } from './legacy/index.js';\nimport { buildProvider } from './provider.js';\n\nconst versions = () =>\n defineVersions()\n .version('0.0.0', buildLegacyProvider())\n .version('1.0.0', buildProvider())\n .build();\n\nexport { versions };\n", "import type { LegacyProviderInterface } from '@rango-dev/wallets-core/legacy';\nimport type {\n CanEagerConnect,\n CanSwitchNetwork,\n Connect,\n Subscribe,\n SwitchNetwork,\n WalletInfo,\n} from '@rango-dev/wallets-shared';\nimport type { BlockchainMeta, SignerFactory } from 'rango-types';\n\nimport {\n canEagerlyConnectToEvm,\n canSwitchNetworkToEvm,\n getEvmAccounts,\n subscribeToEvm,\n switchNetworkForEvm,\n WalletTypes,\n} from '@rango-dev/wallets-shared';\nimport { evmBlockchains } from 'rango-types';\n\nimport signer from '../signer.js';\nimport { metamask as metamask_instance, type Provider } from '../utils.js';\n\nconst WALLET = WalletTypes.META_MASK;\n\nexport const config = {\n type: WALLET,\n};\n\nexport const getInstance = metamask_instance;\nexport const connect: Connect = async ({ instance }) => {\n /*\n * Note: We need to get `chainId` here, because for the first time\n * after opening the browser, wallet is locked, and don't give us accounts and chainId\n * on `check` phase, so `network` will be null. For this case we need to get chainId\n * whenever we are requesting accounts.\n */\n const { accounts, chainId } = await getEvmAccounts(instance);\n\n return {\n accounts,\n chainId,\n };\n};\n\nexport const subscribe: Subscribe = subscribeToEvm;\n\nexport const switchNetwork: SwitchNetwork = switchNetworkForEvm;\n\nexport const canSwitchNetworkTo: CanSwitchNetwork = canSwitchNetworkToEvm;\n\nexport const getSigners: (provider: Provider) => Promise<SignerFactory> =\n signer;\n\nexport const canEagerConnect: CanEagerConnect = canEagerlyConnectToEvm;\n\nexport const getWalletInfo: (allBlockChains: BlockchainMeta[]) => WalletInfo = (\n allBlockChains\n) => {\n const evms = evmBlockchains(allBlockChains);\n return {\n name: 'MetaMask',\n img: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/metamask/icon.svg',\n installLink: {\n CHROME:\n 'https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn?hl=en',\n BRAVE:\n 'https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn?hl=en',\n\n FIREFOX: 'https://addons.mozilla.org/en-US/firefox/addon/ether-metamask',\n EDGE: 'https://microsoftedge.microsoft.com/addons/detail/metamask/ejbalbakoplchlghecdalmeeeajnimhm?hl=en-US',\n DEFAULT: 'https://metamask.io/download/',\n },\n color: '#dac7ae',\n supportedChains: evms,\n };\n};\nconst buildLegacyProvider: () => LegacyProviderInterface = () => ({\n config,\n getInstance,\n connect,\n subscribe,\n getSigners,\n getWalletInfo,\n canSwitchNetworkTo,\n canEagerConnect,\n});\n\nexport { buildLegacyProvider };\n", "import type { Provider } from './utils.js';\nimport type { SignerFactory } from 'rango-types';\n\nimport { LegacyNetworks as Networks } from '@rango-dev/wallets-core/legacy';\nimport {\n dynamicImportWithRefinedError,\n getNetworkInstance,\n} from '@rango-dev/wallets-shared';\nimport { DefaultSignerFactory, TransactionType as TxType } from 'rango-types';\n\nexport default async function getSigners(\n provider: Provider\n): Promise<SignerFactory> {\n const ethProvider = getNetworkInstance(provider, Networks.ETHEREUM);\n const signers = new DefaultSignerFactory();\n const { DefaultEvmSigner } = await dynamicImportWithRefinedError(\n async () => await import('@rango-dev/signer-evm')\n );\n signers.registerSigner(TxType.EVM, new DefaultEvmSigner(ethProvider));\n\n return signers;\n}\n", "import type { ProviderAPI as EvmProviderApi } from '@rango-dev/wallets-core/namespaces/evm';\n\nimport { LegacyNetworks } from '@rango-dev/wallets-core/legacy';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type Provider = Record<string, any>;\n\nexport function metamask(): Provider | null {\n const { ethereum } = window;\n\n if (!ethereum || !isEthereumMetamaskProvider(ethereum)) {\n return null;\n }\n\n const instances: Provider = new Map();\n\n if (ethereum) {\n instances.set(LegacyNetworks.ETHEREUM, ethereum);\n }\n\n return instances;\n}\nfunction isEthereumMetamaskProvider(ethereum: Provider): boolean {\n if (!ethereum?.isMetaMask) {\n return false;\n }\n /*\n * Brave tries to make itself look like MetaMask\n * Could also try RPC `web3_clientVersion` if following is unreliable\n */\n if (ethereum.isBraveWallet && !ethereum._events && !ethereum._state) {\n return false;\n }\n if (ethereum.isApexWallet) {\n return false;\n }\n if (ethereum.isAvalanche) {\n return false;\n }\n if (ethereum.isBitKeep) {\n return false;\n }\n if (ethereum.isBlockWallet) {\n return false;\n }\n if (ethereum.isCoin98) {\n return false;\n }\n if (ethereum.isFordefi) {\n return false;\n }\n if (ethereum.__XDEFI) {\n return false;\n }\n if (ethereum.isMathWallet) {\n return false;\n }\n if (ethereum.isOkxWallet || ethereum.isOKExWallet) {\n return false;\n }\n if (ethereum.isOneInchIOSWallet || ethereum.isOneInchAndroidWallet) {\n return false;\n }\n if (ethereum.isOpera) {\n return false;\n }\n if (ethereum.isPortal) {\n return false;\n }\n if (ethereum.isRabby) {\n return false;\n }\n if (ethereum.isDefiant) {\n return false;\n }\n if (ethereum.isTokenPocket) {\n return false;\n }\n if (ethereum.isTokenary) {\n return false;\n }\n if (ethereum.isZeal) {\n return false;\n }\n if (ethereum.isZerion) {\n return false;\n }\n if (ethereum.isPhantom) {\n return false;\n }\n if (ethereum.isSafePal) {\n return false;\n }\n return true;\n}\nexport function evmMetamask(): EvmProviderApi {\n const instances = metamask();\n\n const evmInstance = instances?.get(LegacyNetworks.ETHEREUM);\n\n if (!evmInstance) {\n throw new Error(\n 'Metamask not injected or EVM not enabled. Please check your wallet.'\n );\n }\n\n return evmInstance as EvmProviderApi;\n}\nexport function getInstanceOrThrow(): Provider {\n const instances = metamask();\n\n if (!instances) {\n throw new Error('MetaMask is not injected. Please check your wallet.');\n }\n\n return instances;\n}\n", "import { ProviderBuilder } from '@rango-dev/wallets-core';\n\nimport { metadata, WALLET_ID } from './constants.js';\nimport { evm } from './namespaces/evm.js';\nimport { metamask as metamask } from './utils.js';\n\nconst buildProvider = () =>\n new ProviderBuilder(WALLET_ID)\n .init(function (context) {\n const [, setState] = context.state();\n\n if (metamask()) {\n setState('installed', true);\n console.debug('[metamask] instance detected.', context);\n }\n })\n .config('metadata', metadata)\n .add('evm', evm)\n .build();\n\nexport { buildProvider };\n", "import { type ProviderMetadata } from '@rango-dev/wallets-core';\nimport { type BlockchainMeta, evmBlockchains } from 'rango-types';\n\nimport getSigners from './signer.js';\nimport { getInstanceOrThrow } from './utils.js';\n\nexport const WALLET_ID = 'metamask';\n\nexport const metadata: ProviderMetadata = {\n name: 'MetaMask',\n icon: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/metamask/icon.svg',\n extensions: {\n chrome:\n 'https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn?hl=en',\n brave:\n 'https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn?hl=en',\n firefox: 'https://addons.mozilla.org/en-US/firefox/addon/ether-metamask',\n edge: 'https://microsoftedge.microsoft.com/addons/detail/metamask/ejbalbakoplchlghecdalmeeeajnimhm?hl=en-US',\n homepage: 'https://metamask.io/download/',\n },\n properties: [\n {\n name: 'namespaces',\n value: {\n selection: 'multiple',\n data: [\n {\n label: 'EVM',\n value: 'EVM',\n id: 'ETH',\n getSupportedChains: (allBlockchains: BlockchainMeta[]) =>\n evmBlockchains(allBlockchains),\n },\n ],\n },\n },\n {\n name: 'signers',\n value: {\n getSigners: async () => getSigners(getInstanceOrThrow()),\n },\n },\n ],\n};\n", "import type { EvmActions } from '@rango-dev/wallets-core/namespaces/evm';\n\nimport { NamespaceBuilder } from '@rango-dev/wallets-core';\nimport {\n builders as commonBuilders,\n standardizeAndThrowError,\n} from '@rango-dev/wallets-core/namespaces/common';\nimport {\n actions,\n builders,\n utils,\n} from '@rango-dev/wallets-core/namespaces/evm';\n\nimport { WALLET_ID } from '../constants.js';\nimport { evmMetamask } from '../utils.js';\n\nconst [changeAccountSubscriber, changeAccountCleanup] = builders\n .changeAccountSubscriber(evmMetamask)\n /*\n * Metamask returns an array of connected accounts with the active one first.\n * Since we only need the active account, we take the first element as a workaround.\n */\n .format(async (instance, accounts) => {\n const chainId = await instance.request({ method: 'eth_chainId' });\n return utils.formatAccountsToCAIP([accounts[0]], chainId);\n })\n .build();\n\nconst connect = builders\n .connect()\n .action(actions.connect(evmMetamask))\n .before(changeAccountSubscriber)\n .or(changeAccountCleanup)\n .or(standardizeAndThrowError)\n .build();\n\nconst canEagerConnect = builders\n .canEagerConnect()\n .action(actions.canEagerConnect(evmMetamask))\n .build();\n\nconst disconnect = commonBuilders\n .disconnect<EvmActions>()\n .after(changeAccountCleanup)\n .build();\n\nconst canSwitchNetwork = builders\n .canSwitchNetwork()\n .action(actions.canSwitchNetwork())\n .build();\n\nconst evm = new NamespaceBuilder<EvmActions>('EVM', WALLET_ID)\n .action(connect)\n .action(disconnect)\n .action(canSwitchNetwork)\n .action(canEagerConnect)\n .build();\n\nexport { evm };\n"],
5
+ "mappings": "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",
6
+ "names": ["defineVersions", "canEagerlyConnectToEvm", "canSwitchNetworkToEvm", "getEvmAccounts", "subscribeToEvm", "switchNetworkForEvm", "WalletTypes", "evmBlockchains", "Networks", "dynamicImportWithRefinedError", "getNetworkInstance", "DefaultSignerFactory", "TxType", "getSigners", "provider", "ethProvider", "getNetworkInstance", "Networks", "signers", "DefaultSignerFactory", "DefaultEvmSigner", "dynamicImportWithRefinedError", "TxType", "__name", "LegacyNetworks", "metamask", "ethereum", "isEthereumMetamaskProvider", "instances", "LegacyNetworks", "__name", "evmMetamask", "evmInstance", "getInstanceOrThrow", "WALLET", "WalletTypes", "config", "getInstance", "metamask", "connect", "__name", "instance", "accounts", "chainId", "getEvmAccounts", "subscribe", "subscribeToEvm", "canSwitchNetworkTo", "canSwitchNetworkToEvm", "getSigners", "canEagerConnect", "canEagerlyConnectToEvm", "getWalletInfo", "__name", "allBlockChains", "evms", "evmBlockchains", "buildLegacyProvider", "config", "getInstance", "connect", "subscribe", "ProviderBuilder", "evmBlockchains", "WALLET_ID", "metadata", "allBlockchains", "evmBlockchains", "getSigners", "getInstanceOrThrow", "NamespaceBuilder", "commonBuilders", "standardizeAndThrowError", "actions", "builders", "utils", "changeAccountSubscriber", "changeAccountCleanup", "builders", "evmMetamask", "instance", "accounts", "chainId", "utils", "connect", "actions", "standardizeAndThrowError", "canEagerConnect", "disconnect", "commonBuilders", "canSwitchNetwork", "evm", "NamespaceBuilder", "WALLET_ID", "buildProvider", "__name", "ProviderBuilder", "WALLET_ID", "context", "setState", "metamask", "metadata", "evm", "versions", "__name", "defineVersions", "buildLegacyProvider", "buildProvider"]
7
+ }
@@ -0,0 +1,4 @@
1
+ import type { EvmActions } from '@rango-dev/wallets-core/namespaces/evm';
2
+ declare const evm: import("@rango-dev/wallets-core").ProxiedNamespace<EvmActions>;
3
+ export { evm };
4
+ //# sourceMappingURL=evm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evm.d.ts","sourceRoot":"","sources":["../../src/namespaces/evm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAmDzE,QAAA,MAAM,GAAG,gEAKC,CAAC;AAEX,OAAO,EAAE,GAAG,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"inputs":{"src/helpers.ts":{"bytes":2181,"imports":[{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/signer.ts":{"bytes":638,"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"@rango-dev/signer-evm","kind":"dynamic-import","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":2309,"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"src/helpers.ts","kind":"import-statement","original":"./helpers.js"},{"path":"src/signer.ts","kind":"import-statement","original":"./signer.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"dist/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":7832},"dist/index.js":{"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"@rango-dev/signer-evm","kind":"dynamic-import","external":true}],"exports":["canEagerConnect","canSwitchNetworkTo","config","connect","getInstance","getSigners","getWalletInfo","subscribe","switchNetwork"],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":997},"src/helpers.ts":{"bytesInOutput":658},"src/signer.ts":{"bytesInOutput":315}},"bytes":2248}}}
1
+ {"inputs":{"src/signer.ts":{"bytes":781,"imports":[{"path":"@rango-dev/wallets-core/legacy","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"@rango-dev/signer-evm","kind":"dynamic-import","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/utils.ts":{"bytes":2534,"imports":[{"path":"@rango-dev/wallets-core/legacy","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/legacy/index.ts":{"bytes":2636,"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"src/signer.ts","kind":"import-statement","original":"../signer.js"},{"path":"src/utils.ts","kind":"import-statement","original":"../utils.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/constants.ts":{"bytes":1389,"imports":[{"path":"@rango-dev/wallets-core","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"src/signer.ts","kind":"import-statement","original":"./signer.js"},{"path":"src/utils.ts","kind":"import-statement","original":"./utils.js"}],"format":"esm"},"src/namespaces/evm.ts":{"bytes":1613,"imports":[{"path":"@rango-dev/wallets-core","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core/namespaces/common","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core/namespaces/evm","kind":"import-statement","external":true},{"path":"src/constants.ts","kind":"import-statement","original":"../constants.js"},{"path":"src/utils.ts","kind":"import-statement","original":"../utils.js"}],"format":"esm"},"src/provider.ts":{"bytes":583,"imports":[{"path":"@rango-dev/wallets-core","kind":"import-statement","external":true},{"path":"src/constants.ts","kind":"import-statement","original":"./constants.js"},{"path":"src/namespaces/evm.ts","kind":"import-statement","original":"./namespaces/evm.js"},{"path":"src/utils.ts","kind":"import-statement","original":"./utils.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/mod.ts":{"bytes":332,"imports":[{"path":"@rango-dev/wallets-core/utils","kind":"import-statement","external":true},{"path":"src/legacy/index.ts","kind":"import-statement","original":"./legacy/index.js"},{"path":"src/provider.ts","kind":"import-statement","original":"./provider.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"dist/mod.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":15645},"dist/mod.js":{"imports":[{"path":"@rango-dev/wallets-core/utils","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core/legacy","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"@rango-dev/signer-evm","kind":"dynamic-import","external":true},{"path":"@rango-dev/wallets-core/legacy","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core/namespaces/common","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core/namespaces/evm","kind":"import-statement","external":true}],"exports":["versions"],"entryPoint":"src/mod.ts","inputs":{"src/mod.ts":{"bytesInOutput":142},"src/legacy/index.ts":{"bytesInOutput":1146},"src/signer.ts":{"bytesInOutput":421},"src/utils.ts":{"bytesInOutput":913},"src/provider.ts":{"bytesInOutput":249},"src/constants.ts":{"bytesInOutput":822},"src/namespaces/evm.ts":{"bytesInOutput":685}},"bytes":4513}}}
@@ -0,0 +1,3 @@
1
+ declare const buildProvider: () => import("@rango-dev/wallets-core").Provider;
2
+ export { buildProvider };
3
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAMA,QAAA,MAAM,aAAa,kDAYP,CAAC;AAEb,OAAO,EAAE,aAAa,EAAE,CAAC"}
package/dist/signer.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { ProviderAPI } from '@rango-dev/wallets-core/namespaces/evm';
1
+ import type { Provider } from './utils.js';
2
2
  import type { SignerFactory } from 'rango-types';
3
- export default function getSigners(provider: ProviderAPI): Promise<SignerFactory>;
3
+ export default function getSigners(provider: Provider): Promise<SignerFactory>;
4
4
  //# sourceMappingURL=signer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAKjD,wBAA8B,UAAU,CACtC,QAAQ,EAAE,WAAW,GACpB,OAAO,CAAC,aAAa,CAAC,CAOxB"}
1
+ {"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AASjD,wBAA8B,UAAU,CACtC,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,aAAa,CAAC,CASxB"}
@@ -0,0 +1,6 @@
1
+ import type { ProviderAPI as EvmProviderApi } from '@rango-dev/wallets-core/namespaces/evm';
2
+ export type Provider = Record<string, any>;
3
+ export declare function metamask(): Provider | null;
4
+ export declare function evmMetamask(): EvmProviderApi;
5
+ export declare function getInstanceOrThrow(): Provider;
6
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,IAAI,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAK5F,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE3C,wBAAgB,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAc1C;AA0ED,wBAAgB,WAAW,IAAI,cAAc,CAY5C;AACD,wBAAgB,kBAAkB,IAAI,QAAQ,CAQ7C"}
package/package.json CHANGED
@@ -1,20 +1,20 @@
1
1
  {
2
2
  "name": "@rango-dev/provider-metamask",
3
- "version": "0.50.1-next.3",
3
+ "version": "0.51.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
- "source": "./src/index.ts",
7
- "main": "./dist/index.js",
6
+ "source": "./src/mod.ts",
7
+ "main": "./dist/mod.js",
8
8
  "exports": {
9
- ".": "./dist/index.js"
9
+ ".": "./dist/mod.js"
10
10
  },
11
- "typings": "dist/index.d.ts",
11
+ "typings": "dist/mod.d.ts",
12
12
  "files": [
13
13
  "dist",
14
14
  "src"
15
15
  ],
16
16
  "scripts": {
17
- "build": "node ../../scripts/build/command.mjs --path wallets/provider-metamask",
17
+ "build": "node ../../scripts/build/command.mjs --path wallets/provider-metamask --inputs src/mod.ts",
18
18
  "ts-check": "tsc --declaration --emitDeclarationOnly -p ./tsconfig.json",
19
19
  "clean": "rimraf dist",
20
20
  "format": "prettier --write '{.,src}/**/*.{ts,tsx}'",
@@ -22,8 +22,8 @@
22
22
  },
23
23
  "dependencies": {
24
24
  "@rango-dev/signer-evm": "^0.40.0",
25
- "@rango-dev/wallets-core": "^0.49.1-next.3",
26
- "@rango-dev/wallets-shared": "^0.50.1-next.3",
25
+ "@rango-dev/wallets-core": "^0.50.0",
26
+ "@rango-dev/wallets-shared": "^0.51.0",
27
27
  "rango-types": "^0.1.89"
28
28
  },
29
29
  "publishConfig": {
package/readme.md CHANGED
@@ -1 +1,20 @@
1
- # @rango-dev/provider-metamask
1
+ # MetaMask
2
+ MetaMask Wallet integration for hub.
3
+ [Homepage](https://metamask.io/) | [Docs](https://docs.metamask.io/)
4
+
5
+ More about implementation status can be found [here](../readme.md).
6
+
7
+ ## Implementation notes/limitations
8
+
9
+ ### Group
10
+
11
+ #### 🚧 Solana
12
+ MetaMask supports both **EVM** and **Solana**, but this integration currently supports **only EVM** and **Solana** is under construction.
13
+
14
+ ### Feature
15
+
16
+ All implemented features are working correctly.
17
+
18
+ ---
19
+
20
+ More wallet information can be found in [readme.md](../readme.md).
@@ -0,0 +1,44 @@
1
+ import { type ProviderMetadata } from '@rango-dev/wallets-core';
2
+ import { type BlockchainMeta, evmBlockchains } from 'rango-types';
3
+
4
+ import getSigners from './signer.js';
5
+ import { getInstanceOrThrow } from './utils.js';
6
+
7
+ export const WALLET_ID = 'metamask';
8
+
9
+ export const metadata: ProviderMetadata = {
10
+ name: 'MetaMask',
11
+ icon: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/metamask/icon.svg',
12
+ extensions: {
13
+ chrome:
14
+ 'https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn?hl=en',
15
+ brave:
16
+ 'https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn?hl=en',
17
+ firefox: 'https://addons.mozilla.org/en-US/firefox/addon/ether-metamask',
18
+ edge: 'https://microsoftedge.microsoft.com/addons/detail/metamask/ejbalbakoplchlghecdalmeeeajnimhm?hl=en-US',
19
+ homepage: 'https://metamask.io/download/',
20
+ },
21
+ properties: [
22
+ {
23
+ name: 'namespaces',
24
+ value: {
25
+ selection: 'multiple',
26
+ data: [
27
+ {
28
+ label: 'EVM',
29
+ value: 'EVM',
30
+ id: 'ETH',
31
+ getSupportedChains: (allBlockchains: BlockchainMeta[]) =>
32
+ evmBlockchains(allBlockchains),
33
+ },
34
+ ],
35
+ },
36
+ },
37
+ {
38
+ name: 'signers',
39
+ value: {
40
+ getSigners: async () => getSigners(getInstanceOrThrow()),
41
+ },
42
+ },
43
+ ],
44
+ };
@@ -1,3 +1,4 @@
1
+ import type { LegacyProviderInterface } from '@rango-dev/wallets-core/legacy';
1
2
  import type {
2
3
  CanEagerConnect,
3
4
  CanSwitchNetwork,
@@ -18,8 +19,8 @@ import {
18
19
  } from '@rango-dev/wallets-shared';
19
20
  import { evmBlockchains } from 'rango-types';
20
21
 
21
- import { metamask as metamask_instance } from './helpers.js';
22
- import signer from './signer.js';
22
+ import signer from '../signer.js';
23
+ import { metamask as metamask_instance, type Provider } from '../utils.js';
23
24
 
24
25
  const WALLET = WalletTypes.META_MASK;
25
26
 
@@ -49,7 +50,8 @@ export const switchNetwork: SwitchNetwork = switchNetworkForEvm;
49
50
 
50
51
  export const canSwitchNetworkTo: CanSwitchNetwork = canSwitchNetworkToEvm;
51
52
 
52
- export const getSigners: (provider: any) => Promise<SignerFactory> = signer;
53
+ export const getSigners: (provider: Provider) => Promise<SignerFactory> =
54
+ signer;
53
55
 
54
56
  export const canEagerConnect: CanEagerConnect = canEagerlyConnectToEvm;
55
57
 
@@ -74,3 +76,15 @@ export const getWalletInfo: (allBlockChains: BlockchainMeta[]) => WalletInfo = (
74
76
  supportedChains: evms,
75
77
  };
76
78
  };
79
+ const buildLegacyProvider: () => LegacyProviderInterface = () => ({
80
+ config,
81
+ getInstance,
82
+ connect,
83
+ subscribe,
84
+ getSigners,
85
+ getWalletInfo,
86
+ canSwitchNetworkTo,
87
+ canEagerConnect,
88
+ });
89
+
90
+ export { buildLegacyProvider };
package/src/mod.ts ADDED
@@ -0,0 +1,12 @@
1
+ import { defineVersions } from '@rango-dev/wallets-core/utils';
2
+
3
+ import { buildLegacyProvider } from './legacy/index.js';
4
+ import { buildProvider } from './provider.js';
5
+
6
+ const versions = () =>
7
+ defineVersions()
8
+ .version('0.0.0', buildLegacyProvider())
9
+ .version('1.0.0', buildProvider())
10
+ .build();
11
+
12
+ export { versions };
@@ -0,0 +1,59 @@
1
+ import type { EvmActions } from '@rango-dev/wallets-core/namespaces/evm';
2
+
3
+ import { NamespaceBuilder } from '@rango-dev/wallets-core';
4
+ import {
5
+ builders as commonBuilders,
6
+ standardizeAndThrowError,
7
+ } from '@rango-dev/wallets-core/namespaces/common';
8
+ import {
9
+ actions,
10
+ builders,
11
+ utils,
12
+ } from '@rango-dev/wallets-core/namespaces/evm';
13
+
14
+ import { WALLET_ID } from '../constants.js';
15
+ import { evmMetamask } from '../utils.js';
16
+
17
+ const [changeAccountSubscriber, changeAccountCleanup] = builders
18
+ .changeAccountSubscriber(evmMetamask)
19
+ /*
20
+ * Metamask returns an array of connected accounts with the active one first.
21
+ * Since we only need the active account, we take the first element as a workaround.
22
+ */
23
+ .format(async (instance, accounts) => {
24
+ const chainId = await instance.request({ method: 'eth_chainId' });
25
+ return utils.formatAccountsToCAIP([accounts[0]], chainId);
26
+ })
27
+ .build();
28
+
29
+ const connect = builders
30
+ .connect()
31
+ .action(actions.connect(evmMetamask))
32
+ .before(changeAccountSubscriber)
33
+ .or(changeAccountCleanup)
34
+ .or(standardizeAndThrowError)
35
+ .build();
36
+
37
+ const canEagerConnect = builders
38
+ .canEagerConnect()
39
+ .action(actions.canEagerConnect(evmMetamask))
40
+ .build();
41
+
42
+ const disconnect = commonBuilders
43
+ .disconnect<EvmActions>()
44
+ .after(changeAccountCleanup)
45
+ .build();
46
+
47
+ const canSwitchNetwork = builders
48
+ .canSwitchNetwork()
49
+ .action(actions.canSwitchNetwork())
50
+ .build();
51
+
52
+ const evm = new NamespaceBuilder<EvmActions>('EVM', WALLET_ID)
53
+ .action(connect)
54
+ .action(disconnect)
55
+ .action(canSwitchNetwork)
56
+ .action(canEagerConnect)
57
+ .build();
58
+
59
+ export { evm };
@@ -0,0 +1,21 @@
1
+ import { ProviderBuilder } from '@rango-dev/wallets-core';
2
+
3
+ import { metadata, WALLET_ID } from './constants.js';
4
+ import { evm } from './namespaces/evm.js';
5
+ import { metamask as metamask } from './utils.js';
6
+
7
+ const buildProvider = () =>
8
+ new ProviderBuilder(WALLET_ID)
9
+ .init(function (context) {
10
+ const [, setState] = context.state();
11
+
12
+ if (metamask()) {
13
+ setState('installed', true);
14
+ console.debug('[metamask] instance detected.', context);
15
+ }
16
+ })
17
+ .config('metadata', metadata)
18
+ .add('evm', evm)
19
+ .build();
20
+
21
+ export { buildProvider };
package/src/signer.ts CHANGED
@@ -1,16 +1,22 @@
1
- import type { ProviderAPI } from '@rango-dev/wallets-core/namespaces/evm';
1
+ import type { Provider } from './utils.js';
2
2
  import type { SignerFactory } from 'rango-types';
3
3
 
4
- import { dynamicImportWithRefinedError } from '@rango-dev/wallets-shared';
4
+ import { LegacyNetworks as Networks } from '@rango-dev/wallets-core/legacy';
5
+ import {
6
+ dynamicImportWithRefinedError,
7
+ getNetworkInstance,
8
+ } from '@rango-dev/wallets-shared';
5
9
  import { DefaultSignerFactory, TransactionType as TxType } from 'rango-types';
6
10
 
7
11
  export default async function getSigners(
8
- provider: ProviderAPI
12
+ provider: Provider
9
13
  ): Promise<SignerFactory> {
14
+ const ethProvider = getNetworkInstance(provider, Networks.ETHEREUM);
10
15
  const signers = new DefaultSignerFactory();
11
16
  const { DefaultEvmSigner } = await dynamicImportWithRefinedError(
12
17
  async () => await import('@rango-dev/signer-evm')
13
18
  );
14
- signers.registerSigner(TxType.EVM, new DefaultEvmSigner(provider));
19
+ signers.registerSigner(TxType.EVM, new DefaultEvmSigner(ethProvider));
20
+
15
21
  return signers;
16
22
  }
@@ -1,6 +1,27 @@
1
- function isMetamaskProvider(ethereum: any): boolean {
2
- const isMetamask = !!ethereum?.isMetaMask;
3
- if (!isMetamask) {
1
+ import type { ProviderAPI as EvmProviderApi } from '@rango-dev/wallets-core/namespaces/evm';
2
+
3
+ import { LegacyNetworks } from '@rango-dev/wallets-core/legacy';
4
+
5
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6
+ export type Provider = Record<string, any>;
7
+
8
+ export function metamask(): Provider | null {
9
+ const { ethereum } = window;
10
+
11
+ if (!ethereum || !isEthereumMetamaskProvider(ethereum)) {
12
+ return null;
13
+ }
14
+
15
+ const instances: Provider = new Map();
16
+
17
+ if (ethereum) {
18
+ instances.set(LegacyNetworks.ETHEREUM, ethereum);
19
+ }
20
+
21
+ return instances;
22
+ }
23
+ function isEthereumMetamaskProvider(ethereum: Provider): boolean {
24
+ if (!ethereum?.isMetaMask) {
4
25
  return false;
5
26
  }
6
27
  /*
@@ -64,32 +85,33 @@ function isMetamaskProvider(ethereum: any): boolean {
64
85
  if (ethereum.isZerion) {
65
86
  return false;
66
87
  }
88
+ if (ethereum.isPhantom) {
89
+ return false;
90
+ }
91
+ if (ethereum.isSafePal) {
92
+ return false;
93
+ }
67
94
  return true;
68
95
  }
96
+ export function evmMetamask(): EvmProviderApi {
97
+ const instances = metamask();
69
98
 
70
- export function metamask() {
71
- const { ethereum } = window;
99
+ const evmInstance = instances?.get(LegacyNetworks.ETHEREUM);
72
100
 
73
- if (Array.isArray(ethereum?.providers)) {
74
- /*
75
- * When alternative EVM wallets are enabled and take precedence over MetaMask,
76
- * they append MetaMask or other EVM wallets to the ethereum.providers array.
77
- * example: 'Core' wallet
78
- */
79
- let providers = ethereum.providers;
80
- //Exceptions exist, such as when only 'MetaMask' and 'Coinbase' are enabled.
81
- if (
82
- providers.length > 0 &&
83
- Array.isArray(ethereum.providers[0]?.providers) &&
84
- providers[0]?.providers.length > 0
85
- ) {
86
- providers = providers[0]?.providers;
87
- }
101
+ if (!evmInstance) {
102
+ throw new Error(
103
+ 'Metamask not injected or EVM not enabled. Please check your wallet.'
104
+ );
105
+ }
88
106
 
89
- const metamaskProvider = providers.find(isMetamaskProvider);
90
- if (metamaskProvider) {
91
- return metamaskProvider;
92
- }
107
+ return evmInstance as EvmProviderApi;
108
+ }
109
+ export function getInstanceOrThrow(): Provider {
110
+ const instances = metamask();
111
+
112
+ if (!instances) {
113
+ throw new Error('MetaMask is not injected. Please check your wallet.');
93
114
  }
94
- return ethereum?.isMetaMask ? ethereum : null;
115
+
116
+ return instances;
95
117
  }
package/dist/helpers.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export declare function metamask(): any;
2
- //# sourceMappingURL=helpers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAqEA,wBAAgB,QAAQ,QAyBvB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,OAAO,EACP,SAAS,EACT,aAAa,EACb,UAAU,EACX,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,EAML,WAAW,EACZ,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAK7D,eAAO,MAAM,MAAM;;CAElB,CAAC;AAEF,eAAO,MAAM,WAAW,0BAAoB,CAAC;AAC7C,eAAO,MAAM,OAAO,EAAE,OAarB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,SAA0B,CAAC;AAEnD,eAAO,MAAM,aAAa,EAAE,aAAmC,CAAC;AAEhE,eAAO,MAAM,kBAAkB,EAAE,gBAAwC,CAAC;AAE1E,eAAO,MAAM,UAAU,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,OAAO,CAAC,aAAa,CAAU,CAAC;AAE5E,eAAO,MAAM,eAAe,EAAE,eAAwC,CAAC;AAEvE,eAAO,MAAM,aAAa,EAAE,CAAC,cAAc,EAAE,cAAc,EAAE,KAAK,UAoBjE,CAAC"}
package/dist/index.js DELETED
@@ -1,2 +0,0 @@
1
- var s=Object.defineProperty;var r=(e,t)=>s(e,"name",{value:t,configurable:!0});import{canEagerlyConnectToEvm as p,canSwitchNetworkToEvm as m,getEvmAccounts as g,subscribeToEvm as d,switchNetworkForEvm as k,WalletTypes as w}from"@rango-dev/wallets-shared";import{evmBlockchains as y}from"rango-types";function i(e){return!(!!!e?.isMetaMask||e.isBraveWallet&&!e._events&&!e._state||e.isApexWallet||e.isAvalanche||e.isBitKeep||e.isBlockWallet||e.isCoin98||e.isFordefi||e.__XDEFI||e.isMathWallet||e.isOkxWallet||e.isOKExWallet||e.isOneInchIOSWallet||e.isOneInchAndroidWallet||e.isOpera||e.isPortal||e.isRabby||e.isDefiant||e.isTokenPocket||e.isTokenary||e.isZeal||e.isZerion)}r(i,"isMetamaskProvider");function n(){let{ethereum:e}=window;if(Array.isArray(e?.providers)){let t=e.providers;t.length>0&&Array.isArray(e.providers[0]?.providers)&&t[0]?.providers.length>0&&(t=t[0]?.providers);let a=t.find(i);if(a)return a}return e?.isMetaMask?e:null}r(n,"metamask");import{dynamicImportWithRefinedError as c}from"@rango-dev/wallets-shared";import{DefaultSignerFactory as l,TransactionType as f}from"rango-types";async function o(e){let t=new l,{DefaultEvmSigner:a}=await c(async()=>await import("@rango-dev/signer-evm"));return t.registerSigner(f.EVM,new a(e)),t}r(o,"getSigners");var v=w.META_MASK,I={type:v},F=n,P=r(async({instance:e})=>{let{accounts:t,chainId:a}=await g(e);return{accounts:t,chainId:a}},"connect"),B=d,N=k,O=m,D=o,_=p,R=r(e=>{let t=y(e);return{name:"MetaMask",img:"https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/metamask/icon.svg",installLink:{CHROME:"https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn?hl=en",BRAVE:"https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn?hl=en",FIREFOX:"https://addons.mozilla.org/en-US/firefox/addon/ether-metamask",EDGE:"https://microsoftedge.microsoft.com/addons/detail/metamask/ejbalbakoplchlghecdalmeeeajnimhm?hl=en-US",DEFAULT:"https://metamask.io/download/"},color:"#dac7ae",supportedChains:t}},"getWalletInfo");export{_ as canEagerConnect,O as canSwitchNetworkTo,I as config,P as connect,F as getInstance,D as getSigners,R as getWalletInfo,B as subscribe,N as switchNetwork};
2
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/index.ts", "../src/helpers.ts", "../src/signer.ts"],
4
- "sourcesContent": ["import type {\n CanEagerConnect,\n CanSwitchNetwork,\n Connect,\n Subscribe,\n SwitchNetwork,\n WalletInfo,\n} from '@rango-dev/wallets-shared';\nimport type { BlockchainMeta, SignerFactory } from 'rango-types';\n\nimport {\n canEagerlyConnectToEvm,\n canSwitchNetworkToEvm,\n getEvmAccounts,\n subscribeToEvm,\n switchNetworkForEvm,\n WalletTypes,\n} from '@rango-dev/wallets-shared';\nimport { evmBlockchains } from 'rango-types';\n\nimport { metamask as metamask_instance } from './helpers.js';\nimport signer from './signer.js';\n\nconst WALLET = WalletTypes.META_MASK;\n\nexport const config = {\n type: WALLET,\n};\n\nexport const getInstance = metamask_instance;\nexport const connect: Connect = async ({ instance }) => {\n /*\n * Note: We need to get `chainId` here, because for the first time\n * after opening the browser, wallet is locked, and don't give us accounts and chainId\n * on `check` phase, so `network` will be null. For this case we need to get chainId\n * whenever we are requesting accounts.\n */\n const { accounts, chainId } = await getEvmAccounts(instance);\n\n return {\n accounts,\n chainId,\n };\n};\n\nexport const subscribe: Subscribe = subscribeToEvm;\n\nexport const switchNetwork: SwitchNetwork = switchNetworkForEvm;\n\nexport const canSwitchNetworkTo: CanSwitchNetwork = canSwitchNetworkToEvm;\n\nexport const getSigners: (provider: any) => Promise<SignerFactory> = signer;\n\nexport const canEagerConnect: CanEagerConnect = canEagerlyConnectToEvm;\n\nexport const getWalletInfo: (allBlockChains: BlockchainMeta[]) => WalletInfo = (\n allBlockChains\n) => {\n const evms = evmBlockchains(allBlockChains);\n return {\n name: 'MetaMask',\n img: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/metamask/icon.svg',\n installLink: {\n CHROME:\n 'https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn?hl=en',\n BRAVE:\n 'https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn?hl=en',\n\n FIREFOX: 'https://addons.mozilla.org/en-US/firefox/addon/ether-metamask',\n EDGE: 'https://microsoftedge.microsoft.com/addons/detail/metamask/ejbalbakoplchlghecdalmeeeajnimhm?hl=en-US',\n DEFAULT: 'https://metamask.io/download/',\n },\n color: '#dac7ae',\n supportedChains: evms,\n };\n};\n", "function isMetamaskProvider(ethereum: any): boolean {\n const isMetamask = !!ethereum?.isMetaMask;\n if (!isMetamask) {\n return false;\n }\n /*\n * Brave tries to make itself look like MetaMask\n * Could also try RPC `web3_clientVersion` if following is unreliable\n */\n if (ethereum.isBraveWallet && !ethereum._events && !ethereum._state) {\n return false;\n }\n if (ethereum.isApexWallet) {\n return false;\n }\n if (ethereum.isAvalanche) {\n return false;\n }\n if (ethereum.isBitKeep) {\n return false;\n }\n if (ethereum.isBlockWallet) {\n return false;\n }\n if (ethereum.isCoin98) {\n return false;\n }\n if (ethereum.isFordefi) {\n return false;\n }\n if (ethereum.__XDEFI) {\n return false;\n }\n if (ethereum.isMathWallet) {\n return false;\n }\n if (ethereum.isOkxWallet || ethereum.isOKExWallet) {\n return false;\n }\n if (ethereum.isOneInchIOSWallet || ethereum.isOneInchAndroidWallet) {\n return false;\n }\n if (ethereum.isOpera) {\n return false;\n }\n if (ethereum.isPortal) {\n return false;\n }\n if (ethereum.isRabby) {\n return false;\n }\n if (ethereum.isDefiant) {\n return false;\n }\n if (ethereum.isTokenPocket) {\n return false;\n }\n if (ethereum.isTokenary) {\n return false;\n }\n if (ethereum.isZeal) {\n return false;\n }\n if (ethereum.isZerion) {\n return false;\n }\n return true;\n}\n\nexport function metamask() {\n const { ethereum } = window;\n\n if (Array.isArray(ethereum?.providers)) {\n /*\n * When alternative EVM wallets are enabled and take precedence over MetaMask,\n * they append MetaMask or other EVM wallets to the ethereum.providers array.\n * example: 'Core' wallet\n */\n let providers = ethereum.providers;\n //Exceptions exist, such as when only 'MetaMask' and 'Coinbase' are enabled.\n if (\n providers.length > 0 &&\n Array.isArray(ethereum.providers[0]?.providers) &&\n providers[0]?.providers.length > 0\n ) {\n providers = providers[0]?.providers;\n }\n\n const metamaskProvider = providers.find(isMetamaskProvider);\n if (metamaskProvider) {\n return metamaskProvider;\n }\n }\n return ethereum?.isMetaMask ? ethereum : null;\n}\n", "import type { ProviderAPI } from '@rango-dev/wallets-core/namespaces/evm';\nimport type { SignerFactory } from 'rango-types';\n\nimport { dynamicImportWithRefinedError } from '@rango-dev/wallets-shared';\nimport { DefaultSignerFactory, TransactionType as TxType } from 'rango-types';\n\nexport default async function getSigners(\n provider: ProviderAPI\n): Promise<SignerFactory> {\n const signers = new DefaultSignerFactory();\n const { DefaultEvmSigner } = await dynamicImportWithRefinedError(\n async () => await import('@rango-dev/signer-evm')\n );\n signers.registerSigner(TxType.EVM, new DefaultEvmSigner(provider));\n return signers;\n}\n"],
5
- "mappings": "+EAUA,OACE,0BAAAA,EACA,yBAAAC,EACA,kBAAAC,EACA,kBAAAC,EACA,uBAAAC,EACA,eAAAC,MACK,4BACP,OAAS,kBAAAC,MAAsB,cClB/B,SAASC,EAAmBC,EAAwB,CA+DlD,MA7DI,GADe,CAAC,CAACA,GAAU,YAQ3BA,EAAS,eAAiB,CAACA,EAAS,SAAW,CAACA,EAAS,QAGzDA,EAAS,cAGTA,EAAS,aAGTA,EAAS,WAGTA,EAAS,eAGTA,EAAS,UAGTA,EAAS,WAGTA,EAAS,SAGTA,EAAS,cAGTA,EAAS,aAAeA,EAAS,cAGjCA,EAAS,oBAAsBA,EAAS,wBAGxCA,EAAS,SAGTA,EAAS,UAGTA,EAAS,SAGTA,EAAS,WAGTA,EAAS,eAGTA,EAAS,YAGTA,EAAS,QAGTA,EAAS,SAIf,CAnESC,EAAAF,EAAA,sBAqEF,SAASG,GAAW,CACzB,GAAM,CAAE,SAAAF,CAAS,EAAI,OAErB,GAAI,MAAM,QAAQA,GAAU,SAAS,EAAG,CAMtC,IAAIG,EAAYH,EAAS,UAGvBG,EAAU,OAAS,GACnB,MAAM,QAAQH,EAAS,UAAU,CAAC,GAAG,SAAS,GAC9CG,EAAU,CAAC,GAAG,UAAU,OAAS,IAEjCA,EAAYA,EAAU,CAAC,GAAG,WAG5B,IAAMC,EAAmBD,EAAU,KAAKJ,CAAkB,EAC1D,GAAIK,EACF,OAAOA,CAEX,CACA,OAAOJ,GAAU,WAAaA,EAAW,IAC3C,CAzBgBC,EAAAC,EAAA,YClEhB,OAAS,iCAAAG,MAAqC,4BAC9C,OAAS,wBAAAC,EAAsB,mBAAmBC,MAAc,cAEhE,eAAOC,EACLC,EACwB,CACxB,IAAMC,EAAU,IAAIC,EACd,CAAE,iBAAAC,CAAiB,EAAI,MAAMC,EACjC,SAAY,KAAM,QAAO,uBAAuB,CAClD,EACA,OAAAH,EAAQ,eAAeI,EAAO,IAAK,IAAIF,EAAiBH,CAAQ,CAAC,EAC1DC,CACT,CAT8BK,EAAAP,EAAA,cFiB9B,IAAMQ,EAASC,EAAY,UAEdC,EAAS,CACpB,KAAMF,CACR,EAEaG,EAAcC,EACdC,EAAmBC,EAAA,MAAO,CAAE,SAAAC,CAAS,IAAM,CAOtD,GAAM,CAAE,SAAAC,EAAU,QAAAC,CAAQ,EAAI,MAAMC,EAAeH,CAAQ,EAE3D,MAAO,CACL,SAAAC,EACA,QAAAC,CACF,CACF,EAbgC,WAenBE,EAAuBC,EAEvBC,EAA+BC,EAE/BC,EAAuCC,EAEvCC,EAAwDA,EAExDC,EAAmCC,EAEnCC,EAAkEd,EAC7Ee,GACG,CACH,IAAMC,EAAOC,EAAeF,CAAc,EAC1C,MAAO,CACL,KAAM,WACN,IAAK,yFACL,YAAa,CACX,OACE,4FACF,MACE,4FAEF,QAAS,gEACT,KAAM,uGACN,QAAS,+BACX,EACA,MAAO,UACP,gBAAiBC,CACnB,CACF,EApB+E",
6
- "names": ["canEagerlyConnectToEvm", "canSwitchNetworkToEvm", "getEvmAccounts", "subscribeToEvm", "switchNetworkForEvm", "WalletTypes", "evmBlockchains", "isMetamaskProvider", "ethereum", "__name", "metamask", "providers", "metamaskProvider", "dynamicImportWithRefinedError", "DefaultSignerFactory", "TxType", "getSigners", "provider", "signers", "DefaultSignerFactory", "DefaultEvmSigner", "dynamicImportWithRefinedError", "TxType", "__name", "WALLET", "WalletTypes", "config", "getInstance", "metamask", "connect", "__name", "instance", "accounts", "chainId", "getEvmAccounts", "subscribe", "subscribeToEvm", "switchNetwork", "switchNetworkForEvm", "canSwitchNetworkTo", "canSwitchNetworkToEvm", "getSigners", "canEagerConnect", "canEagerlyConnectToEvm", "getWalletInfo", "allBlockChains", "evms", "evmBlockchains"]
7
- }