@hub3js/evm 0.3.2 → 0.3.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.
@@ -1,3 +1,25 @@
1
1
  export declare const CAIP_NAMESPACE = "eip155";
2
2
  export declare const CAIP_ETHEREUM_CHAIN_ID = "1";
3
+ export declare const CAIP_OPTIMISM_CHAIN_ID = "10";
4
+ export declare const CAIP_LINEA_CHAIN_ID = "59144";
5
+ export declare const CAIP_METIS_CHAIN_ID = "1088";
6
+ export declare const CAIP_BLAST_CHAIN_ID = "81457";
7
+ export declare const CAIP_CELO_CHAIN_ID = "42220";
8
+ export declare const CAIP_FANTOM_CHAIN_ID = "250";
9
+ export declare const CAIP_MONAD_CHAIN_ID = "143";
10
+ export declare const CAIP_SONIC_CHAIN_ID = "146";
11
+ export declare const CAIP_BERACHAIN_CHAIN_ID = "80094";
12
+ export declare const CAIP_BASE_CHAIN_ID = "8453";
13
+ export declare const CAIP_ZETA_CHAIN_ID = "7000";
14
+ export declare const CAIP_ARBITRUM_CHAIN_ID = "42161";
15
+ export declare const CAIP_BSC_CHAIN_ID = "56";
16
+ export declare const CAIP_SCROLL_CHAIN_ID = "534352";
17
+ export declare const CAIP_AVAX_CHAIN_ID = "43114";
18
+ export declare const CAIP_POLYGON_CHAIN_ID = "137";
19
+ export declare const CAIP_GNOSIS_CHAIN_ID = "100";
20
+ export declare const CAIP_CRONOS_CHAIN_ID = "25";
21
+ export declare const CAIP_BOBA_CHAIN_ID = "288";
22
+ export declare const CAIP_MOONBEAM_CHAIN_ID = "1284";
23
+ export declare const CAIP_MOONRIVER_CHAIN_ID = "1285";
24
+ export declare const CAIP_HARMONY_CHAIN_ID = "1666600000";
3
25
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,WAAW,CAAC;AACvC,eAAO,MAAM,sBAAsB,MAAM,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,WAAW,CAAC;AAEvC,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAC1C,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,eAAO,MAAM,mBAAmB,UAAU,CAAC;AAC3C,eAAO,MAAM,mBAAmB,SAAS,CAAC;AAC1C,eAAO,MAAM,mBAAmB,UAAU,CAAC;AAC3C,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAC1C,eAAO,MAAM,oBAAoB,QAAQ,CAAC;AAC1C,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AACzC,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AACzC,eAAO,MAAM,uBAAuB,UAAU,CAAC;AAC/C,eAAO,MAAM,kBAAkB,SAAS,CAAC;AACzC,eAAO,MAAM,kBAAkB,SAAS,CAAC;AACzC,eAAO,MAAM,sBAAsB,UAAU,CAAC;AAC9C,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,eAAO,MAAM,oBAAoB,WAAW,CAAC;AAC7C,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAC1C,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAC3C,eAAO,MAAM,oBAAoB,QAAQ,CAAC;AAC1C,eAAO,MAAM,oBAAoB,OAAO,CAAC;AACzC,eAAO,MAAM,kBAAkB,QAAQ,CAAC;AACxC,eAAO,MAAM,sBAAsB,SAAS,CAAC;AAC7C,eAAO,MAAM,uBAAuB,SAAS,CAAC;AAC9C,eAAO,MAAM,qBAAqB,eAAe,CAAC"}
package/dist/mod.d.ts CHANGED
@@ -6,5 +6,6 @@ export * as before from './before.js';
6
6
  export * as utils from './utils.js';
7
7
  export * as builders from './builders.js';
8
8
  export type { EvmActions, ProviderAPI, Chain, ChainId } from './types.js';
9
- export { CAIP_NAMESPACE, CAIP_ETHEREUM_CHAIN_ID } from './constants.js';
9
+ export * from './constants.js';
10
+ export { isEvmNamespace } from './utils.js';
10
11
  //# sourceMappingURL=mod.d.ts.map
