@rango-dev/provider-coinbase 0.51.1-next.1 → 0.51.1-next.3

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.
Files changed (42) hide show
  1. package/dist/actions/solana.d.ts +4 -0
  2. package/dist/actions/solana.d.ts.map +1 -0
  3. package/dist/constants.d.ts +4 -0
  4. package/dist/constants.d.ts.map +1 -0
  5. package/dist/{index.d.ts → legacy/index.d.ts} +7 -3
  6. package/dist/legacy/index.d.ts.map +1 -0
  7. package/dist/mod.d.ts +3 -0
  8. package/dist/mod.d.ts.map +1 -0
  9. package/dist/mod.js +2 -0
  10. package/dist/mod.js.map +7 -0
  11. package/dist/namespaces/evm.d.ts +4 -0
  12. package/dist/namespaces/evm.d.ts.map +1 -0
  13. package/dist/namespaces/solana.d.ts +4 -0
  14. package/dist/namespaces/solana.d.ts.map +1 -0
  15. package/dist/provider-coinbase.build.json +1 -1
  16. package/dist/provider.d.ts +3 -0
  17. package/dist/provider.d.ts.map +1 -0
  18. package/dist/signer.d.ts +2 -2
  19. package/dist/signer.d.ts.map +1 -1
  20. package/dist/signers/solana-signer.d.ts.map +1 -0
  21. package/dist/utils.d.ts +10 -0
  22. package/dist/utils.d.ts.map +1 -0
  23. package/package.json +8 -8
  24. package/readme.md +45 -1
  25. package/src/actions/solana.ts +36 -0
  26. package/src/constants.ts +51 -0
  27. package/src/{index.ts → legacy/index.ts} +53 -7
  28. package/src/mod.ts +12 -0
  29. package/src/namespaces/evm.ts +82 -0
  30. package/src/namespaces/solana.ts +60 -0
  31. package/src/provider.ts +23 -0
  32. package/src/signer.ts +3 -3
  33. package/src/utils.ts +75 -0
  34. package/dist/helpers.d.ts +0 -4
  35. package/dist/helpers.d.ts.map +0 -1
  36. package/dist/index.d.ts.map +0 -1
  37. package/dist/index.js +0 -2
  38. package/dist/index.js.map +0 -7
  39. package/dist/solana-signer.d.ts.map +0 -1
  40. package/src/helpers.ts +0 -41
  41. /package/dist/{solana-signer.d.ts → signers/solana-signer.d.ts} +0 -0
  42. /package/src/{solana-signer.ts → signers/solana-signer.ts} +0 -0
