@rango-dev/provider-exodus 0.53.1-next.0 → 0.54.1-next.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.
- package/dist/actions/solana.d.ts +4 -0
- package/dist/actions/solana.d.ts.map +1 -0
- package/dist/constants.d.ts +6 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/{index.d.ts → legacy/index.d.ts} +7 -3
- package/dist/legacy/index.d.ts.map +1 -0
- package/dist/mod.d.ts +3 -0
- package/dist/mod.d.ts.map +1 -0
- package/dist/mod.js +2 -0
- package/dist/mod.js.map +7 -0
- package/dist/namespaces/evm.d.ts +4 -0
- package/dist/namespaces/evm.d.ts.map +1 -0
- package/dist/namespaces/solana.d.ts +4 -0
- package/dist/namespaces/solana.d.ts.map +1 -0
- package/dist/provider-exodus.build.json +1 -1
- package/dist/provider.d.ts +3 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/signer.d.ts +2 -2
- package/dist/signer.d.ts.map +1 -1
- package/dist/signers/solana.d.ts +6 -0
- package/dist/signers/solana.d.ts.map +1 -0
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/utils.d.ts +8 -0
- package/dist/utils.d.ts.map +1 -0
- package/package.json +8 -8
- package/readme.md +39 -1
- package/src/actions/solana.ts +36 -0
- package/src/constants.ts +58 -0
- package/src/{index.ts → legacy/index.ts} +30 -13
- package/src/mod.ts +12 -0
- package/src/namespaces/evm.ts +44 -0
- package/src/namespaces/solana.ts +34 -0
- package/src/provider.ts +26 -0
- package/src/signer.ts +4 -4
- package/src/{solana-signer.ts → signers/solana.ts} +5 -5
- package/src/types.ts +12 -0
- package/src/utils.ts +58 -0
- package/dist/helpers.d.ts +0 -6
- package/dist/helpers.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +0 -7
- package/dist/solana-signer.d.ts +0 -8
- package/dist/solana-signer.d.ts.map +0 -1
- package/src/helpers.ts +0 -47
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana.d.ts","sourceRoot":"","sources":["../../src/actions/solana.ts"],"names":[],"mappings":"AAmCA,eAAO,MAAM,aAAa;;CAA4B,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type ProviderMetadata } from '@rango-dev/wallets-core';
|
|
2
|
+
import { LegacyNetworks } from '@rango-dev/wallets-core/legacy';
|
|
3
|
+
export declare const WALLET_ID = "exodus";
|
|
4
|
+
export declare const EXODUS_WALLET_SUPPORTED_CHAINS: LegacyNetworks[];
|
|
5
|
+
export declare const metadata: ProviderMetadata;
|
|
6
|
+
//# 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;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAMhE,eAAO,MAAM,SAAS,WAAW,CAAC;AAClC,eAAO,MAAM,8BAA8B,kBAK1C,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,gBA0CtB,CAAC"}
|
|
@@ -1,17 +1,21 @@
|
|
|
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 { Networks, WalletTypes } from '@rango-dev/wallets-shared';
|
|
4
|
-
import {
|
|
5
|
+
import { exodus } from '../utils.js';
|
|
5
6
|
export declare const config: {
|
|
6
7
|
type: WalletTypes;
|
|
7
8
|
defaultNetwork: Networks;
|
|
8
9
|
};
|
|
9
|
-
export declare const getInstance: typeof
|
|
10
|
+
export declare const getInstance: typeof exodus;
|
|
10
11
|
export declare const connect: Connect;
|
|
11
12
|
export declare const subscribe: Subscribe;
|
|
12
13
|
export declare const switchNetwork: SwitchNetwork;
|
|
13
14
|
export declare const canSwitchNetworkTo: CanSwitchNetwork;
|
|
14
|
-
|
|
15
|
+
type Provider = any;
|
|
16
|
+
export declare const getSigners: (provider: Provider) => Promise<SignerFactory>;
|
|
15
17
|
export declare const canEagerConnect: CanEagerConnect;
|
|
16
18
|
export declare const getWalletInfo: (allBlockChains: BlockchainMeta[]) => WalletInfo;
|
|
19
|
+
declare const buildLegacyProvider: () => LegacyProviderInterface;
|
|
20
|
+
export { buildLegacyProvider };
|
|
17
21
|
//# 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,EAEP,SAAS,EACT,aAAa,EACb,UAAU,EACX,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,EAML,QAAQ,EAER,WAAW,EACZ,MAAM,2BAA2B,CAAC;AAKnC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAIrC,eAAO,MAAM,MAAM;;;CAIlB,CAAC;AACF,eAAO,MAAM,WAAW,eAAS,CAAC;AAElC,eAAO,MAAM,OAAO,EAAE,OAcrB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,SAoCvB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,aAU3B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,gBAAwC,CAAC;AAG1E,KAAK,QAAQ,GAAG,GAAG,CAAC;AACpB,eAAO,MAAM,UAAU,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,aAAa,CAC9D,CAAC;AAET,eAAO,MAAM,eAAe,EAAE,eAM7B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,CAAC,cAAc,EAAE,cAAc,EAAE,KAAK,UAgBhE,CAAC;AACH,QAAA,MAAM,mBAAmB,EAAE,MAAM,uBAU/B,CAAC;AAEH,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
|
package/dist/mod.d.ts
ADDED
|
@@ -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 R=Object.defineProperty;var t=(e,o)=>R(e,"name",{value:o,configurable:!0});import{defineVersions as Pe}from"@rango-dev/wallets-core/utils";import{canEagerlyConnectToEvm as D,canSwitchNetworkToEvm as V,chooseInstance as u,getEvmAccounts as F,getSolanaAccounts as X,Networks as a,switchNetworkForEvm as z,WalletTypes as Y}from"@rango-dev/wallets-shared";import{isEvmBlockchain as q,isSolanaBlockchain as G}from"rango-types";import"@rango-dev/wallets-core";import{LegacyNetworks as h}from"@rango-dev/wallets-core/legacy";import{solanaBlockchain as H}from"rango-types";import{dynamicImportWithRefinedError as U,getNetworkInstance as P,Networks as k}from"@rango-dev/wallets-shared";import{DefaultSignerFactory as W,TransactionType as I}from"rango-types";import{DefaultSolanaSigner as B}from"@rango-dev/signer-solana";import _ from"bs58";var f=class extends B{static{t(this,"ExodusSolanaSigner")}constructor(o){super(o)}async signMessage(o){let{signature:n}=await this.provider.signMessage(o);return _.encode(n)}};async function d(e){let o=P(e,k.ETHEREUM),n=P(e,k.SOLANA),r=new W,{DefaultEvmSigner:s}=await U(async()=>await import("@rango-dev/signer-evm"));return r.registerSigner(I.EVM,new s(o)),r.registerSigner(I.SOLANA,new f(n)),r}t(d,"getSigners");import{LegacyNetworks as E}from"@rango-dev/wallets-core/legacy";function c(){let{exodus:e}=window;if(!e)return null;let o=new Map;return e.ethereum&&o.set(E.ETHEREUM,e.ethereum),e.solana&&o.set(E.SOLANA,e.solana),o}t(c,"exodus");function T(){let e=c();if(!e)throw new Error("Exodus Wallet is not injected. Please check your wallet.");return e}t(T,"getInstanceOrThrow");function i(){let o=c()?.get(E.ETHEREUM);if(!o)throw new Error("Exodus Wallet not injected or EVM not enabled. Please check your wallet.");return o}t(i,"evmExodus");function w(){let o=c()?.get(E.SOLANA);if(!o)throw new Error("Exodus Wallet not injected or Solana not enabled. Please check your wallet.");return o}t(w,"solanaExodus");var l="exodus",y=[h.ETHEREUM,h.BSC,h.POLYGON,h.AVAX_CCHAIN],C={name:"Exodus",icon:"https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/exodus/icon.svg",extensions:{chrome:"https://chrome.google.com/webstore/detail/exodus-web3-wallet/aholpfdialjgjfhomihkjbmgjidlcdno",brave:"https://chrome.google.com/webstore/detail/exodus-web3-wallet/aholpfdialjgjfhomihkjbmgjidlcdno",homepage:"https://www.exodus.com/download"},properties:[{name:"namespaces",value:{selection:"multiple",data:[{label:"EVM",value:"EVM",id:"ETH",getSupportedChains:e=>e.filter(o=>y.includes(o.name))},{label:"Solana",value:"Solana",id:"SOLANA",getSupportedChains:e=>H(e)}]}},{name:"signers",value:{getSigners:async()=>d(T())}}]};var J=Y.EXODUS,Q={type:J,defaultNetwork:a.ETHEREUM},Z=c,$=t(async({instance:e,meta:o})=>{let n=u(e,o,a.ETHEREUM),r=[];if(n){let m=await F(n);r.push(m)}let s=await X(e);return r.push(...Array.isArray(s)?s:[s]),r},"connect"),K=t(e=>{let o=u(e.instance,e.meta,a.ETHEREUM),n=u(e.instance,e.meta,a.SOLANA),{connect:r,updateAccounts:s,state:m,updateChainId:x,meta:b}=e;o?.on?.("accountsChanged",p=>{let g=b.filter(q).find(A=>A.name===a.ETHEREUM)?.chainId;m.connected&&(m.network!=a.ETHEREUM&&g&&x(g),s(p))}),n?.on?.("accountChanged",async p=>{m.network!=a.SOLANA&&x(b.filter(G)[0].chainId);let g=a.SOLANA;if(p){let A=p.toString();s([A])}else r(g)})},"subscribe"),ee=t(async e=>{let o=u(e.instance,e.meta,e.network);return z({...e,instance:o})},"switchNetwork"),oe=V,te=d,ne=t(async({instance:e,meta:o})=>{let n=u(e,o,a.ETHEREUM);return n?D({instance:n,meta:o}):Promise.resolve(!1)},"canEagerConnect"),re=t(e=>({name:"Exodus",img:"https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/exodus/icon.svg",installLink:{CHROME:"https://chrome.google.com/webstore/detail/exodus-web3-wallet/aholpfdialjgjfhomihkjbmgjidlcdno",BRAVE:"https://chrome.google.com/webstore/detail/exodus-web3-wallet/aholpfdialjgjfhomihkjbmgjidlcdno",DEFAULT:"https://www.exodus.com/"},color:"#8f70fa",supportedChains:e.filter(o=>y.includes(o.name))}),"getWalletInfo"),L=t(()=>({config:Q,getInstance:Z,connect:$,subscribe:K,switchNetwork:ee,canSwitchNetworkTo:oe,getSigners:te,getWalletInfo:re,canEagerConnect:ne}),"buildLegacyProvider");import{ProviderBuilder as xe}from"@rango-dev/wallets-core";import{NamespaceBuilder as ae}from"@rango-dev/wallets-core";import{builders as se,standardizeAndThrowError as ce}from"@rango-dev/wallets-core/namespaces/common";import{actions as v,builders as S}from"@rango-dev/wallets-core/namespaces/evm";var ie=S.connect().action(v.connect(i)).or(ce).build(),le=se.disconnect().build(),me=S.canSwitchNetwork().action(v.canSwitchNetwork()).build(),de=S.getChainId().action(v.getChainId(i)).build(),ue=S.canEagerConnect().action(v.canEagerConnect(i)).build(),N=new ae("EVM",l).action(ie).action(le).action(ue).action(de).action(me).build();import{ActionBuilder as ge,NamespaceBuilder as fe}from"@rango-dev/wallets-core";import{builders as Ee,standardizeAndThrowError as we}from"@rango-dev/wallets-core/namespaces/common";import{actions as he,builders as ve}from"@rango-dev/wallets-core/namespaces/solana";var pe=t(async()=>{let e=i();if(!w())throw new Error("Trying to eagerly connect to your wallet, but seems its solana instance is not available.");if(!e)throw new Error("Trying to eagerly connect to your EVM wallet, but seems its instance is not available.");try{return!!(await e.request({method:"eth_accounts"})).length}catch{return!1}},"canEagerConnectAction"),M={canEagerConnectAction:pe};var Se=ve.connect().action(he.connect(w)).or(we).build(),Ae=Ee.disconnect().build(),ye=new ge("canEagerConnect").action(M.canEagerConnectAction).build(),j=new fe("Solana",l).action(Se).action(Ae).action(ye).build();var be=1e3,O=t(()=>new xe(l).init(e=>setTimeout(function(){let[,o]=e.state();c()&&(o("installed",!0),console.debug("[exodus] instance detected.",e))},be)).config("metadata",C).add("solana",j).add("evm",N).build(),"buildProvider");var Po=t(()=>Pe().version("0.0.0",L()).version("1.0.0",O()).build(),"versions");export{Po as versions};
|
|
2
|
+
//# sourceMappingURL=mod.js.map
|
package/dist/mod.js.map
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/mod.ts", "../src/legacy/index.ts", "../src/constants.ts", "../src/signer.ts", "../src/signers/solana.ts", "../src/utils.ts", "../src/provider.ts", "../src/namespaces/evm.ts", "../src/namespaces/solana.ts", "../src/actions/solana.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 ProviderConnectResult,\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 chooseInstance,\n getEvmAccounts,\n getSolanaAccounts,\n Networks,\n switchNetworkForEvm,\n WalletTypes,\n} from '@rango-dev/wallets-shared';\nimport { isEvmBlockchain, isSolanaBlockchain } from 'rango-types';\n\nimport { EXODUS_WALLET_SUPPORTED_CHAINS } from '../constants.js';\nimport signer from '../signer.js';\nimport { exodus } from '../utils.js';\n\nconst WALLET = WalletTypes.EXODUS;\n\nexport const config = {\n type: WALLET,\n // TODO: Get from evm networks\n defaultNetwork: Networks.ETHEREUM,\n};\nexport const getInstance = exodus;\n\nexport const connect: Connect = async ({ instance, meta }) => {\n const evmInstance = chooseInstance(instance, meta, Networks.ETHEREUM);\n const results: ProviderConnectResult[] = [];\n\n if (evmInstance) {\n const evm = await getEvmAccounts(evmInstance);\n results.push(evm);\n }\n\n const solanaResults = await getSolanaAccounts(instance);\n results.push(\n ...(Array.isArray(solanaResults) ? solanaResults : [solanaResults])\n );\n return results;\n};\n\nexport const subscribe: Subscribe = (options) => {\n const ethInstance = chooseInstance(\n options.instance,\n options.meta,\n Networks.ETHEREUM\n );\n const solanaInstance = chooseInstance(\n options.instance,\n options.meta,\n Networks.SOLANA\n );\n const { connect, updateAccounts, state, updateChainId, meta } = options;\n ethInstance?.on?.('accountsChanged', (addresses: string[]) => {\n const eth_chainId = meta\n .filter(isEvmBlockchain)\n .find((blockchain) => blockchain.name === Networks.ETHEREUM)?.chainId;\n if (state.connected) {\n if (state.network != Networks.ETHEREUM && eth_chainId) {\n updateChainId(eth_chainId);\n }\n updateAccounts(addresses);\n }\n });\n\n solanaInstance?.on?.('accountChanged', async (publicKey: string) => {\n if (state.network != Networks.SOLANA) {\n updateChainId(meta.filter(isSolanaBlockchain)[0].chainId);\n }\n const network = Networks.SOLANA;\n if (publicKey) {\n const account = publicKey.toString();\n updateAccounts([account]);\n } else {\n connect(network);\n }\n });\n};\n\nexport const switchNetwork: SwitchNetwork = async (options) => {\n const instance = chooseInstance(\n options.instance,\n options.meta,\n options.network\n );\n return switchNetworkForEvm({\n ...options,\n instance,\n });\n};\n\nexport const canSwitchNetworkTo: CanSwitchNetwork = canSwitchNetworkToEvm;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Provider = any;\nexport const getSigners: (provider: Provider) => Promise<SignerFactory> =\n signer;\n\nexport const canEagerConnect: CanEagerConnect = async ({ instance, meta }) => {\n const evm_instance = chooseInstance(instance, meta, Networks.ETHEREUM);\n if (evm_instance) {\n return canEagerlyConnectToEvm({ instance: evm_instance, meta });\n }\n return Promise.resolve(false);\n};\n\nexport const getWalletInfo: (allBlockChains: BlockchainMeta[]) => WalletInfo = (\n allBlockChains\n) => ({\n name: 'Exodus',\n img: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/exodus/icon.svg',\n installLink: {\n CHROME:\n 'https://chrome.google.com/webstore/detail/exodus-web3-wallet/aholpfdialjgjfhomihkjbmgjidlcdno',\n BRAVE:\n 'https://chrome.google.com/webstore/detail/exodus-web3-wallet/aholpfdialjgjfhomihkjbmgjidlcdno',\n DEFAULT: 'https://www.exodus.com/',\n },\n color: '#8f70fa',\n supportedChains: allBlockChains.filter((blockchainMeta) =>\n EXODUS_WALLET_SUPPORTED_CHAINS.includes(blockchainMeta.name as Networks)\n ),\n});\nconst buildLegacyProvider: () => LegacyProviderInterface = () => ({\n config,\n getInstance,\n connect,\n subscribe,\n switchNetwork,\n canSwitchNetworkTo,\n getSigners,\n getWalletInfo,\n canEagerConnect,\n});\n\nexport { buildLegacyProvider };\n", "import { type ProviderMetadata } from '@rango-dev/wallets-core';\nimport { LegacyNetworks } from '@rango-dev/wallets-core/legacy';\nimport { type BlockchainMeta, solanaBlockchain } from 'rango-types';\n\nimport getSigners from './signer.js';\nimport { getInstanceOrThrow } from './utils.js';\n\nexport const WALLET_ID = 'exodus';\nexport const EXODUS_WALLET_SUPPORTED_CHAINS = [\n LegacyNetworks.ETHEREUM,\n LegacyNetworks.BSC,\n LegacyNetworks.POLYGON,\n LegacyNetworks.AVAX_CCHAIN,\n];\n\nexport const metadata: ProviderMetadata = {\n name: 'Exodus',\n icon: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/exodus/icon.svg',\n extensions: {\n chrome:\n 'https://chrome.google.com/webstore/detail/exodus-web3-wallet/aholpfdialjgjfhomihkjbmgjidlcdno',\n brave:\n 'https://chrome.google.com/webstore/detail/exodus-web3-wallet/aholpfdialjgjfhomihkjbmgjidlcdno',\n homepage: 'https://www.exodus.com/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 allBlockchains.filter((blockchainMeta) =>\n EXODUS_WALLET_SUPPORTED_CHAINS.includes(\n blockchainMeta.name as LegacyNetworks\n )\n ),\n },\n {\n label: 'Solana',\n value: 'Solana',\n id: 'SOLANA',\n getSupportedChains: (allBlockchains: BlockchainMeta[]) =>\n solanaBlockchain(allBlockchains),\n },\n ],\n },\n },\n {\n name: 'signers',\n value: { getSigners: async () => getSigners(getInstanceOrThrow()) },\n },\n ],\n};\n", "import type { Provider } from './types.js';\nimport type { SignerFactory } from 'rango-types';\n\nimport {\n dynamicImportWithRefinedError,\n getNetworkInstance,\n Networks,\n} from '@rango-dev/wallets-shared';\nimport { DefaultSignerFactory, TransactionType as TxType } from 'rango-types';\n\nimport { ExodusSolanaSigner } from './signers/solana.js';\n\nexport default async function getSigners(\n provider: Provider\n): Promise<SignerFactory> {\n const ethProvider = getNetworkInstance(provider, Networks.ETHEREUM);\n const solProvider = getNetworkInstance(provider, Networks.SOLANA);\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 signers.registerSigner(TxType.SOLANA, new ExodusSolanaSigner(solProvider));\n return signers;\n}\n", "import {\n DefaultSolanaSigner,\n type SolanaExternalProvider,\n} from '@rango-dev/signer-solana';\nimport base58 from 'bs58';\n\nexport class ExodusSolanaSigner extends DefaultSolanaSigner {\n constructor(provider: SolanaExternalProvider) {\n super(provider);\n }\n\n async signMessage(msg: string): Promise<string> {\n const { signature } = await this.provider.signMessage(msg);\n return base58.encode(signature);\n }\n}\n", "import type { Provider } from './types.js';\nimport type { ProviderAPI as EvmProviderApi } from '@rango-dev/wallets-core/namespaces/evm';\nimport type { ProviderAPI as SolanaProviderApi } from '@rango-dev/wallets-core/namespaces/solana';\n\nimport { LegacyNetworks } from '@rango-dev/wallets-core/legacy';\n\nexport function exodus(): Provider | null {\n const { exodus } = window;\n if (!exodus) {\n return null;\n }\n const instances: Provider = new Map();\n if (exodus.ethereum) {\n instances.set(LegacyNetworks.ETHEREUM, exodus.ethereum);\n }\n if (exodus.solana) {\n instances.set(LegacyNetworks.SOLANA, exodus.solana);\n }\n\n return instances;\n}\n\nexport function getInstanceOrThrow(): Provider {\n const instances = exodus();\n\n if (!instances) {\n throw new Error('Exodus Wallet is not injected. Please check your wallet.');\n }\n\n return instances;\n}\n\nexport function evmExodus(): EvmProviderApi {\n const instances = exodus();\n\n const evmInstance = instances?.get(LegacyNetworks.ETHEREUM);\n\n if (!evmInstance) {\n throw new Error(\n 'Exodus Wallet not injected or EVM not enabled. Please check your wallet.'\n );\n }\n\n return evmInstance as EvmProviderApi;\n}\n\nexport function solanaExodus(): SolanaProviderApi {\n const instance = exodus();\n const solanaInstance = instance?.get(LegacyNetworks.SOLANA);\n\n if (!solanaInstance) {\n throw new Error(\n 'Exodus Wallet not injected or Solana not enabled. Please check your wallet.'\n );\n }\n\n return solanaInstance as SolanaProviderApi;\n}\n", "import { ProviderBuilder } from '@rango-dev/wallets-core';\n\nimport { metadata, WALLET_ID } from './constants.js';\nimport { evm } from './namespaces/evm.js';\nimport { solana } from './namespaces/solana.js';\nimport { exodus as exodusInstance } from './utils.js';\n\nconst WALLET_INJECTION_DELAY_MS = 1000;\nconst buildProvider = () =>\n new ProviderBuilder(WALLET_ID)\n .init((context) =>\n setTimeout(function () {\n const [, setState] = context.state();\n\n if (exodusInstance()) {\n setState('installed', true);\n console.debug('[exodus] instance detected.', context);\n }\n }, WALLET_INJECTION_DELAY_MS)\n )\n .config('metadata', metadata)\n .add('solana', solana)\n .add('evm', evm)\n .build();\n\nexport { buildProvider };\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 { actions, builders } from '@rango-dev/wallets-core/namespaces/evm';\n\nimport { WALLET_ID } from '../constants.js';\nimport { evmExodus } from '../utils.js';\n\nconst connect = builders\n .connect()\n .action(actions.connect(evmExodus))\n .or(standardizeAndThrowError)\n .build();\n\nconst disconnect = commonBuilders.disconnect<EvmActions>().build();\n\nconst canSwitchNetwork = builders\n .canSwitchNetwork()\n .action(actions.canSwitchNetwork())\n .build();\n\nconst getChainId = builders\n .getChainId()\n .action(actions.getChainId(evmExodus))\n .build();\n\nconst canEagerConnect = builders\n .canEagerConnect()\n .action(actions.canEagerConnect(evmExodus))\n .build();\n\nconst evm = new NamespaceBuilder<EvmActions>('EVM', WALLET_ID)\n .action(connect)\n .action(disconnect)\n .action(canEagerConnect)\n .action(getChainId)\n .action(canSwitchNetwork)\n .build();\n\nexport { evm };\n", "import type { SolanaActions } from '@rango-dev/wallets-core/namespaces/solana';\n\nimport { ActionBuilder, NamespaceBuilder } from '@rango-dev/wallets-core';\nimport {\n builders as commonBuilders,\n standardizeAndThrowError,\n} from '@rango-dev/wallets-core/namespaces/common';\nimport { actions, builders } from '@rango-dev/wallets-core/namespaces/solana';\n\nimport { solanaActions } from '../actions/solana.js';\nimport { WALLET_ID } from '../constants.js';\nimport { solanaExodus } from '../utils.js';\n\nconst connect = builders\n .connect()\n .action(actions.connect(solanaExodus))\n .or(standardizeAndThrowError)\n .build();\n\nconst disconnect = commonBuilders.disconnect<SolanaActions>().build();\n\nconst canEagerConnect = new ActionBuilder<SolanaActions, 'canEagerConnect'>(\n 'canEagerConnect'\n)\n .action(solanaActions.canEagerConnectAction)\n .build();\n\nconst solana = new NamespaceBuilder<SolanaActions>('Solana', WALLET_ID)\n .action(connect)\n .action(disconnect)\n .action(canEagerConnect)\n .build();\n\nexport { solana };\n", "import { evmExodus, solanaExodus } from '../utils.js';\n\n/*\n * Exodus does not provide an eager connection mechanism for its Solana wallet.\n * The only workaround is to use the EVM-based eager connect approach.\n * However, this will only work if the EVM namespace has been connected at least once before.\n * If either wallet instance is unavailable, we throw an error.\n */\nconst canEagerConnectAction = async () => {\n const evmInstance = evmExodus();\n const solanaInstance = solanaExodus();\n // Making sure that the Solana instance is available first to prevent errors.\n if (!solanaInstance) {\n throw new Error(\n 'Trying to eagerly connect to your wallet, but seems its solana instance is not available.'\n );\n }\n if (!evmInstance) {\n throw new Error(\n 'Trying to eagerly connect to your EVM wallet, but seems its instance is not available.'\n );\n }\n\n try {\n const accounts: string[] = await evmInstance.request({\n method: 'eth_accounts',\n });\n if (accounts.length) {\n return true;\n }\n return false;\n } catch {\n return false;\n }\n};\nexport const solanaActions = { canEagerConnectAction };\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["defineVersions", "canEagerlyConnectToEvm", "canSwitchNetworkToEvm", "chooseInstance", "getEvmAccounts", "getSolanaAccounts", "Networks", "switchNetworkForEvm", "WalletTypes", "isEvmBlockchain", "isSolanaBlockchain", "LegacyNetworks", "solanaBlockchain", "dynamicImportWithRefinedError", "getNetworkInstance", "Networks", "DefaultSignerFactory", "TxType", "DefaultSolanaSigner", "base58", "ExodusSolanaSigner", "DefaultSolanaSigner", "__name", "provider", "msg", "signature", "base58", "getSigners", "provider", "ethProvider", "getNetworkInstance", "Networks", "solProvider", "signers", "DefaultSignerFactory", "DefaultEvmSigner", "dynamicImportWithRefinedError", "TxType", "ExodusSolanaSigner", "__name", "LegacyNetworks", "exodus", "instances", "LegacyNetworks", "__name", "getInstanceOrThrow", "evmExodus", "evmInstance", "solanaExodus", "solanaInstance", "WALLET_ID", "EXODUS_WALLET_SUPPORTED_CHAINS", "LegacyNetworks", "metadata", "allBlockchains", "blockchainMeta", "solanaBlockchain", "getSigners", "getInstanceOrThrow", "WALLET", "WalletTypes", "config", "Networks", "getInstance", "exodus", "connect", "__name", "instance", "meta", "evmInstance", "chooseInstance", "results", "evm", "getEvmAccounts", "solanaResults", "getSolanaAccounts", "subscribe", "options", "ethInstance", "solanaInstance", "updateAccounts", "state", "updateChainId", "addresses", "eth_chainId", "isEvmBlockchain", "blockchain", "publicKey", "isSolanaBlockchain", "network", "account", "switchNetwork", "switchNetworkForEvm", "canSwitchNetworkTo", "canSwitchNetworkToEvm", "getSigners", "canEagerConnect", "evm_instance", "canEagerlyConnectToEvm", "getWalletInfo", "allBlockChains", "blockchainMeta", "EXODUS_WALLET_SUPPORTED_CHAINS", "buildLegacyProvider", "ProviderBuilder", "NamespaceBuilder", "commonBuilders", "standardizeAndThrowError", "actions", "builders", "connect", "builders", "actions", "evmExodus", "standardizeAndThrowError", "disconnect", "commonBuilders", "canSwitchNetwork", "getChainId", "canEagerConnect", "evm", "NamespaceBuilder", "WALLET_ID", "ActionBuilder", "NamespaceBuilder", "commonBuilders", "standardizeAndThrowError", "actions", "builders", "canEagerConnectAction", "__name", "evmInstance", "evmExodus", "solanaExodus", "solanaActions", "connect", "builders", "actions", "solanaExodus", "standardizeAndThrowError", "disconnect", "commonBuilders", "canEagerConnect", "ActionBuilder", "solanaActions", "solana", "NamespaceBuilder", "WALLET_ID", "WALLET_INJECTION_DELAY_MS", "buildProvider", "__name", "ProviderBuilder", "WALLET_ID", "context", "setState", "exodus", "metadata", "solana", "evm", "versions", "__name", "defineVersions", "buildLegacyProvider", "buildProvider"]
|
|
7
|
+
}
|
|
@@ -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;AAmCzE,QAAA,MAAM,GAAG,gEAMC,CAAC;AAEX,OAAO,EAAE,GAAG,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana.d.ts","sourceRoot":"","sources":["../../src/namespaces/solana.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AA2B/E,QAAA,MAAM,MAAM,mEAIF,CAAC;AAEX,OAAO,EAAE,MAAM,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"src/
|
|
1
|
+
{"inputs":{"src/signers/solana.ts":{"bytes":423,"imports":[{"path":"@rango-dev/signer-solana","kind":"import-statement","external":true},{"path":"bs58","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/signer.ts":{"bytes":921,"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"src/signers/solana.ts","kind":"import-statement","original":"./signers/solana.js"},{"path":"@rango-dev/signer-evm","kind":"dynamic-import","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/utils.ts":{"bytes":1517,"imports":[{"path":"@rango-dev/wallets-core/legacy","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/constants.ts":{"bytes":1794,"imports":[{"path":"@rango-dev/wallets-core","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core/legacy","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/legacy/index.ts":{"bytes":4152,"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"src/constants.ts","kind":"import-statement","original":"../constants.js"},{"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/namespaces/evm.ts":{"bytes":1136,"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/actions/solana.ts":{"bytes":1145,"imports":[{"path":"src/utils.ts","kind":"import-statement","original":"../utils.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/namespaces/solana.ts":{"bytes":1026,"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/solana","kind":"import-statement","external":true},{"path":"src/actions/solana.ts","kind":"import-statement","original":"../actions/solana.js"},{"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":775,"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/namespaces/solana.ts","kind":"import-statement","original":"./namespaces/solana.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":22185},"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","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core/legacy","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-solana","kind":"import-statement","external":true},{"path":"bs58","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-dev/wallets-core/namespaces/common","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core/namespaces/evm","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/solana","kind":"import-statement","external":true}],"exports":["versions"],"entryPoint":"src/mod.ts","inputs":{"src/mod.ts":{"bytesInOutput":144},"src/legacy/index.ts":{"bytesInOutput":1798},"src/constants.ts":{"bytesInOutput":855},"src/signer.ts":{"bytesInOutput":423},"src/signers/solana.ts":{"bytesInOutput":259},"src/utils.ts":{"bytesInOutput":701},"src/provider.ts":{"bytesInOutput":289},"src/namespaces/evm.ts":{"bytesInOutput":574},"src/namespaces/solana.ts":{"bytesInOutput":480},"src/actions/solana.ts":{"bytesInOutput":391}},"bytes":6049}}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAQA,QAAA,MAAM,aAAa,kDAeP,CAAC;AAEb,OAAO,EAAE,aAAa,EAAE,CAAC"}
|
package/dist/signer.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Provider } from './types.js';
|
|
2
2
|
import type { SignerFactory } from 'rango-types';
|
|
3
|
-
export default function getSigners(provider:
|
|
3
|
+
export default function getSigners(provider: Provider): Promise<SignerFactory>;
|
|
4
4
|
//# sourceMappingURL=signer.d.ts.map
|
package/dist/signer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
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;AAWjD,wBAA8B,UAAU,CACtC,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,aAAa,CAAC,CAUxB"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { DefaultSolanaSigner, type SolanaExternalProvider } from '@rango-dev/signer-solana';
|
|
2
|
+
export declare class ExodusSolanaSigner extends DefaultSolanaSigner {
|
|
3
|
+
constructor(provider: SolanaExternalProvider);
|
|
4
|
+
signMessage(msg: string): Promise<string>;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=solana.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana.d.ts","sourceRoot":"","sources":["../../src/signers/solana.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,KAAK,sBAAsB,EAC5B,MAAM,0BAA0B,CAAC;AAGlC,qBAAa,kBAAmB,SAAQ,mBAAmB;gBAC7C,QAAQ,EAAE,sBAAsB;IAItC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAIhD"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { LegacyNetworks } from '@rango-dev/wallets-core/legacy';
|
|
2
|
+
import type { ProviderAPI as EvmProviderApi } from '@rango-dev/wallets-core/namespaces/evm';
|
|
3
|
+
import type { ProviderAPI as SolanaProviderApi } from '@rango-dev/wallets-core/namespaces/solana';
|
|
4
|
+
export type ProviderObject = {
|
|
5
|
+
[LegacyNetworks.ETHEREUM]: EvmProviderApi;
|
|
6
|
+
[LegacyNetworks.SOLANA]: SolanaProviderApi;
|
|
7
|
+
};
|
|
8
|
+
export type Provider = Map<keyof ProviderObject, ProviderObject[keyof ProviderObject]>;
|
|
9
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,IAAI,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAC5F,OAAO,KAAK,EAAE,WAAW,IAAI,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAElG,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1C,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5C,CAAC;AACF,MAAM,MAAM,QAAQ,GAAG,GAAG,CACxB,MAAM,cAAc,EACpB,cAAc,CAAC,MAAM,cAAc,CAAC,CACrC,CAAC"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Provider } from './types.js';
|
|
2
|
+
import type { ProviderAPI as EvmProviderApi } from '@rango-dev/wallets-core/namespaces/evm';
|
|
3
|
+
import type { ProviderAPI as SolanaProviderApi } from '@rango-dev/wallets-core/namespaces/solana';
|
|
4
|
+
export declare function exodus(): Provider | null;
|
|
5
|
+
export declare function getInstanceOrThrow(): Provider;
|
|
6
|
+
export declare function evmExodus(): EvmProviderApi;
|
|
7
|
+
export declare function solanaExodus(): SolanaProviderApi;
|
|
8
|
+
//# 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,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,IAAI,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAC5F,OAAO,KAAK,EAAE,WAAW,IAAI,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAIlG,wBAAgB,MAAM,IAAI,QAAQ,GAAG,IAAI,CAcxC;AAED,wBAAgB,kBAAkB,IAAI,QAAQ,CAQ7C;AAED,wBAAgB,SAAS,IAAI,cAAc,CAY1C;AAED,wBAAgB,YAAY,IAAI,iBAAiB,CAWhD"}
|
package/package.json
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rango-dev/provider-exodus",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.54.1-next.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"source": "./src/
|
|
7
|
-
"main": "./dist/
|
|
6
|
+
"source": "./src/mod.ts",
|
|
7
|
+
"main": "./dist/mod.js",
|
|
8
8
|
"exports": {
|
|
9
|
-
".": "./dist/
|
|
9
|
+
".": "./dist/mod.js"
|
|
10
10
|
},
|
|
11
|
-
"typings": "dist/
|
|
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-exodus",
|
|
17
|
+
"build": "node ../../scripts/build/command.mjs --path wallets/provider-exodus --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}'",
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"@rango-dev/signer-evm": "^0.40.0",
|
|
25
25
|
"@rango-dev/signer-solana": "^0.44.1-next.0",
|
|
26
|
-
"@rango-dev/wallets-core": "^0.
|
|
27
|
-
"@rango-dev/wallets-shared": "^0.
|
|
26
|
+
"@rango-dev/wallets-core": "^0.52.1-next.1",
|
|
27
|
+
"@rango-dev/wallets-shared": "^0.53.1-next.0",
|
|
28
28
|
"bs58": "^5.0.0",
|
|
29
29
|
"rango-types": "^0.1.89"
|
|
30
30
|
},
|
package/readme.md
CHANGED
|
@@ -1 +1,39 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Exodus
|
|
2
|
+
Exodus Wallet integration for hub.
|
|
3
|
+
[Homepage](https://www.exodus.com/) | [Docs](https://support.exodus.com/)
|
|
4
|
+
|
|
5
|
+
More about implementation status can be found [here](../readme.md).
|
|
6
|
+
|
|
7
|
+
## Implementation notes/limitations
|
|
8
|
+
|
|
9
|
+
### Group
|
|
10
|
+
|
|
11
|
+
#### ⚠️ EVM
|
|
12
|
+
Exodus only supports a **limited set of EVM networks**:
|
|
13
|
+
- **Ethereum**
|
|
14
|
+
- **BSC**
|
|
15
|
+
- **Polygon**
|
|
16
|
+
- **Avalanche (C-Chain)**
|
|
17
|
+
|
|
18
|
+
Other EVM networks are not supported.
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### Feature
|
|
22
|
+
|
|
23
|
+
#### ⚠️ Switch Account
|
|
24
|
+
Exodus does not expose any method to programmatically switch accounts (called “portfolios”).
|
|
25
|
+
Users must **disconnect and reconnect** to change accounts.
|
|
26
|
+
Transactions are only sent if the wallet is on the correct account, preventing mis-signed transactions.
|
|
27
|
+
|
|
28
|
+
#### ⚠️ Auto Connect
|
|
29
|
+
Exodus does not provide an eager connection mechanism for its **Solana wallet**.
|
|
30
|
+
The only workaround is using the **EVM eager connect method**, which only works if the EVM namespace has been connected at least once before.
|
|
31
|
+
If the wallet instance is unavailable, the integration will throw an error.
|
|
32
|
+
|
|
33
|
+
#### ⚠️ Cross Browser
|
|
34
|
+
Exodus Wallet is supported only on **Chromium-based browsers** (e.g., Chrome, Brave).
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
More wallet information can be found in [readme.md](../readme.md).
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { evmExodus, solanaExodus } from '../utils.js';
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Exodus does not provide an eager connection mechanism for its Solana wallet.
|
|
5
|
+
* The only workaround is to use the EVM-based eager connect approach.
|
|
6
|
+
* However, this will only work if the EVM namespace has been connected at least once before.
|
|
7
|
+
* If either wallet instance is unavailable, we throw an error.
|
|
8
|
+
*/
|
|
9
|
+
const canEagerConnectAction = async () => {
|
|
10
|
+
const evmInstance = evmExodus();
|
|
11
|
+
const solanaInstance = solanaExodus();
|
|
12
|
+
// Making sure that the Solana instance is available first to prevent errors.
|
|
13
|
+
if (!solanaInstance) {
|
|
14
|
+
throw new Error(
|
|
15
|
+
'Trying to eagerly connect to your wallet, but seems its solana instance is not available.'
|
|
16
|
+
);
|
|
17
|
+
}
|
|
18
|
+
if (!evmInstance) {
|
|
19
|
+
throw new Error(
|
|
20
|
+
'Trying to eagerly connect to your EVM wallet, but seems its instance is not available.'
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
try {
|
|
25
|
+
const accounts: string[] = await evmInstance.request({
|
|
26
|
+
method: 'eth_accounts',
|
|
27
|
+
});
|
|
28
|
+
if (accounts.length) {
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
return false;
|
|
32
|
+
} catch {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
export const solanaActions = { canEagerConnectAction };
|
package/src/constants.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { type ProviderMetadata } from '@rango-dev/wallets-core';
|
|
2
|
+
import { LegacyNetworks } from '@rango-dev/wallets-core/legacy';
|
|
3
|
+
import { type BlockchainMeta, solanaBlockchain } from 'rango-types';
|
|
4
|
+
|
|
5
|
+
import getSigners from './signer.js';
|
|
6
|
+
import { getInstanceOrThrow } from './utils.js';
|
|
7
|
+
|
|
8
|
+
export const WALLET_ID = 'exodus';
|
|
9
|
+
export const EXODUS_WALLET_SUPPORTED_CHAINS = [
|
|
10
|
+
LegacyNetworks.ETHEREUM,
|
|
11
|
+
LegacyNetworks.BSC,
|
|
12
|
+
LegacyNetworks.POLYGON,
|
|
13
|
+
LegacyNetworks.AVAX_CCHAIN,
|
|
14
|
+
];
|
|
15
|
+
|
|
16
|
+
export const metadata: ProviderMetadata = {
|
|
17
|
+
name: 'Exodus',
|
|
18
|
+
icon: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/exodus/icon.svg',
|
|
19
|
+
extensions: {
|
|
20
|
+
chrome:
|
|
21
|
+
'https://chrome.google.com/webstore/detail/exodus-web3-wallet/aholpfdialjgjfhomihkjbmgjidlcdno',
|
|
22
|
+
brave:
|
|
23
|
+
'https://chrome.google.com/webstore/detail/exodus-web3-wallet/aholpfdialjgjfhomihkjbmgjidlcdno',
|
|
24
|
+
homepage: 'https://www.exodus.com/download',
|
|
25
|
+
},
|
|
26
|
+
properties: [
|
|
27
|
+
{
|
|
28
|
+
name: 'namespaces',
|
|
29
|
+
value: {
|
|
30
|
+
selection: 'multiple',
|
|
31
|
+
data: [
|
|
32
|
+
{
|
|
33
|
+
label: 'EVM',
|
|
34
|
+
value: 'EVM',
|
|
35
|
+
id: 'ETH',
|
|
36
|
+
getSupportedChains: (allBlockchains: BlockchainMeta[]) =>
|
|
37
|
+
allBlockchains.filter((blockchainMeta) =>
|
|
38
|
+
EXODUS_WALLET_SUPPORTED_CHAINS.includes(
|
|
39
|
+
blockchainMeta.name as LegacyNetworks
|
|
40
|
+
)
|
|
41
|
+
),
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
label: 'Solana',
|
|
45
|
+
value: 'Solana',
|
|
46
|
+
id: 'SOLANA',
|
|
47
|
+
getSupportedChains: (allBlockchains: BlockchainMeta[]) =>
|
|
48
|
+
solanaBlockchain(allBlockchains),
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: 'signers',
|
|
55
|
+
value: { getSigners: async () => getSigners(getInstanceOrThrow()) },
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { LegacyProviderInterface } from '@rango-dev/wallets-core/legacy';
|
|
1
2
|
import type {
|
|
2
3
|
CanEagerConnect,
|
|
3
4
|
CanSwitchNetwork,
|
|
@@ -14,18 +15,16 @@ import {
|
|
|
14
15
|
canSwitchNetworkToEvm,
|
|
15
16
|
chooseInstance,
|
|
16
17
|
getEvmAccounts,
|
|
18
|
+
getSolanaAccounts,
|
|
17
19
|
Networks,
|
|
18
20
|
switchNetworkForEvm,
|
|
19
21
|
WalletTypes,
|
|
20
22
|
} from '@rango-dev/wallets-shared';
|
|
21
23
|
import { isEvmBlockchain, isSolanaBlockchain } from 'rango-types';
|
|
22
24
|
|
|
23
|
-
import {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
getSolanaAccounts,
|
|
27
|
-
} from './helpers.js';
|
|
28
|
-
import signer from './signer.js';
|
|
25
|
+
import { EXODUS_WALLET_SUPPORTED_CHAINS } from '../constants.js';
|
|
26
|
+
import signer from '../signer.js';
|
|
27
|
+
import { exodus } from '../utils.js';
|
|
29
28
|
|
|
30
29
|
const WALLET = WalletTypes.EXODUS;
|
|
31
30
|
|
|
@@ -34,19 +33,21 @@ export const config = {
|
|
|
34
33
|
// TODO: Get from evm networks
|
|
35
34
|
defaultNetwork: Networks.ETHEREUM,
|
|
36
35
|
};
|
|
37
|
-
export const getInstance =
|
|
36
|
+
export const getInstance = exodus;
|
|
38
37
|
|
|
39
38
|
export const connect: Connect = async ({ instance, meta }) => {
|
|
40
|
-
const
|
|
41
|
-
|
|
39
|
+
const evmInstance = chooseInstance(instance, meta, Networks.ETHEREUM);
|
|
40
|
+
const results: ProviderConnectResult[] = [];
|
|
42
41
|
|
|
43
|
-
if (
|
|
44
|
-
const evm = await getEvmAccounts(
|
|
42
|
+
if (evmInstance) {
|
|
43
|
+
const evm = await getEvmAccounts(evmInstance);
|
|
45
44
|
results.push(evm);
|
|
46
45
|
}
|
|
47
46
|
|
|
48
47
|
const solanaResults = await getSolanaAccounts(instance);
|
|
49
|
-
results
|
|
48
|
+
results.push(
|
|
49
|
+
...(Array.isArray(solanaResults) ? solanaResults : [solanaResults])
|
|
50
|
+
);
|
|
50
51
|
return results;
|
|
51
52
|
};
|
|
52
53
|
|
|
@@ -102,7 +103,10 @@ export const switchNetwork: SwitchNetwork = async (options) => {
|
|
|
102
103
|
|
|
103
104
|
export const canSwitchNetworkTo: CanSwitchNetwork = canSwitchNetworkToEvm;
|
|
104
105
|
|
|
105
|
-
|
|
106
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
107
|
+
type Provider = any;
|
|
108
|
+
export const getSigners: (provider: Provider) => Promise<SignerFactory> =
|
|
109
|
+
signer;
|
|
106
110
|
|
|
107
111
|
export const canEagerConnect: CanEagerConnect = async ({ instance, meta }) => {
|
|
108
112
|
const evm_instance = chooseInstance(instance, meta, Networks.ETHEREUM);
|
|
@@ -129,3 +133,16 @@ export const getWalletInfo: (allBlockChains: BlockchainMeta[]) => WalletInfo = (
|
|
|
129
133
|
EXODUS_WALLET_SUPPORTED_CHAINS.includes(blockchainMeta.name as Networks)
|
|
130
134
|
),
|
|
131
135
|
});
|
|
136
|
+
const buildLegacyProvider: () => LegacyProviderInterface = () => ({
|
|
137
|
+
config,
|
|
138
|
+
getInstance,
|
|
139
|
+
connect,
|
|
140
|
+
subscribe,
|
|
141
|
+
switchNetwork,
|
|
142
|
+
canSwitchNetworkTo,
|
|
143
|
+
getSigners,
|
|
144
|
+
getWalletInfo,
|
|
145
|
+
canEagerConnect,
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
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,44 @@
|
|
|
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 { actions, builders } from '@rango-dev/wallets-core/namespaces/evm';
|
|
9
|
+
|
|
10
|
+
import { WALLET_ID } from '../constants.js';
|
|
11
|
+
import { evmExodus } from '../utils.js';
|
|
12
|
+
|
|
13
|
+
const connect = builders
|
|
14
|
+
.connect()
|
|
15
|
+
.action(actions.connect(evmExodus))
|
|
16
|
+
.or(standardizeAndThrowError)
|
|
17
|
+
.build();
|
|
18
|
+
|
|
19
|
+
const disconnect = commonBuilders.disconnect<EvmActions>().build();
|
|
20
|
+
|
|
21
|
+
const canSwitchNetwork = builders
|
|
22
|
+
.canSwitchNetwork()
|
|
23
|
+
.action(actions.canSwitchNetwork())
|
|
24
|
+
.build();
|
|
25
|
+
|
|
26
|
+
const getChainId = builders
|
|
27
|
+
.getChainId()
|
|
28
|
+
.action(actions.getChainId(evmExodus))
|
|
29
|
+
.build();
|
|
30
|
+
|
|
31
|
+
const canEagerConnect = builders
|
|
32
|
+
.canEagerConnect()
|
|
33
|
+
.action(actions.canEagerConnect(evmExodus))
|
|
34
|
+
.build();
|
|
35
|
+
|
|
36
|
+
const evm = new NamespaceBuilder<EvmActions>('EVM', WALLET_ID)
|
|
37
|
+
.action(connect)
|
|
38
|
+
.action(disconnect)
|
|
39
|
+
.action(canEagerConnect)
|
|
40
|
+
.action(getChainId)
|
|
41
|
+
.action(canSwitchNetwork)
|
|
42
|
+
.build();
|
|
43
|
+
|
|
44
|
+
export { evm };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { SolanaActions } from '@rango-dev/wallets-core/namespaces/solana';
|
|
2
|
+
|
|
3
|
+
import { ActionBuilder, NamespaceBuilder } from '@rango-dev/wallets-core';
|
|
4
|
+
import {
|
|
5
|
+
builders as commonBuilders,
|
|
6
|
+
standardizeAndThrowError,
|
|
7
|
+
} from '@rango-dev/wallets-core/namespaces/common';
|
|
8
|
+
import { actions, builders } from '@rango-dev/wallets-core/namespaces/solana';
|
|
9
|
+
|
|
10
|
+
import { solanaActions } from '../actions/solana.js';
|
|
11
|
+
import { WALLET_ID } from '../constants.js';
|
|
12
|
+
import { solanaExodus } from '../utils.js';
|
|
13
|
+
|
|
14
|
+
const connect = builders
|
|
15
|
+
.connect()
|
|
16
|
+
.action(actions.connect(solanaExodus))
|
|
17
|
+
.or(standardizeAndThrowError)
|
|
18
|
+
.build();
|
|
19
|
+
|
|
20
|
+
const disconnect = commonBuilders.disconnect<SolanaActions>().build();
|
|
21
|
+
|
|
22
|
+
const canEagerConnect = new ActionBuilder<SolanaActions, 'canEagerConnect'>(
|
|
23
|
+
'canEagerConnect'
|
|
24
|
+
)
|
|
25
|
+
.action(solanaActions.canEagerConnectAction)
|
|
26
|
+
.build();
|
|
27
|
+
|
|
28
|
+
const solana = new NamespaceBuilder<SolanaActions>('Solana', WALLET_ID)
|
|
29
|
+
.action(connect)
|
|
30
|
+
.action(disconnect)
|
|
31
|
+
.action(canEagerConnect)
|
|
32
|
+
.build();
|
|
33
|
+
|
|
34
|
+
export { solana };
|
package/src/provider.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
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 { solana } from './namespaces/solana.js';
|
|
6
|
+
import { exodus as exodusInstance } from './utils.js';
|
|
7
|
+
|
|
8
|
+
const WALLET_INJECTION_DELAY_MS = 1000;
|
|
9
|
+
const buildProvider = () =>
|
|
10
|
+
new ProviderBuilder(WALLET_ID)
|
|
11
|
+
.init((context) =>
|
|
12
|
+
setTimeout(function () {
|
|
13
|
+
const [, setState] = context.state();
|
|
14
|
+
|
|
15
|
+
if (exodusInstance()) {
|
|
16
|
+
setState('installed', true);
|
|
17
|
+
console.debug('[exodus] instance detected.', context);
|
|
18
|
+
}
|
|
19
|
+
}, WALLET_INJECTION_DELAY_MS)
|
|
20
|
+
)
|
|
21
|
+
.config('metadata', metadata)
|
|
22
|
+
.add('solana', solana)
|
|
23
|
+
.add('evm', evm)
|
|
24
|
+
.build();
|
|
25
|
+
|
|
26
|
+
export { buildProvider };
|
package/src/signer.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Provider } from './types.js';
|
|
2
2
|
import type { SignerFactory } from 'rango-types';
|
|
3
3
|
|
|
4
4
|
import {
|
|
@@ -8,10 +8,10 @@ import {
|
|
|
8
8
|
} from '@rango-dev/wallets-shared';
|
|
9
9
|
import { DefaultSignerFactory, TransactionType as TxType } from 'rango-types';
|
|
10
10
|
|
|
11
|
-
import {
|
|
11
|
+
import { ExodusSolanaSigner } from './signers/solana.js';
|
|
12
12
|
|
|
13
13
|
export default async function getSigners(
|
|
14
|
-
provider:
|
|
14
|
+
provider: Provider
|
|
15
15
|
): Promise<SignerFactory> {
|
|
16
16
|
const ethProvider = getNetworkInstance(provider, Networks.ETHEREUM);
|
|
17
17
|
const solProvider = getNetworkInstance(provider, Networks.SOLANA);
|
|
@@ -20,6 +20,6 @@ export default async function getSigners(
|
|
|
20
20
|
async () => await import('@rango-dev/signer-evm')
|
|
21
21
|
);
|
|
22
22
|
signers.registerSigner(TxType.EVM, new DefaultEvmSigner(ethProvider));
|
|
23
|
-
signers.registerSigner(TxType.SOLANA, new
|
|
23
|
+
signers.registerSigner(TxType.SOLANA, new ExodusSolanaSigner(solProvider));
|
|
24
24
|
return signers;
|
|
25
25
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
DefaultSolanaSigner,
|
|
3
|
+
type SolanaExternalProvider,
|
|
4
|
+
} from '@rango-dev/signer-solana';
|
|
2
5
|
import base58 from 'bs58';
|
|
3
6
|
|
|
4
|
-
|
|
5
|
-
type SolanaExternalProvider = any;
|
|
6
|
-
|
|
7
|
-
export class CustomSolanaSigner extends DefaultSolanaSigner {
|
|
7
|
+
export class ExodusSolanaSigner extends DefaultSolanaSigner {
|
|
8
8
|
constructor(provider: SolanaExternalProvider) {
|
|
9
9
|
super(provider);
|
|
10
10
|
}
|
package/src/types.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { LegacyNetworks } from '@rango-dev/wallets-core/legacy';
|
|
2
|
+
import type { ProviderAPI as EvmProviderApi } from '@rango-dev/wallets-core/namespaces/evm';
|
|
3
|
+
import type { ProviderAPI as SolanaProviderApi } from '@rango-dev/wallets-core/namespaces/solana';
|
|
4
|
+
|
|
5
|
+
export type ProviderObject = {
|
|
6
|
+
[LegacyNetworks.ETHEREUM]: EvmProviderApi;
|
|
7
|
+
[LegacyNetworks.SOLANA]: SolanaProviderApi;
|
|
8
|
+
};
|
|
9
|
+
export type Provider = Map<
|
|
10
|
+
keyof ProviderObject,
|
|
11
|
+
ProviderObject[keyof ProviderObject]
|
|
12
|
+
>;
|
package/src/utils.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { Provider } from './types.js';
|
|
2
|
+
import type { ProviderAPI as EvmProviderApi } from '@rango-dev/wallets-core/namespaces/evm';
|
|
3
|
+
import type { ProviderAPI as SolanaProviderApi } from '@rango-dev/wallets-core/namespaces/solana';
|
|
4
|
+
|
|
5
|
+
import { LegacyNetworks } from '@rango-dev/wallets-core/legacy';
|
|
6
|
+
|
|
7
|
+
export function exodus(): Provider | null {
|
|
8
|
+
const { exodus } = window;
|
|
9
|
+
if (!exodus) {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
const instances: Provider = new Map();
|
|
13
|
+
if (exodus.ethereum) {
|
|
14
|
+
instances.set(LegacyNetworks.ETHEREUM, exodus.ethereum);
|
|
15
|
+
}
|
|
16
|
+
if (exodus.solana) {
|
|
17
|
+
instances.set(LegacyNetworks.SOLANA, exodus.solana);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return instances;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function getInstanceOrThrow(): Provider {
|
|
24
|
+
const instances = exodus();
|
|
25
|
+
|
|
26
|
+
if (!instances) {
|
|
27
|
+
throw new Error('Exodus Wallet is not injected. Please check your wallet.');
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return instances;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function evmExodus(): EvmProviderApi {
|
|
34
|
+
const instances = exodus();
|
|
35
|
+
|
|
36
|
+
const evmInstance = instances?.get(LegacyNetworks.ETHEREUM);
|
|
37
|
+
|
|
38
|
+
if (!evmInstance) {
|
|
39
|
+
throw new Error(
|
|
40
|
+
'Exodus Wallet not injected or EVM not enabled. Please check your wallet.'
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return evmInstance as EvmProviderApi;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function solanaExodus(): SolanaProviderApi {
|
|
48
|
+
const instance = exodus();
|
|
49
|
+
const solanaInstance = instance?.get(LegacyNetworks.SOLANA);
|
|
50
|
+
|
|
51
|
+
if (!solanaInstance) {
|
|
52
|
+
throw new Error(
|
|
53
|
+
'Exodus Wallet not injected or Solana not enabled. Please check your wallet.'
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return solanaInstance as SolanaProviderApi;
|
|
58
|
+
}
|
package/dist/helpers.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { ProviderConnectResult } from '@rango-dev/wallets-shared';
|
|
2
|
-
import { Networks } from '@rango-dev/wallets-shared';
|
|
3
|
-
export declare function exodus_instances(): Map<any, any> | null;
|
|
4
|
-
export declare function getSolanaAccounts(instance: any): Promise<ProviderConnectResult[]>;
|
|
5
|
-
export declare const EXODUS_WALLET_SUPPORTED_CHAINS: Networks[];
|
|
6
|
-
//# sourceMappingURL=helpers.d.ts.map
|
package/dist/helpers.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,wBAAgB,gBAAgB,yBAe/B;AAED,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,GAAG,GACZ,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAelC;AAED,eAAO,MAAM,8BAA8B,YAM1C,CAAC"}
|
package/dist/index.d.ts.map
DELETED
|
@@ -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,EAEP,SAAS,EACT,aAAa,EACb,UAAU,EACX,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,EAKL,QAAQ,EAER,WAAW,EACZ,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,gBAAgB,EAGjB,MAAM,cAAc,CAAC;AAKtB,eAAO,MAAM,MAAM;;;CAIlB,CAAC;AACF,eAAO,MAAM,WAAW,yBAAmB,CAAC;AAE5C,eAAO,MAAM,OAAO,EAAE,OAYrB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,SAoCvB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,aAU3B,CAAC;AAEF,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,eAM7B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,CAAC,cAAc,EAAE,cAAc,EAAE,KAAK,UAgBhE,CAAC"}
|
package/dist/index.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var k=Object.defineProperty;var o=(e,t)=>k(e,"name",{value:t,configurable:!0});import{canEagerlyConnectToEvm as R,canSwitchNetworkToEvm as P,chooseInstance as l,getEvmAccounts as L,Networks as c,switchNetworkForEvm as I,WalletTypes as M}from"@rango-dev/wallets-shared";import{isEvmBlockchain as O,isSolanaBlockchain as U}from"rango-types";import{Networks as a}from"@rango-dev/wallets-shared";function f(){let{exodus:e}=window;if(!e)return null;let t=new Map;return e.ethereum&&t.set(a.ETHEREUM,e.ethereum),e.solana&&t.set(a.SOLANA,e.solana),t}o(f,"exodus_instances");async function h(e){let t=await e.get(a.SOLANA),n=[];if(t){let s=(await t.connect()).publicKey.toString();n.push({accounts:s?[s]:[],chainId:a.SOLANA})}return n}o(h,"getSolanaAccounts");var S=[a.SOLANA,a.ETHEREUM,a.BSC,a.POLYGON,a.AVAX_CCHAIN];import{dynamicImportWithRefinedError as C,getNetworkInstance as y,Networks as A}from"@rango-dev/wallets-shared";import{DefaultSignerFactory as T,TransactionType as N}from"rango-types";import{DefaultSolanaSigner as x}from"@rango-dev/signer-solana";import v from"bs58";var u=class extends x{static{o(this,"CustomSolanaSigner")}constructor(t){super(t)}async signMessage(t){let{signature:n}=await this.provider.signMessage(t);return v.encode(n)}};async function w(e){let t=y(e,A.ETHEREUM),n=y(e,A.SOLANA),r=new T,{DefaultEvmSigner:s}=await C(async()=>await import("@rango-dev/signer-evm"));return r.registerSigner(N.EVM,new s(t)),r.registerSigner(N.SOLANA,new u(n)),r}o(w,"getSigners");var b=M.EXODUS,$={type:b,defaultNetwork:c.ETHEREUM},ee=f,te=o(async({instance:e,meta:t})=>{let n=l(e,t,c.ETHEREUM),r=[];if(n){let i=await L(n);r.push(i)}let s=await h(e);return r=[...r,...s],r},"connect"),ne=o(e=>{let t=l(e.instance,e.meta,c.ETHEREUM),n=l(e.instance,e.meta,c.SOLANA),{connect:r,updateAccounts:s,state:i,updateChainId:d,meta:E}=e;t?.on?.("accountsChanged",m=>{let g=E.filter(O).find(p=>p.name===c.ETHEREUM)?.chainId;i.connected&&(i.network!=c.ETHEREUM&&g&&d(g),s(m))}),n?.on?.("accountChanged",async m=>{i.network!=c.SOLANA&&d(E.filter(U)[0].chainId);let g=c.SOLANA;if(m){let p=m.toString();s([p])}else r(g)})},"subscribe"),oe=o(async e=>{let t=l(e.instance,e.meta,e.network);return I({...e,instance:t})},"switchNetwork"),re=P,se=w,ae=o(async({instance:e,meta:t})=>{let n=l(e,t,c.ETHEREUM);return n?R({instance:n,meta:t}):Promise.resolve(!1)},"canEagerConnect"),ce=o(e=>({name:"Exodus",img:"https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/exodus/icon.svg",installLink:{CHROME:"https://chrome.google.com/webstore/detail/exodus-web3-wallet/aholpfdialjgjfhomihkjbmgjidlcdno",BRAVE:"https://chrome.google.com/webstore/detail/exodus-web3-wallet/aholpfdialjgjfhomihkjbmgjidlcdno",DEFAULT:"https://www.exodus.com/"},color:"#8f70fa",supportedChains:e.filter(t=>S.includes(t.name))}),"getWalletInfo");export{ae as canEagerConnect,re as canSwitchNetworkTo,$ as config,te as connect,ee as getInstance,se as getSigners,ce as getWalletInfo,ne as subscribe,oe 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", "../src/solana-signer.ts"],
|
|
4
|
-
"sourcesContent": ["import type {\n CanEagerConnect,\n CanSwitchNetwork,\n Connect,\n ProviderConnectResult,\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 chooseInstance,\n getEvmAccounts,\n Networks,\n switchNetworkForEvm,\n WalletTypes,\n} from '@rango-dev/wallets-shared';\nimport { isEvmBlockchain, isSolanaBlockchain } from 'rango-types';\n\nimport {\n exodus_instances,\n EXODUS_WALLET_SUPPORTED_CHAINS,\n getSolanaAccounts,\n} from './helpers.js';\nimport signer from './signer.js';\n\nconst WALLET = WalletTypes.EXODUS;\n\nexport const config = {\n type: WALLET,\n // TODO: Get from evm networks\n defaultNetwork: Networks.ETHEREUM,\n};\nexport const getInstance = exodus_instances;\n\nexport const connect: Connect = async ({ instance, meta }) => {\n const evm_instance = chooseInstance(instance, meta, Networks.ETHEREUM);\n let results: ProviderConnectResult[] = [];\n\n if (evm_instance) {\n const evm = await getEvmAccounts(evm_instance);\n results.push(evm);\n }\n\n const solanaResults = await getSolanaAccounts(instance);\n results = [...results, ...solanaResults];\n return results;\n};\n\nexport const subscribe: Subscribe = (options) => {\n const ethInstance = chooseInstance(\n options.instance,\n options.meta,\n Networks.ETHEREUM\n );\n const solanaInstance = chooseInstance(\n options.instance,\n options.meta,\n Networks.SOLANA\n );\n const { connect, updateAccounts, state, updateChainId, meta } = options;\n ethInstance?.on?.('accountsChanged', (addresses: string[]) => {\n const eth_chainId = meta\n .filter(isEvmBlockchain)\n .find((blockchain) => blockchain.name === Networks.ETHEREUM)?.chainId;\n if (state.connected) {\n if (state.network != Networks.ETHEREUM && eth_chainId) {\n updateChainId(eth_chainId);\n }\n updateAccounts(addresses);\n }\n });\n\n solanaInstance?.on?.('accountChanged', async (publicKey: string) => {\n if (state.network != Networks.SOLANA) {\n updateChainId(meta.filter(isSolanaBlockchain)[0].chainId);\n }\n const network = Networks.SOLANA;\n if (publicKey) {\n const account = publicKey.toString();\n updateAccounts([account]);\n } else {\n connect(network);\n }\n });\n};\n\nexport const switchNetwork: SwitchNetwork = async (options) => {\n const instance = chooseInstance(\n options.instance,\n options.meta,\n options.network\n );\n return switchNetworkForEvm({\n ...options,\n instance,\n });\n};\n\nexport const canSwitchNetworkTo: CanSwitchNetwork = canSwitchNetworkToEvm;\n\nexport const getSigners: (provider: any) => Promise<SignerFactory> = signer;\n\nexport const canEagerConnect: CanEagerConnect = async ({ instance, meta }) => {\n const evm_instance = chooseInstance(instance, meta, Networks.ETHEREUM);\n if (evm_instance) {\n return canEagerlyConnectToEvm({ instance: evm_instance, meta });\n }\n return Promise.resolve(false);\n};\n\nexport const getWalletInfo: (allBlockChains: BlockchainMeta[]) => WalletInfo = (\n allBlockChains\n) => ({\n name: 'Exodus',\n img: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/exodus/icon.svg',\n installLink: {\n CHROME:\n 'https://chrome.google.com/webstore/detail/exodus-web3-wallet/aholpfdialjgjfhomihkjbmgjidlcdno',\n BRAVE:\n 'https://chrome.google.com/webstore/detail/exodus-web3-wallet/aholpfdialjgjfhomihkjbmgjidlcdno',\n DEFAULT: 'https://www.exodus.com/',\n },\n color: '#8f70fa',\n supportedChains: allBlockChains.filter((blockchainMeta) =>\n EXODUS_WALLET_SUPPORTED_CHAINS.includes(blockchainMeta.name as Networks)\n ),\n});\n", "import type { ProviderConnectResult } from '@rango-dev/wallets-shared';\n\nimport { Networks } from '@rango-dev/wallets-shared';\n\nexport function exodus_instances() {\n const { exodus } = window;\n\n if (!exodus) {\n return null;\n }\n\n const instances = new Map();\n if (exodus.ethereum) {\n instances.set(Networks.ETHEREUM, exodus.ethereum);\n }\n if (exodus.solana) {\n instances.set(Networks.SOLANA, exodus.solana);\n }\n return instances;\n}\n\nexport async function getSolanaAccounts(\n instance: any\n): Promise<ProviderConnectResult[]> {\n const solanaInstance = await instance.get(Networks.SOLANA);\n const results: ProviderConnectResult[] = [];\n\n if (solanaInstance) {\n const solanaResponse = await solanaInstance.connect();\n const account = solanaResponse.publicKey.toString();\n\n results.push({\n accounts: account ? [account] : [],\n chainId: Networks.SOLANA,\n });\n }\n\n return results;\n}\n\nexport const EXODUS_WALLET_SUPPORTED_CHAINS = [\n Networks.SOLANA,\n Networks.ETHEREUM,\n Networks.BSC,\n Networks.POLYGON,\n Networks.AVAX_CCHAIN,\n];\n", "import type { LegacyNetworkProviderMap } from '@rango-dev/wallets-core/legacy';\nimport type { SignerFactory } from 'rango-types';\n\nimport {\n dynamicImportWithRefinedError,\n getNetworkInstance,\n Networks,\n} from '@rango-dev/wallets-shared';\nimport { DefaultSignerFactory, TransactionType as TxType } from 'rango-types';\n\nimport { CustomSolanaSigner } from './solana-signer.js';\n\nexport default async function getSigners(\n provider: LegacyNetworkProviderMap\n): Promise<SignerFactory> {\n const ethProvider = getNetworkInstance(provider, Networks.ETHEREUM);\n const solProvider = getNetworkInstance(provider, Networks.SOLANA);\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 signers.registerSigner(TxType.SOLANA, new CustomSolanaSigner(solProvider));\n return signers;\n}\n", "import { DefaultSolanaSigner } from '@rango-dev/signer-solana';\nimport base58 from 'bs58';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype SolanaExternalProvider = any;\n\nexport class CustomSolanaSigner extends DefaultSolanaSigner {\n constructor(provider: SolanaExternalProvider) {\n super(provider);\n }\n\n async signMessage(msg: string): Promise<string> {\n const { signature } = await this.provider.signMessage(msg);\n return base58.encode(signature);\n }\n}\n"],
|
|
5
|
-
"mappings": "+EAWA,OACE,0BAAAA,EACA,yBAAAC,EACA,kBAAAC,EACA,kBAAAC,EACA,YAAAC,EACA,uBAAAC,EACA,eAAAC,MACK,4BACP,OAAS,mBAAAC,EAAiB,sBAAAC,MAA0B,cClBpD,OAAS,YAAAC,MAAgB,4BAElB,SAASC,GAAmB,CACjC,GAAM,CAAE,OAAAC,CAAO,EAAI,OAEnB,GAAI,CAACA,EACH,OAAO,KAGT,IAAMC,EAAY,IAAI,IACtB,OAAID,EAAO,UACTC,EAAU,IAAIC,EAAS,SAAUF,EAAO,QAAQ,EAE9CA,EAAO,QACTC,EAAU,IAAIC,EAAS,OAAQF,EAAO,MAAM,EAEvCC,CACT,CAfgBE,EAAAJ,EAAA,oBAiBhB,eAAsBK,EACpBC,EACkC,CAClC,IAAMC,EAAiB,MAAMD,EAAS,IAAIH,EAAS,MAAM,EACnDK,EAAmC,CAAC,EAE1C,GAAID,EAAgB,CAElB,IAAME,GADiB,MAAMF,EAAe,QAAQ,GACrB,UAAU,SAAS,EAElDC,EAAQ,KAAK,CACX,SAAUC,EAAU,CAACA,CAAO,EAAI,CAAC,EACjC,QAASN,EAAS,MACpB,CAAC,CACH,CAEA,OAAOK,CACT,CAjBsBJ,EAAAC,EAAA,qBAmBf,IAAMK,EAAiC,CAC5CP,EAAS,OACTA,EAAS,SACTA,EAAS,IACTA,EAAS,QACTA,EAAS,WACX,EC3CA,OACE,iCAAAQ,EACA,sBAAAC,EACA,YAAAC,MACK,4BACP,OAAS,wBAAAC,EAAsB,mBAAmBC,MAAc,cCRhE,OAAS,uBAAAC,MAA2B,2BACpC,OAAOC,MAAY,OAKZ,IAAMC,EAAN,cAAiCC,CAAoB,CAN5D,MAM4D,CAAAC,EAAA,2BAC1D,YAAYC,EAAkC,CAC5C,MAAMA,CAAQ,CAChB,CAEA,MAAM,YAAYC,EAA8B,CAC9C,GAAM,CAAE,UAAAC,CAAU,EAAI,MAAM,KAAK,SAAS,YAAYD,CAAG,EACzD,OAAOE,EAAO,OAAOD,CAAS,CAChC,CACF,EDHA,eAAOE,EACLC,EACwB,CACxB,IAAMC,EAAcC,EAAmBF,EAAUG,EAAS,QAAQ,EAC5DC,EAAcF,EAAmBF,EAAUG,EAAS,MAAM,EAC1DE,EAAU,IAAIC,EACd,CAAE,iBAAAC,CAAiB,EAAI,MAAMC,EACjC,SAAY,KAAM,QAAO,uBAAuB,CAClD,EACA,OAAAH,EAAQ,eAAeI,EAAO,IAAK,IAAIF,EAAiBN,CAAW,CAAC,EACpEI,EAAQ,eAAeI,EAAO,OAAQ,IAAIC,EAAmBN,CAAW,CAAC,EAClEC,CACT,CAZ8BM,EAAAZ,EAAA,cFiB9B,IAAMa,EAASC,EAAY,OAEdC,EAAS,CACpB,KAAMF,EAEN,eAAgBG,EAAS,QAC3B,EACaC,GAAcC,EAEdC,GAAmBC,EAAA,MAAO,CAAE,SAAAC,EAAU,KAAAC,CAAK,IAAM,CAC5D,IAAMC,EAAeC,EAAeH,EAAUC,EAAMN,EAAS,QAAQ,EACjES,EAAmC,CAAC,EAExC,GAAIF,EAAc,CAChB,IAAMG,EAAM,MAAMC,EAAeJ,CAAY,EAC7CE,EAAQ,KAAKC,CAAG,CAClB,CAEA,IAAME,EAAgB,MAAMC,EAAkBR,CAAQ,EACtD,OAAAI,EAAU,CAAC,GAAGA,EAAS,GAAGG,CAAa,EAChCH,CACT,EAZgC,WAcnBK,GAAuBV,EAACW,GAAY,CAC/C,IAAMC,EAAcR,EAClBO,EAAQ,SACRA,EAAQ,KACRf,EAAS,QACX,EACMiB,EAAiBT,EACrBO,EAAQ,SACRA,EAAQ,KACRf,EAAS,MACX,EACM,CAAE,QAAAG,EAAS,eAAAe,EAAgB,MAAAC,EAAO,cAAAC,EAAe,KAAAd,CAAK,EAAIS,EAChEC,GAAa,KAAK,kBAAoBK,GAAwB,CAC5D,IAAMC,EAAchB,EACjB,OAAOiB,CAAe,EACtB,KAAMC,GAAeA,EAAW,OAASxB,EAAS,QAAQ,GAAG,QAC5DmB,EAAM,YACJA,EAAM,SAAWnB,EAAS,UAAYsB,GACxCF,EAAcE,CAAW,EAE3BJ,EAAeG,CAAS,EAE5B,CAAC,EAEDJ,GAAgB,KAAK,iBAAkB,MAAOQ,GAAsB,CAC9DN,EAAM,SAAWnB,EAAS,QAC5BoB,EAAcd,EAAK,OAAOoB,CAAkB,EAAE,CAAC,EAAE,OAAO,EAE1D,IAAMC,EAAU3B,EAAS,OACzB,GAAIyB,EAAW,CACb,IAAMG,EAAUH,EAAU,SAAS,EACnCP,EAAe,CAACU,CAAO,CAAC,CAC1B,MACEzB,EAAQwB,CAAO,CAEnB,CAAC,CACH,EApCoC,aAsCvBE,GAA+BzB,EAAA,MAAOW,GAAY,CAC7D,IAAMV,EAAWG,EACfO,EAAQ,SACRA,EAAQ,KACRA,EAAQ,OACV,EACA,OAAOe,EAAoB,CACzB,GAAGf,EACH,SAAAV,CACF,CAAC,CACH,EAV4C,iBAY/B0B,GAAuCC,EAEvCC,GAAwDA,EAExDC,GAAmC9B,EAAA,MAAO,CAAE,SAAAC,EAAU,KAAAC,CAAK,IAAM,CAC5E,IAAMC,EAAeC,EAAeH,EAAUC,EAAMN,EAAS,QAAQ,EACrE,OAAIO,EACK4B,EAAuB,CAAE,SAAU5B,EAAc,KAAAD,CAAK,CAAC,EAEzD,QAAQ,QAAQ,EAAK,CAC9B,EANgD,mBAQnC8B,GAAkEhC,EAC7EiC,IACI,CACJ,KAAM,SACN,IAAK,uFACL,YAAa,CACX,OACE,gGACF,MACE,gGACF,QAAS,yBACX,EACA,MAAO,UACP,gBAAiBA,EAAe,OAAQC,GACtCC,EAA+B,SAASD,EAAe,IAAgB,CACzE,CACF,GAhB+E",
|
|
6
|
-
"names": ["canEagerlyConnectToEvm", "canSwitchNetworkToEvm", "chooseInstance", "getEvmAccounts", "Networks", "switchNetworkForEvm", "WalletTypes", "isEvmBlockchain", "isSolanaBlockchain", "Networks", "exodus_instances", "exodus", "instances", "Networks", "__name", "getSolanaAccounts", "instance", "solanaInstance", "results", "account", "EXODUS_WALLET_SUPPORTED_CHAINS", "dynamicImportWithRefinedError", "getNetworkInstance", "Networks", "DefaultSignerFactory", "TxType", "DefaultSolanaSigner", "base58", "CustomSolanaSigner", "DefaultSolanaSigner", "__name", "provider", "msg", "signature", "base58", "getSigners", "provider", "ethProvider", "getNetworkInstance", "Networks", "solProvider", "signers", "DefaultSignerFactory", "DefaultEvmSigner", "dynamicImportWithRefinedError", "TxType", "CustomSolanaSigner", "__name", "WALLET", "WalletTypes", "config", "Networks", "getInstance", "exodus_instances", "connect", "__name", "instance", "meta", "evm_instance", "chooseInstance", "results", "evm", "getEvmAccounts", "solanaResults", "getSolanaAccounts", "subscribe", "options", "ethInstance", "solanaInstance", "updateAccounts", "state", "updateChainId", "addresses", "eth_chainId", "isEvmBlockchain", "blockchain", "publicKey", "isSolanaBlockchain", "network", "account", "switchNetwork", "switchNetworkForEvm", "canSwitchNetworkTo", "canSwitchNetworkToEvm", "getSigners", "canEagerConnect", "canEagerlyConnectToEvm", "getWalletInfo", "allBlockChains", "blockchainMeta", "EXODUS_WALLET_SUPPORTED_CHAINS"]
|
|
7
|
-
}
|
package/dist/solana-signer.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { DefaultSolanaSigner } from '@rango-dev/signer-solana';
|
|
2
|
-
type SolanaExternalProvider = any;
|
|
3
|
-
export declare class CustomSolanaSigner extends DefaultSolanaSigner {
|
|
4
|
-
constructor(provider: SolanaExternalProvider);
|
|
5
|
-
signMessage(msg: string): Promise<string>;
|
|
6
|
-
}
|
|
7
|
-
export {};
|
|
8
|
-
//# sourceMappingURL=solana-signer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"solana-signer.d.ts","sourceRoot":"","sources":["../src/solana-signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAI/D,KAAK,sBAAsB,GAAG,GAAG,CAAC;AAElC,qBAAa,kBAAmB,SAAQ,mBAAmB;gBAC7C,QAAQ,EAAE,sBAAsB;IAItC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAIhD"}
|
package/src/helpers.ts
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import type { ProviderConnectResult } from '@rango-dev/wallets-shared';
|
|
2
|
-
|
|
3
|
-
import { Networks } from '@rango-dev/wallets-shared';
|
|
4
|
-
|
|
5
|
-
export function exodus_instances() {
|
|
6
|
-
const { exodus } = window;
|
|
7
|
-
|
|
8
|
-
if (!exodus) {
|
|
9
|
-
return null;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
const instances = new Map();
|
|
13
|
-
if (exodus.ethereum) {
|
|
14
|
-
instances.set(Networks.ETHEREUM, exodus.ethereum);
|
|
15
|
-
}
|
|
16
|
-
if (exodus.solana) {
|
|
17
|
-
instances.set(Networks.SOLANA, exodus.solana);
|
|
18
|
-
}
|
|
19
|
-
return instances;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export async function getSolanaAccounts(
|
|
23
|
-
instance: any
|
|
24
|
-
): Promise<ProviderConnectResult[]> {
|
|
25
|
-
const solanaInstance = await instance.get(Networks.SOLANA);
|
|
26
|
-
const results: ProviderConnectResult[] = [];
|
|
27
|
-
|
|
28
|
-
if (solanaInstance) {
|
|
29
|
-
const solanaResponse = await solanaInstance.connect();
|
|
30
|
-
const account = solanaResponse.publicKey.toString();
|
|
31
|
-
|
|
32
|
-
results.push({
|
|
33
|
-
accounts: account ? [account] : [],
|
|
34
|
-
chainId: Networks.SOLANA,
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
return results;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export const EXODUS_WALLET_SUPPORTED_CHAINS = [
|
|
42
|
-
Networks.SOLANA,
|
|
43
|
-
Networks.ETHEREUM,
|
|
44
|
-
Networks.BSC,
|
|
45
|
-
Networks.POLYGON,
|
|
46
|
-
Networks.AVAX_CCHAIN,
|
|
47
|
-
];
|