package/dist/mod.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAE1C,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAE1C,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1E,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
package/dist/mod.js CHANGED
@@ -1,2 +1,2 @@
1
- var C=Object.defineProperty;var o=(e,t)=>C(e,"name",{value:t,configurable:!0});var a=(e,t)=>{for(var n in t)C(e,n,{get:t[n],enumerable:!0})};var v={};a(v,{canEagerConnect:()=>j,canSwitchNetwork:()=>D,connect:()=>M,getChainId:()=>T,recommended:()=>R});import{recommendedActions as O}from"@hub3js/std/actions";var w={};a(w,{filterAndGetEvmBlockchainNames:()=>A,formatAccountsToCAIP:()=>s,getAccounts:()=>h,isUserRejectionError:()=>k,suggestNetwork:()=>E,switchNetwork:()=>I,switchOrAddNetwork:()=>f});import{AccountId as _}from"caip";import{evmBlockchains as N}from"rango-types";var p="eip155",x="1";var S=16;async function h(e){let[t,n]=await Promise.all([e.request({method:"eth_requestAccounts"}),e.request({method:"eth_chainId"})]),r=n;return typeof r=="number"&&(r=`0x${Number(n).toString(S)}`),{accounts:t,chainId:r}}o(h,"getAccounts");async function E(e,t){return await e.request({method:"wallet_addEthereumChain",params:[t]})}o(E,"suggestNetwork");async function I(e,t){return await e.request({method:"wallet_switchEthereumChain",params:[{chainId:t}]})}o(I,"switchNetwork");function A(e){return N(e).map(t=>t.name)}o(A,"filterAndGetEvmBlockchainNames");async function f(e,t){try{let n=typeof t=="string"?t:t.chainId;await I(e,n)}catch(n){let r=n;if(typeof t!="string"&&(r.code===4902||!r.code)){await E(e,t);return}throw n}}o(f,"switchOrAddNetwork");var l=4001;function k(e){if(typeof e=="object"&&e!==null){let t=e.code,n=e.cause?.code;return t===l||n===l}return!1}o(k,"isUserRejectionError");function s(e,t){return e.map(n=>_.format({address:n,chainId:{namespace:p,reference:t}}))}o(s,"formatAccountsToCAIP");var R=[...O];function M(e,t){return async(n,r)=>{let[,u]=n.state();u("connectArgs",{chain:r});let c=e();if(!c)throw new Error("Do your wallet injected correctly and is evm compatible?");r&&(t?.switchOrAddNetwork?await t.switchOrAddNetwork(c,r):await f(c,r));let i;if(t?.getAccounts?i=await t.getAccounts(c):i=await h(c),!i.accounts||!i.accounts.length)throw new Error("No accounts were returned by the provider. Please make sure your wallet has an active EVM-compatible account selected.");return{accounts:s(i.accounts,i.chainId),network:i.chainId}}}o(M,"connect");function j(e){return async()=>{let t=e();if(!t)throw new Error("Trying to eagerly connect to your EVM wallet, but seems its instance is not available.");try{return!!(await t.request({method:"eth_accounts"})).length}catch{return!1}}}o(j,"canEagerConnect");function D(){return(e,t)=>{let{network:n,supportedChains:r}=t;return A(r).includes(n)}}o(D,"canSwitchNetwork");function T(e){return async()=>{let t=e();if(!t)throw new Error("Trying to get chain id from your EVM wallet, but instance is not available.");return t.request({method:"eth_chainId"})}}o(T,"getChainId");var b={};a(b,{changeAccountSubscriber:()=>U,changeChainSubscriber:()=>F});function U(e){return m.changeAccountSubscriber(e).build()}o(U,"changeAccountSubscriber");function F(e){let t;return[n=>{let r=e();if(!r)throw new Error("Trying to subscribe to your EVM wallet, but seems its instance is not available.");let[,u]=n.state();t=o(async c=>{u("network",c)},"eventCallback"),r.on("chainChanged",t)},()=>{let n=e();t&&n&&n.removeListener("chainChanged",t)}]}o(F,"changeChainSubscriber");var P={};a(P,{recommended:()=>B});import{afterRecommended as q}from"@hub3js/std/operators";var B=[...q];var g={};a(g,{recommended:()=>L});import{connectAndUpdateStateForMultiNetworks as H}from"@hub3js/std/operators";var L=[["connect",H]];var y={};a(y,{recommended:()=>W});import{beforeRecommended as V}from"@hub3js/std/operators";var W=[...V];var m={};a(m,{canEagerConnect:()=>K,canSwitchNetwork:()=>Q,changeAccountSubscriber:()=>Y,connect:()=>z,getChainId:()=>Z});import{ActionBuilder as d}from"@hub3js/core";import{ChangeAccountSubscriberBuilder as G}from"@hub3js/std/hooks";import{connectAndUpdateStateForMultiNetworks as J,intoConnecting as X,intoConnectionFinished as $}from"@hub3js/std/operators";var z=o(()=>new d("connect").and(J).before(X).after($),"connect"),K=o(()=>new d("canEagerConnect"),"canEagerConnect"),Q=o(()=>new d("canSwitchNetwork"),"canSwitchNetwork"),Y=o(e=>new G().getInstance(e).onSwitchAccount((t,n)=>{(!t.payload||!t.payload.length)&&(n.action("disconnect"),t.preventDefault())}).format(async(t,n)=>{let r=await t.request({method:"eth_chainId"});return s(n,r)}).addEventListener((t,n)=>{t.on("accountsChanged",n)}).removeEventListener((t,n)=>{t.removeListener?.("accountsChanged",n)}),"changeAccountSubscriber"),Z=o(()=>new d("getChainId"),"getChainId");export{x as CAIP_ETHEREUM_CHAIN_ID,p as CAIP_NAMESPACE,v as actions,P as after,g as and,y as before,m as builders,b as hooks,w as utils};
1
+ var _=Object.defineProperty;var n=(e,t)=>_(e,"name",{value:t,configurable:!0});var i=(e,t)=>{for(var o in t)_(e,o,{get:t[o],enumerable:!0})};var x={};i(x,{canEagerConnect:()=>M,canSwitchNetwork:()=>T,connect:()=>R,getChainId:()=>B,recommended:()=>k});import{recommendedActions as H}from"@hub3js/std/actions";var l={};i(l,{filterAndGetEvmBlockchainNames:()=>d,formatAccountsToCAIP:()=>a,getAccounts:()=>p,isEvmNamespace:()=>f,isUserRejectionError:()=>D,suggestNetwork:()=>E,switchNetwork:()=>P,switchOrAddNetwork:()=>C});import{getNamespaceFromCaip2ChainId as g}from"@hub3js/std/utils";import{AccountId as y}from"caip";import{evmBlockchains as S}from"rango-types";var u="eip155",nt="1",rt="10",ct="59144",st="1088",it="81457",at="42220",mt="250",At="143",It="146",ut="80094",pt="8453",dt="7000",Ct="42161",_t="56",ht="534352",ft="43114",Et="137",Pt="100",lt="25",xt="288",wt="1284",Nt="1285",vt="1666600000";var O=16;function f(e){return g(e)===u}n(f,"isEvmNamespace");async function p(e){let[t,o]=await Promise.all([e.request({method:"eth_requestAccounts"}),e.request({method:"eth_chainId"})]),r=o;return typeof r=="number"&&(r=`0x${Number(o).toString(O)}`),{accounts:t,chainId:r}}n(p,"getAccounts");async function E(e,t){return await e.request({method:"wallet_addEthereumChain",params:[t]})}n(E,"suggestNetwork");async function P(e,t){return await e.request({method:"wallet_switchEthereumChain",params:[{chainId:t}]})}n(P,"switchNetwork");function d(e){return S(e).map(t=>t.name)}n(d,"filterAndGetEvmBlockchainNames");async function C(e,t){try{let o=typeof t=="string"?t:t.chainId;await P(e,o)}catch(o){let r=o;if(typeof t!="string"&&(r.code===4902||!r.code)){await E(e,t);return}throw o}}n(C,"switchOrAddNetwork");var h=4001;function D(e){if(typeof e=="object"&&e!==null){let t=e.code,o=e.cause?.code;return t===h||o===h}return!1}n(D,"isUserRejectionError");function a(e,t){return e.map(o=>y.format({address:o,chainId:{namespace:u,reference:t}}))}n(a,"formatAccountsToCAIP");var k=[...H];function R(e,t){return async(o,r)=>{let[,m]=o.state();m("connectArgs",{chain:r});let c=e();if(!c)throw new Error("Do your wallet injected correctly and is evm compatible?");r&&(t?.switchOrAddNetwork?await t.switchOrAddNetwork(c,r):await C(c,r));let s;if(t?.getAccounts?s=await t.getAccounts(c):s=await p(c),!s.accounts||!s.accounts.length)throw new Error("No accounts were returned by the provider. Please make sure your wallet has an active EVM-compatible account selected.");return{accounts:a(s.accounts,s.chainId),network:s.chainId}}}n(R,"connect");function M(e){return async()=>{let t=e();if(!t)throw new Error("Trying to eagerly connect to your EVM wallet, but seems its instance is not available.");try{return!!(await t.request({method:"eth_accounts"})).length}catch{return!1}}}n(M,"canEagerConnect");function T(){return(e,t)=>{let{network:o,supportedChains:r}=t;return d(r).includes(o)}}n(T,"canSwitchNetwork");function B(e){return async()=>{let t=e();if(!t)throw new Error("Trying to get chain id from your EVM wallet, but instance is not available.");return t.request({method:"eth_chainId"})}}n(B,"getChainId");var w={};i(w,{changeAccountSubscriber:()=>j,changeChainSubscriber:()=>F});function j(e){return A.changeAccountSubscriber(e).build()}n(j,"changeAccountSubscriber");function F(e){let t;return[o=>{let r=e();if(!r)throw new Error("Trying to subscribe to your EVM wallet, but seems its instance is not available.");let[,m]=o.state();t=n(async c=>{m("network",c)},"eventCallback"),r.on("chainChanged",t)},()=>{let o=e();t&&o&&o.removeListener("chainChanged",t)}]}n(F,"changeChainSubscriber");var N={};i(N,{recommended:()=>L});import{afterRecommended as U}from"@hub3js/std/operators";var L=[...U];var v={};i(v,{recommended:()=>V});import{connectAndUpdateStateForMultiNetworks as q}from"@hub3js/std/operators";var V=[["connect",q]];var b={};i(b,{recommended:()=>W});import{beforeRecommended as G}from"@hub3js/std/operators";var W=[...G];var A={};i(A,{canEagerConnect:()=>z,canSwitchNetwork:()=>K,changeAccountSubscriber:()=>Q,connect:()=>$,getChainId:()=>tt});import{ActionBuilder as I}from"@hub3js/core";import{ChangeAccountSubscriberBuilder as X}from"@hub3js/std/hooks";import{connectAndUpdateStateForMultiNetworks as Y,intoConnecting as J,intoConnectionFinished as Z}from"@hub3js/std/operators";var $=n(()=>new I("connect").and(Y).before(J).after(Z),"connect"),z=n(()=>new I("canEagerConnect"),"canEagerConnect"),K=n(()=>new I("canSwitchNetwork"),"canSwitchNetwork"),Q=n(e=>new X().getInstance(e).onSwitchAccount((t,o)=>{(!t.payload||!t.payload.length)&&(o.action("disconnect"),t.preventDefault())}).format(async(t,o)=>{let r=await t.request({method:"eth_chainId"});return a(o,r)}).addEventListener((t,o)=>{t.on("accountsChanged",o)}).removeEventListener((t,o)=>{t.removeListener?.("accountsChanged",o)}),"changeAccountSubscriber"),tt=n(()=>new I("getChainId"),"getChainId");export{Ct as CAIP_ARBITRUM_CHAIN_ID,ft as CAIP_AVAX_CHAIN_ID,pt as CAIP_BASE_CHAIN_ID,ut as CAIP_BERACHAIN_CHAIN_ID,it as CAIP_BLAST_CHAIN_ID,xt as CAIP_BOBA_CHAIN_ID,_t as CAIP_BSC_CHAIN_ID,at as CAIP_CELO_CHAIN_ID,lt as CAIP_CRONOS_CHAIN_ID,nt as CAIP_ETHEREUM_CHAIN_ID,mt as CAIP_FANTOM_CHAIN_ID,Pt as CAIP_GNOSIS_CHAIN_ID,vt as CAIP_HARMONY_CHAIN_ID,ct as CAIP_LINEA_CHAIN_ID,st as CAIP_METIS_CHAIN_ID,At as CAIP_MONAD_CHAIN_ID,wt as CAIP_MOONBEAM_CHAIN_ID,Nt as CAIP_MOONRIVER_CHAIN_ID,u as CAIP_NAMESPACE,rt as CAIP_OPTIMISM_CHAIN_ID,Et as CAIP_POLYGON_CHAIN_ID,ht as CAIP_SCROLL_CHAIN_ID,It as CAIP_SONIC_CHAIN_ID,dt as CAIP_ZETA_CHAIN_ID,x as actions,N as after,v as and,b as before,A as builders,w as hooks,f as isEvmNamespace,l as utils};
2
2
  //# sourceMappingURL=mod.js.map