@@ -0,0 +1,4 @@
1
+ export declare const solanaActions: {
2
+ canEagerConnectAction: () => Promise<boolean>;
3
+ };
4
+ //# sourceMappingURL=solana.d.ts.map
@@ -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,4 @@
1
+ import { type ProviderMetadata } from '@rango-dev/wallets-core';
2
+ export declare const WALLET_ID = "coinbase";
3
+ export declare const metadata: ProviderMetadata;
4
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAUhE,eAAO,MAAM,SAAS,aAAa,CAAC;AAEpC,eAAO,MAAM,QAAQ,EAAE,gBAsCtB,CAAC"}
@@ -1,7 +1,9 @@
1
+ import type { Provider } from '../utils.js';
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
- import { Networks, WalletTypes } from '@rango-dev/wallets-shared';
4
- import { coinbase as coinbase_instance } from './helpers.js';
4
+ import { type LegacyProviderInterface, LegacyNetworks as Networks } from '@rango-dev/wallets-core/legacy';
5
+ import { WalletTypes } from '@rango-dev/wallets-shared';
6
+ import { coinbase as coinbase_instance } from '../utils.js';
5
7
  export declare const config: {
6
8
  type: WalletTypes;
7
9
  defaultNetwork: Networks;
@@ -11,7 +13,9 @@ export declare const connect: Connect;
11
13
  export declare const subscribe: Subscribe;
12
14
  export declare const switchNetwork: SwitchNetwork;
13
15
  export declare const canSwitchNetworkTo: CanSwitchNetwork;
14
- export declare const getSigners: (provider: any) => Promise<SignerFactory>;
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,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,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,EACL,KAAK,uBAAuB,EAC5B,cAAc,IAAI,QAAQ,EAC3B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAML,WAAW,EACZ,MAAM,2BAA2B,CAAC;AASnC,OAAO,EACL,QAAQ,IAAI,iBAAiB,EAG9B,MAAM,aAAa,CAAC;AAIrB,eAAO,MAAM,MAAM;;;CAGlB,CAAC;AAEF,eAAO,MAAM,WAAW,0BAAoB,CAAC;AAC7C,eAAO,MAAM,OAAO,EAAE,OAsBrB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,SA6CvB,CAAC;AACF,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,eAM7B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,CAAC,cAAc,EAAE,cAAc,EAAE,KAAK,UAqCjE,CAAC;AAEF,QAAA,MAAM,mBAAmB,EAAE,MAAM,uBAU/B,CAAC;AAEH,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
package/dist/mod.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ declare const versions: () => import("@rango-dev/wallets-core/utils").VersionedProviders;
2
+ export { versions };
3
+ //# sourceMappingURL=mod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAKA,QAAA,MAAM,QAAQ,kEAIF,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,CAAC"}
package/dist/mod.js ADDED
@@ -0,0 +1,2 @@
1
+ var V=Object.defineProperty;var o=(e,n)=>V(e,"name",{value:n,configurable:!0});import{defineVersions as _e}from"@rango-dev/wallets-core/utils";import{LegacyNetworks as r}from"@rango-dev/wallets-core/legacy";import{canEagerlyConnectToEvm as G,canSwitchNetworkToEvm as J,chooseInstance as w,getEvmAccounts as K,switchNetworkForEvm as Q,WalletTypes as X}from"@rango-dev/wallets-shared";import{evmBlockchains as T,isEvmBlockchain as Y,isSolanaBlockchain as Z,solanaBlockchain as M}from"rango-types";import{dynamicImportWithRefinedError as q,getNetworkInstance as k,Networks as P}from"@rango-dev/wallets-shared";import{DefaultSignerFactory as z,TransactionType as x}from"rango-types";import{DefaultSolanaSigner as j}from"@rango-dev/signer-solana";import D from"bs58";var h=class extends j{static{o(this,"CustomSolanaSigner")}constructor(n){super(n)}async signMessage(n){let{signature:t}=await this.provider.signMessage(n);return D.encode(t)}};async function u(e){let n=k(e,P.ETHEREUM),t=k(e,P.SOLANA),a=new z,{DefaultEvmSigner:i}=await q(async()=>await import("@rango-dev/signer-evm"));return a.registerSigner(x.EVM,new i(n)),a.registerSigner(x.SOLANA,new h(t)),a}o(u,"getSigners");import{LegacyNetworks as p}from"@rango-dev/wallets-core/legacy";function l(){let{coinbaseWalletExtension:e,coinbaseSolana:n}=window;if(!n&&!e)return null;let t=new Map;return e&&t.set(p.ETHEREUM,e),n&&t.set(p.SOLANA,n),t}o(l,"coinbase");function m(){let n=l()?.get(p.ETHEREUM);if(!n)throw new Error("Coinbase not injected or EVM not enabled. Please check your wallet.");return n}o(m,"evmCoinbase");function c(){let n=l()?.get(p.SOLANA);if(!n)throw new Error("Coinbase not injected or Solana not enabled. Please check your wallet.");return n}o(c,"solanaCoinbase");function I(){let e=l();if(!e)throw new Error("Coinbase is not injected. Please check your wallet.");return e}o(I,"getInstanceOrThrow");async function N(e){return await e.connect(),{accounts:[e.publicKey.toString()],chainId:p.SOLANA}}o(N,"getSolanaAccounts");var $=X.COINBASE,ee={type:$,defaultNetwork:r.ETHEREUM},ne=l,oe=o(async({instance:e,meta:n})=>{let t=w(e,n,r.ETHEREUM),a=[];if(t){let s=await K(t);a.push(s)}let i=c();if(i){let s=await N(i);a.push(s)}return a},"connect"),te=o(e=>{let n=w(e.instance,e.meta,r.ETHEREUM),t=w(e.instance,e.meta,r.SOLANA),{connect:a,updateAccounts:i,state:s,updateChainId:S,meta:A}=e,y=o(f=>{let g=A.filter(Y).find(b=>b.name===r.ETHEREUM)?.chainId;s.connected&&(s.network!=r.ETHEREUM&&g&&S(g),i(f))},"handleEvmAccountsChanged"),C=o(async f=>{s.network!=r.SOLANA&&S(A.filter(Z)[0].chainId);let g=r.SOLANA;if(f){let b=f.toString();i([b])}else a(g)},"handleSolanaAccountChanged");return n?.on?.("accountsChanged",y),t?.on?.("accountChanged",C),()=>{n?.off?.("accountsChanged",y),t?.off?.("accountChanged",C)}},"subscribe"),ae=Q,re=J,ce=u,ie=o(async({instance:e,meta:n})=>{let t=w(e,n,r.ETHEREUM);return t?G({instance:t,meta:n}):Promise.resolve(!1)},"canEagerConnect"),se=o(e=>{let n=T(e),t=M(e);return{name:"Coinbase",img:"https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/coinbase/icon.svg",installLink:{CHROME:"https://chrome.google.com/webstore/detail/coinbase-wallet-extension/hnfanknocfeofbddgcijnmhnfnkdnaad",BRAVE:"https://chrome.google.com/webstore/detail/coinbase-wallet-extension/hnfanknocfeofbddgcijnmhnfnkdnaad",DEFAULT:"https://www.coinbase.com/wallet"},color:"#2a62f5",supportedChains:[...n,...t],needsNamespace:{selection:"multiple",data:[{label:"EVM",value:"EVM",id:"ETH",getSupportedChains:a=>T(a)},{label:"Solana",value:"Solana",id:"SOLANA",getSupportedChains:a=>M(a)}]}}},"getWalletInfo"),L=o(()=>({config:ee,getInstance:ne,connect:oe,subscribe:te,switchNetwork:ae,canSwitchNetworkTo:re,getSigners:ce,getWalletInfo:se,canEagerConnect:ie}),"buildLegacyProvider");import{ProviderBuilder as Ue}from"@rango-dev/wallets-core";import"@rango-dev/wallets-core";import{evmBlockchains as le,solanaBlockchain as me}from"rango-types";var d="coinbase",B={name:"Coinbase",icon:"https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/coinbase/icon.svg",extensions:{chrome:"https://chrome.google.com/webstore/detail/coinbase-wallet-extension/hnfanknocfeofbddgcijnmhnfnkdnaad",brave:"https://chrome.google.com/webstore/detail/coinbase-wallet-extension/hnfanknocfeofbddgcijnmhnfnkdnaad",homepage:"https://www.coinbase.com/wallet"},properties:[{name:"namespaces",value:{selection:"multiple",data:[{label:"EVM",value:"EVM",id:"ETH",getSupportedChains:e=>le(e)},{label:"Solana",value:"Solana",id:"SOLANA",getSupportedChains:e=>me(e)}]}},{name:"signers",value:{getSigners:async()=>u(I())}}]};import{ActionBuilder as de,NamespaceBuilder as ue}from"@rango-dev/wallets-core";import{builders as pe,connectAndUpdateStateForMultiNetworks as fe,intoConnecting as ge,intoConnectionFinished as he,standardizeAndThrowError as we}from"@rango-dev/wallets-core/namespaces/common";import{actions as v,builders as E,utils as be}from"@rango-dev/wallets-core/namespaces/evm";var[ve,R]=E.changeAccountSubscriber(m).format(async(e,n)=>{let t=await e.request({method:"eth_chainId"});return be.formatAccountsToCAIP([n[0]],t)}).build(),Ee=new de("connect").action(v.connect(m)).and((e,n)=>({...n,accounts:[n.accounts[0]]})).and(fe).before(ge).before(ve).or(R).or(we).after(he).build(),Se=pe.disconnect().before(()=>{m().disconnect()}).after(R).build(),Ae=E.canEagerConnect().action(v.canEagerConnect(m)).build(),ye=E.canSwitchNetwork().action(v.canSwitchNetwork()).build(),O=new ue("EVM",d).action(Ee).action(Se).action(Ae).action(ye).build();import{ActionBuilder as U,NamespaceBuilder as ke}from"@rango-dev/wallets-core";import{builders as Pe,connectAndUpdateStateForSingleNetwork as xe,intoConnecting as Ie,intoConnectionFinished as Ne,standardizeAndThrowError as Te}from"@rango-dev/wallets-core/namespaces/common";import{actions as Me,builders as Le}from"@rango-dev/wallets-core/namespaces/solana";var Ce=o(async()=>{let e=m();if(!c())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"),H={canEagerConnectAction:Ce};var[Be,_]=Le.changeAccountSubscriber(c).build(),Re=new U("connect").action(Me.connect(c)).and((e,n)=>[n[0]]).and(xe).before(Ie).before(Be).after(Ne).or(_).or(Te).build(),Oe=Pe.disconnect().before(()=>{c().disconnect()}).after(_).build(),He=new U("canEagerConnect").action(H.canEagerConnectAction).build(),F=new ke("Solana",d).action(Re).action(Oe).action(He).build();var W=o(()=>new Ue(d).init(function(e){let[,n]=e.state();l()&&(n("installed",!0),console.debug("[coinbase] instance detected.",e))}).config("metadata",B).add("solana",F).add("evm",O).build(),"buildProvider");var Un=o(()=>_e().version("0.0.0",L()).version("1.0.0",W()).build(),"versions");export{Un as versions};
2
+ //# sourceMappingURL=mod.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/mod.ts", "../src/legacy/index.ts", "../src/signer.ts", "../src/signers/solana-signer.ts", "../src/utils.ts", "../src/provider.ts", "../src/constants.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 { Provider } from '../utils.js';\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 type LegacyProviderInterface,\n LegacyNetworks as Networks,\n} from '@rango-dev/wallets-core/legacy';\nimport {\n canEagerlyConnectToEvm,\n canSwitchNetworkToEvm,\n chooseInstance,\n getEvmAccounts,\n switchNetworkForEvm,\n WalletTypes,\n} from '@rango-dev/wallets-shared';\nimport {\n evmBlockchains,\n isEvmBlockchain,\n isSolanaBlockchain,\n solanaBlockchain,\n} from 'rango-types';\n\nimport signer from '../signer.js';\nimport {\n coinbase as coinbase_instance,\n getSolanaAccounts,\n solanaCoinbase,\n} from '../utils.js';\n\nconst WALLET = WalletTypes.COINBASE;\n\nexport const config = {\n type: WALLET,\n defaultNetwork: Networks.ETHEREUM,\n};\n\nexport const getInstance = coinbase_instance;\nexport const connect: Connect = async ({ instance, meta }) => {\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 evm_instance = chooseInstance(instance, meta, Networks.ETHEREUM);\n const results: ProviderConnectResult[] = [];\n\n if (evm_instance) {\n const evm = await getEvmAccounts(evm_instance);\n results.push(evm);\n }\n\n const solanaInstance = solanaCoinbase();\n if (solanaInstance) {\n const solanaResults = await getSolanaAccounts(solanaInstance);\n results.push(solanaResults);\n }\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 const handleEvmAccountsChanged = (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 const handleSolanaAccountChanged = 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 ethInstance?.on?.('accountsChanged', handleEvmAccountsChanged);\n\n solanaInstance?.on?.('accountChanged', handleSolanaAccountChanged);\n\n return () => {\n ethInstance?.off?.('accountsChanged', handleEvmAccountsChanged);\n\n solanaInstance?.off?.('accountChanged', handleSolanaAccountChanged);\n };\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 = 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 const evms = evmBlockchains(allBlockChains);\n const solana = solanaBlockchain(allBlockChains);\n return {\n name: 'Coinbase',\n img: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/coinbase/icon.svg',\n installLink: {\n CHROME:\n 'https://chrome.google.com/webstore/detail/coinbase-wallet-extension/hnfanknocfeofbddgcijnmhnfnkdnaad',\n BRAVE:\n 'https://chrome.google.com/webstore/detail/coinbase-wallet-extension/hnfanknocfeofbddgcijnmhnfnkdnaad',\n DEFAULT: 'https://www.coinbase.com/wallet',\n },\n color: '#2a62f5',\n supportedChains: [...evms, ...solana],\n needsNamespace: {\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\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 { Provider } from './utils.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 { CustomSolanaSigner } from './signers/solana-signer.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 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", "import type { ProviderAPI as EvmProviderApi } from '@rango-dev/wallets-core/namespaces/evm';\nimport type { ProviderAPI as SolanaProviderApi } from '@rango-dev/wallets-core/namespaces/solana';\nimport type { ProviderConnectResult } from '@rango-dev/wallets-shared';\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 coinbase(): Provider | null {\n const { coinbaseWalletExtension, coinbaseSolana } = window;\n\n if (!coinbaseSolana && !coinbaseWalletExtension) {\n return null;\n }\n\n const instances = new Map();\n\n if (coinbaseWalletExtension) {\n instances.set(LegacyNetworks.ETHEREUM, coinbaseWalletExtension);\n }\n\n if (coinbaseSolana) {\n instances.set(LegacyNetworks.SOLANA, coinbaseSolana);\n }\n\n return instances;\n}\n\nexport function evmCoinbase(): EvmProviderApi {\n const instances = coinbase();\n\n const evmInstance = instances?.get(LegacyNetworks.ETHEREUM);\n\n if (!evmInstance) {\n throw new Error(\n 'Coinbase not injected or EVM not enabled. Please check your wallet.'\n );\n }\n\n return evmInstance as EvmProviderApi;\n}\n\nexport function solanaCoinbase(): SolanaProviderApi {\n const instance = coinbase();\n const solanaInstance = instance?.get(LegacyNetworks.SOLANA);\n\n if (!solanaInstance) {\n throw new Error(\n 'Coinbase not injected or Solana not enabled. Please check your wallet.'\n );\n }\n\n return solanaInstance as SolanaProviderApi;\n}\nexport function getInstanceOrThrow(): Provider {\n const instances = coinbase();\n\n if (!instances) {\n throw new Error('Coinbase is not injected. Please check your wallet.');\n }\n\n return instances;\n}\nexport async function getSolanaAccounts(\n instance: Provider\n): Promise<ProviderConnectResult> {\n await instance.connect();\n const account = instance.publicKey.toString();\n\n return {\n accounts: [account],\n chainId: LegacyNetworks.SOLANA,\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 { coinbase as coinbaseInstance } from './utils.js';\n\nconst buildProvider = () =>\n new ProviderBuilder(WALLET_ID)\n .init(function (context) {\n const [, setState] = context.state();\n\n if (coinbaseInstance()) {\n setState('installed', true);\n console.debug('[coinbase] instance detected.', context);\n }\n })\n .config('metadata', metadata)\n .add('solana', solana)\n .add('evm', evm)\n .build();\n\nexport { buildProvider };\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 = 'coinbase';\n\nexport const metadata: ProviderMetadata = {\n name: 'Coinbase',\n icon: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/coinbase/icon.svg',\n extensions: {\n chrome:\n 'https://chrome.google.com/webstore/detail/coinbase-wallet-extension/hnfanknocfeofbddgcijnmhnfnkdnaad',\n brave:\n 'https://chrome.google.com/webstore/detail/coinbase-wallet-extension/hnfanknocfeofbddgcijnmhnfnkdnaad',\n homepage: 'https://www.coinbase.com/wallet',\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: { getSigners: async () => getSigners(getInstanceOrThrow()) },\n },\n ],\n};\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 { evmCoinbase } from '../utils.js';\n\nconst [changeAccountSubscriber, changeAccountCleanup] = builders\n .changeAccountSubscriber(evmCoinbase)\n /*\n * Coinbase 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(evmCoinbase))\n /*\n * Coinbase 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 disconnect = commonBuilders\n .disconnect<EvmActions>()\n .before(() => {\n /*\n * Coinbase sometimes stays connected and causes the page to refresh.\n * This ensures we also disconnect from the wallet to prevent that behavior.\n */\n evmCoinbase().disconnect();\n })\n .after(changeAccountCleanup)\n .build();\n\nconst canEagerConnect = builders\n .canEagerConnect()\n .action(actions.canEagerConnect(evmCoinbase))\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(canEagerConnect)\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 connectAndUpdateStateForSingleNetwork,\n intoConnecting,\n intoConnectionFinished,\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 { solanaCoinbase } from '../utils.js';\n\nconst [changeAccountSubscriber, changeAccountCleanup] = builders\n .changeAccountSubscriber(solanaCoinbase)\n .build();\n\nconst connect = new ActionBuilder<SolanaActions, 'connect'>('connect')\n .action(actions.connect(solanaCoinbase))\n /*\n * Coinbase 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 .and((_, connectResult) => [connectResult[0]])\n .and(connectAndUpdateStateForSingleNetwork)\n .before(intoConnecting)\n .before(changeAccountSubscriber)\n .after(intoConnectionFinished)\n .or(changeAccountCleanup)\n .or(standardizeAndThrowError)\n .build();\n\nconst disconnect = commonBuilders\n .disconnect<SolanaActions>()\n .before(() => {\n /*\n * Coinbase sometimes stays connected and causes the page to refresh.\n * This ensures we also disconnect from the wallet to prevent that behavior.\n */\n solanaCoinbase().disconnect();\n })\n .after(changeAccountCleanup)\n .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 { evmCoinbase, solanaCoinbase } from '../utils.js';\n\n/*\n * Coinbase 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 = evmCoinbase();\n const solanaInstance = solanaCoinbase();\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", "Networks", "canEagerlyConnectToEvm", "canSwitchNetworkToEvm", "chooseInstance", "getEvmAccounts", "switchNetworkForEvm", "WalletTypes", "evmBlockchains", "isEvmBlockchain", "isSolanaBlockchain", "solanaBlockchain", "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", "LegacyNetworks", "coinbase", "coinbaseWalletExtension", "coinbaseSolana", "instances", "LegacyNetworks", "__name", "evmCoinbase", "evmInstance", "solanaCoinbase", "solanaInstance", "getInstanceOrThrow", "getSolanaAccounts", "instance", "WALLET", "WalletTypes", "config", "Networks", "getInstance", "coinbase", "connect", "__name", "instance", "meta", "evm_instance", "chooseInstance", "results", "evm", "getEvmAccounts", "solanaInstance", "solanaCoinbase", "solanaResults", "getSolanaAccounts", "subscribe", "options", "ethInstance", "updateAccounts", "state", "updateChainId", "handleEvmAccountsChanged", "addresses", "eth_chainId", "isEvmBlockchain", "blockchain", "handleSolanaAccountChanged", "publicKey", "isSolanaBlockchain", "network", "account", "switchNetwork", "switchNetworkForEvm", "canSwitchNetworkTo", "canSwitchNetworkToEvm", "getSigners", "canEagerConnect", "canEagerlyConnectToEvm", "getWalletInfo", "allBlockChains", "evms", "evmBlockchains", "solana", "solanaBlockchain", "allBlockchains", "buildLegacyProvider", "ProviderBuilder", "evmBlockchains", "solanaBlockchain", "WALLET_ID", "metadata", "allBlockchains", "evmBlockchains", "solanaBlockchain", "getSigners", "getInstanceOrThrow", "ActionBuilder", "NamespaceBuilder", "commonBuilders", "connectAndUpdateStateForMultiNetworks", "intoConnecting", "intoConnectionFinished", "standardizeAndThrowError", "actions", "builders", "utils", "changeAccountSubscriber", "changeAccountCleanup", "builders", "evmCoinbase", "instance", "accounts", "chainId", "utils", "connect", "ActionBuilder", "actions", "_", "connectResult", "connectAndUpdateStateForMultiNetworks", "intoConnecting", "standardizeAndThrowError", "intoConnectionFinished", "disconnect", "commonBuilders", "canEagerConnect", "canSwitchNetwork", "evm", "NamespaceBuilder", "WALLET_ID", "ActionBuilder", "NamespaceBuilder", "commonBuilders", "connectAndUpdateStateForSingleNetwork", "intoConnecting", "intoConnectionFinished", "standardizeAndThrowError", "actions", "builders", "canEagerConnectAction", "__name", "evmInstance", "evmCoinbase", "solanaCoinbase", "solanaActions", "changeAccountSubscriber", "changeAccountCleanup", "builders", "solanaCoinbase", "connect", "ActionBuilder", "actions", "_", "connectResult", "connectAndUpdateStateForSingleNetwork", "intoConnecting", "intoConnectionFinished", "standardizeAndThrowError", "disconnect", "commonBuilders", "canEagerConnect", "solanaActions", "solana", "NamespaceBuilder", "WALLET_ID", "buildProvider", "__name", "ProviderBuilder", "WALLET_ID", "context", "setState", "coinbase", "metadata", "solana", "evm", "versions", "__name", "defineVersions", "buildLegacyProvider", "buildProvider"]
7
+ }
@@ -0,0 +1,4 @@
1
+ import type { EvmActions } from '@rango-dev/wallets-core/namespaces/evm';
2
+ declare const evm: import("@rango-dev/wallets-core").ProxiedNamespace<EvmActions>;
3
+ export { evm };
4
+ //# sourceMappingURL=evm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evm.d.ts","sourceRoot":"","sources":["../../src/namespaces/evm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AA0EzE,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":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAqD/E,QAAA,MAAM,MAAM,mEAIF,CAAC;AAEX,OAAO,EAAE,MAAM,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"inputs":{"src/helpers.ts":{"bytes":959,"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/solana-signer.ts":{"bytes":488,"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":972,"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"src/solana-signer.ts","kind":"import-statement","original":"./solana-signer.js"},{"path":"@rango-dev/signer-evm","kind":"dynamic-import","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":4147,"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"src/helpers.ts","kind":"import-statement","original":"./helpers.js"},{"path":"src/signer.ts","kind":"import-statement","original":"./signer.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"dist/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":11554},"dist/index.js":{"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"@rango-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}],"exports":["canEagerConnect","canSwitchNetworkTo","config","connect","getInstance","getSigners","getWalletInfo","subscribe","switchNetwork"],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":1713},"src/helpers.ts":{"bytesInOutput":401},"src/signer.ts":{"bytesInOutput":423},"src/solana-signer.ts":{"bytesInOutput":259}},"bytes":3083}}}
1
+ {"inputs":{"src/signers/solana-signer.ts":{"bytes":488,"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":928,"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"src/signers/solana-signer.ts","kind":"import-statement","original":"./signers/solana-signer.js"},{"path":"@rango-dev/signer-evm","kind":"dynamic-import","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/utils.ts":{"bytes":1985,"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":5133,"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/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":1458,"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":2468,"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":1155,"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":1939,"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":675,"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":27336},"dist/mod.js":{"imports":[{"path":"@rango-dev/wallets-core/utils","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/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-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},{"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":2126},"src/signer.ts":{"bytesInOutput":423},"src/signers/solana-signer.ts":{"bytesInOutput":259},"src/utils.ts":{"bytesInOutput":821},"src/provider.ts":{"bytesInOutput":267},"src/constants.ts":{"bytesInOutput":763},"src/namespaces/evm.ts":{"bytesInOutput":929},"src/namespaces/solana.ts":{"bytesInOutput":725},"src/actions/solana.ts":{"bytesInOutput":391}},"bytes":6983}}}
@@ -0,0 +1,3 @@
1
+ declare const buildProvider: () => import("@rango-dev/wallets-core").Provider;
2
+ export { buildProvider };
3
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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 { LegacyNetworkProviderMap } from '@rango-dev/wallets-core/legacy';
1
+ import type { Provider } from './utils.js';
2
2
  import type { SignerFactory } from 'rango-types';
