@rango-dev/provider-metamask 0.50.1-next.4 → 0.51.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/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ # [0.51.0](https://github.com/rango-exchange/rango-client/compare/provider-metamask@0.50.0...provider-metamask@0.51.0) (2025-09-29)
2
+
3
+
4
+ ### Features
5
+
6
+ * migrate metamask to hub ([9ef1b5a](https://github.com/rango-exchange/rango-client/commit/9ef1b5a600945c8467b500a686a96cf081f3fb6e))
7
+
8
+
9
+
1
10
  # [0.50.0](https://github.com/rango-exchange/rango-client/compare/provider-metamask@0.49.0...provider-metamask@0.50.0) (2025-09-06)
2
11
 
3
12
 
@@ -0,0 +1,11 @@
1
+ import type { WalletStandardSolanaInstance } from '../types.js';
2
+ import type { Context, FunctionWithContext } from '@rango-dev/wallets-core';
3
+ import { type SolanaActions } from '@rango-dev/wallets-core/namespaces/solana';
4
+ declare function connect(getInstance: () => WalletStandardSolanaInstance): FunctionWithContext<SolanaActions['connect'], Context>;
5
+ declare function canEagerConnect(getInstance: () => WalletStandardSolanaInstance): () => Promise<boolean>;
6
+ export declare const solanaActions: {
7
+ connect: typeof connect;
8
+ canEagerConnect: typeof canEagerConnect;
9
+ };
10
+ export {};
11
+ //# sourceMappingURL=solana.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana.d.ts","sourceRoot":"","sources":["../../src/actions/solana.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE5E,OAAO,EACL,KAAK,aAAa,EAEnB,MAAM,2CAA2C,CAAC;AAEnD,iBAAS,OAAO,CACd,WAAW,EAAE,MAAM,4BAA4B,GAC9C,mBAAmB,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAUxD;AACD,iBAAS,eAAe,CAAC,WAAW,EAAE,MAAM,4BAA4B,0BAmBvE;AACD,eAAO,MAAM,aAAa;;;CAA+B,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { WalletStandardSolanaInstance } from '../types.js';
2
+ import type { StandardEventsChangeProperties } from '@wallet-standard/features';
3
+ import { ChangeAccountSubscriberBuilder } from '@rango-dev/wallets-core/namespaces/common';
4
+ export declare const solanaBuilders: {
5
+ changeAccountSubscriber: (getInstance: () => WalletStandardSolanaInstance) => ChangeAccountSubscriberBuilder<StandardEventsChangeProperties, WalletStandardSolanaInstance>;
6
+ };
7
+ //# sourceMappingURL=solana.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana.d.ts","sourceRoot":"","sources":["../../src/builders/solana.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAEhF,OAAO,EAAE,8BAA8B,EAAE,MAAM,2CAA2C,CAAC;AAuB3F,eAAO,MAAM,cAAc;2CAlBZ,MAAM,4BAA4B;CAkBQ,CAAC"}
@@ -1,4 +1,6 @@
1
1
  import { type ProviderMetadata } from '@rango-dev/wallets-core';
2
2
  export declare const WALLET_ID = "metamask";
3
+ export declare const WALLET_STANDARD_NAME = "MetaMask";
4
+ export declare const SOLANA_WALLET_STANDARD_MAINNET = "solana:mainnet";
3
5
  export declare const metadata: ProviderMetadata;
4
6
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +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
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAUhE,eAAO,MAAM,SAAS,aAAa,CAAC;AACpC,eAAO,MAAM,oBAAoB,aAAa,CAAC;AAC/C,eAAO,MAAM,8BAA8B,mBAAmB,CAAC;AAC/D,eAAO,MAAM,QAAQ,EAAE,gBA0CtB,CAAC"}
@@ -2,7 +2,7 @@ import type { LegacyProviderInterface } from '@rango-dev/wallets-core/legacy';
2
2
  import type { CanEagerConnect, CanSwitchNetwork, Connect, Subscribe, SwitchNetwork, WalletInfo } from '@rango-dev/wallets-shared';
3
3
  import type { BlockchainMeta, SignerFactory } from 'rango-types';
4
4
  import { WalletTypes } from '@rango-dev/wallets-shared';
5
- import { metamask as metamask_instance, type Provider } from '../utils.js';
5
+ import { metamask as metamask_instance } from '../utils.js';
6
6
  export declare const config: {
7
7
  type: WalletTypes;
8
8
  };
@@ -11,6 +11,7 @@ export declare const connect: Connect;
11
11
  export declare const subscribe: Subscribe;
12
12
  export declare const switchNetwork: SwitchNetwork;
13
13
  export declare const canSwitchNetworkTo: CanSwitchNetwork;
14
+ type Provider = any;
14
15
  export declare const getSigners: (provider: Provider) => Promise<SignerFactory>;
15
16
  export declare const canEagerConnect: CanEagerConnect;
16
17
  export declare const getWalletInfo: (allBlockChains: BlockchainMeta[]) => WalletInfo;
@@ -1 +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"}
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,MAAM,aAAa,CAAC;AAI5D,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,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,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.js CHANGED
@@ -1,2 +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};
1
+ var N=Object.defineProperty;var n=(e,t)=>N(e,"name",{value:t,configurable:!0});import{defineVersions as Le}from"@rango-dev/wallets-core/utils";import{canEagerlyConnectToEvm as X,canSwitchNetworkToEvm as z,getEvmAccounts as H,subscribeToEvm as K,switchNetworkForEvm as rt,WalletTypes as q}from"@rango-dev/wallets-shared";import{evmBlockchains as J}from"rango-types";import{LegacyNetworks as w}from"@rango-dev/wallets-core/legacy";import{dynamicImportWithRefinedError as B,getNetworkInstance as v}from"@rango-dev/wallets-shared";import{DefaultSignerFactory as D,TransactionType as b}from"rango-types";import{generalSolanaTransactionExecutor as L}from"@rango-dev/signer-solana";import O from"bs58";import{SignerError as l,SignerErrorCode as m}from"rango-types";async function R(e,t){return await L(e,n(async o=>{let[r]=t.accounts;if(!r.publicKey)throw new l(m.SIGN_TX_ERROR,"Please make sure the required account is connected properly.");if(e.from!==r.address)throw new l(m.SIGN_TX_ERROR,"Your connected account doesn't match with the required account. Please ensure that you are connected with the correct account and try again.");try{let[s]=await t.features["solana:signTransaction"].signTransaction({account:r,transaction:o.serialize()});return s.signedTransaction}catch(s){throw s&&Object.hasOwn(s,"code")&&s.code===4001?new l(m.REJECTED_BY_USER,void 0,s):new l(m.SIGN_TX_ERROR,void 0,s)}},"DefaultSolanaSigner"))}n(R,"executeSolanaTransaction");var f=class{static{n(this,"MetamaskSolanaSigner")}_provider;constructor(t){this._provider=t}get provider(){return this._provider}async signMessage(t){try{let a=new TextEncoder().encode(t),[o]=this.provider.accounts,[r]=await this._provider.features["solana:signMessage"].signMessage({message:a,account:o});return O.encode(r.signature)}catch(a){throw new l(m.SIGN_TX_ERROR,void 0,a)}}async signAndSendTx(t){return{hash:await R(t,this._provider)}}};async function d(e){let t=v(e,w.ETHEREUM),a=v(e,w.SOLANA),o=new D,{DefaultEvmSigner:r}=await B(async()=>await import("@rango-dev/signer-evm"));return o.registerSigner(b.EVM,new r(t)),o.registerSigner(b.SOLANA,new f(a)),o}n(d,"getSigners");import{LegacyNetworks as p}from"@rango-dev/wallets-core/legacy";import{getWallets as U}from"@wallet-standard/app";import"@rango-dev/wallets-core";import{evmBlockchains as F,solanaBlockchain as j}from"rango-types";var c="metamask",A="MetaMask",k="solana:mainnet",y={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=>F(e)},{label:"Solana",value:"Solana",id:"SOLANA",getSupportedChains:e=>j(e)}]}},{name:"signers",value:{getSigners:async()=>d(T())}}]};function i(){let{ethereum:e}=window,t=V();if(!e||!G(e))return null;let a=new Map;return e&&a.set(p.ETHEREUM,e),t&&a.set(p.SOLANA,t),a}n(i,"metamask");function G(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.isSafePal)}n(G,"isEthereumMetamaskProvider");function u(){let t=i()?.get(p.ETHEREUM);if(!t)throw new Error("Metamask not injected or EVM not enabled. Please check your wallet.");return t}n(u,"evmMetamask");function g(){let t=i()?.get(p.SOLANA);if(!t)throw new Error("Metamask Solana instance is not available. Ensure that Solana support is enabled in your wallet.");return t}n(g,"solanaMetamask");function T(){let e=i();if(!e)throw new Error("MetaMask is not injected. Please check your wallet.");return e}n(T,"getInstanceOrThrow");function V(){return U().get().find(e=>e.name===A&&e.chains.includes(k))}n(V,"getSolanaWalletInstance");var Y=q.META_MASK,Z={type:Y},Q=i,$=n(async({instance:e})=>{let{accounts:t,chainId:a}=await H(e);return{accounts:t,chainId:a}},"connect"),ee=K;var te=z,ne=d,ae=X,oe=n(e=>{let t=J(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"),I=n(()=>({config:Z,getInstance:Q,connect:$,subscribe:ee,getSigners:ne,getWalletInfo:oe,canSwitchNetworkTo:te,canEagerConnect:ae}),"buildLegacyProvider");import{ProviderBuilder as Ne}from"@rango-dev/wallets-core";import{ActionBuilder as re,NamespaceBuilder as se}from"@rango-dev/wallets-core";import{builders as ie,connectAndUpdateStateForMultiNetworks as ce,intoConnecting as le,intoConnectionFinished as me,standardizeAndThrowError as de}from"@rango-dev/wallets-core/namespaces/common";import{actions as S,builders as h,utils as fe}from"@rango-dev/wallets-core/namespaces/evm";var[pe,M]=h.changeAccountSubscriber(u).format(async(e,t)=>{let a=await e.request({method:"eth_chainId"});return fe.formatAccountsToCAIP([t[0]],a)}).build(),ue=new re("connect").action(S.connect(u)).and((e,t)=>({...t,accounts:[t.accounts[0]]})).and(ce).before(le).before(pe).or(M).or(de).after(me).build(),ge=h.canEagerConnect().action(S.canEagerConnect(u)).build(),Se=ie.disconnect().after(M).build(),he=h.canSwitchNetwork().action(S.canSwitchNetwork()).build(),C=new se("EVM",c).action(ue).action(Se).action(he).action(ge).build();import{ActionBuilder as ye,NamespaceBuilder as Te}from"@rango-dev/wallets-core";import{builders as Ie,standardizeAndThrowError as Me}from"@rango-dev/wallets-core/namespaces/common";import{builders as Ce}from"@rango-dev/wallets-core/namespaces/solana";import{utils as Ee}from"@rango-dev/wallets-core/namespaces/solana";function we(e){return async()=>{let a=await e().features["standard:connect"].connect();return Ee.formatAccountsToCAIP(a.accounts.map(o=>o.address))}}n(we,"connect");function ve(e){return async()=>{let t=e();if(!t)throw new Error("Trying to eagerly connect to your Solana wallet, but it seems that its instance is not available.");try{return!!(await t.features["standard:connect"].connect({silent:!0})).accounts.length}catch{return!1}}}n(ve,"canEagerConnect");var E={connect:we,canEagerConnect:ve};import{ChangeAccountSubscriberBuilder as be}from"@rango-dev/wallets-core/namespaces/common";import{utils as Ae}from"@rango-dev/wallets-core/namespaces/solana";var ke=n(e=>new be().getInstance(e).validateEventPayload(t=>!!t.accounts?.length).format(async(t,a)=>Ae.formatAccountsToCAIP(a.accounts.map(o=>o.address))).addEventListener((t,a)=>{t.features["standard:events"].on("change",a)}).removeEventListener((t,a)=>{}),"changeAccountSubscriber"),P={changeAccountSubscriber:ke};var[Pe,W]=P.changeAccountSubscriber(g).build(),We=Ce.connect().action(E.connect(g)).before(Pe).or(W).or(Me).build(),_e=new ye("canEagerConnect").action(E.canEagerConnect(g)).build(),xe=Ie.disconnect().after(W).build(),_=new Te("Solana",c).action(We).action(xe).action(_e).build();var x=n(()=>new Ne(c).init(function(e){let[,t]=e.state();i()&&(t("installed",!0),console.debug("[metamask] instance detected.",e))}).config("metadata",y).add("evm",C).add("solana",_).build(),"buildProvider");var Gt=n(()=>Le().version("0.0.0",I()).version("1.0.0",x()).build(),"versions");export{Gt as versions};
2
2
  //# sourceMappingURL=mod.js.map
package/dist/mod.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
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"]
3
+ "sources": ["../src/mod.ts", "../src/legacy/index.ts", "../src/signer.ts", "../src/signers/solana.ts", "../src/utils.ts", "../src/constants.ts", "../src/provider.ts", "../src/namespaces/evm.ts", "../src/namespaces/solana.ts", "../src/actions/solana.ts", "../src/builders/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 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 } 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// 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 = 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 './types.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\nimport { MetamaskSolanaSigner } 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 solanaProvider = getNetworkInstance(provider, Networks.SOLANA);\n\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(\n TxType.SOLANA,\n new MetamaskSolanaSigner(solanaProvider)\n );\n return signers;\n}\n", "import type { WalletStandardSolanaInstance } from '../types.js';\n\nimport {\n generalSolanaTransactionExecutor,\n type SolanaWeb3Signer,\n} from '@rango-dev/signer-solana';\nimport base58 from 'bs58';\nimport {\n type GenericSigner,\n SignerError,\n SignerErrorCode,\n type SolanaTransaction,\n} from 'rango-types';\n\nasync function executeSolanaTransaction(\n tx: SolanaTransaction,\n solanaProvider: WalletStandardSolanaInstance\n): Promise<string> {\n const DefaultSolanaSigner: SolanaWeb3Signer = async (\n solanaWeb3Transaction\n ) => {\n const [currentAccount] = solanaProvider.accounts;\n if (!currentAccount.publicKey) {\n throw new SignerError(\n SignerErrorCode.SIGN_TX_ERROR,\n 'Please make sure the required account is connected properly.'\n );\n }\n\n if (tx.from !== currentAccount.address) {\n throw new SignerError(\n SignerErrorCode.SIGN_TX_ERROR,\n `Your connected account doesn't match with the required account. Please ensure that you are connected with the correct account and try again.`\n );\n }\n\n try {\n const [signOutput] = await solanaProvider.features[\n 'solana:signTransaction'\n ].signTransaction({\n account: currentAccount,\n transaction: solanaWeb3Transaction.serialize(),\n });\n return signOutput.signedTransaction;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n const REJECTION_CODE = 4001;\n if (e && Object.hasOwn(e, 'code') && e.code === REJECTION_CODE) {\n throw new SignerError(SignerErrorCode.REJECTED_BY_USER, undefined, e);\n }\n throw new SignerError(SignerErrorCode.SIGN_TX_ERROR, undefined, e);\n }\n };\n return await generalSolanaTransactionExecutor(tx, DefaultSolanaSigner);\n}\n\nexport class MetamaskSolanaSigner implements GenericSigner<SolanaTransaction> {\n private _provider: WalletStandardSolanaInstance;\n\n constructor(provider: WalletStandardSolanaInstance) {\n this._provider = provider;\n }\n\n get provider(): WalletStandardSolanaInstance {\n return this._provider;\n }\n\n async signMessage(msg: string): Promise<string> {\n try {\n const encodedMessage = new TextEncoder().encode(msg);\n const [account] = this.provider.accounts;\n const [signOutput] = await this._provider.features[\n 'solana:signMessage'\n ].signMessage({\n message: encodedMessage,\n account,\n });\n return base58.encode(signOutput.signature);\n } catch (error) {\n throw new SignerError(SignerErrorCode.SIGN_TX_ERROR, undefined, error);\n }\n }\n\n async signAndSendTx(tx: SolanaTransaction): Promise<{ hash: string }> {\n const hash = await executeSolanaTransaction(tx, this._provider);\n return { hash };\n }\n}\n", "import type {\n MetamaskEvmProviderApi,\n Provider,\n WalletStandardSolanaInstance,\n} from './types.js';\nimport type { ProviderAPI as EvmProviderApi } from '@rango-dev/wallets-core/namespaces/evm';\n\nimport { LegacyNetworks } from '@rango-dev/wallets-core/legacy';\nimport { getWallets } from '@wallet-standard/app';\n\nimport {\n SOLANA_WALLET_STANDARD_MAINNET,\n WALLET_STANDARD_NAME,\n} from './constants.js';\n\nexport function metamask(): Provider | null {\n const { ethereum } = window;\n const solana = getSolanaWalletInstance();\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 if (solana) {\n instances.set(LegacyNetworks.SOLANA, solana);\n }\n\n return instances;\n}\nfunction isEthereumMetamaskProvider(ethereum: MetamaskEvmProviderApi): 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.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 solanaMetamask(): WalletStandardSolanaInstance {\n const instances = metamask();\n const solanaInstance = instances?.get(LegacyNetworks.SOLANA);\n if (!solanaInstance) {\n throw new Error(\n 'Metamask Solana instance is not available. Ensure that Solana support is enabled in your wallet.'\n );\n }\n return solanaInstance as WalletStandardSolanaInstance;\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}\nfunction getSolanaWalletInstance() {\n return getWallets()\n .get()\n .find(\n (wallet) =>\n wallet.name === WALLET_STANDARD_NAME &&\n wallet.chains.includes(SOLANA_WALLET_STANDARD_MAINNET)\n ) as WalletStandardSolanaInstance;\n}\n", "import { type ProviderMetadata } from '@rango-dev/wallets-core';\nimport {\n type BlockchainMeta,\n evmBlockchains,\n solanaBlockchain,\n} from 'rango-types';\n\nimport getSigners from './signer.js';\nimport { getInstanceOrThrow } from './utils.js';\n\nexport const WALLET_ID = 'metamask';\nexport const WALLET_STANDARD_NAME = 'MetaMask';\nexport const SOLANA_WALLET_STANDARD_MAINNET = 'solana:mainnet';\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 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: {\n getSigners: async () => getSigners(getInstanceOrThrow()),\n },\n },\n ],\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 { 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 .add('solana', solana)\n .build();\n\nexport { buildProvider };\n", "import type { EvmActions } from '@rango-dev/wallets-core/namespaces/evm';\n\nimport { ActionBuilder, NamespaceBuilder } from '@rango-dev/wallets-core';\nimport {\n builders as commonBuilders,\n connectAndUpdateStateForMultiNetworks,\n intoConnecting,\n intoConnectionFinished,\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 = new ActionBuilder<EvmActions, 'connect'>('connect')\n .action(actions.connect(evmMetamask))\n /*\n * Metamask Wallet's `connect` returns a list where the currently selected account\n * is always the first item. We're directly taking this first item as the active account.\n *\n * ***NOTE***: Please keep it synced with `wallets/core/src/namespaces/solana/builders.ts`.\n *\n */\n .and((_, connectResult) => ({\n ...connectResult,\n accounts: [connectResult.accounts[0]],\n }))\n .and(connectAndUpdateStateForMultiNetworks)\n .before(intoConnecting)\n .before(changeAccountSubscriber)\n .or(changeAccountCleanup)\n .or(standardizeAndThrowError)\n .after(intoConnectionFinished)\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", "import { ActionBuilder, NamespaceBuilder } from '@rango-dev/wallets-core';\nimport {\n builders as commonBuilders,\n standardizeAndThrowError,\n} from '@rango-dev/wallets-core/namespaces/common';\nimport {\n builders,\n type SolanaActions,\n} from '@rango-dev/wallets-core/namespaces/solana';\n\nimport { solanaActions } from '../actions/solana.js';\nimport { solanaBuilders } from '../builders/solana.js';\nimport { WALLET_ID } from '../constants.js';\nimport { solanaMetamask } from '../utils.js';\n\nconst [changeAccountSubscriber, changeAccountCleanup] = solanaBuilders\n .changeAccountSubscriber(solanaMetamask)\n .build();\n\nconst connect = builders\n .connect()\n .action(solanaActions.connect(solanaMetamask))\n .before(changeAccountSubscriber)\n .or(changeAccountCleanup)\n .or(standardizeAndThrowError)\n .build();\n\nconst canEagerConnect = new ActionBuilder<SolanaActions, 'canEagerConnect'>(\n 'canEagerConnect'\n)\n .action(solanaActions.canEagerConnect(solanaMetamask))\n .build();\n\nconst disconnect = commonBuilders\n .disconnect<SolanaActions>()\n .after(changeAccountCleanup)\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 type { WalletStandardSolanaInstance } from '../types.js';\nimport type { Context, FunctionWithContext } from '@rango-dev/wallets-core';\n\nimport {\n type SolanaActions,\n utils,\n} from '@rango-dev/wallets-core/namespaces/solana';\n\nfunction connect(\n getInstance: () => WalletStandardSolanaInstance\n): FunctionWithContext<SolanaActions['connect'], Context> {\n return async () => {\n const solanaInstance = getInstance();\n const connectResult = await solanaInstance.features[\n 'standard:connect'\n ].connect();\n return utils.formatAccountsToCAIP(\n connectResult.accounts.map((account) => account.address)\n );\n };\n}\nfunction canEagerConnect(getInstance: () => WalletStandardSolanaInstance) {\n return async () => {\n const solanaInstance = getInstance();\n\n if (!solanaInstance) {\n throw new Error(\n 'Trying to eagerly connect to your Solana wallet, but it seems that its instance is not available.'\n );\n }\n\n try {\n const result = await solanaInstance.features['standard:connect'].connect({\n silent: true,\n });\n return !!result.accounts.length;\n } catch {\n return false;\n }\n };\n}\nexport const solanaActions = { connect, canEagerConnect };\n", "import type { WalletStandardSolanaInstance } from '../types.js';\nimport type { StandardEventsChangeProperties } from '@wallet-standard/features';\n\nimport { ChangeAccountSubscriberBuilder } from '@rango-dev/wallets-core/namespaces/common';\nimport { utils } from '@rango-dev/wallets-core/namespaces/solana';\n\n// Hooks\nconst changeAccountSubscriber = (\n getInstance: () => WalletStandardSolanaInstance\n) =>\n new ChangeAccountSubscriberBuilder<\n StandardEventsChangeProperties,\n WalletStandardSolanaInstance\n >()\n .getInstance(getInstance)\n .validateEventPayload((accounts) => !!accounts.accounts?.length)\n .format(async (_, event) =>\n utils.formatAccountsToCAIP(\n event.accounts!.map((account) => account.address)\n )\n )\n .addEventListener((instance, callback) => {\n instance.features['standard:events'].on('change', callback);\n })\n .removeEventListener((_, __) => {});\n\nexport const solanaBuilders = { changeAccountSubscriber };\n"],
5
+ "mappings": "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",
6
+ "names": ["defineVersions", "canEagerlyConnectToEvm", "canSwitchNetworkToEvm", "getEvmAccounts", "subscribeToEvm", "switchNetworkForEvm", "WalletTypes", "evmBlockchains", "Networks", "dynamicImportWithRefinedError", "getNetworkInstance", "DefaultSignerFactory", "TxType", "generalSolanaTransactionExecutor", "base58", "SignerError", "SignerErrorCode", "executeSolanaTransaction", "tx", "solanaProvider", "generalSolanaTransactionExecutor", "__name", "solanaWeb3Transaction", "currentAccount", "SignerError", "SignerErrorCode", "signOutput", "e", "MetamaskSolanaSigner", "provider", "msg", "encodedMessage", "account", "base58", "error", "getSigners", "provider", "ethProvider", "getNetworkInstance", "Networks", "solanaProvider", "signers", "DefaultSignerFactory", "DefaultEvmSigner", "dynamicImportWithRefinedError", "TxType", "MetamaskSolanaSigner", "__name", "LegacyNetworks", "getWallets", "evmBlockchains", "solanaBlockchain", "WALLET_ID", "WALLET_STANDARD_NAME", "SOLANA_WALLET_STANDARD_MAINNET", "metadata", "allBlockchains", "evmBlockchains", "solanaBlockchain", "getSigners", "getInstanceOrThrow", "metamask", "ethereum", "solana", "getSolanaWalletInstance", "isEthereumMetamaskProvider", "instances", "LegacyNetworks", "__name", "evmMetamask", "evmInstance", "solanaMetamask", "solanaInstance", "getInstanceOrThrow", "getWallets", "wallet", "WALLET_STANDARD_NAME", "SOLANA_WALLET_STANDARD_MAINNET", "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", "ActionBuilder", "NamespaceBuilder", "commonBuilders", "connectAndUpdateStateForMultiNetworks", "intoConnecting", "intoConnectionFinished", "standardizeAndThrowError", "actions", "builders", "utils", "changeAccountSubscriber", "changeAccountCleanup", "builders", "evmMetamask", "instance", "accounts", "chainId", "utils", "connect", "ActionBuilder", "actions", "_", "connectResult", "connectAndUpdateStateForMultiNetworks", "intoConnecting", "standardizeAndThrowError", "intoConnectionFinished", "canEagerConnect", "disconnect", "commonBuilders", "canSwitchNetwork", "evm", "NamespaceBuilder", "WALLET_ID", "ActionBuilder", "NamespaceBuilder", "commonBuilders", "standardizeAndThrowError", "builders", "utils", "connect", "getInstance", "connectResult", "utils", "account", "__name", "canEagerConnect", "solanaInstance", "solanaActions", "ChangeAccountSubscriberBuilder", "utils", "changeAccountSubscriber", "__name", "getInstance", "ChangeAccountSubscriberBuilder", "accounts", "_", "event", "utils", "account", "instance", "callback", "__", "solanaBuilders", "changeAccountSubscriber", "changeAccountCleanup", "solanaBuilders", "solanaMetamask", "connect", "builders", "solanaActions", "standardizeAndThrowError", "canEagerConnect", "ActionBuilder", "disconnect", "commonBuilders", "solana", "NamespaceBuilder", "WALLET_ID", "buildProvider", "__name", "ProviderBuilder", "WALLET_ID", "context", "setState", "metamask", "metadata", "evm", "solana", "versions", "__name", "defineVersions", "buildLegacyProvider", "buildProvider"]
7
7
  }
@@ -1 +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
+ {"version":3,"file":"evm.d.ts","sourceRoot":"","sources":["../../src/namespaces/evm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAmEzE,QAAA,MAAM,GAAG,gEAKC,CAAC;AAEX,OAAO,EAAE,GAAG,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type SolanaActions } from '@rango-dev/wallets-core/namespaces/solana';
2
+ declare const solana: import("@rango-dev/wallets-core").ProxiedNamespace<SolanaActions>;
3
+ export { solana };
4
+ //# sourceMappingURL=solana.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana.d.ts","sourceRoot":"","sources":["../../src/namespaces/solana.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,2CAA2C,CAAC;AA8BnD,QAAA,MAAM,MAAM,mEAIF,CAAC;AAEX,OAAO,EAAE,MAAM,EAAE,CAAC"}
@@ -1 +1 @@
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}}}
1
+ {"inputs":{"src/signers/solana.ts":{"bytes":2756,"imports":[{"path":"@rango-dev/signer-solana","kind":"import-statement","external":true},{"path":"bs58","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/signer.ts":{"bytes":1009,"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":"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/constants.ts":{"bytes":1752,"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/utils.ts":{"bytes":3385,"imports":[{"path":"@rango-dev/wallets-core/legacy","kind":"import-statement","external":true},{"path":"@wallet-standard/app","kind":"import-statement","external":true},{"path":"src/constants.ts","kind":"import-statement","original":"./constants.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/legacy/index.ts":{"bytes":2704,"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/namespaces/evm.ts":{"bytes":2243,"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":1228,"imports":[{"path":"@rango-dev/wallets-core/namespaces/solana","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/builders/solana.ts":{"bytes":978,"imports":[{"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":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/namespaces/solana.ts":{"bytes":1264,"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/builders/solana.ts","kind":"import-statement","original":"../builders/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":659,"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":29462},"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-solana","kind":"import-statement","external":true},{"path":"bs58","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":"@wallet-standard/app","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","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},{"path":"@rango-dev/wallets-core/namespaces/solana","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":1156},"src/signer.ts":{"bytesInOutput":473},"src/signers/solana.ts":{"bytesInOutput":1295},"src/utils.ts":{"bytesInOutput":1271},"src/constants.ts":{"bytesInOutput":947},"src/provider.ts":{"bytesInOutput":267},"src/namespaces/evm.ts":{"bytesInOutput":898},"src/namespaces/solana.ts":{"bytesInOutput":531},"src/actions/solana.ts":{"bytesInOutput":564},"src/builders/solana.ts":{"bytesInOutput":476}},"bytes":8157}}}
@@ -1 +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"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAOA,QAAA,MAAM,aAAa,kDAaP,CAAC;AAEb,OAAO,EAAE,aAAa,EAAE,CAAC"}
package/dist/signer.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { Provider } from './utils.js';
1
+ import type { Provider } from './types.js';
2
2
  import type { SignerFactory } from 'rango-types';
3
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,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"}
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,CAcxB"}
@@ -0,0 +1,12 @@
1
+ import type { WalletStandardSolanaInstance } from '../types.js';
2
+ import { type GenericSigner, type SolanaTransaction } from 'rango-types';
3
+ export declare class MetamaskSolanaSigner implements GenericSigner<SolanaTransaction> {
4
+ private _provider;
5
+ constructor(provider: WalletStandardSolanaInstance);
6
+ get provider(): WalletStandardSolanaInstance;
7
+ signMessage(msg: string): Promise<string>;
8
+ signAndSendTx(tx: SolanaTransaction): Promise<{
9
+ hash: string;
10
+ }>;
11
+ }
12
+ //# 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,KAAK,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAOhE,OAAO,EACL,KAAK,aAAa,EAGlB,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AA4CrB,qBAAa,oBAAqB,YAAW,aAAa,CAAC,iBAAiB,CAAC;IAC3E,OAAO,CAAC,SAAS,CAA+B;gBAEpC,QAAQ,EAAE,4BAA4B;IAIlD,IAAI,QAAQ,IAAI,4BAA4B,CAE3C;IAEK,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBzC,aAAa,CAAC,EAAE,EAAE,iBAAiB,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAItE"}
@@ -0,0 +1,39 @@
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 { WalletWithFeatures as StandardWalletWithFeatures } from '@wallet-standard/base';
4
+ import { type SolanaSignMessageFeature, type SolanaSignTransactionFeature } from '@solana/wallet-standard-features';
5
+ import { type StandardConnectFeature, type StandardEventsFeature } from '@wallet-standard/features';
6
+ export type WalletStandardSolanaInstance = StandardWalletWithFeatures<StandardConnectFeature & StandardEventsFeature & SolanaSignTransactionFeature & SolanaSignMessageFeature>;
7
+ export type MetamaskEvmProviderApi = EvmProviderApi & {
8
+ isMetaMask?: boolean;
9
+ isBraveWallet?: boolean;
10
+ _events?: boolean;
11
+ _state?: boolean;
12
+ isApexWallet?: boolean;
13
+ isAvalanche?: boolean;
14
+ isBitKeep?: boolean;
15
+ isBlockWallet?: boolean;
16
+ isCoin98?: boolean;
17
+ isFordefi?: boolean;
18
+ __XDEFI?: boolean;
19
+ isMathWallet?: boolean;
20
+ isOkxWallet?: boolean;
21
+ isOKExWallet?: boolean;
22
+ isOneInchIOSWallet?: boolean;
23
+ isOneInchAndroidWallet?: boolean;
24
+ isOpera?: boolean;
25
+ isPortal?: boolean;
26
+ isRabby?: boolean;
27
+ isDefiant?: boolean;
28
+ isTokenPocket?: boolean;
29
+ isTokenary?: boolean;
30
+ isZeal?: boolean;
31
+ isZerion?: boolean;
32
+ isSafePal?: boolean;
33
+ };
34
+ export type ProviderObject = {
35
+ [LegacyNetworks.ETHEREUM]: MetamaskEvmProviderApi;
36
+ [LegacyNetworks.SOLANA]: WalletStandardSolanaInstance;
37
+ };
38
+ export type Provider = Map<keyof ProviderObject, ProviderObject[keyof ProviderObject]>;
39
+ //# 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,kBAAkB,IAAI,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAE9F,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,4BAA4B,EAClC,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC3B,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,4BAA4B,GAAG,0BAA0B,CACnE,sBAAsB,GACpB,qBAAqB,GACrB,4BAA4B,GAC5B,wBAAwB,CAC3B,CAAC;AACF,MAAM,MAAM,sBAAsB,GAAG,cAAc,GAAG;IACpD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AACF,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClD,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,4BAA4B,CAAC;CACvD,CAAC;AACF,MAAM,MAAM,QAAQ,GAAG,GAAG,CACxB,MAAM,cAAc,EACpB,cAAc,CAAC,MAAM,cAAc,CAAC,CACrC,CAAC"}
package/dist/utils.d.ts CHANGED
@@ -1,6 +1,7 @@
1
+ import type { Provider, WalletStandardSolanaInstance } from './types.js';
1
2
  import type { ProviderAPI as EvmProviderApi } from '@rango-dev/wallets-core/namespaces/evm';
2
- export type Provider = Record<string, any>;
3
3
  export declare function metamask(): Provider | null;
4
4
  export declare function evmMetamask(): EvmProviderApi;
5
+ export declare function solanaMetamask(): WalletStandardSolanaInstance;
5
6
  export declare function getInstanceOrThrow(): Provider;
6
7
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,QAAQ,EACR,4BAA4B,EAC7B,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,WAAW,IAAI,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAU5F,wBAAgB,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAiB1C;AAuED,wBAAgB,WAAW,IAAI,cAAc,CAY5C;AACD,wBAAgB,cAAc,IAAI,4BAA4B,CAS7D;AACD,wBAAgB,kBAAkB,IAAI,QAAQ,CAQ7C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rango-dev/provider-metamask",
3
- "version": "0.50.1-next.4",
3
+ "version": "0.51.1-next.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "source": "./src/mod.ts",
@@ -22,10 +22,18 @@
22
22
  },
23
23
  "dependencies": {
24
24
  "@rango-dev/signer-evm": "^0.40.0",
25
- "@rango-dev/wallets-core": "^0.49.1-next.4",
26
- "@rango-dev/wallets-shared": "^0.50.1-next.4",
25
+ "@rango-dev/signer-solana": "^0.44.0",
26
+ "@rango-dev/wallets-core": "^0.50.1-next.0",
27
+ "@rango-dev/wallets-shared": "^0.51.1-next.0",
28
+ "@wallet-standard/app": "^1.1.0",
29
+ "bs58": "^5.0.0",
27
30
  "rango-types": "^0.1.89"
28
31
  },
32
+ "devDependencies": {
33
+ "@solana/wallet-standard-features": "^1.3.0",
34
+ "@wallet-standard/base": "^1.1.0",
35
+ "@wallet-standard/features": "^1.1.0"
36
+ },
29
37
  "publishConfig": {
30
38
  "access": "public"
31
39
  }
package/readme.md CHANGED
@@ -7,13 +7,19 @@ More about implementation status can be found [here](../readme.md).
7
7
  ## Implementation notes/limitations
8
8
 
9
9
  ### Group
10
-
11
- #### 🚧 Solana
12
- MetaMask supports both **EVM** and **Solana**, but this integration currently supports **only EVM** and **Solana** is under construction.
10
+ MetaMask supports both **EVM** and **Solana**.
13
11
 
14
12
  ### Feature
15
13
 
16
- All implemented features are working correctly.
14
+ #### ⚠️ Switch Account
15
+
16
+ In MetaMask, you can have only one active account at a time, which may belong to either the Solana or EVM namespace. When you connect to MetaMask, it connects to the currently active account—this account could belong to either namespace. Additionally, MetaMask may also establish a random connection to another account from the opposite namespace.
17
+
18
+ When a user switches accounts in MetaMask, the wallet emits an update event tied to the currently active namespace—either EVM or Solana.
19
+ The switchAccount notification is scoped to that active namespace, meaning only the relevant provider will receive the update.
20
+
21
+ Regardless of which namespace triggers the event, MetaMask always executes transactions using the correct account for the selected chain.
22
+ This ensures consistent behavior and prevents cross-namespace conflicts between Solana and EVM contexts.
17
23
 
18
24
  ---
19
25
 
@@ -0,0 +1,42 @@
1
+ import type { WalletStandardSolanaInstance } from '../types.js';
2
+ import type { Context, FunctionWithContext } from '@rango-dev/wallets-core';
3
+
4
+ import {
5
+ type SolanaActions,
6
+ utils,
7
+ } from '@rango-dev/wallets-core/namespaces/solana';
8
+
9
+ function connect(
10
+ getInstance: () => WalletStandardSolanaInstance
11
+ ): FunctionWithContext<SolanaActions['connect'], Context> {
12
+ return async () => {
13
+ const solanaInstance = getInstance();
14
+ const connectResult = await solanaInstance.features[
15
+ 'standard:connect'
16
+ ].connect();
17
+ return utils.formatAccountsToCAIP(
18
+ connectResult.accounts.map((account) => account.address)
19
+ );
20
+ };
21
+ }
22
+ function canEagerConnect(getInstance: () => WalletStandardSolanaInstance) {
23
+ return async () => {
24
+ const solanaInstance = getInstance();
25
+
26
+ if (!solanaInstance) {
27
+ throw new Error(
28
+ 'Trying to eagerly connect to your Solana wallet, but it seems that its instance is not available.'
29
+ );
30
+ }
31
+
32
+ try {
33
+ const result = await solanaInstance.features['standard:connect'].connect({
34
+ silent: true,
35
+ });
36
+ return !!result.accounts.length;
37
+ } catch {
38
+ return false;
39
+ }
40
+ };
41
+ }
42
+ export const solanaActions = { connect, canEagerConnect };
@@ -0,0 +1,27 @@
1
+ import type { WalletStandardSolanaInstance } from '../types.js';
2
+ import type { StandardEventsChangeProperties } from '@wallet-standard/features';
3
+
4
+ import { ChangeAccountSubscriberBuilder } from '@rango-dev/wallets-core/namespaces/common';
5
+ import { utils } from '@rango-dev/wallets-core/namespaces/solana';
6
+
7
+ // Hooks
8
+ const changeAccountSubscriber = (
9
+ getInstance: () => WalletStandardSolanaInstance
10
+ ) =>
11
+ new ChangeAccountSubscriberBuilder<
12
+ StandardEventsChangeProperties,
13
+ WalletStandardSolanaInstance
14
+ >()
15
+ .getInstance(getInstance)
16
+ .validateEventPayload((accounts) => !!accounts.accounts?.length)
17
+ .format(async (_, event) =>
18
+ utils.formatAccountsToCAIP(
19
+ event.accounts!.map((account) => account.address)
20
+ )
21
+ )
22
+ .addEventListener((instance, callback) => {
23
+ instance.features['standard:events'].on('change', callback);
24
+ })
25
+ .removeEventListener((_, __) => {});
26
+
27
+ export const solanaBuilders = { changeAccountSubscriber };
package/src/constants.ts CHANGED
@@ -1,11 +1,16 @@
1
1
  import { type ProviderMetadata } from '@rango-dev/wallets-core';
2
- import { type BlockchainMeta, evmBlockchains } from 'rango-types';
2
+ import {
3
+ type BlockchainMeta,
4
+ evmBlockchains,
5
+ solanaBlockchain,
6
+ } from 'rango-types';
3
7
 
4
8
  import getSigners from './signer.js';
5
9
  import { getInstanceOrThrow } from './utils.js';
6
10
 
7
11
  export const WALLET_ID = 'metamask';
8
-
12
+ export const WALLET_STANDARD_NAME = 'MetaMask';
13
+ export const SOLANA_WALLET_STANDARD_MAINNET = 'solana:mainnet';
9
14
  export const metadata: ProviderMetadata = {
10
15
  name: 'MetaMask',
11
16
  icon: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/metamask/icon.svg',
@@ -31,6 +36,13 @@ export const metadata: ProviderMetadata = {
31
36
  getSupportedChains: (allBlockchains: BlockchainMeta[]) =>
32
37
  evmBlockchains(allBlockchains),
33
38
  },
39
+ {
40
+ label: 'Solana',
41
+ value: 'Solana',
42
+ id: 'SOLANA',
43
+ getSupportedChains: (allBlockchains: BlockchainMeta[]) =>
44
+ solanaBlockchain(allBlockchains),
45
+ },
34
46
  ],
35
47
  },
36
48
  },
@@ -20,7 +20,7 @@ import {
20
20
  import { evmBlockchains } from 'rango-types';
21
21
 
22
22
  import signer from '../signer.js';
23
- import { metamask as metamask_instance, type Provider } from '../utils.js';
23
+ import { metamask as metamask_instance } from '../utils.js';
24
24
 
25
25
  const WALLET = WalletTypes.META_MASK;
26
26
 
@@ -49,7 +49,8 @@ export const subscribe: Subscribe = subscribeToEvm;
49
49
  export const switchNetwork: SwitchNetwork = switchNetworkForEvm;
50
50
 
51
51
  export const canSwitchNetworkTo: CanSwitchNetwork = canSwitchNetworkToEvm;
52
-
52
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
53
+ type Provider = any;
53
54
  export const getSigners: (provider: Provider) => Promise<SignerFactory> =
54
55
  signer;
55
56
 
@@ -1,8 +1,11 @@
1
1
  import type { EvmActions } from '@rango-dev/wallets-core/namespaces/evm';
2
2
 
3
- import { NamespaceBuilder } from '@rango-dev/wallets-core';
3
+ import { ActionBuilder, NamespaceBuilder } from '@rango-dev/wallets-core';
4
4
  import {
5
5
  builders as commonBuilders,
6
+ connectAndUpdateStateForMultiNetworks,
7
+ intoConnecting,
8
+ intoConnectionFinished,
6
9
  standardizeAndThrowError,
7
10
  } from '@rango-dev/wallets-core/namespaces/common';
8
11
  import {
@@ -26,12 +29,25 @@ const [changeAccountSubscriber, changeAccountCleanup] = builders
26
29
  })
27
30
  .build();
28
31
 
29
- const connect = builders
30
- .connect()
32
+ const connect = new ActionBuilder<EvmActions, 'connect'>('connect')
31
33
  .action(actions.connect(evmMetamask))
34
+ /*
35
+ * Metamask Wallet's `connect` returns a list where the currently selected account
36
+ * is always the first item. We're directly taking this first item as the active account.
37
+ *
38
+ * ***NOTE***: Please keep it synced with `wallets/core/src/namespaces/solana/builders.ts`.
39
+ *
40
+ */
41
+ .and((_, connectResult) => ({
42
+ ...connectResult,
43
+ accounts: [connectResult.accounts[0]],
44
+ }))
45
+ .and(connectAndUpdateStateForMultiNetworks)
46
+ .before(intoConnecting)
32
47
  .before(changeAccountSubscriber)
33
48
  .or(changeAccountCleanup)
34
49
  .or(standardizeAndThrowError)
50
+ .after(intoConnectionFinished)
35
51
  .build();
36
52
 
37
53
  const canEagerConnect = builders
@@ -0,0 +1,45 @@
1
+ import { ActionBuilder, NamespaceBuilder } from '@rango-dev/wallets-core';
2
+ import {
3
+ builders as commonBuilders,
4
+ standardizeAndThrowError,
5
+ } from '@rango-dev/wallets-core/namespaces/common';
6
+ import {
7
+ builders,
8
+ type SolanaActions,
9
+ } from '@rango-dev/wallets-core/namespaces/solana';
10
+
11
+ import { solanaActions } from '../actions/solana.js';
12
+ import { solanaBuilders } from '../builders/solana.js';
13
+ import { WALLET_ID } from '../constants.js';
14
+ import { solanaMetamask } from '../utils.js';
15
+
16
+ const [changeAccountSubscriber, changeAccountCleanup] = solanaBuilders
17
+ .changeAccountSubscriber(solanaMetamask)
18
+ .build();
19
+
20
+ const connect = builders
21
+ .connect()
22
+ .action(solanaActions.connect(solanaMetamask))
23
+ .before(changeAccountSubscriber)
24
+ .or(changeAccountCleanup)
25
+ .or(standardizeAndThrowError)
26
+ .build();
27
+
28
+ const canEagerConnect = new ActionBuilder<SolanaActions, 'canEagerConnect'>(
29
+ 'canEagerConnect'
30
+ )
31
+ .action(solanaActions.canEagerConnect(solanaMetamask))
32
+ .build();
33
+
34
+ const disconnect = commonBuilders
35
+ .disconnect<SolanaActions>()
36
+ .after(changeAccountCleanup)
37
+ .build();
38
+
39
+ const solana = new NamespaceBuilder<SolanaActions>('Solana', WALLET_ID)
40
+ .action(connect)
41
+ .action(disconnect)
42
+ .action(canEagerConnect)
43
+ .build();
44
+
45
+ export { solana };
package/src/provider.ts CHANGED
@@ -2,6 +2,7 @@ import { ProviderBuilder } from '@rango-dev/wallets-core';
2
2
 
3
3
  import { metadata, WALLET_ID } from './constants.js';
4
4
  import { evm } from './namespaces/evm.js';
5
+ import { solana } from './namespaces/solana.js';
5
6
  import { metamask as metamask } from './utils.js';
6
7
 
7
8
  const buildProvider = () =>
@@ -16,6 +17,7 @@ const buildProvider = () =>
16
17
  })
17
18
  .config('metadata', metadata)
18
19
  .add('evm', evm)
20
+ .add('solana', solana)
19
21
  .build();
20
22
 
21
23
  export { buildProvider };
package/src/signer.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { Provider } from './utils.js';
1
+ import type { Provider } from './types.js';
2
2
  import type { SignerFactory } from 'rango-types';
3
3
 
4
4
  import { LegacyNetworks as Networks } from '@rango-dev/wallets-core/legacy';
@@ -8,15 +8,22 @@ import {
8
8
  } from '@rango-dev/wallets-shared';
9
9
  import { DefaultSignerFactory, TransactionType as TxType } from 'rango-types';
10
10
 
11
+ import { MetamaskSolanaSigner } from './signers/solana.js';
12
+
11
13
  export default async function getSigners(
12
14
  provider: Provider
13
15
  ): Promise<SignerFactory> {
14
16
  const ethProvider = getNetworkInstance(provider, Networks.ETHEREUM);
17
+ const solanaProvider = getNetworkInstance(provider, Networks.SOLANA);
18
+
15
19
  const signers = new DefaultSignerFactory();
16
20
  const { DefaultEvmSigner } = await dynamicImportWithRefinedError(
17
21
  async () => await import('@rango-dev/signer-evm')
18
22
  );
19
23
  signers.registerSigner(TxType.EVM, new DefaultEvmSigner(ethProvider));
20
-
24
+ signers.registerSigner(
25
+ TxType.SOLANA,
26
+ new MetamaskSolanaSigner(solanaProvider)
27
+ );
21
28
  return signers;
22
29
  }
@@ -0,0 +1,88 @@
1
+ import type { WalletStandardSolanaInstance } from '../types.js';
2
+
3
+ import {
4
+ generalSolanaTransactionExecutor,
5
+ type SolanaWeb3Signer,
6
+ } from '@rango-dev/signer-solana';
7
+ import base58 from 'bs58';
8
+ import {
9
+ type GenericSigner,
10
+ SignerError,
11
+ SignerErrorCode,
12
+ type SolanaTransaction,
13
+ } from 'rango-types';
14
+
15
+ async function executeSolanaTransaction(
16
+ tx: SolanaTransaction,
17
+ solanaProvider: WalletStandardSolanaInstance
18
+ ): Promise<string> {
19
+ const DefaultSolanaSigner: SolanaWeb3Signer = async (
20
+ solanaWeb3Transaction
21
+ ) => {
22
+ const [currentAccount] = solanaProvider.accounts;
23
+ if (!currentAccount.publicKey) {
24
+ throw new SignerError(
25
+ SignerErrorCode.SIGN_TX_ERROR,
26
+ 'Please make sure the required account is connected properly.'
27
+ );
28
+ }
29
+
30
+ if (tx.from !== currentAccount.address) {
31
+ throw new SignerError(
32
+ SignerErrorCode.SIGN_TX_ERROR,
33
+ `Your connected account doesn't match with the required account. Please ensure that you are connected with the correct account and try again.`
34
+ );
35
+ }
36
+
37
+ try {
38
+ const [signOutput] = await solanaProvider.features[
39
+ 'solana:signTransaction'
40
+ ].signTransaction({
41
+ account: currentAccount,
42
+ transaction: solanaWeb3Transaction.serialize(),
43
+ });
44
+ return signOutput.signedTransaction;
45
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
46
+ } catch (e: any) {
47
+ const REJECTION_CODE = 4001;
48
+ if (e && Object.hasOwn(e, 'code') && e.code === REJECTION_CODE) {
49
+ throw new SignerError(SignerErrorCode.REJECTED_BY_USER, undefined, e);
50
+ }
51
+ throw new SignerError(SignerErrorCode.SIGN_TX_ERROR, undefined, e);
52
+ }
53
+ };
54
+ return await generalSolanaTransactionExecutor(tx, DefaultSolanaSigner);
55
+ }
56
+
57
+ export class MetamaskSolanaSigner implements GenericSigner<SolanaTransaction> {
58
+ private _provider: WalletStandardSolanaInstance;
59
+
60
+ constructor(provider: WalletStandardSolanaInstance) {
61
+ this._provider = provider;
62
+ }
63
+
64
+ get provider(): WalletStandardSolanaInstance {
65
+ return this._provider;
66
+ }
67
+
68
+ async signMessage(msg: string): Promise<string> {
69
+ try {
70
+ const encodedMessage = new TextEncoder().encode(msg);
71
+ const [account] = this.provider.accounts;
72
+ const [signOutput] = await this._provider.features[
73
+ 'solana:signMessage'
74
+ ].signMessage({
75
+ message: encodedMessage,
76
+ account,
77
+ });
78
+ return base58.encode(signOutput.signature);
79
+ } catch (error) {
80
+ throw new SignerError(SignerErrorCode.SIGN_TX_ERROR, undefined, error);
81
+ }
82
+ }
83
+
84
+ async signAndSendTx(tx: SolanaTransaction): Promise<{ hash: string }> {
85
+ const hash = await executeSolanaTransaction(tx, this._provider);
86
+ return { hash };
87
+ }
88
+ }
package/src/types.ts ADDED
@@ -0,0 +1,54 @@
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 { WalletWithFeatures as StandardWalletWithFeatures } from '@wallet-standard/base';
4
+
5
+ import {
6
+ type SolanaSignMessageFeature,
7
+ type SolanaSignTransactionFeature,
8
+ } from '@solana/wallet-standard-features';
9
+ import {
10
+ type StandardConnectFeature,
11
+ type StandardEventsFeature,
12
+ } from '@wallet-standard/features';
13
+
14
+ export type WalletStandardSolanaInstance = StandardWalletWithFeatures<
15
+ StandardConnectFeature &
16
+ StandardEventsFeature &
17
+ SolanaSignTransactionFeature &
18
+ SolanaSignMessageFeature
19
+ >;
20
+ export type MetamaskEvmProviderApi = EvmProviderApi & {
21
+ isMetaMask?: boolean;
22
+ isBraveWallet?: boolean;
23
+ _events?: boolean;
24
+ _state?: boolean;
25
+ isApexWallet?: boolean;
26
+ isAvalanche?: boolean;
27
+ isBitKeep?: boolean;
28
+ isBlockWallet?: boolean;
29
+ isCoin98?: boolean;
30
+ isFordefi?: boolean;
31
+ __XDEFI?: boolean;
32
+ isMathWallet?: boolean;
33
+ isOkxWallet?: boolean;
34
+ isOKExWallet?: boolean;
35
+ isOneInchIOSWallet?: boolean;
36
+ isOneInchAndroidWallet?: boolean;
37
+ isOpera?: boolean;
38
+ isPortal?: boolean;
39
+ isRabby?: boolean;
40
+ isDefiant?: boolean;
41
+ isTokenPocket?: boolean;
42
+ isTokenary?: boolean;
43
+ isZeal?: boolean;
44
+ isZerion?: boolean;
45
+ isSafePal?: boolean;
46
+ };
47
+ export type ProviderObject = {
48
+ [LegacyNetworks.ETHEREUM]: MetamaskEvmProviderApi;
49
+ [LegacyNetworks.SOLANA]: WalletStandardSolanaInstance;
50
+ };
51
+ export type Provider = Map<
52
+ keyof ProviderObject,
53
+ ProviderObject[keyof ProviderObject]
54
+ >;
package/src/utils.ts CHANGED
@@ -1,13 +1,21 @@
1
+ import type {
2
+ MetamaskEvmProviderApi,
3
+ Provider,
4
+ WalletStandardSolanaInstance,
5
+ } from './types.js';
1
6
  import type { ProviderAPI as EvmProviderApi } from '@rango-dev/wallets-core/namespaces/evm';
2
7
 
3
8
  import { LegacyNetworks } from '@rango-dev/wallets-core/legacy';
9
+ import { getWallets } from '@wallet-standard/app';
4
10
 
5
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
6
- export type Provider = Record<string, any>;
11
+ import {
12
+ SOLANA_WALLET_STANDARD_MAINNET,
13
+ WALLET_STANDARD_NAME,
14
+ } from './constants.js';
7
15
 
8
16
  export function metamask(): Provider | null {
9
17
  const { ethereum } = window;
10
-
18
+ const solana = getSolanaWalletInstance();
11
19
  if (!ethereum || !isEthereumMetamaskProvider(ethereum)) {
12
20
  return null;
13
21
  }
@@ -17,10 +25,13 @@ export function metamask(): Provider | null {
17
25
  if (ethereum) {
18
26
  instances.set(LegacyNetworks.ETHEREUM, ethereum);
19
27
  }
28
+ if (solana) {
29
+ instances.set(LegacyNetworks.SOLANA, solana);
30
+ }
20
31
 
21
32
  return instances;
22
33
  }
23
- function isEthereumMetamaskProvider(ethereum: Provider): boolean {
34
+ function isEthereumMetamaskProvider(ethereum: MetamaskEvmProviderApi): boolean {
24
35
  if (!ethereum?.isMetaMask) {
25
36
  return false;
26
37
  }
@@ -85,9 +96,6 @@ function isEthereumMetamaskProvider(ethereum: Provider): boolean {
85
96
  if (ethereum.isZerion) {
86
97
  return false;
87
98
  }
88
- if (ethereum.isPhantom) {
89
- return false;
90
- }
91
99
  if (ethereum.isSafePal) {
92
100
  return false;
93
101
  }
@@ -106,6 +114,16 @@ export function evmMetamask(): EvmProviderApi {
106
114
 
107
115
  return evmInstance as EvmProviderApi;
108
116
  }
117
+ export function solanaMetamask(): WalletStandardSolanaInstance {
118
+ const instances = metamask();
119
+ const solanaInstance = instances?.get(LegacyNetworks.SOLANA);
120
+ if (!solanaInstance) {
121
+ throw new Error(
122
+ 'Metamask Solana instance is not available. Ensure that Solana support is enabled in your wallet.'
123
+ );
124
+ }
125
+ return solanaInstance as WalletStandardSolanaInstance;
126
+ }
109
127
  export function getInstanceOrThrow(): Provider {
110
128
  const instances = metamask();
111
129
 
@@ -115,3 +133,12 @@ export function getInstanceOrThrow(): Provider {
115
133
 
116
134
  return instances;
117
135
  }
136
+ function getSolanaWalletInstance() {
137
+ return getWallets()
138
+ .get()
139
+ .find(
140
+ (wallet) =>
141
+ wallet.name === WALLET_STANDARD_NAME &&
142
+ wallet.chains.includes(SOLANA_WALLET_STANDARD_MAINNET)
143
+ ) as WalletStandardSolanaInstance;
144
+ }