package/dist/mod.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/actions.ts", "../src/utils.ts", "../src/constants.ts", "../src/hooks.ts", "../src/after.ts", "../src/and.ts", "../src/before.ts", "../src/builders.ts"],
4
- "sourcesContent": ["import type {\n ConnectOptions,\n EvmActions,\n ProviderAccounts,\n ProviderAPI,\n} from './types.js';\nimport type {\n CanEagerConnect,\n Context,\n FunctionWithContext,\n} from '@hub3js/core';\n\nimport { recommendedActions } from '@hub3js/std/actions';\n\nimport {\n filterAndGetEvmBlockchainNames,\n formatAccountsToCAIP,\n getAccounts,\n switchOrAddNetwork,\n} from './utils.js';\n\nexport const recommended = [...recommendedActions];\nexport function connect(\n instance: () => ProviderAPI,\n options?: ConnectOptions,\n): FunctionWithContext<EvmActions['connect'], Context> {\n return async (context, chain) => {\n // Setting connect args to be used on other actions\n const [, setState] = context.state();\n setState('connectArgs', { chain });\n const evmInstance = instance();\n\n if (!evmInstance) {\n throw new Error(\n 'Do your wallet injected correctly and is evm compatible?',\n );\n }\n\n if (chain) {\n /*\n * The `switchOrAddNetwork` function can be optionally provided through `options`\n * to handle network switching or addition in a way that is compatible with the specific wallet provider.\n * This approach is necessary because not all providers follow the same conventions\u2014\n * for example, Rabby uses a different error code for \"chain not found\".\n */\n if (options?.switchOrAddNetwork) {\n await options.switchOrAddNetwork(evmInstance, chain);\n } else {\n await switchOrAddNetwork(evmInstance, chain);\n }\n }\n\n let providerAccounts: ProviderAccounts;\n /*\n * The `getAccounts` function can be optionally provided through `options`\n * to handle getting address and chainId of the specific wallet provider.\n * This approach is necessary because not all providers follow the same conventions.\n */\n if (options?.getAccounts) {\n providerAccounts = await options.getAccounts(evmInstance);\n } else {\n providerAccounts = await getAccounts(evmInstance);\n }\n\n /*\n * Ensure that the provider returns at least one valid account before proceeding.\n * This prevents cases (e.g., MetaMask bug) where a user connects with an account\n * that has no associated EVM address, leaving the dApp without any usable accounts.\n */\n if (!providerAccounts.accounts || !providerAccounts.accounts.length) {\n throw new Error(\n 'No accounts were returned by the provider. Please make sure your wallet has an active EVM-compatible account selected.',\n );\n }\n const formattedAccounts = formatAccountsToCAIP(\n providerAccounts.accounts,\n providerAccounts.chainId,\n );\n\n return {\n accounts: formattedAccounts,\n network: providerAccounts.chainId,\n };\n };\n}\n\nexport function canEagerConnect(\n instance: () => ProviderAPI | undefined,\n): CanEagerConnect<EvmActions> {\n return async () => {\n const evmInstance = instance();\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 };\n}\nexport function canSwitchNetwork(): FunctionWithContext<\n EvmActions['canSwitchNetwork'],\n Context\n> {\n return (context, params) => {\n const { network, supportedChains } = params;\n return filterAndGetEvmBlockchainNames(supportedChains).includes(network);\n };\n}\n\nexport function getChainId(\n instance: () => ProviderAPI | undefined,\n): FunctionWithContext<EvmActions['getChainId'], Context> {\n return async () => {\n const evmInstance = instance();\n\n if (!evmInstance) {\n throw new Error(\n 'Trying to get chain id from your EVM wallet, but instance is not available.',\n );\n }\n\n return evmInstance.request({ method: 'eth_chainId' });\n };\n}\n", "import type { Chain, ChainId, ProviderAPI } from './types.js';\nimport type { CaipAccount } from '@hub3js/std/types';\n\nimport { AccountId } from 'caip';\nimport { type BlockchainMeta, evmBlockchains } from 'rango-types';\n\nimport { CAIP_NAMESPACE } from './constants.js';\n\nconst CHAIN_ID_RADIX = 16;\n\nexport async function getAccounts(provider: ProviderAPI) {\n const [accounts, chainId] = await Promise.all([\n provider.request({ method: 'eth_requestAccounts' }),\n provider.request({ method: 'eth_chainId' }),\n ]);\n /*\n * Trust Wallet Compatibility Fix:\n * Trust Wallet's in-app browser has been observed to return the `chainId` as a\n * number (e.g., 1) rather than the standard hexadecimal string (e.g., \"0x1\").\n * This code block standardizes the `chainId` to the required hex format to\n * prevent downstream errors.\n */\n let standardChainId = chainId;\n if (typeof standardChainId === 'number') {\n standardChainId = `0x${Number(chainId).toString(CHAIN_ID_RADIX)}`;\n }\n\n return {\n accounts,\n chainId: standardChainId,\n };\n}\n\nexport async function suggestNetwork(instance: ProviderAPI, chain: Chain) {\n return await instance.request({\n method: 'wallet_addEthereumChain',\n params: [chain],\n });\n}\n\nexport async function switchNetwork(instance: ProviderAPI, chainId: ChainId) {\n return await instance.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: chainId }],\n });\n}\nexport function filterAndGetEvmBlockchainNames(meta: BlockchainMeta[]) {\n return evmBlockchains(meta).map((blockchain) => blockchain.name);\n}\nexport async function switchOrAddNetwork(\n instance: ProviderAPI,\n chain: ChainId | Chain,\n) {\n try {\n const chainId = typeof chain === 'string' ? chain : chain.chainId;\n await switchNetwork(instance, chainId);\n } catch (switchError) {\n const error = switchError as { code: number };\n\n /*\n * Error code 4902 is used by MetaMask to indicate that the requested chain has not been added to the wallet.\n * This code is not part of the official EIP-1193 spec (https://eips.ethereum.org/EIPS/eip-1193#supported-rpc-methods),\n * so other providers may use a different code or behavior for the same condition.\n */\n const NOT_FOUND_CHAIN_ERROR_CODE = 4902;\n if (\n typeof chain !== 'string' &&\n (error.code === NOT_FOUND_CHAIN_ERROR_CODE || !error.code)\n ) {\n /*\n * Note: on WalletConnect `code` is undefined so we have to use !switchError.code as fallback.\n * This error code indicates that the chain has not been added to wallet.\n */\n await suggestNetwork(instance, chain);\n return;\n }\n throw switchError;\n }\n}\n\nconst EIP_1193_USER_REJECTION_ERROR_CODE = 4001;\nexport function isUserRejectionError(error: unknown): boolean {\n // EIP-1193 user rejection error can be in error.code or error.cause.code\n if (typeof error === 'object' && error !== null) {\n const code = (error as { code?: number }).code;\n const causeCode = (error as { cause?: { code?: number } }).cause?.code;\n return (\n code === EIP_1193_USER_REJECTION_ERROR_CODE ||\n causeCode === EIP_1193_USER_REJECTION_ERROR_CODE\n );\n }\n return false;\n}\n\nexport function formatAccountsToCAIP(accounts: string[], chainId: string) {\n return accounts.map(\n (account) =>\n AccountId.format({\n address: account,\n chainId: {\n namespace: CAIP_NAMESPACE,\n reference: chainId,\n },\n }) as CaipAccount,\n );\n}\n", "export const CAIP_NAMESPACE = 'eip155';\nexport const CAIP_ETHEREUM_CHAIN_ID = '1';\n", "import type { EIP1193EventMap } from './eip1193.js';\nimport type { EvmActions, ProviderAPI } from './types.js';\nimport type { Subscriber, SubscriberCleanUp } from '@hub3js/core';\n\nimport { builders } from './mod.js';\n\nexport function changeAccountSubscriber(\n instance: () => ProviderAPI,\n): [Subscriber<EvmActions>, SubscriberCleanUp<EvmActions>] {\n return builders.changeAccountSubscriber(instance).build();\n}\n\nexport function changeChainSubscriber(\n instance: () => ProviderAPI,\n): [Subscriber<EvmActions>, SubscriberCleanUp<EvmActions>] {\n let eventCallback: EIP1193EventMap['chainChanged'];\n\n return [\n (context) => {\n const evmInstance = instance();\n\n if (!evmInstance) {\n throw new Error(\n 'Trying to subscribe to your EVM wallet, but seems its instance is not available.',\n );\n }\n\n const [, setState] = context.state();\n\n eventCallback = async (chainId: string) => {\n setState('network', chainId);\n };\n evmInstance.on('chainChanged', eventCallback);\n },\n () => {\n const evmInstance = instance();\n\n if (eventCallback && evmInstance) {\n evmInstance.removeListener('chainChanged', eventCallback);\n }\n },\n ];\n}\n", "import { afterRecommended } from '@hub3js/std/operators';\n\nexport const recommended = [...afterRecommended];\n", "import { connectAndUpdateStateForMultiNetworks } from '@hub3js/std/operators';\n\nexport const recommended = [\n ['connect', connectAndUpdateStateForMultiNetworks] as const,\n];\n", "import { beforeRecommended } from '@hub3js/std/operators';\n\nexport const recommended = [...beforeRecommended];\n", "import type { EvmActions, ProviderAPI } from './types.js';\n\nimport { ActionBuilder } from '@hub3js/core';\nimport { ChangeAccountSubscriberBuilder } from '@hub3js/std/hooks';\nimport {\n connectAndUpdateStateForMultiNetworks,\n intoConnecting,\n intoConnectionFinished,\n} from '@hub3js/std/operators';\n\nimport { formatAccountsToCAIP } from './utils.js';\n\n// Actions\nexport const connect = () =>\n new ActionBuilder<EvmActions, 'connect'>('connect')\n .and(connectAndUpdateStateForMultiNetworks)\n .before(intoConnecting)\n .after(intoConnectionFinished);\n\nexport const canEagerConnect = () =>\n new ActionBuilder<EvmActions, 'canEagerConnect'>('canEagerConnect');\nexport const canSwitchNetwork = () =>\n new ActionBuilder<EvmActions, 'canSwitchNetwork'>('canSwitchNetwork');\n\n// Hooks\nexport const changeAccountSubscriber = (getInstance: () => ProviderAPI) =>\n new ChangeAccountSubscriberBuilder<string[], ProviderAPI, EvmActions>()\n .getInstance(getInstance)\n /*\n * In some wallets, when a user switches to an account not yet connected to the dApp, it returns null.\n * A null value indicates no access to the account, requiring a disconnect and user reconnection.\n * This behavior may vary across different wallets, and if so, a different approach may be needed.\n */\n .onSwitchAccount((event, context) => {\n if (!event.payload || !event.payload.length) {\n context.action('disconnect');\n event.preventDefault();\n }\n })\n .format(async (instance, accounts) => {\n const chainId = await instance.request({ method: 'eth_chainId' });\n return formatAccountsToCAIP(accounts, chainId);\n })\n .addEventListener((instance, callback) => {\n instance.on('accountsChanged', callback);\n })\n .removeEventListener((instance, callback) => {\n instance.removeListener?.('accountsChanged', callback);\n });\n\nexport const getChainId = () =>\n new ActionBuilder<EvmActions, 'getChainId'>('getChainId');\n"],
5
- "mappings": "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",
6
- "names": ["actions_exports", "__export", "canEagerConnect", "canSwitchNetwork", "connect", "getChainId", "recommended", "recommendedActions", "utils_exports", "__export", "filterAndGetEvmBlockchainNames", "formatAccountsToCAIP", "getAccounts", "isUserRejectionError", "suggestNetwork", "switchNetwork", "switchOrAddNetwork", "AccountId", "evmBlockchains", "CAIP_NAMESPACE", "CAIP_ETHEREUM_CHAIN_ID", "CHAIN_ID_RADIX", "getAccounts", "provider", "accounts", "chainId", "standardChainId", "__name", "suggestNetwork", "instance", "chain", "switchNetwork", "filterAndGetEvmBlockchainNames", "meta", "evmBlockchains", "blockchain", "switchOrAddNetwork", "switchError", "error", "EIP_1193_USER_REJECTION_ERROR_CODE", "isUserRejectionError", "code", "causeCode", "formatAccountsToCAIP", "account", "AccountId", "CAIP_NAMESPACE", "recommended", "recommendedActions", "connect", "instance", "options", "context", "chain", "setState", "evmInstance", "switchOrAddNetwork", "providerAccounts", "getAccounts", "formatAccountsToCAIP", "__name", "canEagerConnect", "canSwitchNetwork", "params", "network", "supportedChains", "filterAndGetEvmBlockchainNames", "getChainId", "hooks_exports", "__export", "changeAccountSubscriber", "changeChainSubscriber", "changeAccountSubscriber", "instance", "builders_exports", "__name", "changeChainSubscriber", "eventCallback", "context", "evmInstance", "setState", "chainId", "after_exports", "__export", "recommended", "afterRecommended", "and_exports", "__export", "recommended", "connectAndUpdateStateForMultiNetworks", "before_exports", "__export", "recommended", "beforeRecommended", "builders_exports", "__export", "canEagerConnect", "canSwitchNetwork", "changeAccountSubscriber", "connect", "getChainId", "ActionBuilder", "ChangeAccountSubscriberBuilder", "connectAndUpdateStateForMultiNetworks", "intoConnecting", "intoConnectionFinished", "connect", "__name", "ActionBuilder", "connectAndUpdateStateForMultiNetworks", "intoConnecting", "intoConnectionFinished", "canEagerConnect", "canSwitchNetwork", "changeAccountSubscriber", "getInstance", "ChangeAccountSubscriberBuilder", "event", "context", "instance", "accounts", "chainId", "formatAccountsToCAIP", "callback", "getChainId"]
4
+ "sourcesContent": ["import type {\n ConnectOptions,\n EvmActions,\n ProviderAccounts,\n ProviderAPI,\n} from './types.js';\nimport type {\n CanEagerConnect,\n Context,\n FunctionWithContext,\n} from '@hub3js/core';\n\nimport { recommendedActions } from '@hub3js/std/actions';\n\nimport {\n filterAndGetEvmBlockchainNames,\n formatAccountsToCAIP,\n getAccounts,\n switchOrAddNetwork,\n} from './utils.js';\n\nexport const recommended = [...recommendedActions];\nexport function connect(\n instance: () => ProviderAPI,\n options?: ConnectOptions,\n): FunctionWithContext<EvmActions['connect'], Context> {\n return async (context, chain) => {\n // Setting connect args to be used on other actions\n const [, setState] = context.state();\n setState('connectArgs', { chain });\n const evmInstance = instance();\n\n if (!evmInstance) {\n throw new Error(\n 'Do your wallet injected correctly and is evm compatible?',\n );\n }\n\n if (chain) {\n /*\n * The `switchOrAddNetwork` function can be optionally provided through `options`\n * to handle network switching or addition in a way that is compatible with the specific wallet provider.\n * This approach is necessary because not all providers follow the same conventions\u2014\n * for example, Rabby uses a different error code for \"chain not found\".\n */\n if (options?.switchOrAddNetwork) {\n await options.switchOrAddNetwork(evmInstance, chain);\n } else {\n await switchOrAddNetwork(evmInstance, chain);\n }\n }\n\n let providerAccounts: ProviderAccounts;\n /*\n * The `getAccounts` function can be optionally provided through `options`\n * to handle getting address and chainId of the specific wallet provider.\n * This approach is necessary because not all providers follow the same conventions.\n */\n if (options?.getAccounts) {\n providerAccounts = await options.getAccounts(evmInstance);\n } else {\n providerAccounts = await getAccounts(evmInstance);\n }\n\n /*\n * Ensure that the provider returns at least one valid account before proceeding.\n * This prevents cases (e.g., MetaMask bug) where a user connects with an account\n * that has no associated EVM address, leaving the dApp without any usable accounts.\n */\n if (!providerAccounts.accounts || !providerAccounts.accounts.length) {\n throw new Error(\n 'No accounts were returned by the provider. Please make sure your wallet has an active EVM-compatible account selected.',\n );\n }\n const formattedAccounts = formatAccountsToCAIP(\n providerAccounts.accounts,\n providerAccounts.chainId,\n );\n\n return {\n accounts: formattedAccounts,\n network: providerAccounts.chainId,\n };\n };\n}\n\nexport function canEagerConnect(\n instance: () => ProviderAPI | undefined,\n): CanEagerConnect<EvmActions> {\n return async () => {\n const evmInstance = instance();\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 };\n}\nexport function canSwitchNetwork(): FunctionWithContext<\n EvmActions['canSwitchNetwork'],\n Context\n> {\n return (context, params) => {\n const { network, supportedChains } = params;\n return filterAndGetEvmBlockchainNames(supportedChains).includes(network);\n };\n}\n\nexport function getChainId(\n instance: () => ProviderAPI | undefined,\n): FunctionWithContext<EvmActions['getChainId'], Context> {\n return async () => {\n const evmInstance = instance();\n\n if (!evmInstance) {\n throw new Error(\n 'Trying to get chain id from your EVM wallet, but instance is not available.',\n );\n }\n\n return evmInstance.request({ method: 'eth_chainId' });\n };\n}\n", "import type { Chain, ChainId, ProviderAPI } from './types.js';\nimport type { CaipAccount } from '@hub3js/std/types';\n\nimport { getNamespaceFromCaip2ChainId } from '@hub3js/std/utils';\nimport { AccountId } from 'caip';\nimport { type BlockchainMeta, evmBlockchains } from 'rango-types';\n\nimport { CAIP_NAMESPACE } from './constants.js';\n\nconst CHAIN_ID_RADIX = 16;\n\nexport function isEvmNamespace(caip2ChainId: string): boolean {\n return getNamespaceFromCaip2ChainId(caip2ChainId) === CAIP_NAMESPACE;\n}\n\nexport async function getAccounts(provider: ProviderAPI) {\n const [accounts, chainId] = await Promise.all([\n provider.request({ method: 'eth_requestAccounts' }),\n provider.request({ method: 'eth_chainId' }),\n ]);\n /*\n * Trust Wallet Compatibility Fix:\n * Trust Wallet's in-app browser has been observed to return the `chainId` as a\n * number (e.g., 1) rather than the standard hexadecimal string (e.g., \"0x1\").\n * This code block standardizes the `chainId` to the required hex format to\n * prevent downstream errors.\n */\n let standardChainId = chainId;\n if (typeof standardChainId === 'number') {\n standardChainId = `0x${Number(chainId).toString(CHAIN_ID_RADIX)}`;\n }\n\n return {\n accounts,\n chainId: standardChainId,\n };\n}\n\nexport async function suggestNetwork(instance: ProviderAPI, chain: Chain) {\n return await instance.request({\n method: 'wallet_addEthereumChain',\n params: [chain],\n });\n}\n\nexport async function switchNetwork(instance: ProviderAPI, chainId: ChainId) {\n return await instance.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: chainId }],\n });\n}\nexport function filterAndGetEvmBlockchainNames(meta: BlockchainMeta[]) {\n return evmBlockchains(meta).map((blockchain) => blockchain.name);\n}\nexport async function switchOrAddNetwork(\n instance: ProviderAPI,\n chain: ChainId | Chain,\n) {\n try {\n const chainId = typeof chain === 'string' ? chain : chain.chainId;\n await switchNetwork(instance, chainId);\n } catch (switchError) {\n const error = switchError as { code: number };\n\n /*\n * Error code 4902 is used by MetaMask to indicate that the requested chain has not been added to the wallet.\n * This code is not part of the official EIP-1193 spec (https://eips.ethereum.org/EIPS/eip-1193#supported-rpc-methods),\n * so other providers may use a different code or behavior for the same condition.\n */\n const NOT_FOUND_CHAIN_ERROR_CODE = 4902;\n if (\n typeof chain !== 'string' &&\n (error.code === NOT_FOUND_CHAIN_ERROR_CODE || !error.code)\n ) {\n /*\n * Note: on WalletConnect `code` is undefined so we have to use !switchError.code as fallback.\n * This error code indicates that the chain has not been added to wallet.\n */\n await suggestNetwork(instance, chain);\n return;\n }\n throw switchError;\n }\n}\n\nconst EIP_1193_USER_REJECTION_ERROR_CODE = 4001;\nexport function isUserRejectionError(error: unknown): boolean {\n // EIP-1193 user rejection error can be in error.code or error.cause.code\n if (typeof error === 'object' && error !== null) {\n const code = (error as { code?: number }).code;\n const causeCode = (error as { cause?: { code?: number } }).cause?.code;\n return (\n code === EIP_1193_USER_REJECTION_ERROR_CODE ||\n causeCode === EIP_1193_USER_REJECTION_ERROR_CODE\n );\n }\n return false;\n}\n\nexport function formatAccountsToCAIP(accounts: string[], chainId: string) {\n return accounts.map(\n (account) =>\n AccountId.format({\n address: account,\n chainId: {\n namespace: CAIP_NAMESPACE,\n reference: chainId,\n },\n }) as CaipAccount,\n );\n}\n", "export const CAIP_NAMESPACE = 'eip155';\n\nexport const CAIP_ETHEREUM_CHAIN_ID = '1';\nexport const CAIP_OPTIMISM_CHAIN_ID = '10';\nexport const CAIP_LINEA_CHAIN_ID = '59144';\nexport const CAIP_METIS_CHAIN_ID = '1088';\nexport const CAIP_BLAST_CHAIN_ID = '81457';\nexport const CAIP_CELO_CHAIN_ID = '42220';\nexport const CAIP_FANTOM_CHAIN_ID = '250';\nexport const CAIP_MONAD_CHAIN_ID = '143';\nexport const CAIP_SONIC_CHAIN_ID = '146';\nexport const CAIP_BERACHAIN_CHAIN_ID = '80094';\nexport const CAIP_BASE_CHAIN_ID = '8453';\nexport const CAIP_ZETA_CHAIN_ID = '7000';\nexport const CAIP_ARBITRUM_CHAIN_ID = '42161';\nexport const CAIP_BSC_CHAIN_ID = '56';\nexport const CAIP_SCROLL_CHAIN_ID = '534352';\nexport const CAIP_AVAX_CHAIN_ID = '43114';\nexport const CAIP_POLYGON_CHAIN_ID = '137';\nexport const CAIP_GNOSIS_CHAIN_ID = '100';\nexport const CAIP_CRONOS_CHAIN_ID = '25';\nexport const CAIP_BOBA_CHAIN_ID = '288';\nexport const CAIP_MOONBEAM_CHAIN_ID = '1284';\nexport const CAIP_MOONRIVER_CHAIN_ID = '1285';\nexport const CAIP_HARMONY_CHAIN_ID = '1666600000';\n", "import type { EIP1193EventMap } from './eip1193.js';\nimport type { EvmActions, ProviderAPI } from './types.js';\nimport type { Subscriber, SubscriberCleanUp } from '@hub3js/core';\n\nimport { builders } from './mod.js';\n\nexport function changeAccountSubscriber(\n instance: () => ProviderAPI,\n): [Subscriber<EvmActions>, SubscriberCleanUp<EvmActions>] {\n return builders.changeAccountSubscriber(instance).build();\n}\n\nexport function changeChainSubscriber(\n instance: () => ProviderAPI,\n): [Subscriber<EvmActions>, SubscriberCleanUp<EvmActions>] {\n let eventCallback: EIP1193EventMap['chainChanged'];\n\n return [\n (context) => {\n const evmInstance = instance();\n\n if (!evmInstance) {\n throw new Error(\n 'Trying to subscribe to your EVM wallet, but seems its instance is not available.',\n );\n }\n\n const [, setState] = context.state();\n\n eventCallback = async (chainId: string) => {\n setState('network', chainId);\n };\n evmInstance.on('chainChanged', eventCallback);\n },\n () => {\n const evmInstance = instance();\n\n if (eventCallback && evmInstance) {\n evmInstance.removeListener('chainChanged', eventCallback);\n }\n },\n ];\n}\n", "import { afterRecommended } from '@hub3js/std/operators';\n\nexport const recommended = [...afterRecommended];\n", "import { connectAndUpdateStateForMultiNetworks } from '@hub3js/std/operators';\n\nexport const recommended = [\n ['connect', connectAndUpdateStateForMultiNetworks] as const,\n];\n", "import { beforeRecommended } from '@hub3js/std/operators';\n\nexport const recommended = [...beforeRecommended];\n", "import type { EvmActions, ProviderAPI } from './types.js';\n\nimport { ActionBuilder } from '@hub3js/core';\nimport { ChangeAccountSubscriberBuilder } from '@hub3js/std/hooks';\nimport {\n connectAndUpdateStateForMultiNetworks,\n intoConnecting,\n intoConnectionFinished,\n} from '@hub3js/std/operators';\n\nimport { formatAccountsToCAIP } from './utils.js';\n\n// Actions\nexport const connect = () =>\n new ActionBuilder<EvmActions, 'connect'>('connect')\n .and(connectAndUpdateStateForMultiNetworks)\n .before(intoConnecting)\n .after(intoConnectionFinished);\n\nexport const canEagerConnect = () =>\n new ActionBuilder<EvmActions, 'canEagerConnect'>('canEagerConnect');\nexport const canSwitchNetwork = () =>\n new ActionBuilder<EvmActions, 'canSwitchNetwork'>('canSwitchNetwork');\n\n// Hooks\nexport const changeAccountSubscriber = (getInstance: () => ProviderAPI) =>\n new ChangeAccountSubscriberBuilder<string[], ProviderAPI, EvmActions>()\n .getInstance(getInstance)\n /*\n * In some wallets, when a user switches to an account not yet connected to the dApp, it returns null.\n * A null value indicates no access to the account, requiring a disconnect and user reconnection.\n * This behavior may vary across different wallets, and if so, a different approach may be needed.\n */\n .onSwitchAccount((event, context) => {\n if (!event.payload || !event.payload.length) {\n context.action('disconnect');\n event.preventDefault();\n }\n })\n .format(async (instance, accounts) => {\n const chainId = await instance.request({ method: 'eth_chainId' });\n return formatAccountsToCAIP(accounts, chainId);\n })\n .addEventListener((instance, callback) => {\n instance.on('accountsChanged', callback);\n })\n .removeEventListener((instance, callback) => {\n instance.removeListener?.('accountsChanged', callback);\n });\n\nexport const getChainId = () =>\n new ActionBuilder<EvmActions, 'getChainId'>('getChainId');\n"],
5
+ "mappings": "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",
6
+ "names": ["actions_exports", "__export", "canEagerConnect", "canSwitchNetwork", "connect", "getChainId", "recommended", "recommendedActions", "utils_exports", "__export", "filterAndGetEvmBlockchainNames", "formatAccountsToCAIP", "getAccounts", "isEvmNamespace", "isUserRejectionError", "suggestNetwork", "switchNetwork", "switchOrAddNetwork", "getNamespaceFromCaip2ChainId", "AccountId", "evmBlockchains", "CAIP_NAMESPACE", "CAIP_ETHEREUM_CHAIN_ID", "CAIP_OPTIMISM_CHAIN_ID", "CAIP_LINEA_CHAIN_ID", "CAIP_METIS_CHAIN_ID", "CAIP_BLAST_CHAIN_ID", "CAIP_CELO_CHAIN_ID", "CAIP_FANTOM_CHAIN_ID", "CAIP_MONAD_CHAIN_ID", "CAIP_SONIC_CHAIN_ID", "CAIP_BERACHAIN_CHAIN_ID", "CAIP_BASE_CHAIN_ID", "CAIP_ZETA_CHAIN_ID", "CAIP_ARBITRUM_CHAIN_ID", "CAIP_BSC_CHAIN_ID", "CAIP_SCROLL_CHAIN_ID", "CAIP_AVAX_CHAIN_ID", "CAIP_POLYGON_CHAIN_ID", "CAIP_GNOSIS_CHAIN_ID", "CAIP_CRONOS_CHAIN_ID", "CAIP_BOBA_CHAIN_ID", "CAIP_MOONBEAM_CHAIN_ID", "CAIP_MOONRIVER_CHAIN_ID", "CAIP_HARMONY_CHAIN_ID", "CHAIN_ID_RADIX", "isEvmNamespace", "caip2ChainId", "getNamespaceFromCaip2ChainId", "CAIP_NAMESPACE", "__name", "getAccounts", "provider", "accounts", "chainId", "standardChainId", "suggestNetwork", "instance", "chain", "switchNetwork", "filterAndGetEvmBlockchainNames", "meta", "evmBlockchains", "blockchain", "switchOrAddNetwork", "switchError", "error", "EIP_1193_USER_REJECTION_ERROR_CODE", "isUserRejectionError", "code", "causeCode", "formatAccountsToCAIP", "account", "AccountId", "recommended", "recommendedActions", "connect", "instance", "options", "context", "chain", "setState", "evmInstance", "switchOrAddNetwork", "providerAccounts", "getAccounts", "formatAccountsToCAIP", "__name", "canEagerConnect", "canSwitchNetwork", "params", "network", "supportedChains", "filterAndGetEvmBlockchainNames", "getChainId", "hooks_exports", "__export", "changeAccountSubscriber", "changeChainSubscriber", "changeAccountSubscriber", "instance", "builders_exports", "__name", "changeChainSubscriber", "eventCallback", "context", "evmInstance", "setState", "chainId", "after_exports", "__export", "recommended", "afterRecommended", "and_exports", "__export", "recommended", "connectAndUpdateStateForMultiNetworks", "before_exports", "__export", "recommended", "beforeRecommended", "builders_exports", "__export", "canEagerConnect", "canSwitchNetwork", "changeAccountSubscriber", "connect", "getChainId", "ActionBuilder", "ChangeAccountSubscriberBuilder", "connectAndUpdateStateForMultiNetworks", "intoConnecting", "intoConnectionFinished", "connect", "__name", "ActionBuilder", "connectAndUpdateStateForMultiNetworks", "intoConnecting", "intoConnectionFinished", "canEagerConnect", "canSwitchNetwork", "changeAccountSubscriber", "getInstance", "ChangeAccountSubscriberBuilder", "event", "context", "instance", "accounts", "chainId", "formatAccountsToCAIP", "callback", "getChainId"]
7
7
  }