3
- export default function getSigners(provider: LegacyNetworkProviderMap): Promise<SignerFactory>;
3
+ export default function getSigners(provider: Provider): Promise<SignerFactory>;
4
4
  //# sourceMappingURL=signer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAWjD,wBAA8B,UAAU,CACtC,QAAQ,EAAE,wBAAwB,GACjC,OAAO,CAAC,aAAa,CAAC,CAUxB"}
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 @@
1
+ {"version":3,"file":"solana-signer.d.ts","sourceRoot":"","sources":["../../src/signers/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"}
@@ -0,0 +1,10 @@
1
+ import type { ProviderAPI as EvmProviderApi } from '@rango-dev/wallets-core/namespaces/evm';
2
+ import type { ProviderAPI as SolanaProviderApi } from '@rango-dev/wallets-core/namespaces/solana';
3
+ import type { ProviderConnectResult } from '@rango-dev/wallets-shared';
4
+ export type Provider = Record<string, any>;
5
+ export declare function coinbase(): Provider | null;
6
+ export declare function evmCoinbase(): EvmProviderApi;
7
+ export declare function solanaCoinbase(): SolanaProviderApi;
8
+ export declare function getInstanceOrThrow(): Provider;
9
+ export declare function getSolanaAccounts(instance: Provider): Promise<ProviderConnectResult>;
10
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,IAAI,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAC5F,OAAO,KAAK,EAAE,WAAW,IAAI,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAClG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAKvE,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE3C,wBAAgB,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAkB1C;AAED,wBAAgB,WAAW,IAAI,cAAc,CAY5C;AAED,wBAAgB,cAAc,IAAI,iBAAiB,CAWlD;AACD,wBAAgB,kBAAkB,IAAI,QAAQ,CAQ7C;AACD,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,qBAAqB,CAAC,CAQhC"}
package/package.json CHANGED
@@ -1,20 +1,20 @@
1
1
  {
2
2
  "name": "@rango-dev/provider-coinbase",
3
- "version": "0.51.1-next.1",
3
+ "version": "0.51.1-next.3",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
- "source": "./src/index.ts",
7
- "main": "./dist/index.js",
6
+ "source": "./src/mod.ts",
7
+ "main": "./dist/mod.js",
8
8
  "exports": {
9
- ".": "./dist/index.js"
9
+ ".": "./dist/mod.js"
10
10
  },
11
- "typings": "dist/index.d.ts",
11
+ "typings": "dist/mod.d.ts",
12
12
  "files": [
13
13
  "dist",
14
14
  "src"
15
15
  ],
16
16
  "scripts": {
17
- "build": "node ../../scripts/build/command.mjs --path wallets/provider-coinbase",
17
+ "build": "node ../../scripts/build/command.mjs --path wallets/provider-coinbase --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.0",
26
- "@rango-dev/wallets-core": "^0.49.1-next.1",
27
- "@rango-dev/wallets-shared": "^0.50.1-next.1",
26
+ "@rango-dev/wallets-core": "^0.49.1-next.3",
27
+ "@rango-dev/wallets-shared": "^0.50.1-next.3",
28
28
  "bs58": "^5.0.0",
29
29
  "rango-types": "^0.1.89"
30
30
  },
package/readme.md CHANGED
@@ -1 +1,45 @@
1
- # @rango-dev/provider-coinbase
1
+ # Coinbase Wallet
2
+
3
+ Coinbase Wallet integration for hub.
4
+ [Homepage](https://www.coinbase.com/wallet) | [Docs](https://docs.cdp.coinbase.com/wallet-sdk/docs/welcome)
5
+
6
+ More about implementation status can be found [here](../readme.md).
7
+
8
+ ## Implementation notes/limitations
9
+
10
+ ### Group
11
+
12
+ #### EVM & Solana
13
+
14
+ Coinbase Wallet supports both EVM and Solana.
15
+
16
+ ### Feature
17
+
18
+ #### ⚠️ Switch Account
19
+
20
+ Switch account behavior is **unreliable**:
21
+
22
+ - On **Solana**, switching accounts causes a **full page reload**.
23
+ - When connected to **both EVM and Solana**, this reload can result in **incorrect account resolution**:
24
+ - The wallet returns a **list of all connected accounts**, not just the active one.
25
+ - The **current account is not guaranteed to be the first item** in the list—especially for EVM.
26
+ - As a workaround, we currently **select the first returned account** as the active account.
27
+ - This may lead to **incorrect account selection** after switching.
28
+
29
+ Due to this behavior, switch account functionality may not work properly in multi-namespace setups.
30
+
31
+ #### ⚠️ Auto Connect
32
+
33
+ Coinbase Wallet does **not provide a `onlyIfTrusted` option** or any silent authorization method for Solana.
34
+
35
+ - If only **Solana** is selected for connection, auto-connect **will not function**.
36
+ - Auto-connect works **only when both Solana and EVM are connected simultaneously**, relying on EVM’s eager connection logic.
37
+ - Even in this case, the wallet may **return an incorrect account** if the user has changed accounts while disconnected from the dApp.
38
+
39
+ #### ⚠️ Cross Browser
40
+
41
+ Coinbase Wallet is **only available on chromium based browsers (eg. Chrome, Brave...).**.
42
+
43
+ ---
44
+
45
+ More wallet information can be found in [readme.md](../readme.md).
@@ -0,0 +1,36 @@
1
+ import { evmCoinbase, solanaCoinbase } from '../utils.js';
2
+
3
+ /*
4
+ * Coinbase 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 = evmCoinbase();
11
+ const solanaInstance = solanaCoinbase();
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 };
@@ -0,0 +1,51 @@
1
+ import { type ProviderMetadata } from '@rango-dev/wallets-core';
2
+ import {
3
+ type BlockchainMeta,
4
+ evmBlockchains,
5
+ solanaBlockchain,
6
+ } from 'rango-types';
7
+
8
+ import getSigners from './signer.js';
9
+ import { getInstanceOrThrow } from './utils.js';
10
+
11
+ export const WALLET_ID = 'coinbase';
12
+
13
+ export const metadata: ProviderMetadata = {
14
+ name: 'Coinbase',
15
+ icon: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/coinbase/icon.svg',
16
+ extensions: {
17
+ chrome:
18
+ 'https://chrome.google.com/webstore/detail/coinbase-wallet-extension/hnfanknocfeofbddgcijnmhnfnkdnaad',
19
+ brave:
20
+ 'https://chrome.google.com/webstore/detail/coinbase-wallet-extension/hnfanknocfeofbddgcijnmhnfnkdnaad',
21
+ homepage: 'https://www.coinbase.com/wallet',
22
+ },
23
+ properties: [
24
+ {
25
+ name: 'namespaces',
26
+ value: {
27
+ selection: 'multiple',
28
+ data: [
29
+ {
30
+ label: 'EVM',
31
+ value: 'EVM',
32
+ id: 'ETH',
33
+ getSupportedChains: (allBlockchains: BlockchainMeta[]) =>
34
+ evmBlockchains(allBlockchains),
35
+ },
36
+ {
37
+ label: 'Solana',
38
+ value: 'Solana',
39
+ id: 'SOLANA',
40
+ getSupportedChains: (allBlockchains: BlockchainMeta[]) =>
41
+ solanaBlockchain(allBlockchains),
42
+ },
43
+ ],
44
+ },
45
+ },
46
+ {
47
+ name: 'signers',
48
+ value: { getSigners: async () => getSigners(getInstanceOrThrow()) },
49
+ },
50
+ ],
51
+ };
@@ -1,3 +1,4 @@
1
+ import type { Provider } from '../utils.js';
1
2
  import type {
2
3
  CanEagerConnect,
3
4
  CanSwitchNetwork,
@@ -9,12 +10,15 @@ import type {
9
10
  } from '@rango-dev/wallets-shared';
10
11
  import type { BlockchainMeta, SignerFactory } from 'rango-types';
11
12
 
13
+ import {
14
+ type LegacyProviderInterface,
15
+ LegacyNetworks as Networks,
16
+ } from '@rango-dev/wallets-core/legacy';
12
17
  import {
13
18
  canEagerlyConnectToEvm,
14
19
  canSwitchNetworkToEvm,
15
20
  chooseInstance,
16
21
  getEvmAccounts,
17
- Networks,
18
22
  switchNetworkForEvm,
19
23
  WalletTypes,
20
24
  } from '@rango-dev/wallets-shared';
@@ -25,8 +29,12 @@ import {
25
29
  solanaBlockchain,
26
30
  } from 'rango-types';
27
31
 
28
- import { coinbase as coinbase_instance, getSolanaAccounts } from './helpers.js';
29
- import signer from './signer.js';
32
+ import signer from '../signer.js';
33
+ import {
34
+ coinbase as coinbase_instance,
35
+ getSolanaAccounts,
36
+ solanaCoinbase,
37
+ } from '../utils.js';
30
38
 
31
39
  const WALLET = WalletTypes.COINBASE;
32
40
 
@@ -44,15 +52,19 @@ export const connect: Connect = async ({ instance, meta }) => {
44
52
  * whenever we are requesting accounts.
45
53
  */
46
54
  const evm_instance = chooseInstance(instance, meta, Networks.ETHEREUM);
47
- let results: ProviderConnectResult[] = [];
55
+ const results: ProviderConnectResult[] = [];
48
56
 
49
57
  if (evm_instance) {
50
58
  const evm = await getEvmAccounts(evm_instance);
51
59
  results.push(evm);
52
60
  }
53
61
 
54
- const solanaResults = await getSolanaAccounts(instance);
55
- results = [...results, ...solanaResults];
62
+ const solanaInstance = solanaCoinbase();
63
+ if (solanaInstance) {
64
+ const solanaResults = await getSolanaAccounts(solanaInstance);
65
+ results.push(solanaResults);
66
+ }
67
+
56
68
  return results;
57
69
  };
58
70
 
@@ -106,7 +118,8 @@ export const switchNetwork: SwitchNetwork = switchNetworkForEvm;
106
118
 
107
119
  export const canSwitchNetworkTo: CanSwitchNetwork = canSwitchNetworkToEvm;
108
120
 
109
- export const getSigners: (provider: any) => Promise<SignerFactory> = signer;
121
+ export const getSigners: (provider: Provider) => Promise<SignerFactory> =
122
+ signer;
110
123
 
111
124
  export const canEagerConnect: CanEagerConnect = async ({ instance, meta }) => {
112
125
  const evm_instance = chooseInstance(instance, meta, Networks.ETHEREUM);
@@ -133,5 +146,38 @@ export const getWalletInfo: (allBlockChains: BlockchainMeta[]) => WalletInfo = (
133
146
  },
134
147
  color: '#2a62f5',
135
148
  supportedChains: [...evms, ...solana],
149
+ needsNamespace: {
150
+ selection: 'multiple',
151
+ data: [
152
+ {
153
+ label: 'EVM',
154
+ value: 'EVM',
155
+ id: 'ETH',
156
+ getSupportedChains: (allBlockchains: BlockchainMeta[]) =>
157
+ evmBlockchains(allBlockchains),
158
+ },
159
+ {
160
+ label: 'Solana',
161
+ value: 'Solana',
162
+ id: 'SOLANA',
163
+ getSupportedChains: (allBlockchains: BlockchainMeta[]) =>
164
+ solanaBlockchain(allBlockchains),
165
+ },
166
+ ],
167
+ },
136
168
  };
137
169
  };
170
+
171
+ const buildLegacyProvider: () => LegacyProviderInterface = () => ({
172
+ config,
173
+ getInstance,
174
+ connect,
175
+ subscribe,
176
+ switchNetwork,
177
+ canSwitchNetworkTo,
178
+ getSigners,
179
+ getWalletInfo,
180
+ canEagerConnect,
181
+ });
182
+
183
+ 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,82 @@
1
+ import type { EvmActions } from '@rango-dev/wallets-core/namespaces/evm';
2
+
3
+ import { ActionBuilder, NamespaceBuilder } from '@rango-dev/wallets-core';
4
+ import {
5
+ builders as commonBuilders,
6
+ connectAndUpdateStateForMultiNetworks,
7
+ intoConnecting,
8
+ intoConnectionFinished,
9
+ standardizeAndThrowError,
10
+ } from '@rango-dev/wallets-core/namespaces/common';
11
+ import {
12
+ actions,
13
+ builders,
14
+ utils,
15
+ } from '@rango-dev/wallets-core/namespaces/evm';
16
+
17
+ import { WALLET_ID } from '../constants.js';
18
+ import { evmCoinbase } from '../utils.js';
19
+
20
+ const [changeAccountSubscriber, changeAccountCleanup] = builders
21
+ .changeAccountSubscriber(evmCoinbase)
22
+ /*
23
+ * Coinbase returns an array of connected accounts with the active one first.
24
+ * Since we only need the active account, we take the first element as a workaround.
25
+ */
26
+ .format(async (instance, accounts) => {
27
+ const chainId = await instance.request({ method: 'eth_chainId' });
28
+ return utils.formatAccountsToCAIP([accounts[0]], chainId);
29
+ })
30
+ .build();
31
+
32
+ const connect = new ActionBuilder<EvmActions, 'connect'>('connect')
33
+ .action(actions.connect(evmCoinbase))
34
+ /*
35
+ * Coinbase 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)
47
+ .before(changeAccountSubscriber)
48
+ .or(changeAccountCleanup)
49
+ .or(standardizeAndThrowError)
50
+ .after(intoConnectionFinished)
51
+ .build();
52
+
53
+ const disconnect = commonBuilders
54
+ .disconnect<EvmActions>()
55
+ .before(() => {
56
+ /*
57
+ * Coinbase sometimes stays connected and causes the page to refresh.
58
+ * This ensures we also disconnect from the wallet to prevent that behavior.
59
+ */
60
+ evmCoinbase().disconnect();
61
+ })
62
+ .after(changeAccountCleanup)
63
+ .build();
64
+
65
+ const canEagerConnect = builders
66
+ .canEagerConnect()
67
+ .action(actions.canEagerConnect(evmCoinbase))
68
+ .build();
69
+
70
+ const canSwitchNetwork = builders
71
+ .canSwitchNetwork()
72
+ .action(actions.canSwitchNetwork())
73
+ .build();
74
+
75
+ const evm = new NamespaceBuilder<EvmActions>('EVM', WALLET_ID)
76
+ .action(connect)
77
+ .action(disconnect)
78
+ .action(canEagerConnect)
79
+ .action(canSwitchNetwork)
80
+ .build();
81
+
82
+ export { evm };
@@ -0,0 +1,60 @@
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
+ connectAndUpdateStateForSingleNetwork,
7
+ intoConnecting,
8
+ intoConnectionFinished,
9
+ standardizeAndThrowError,
10
+ } from '@rango-dev/wallets-core/namespaces/common';
11
+ import { actions, builders } from '@rango-dev/wallets-core/namespaces/solana';
12
+
13
+ import { solanaActions } from '../actions/solana.js';
14
+ import { WALLET_ID } from '../constants.js';
15
+ import { solanaCoinbase } from '../utils.js';
16
+
17
+ const [changeAccountSubscriber, changeAccountCleanup] = builders
18
+ .changeAccountSubscriber(solanaCoinbase)
19
+ .build();
20
+
21
+ const connect = new ActionBuilder<SolanaActions, 'connect'>('connect')
22
+ .action(actions.connect(solanaCoinbase))
23
+ /*
24
+ * Coinbase Wallet's `connect` returns a list where the currently selected account
25
+ * is always the first item. We're directly taking this first item as the active account.
26
+ */
27
+ .and((_, connectResult) => [connectResult[0]])
28
+ .and(connectAndUpdateStateForSingleNetwork)
29
+ .before(intoConnecting)
30
+ .before(changeAccountSubscriber)
31
+ .after(intoConnectionFinished)
32
+ .or(changeAccountCleanup)
33
+ .or(standardizeAndThrowError)
34
+ .build();
35
+
36
+ const disconnect = commonBuilders
37
+ .disconnect<SolanaActions>()
38
+ .before(() => {
39
+ /*
40
+ * Coinbase sometimes stays connected and causes the page to refresh.
41
+ * This ensures we also disconnect from the wallet to prevent that behavior.
42
+ */
43
+ solanaCoinbase().disconnect();
44
+ })
45
+ .after(changeAccountCleanup)
46
+ .build();
47
+
48
+ const canEagerConnect = new ActionBuilder<SolanaActions, 'canEagerConnect'>(
49
+ 'canEagerConnect'
50
+ )
51
+ .action(solanaActions.canEagerConnectAction)
52
+ .build();
53
+
54
+ const solana = new NamespaceBuilder<SolanaActions>('Solana', WALLET_ID)
55
+ .action(connect)
56
+ .action(disconnect)
57
+ .action(canEagerConnect)
58
+ .build();
59
+
60
+ export { solana };
@@ -0,0 +1,23 @@
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 { coinbase as coinbaseInstance } from './utils.js';
7
+
8
+ const buildProvider = () =>
9
+ new ProviderBuilder(WALLET_ID)
10
+ .init(function (context) {
11
+ const [, setState] = context.state();
12
+
13
+ if (coinbaseInstance()) {
14
+ setState('installed', true);
15
+ console.debug('[coinbase] instance detected.', context);
16
+ }
17
+ })
18
+ .config('metadata', metadata)
19
+ .add('solana', solana)
20
+ .add('evm', evm)
21
+ .build();
22
+
23
+ export { buildProvider };
package/src/signer.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { LegacyNetworkProviderMap } from '@rango-dev/wallets-core/legacy';
1
+ import type { Provider } from './utils.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 { CustomSolanaSigner } from './solana-signer.js';
11
+ import { CustomSolanaSigner } from './signers/solana-signer.js';
12
12
 