package/dist/utils.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { Chain, ChainId, ProviderAPI } from './types.js';
2
2
  import { type BlockchainMeta } from 'rango-types';
3
+ export declare function isEvmNamespace(caip2ChainId: string): boolean;
3
4
  export declare function getAccounts(provider: ProviderAPI): Promise<{
4
5
  accounts: `0x${string}`[];
5
6
  chainId: `0x${string}`;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9D,OAAO,EAAE,KAAK,cAAc,EAAkB,MAAM,aAAa,CAAC;AAMlE,wBAAsB,WAAW,CAAC,QAAQ,EAAE,WAAW;;;GAqBtD;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,iBAKvE;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,iBAK1E;AACD,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,cAAc,EAAE,YAEpE;AACD,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE,OAAO,GAAG,KAAK,iBA2BvB;AAGD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAW5D;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,qCAWvE"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9D,OAAO,EAAE,KAAK,cAAc,EAAkB,MAAM,aAAa,CAAC;AAMlE,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,WAAW;;;GAqBtD;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,iBAKvE;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,iBAK1E;AACD,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,cAAc,EAAE,YAEpE;AACD,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE,OAAO,GAAG,KAAK,iBA2BvB;AAGD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAW5D;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,qCAWvE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hub3js/evm",
3
- "version": "0.3.2",
3
+ "version": "0.3.3",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "source": "./src/mod.ts",
@@ -26,13 +26,13 @@
26
26
  "coverage": "vitest run --coverage"
27
27
  },
28
28
  "peerDependencies": {
29
- "@hub3js/core": "^0.61.0"
29
+ "@hub3js/core": "^0.61.1"
30
30
  },
31
31
  "devDependencies": {
32
- "@hub3js/core": "^0.61.0"
32
+ "@hub3js/core": "^0.61.1"
33
33
  },
34
34
  "dependencies": {
35
- "@hub3js/std": "^0.2.2",
35
+ "@hub3js/std": "^0.2.3",
36
36
  "caip": "^1.1.1",
37
37
  "rango-types": "^0.5.0"
38
38
  },
package/src/constants.ts CHANGED
@@ -1,2 +1,25 @@
1
1
  export const CAIP_NAMESPACE = 'eip155';
2
+
2
3
  export const CAIP_ETHEREUM_CHAIN_ID = '1';
4
+ export const CAIP_OPTIMISM_CHAIN_ID = '10';
5
+ export const CAIP_LINEA_CHAIN_ID = '59144';
6
+ export const CAIP_METIS_CHAIN_ID = '1088';
7
+ export const CAIP_BLAST_CHAIN_ID = '81457';
8
+ export const CAIP_CELO_CHAIN_ID = '42220';
9
+ export const CAIP_FANTOM_CHAIN_ID = '250';
10
+ export const CAIP_MONAD_CHAIN_ID = '143';
11
+ export const CAIP_SONIC_CHAIN_ID = '146';
12
+ export const CAIP_BERACHAIN_CHAIN_ID = '80094';
13
+ export const CAIP_BASE_CHAIN_ID = '8453';
14
+ export const CAIP_ZETA_CHAIN_ID = '7000';
15
+ export const CAIP_ARBITRUM_CHAIN_ID = '42161';
16
+ export const CAIP_BSC_CHAIN_ID = '56';
17
+ export const CAIP_SCROLL_CHAIN_ID = '534352';
18
+ export const CAIP_AVAX_CHAIN_ID = '43114';
19
+ export const CAIP_POLYGON_CHAIN_ID = '137';
20
+ export const CAIP_GNOSIS_CHAIN_ID = '100';
21
+ export const CAIP_CRONOS_CHAIN_ID = '25';
22
+ export const CAIP_BOBA_CHAIN_ID = '288';
23
+ export const CAIP_MOONBEAM_CHAIN_ID = '1284';
24
+ export const CAIP_MOONRIVER_CHAIN_ID = '1285';
25
+ export const CAIP_HARMONY_CHAIN_ID = '1666600000';
package/src/mod.ts CHANGED
@@ -7,4 +7,5 @@ export * as utils from './utils.js';
7
7
  export * as builders from './builders.js';