13
13
  export default async function getSigners(
14
- provider: LegacyNetworkProviderMap
14
+ provider: Provider
15
15
  ): Promise<SignerFactory> {
16
16
  const ethProvider = getNetworkInstance(provider, Networks.ETHEREUM);
17
17
  const solProvider = getNetworkInstance(provider, Networks.SOLANA);
package/src/utils.ts ADDED
@@ -0,0 +1,75 @@
1
+ import type { ProviderAPI as EvmProviderApi } from '@rango-dev/wallets-core/namespaces/evm';
2
+ import type { ProviderAPI as SolanaProviderApi } from '@rango-dev/wallets-core/namespaces/solana';
3
+ import type { ProviderConnectResult } from '@rango-dev/wallets-shared';
4
+
5
+ import { LegacyNetworks } from '@rango-dev/wallets-core/legacy';
6
+
7
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
+ export type Provider = Record<string, any>;
9
+
10
+ export function coinbase(): Provider | null {
11
+ const { coinbaseWalletExtension, coinbaseSolana } = window;
12
+
13
+ if (!coinbaseSolana && !coinbaseWalletExtension) {
14
+ return null;
15
+ }
16
+
17
+ const instances = new Map();
18
+
19
+ if (coinbaseWalletExtension) {
20
+ instances.set(LegacyNetworks.ETHEREUM, coinbaseWalletExtension);
21
+ }
22
+
23
+ if (coinbaseSolana) {
24
+ instances.set(LegacyNetworks.SOLANA, coinbaseSolana);
25
+ }
26
+
27
+ return instances;
28
+ }
29
+
30
+ export function evmCoinbase(): EvmProviderApi {
31
+ const instances = coinbase();
32
+
33
+ const evmInstance = instances?.get(LegacyNetworks.ETHEREUM);
34
+
35
+ if (!evmInstance) {
36
+ throw new Error(
37
+ 'Coinbase not injected or EVM not enabled. Please check your wallet.'
38
+ );
39
+ }
40
+
41
+ return evmInstance as EvmProviderApi;
42
+ }
43
+
44
+ export function solanaCoinbase(): SolanaProviderApi {
45
+ const instance = coinbase();
46
+ const solanaInstance = instance?.get(LegacyNetworks.SOLANA);
47
+
48
+ if (!solanaInstance) {
49
+ throw new Error(
50
+ 'Coinbase not injected or Solana not enabled. Please check your wallet.'
51
+ );
52
+ }
53
+
54
+ return solanaInstance as SolanaProviderApi;
55
+ }
56
+ export function getInstanceOrThrow(): Provider {
57
+ const instances = coinbase();
58
+
59
+ if (!instances) {
60
+ throw new Error('Coinbase is not injected. Please check your wallet.');
61
+ }
62
+
63
+ return instances;
64
+ }
65
+ export async function getSolanaAccounts(
66
+ instance: Provider
67
+ ): Promise<ProviderConnectResult> {
68
+ await instance.connect();
69
+ const account = instance.publicKey.toString();
70
+
71
+ return {
72
+ accounts: [account],
73
+ chainId: LegacyNetworks.SOLANA,
74
+ };
75
+ }
package/dist/helpers.d.ts DELETED
@@ -1,4 +0,0 @@
1
- import type { ProviderConnectResult } from '@rango-dev/wallets-shared';
2
- export declare function coinbase(): Map<any, any> | null;
3
- export declare function getSolanaAccounts(instance: any): Promise<ProviderConnectResult[]>;
4
- //# sourceMappingURL=helpers.d.ts.map
@@ -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;AAIvE,wBAAgB,QAAQ,yBAiBvB;AAED,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,GAAG,GACZ,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAelC"}
@@ -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;AAQnC,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAqB,MAAM,cAAc,CAAC;AAKhF,eAAO,MAAM,MAAM;;;CAGlB,CAAC;AAEF,eAAO,MAAM,WAAW,0BAAoB,CAAC;AAC7C,eAAO,MAAM,OAAO,EAAE,OAkBrB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,SA6CvB,CAAC;AACF,eAAO,MAAM,aAAa,EAAE,aAAmC,CAAC;AAEhE,eAAO,MAAM,kBAAkB,EAAE,gBAAwC,CAAC;AAE1E,eAAO,MAAM,UAAU,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,OAAO,CAAC,aAAa,CAAU,CAAC;AAE5E,eAAO,MAAM,eAAe,EAAE,eAM7B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,CAAC,cAAc,EAAE,cAAc,EAAE,KAAK,UAkBjE,CAAC"}
package/dist/index.js DELETED
@@ -1,2 +0,0 @@
1
- var C=Object.defineProperty;var o=(n,e)=>C(n,"name",{value:e,configurable:!0});import{canEagerlyConnectToEvm as M,canSwitchNetworkToEvm as R,chooseInstance as f,getEvmAccounts as I,Networks as r,switchNetworkForEvm as P,WalletTypes as L}from"@rango-dev/wallets-shared";import{evmBlockchains as O,isEvmBlockchain as H,isSolanaBlockchain as U,solanaBlockchain as B}from"rango-types";import{Networks as g}from"@rango-dev/wallets-shared";function S(){let{coinbaseWalletExtension:n,coinbaseSolana:e}=window,t=new Map;return n&&t.set(g.ETHEREUM,n),e&&t.set(g.SOLANA,e),t.size===0?null:t}o(S,"coinbase");async function y(n){let e=await n.get(g.SOLANA),t=[];if(e){await e.connect();let a=e.publicKey.toString();t.push({accounts:a?[a]:[],chainId:g.SOLANA})}return t}o(y,"getSolanaAccounts");import{dynamicImportWithRefinedError as x,getNetworkInstance as k,Networks as v}from"@rango-dev/wallets-shared";import{DefaultSignerFactory as T,TransactionType as A}from"rango-types";import{DefaultSolanaSigner as N}from"@rango-dev/signer-solana";import b from"bs58";var m=class extends N{static{o(this,"CustomSolanaSigner")}constructor(e){super(e)}async signMessage(e){let{signature:t}=await this.provider.signMessage(e);return b.encode(t)}};async function u(n){let e=k(n,v.ETHEREUM),t=k(n,v.SOLANA),a=new T,{DefaultEvmSigner:c}=await x(async()=>await import("@rango-dev/signer-evm"));return a.registerSigner(A.EVM,new c(e)),a.registerSigner(A.SOLANA,new m(t)),a}o(u,"getSigners");var F=L.COINBASE,tn={type:F,defaultNetwork:r.ETHEREUM},on=S,an=o(async({instance:n,meta:e})=>{let t=f(n,e,r.ETHEREUM),a=[];if(t){let s=await I(t);a.push(s)}let c=await y(n);return a=[...a,...c],a},"connect"),rn=o(n=>{let e=f(n.instance,n.meta,r.ETHEREUM),t=f(n.instance,n.meta,r.SOLANA),{connect:a,updateAccounts:c,state:s,updateChainId:d,meta:w}=n,h=o(i=>{let l=w.filter(H).find(p=>p.name===r.ETHEREUM)?.chainId;s.connected&&(s.network!=r.ETHEREUM&&l&&d(l),c(i))},"handleEvmAccountsChanged"),E=o(async i=>{s.network!=r.SOLANA&&d(w.filter(U)[0].chainId);let l=r.SOLANA;if(i){let p=i.toString();c([p])}else a(l)},"handleSolanaAccountChanged");return e?.on?.("accountsChanged",h),t?.on?.("accountChanged",E),()=>{e?.off?.("accountsChanged",h),t?.off?.("accountChanged",E)}},"subscribe"),cn=P,sn=R,ln=u,gn=o(async({instance:n,meta:e})=>{let t=f(n,e,r.ETHEREUM);return t?M({instance:t,meta:e}):Promise.resolve(!1)},"canEagerConnect"),mn=o(n=>{let e=O(n),t=B(n);return{name:"Coinbase",img:"https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/coinbase/icon.svg",installLink:{CHROME:"https://chrome.google.com/webstore/detail/coinbase-wallet-extension/hnfanknocfeofbddgcijnmhnfnkdnaad",BRAVE:"https://chrome.google.com/webstore/detail/coinbase-wallet-extension/hnfanknocfeofbddgcijnmhnfnkdnaad",DEFAULT:"https://www.coinbase.com/wallet"},color:"#2a62f5",supportedChains:[...e,...t]}},"getWalletInfo");export{gn as canEagerConnect,sn as canSwitchNetworkTo,tn as config,an as connect,on as getInstance,ln as getSigners,mn as getWalletInfo,rn as subscribe,cn 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 {\n evmBlockchains,\n isEvmBlockchain,\n isSolanaBlockchain,\n solanaBlockchain,\n} from 'rango-types';\n\nimport { coinbase as coinbase_instance, getSolanaAccounts } from './helpers.js';\nimport signer from './signer.js';\n\nconst WALLET = WalletTypes.COINBASE;\n\nexport const config = {\n type: WALLET,\n defaultNetwork: Networks.ETHEREUM,\n};\n\nexport const getInstance = coinbase_instance;\nexport const connect: Connect = async ({ instance, meta }) => {\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 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 const handleEvmAccountsChanged = (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 const handleSolanaAccountChanged = 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 ethInstance?.on?.('accountsChanged', handleEvmAccountsChanged);\n\n solanaInstance?.on?.('accountChanged', handleSolanaAccountChanged);\n\n return () => {\n ethInstance?.off?.('accountsChanged', handleEvmAccountsChanged);\n\n solanaInstance?.off?.('accountChanged', handleSolanaAccountChanged);\n };\n};\nexport const switchNetwork: SwitchNetwork = switchNetworkForEvm;\n\nexport const canSwitchNetworkTo: CanSwitchNetwork = canSwitchNetworkToEvm;\n\nexport const getSigners: (provider: any) => Promise<SignerFactory> = signer;\n\nexport const canEagerConnect: CanEagerConnect = 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 const evms = evmBlockchains(allBlockChains);\n const solana = solanaBlockchain(allBlockChains);\n return {\n name: 'Coinbase',\n img: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/coinbase/icon.svg',\n installLink: {\n CHROME:\n 'https://chrome.google.com/webstore/detail/coinbase-wallet-extension/hnfanknocfeofbddgcijnmhnfnkdnaad',\n BRAVE:\n 'https://chrome.google.com/webstore/detail/coinbase-wallet-extension/hnfanknocfeofbddgcijnmhnfnkdnaad',\n DEFAULT: 'https://www.coinbase.com/wallet',\n },\n color: '#2a62f5',\n supportedChains: [...evms, ...solana],\n };\n};\n", "import type { ProviderConnectResult } from '@rango-dev/wallets-shared';\n\nimport { Networks } from '@rango-dev/wallets-shared';\n\nexport function coinbase() {\n const { coinbaseWalletExtension, coinbaseSolana } = window;\n\n const instances = new Map();\n if (coinbaseWalletExtension) {\n instances.set(Networks.ETHEREUM, coinbaseWalletExtension);\n }\n\n if (!!coinbaseSolana) {\n instances.set(Networks.SOLANA, coinbaseSolana);\n }\n\n if (instances.size === 0) {\n return null;\n }\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 await solanaInstance.connect();\n const account = solanaInstance.publicKey.toString();\n\n results.push({\n accounts: account ? [account] : [],\n chainId: Networks.SOLANA,\n });\n }\n\n return results;\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": "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",
6
- "names": ["canEagerlyConnectToEvm", "canSwitchNetworkToEvm", "chooseInstance", "getEvmAccounts", "Networks", "switchNetworkForEvm", "WalletTypes", "evmBlockchains", "isEvmBlockchain", "isSolanaBlockchain", "solanaBlockchain", "Networks", "coinbase", "coinbaseWalletExtension", "coinbaseSolana", "instances", "Networks", "__name", "getSolanaAccounts", "instance", "solanaInstance", "results", "account", "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", "coinbase", "connect", "__name", "instance", "meta", "evm_instance", "chooseInstance", "results", "evm", "getEvmAccounts", "solanaResults", "getSolanaAccounts", "subscribe", "options", "ethInstance", "solanaInstance", "updateAccounts", "state", "updateChainId", "handleEvmAccountsChanged", "addresses", "eth_chainId", "isEvmBlockchain", "blockchain", "handleSolanaAccountChanged", "publicKey", "isSolanaBlockchain", "network", "account", "switchNetwork", "switchNetworkForEvm", "canSwitchNetworkTo", "canSwitchNetworkToEvm", "getSigners", "canEagerConnect", "canEagerlyConnectToEvm", "getWalletInfo", "allBlockChains", "evms", "evmBlockchains", "solana", "solanaBlockchain"]
7
- }
@@ -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,41 +0,0 @@
1
- import type { ProviderConnectResult } from '@rango-dev/wallets-shared';
2
-
3
- import { Networks } from '@rango-dev/wallets-shared';
4
-
5
- export function coinbase() {
6
- const { coinbaseWalletExtension, coinbaseSolana } = window;
7
-
8
- const instances = new Map();
9
- if (coinbaseWalletExtension) {
10
- instances.set(Networks.ETHEREUM, coinbaseWalletExtension);
11
- }
12
-
13
- if (!!coinbaseSolana) {
14
- instances.set(Networks.SOLANA, coinbaseSolana);
15
- }
16
-
17
- if (instances.size === 0) {
18
- return null;
19
- }
20
-
21
- return instances;
22
- }
23
-
24
- export async function getSolanaAccounts(
25
- instance: any
26
- ): Promise<ProviderConnectResult[]> {
27
- const solanaInstance = await instance.get(Networks.SOLANA);
28
- const results: ProviderConnectResult[] = [];
29
-
30
- if (solanaInstance) {
31
- await solanaInstance.connect();
32
- const account = solanaInstance.publicKey.toString();
33
-
34
- results.push({
35
- accounts: account ? [account] : [],
36
- chainId: Networks.SOLANA,
37
- });
38
- }
39
-
40
- return results;
41
- }