8
8
 
9
9
  export type { EvmActions, ProviderAPI, Chain, ChainId } from './types.js';
10
- export { CAIP_NAMESPACE, CAIP_ETHEREUM_CHAIN_ID } from './constants.js';
10
+ export * from './constants.js';
11
+ export { isEvmNamespace } from './utils.js';
package/src/utils.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import type { Chain, ChainId, ProviderAPI } from './types.js';
2
2
  import type { CaipAccount } from '@hub3js/std/types';
3
3
 
4
+ import { getNamespaceFromCaip2ChainId } from '@hub3js/std/utils';
4
5
  import { AccountId } from 'caip';
5
6
  import { type BlockchainMeta, evmBlockchains } from 'rango-types';
6
7
 
@@ -8,6 +9,10 @@ import { CAIP_NAMESPACE } from './constants.js';
8
9
 
9
10
  const CHAIN_ID_RADIX = 16;
10
11
 
12
+ export function isEvmNamespace(caip2ChainId: string): boolean {
13
+ return getNamespaceFromCaip2ChainId(caip2ChainId) === CAIP_NAMESPACE;
14
+ }
15
+
11
16
  export async function getAccounts(provider: ProviderAPI) {
12
17
  const [accounts, chainId] = await Promise.all([
13
18
  provider.request({ method: 'eth_requestAccounts' }),