@rango-dev/provider-ledger 0.21.1-next.0 → 0.21.1-next.2

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,2 +1,2 @@
1
- import{m as d,n as s}from"./chunk-HLLU77MH.js";import"./chunk-5QSDSOWH.js";import{d as o,l as h,p as i,q as l}from"./chunk-L3UWJBD6.js";import{a as p}from"./chunk-CVKDPNYM.js";import{DEFAULT_ETHEREUM_RPC_URL as P}from"@rango-dev/wallets-shared";import{JsonRpcProvider as y,Transaction as f}from"ethers";import{SignerError as E,SignerErrorCode as R}from"rango-types";var u=class{static{p(this,"EthereumSigner")}async signMessage(r){try{let a=await i(),t=await new s(a).signPersonalMessage(o(),Buffer.from(r).toString("hex")),n=(t.v-27).toString(16);return n.length<2&&(n="0"+n),"0x"+t.r+t.s+n}catch(a){throw new E(R.SIGN_TX_ERROR,void 0,a)}}async signAndSendTx(r,a,c){try{let t=new y(P),n=await t.getTransactionCount(a),g={to:r.to,gasPrice:r.gasPrice,gasLimit:r.gasLimit,nonce:n,chainId:c,data:r.data,value:r.value,maxPriorityFeePerGas:r.maxPriorityFeePerGas,maxFeePerGas:r.maxFeePerGas},m=f.from(g).unsignedSerialized.substring(2),T=await d.resolveTransaction(m,{},{}),v=await i(),e=await new s(v).signTransaction(o(),m,T),w=f.from({...g,signature:{r:"0x"+e.r,s:"0x"+e.s,v:parseInt(e.v)}}).serialized;return{hash:(await t.broadcastTransaction(w)).hash}}catch(t){throw h(t)}finally{await l()}}};export{u as EthereumSigner};
2
- //# sourceMappingURL=ethereum-4K63WN6K.js.map
1
+ import{m as d,n as s}from"./chunk-HLLU77MH.js";import"./chunk-5QSDSOWH.js";import{d as o,l as h,p as i,q as l}from"./chunk-I25CJMQS.js";import{a as p}from"./chunk-CVKDPNYM.js";import{DEFAULT_ETHEREUM_RPC_URL as P}from"@rango-dev/wallets-shared";import{JsonRpcProvider as y,Transaction as f}from"ethers";import{SignerError as E,SignerErrorCode as R}from"rango-types";var u=class{static{p(this,"EthereumSigner")}async signMessage(r){try{let a=await i(),t=await new s(a).signPersonalMessage(o(),Buffer.from(r).toString("hex")),n=(t.v-27).toString(16);return n.length<2&&(n="0"+n),"0x"+t.r+t.s+n}catch(a){throw new E(R.SIGN_TX_ERROR,void 0,a)}}async signAndSendTx(r,a,c){try{let t=new y(P),n=await t.getTransactionCount(a),g={to:r.to,gasPrice:r.gasPrice,gasLimit:r.gasLimit,nonce:n,chainId:c,data:r.data,value:r.value,maxPriorityFeePerGas:r.maxPriorityFeePerGas,maxFeePerGas:r.maxFeePerGas},m=f.from(g).unsignedSerialized.substring(2),T=await d.resolveTransaction(m,{},{}),v=await i(),e=await new s(v).signTransaction(o(),m,T),w=f.from({...g,signature:{r:"0x"+e.r,s:"0x"+e.s,v:parseInt(e.v)}}).serialized;return{hash:(await t.broadcastTransaction(w)).hash}}catch(t){throw h(t)}finally{await l()}}};export{u as EthereumSigner};
2
+ //# sourceMappingURL=ethereum-J6U6B3NU.js.map
package/dist/mod.js CHANGED
@@ -1,2 +1,2 @@
1
- import{a as u,b as p,c as m,e as O,f as R,g as w,h as j,i as h,j as Y,k as v,m as g,n as b,o as A,r as F}from"./chunk-L3UWJBD6.js";import{a as r}from"./chunk-CVKDPNYM.js";var ce=Object.defineProperty,E=r((e,t)=>ce(e,"name",{value:t,configurable:!0}),"n");function de(e,t){return`${e}$$${t}`}r(de,"t");E(de,"generateStoreId");function ue(e,t){if(!t)throw new Error("You should provide a valid semver, e.g 1.0.0.");let n=e.find(([a])=>a===t);if(!n)throw new Error(`You target version hasn't been found. Available versions: ${Object.keys(e).join(", ")}`);return n}r(ue,"v");E(ue,"pickVersion");function y(){let e=[],t={version:(n,a)=>(e.push([n,a]),t),build:()=>e};return t}r(y,"d");E(y,"defineVersions");function me(e){return y().version("0.0.0",e).build()}r(me,"p");E(me,"legacyProviderImportsToVersionsInterface");import{Networks as I,WalletTypes as he}from"@rango-dev/wallets-shared";import"rango-types";var le={type:he.LEDGER},pe=v,fe=r(async({namespaces:e})=>{let t=[],n=e?.find(o=>o.namespace==="Solana"),a=e?.find(o=>o.namespace==="EVM");if(n)if(n.derivationPath){m(n.derivationPath);let o=await A();t.push(o)}else throw new Error("Derivation Path can not be empty.");else if(a)if(a.derivationPath){m(a.derivationPath);let o=await b();t.push(o)}else throw new Error("Derivation Path can not be empty.");else throw new Error(`It appears that you have selected a namespace that is not yet supported by our system. Your namespaces: ${e?.map(o=>o.namespace)}`);return t},"connect");var we=F,ve=r(e=>{let t=[],n=e.find(o=>o.name===I.ETHEREUM);n&&t.push(n);let a=e.find(o=>o.name===I.SOLANA);return a&&t.push(a),{name:"Ledger",img:"https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/ledger/icon.svg",installLink:{DEFAULT:"https://support.ledger.com/hc/en-us/articles/4404389606417-Download-and-install-Ledger-Live?docs=true"},color:"black",supportedChains:t,showOnMobile:!1,needsDerivationPath:{data:[{id:"metamask",label:"Metamask (m/44'/60'/0'/0/index)",namespace:"EVM",generateDerivationPath:o=>`44'/60'/0'/0/${o}`},{id:"ledgerLive",label:"LedgerLive (m/44'/60'/index'/0/0)",namespace:"EVM",generateDerivationPath:o=>`44'/60'/${o}'/0/0`},{id:"legacy",label:"Legacy (m/44'/60'/0'/index)",namespace:"EVM",generateDerivationPath:o=>`44'/60'/0'/${o}`},{id:"(m/44'/501'/index')",label:"(m/44'/501'/index')",namespace:"Solana",generateDerivationPath:o=>`44'/501'/${o}'`},{id:"(m/44'/501'/0'/index)",label:"(m/44'/501'/0'/index)",namespace:"Solana",generateDerivationPath:o=>`44'/501'/0'/${o}`}]},needsNamespace:{selection:"single",data:[{label:"EVM",value:"EVM",id:"ETH",getSupportedChains:o=>o.filter(s=>s.name===I.ETHEREUM)},{label:"Solana",value:"Solana",id:"SOLANA",getSupportedChains:o=>o.filter(s=>s.name===I.SOLANA)}]}}},"getWalletInfo"),U=r(()=>({config:le,getInstance:pe,connect:fe,getSigners:we,getWalletInfo:ve}),"buildLegacyProvider");var q=Object.defineProperty,c=r((e,t)=>q(e,"name",{value:t,configurable:!0}),"r"),W=r((e,t)=>{for(var n in t)q(e,n,{get:t[n],enumerable:!0})},"f"),ge={};W(ge,{disconnect:()=>k,recommended:()=>be});function k(e){let[,t]=e.state();t("network",null),t("accounts",null),t("connected",!1),t("connecting",!1)}r(k,"s");c(k,"disconnect");var be=[["disconnect",k]],f={};W(f,{disconnect:()=>Ee});var Ae=class{static{r(this,"n")}static{c(this,"ActionBuilder")}name;#e=new Map;#t=new Map;#n=new Map;#r=new Map;#o;constructor(e){this.name=e}and(e){return this.#e.has(this.name)||this.#e.set(this.name,[]),this.#e.get(this.name)?.push(e),this}or(e){return this.#t.has(this.name)||this.#t.set(this.name,[]),this.#t.get(this.name)?.push(e),this}before(e){return this.#r.has(this.name)||this.#r.set(this.name,[]),this.#r.get(this.name)?.push(e),this}after(e){return this.#n.has(this.name)||this.#n.set(this.name,[]),this.#n.get(this.name)?.push(e),this}action(e){return this.#o=e,this}build(){if(!this.#o)throw new Error("Your action builder should includes an action.");return{actionName:this.name,action:this.#o,before:this.#r,after:this.#n,and:this.#e,or:this.#t}}},Ee=c(()=>new Ae("disconnect").action(k),"disconnect");function z(e){if(e instanceof Error)throw e;let t;typeof e=="object"&&e!==null&&"message"in e&&typeof e.message=="string"?t=e.message:typeof e=="string"?t=e:t=String(e);let n=new Error(t);throw typeof e=="object"&&e!==null&&("code"in e&&(n.code=e.code),"data"in e&&(n.data=e.data)),n}r(z,"d");c(z,"parseErrorAndThrowStandardizeError");function ye(e,t){z(t)}r(ye,"E");c(ye,"standardizeAndThrowError");function Ie(e){let[,t]=e.state();t("connecting",!1)}r(Ie,"g");c(Ie,"intoConnectionFinished");function S(e){try{return u.parse(e),!0}catch{return!1}}r(S,"u");c(S,"isValidCaipAddress");function ke(e,t){if(!t.every(S))throw new Error(`Your provider should format account addresses in CAIP-10 format. Your provided accounts: ${t}`);let[,n]=e.state();return n("accounts",t),n("connected",!0),t}r(ke,"T");c(ke,"connectAndUpdateStateForSingleNetwork");function Pe(e,t){if(!t.accounts.every(S))throw new Error(`Your provider should format account addresses in CAIP-10 format. Your provided accounts: ${t.accounts}`);let[,n]=e.state();return n("accounts",t.accounts),n("network",t.network),n("connected",!0),t}r(Pe,"I");c(Pe,"connectAndUpdateStateForMultiNetworks");function Ce(e){let[,t]=e.state();t("connecting",!0)}r(Ce,"x");c(Ce,"intoConnecting");import{evmBlockchains as Le}from"rango-types";var G=Object.defineProperty,i=r((e,t)=>G(e,"name",{value:t,configurable:!0}),"t"),l=r((e,t)=>{for(var n in t)G(e,n,{get:t[n],enumerable:!0})},"d"),Se={};l(Se,{canEagerConnect:()=>ee,canSwitchNetwork:()=>te,changeAccountSubscriber:()=>X,changeChainSubscriber:()=>Z,connect:()=>Q,recommended:()=>xe});function J(e){let[,t]=e.state();t("network",null),t("accounts",null),t("connected",!1),t("connecting",!1)}r(J,"P");i(J,"disconnect");var Ne=[["disconnect",J]],P="eip155";var Me={};l(Me,{filterAndGetEvmBlockchainNames:()=>x,getAccounts:()=>N,isUserRejectionError:()=>K,suggestNetwork:()=>M,switchNetwork:()=>L,switchOrAddNetwork:()=>D});async function N(e){let[t,n]=await Promise.all([e.request({method:"eth_requestAccounts"}),e.request({method:"eth_chainId"})]);return{accounts:t,chainId:n}}r(N,"v");i(N,"getAccounts");async function M(e,t){return await e.request({method:"wallet_addEthereumChain",params:[t]})}r(M,"I");i(M,"suggestNetwork");async function L(e,t){return await e.request({method:"wallet_switchEthereumChain",params:[{chainId:t}]})}r(L,"T");i(L,"switchNetwork");function x(e){return Le(e).map(t=>t.name)}r(x,"y");i(x,"filterAndGetEvmBlockchainNames");async function D(e,t){try{let n=typeof t=="string"?t:t.chainId;await L(e,n)}catch(n){let a=n;if(typeof t!="string"&&(a.code===4902||!a.code)){await M(e,t);return}throw n}}r(D,"x");i(D,"switchOrAddNetwork");var H=4001;function K(e){if(typeof e=="object"&&e!==null){let t=e.code,n=e.cause?.code;return t===H||n===H}return!1}r(K,"$");i(K,"isUserRejectionError");var xe=[...Ne],De=16;function Q(e,t){return async(n,a)=>{let o=e();if(!o)throw new Error("Do your wallet injected correctly and is evm compatible?");a&&(t?.switchOrAddNetwork?await t.switchOrAddNetwork(o,a):await D(o,a));let s=await N(o),d=s.chainId;return typeof d=="number"&&(d=`0x${Number(d).toString(De)}`),{accounts:s.accounts.map(C=>u.format({address:C,chainId:{namespace:P,reference:d}})),network:d}}}r(Q,"z");i(Q,"connect");function X(e){let t;return[(n,a)=>{let o=e();if(!o)throw new Error("Trying to subscribe to your EVM wallet, but seems its instance is not available.");let[,s]=n.state();if(t=i(async d=>{if(!d||d.length===0){n.action("disconnect");return}let C=await o.request({method:"eth_chainId"}),ie=d.map(se=>u.format({address:se,chainId:{namespace:P,reference:C}}));s("accounts",ie)},"eventCallback"),o.on("accountsChanged",t),a instanceof Error)throw a},(n,a)=>{let o=e();return t&&o&&o.removeListener?.("accountsChanged",t),a}]}r(X,"q");i(X,"changeAccountSubscriber");function Z(e){let t;return[n=>{let a=e();if(!a)throw new Error("Trying to subscribe to your EVM wallet, but seems its instance is not available.");let[,o]=n.state();t=i(async s=>{o("network",s)},"eventCallback"),a.on("chainChanged",t)},()=>{let n=e();t&&n&&n.removeListener("chainChanged",t)}]}r(Z,"J");i(Z,"changeChainSubscriber");function ee(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}}}r(ee,"Q");i(ee,"canEagerConnect");function te(){return(e,t)=>{let{network:n,supportedChains:a}=t;return x(a).includes(n)}}r(te,"X");i(te,"canSwitchNetwork");var Te={};l(Te,{recommended:()=>_e});function T(e){let[,t]=e.state();t("connecting",!1)}r(T,"u");i(T,"intoConnectionFinished");var Ve=[["connect",T]],_e=[...Ve],Be={};l(Be,{recommended:()=>Oe});var V=class{static{r(this,"a")}static{i(this,"ActionBuilder")}name;#e=new Map;#t=new Map;#n=new Map;#r=new Map;#o;constructor(e){this.name=e}and(e){return this.#e.has(this.name)||this.#e.set(this.name,[]),this.#e.get(this.name)?.push(e),this}or(e){return this.#t.has(this.name)||this.#t.set(this.name,[]),this.#t.get(this.name)?.push(e),this}before(e){return this.#r.has(this.name)||this.#r.set(this.name,[]),this.#r.get(this.name)?.push(e),this}after(e){return this.#n.has(this.name)||this.#n.set(this.name,[]),this.#n.get(this.name)?.push(e),this}action(e){return this.#o=e,this}build(){if(!this.#o)throw new Error("Your action builder should includes an action.");return{actionName:this.name,action:this.#o,before:this.#r,after:this.#n,and:this.#e,or:this.#t}}};function ne(e){try{return u.parse(e),!0}catch{return!1}}r(ne,"D");i(ne,"isValidCaipAddress");function _(e,t){if(!t.accounts.every(ne))throw new Error(`Your provider should format account addresses in CAIP-10 format. Your provided accounts: ${t.accounts}`);let[,n]=e.state();return n("accounts",t.accounts),n("network",t.network),n("connected",!0),t}r(_,"p");i(_,"connectAndUpdateStateForMultiNetworks");function B(e){let[,t]=e.state();t("connecting",!0)}r(B,"h");i(B,"intoConnecting");var $e=[["connect",B]],Oe=[["connect",_]],Re={};l(Re,{recommended:()=>je});var je=[...$e],$={};l($,{canEagerConnect:()=>Fe,canSwitchNetwork:()=>Ue,connect:()=>Ye});var Ye=i(()=>new V("connect").and(_).before(B).after(T),"connect"),Fe=i(()=>new V("canEagerConnect"),"canEagerConnect"),Ue=i(()=>new V("canSwitchNetwork"),"canSwitchNetwork");var qe=$.connect().action(async function(e,t,n){if(!n?.derivationPath)throw new Error("Derivation Path can not be empty.");m(n.derivationPath);let a=await b();return{accounts:a.accounts.map(s=>p.AccountId.format({address:s,chainId:{namespace:P,reference:a.chainId}})),network:a.chainId}}).or(g).build(),We=f.disconnect().build(),re=new w("EVM",h).action(qe).action(We).build();var ze=R.connect().action(async function(e,t){if(!t?.derivationPath)throw new Error("Derivation Path can not be empty.");m(t.derivationPath);let n=await A();return n.accounts.map(o=>p.AccountId.format({address:o,chainId:{namespace:O,reference:n.chainId}}))}).or(g).build(),He=f.disconnect().build(),oe=new w("Solana",h).action(ze).action(He).build();var ae=r(()=>new j(h).init(function(e){let[,t]=e.state();v()&&t("installed",!0)}).config("metadata",Y).add("solana",oe).add("evm",re).build(),"buildProvider");var Ft=r(()=>y().version("0.0.0",U()).version("1.0.0",ae()).build(),"versions");export{Ft as versions};
1
+ import{a as u,b as f,c as d,e as U,f as Y,g as w,h as q,i as m,j as z,k as g,m as b,n as A,o as E,r as W}from"./chunk-I25CJMQS.js";import{a as r}from"./chunk-CVKDPNYM.js";var de=Object.defineProperty,y=r((e,t)=>de(e,"name",{value:t,configurable:!0}),"n");function he(e,t){return`${e}$$${t}`}r(he,"t");y(he,"generateStoreId");function me(e,t){if(!t)throw new Error("You should provide a valid semver, e.g 1.0.0.");let n=e.find(([a])=>a===t);if(!n)throw new Error(`You target version hasn't been found. Available versions: ${Object.keys(e).join(", ")}`);return n}r(me,"v");y(me,"pickVersion");function I(){let e=[],t={version:(n,a)=>(e.push([n,a]),t),build:()=>e};return t}r(I,"d");y(I,"defineVersions");function le(e){return I().version("0.0.0",e).build()}r(le,"p");y(le,"legacyProviderImportsToVersionsInterface");import{Networks as P,WalletTypes as fe}from"@rango-dev/wallets-shared";import"rango-types";var pe={type:fe.LEDGER},ve=g,we=r(async({namespaces:e})=>{let t=[],n=e?.find(o=>o.namespace==="Solana"),a=e?.find(o=>o.namespace==="EVM");if(n)if(n.derivationPath){d(n.derivationPath);let o=await E();t.push(o)}else throw new Error("Derivation Path can not be empty.");else if(a)if(a.derivationPath){d(a.derivationPath);let o=await A();t.push(o)}else throw new Error("Derivation Path can not be empty.");else throw new Error(`It appears that you have selected a namespace that is not yet supported by our system. Your namespaces: ${e?.map(o=>o.namespace)}`);return t},"connect");var ge=W,be=r(e=>{let t=[],n=e.find(o=>o.name===P.ETHEREUM);n&&t.push(n);let a=e.find(o=>o.name===P.SOLANA);return a&&t.push(a),{name:"Ledger",img:"https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/ledger/icon.svg",installLink:{DEFAULT:"https://support.ledger.com/hc/en-us/articles/4404389606417-Download-and-install-Ledger-Live?docs=true"},color:"black",supportedChains:t,showOnMobile:!1,needsDerivationPath:{data:[{id:"metamask",label:"Metamask (m/44'/60'/0'/0/index)",namespace:"EVM",generateDerivationPath:o=>`44'/60'/0'/0/${o}`},{id:"ledgerLive",label:"LedgerLive (m/44'/60'/index'/0/0)",namespace:"EVM",generateDerivationPath:o=>`44'/60'/${o}'/0/0`},{id:"legacy",label:"Legacy (m/44'/60'/0'/index)",namespace:"EVM",generateDerivationPath:o=>`44'/60'/0'/${o}`},{id:"(m/44'/501'/index')",label:"(m/44'/501'/index')",namespace:"Solana",generateDerivationPath:o=>`44'/501'/${o}'`},{id:"(m/44'/501'/0'/index)",label:"(m/44'/501'/0'/index)",namespace:"Solana",generateDerivationPath:o=>`44'/501'/0'/${o}`}]},needsNamespace:{selection:"single",data:[{label:"EVM",value:"EVM",id:"ETH",getSupportedChains:o=>o.filter(s=>s.name===P.ETHEREUM)},{label:"Solana",value:"Solana",id:"SOLANA",getSupportedChains:o=>o.filter(s=>s.name===P.SOLANA)}]}}},"getWalletInfo"),H=r(()=>({config:pe,getInstance:ve,connect:we,getSigners:ge,getWalletInfo:be}),"buildLegacyProvider");var G=Object.defineProperty,c=r((e,t)=>G(e,"name",{value:t,configurable:!0}),"r"),K=r((e,t)=>{for(var n in t)G(e,n,{get:t[n],enumerable:!0})},"f"),Ae={};K(Ae,{disconnect:()=>S,recommended:()=>Ee});function S(e){let[,t]=e.state();t("network",null),t("accounts",null),t("connected",!1),t("connecting",!1)}r(S,"s");c(S,"disconnect");var Ee=[["disconnect",S]],p={};K(p,{disconnect:()=>Ie});var ye=class{static{r(this,"n")}static{c(this,"ActionBuilder")}name;#e=new Map;#t=new Map;#r=new Map;#n=new Map;#o;constructor(e){this.name=e}and(e){return this.#e.has(this.name)||this.#e.set(this.name,[]),this.#e.get(this.name)?.push(e),this}or(e){return this.#t.has(this.name)||this.#t.set(this.name,[]),this.#t.get(this.name)?.push(e),this}before(e){return this.#n.has(this.name)||this.#n.set(this.name,[]),this.#n.get(this.name)?.push(e),this}after(e){return this.#r.has(this.name)||this.#r.set(this.name,[]),this.#r.get(this.name)?.push(e),this}action(e){return this.#o=e,this}build(){if(!this.#o)throw new Error("Your action builder should includes an action.");return{actionName:this.name,action:this.#o,before:this.#n,after:this.#r,and:this.#e,or:this.#t}}},Ie=c(()=>new ye("disconnect").action(S),"disconnect");function J(e){if(e instanceof Error)throw e;let t;typeof e=="object"&&e!==null&&"message"in e&&typeof e.message=="string"?t=e.message:typeof e=="string"?t=e:t=String(e);let n=new Error(t);throw typeof e=="object"&&e!==null&&("code"in e&&(n.code=e.code),"data"in e&&(n.data=e.data)),n}r(J,"d");c(J,"parseErrorAndThrowStandardizeError");function Pe(e,t){J(t)}r(Pe,"E");c(Pe,"standardizeAndThrowError");function Se(e){let[,t]=e.state();t("connecting",!1)}r(Se,"g");c(Se,"intoConnectionFinished");function M(e){try{return u.parse(e),!0}catch{return!1}}r(M,"u");c(M,"isValidCaipAddress");function Ce(e,t){if(!t.every(M))throw new Error(`Your provider should format account addresses in CAIP-10 format. Your provided accounts: ${t}`);let[,n]=e.state();return n("accounts",t),n("connected",!0),t}r(Ce,"T");c(Ce,"connectAndUpdateStateForSingleNetwork");function ke(e,t){if(!t.accounts.every(M))throw new Error(`Your provider should format account addresses in CAIP-10 format. Your provided accounts: ${t.accounts}`);let[,n]=e.state();return n("accounts",t.accounts),n("network",t.network),n("connected",!0),t}r(ke,"I");c(ke,"connectAndUpdateStateForMultiNetworks");function Ne(e){let[,t]=e.state();t("connecting",!0)}r(Ne,"x");c(Ne,"intoConnecting");import{evmBlockchains as De}from"rango-types";var X=Object.defineProperty,i=r((e,t)=>X(e,"name",{value:t,configurable:!0}),"t"),h=r((e,t)=>{for(var n in t)X(e,n,{get:t[n],enumerable:!0})},"c"),Le={};h(Le,{canEagerConnect:()=>ne,canSwitchNetwork:()=>re,connect:()=>te,recommended:()=>Be});function Z(e){let[,t]=e.state();t("network",null),t("accounts",null),t("connected",!1),t("connecting",!1)}r(Z,"R");i(Z,"disconnect");var Me=[["disconnect",Z]],xe={};h(xe,{filterAndGetEvmBlockchainNames:()=>B,formatAccountsToCAIP:()=>_,getAccounts:()=>x,isUserRejectionError:()=>ee,suggestNetwork:()=>D,switchNetwork:()=>T,switchOrAddNetwork:()=>V});var C="eip155";var Te=16;async function x(e){let[t,n]=await Promise.all([e.request({method:"eth_requestAccounts"}),e.request({method:"eth_chainId"})]),a=n;return typeof a=="number"&&(a=`0x${Number(n).toString(Te)}`),{accounts:t,chainId:a}}r(x,"b");i(x,"getAccounts");async function D(e,t){return await e.request({method:"wallet_addEthereumChain",params:[t]})}r(D,"F");i(D,"suggestNetwork");async function T(e,t){return await e.request({method:"wallet_switchEthereumChain",params:[{chainId:t}]})}r(T,"K");i(T,"switchNetwork");function B(e){return De(e).map(t=>t.name)}r(B,"A");i(B,"filterAndGetEvmBlockchainNames");async function V(e,t){try{let n=typeof t=="string"?t:t.chainId;await T(e,n)}catch(n){let a=n;if(typeof t!="string"&&(a.code===4902||!a.code)){await D(e,t);return}throw n}}r(V,"C");i(V,"switchOrAddNetwork");var Q=4001;function ee(e){if(typeof e=="object"&&e!==null){let t=e.code,n=e.cause?.code;return t===Q||n===Q}return!1}r(ee,"Q");i(ee,"isUserRejectionError");function _(e,t){return e.map(n=>u.format({address:n,chainId:{namespace:C,reference:t}}))}r(_,"P");i(_,"formatAccountsToCAIP");var Be=[...Me];function te(e,t){return async(n,a)=>{let o=e();if(!o)throw new Error("Do your wallet injected correctly and is evm compatible?");a&&(t?.switchOrAddNetwork?await t.switchOrAddNetwork(o,a):await V(o,a));let s=await x(o);return{accounts:_(s.accounts,s.chainId),network:s.chainId}}}r(te,"Z");i(te,"connect");function ne(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}}}r(ne,"ee");i(ne,"canEagerConnect");function re(){return(e,t)=>{let{network:n,supportedChains:a}=t;return B(a).includes(n)}}r(re,"te");i(re,"canSwitchNetwork");var Ve={};h(Ve,{changeAccountSubscriber:()=>oe,changeChainSubscriber:()=>ae});function oe(e){return k.changeAccountSubscriber(e).build()}r(oe,"re");i(oe,"changeAccountSubscriber");function ae(e){let t;return[n=>{let a=e();if(!a)throw new Error("Trying to subscribe to your EVM wallet, but seems its instance is not available.");let[,o]=n.state();t=i(async s=>{o("network",s)},"eventCallback"),a.on("chainChanged",t)},()=>{let n=e();t&&n&&n.removeListener("chainChanged",t)}]}r(ae,"oe");i(ae,"changeChainSubscriber");var _e={};h(_e,{recommended:()=>Re});function $(e){let[,t]=e.state();t("connecting",!1)}r($,"v");i($,"intoConnectionFinished");var $e=[["connect",$]],Re=[...$e],Oe={};h(Oe,{recommended:()=>Fe});var R=class{static{r(this,"i")}static{i(this,"ActionBuilder")}name;#e=new Map;#t=new Map;#r=new Map;#n=new Map;#o;constructor(e){this.name=e}and(e){return this.#e.has(this.name)||this.#e.set(this.name,[]),this.#e.get(this.name)?.push(e),this}or(e){return this.#t.has(this.name)||this.#t.set(this.name,[]),this.#t.get(this.name)?.push(e),this}before(e){return this.#n.has(this.name)||this.#n.set(this.name,[]),this.#n.get(this.name)?.push(e),this}after(e){return this.#r.has(this.name)||this.#r.set(this.name,[]),this.#r.get(this.name)?.push(e),this}action(e){return this.#o=e,this}build(){if(!this.#o)throw new Error("Your action builder should includes an action.");return{actionName:this.name,action:this.#o,before:this.#n,after:this.#r,and:this.#e,or:this.#t}}};function ie(e){try{return u.parse(e),!0}catch{return!1}}r(ie,"H");i(ie,"isValidCaipAddress");function O(e,t){if(!t.accounts.every(ie))throw new Error(`Your provider should format account addresses in CAIP-10 format. Your provided accounts: ${t.accounts}`);let[,n]=e.state();return n("accounts",t.accounts),n("network",t.network),n("connected",!0),t}r(O,"u");i(O,"connectAndUpdateStateForMultiNetworks");function j(e){let[,t]=e.state();t("connecting",!0)}r(j,"y");i(j,"intoConnecting");var je=[["connect",j]],Fe=[["connect",O]],Ue={};h(Ue,{recommended:()=>Ye});var Ye=[...je],k={};h(k,{canEagerConnect:()=>We,canSwitchNetwork:()=>He,changeAccountSubscriber:()=>Ge,connect:()=>ze});var qe=class{static{r(this,"g")}static{i(this,"ChangeAccountSubscriberBuilder")}#e=null;#t=null;#r=null;#n=null;#o=null;getInstance(e){return this.#e=e,this}format(e){return this.#t=e,this}validateEventPayload(e){return this.#r=e,this}addEventListener(e){return this.#n=e,this}removeEventListener(e){return this.#o=e,this}build(){if(this.#e===null)throw new Error(this.#a("getInstance"));if(this.#t===null)throw new Error(this.#a("format"));if(this.#n===null)throw new Error(this.#a("addEventListener"));if(this.#o===null)throw new Error(this.#a("removeEventListener"));let e=this.#e,t=this.#t,n=this.#n,a=this.#o,o=this.#r,s,v;return[async N=>{let[,L]=N.state(),l=e();if(!l)throw new Error("Trying to subscribe to your wallet, but seems its instance is not available.");s=i(async F=>{if(o&&!o(F)){N.action("disconnect");return}L("accounts",await t(l,F))},"subscriber"),v=n(l,s)},(N,L)=>{v&&typeof v=="function"&&v();let l=e();return a(l,s),L}]}#a(e){return`Required "${e}" operation has not been set for "changeAccountSubscriber"`}},ze=i(()=>new R("connect").and(O).before(j).after($),"connect"),We=i(()=>new R("canEagerConnect"),"canEagerConnect"),He=i(()=>new R("canSwitchNetwork"),"canSwitchNetwork"),Ge=i(e=>new qe().getInstance(e).validateEventPayload(t=>t&&t.length!==0).format(async(t,n)=>{let a=await t.request({method:"eth_chainId"});return n.map(o=>u.format({address:o,chainId:{namespace:C,reference:a}}))}).addEventListener((t,n)=>{t.on("accountsChanged",n)}).removeEventListener((t,n)=>{t.removeListener?.("accountsChanged",n)}),"changeAccountSubscriber");var Ke=k.connect().action(async function(e,t,n){if(!n?.derivationPath)throw new Error("Derivation Path can not be empty.");d(n.derivationPath);let a=await A();return{accounts:a.accounts.map(s=>f.AccountId.format({address:s,chainId:{namespace:C,reference:a.chainId}})),network:a.chainId}}).or(b).build(),Je=p.disconnect().build(),se=new w("EVM",m).action(Ke).action(Je).build();var Qe=Y.connect().action(async function(e,t){if(!t?.derivationPath)throw new Error("Derivation Path can not be empty.");d(t.derivationPath);let n=await E();return n.accounts.map(o=>f.AccountId.format({address:o,chainId:{namespace:U,reference:n.chainId}}))}).or(b).build(),Xe=p.disconnect().build(),ce=new w("Solana",m).action(Qe).action(Xe).build();var ue=r(()=>new q(m).init(function(e){let[,t]=e.state();g()&&t("installed",!0)}).config("metadata",z).add("solana",ce).add("evm",se).build(),"buildProvider");var Kt=r(()=>I().version("0.0.0",H()).version("1.0.0",ue()).build(),"versions");export{Kt as versions};
2
2
  //# sourceMappingURL=mod.js.map
package/dist/mod.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../core/src/utils/mod.ts", "../../core/src/hub/helpers.ts", "../../core/src/utils/versions.ts", "../src/legacy/index.ts", "../../core/src/namespaces/common/actions.ts", "../../core/src/namespaces/common/builders.ts", "../../core/src/hub/store/store.ts", "../../core/src/hub/store/namespaces.ts", "../../core/src/hub/store/providers.ts", "../../core/src/builders/action.ts", "../../core/src/utils/mod.ts", "../../core/src/namespaces/common/utils.ts", "../../core/src/namespaces/common/or.ts", "../../core/src/namespaces/common/after.ts", "../../core/src/namespaces/common/helpers.ts", "../../core/src/namespaces/common/and.ts", "../../core/src/namespaces/common/before.ts", "../../core/src/namespaces/evm/actions.ts", "../../core/src/namespaces/common/actions.ts", "../../core/src/namespaces/evm/constants.ts", "../../core/src/namespaces/evm/utils.ts", "../../core/src/namespaces/evm/after.ts", "../../core/src/namespaces/common/after.ts", "../../core/src/namespaces/evm/and.ts", "../../core/src/hub/store/store.ts", "../../core/src/hub/store/namespaces.ts", "../../core/src/hub/store/providers.ts", "../../core/src/builders/action.ts", "../../core/src/utils/mod.ts", "../../core/src/namespaces/common/helpers.ts", "../../core/src/namespaces/common/and.ts", "../../core/src/namespaces/common/before.ts", "../../core/src/namespaces/evm/before.ts", "../../core/src/namespaces/evm/builders.ts", "../src/namespaces/evm.ts", "../src/namespaces/solana.ts", "../src/provider.ts", "../src/mod.ts"],
4
- "sourcesContent": ["/*\n * It is not a good idea to re-export all of CAIP because if they have a breaking change, we will break as well.\n * It would be better to create an abstraction over them and export our own interface to ensure it is under our control.\n */\nexport * as CAIP from 'caip';\n\nexport { generateStoreId } from '../hub/helpers.js';\nexport * from './versions.js';\n", "/**\n * Note: This only works native async, if we are going to support for old transpilers like Babel.\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isAsync(fn: Function) {\n return fn.constructor.name === 'AsyncFunction';\n}\n\nexport function generateStoreId(providerId: string, namespace: string) {\n return `${providerId}$$${namespace}`;\n}\n", "import type { Provider } from '../hub/mod.js';\nimport type { LegacyProviderInterface } from '../legacy/mod.js';\n\ntype LegacyVersioned = ['0.0.0', LegacyProviderInterface];\ntype HubVersioned = ['1.0.0', Provider];\ntype AvailableVersionedProviders = LegacyVersioned | HubVersioned;\nexport type VersionedProviders = AvailableVersionedProviders[];\nexport type VersionInterface<T extends AvailableVersionedProviders[]> = T[1];\n\ntype SemVer<T extends [string, any]> = T extends [infer U, any] ? U : never;\ntype MatchVersion<T extends VersionedProviders, Version> = Extract<\n T[number],\n [Version, any]\n>;\n\nexport function pickVersion<\n L extends VersionedProviders,\n V extends SemVer<VersionedProviders[number]>\n>(list: L, targetVersion: V): MatchVersion<L, V> {\n if (!targetVersion) {\n throw new Error(`You should provide a valid semver, e.g 1.0.0.`);\n }\n\n const target = list.find(([version]) => version === targetVersion);\n\n if (!target) {\n throw new Error(\n `You target version hasn't been found. Available versions: ${Object.keys(\n list\n ).join(', ')}`\n );\n }\n return target as MatchVersion<L, V>;\n}\n\ninterface DefineVersionsApi {\n version: <T extends SemVer<VersionedProviders[number]>>(\n semver: T,\n value: VersionInterface<MatchVersion<VersionedProviders, T>>\n ) => DefineVersionsApi;\n build: () => VersionedProviders;\n}\n\nexport function defineVersions(): DefineVersionsApi {\n const versions: VersionedProviders = [];\n const api: DefineVersionsApi = {\n version: (semver, value) => {\n versions.push([semver, value]);\n return api;\n },\n build: () => {\n return versions;\n },\n };\n return api;\n}\n\nexport function legacyProviderImportsToVersionsInterface(\n provider: LegacyProviderInterface\n): VersionedProviders {\n return defineVersions().version('0.0.0', provider).build();\n}\n", "import type { LegacyProviderInterface } from '@rango-dev/wallets-core/legacy';\nimport type {\n Connect,\n Disconnect,\n ProviderConnectResult,\n WalletInfo,\n} from '@rango-dev/wallets-shared';\n\nimport { Networks, WalletTypes } from '@rango-dev/wallets-shared';\nimport { type BlockchainMeta, type SignerFactory } from 'rango-types';\n\nimport signer from '../signer.js';\nimport { setDerivationPath } from '../state.js';\nimport {\n getEthereumAccounts,\n ledger as getLedgerInstance,\n getSolanaAccounts,\n transportDisconnect,\n} from '../utils.js';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype InstanceType = any;\n\nexport const config = {\n type: WalletTypes.LEDGER,\n};\n\nexport const getInstance = getLedgerInstance;\nexport const connect: Connect = async ({ namespaces }) => {\n const results: ProviderConnectResult[] = [];\n\n const solanaNamespace = namespaces?.find(\n (namespaceItem) => namespaceItem.namespace === 'Solana'\n );\n const evmNamespace = namespaces?.find(\n (namespaceItem) => namespaceItem.namespace === 'EVM'\n );\n\n if (solanaNamespace) {\n if (solanaNamespace.derivationPath) {\n setDerivationPath(solanaNamespace.derivationPath);\n const accounts = await getSolanaAccounts();\n results.push(accounts);\n } else {\n throw new Error('Derivation Path can not be empty.');\n }\n } else if (evmNamespace) {\n if (evmNamespace.derivationPath) {\n setDerivationPath(evmNamespace.derivationPath);\n const accounts = await getEthereumAccounts();\n results.push(accounts);\n } else {\n throw new Error('Derivation Path can not be empty.');\n }\n } else {\n throw new Error(\n `It appears that you have selected a namespace that is not yet supported by our system. Your namespaces: ${namespaces?.map(\n (namespaceItem) => namespaceItem.namespace\n )}`\n );\n }\n\n return results;\n};\n\nexport const disconnect: Disconnect = async () => {\n void transportDisconnect();\n};\n\nexport const getSigners: (provider: InstanceType) => Promise<SignerFactory> =\n signer;\n\nexport const getWalletInfo: (allBlockChains: BlockchainMeta[]) => WalletInfo = (\n allBlockChains\n) => {\n const supportedChains: BlockchainMeta[] = [];\n\n const ethereumBlockchain = allBlockChains.find(\n (chain) => chain.name === Networks.ETHEREUM\n );\n if (ethereumBlockchain) {\n supportedChains.push(ethereumBlockchain);\n }\n\n const solanaBlockchain = allBlockChains.find(\n (chain) => chain.name === Networks.SOLANA\n );\n if (solanaBlockchain) {\n supportedChains.push(solanaBlockchain);\n }\n\n return {\n name: 'Ledger',\n img: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/ledger/icon.svg',\n installLink: {\n DEFAULT:\n 'https://support.ledger.com/hc/en-us/articles/4404389606417-Download-and-install-Ledger-Live?docs=true',\n },\n color: 'black',\n supportedChains,\n showOnMobile: false,\n needsDerivationPath: {\n data: [\n {\n id: 'metamask',\n label: `Metamask (m/44'/60'/0'/0/index)`,\n namespace: 'EVM',\n generateDerivationPath: (index: string) => `44'/60'/0'/0/${index}`,\n },\n {\n id: 'ledgerLive',\n label: `LedgerLive (m/44'/60'/index'/0/0)`,\n namespace: 'EVM',\n generateDerivationPath: (index: string) => `44'/60'/${index}'/0/0`,\n },\n {\n id: 'legacy',\n label: `Legacy (m/44'/60'/0'/index)`,\n namespace: 'EVM',\n generateDerivationPath: (index: string) => `44'/60'/0'/${index}`,\n },\n {\n id: `(m/44'/501'/index')`,\n label: `(m/44'/501'/index')`,\n namespace: 'Solana',\n generateDerivationPath: (index: string) => `44'/501'/${index}'`,\n },\n {\n id: `(m/44'/501'/0'/index)`,\n label: `(m/44'/501'/0'/index)`,\n namespace: 'Solana',\n generateDerivationPath: (index: string) => `44'/501'/0'/${index}`,\n },\n ],\n },\n\n needsNamespace: {\n selection: 'single',\n data: [\n {\n label: 'EVM',\n value: 'EVM',\n id: 'ETH',\n getSupportedChains: (allBlockchains: BlockchainMeta[]) =>\n allBlockchains.filter((chain) => chain.name === Networks.ETHEREUM),\n },\n {\n label: 'Solana',\n value: 'Solana',\n id: 'SOLANA',\n getSupportedChains: (allBlockchains: BlockchainMeta[]) =>\n allBlockchains.filter((chain) => chain.name === Networks.SOLANA),\n },\n ],\n },\n };\n};\n\nconst buildLegacyProvider: () => LegacyProviderInterface = () => ({\n config,\n getInstance,\n connect,\n getSigners,\n getWalletInfo,\n});\n\nexport { buildLegacyProvider };\n", "import type { Context } from '../../hub/namespaces/mod.js';\n\nexport function disconnect(context: Context): void {\n const [, setState] = context.state();\n setState('network', null);\n setState('accounts', null);\n setState('connected', false);\n setState('connecting', false);\n}\n\nexport const recommended = [['disconnect', disconnect] as const];\n", "import type { AutoImplementedActionsByRecommended } from './types.js';\nimport type { Actions } from '../../hub/namespaces/types.js';\n\nimport { ActionBuilder } from '../../mod.js';\n\nimport { disconnect as disconnectAction } from './actions.js';\n\nexport const disconnect = <\n T extends Actions<T> &\n Record<'disconnect', AutoImplementedActionsByRecommended['disconnect']>\n>() =>\n new ActionBuilder<AutoImplementedActionsByRecommended, 'disconnect'>(\n 'disconnect'\n ).action(disconnectAction) as unknown as ActionBuilder<T, 'disconnect'>;\n", "import type { StoreApi } from 'zustand/vanilla';\n\nimport { createStore as createZustandStore } from 'zustand/vanilla';\n\nimport { extend, type Store } from './extend.js';\nimport { hubStore, type HubStore } from './hub.js';\nimport { namespacesStore, type NamespaceStore } from './namespaces.js';\nimport { providersStore, type ProviderStore } from './providers.js';\n\n/************ State ************/\n\nexport interface State {\n hub: HubStore;\n providers: ProviderStore;\n namespaces: NamespaceStore;\n}\n\nexport type RawStore = StoreApi<State>;\n\nexport const createStore = (): Store => {\n const store = createZustandStore<State>((...api) => {\n return {\n hub: hubStore(...api),\n providers: providersStore(...api),\n namespaces: namespacesStore(...api),\n };\n });\n\n return extend(store);\n};\n", "/************ Namespace ************/\n\nimport type { StateCreator } from 'zustand';\n\nimport { produce } from 'immer';\n\nimport {\n ConsumableEvents,\n type NamespaceConnectedEvent,\n type NamespaceDisconnectedEvent,\n type NamespaceSwitchedAccountEvent,\n type NamespaceSwitchedNetworkEvent,\n} from './events.js';\nimport { namespaceStateSelector, type State } from './mod.js';\n\n// Currently, namespace doesn't has any config.\nexport type NamespaceConfig = object;\n\nexport interface NamespaceData {\n accounts: null | string[];\n network: null | string;\n connected: boolean;\n connecting: boolean;\n}\n\ninterface NamespaceInfo {\n providerId: string;\n namespaceId: string;\n}\n\ninterface NamespaceItem {\n info: NamespaceInfo;\n data: NamespaceData;\n error: unknown;\n}\n\ntype NamespaceState = {\n events: InstanceType<typeof ConsumableEvents>;\n list: Record<string, NamespaceItem>;\n};\n\ninterface NamespaceActions {\n addNamespace: (id: string, config: NamespaceInfo) => void;\n updateStatus: <K extends keyof NamespaceData>(\n id: string,\n key: K,\n value: NamespaceData[K]\n ) => void;\n\n _produceEventsWhenUpdatingStatus: <K extends keyof NamespaceData>(\n namespace: NamespaceItem,\n id: string,\n key: K,\n value: NamespaceData[K]\n ) => void;\n}\ninterface NamespaceSelectors {\n getNamespaceData(storeId: string): NamespaceData;\n}\n\nexport type NamespaceStore = NamespaceState &\n NamespaceActions &\n NamespaceSelectors;\ntype NamespaceStateCreator = StateCreator<State, [], [], NamespaceStore>;\n\nconst namespacesStore: NamespaceStateCreator = (set, get) => ({\n events: new ConsumableEvents(),\n\n list: {},\n addNamespace: (id, info) => {\n const data: NamespaceData = {\n accounts: null,\n network: null,\n connected: false,\n connecting: false,\n };\n\n const item = {\n data,\n error: '',\n info,\n };\n\n set(\n produce((state: State) => {\n state.namespaces.list[id] = item;\n })\n );\n },\n updateStatus: (id, key, value) => {\n const ns = get().namespaces.list[id];\n if (!ns) {\n throw new Error(`No namespace with '${id}' found.`);\n }\n\n get().namespaces._produceEventsWhenUpdatingStatus(ns, id, key, value);\n\n // Updating state\n set(\n produce((state: State) => {\n state.namespaces.list[id].data[key] = value;\n })\n );\n },\n getNamespaceData(storeId) {\n return namespaceStateSelector(get(), storeId);\n },\n\n _produceEventsWhenUpdatingStatus: (namespace, id, key, value) => {\n if (key === 'accounts') {\n // check for both null and empty array\n const isAccountsEmpty =\n Object.is(value, null) || (Array.isArray(value) && value.length === 0);\n\n if (isAccountsEmpty) {\n const currentConnectedStatus = get().namespaces.list[id].data.connected;\n if (currentConnectedStatus) {\n const event: NamespaceDisconnectedEvent = {\n type: 'namespace_disconnected',\n provider: namespace.info.providerId,\n namespace: namespace.info.namespaceId,\n };\n\n get().namespaces.events.push(event);\n }\n // Skip emitting disconnect event, if the `connected` is false\n } else {\n const currentAccounts = get().namespaces.list[id].data.accounts;\n\n if (!currentAccounts) {\n const event: NamespaceConnectedEvent = {\n type: 'namespace_connected',\n provider: namespace.info.providerId,\n namespace: namespace.info.namespaceId,\n accounts: value as string[],\n };\n\n get().namespaces.events.push(event);\n } else {\n const areSameAccounts =\n currentAccounts.sort().toString() ===\n (value as string[]).sort().toString();\n\n if (!areSameAccounts) {\n const event: NamespaceSwitchedAccountEvent = {\n type: 'namespace_account_switched',\n provider: namespace.info.providerId,\n namespace: namespace.info.namespaceId,\n previousAccounts: currentAccounts,\n accounts: value as string[],\n };\n\n get().namespaces.events.push(event);\n }\n }\n }\n } else if (key === 'network') {\n const currentNetwork = get().namespaces.list[id].data.network;\n\n const event: NamespaceSwitchedNetworkEvent = {\n type: 'namespace_network_switched',\n provider: namespace.info.providerId,\n namespace: namespace.info.namespaceId,\n network: value as string,\n previousNetwork: currentNetwork,\n };\n\n get().namespaces.events.push(event);\n }\n },\n});\n\nexport { namespacesStore };\n", "import type { Namespace } from '../../namespaces/common/types.js';\nimport type {\n GenerateDeepLink,\n State as InternalProviderState,\n} from '../provider/mod.js';\nimport type { BlockchainMeta, SignerFactory } from 'rango-types';\nimport type { StateCreator } from 'zustand';\n\nimport { produce } from 'immer';\n\nimport { ConsumableEvents, type ProviderDetectedEvent } from './events.js';\nimport { guessProviderStateSelector, type State } from './mod.js';\n\ntype Browsers = 'firefox' | 'chrome' | 'edge' | 'brave' | 'homepage';\ntype Property<N extends string, V> = { name: N; value: V };\n\ntype NamespacesProperty = Property<\n 'namespaces',\n {\n selection: 'single' | 'multiple';\n data: {\n label: string;\n id: string;\n value: Namespace;\n unsupported?: boolean;\n getSupportedChains: (chains: BlockchainMeta[]) => BlockchainMeta[];\n }[];\n }\n>;\ntype DerivationPathProperty = Property<\n 'derivationPath',\n {\n data: {\n id: string;\n label: string;\n namespace: Namespace;\n generateDerivationPath: (index: string) => string;\n }[];\n }\n>;\ntype DetailsProperty = Property<\n 'details',\n {\n mobileWallet?: boolean;\n showOnMobile?: boolean;\n isContractWallet?: boolean;\n }\n>;\ntype SignersProperty = Property<\n 'signers',\n {\n getSigners: () => Promise<SignerFactory>;\n }\n>;\n\nexport type ProviderMetadata = {\n name: string;\n icon: string;\n extensions: Partial<Record<Browsers, string>>;\n properties?: Array<\n | NamespacesProperty\n | DerivationPathProperty\n | DetailsProperty\n | SignersProperty\n >;\n};\n\nexport interface ProviderConfig {\n metadata: ProviderMetadata;\n deepLink?: GenerateDeepLink;\n}\n\nexport type ProviderInfo = ProviderConfig;\n\ninterface ProviderData {\n installed: boolean;\n}\n\ninterface ProviderItem {\n config: ProviderConfig;\n data: ProviderData;\n error: unknown;\n}\n\ntype ProviderState = {\n events: ConsumableEvents;\n list: Record<string, ProviderItem>;\n};\ninterface ProviderActions {\n addProvider: (id: string, config: ProviderConfig) => void;\n removeProvider: (id: string) => void;\n updateStatus: <K extends keyof ProviderData>(\n id: string,\n key: K,\n value: ProviderData[K]\n ) => void;\n\n _produceEventsWhenUpdatingStatus: <K extends keyof ProviderData>(\n provider: ProviderItem,\n id: string,\n key: K,\n value: ProviderData[K]\n ) => void;\n}\n\ninterface ProviderSelectors {\n /**\n * Provider has a limited state to itself, to be compatible with legacy, we try to produce same object as legacy\n * which includes namespace state as well.\n */\n guessNamespacesState: (id: string) => InternalProviderState;\n}\n\nexport type ProviderStore = ProviderState & ProviderActions & ProviderSelectors;\ntype ProvidersStateCreator = StateCreator<State, [], [], ProviderStore>;\n\nconst providersStore: ProvidersStateCreator = (set, get) => ({\n events: new ConsumableEvents(),\n\n list: {},\n addProvider: (id, config) => {\n const item = {\n data: {\n installed: false,\n },\n error: '',\n config,\n };\n\n set(\n produce((state: State) => {\n state.providers.list[id] = item;\n })\n );\n },\n removeProvider: (id) => {\n set(\n produce((state: State) => {\n delete state.providers.list[id];\n })\n );\n },\n updateStatus: (id, key, value) => {\n const provider = get().providers.list[id];\n if (!provider) {\n throw new Error(`No namespace namespace with '${id}' found.`);\n }\n\n get().providers._produceEventsWhenUpdatingStatus(provider, id, key, value);\n\n set(\n produce((state: State) => {\n state.providers.list[id].data[key] = value;\n })\n );\n },\n guessNamespacesState: (providerId: string): InternalProviderState => {\n return guessProviderStateSelector(get(), providerId);\n },\n\n _produceEventsWhenUpdatingStatus: (_provider, id, key, _value) => {\n if (key === 'installed') {\n const event: ProviderDetectedEvent = {\n type: 'provider_detected',\n provider: id,\n };\n\n get().providers.events.push(event);\n }\n },\n});\n\nexport { providersStore };\n", "import type { Actions, Context, Operators } from '../hub/namespaces/types.js';\nimport type { AnyFunction, FunctionWithContext } from '../types/actions.js';\n\nexport interface ActionByBuilder<T, Context> {\n actionName: keyof T;\n and: Operators<T>;\n or: Operators<T>;\n after: Operators<T>;\n before: Operators<T>;\n action: FunctionWithContext<T[keyof T], Context>;\n}\n\n/*\n * TODO:\n * Currently, to use this builder you will write something like this:\n * new ActionBuilder<EvmActions, 'disconnect'>('disconnect').after(....)\n *\n * I couldn't figure it out to be able typescript infer the constructor value as key of actions.\n * Ideal usage:\n * new ActionBuilder<EvmActions>('disconnect').after(....)\n *\n */\nexport class ActionBuilder<T extends Actions<T>, K extends keyof T> {\n readonly name: K;\n #and: Operators<T> = new Map();\n #or: Operators<T> = new Map();\n #after: Operators<T> = new Map();\n #before: Operators<T> = new Map();\n #action: FunctionWithContext<T[keyof T], Context<T>> | undefined;\n\n constructor(name: K) {\n this.name = name;\n }\n\n public and(action: FunctionWithContext<AnyFunction, Context<T>>) {\n if (!this.#and.has(this.name)) {\n this.#and.set(this.name, []);\n }\n this.#and.get(this.name)?.push(action);\n return this;\n }\n\n public or(action: FunctionWithContext<AnyFunction, Context<T>>) {\n if (!this.#or.has(this.name)) {\n this.#or.set(this.name, []);\n }\n this.#or.get(this.name)?.push(action);\n return this;\n }\n\n public before(action: FunctionWithContext<AnyFunction, Context<T>>) {\n if (!this.#before.has(this.name)) {\n this.#before.set(this.name, []);\n }\n this.#before.get(this.name)?.push(action);\n return this;\n }\n\n public after(action: FunctionWithContext<AnyFunction, Context<T>>) {\n if (!this.#after.has(this.name)) {\n this.#after.set(this.name, []);\n }\n this.#after.get(this.name)?.push(action);\n return this;\n }\n\n public action(action: FunctionWithContext<T[keyof T], Context<T>>) {\n this.#action = action;\n return this;\n }\n\n public build(): ActionByBuilder<T, Context<T>> {\n if (!this.#action) {\n throw new Error('Your action builder should includes an action.');\n }\n\n return {\n actionName: this.name,\n action: this.#action,\n before: this.#before,\n after: this.#after,\n and: this.#and,\n or: this.#or,\n };\n }\n}\n", "/*\n * It is not a good idea to re-export all of CAIP because if they have a breaking change, we will break as well.\n * It would be better to create an abstraction over them and export our own interface to ensure it is under our control.\n */\nexport * as CAIP from 'caip';\n\nexport { generateStoreId } from '../hub/helpers.js';\nexport * from './versions.js';\n", "/**\n * Standardizes an unknown error into an Error object and throws it.\n * If the input is already an Error, it's thrown directly.\n * Otherwise, a new Error is created with the input's message or string representation.\n *\n * @param e - The unknown error object.\n * @throws {Error} - The standardized Error object.\n */\nexport function parseErrorAndThrowStandardizeError(e: unknown): never {\n if (e instanceof Error) {\n throw e;\n }\n\n let errorMessage: string;\n if (\n typeof e === 'object' &&\n e !== null &&\n 'message' in e &&\n typeof e.message === 'string'\n ) {\n errorMessage = e.message;\n } else if (typeof e === 'string') {\n errorMessage = e;\n } else {\n errorMessage = String(e);\n }\n\n const err = new Error(errorMessage) as Error & {\n code?: unknown;\n data?: unknown;\n };\n\n if (typeof e === 'object' && e !== null) {\n if ('code' in e) {\n err.code = e.code;\n }\n if ('data' in e) {\n err.data = e.data;\n }\n }\n\n throw err;\n}\n", "import type { Context } from '../../hub/namespaces/mod.js';\n\nimport { parseErrorAndThrowStandardizeError } from './utils.js';\n\n/**\n * Standardizes an unknown error into an Error object and throws it.\n * If the input is already an Error, it's thrown directly.\n * Otherwise, a new Error is created with the input's message or string representation.\n * Note: The parseErrorAndThrowStandardizeError function is defined as a separate function, so that it can be used independently.\n *\n * @param _context - The context.\n * @param e - The unknown error object.\n * @throws {Error} - The standardized Error object.\n */\nexport function standardizeAndThrowError(_context: Context, e: unknown): never {\n parseErrorAndThrowStandardizeError(e);\n}\n", "import type { Context } from '../../hub/namespaces/mod.js';\n\nexport function intoConnectionFinished(context: Context) {\n const [, setState] = context.state();\n setState('connecting', false);\n}\n\nexport const recommended = [['connect', intoConnectionFinished] as const];\n", "import { AccountId } from 'caip';\n\nexport function isValidCaipAddress(address: string): boolean {\n try {\n AccountId.parse(address);\n return true;\n } catch {\n return false;\n }\n}\n", "import type {\n Accounts,\n AccountsWithActiveChain,\n} from './../../types/accounts.js';\nimport type { Context } from '../../hub/namespaces/mod.js';\n\nimport { isValidCaipAddress } from './helpers.js';\n\nexport function connectAndUpdateStateForSingleNetwork(\n context: Context,\n accounts: Accounts\n) {\n if (!accounts.every(isValidCaipAddress)) {\n throw new Error(\n `Your provider should format account addresses in CAIP-10 format. Your provided accounts: ${accounts}`\n );\n }\n\n const [, setState] = context.state();\n setState('accounts', accounts);\n setState('connected', true);\n return accounts;\n}\n\nexport function connectAndUpdateStateForMultiNetworks(\n context: Context,\n accounts: AccountsWithActiveChain\n) {\n if (!accounts.accounts.every(isValidCaipAddress)) {\n throw new Error(\n `Your provider should format account addresses in CAIP-10 format. Your provided accounts: ${accounts.accounts}`\n );\n }\n\n const [, setState] = context.state();\n setState('accounts', accounts.accounts);\n setState('network', accounts.network);\n setState('connected', true);\n return accounts;\n}\n\nexport const recommended = [];\n", "import type { Context } from '../../hub/namespaces/mod.js';\n\nexport function intoConnecting(context: Context) {\n const [, setState] = context.state();\n setState('connecting', true);\n}\n\n// Please consider if you are going to add something here, make sure it works on all namespaces.\nexport const recommended = [['connect', intoConnecting] as const];\n", "import type { EIP1193EventMap } from './eip1193.js';\nimport type { ConnectOptions, EvmActions, ProviderAPI } from './types.js';\nimport type { Context, Subscriber } from '../../hub/namespaces/mod.js';\nimport type {\n CanEagerConnect,\n SubscriberCleanUp,\n} from '../../hub/namespaces/types.js';\nimport type { CaipAccount } from '../../types/accounts.js';\nimport type { FunctionWithContext } from '../../types/actions.js';\n\nimport { AccountId } from 'caip';\n\nimport { recommended as commonRecommended } from '../common/actions.js';\n\nimport { CAIP_NAMESPACE } from './constants.js';\nimport {\n filterAndGetEvmBlockchainNames,\n getAccounts,\n switchOrAddNetwork,\n} from './utils.js';\n\nexport const recommended = [...commonRecommended];\nconst CHAIN_ID_RADIX = 16;\nexport function connect(\n instance: () => ProviderAPI,\n options?: ConnectOptions\n): FunctionWithContext<EvmActions['connect'], Context> {\n return async (_context, 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 const result = await getAccounts(evmInstance);\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 chainId = result.chainId;\n if (typeof chainId === 'number') {\n chainId = `0x${Number(chainId).toString(CHAIN_ID_RADIX)}`;\n }\n\n const formatAccounts = result.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 return {\n accounts: formatAccounts,\n network: chainId,\n };\n };\n}\n\nexport function changeAccountSubscriber(\n instance: () => ProviderAPI\n): [Subscriber<EvmActions>, SubscriberCleanUp<EvmActions>] {\n let eventCallback: EIP1193EventMap['accountsChanged'];\n\n // subscriber can be passed to `or`, it will get the error and should rethrow error to pass the error to next `or` or throw error.\n return [\n (context, err) => {\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 (accounts) => {\n /*\n * In Phantom, when user is switching to an account which is not connected to dApp yet, it returns a null.\n * So null means we don't have access to account and we need to disconnect and let the user connect the account.\n *\n * This assumption may not work for other wallets, if that the case, we need to consider a new approach.\n */\n if (!accounts || accounts.length === 0) {\n context.action('disconnect');\n return;\n }\n\n const chainId = await evmInstance.request({ method: 'eth_chainId' });\n const formatAccounts = accounts.map((account) =>\n AccountId.format({\n address: account,\n chainId: {\n namespace: CAIP_NAMESPACE,\n reference: chainId,\n },\n })\n );\n\n setState('accounts', formatAccounts);\n };\n evmInstance.on('accountsChanged', eventCallback);\n\n if (err instanceof Error) {\n throw err;\n }\n },\n (_, err) => {\n const evmInstance = instance();\n\n if (eventCallback && evmInstance) {\n evmInstance.removeListener?.('accountsChanged', eventCallback);\n }\n\n return err;\n },\n ];\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\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", "import type { Context } from '../../hub/namespaces/mod.js';\n\nexport function disconnect(context: Context): void {\n const [, setState] = context.state();\n setState('network', null);\n setState('accounts', null);\n setState('connected', false);\n setState('connecting', false);\n}\n\nexport const recommended = [['disconnect', disconnect] as const];\n", "export const CAIP_NAMESPACE = 'eip155';\nexport const CAIP_ETHEREUM_CHAIN_ID = '1';\n", "import type { Chain, ChainId, ProviderAPI } from './types.js';\n\nimport { type BlockchainMeta, evmBlockchains } from 'rango-types';\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 return {\n accounts,\n chainId,\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", "import { recommended as commonRecommended } from '../common/after.js';\n\nexport const recommended = [...commonRecommended];\n", "import type { Context } from '../../hub/namespaces/mod.js';\n\nexport function intoConnectionFinished(context: Context) {\n const [, setState] = context.state();\n setState('connecting', false);\n}\n\nexport const recommended = [['connect', intoConnectionFinished] as const];\n", "import { connectAndUpdateStateForMultiNetworks } from '../common/mod.js';\n\nexport const recommended = [\n ['connect', connectAndUpdateStateForMultiNetworks] as const,\n];\n", "import type { StoreApi } from 'zustand/vanilla';\n\nimport { createStore as createZustandStore } from 'zustand/vanilla';\n\nimport { extend, type Store } from './extend.js';\nimport { hubStore, type HubStore } from './hub.js';\nimport { namespacesStore, type NamespaceStore } from './namespaces.js';\nimport { providersStore, type ProviderStore } from './providers.js';\n\n/************ State ************/\n\nexport interface State {\n hub: HubStore;\n providers: ProviderStore;\n namespaces: NamespaceStore;\n}\n\nexport type RawStore = StoreApi<State>;\n\nexport const createStore = (): Store => {\n const store = createZustandStore<State>((...api) => {\n return {\n hub: hubStore(...api),\n providers: providersStore(...api),\n namespaces: namespacesStore(...api),\n };\n });\n\n return extend(store);\n};\n", "/************ Namespace ************/\n\nimport type { StateCreator } from 'zustand';\n\nimport { produce } from 'immer';\n\nimport {\n ConsumableEvents,\n type NamespaceConnectedEvent,\n type NamespaceDisconnectedEvent,\n type NamespaceSwitchedAccountEvent,\n type NamespaceSwitchedNetworkEvent,\n} from './events.js';\nimport { namespaceStateSelector, type State } from './mod.js';\n\n// Currently, namespace doesn't has any config.\nexport type NamespaceConfig = object;\n\nexport interface NamespaceData {\n accounts: null | string[];\n network: null | string;\n connected: boolean;\n connecting: boolean;\n}\n\ninterface NamespaceInfo {\n providerId: string;\n namespaceId: string;\n}\n\ninterface NamespaceItem {\n info: NamespaceInfo;\n data: NamespaceData;\n error: unknown;\n}\n\ntype NamespaceState = {\n events: InstanceType<typeof ConsumableEvents>;\n list: Record<string, NamespaceItem>;\n};\n\ninterface NamespaceActions {\n addNamespace: (id: string, config: NamespaceInfo) => void;\n updateStatus: <K extends keyof NamespaceData>(\n id: string,\n key: K,\n value: NamespaceData[K]\n ) => void;\n\n _produceEventsWhenUpdatingStatus: <K extends keyof NamespaceData>(\n namespace: NamespaceItem,\n id: string,\n key: K,\n value: NamespaceData[K]\n ) => void;\n}\ninterface NamespaceSelectors {\n getNamespaceData(storeId: string): NamespaceData;\n}\n\nexport type NamespaceStore = NamespaceState &\n NamespaceActions &\n NamespaceSelectors;\ntype NamespaceStateCreator = StateCreator<State, [], [], NamespaceStore>;\n\nconst namespacesStore: NamespaceStateCreator = (set, get) => ({\n events: new ConsumableEvents(),\n\n list: {},\n addNamespace: (id, info) => {\n const data: NamespaceData = {\n accounts: null,\n network: null,\n connected: false,\n connecting: false,\n };\n\n const item = {\n data,\n error: '',\n info,\n };\n\n set(\n produce((state: State) => {\n state.namespaces.list[id] = item;\n })\n );\n },\n updateStatus: (id, key, value) => {\n const ns = get().namespaces.list[id];\n if (!ns) {\n throw new Error(`No namespace with '${id}' found.`);\n }\n\n get().namespaces._produceEventsWhenUpdatingStatus(ns, id, key, value);\n\n // Updating state\n set(\n produce((state: State) => {\n state.namespaces.list[id].data[key] = value;\n })\n );\n },\n getNamespaceData(storeId) {\n return namespaceStateSelector(get(), storeId);\n },\n\n _produceEventsWhenUpdatingStatus: (namespace, id, key, value) => {\n if (key === 'accounts') {\n // check for both null and empty array\n const isAccountsEmpty =\n Object.is(value, null) || (Array.isArray(value) && value.length === 0);\n\n if (isAccountsEmpty) {\n const currentConnectedStatus = get().namespaces.list[id].data.connected;\n if (currentConnectedStatus) {\n const event: NamespaceDisconnectedEvent = {\n type: 'namespace_disconnected',\n provider: namespace.info.providerId,\n namespace: namespace.info.namespaceId,\n };\n\n get().namespaces.events.push(event);\n }\n // Skip emitting disconnect event, if the `connected` is false\n } else {\n const currentAccounts = get().namespaces.list[id].data.accounts;\n\n if (!currentAccounts) {\n const event: NamespaceConnectedEvent = {\n type: 'namespace_connected',\n provider: namespace.info.providerId,\n namespace: namespace.info.namespaceId,\n accounts: value as string[],\n };\n\n get().namespaces.events.push(event);\n } else {\n const areSameAccounts =\n currentAccounts.sort().toString() ===\n (value as string[]).sort().toString();\n\n if (!areSameAccounts) {\n const event: NamespaceSwitchedAccountEvent = {\n type: 'namespace_account_switched',\n provider: namespace.info.providerId,\n namespace: namespace.info.namespaceId,\n previousAccounts: currentAccounts,\n accounts: value as string[],\n };\n\n get().namespaces.events.push(event);\n }\n }\n }\n } else if (key === 'network') {\n const currentNetwork = get().namespaces.list[id].data.network;\n\n const event: NamespaceSwitchedNetworkEvent = {\n type: 'namespace_network_switched',\n provider: namespace.info.providerId,\n namespace: namespace.info.namespaceId,\n network: value as string,\n previousNetwork: currentNetwork,\n };\n\n get().namespaces.events.push(event);\n }\n },\n});\n\nexport { namespacesStore };\n", "import type { Namespace } from '../../namespaces/common/types.js';\nimport type {\n GenerateDeepLink,\n State as InternalProviderState,\n} from '../provider/mod.js';\nimport type { BlockchainMeta, SignerFactory } from 'rango-types';\nimport type { StateCreator } from 'zustand';\n\nimport { produce } from 'immer';\n\nimport { ConsumableEvents, type ProviderDetectedEvent } from './events.js';\nimport { guessProviderStateSelector, type State } from './mod.js';\n\ntype Browsers = 'firefox' | 'chrome' | 'edge' | 'brave' | 'homepage';\ntype Property<N extends string, V> = { name: N; value: V };\n\ntype NamespacesProperty = Property<\n 'namespaces',\n {\n selection: 'single' | 'multiple';\n data: {\n label: string;\n id: string;\n value: Namespace;\n unsupported?: boolean;\n getSupportedChains: (chains: BlockchainMeta[]) => BlockchainMeta[];\n }[];\n }\n>;\ntype DerivationPathProperty = Property<\n 'derivationPath',\n {\n data: {\n id: string;\n label: string;\n namespace: Namespace;\n generateDerivationPath: (index: string) => string;\n }[];\n }\n>;\ntype DetailsProperty = Property<\n 'details',\n {\n mobileWallet?: boolean;\n showOnMobile?: boolean;\n isContractWallet?: boolean;\n }\n>;\ntype SignersProperty = Property<\n 'signers',\n {\n getSigners: () => Promise<SignerFactory>;\n }\n>;\n\nexport type ProviderMetadata = {\n name: string;\n icon: string;\n extensions: Partial<Record<Browsers, string>>;\n properties?: Array<\n | NamespacesProperty\n | DerivationPathProperty\n | DetailsProperty\n | SignersProperty\n >;\n};\n\nexport interface ProviderConfig {\n metadata: ProviderMetadata;\n deepLink?: GenerateDeepLink;\n}\n\nexport type ProviderInfo = ProviderConfig;\n\ninterface ProviderData {\n installed: boolean;\n}\n\ninterface ProviderItem {\n config: ProviderConfig;\n data: ProviderData;\n error: unknown;\n}\n\ntype ProviderState = {\n events: ConsumableEvents;\n list: Record<string, ProviderItem>;\n};\ninterface ProviderActions {\n addProvider: (id: string, config: ProviderConfig) => void;\n removeProvider: (id: string) => void;\n updateStatus: <K extends keyof ProviderData>(\n id: string,\n key: K,\n value: ProviderData[K]\n ) => void;\n\n _produceEventsWhenUpdatingStatus: <K extends keyof ProviderData>(\n provider: ProviderItem,\n id: string,\n key: K,\n value: ProviderData[K]\n ) => void;\n}\n\ninterface ProviderSelectors {\n /**\n * Provider has a limited state to itself, to be compatible with legacy, we try to produce same object as legacy\n * which includes namespace state as well.\n */\n guessNamespacesState: (id: string) => InternalProviderState;\n}\n\nexport type ProviderStore = ProviderState & ProviderActions & ProviderSelectors;\ntype ProvidersStateCreator = StateCreator<State, [], [], ProviderStore>;\n\nconst providersStore: ProvidersStateCreator = (set, get) => ({\n events: new ConsumableEvents(),\n\n list: {},\n addProvider: (id, config) => {\n const item = {\n data: {\n installed: false,\n },\n error: '',\n config,\n };\n\n set(\n produce((state: State) => {\n state.providers.list[id] = item;\n })\n );\n },\n removeProvider: (id) => {\n set(\n produce((state: State) => {\n delete state.providers.list[id];\n })\n );\n },\n updateStatus: (id, key, value) => {\n const provider = get().providers.list[id];\n if (!provider) {\n throw new Error(`No namespace namespace with '${id}' found.`);\n }\n\n get().providers._produceEventsWhenUpdatingStatus(provider, id, key, value);\n\n set(\n produce((state: State) => {\n state.providers.list[id].data[key] = value;\n })\n );\n },\n guessNamespacesState: (providerId: string): InternalProviderState => {\n return guessProviderStateSelector(get(), providerId);\n },\n\n _produceEventsWhenUpdatingStatus: (_provider, id, key, _value) => {\n if (key === 'installed') {\n const event: ProviderDetectedEvent = {\n type: 'provider_detected',\n provider: id,\n };\n\n get().providers.events.push(event);\n }\n },\n});\n\nexport { providersStore };\n", "import type { Actions, Context, Operators } from '../hub/namespaces/types.js';\nimport type { AnyFunction, FunctionWithContext } from '../types/actions.js';\n\nexport interface ActionByBuilder<T, Context> {\n actionName: keyof T;\n and: Operators<T>;\n or: Operators<T>;\n after: Operators<T>;\n before: Operators<T>;\n action: FunctionWithContext<T[keyof T], Context>;\n}\n\n/*\n * TODO:\n * Currently, to use this builder you will write something like this:\n * new ActionBuilder<EvmActions, 'disconnect'>('disconnect').after(....)\n *\n * I couldn't figure it out to be able typescript infer the constructor value as key of actions.\n * Ideal usage:\n * new ActionBuilder<EvmActions>('disconnect').after(....)\n *\n */\nexport class ActionBuilder<T extends Actions<T>, K extends keyof T> {\n readonly name: K;\n #and: Operators<T> = new Map();\n #or: Operators<T> = new Map();\n #after: Operators<T> = new Map();\n #before: Operators<T> = new Map();\n #action: FunctionWithContext<T[keyof T], Context<T>> | undefined;\n\n constructor(name: K) {\n this.name = name;\n }\n\n public and(action: FunctionWithContext<AnyFunction, Context<T>>) {\n if (!this.#and.has(this.name)) {\n this.#and.set(this.name, []);\n }\n this.#and.get(this.name)?.push(action);\n return this;\n }\n\n public or(action: FunctionWithContext<AnyFunction, Context<T>>) {\n if (!this.#or.has(this.name)) {\n this.#or.set(this.name, []);\n }\n this.#or.get(this.name)?.push(action);\n return this;\n }\n\n public before(action: FunctionWithContext<AnyFunction, Context<T>>) {\n if (!this.#before.has(this.name)) {\n this.#before.set(this.name, []);\n }\n this.#before.get(this.name)?.push(action);\n return this;\n }\n\n public after(action: FunctionWithContext<AnyFunction, Context<T>>) {\n if (!this.#after.has(this.name)) {\n this.#after.set(this.name, []);\n }\n this.#after.get(this.name)?.push(action);\n return this;\n }\n\n public action(action: FunctionWithContext<T[keyof T], Context<T>>) {\n this.#action = action;\n return this;\n }\n\n public build(): ActionByBuilder<T, Context<T>> {\n if (!this.#action) {\n throw new Error('Your action builder should includes an action.');\n }\n\n return {\n actionName: this.name,\n action: this.#action,\n before: this.#before,\n after: this.#after,\n and: this.#and,\n or: this.#or,\n };\n }\n}\n", "/*\n * It is not a good idea to re-export all of CAIP because if they have a breaking change, we will break as well.\n * It would be better to create an abstraction over them and export our own interface to ensure it is under our control.\n */\nexport * as CAIP from 'caip';\n\nexport { generateStoreId } from '../hub/helpers.js';\nexport * from './versions.js';\n", "import { AccountId } from 'caip';\n\nexport function isValidCaipAddress(address: string): boolean {\n try {\n AccountId.parse(address);\n return true;\n } catch {\n return false;\n }\n}\n", "import type {\n Accounts,\n AccountsWithActiveChain,\n} from './../../types/accounts.js';\nimport type { Context } from '../../hub/namespaces/mod.js';\n\nimport { isValidCaipAddress } from './helpers.js';\n\nexport function connectAndUpdateStateForSingleNetwork(\n context: Context,\n accounts: Accounts\n) {\n if (!accounts.every(isValidCaipAddress)) {\n throw new Error(\n `Your provider should format account addresses in CAIP-10 format. Your provided accounts: ${accounts}`\n );\n }\n\n const [, setState] = context.state();\n setState('accounts', accounts);\n setState('connected', true);\n return accounts;\n}\n\nexport function connectAndUpdateStateForMultiNetworks(\n context: Context,\n accounts: AccountsWithActiveChain\n) {\n if (!accounts.accounts.every(isValidCaipAddress)) {\n throw new Error(\n `Your provider should format account addresses in CAIP-10 format. Your provided accounts: ${accounts.accounts}`\n );\n }\n\n const [, setState] = context.state();\n setState('accounts', accounts.accounts);\n setState('network', accounts.network);\n setState('connected', true);\n return accounts;\n}\n\nexport const recommended = [];\n", "import type { Context } from '../../hub/namespaces/mod.js';\n\nexport function intoConnecting(context: Context) {\n const [, setState] = context.state();\n setState('connecting', true);\n}\n\n// Please consider if you are going to add something here, make sure it works on all namespaces.\nexport const recommended = [['connect', intoConnecting] as const];\n", "import { beforeRecommended } from '../common/mod.js';\n\nexport const recommended = [...beforeRecommended];\n", "import type { EvmActions } from './types.js';\n\nimport { ActionBuilder } from '../../mod.js';\nimport {\n connectAndUpdateStateForMultiNetworks,\n intoConnecting,\n intoConnectionFinished,\n} from '../common/mod.js';\n\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", "import type { EvmActions } from '@rango-dev/wallets-core/namespaces/evm';\n\nimport { NamespaceBuilder } from '@rango-dev/wallets-core';\nimport {\n type CaipAccount,\n builders as commonBuilders,\n} from '@rango-dev/wallets-core/namespaces/common';\nimport {\n builders,\n CAIP_NAMESPACE,\n} from '@rango-dev/wallets-core/namespaces/evm';\nimport { CAIP } from '@rango-dev/wallets-core/utils';\n\nimport { WALLET_ID } from '../constants.js';\nimport { setDerivationPath } from '../state.js';\nimport {\n getEthereumAccounts,\n standardizeAndThrowLedgerError,\n} from '../utils.js';\n\nconst connect = builders\n .connect()\n .action(async function (_context, _chain, options) {\n if (!options?.derivationPath) {\n throw new Error('Derivation Path can not be empty.');\n }\n\n setDerivationPath(options.derivationPath);\n\n const result = await getEthereumAccounts();\n\n const formatAccounts = result.accounts.map(\n (account) =>\n CAIP.AccountId.format({\n address: account,\n chainId: {\n namespace: CAIP_NAMESPACE,\n reference: result.chainId,\n },\n }) as CaipAccount\n );\n\n return {\n accounts: formatAccounts,\n network: result.chainId,\n };\n })\n .or(standardizeAndThrowLedgerError)\n .build();\n\nconst disconnect = commonBuilders.disconnect<EvmActions>().build();\n\nconst evm = new NamespaceBuilder<EvmActions>('EVM', WALLET_ID)\n .action(connect)\n .action(disconnect)\n .build();\n\nexport { evm };\n", "import type { CaipAccount } from '@rango-dev/wallets-core/namespaces/common';\nimport type { SolanaActions } from '@rango-dev/wallets-core/namespaces/solana';\n\nimport { NamespaceBuilder } from '@rango-dev/wallets-core';\nimport { builders as commonBuilders } from '@rango-dev/wallets-core/namespaces/common';\nimport {\n builders,\n CAIP_NAMESPACE,\n} from '@rango-dev/wallets-core/namespaces/solana';\nimport { CAIP } from '@rango-dev/wallets-core/utils';\n\nimport { WALLET_ID } from '../constants.js';\nimport { setDerivationPath } from '../state.js';\nimport { getSolanaAccounts, standardizeAndThrowLedgerError } from '../utils.js';\n\nconst connect = builders\n .connect()\n .action(async function (_context, options) {\n if (!options?.derivationPath) {\n throw new Error('Derivation Path can not be empty.');\n }\n\n setDerivationPath(options.derivationPath);\n\n const result = await getSolanaAccounts();\n\n const formatAccounts = result.accounts.map(\n (account) =>\n CAIP.AccountId.format({\n address: account,\n chainId: {\n namespace: CAIP_NAMESPACE,\n reference: result.chainId,\n },\n }) as CaipAccount\n );\n\n return formatAccounts;\n })\n .or(standardizeAndThrowLedgerError)\n .build();\n\nconst disconnect = commonBuilders.disconnect<SolanaActions>().build();\n\nconst solana = new NamespaceBuilder<SolanaActions>('Solana', WALLET_ID)\n .action(connect)\n .action(disconnect)\n .build();\n\nexport { solana };\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 { ledger as ledgerInstance } from './utils.js';\n\nconst buildProvider = () =>\n new ProviderBuilder(WALLET_ID)\n .init(function (context) {\n const [, setState] = context.state();\n\n if (ledgerInstance()) {\n setState('installed', true);\n }\n })\n .config('metadata', metadata)\n .add('solana', solana)\n .add('evm', evm)\n .build();\n\nexport { buildProvider };\n", "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"],
5
- "mappings": "+PCQO,SAASA,GAAgBC,EAAoBC,EAAmB,CACrE,MAAO,GAAGD,CAAU,KAAKC,CAAS,EACpC,CAFgBF,EAAAA,GAAAA,KAAAG,EAAAH,GAAA,iBAAA,ECOT,SAASI,GAGdC,EAASC,EAAsC,CAC/C,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,+CAA+C,EAGjE,IAAMC,EAASF,EAAK,KAAK,CAAC,CAACG,CAAO,IAAMA,IAAYF,CAAa,EAEjE,GAAI,CAACC,EACH,MAAM,IAAI,MACR,6DAA6D,OAAO,KAClEF,CACF,EAAE,KAAK,IAAI,CAAC,EACd,EAEF,OAAOE,CACT,CAlBgBH,EAAAA,GAAAA,KAAAD,EAAAC,GAAA,aAAA,EA4BT,SAASK,GAAoC,CAClD,IAAMC,EAA+B,CAAC,EAChCC,EAAyB,CAC7B,QAAS,CAACC,EAAQC,KAChBH,EAAS,KAAK,CAACE,EAAQC,CAAK,CAAC,EACtBF,GAET,MAAO,IACED,CAEX,EACA,OAAOC,CACT,CAZgBF,EAAAA,EAAAA,KAAAN,EAAAM,EAAA,gBAAA,EAcT,SAASK,GACdC,EACoB,CACpB,OAAON,EAAe,EAAE,QAAQ,QAASM,CAAQ,EAAE,MAAM,CAC3D,CAJgBD,EAAAA,GAAAA,KAAAX,EAAAW,GAAA,0CAAA,ECjDhB,OAAS,YAAAE,EAAU,eAAAC,OAAmB,4BACtC,MAAwD,cAcjD,IAAMC,GAAS,CACpB,KAAMC,GAAY,MACpB,EAEaC,GAAcC,EACdC,GAAmBC,EAAA,MAAO,CAAE,WAAAC,CAAW,IAAM,CACxD,IAAMC,EAAmC,CAAC,EAEpCC,EAAkBF,GAAY,KACjCG,GAAkBA,EAAc,YAAc,QACjD,EACMC,EAAeJ,GAAY,KAC9BG,GAAkBA,EAAc,YAAc,KACjD,EAEA,GAAID,EACF,GAAIA,EAAgB,eAAgB,CAClCG,EAAkBH,EAAgB,cAAc,EAChD,IAAMI,EAAW,MAAMC,EAAkB,EACzCN,EAAQ,KAAKK,CAAQ,CACvB,KACE,OAAM,IAAI,MAAM,mCAAmC,UAE5CF,EACT,GAAIA,EAAa,eAAgB,CAC/BC,EAAkBD,EAAa,cAAc,EAC7C,IAAME,EAAW,MAAME,EAAoB,EAC3CP,EAAQ,KAAKK,CAAQ,CACvB,KACE,OAAM,IAAI,MAAM,mCAAmC,MAGrD,OAAM,IAAI,MACR,2GAA2GN,GAAY,IACpHG,GAAkBA,EAAc,SACnC,CAAC,EACH,EAGF,OAAOF,CACT,EAnCgC,WAyCzB,IAAMQ,GACXA,EAEWC,GAAkEC,EAC7EC,GACG,CACH,IAAMC,EAAoC,CAAC,EAErCC,EAAqBF,EAAe,KACvCG,GAAUA,EAAM,OAASC,EAAS,QACrC,EACIF,GACFD,EAAgB,KAAKC,CAAkB,EAGzC,IAAMG,EAAmBL,EAAe,KACrCG,GAAUA,EAAM,OAASC,EAAS,MACrC,EACA,OAAIC,GACFJ,EAAgB,KAAKI,CAAgB,EAGhC,CACL,KAAM,SACN,IAAK,uFACL,YAAa,CACX,QACE,uGACJ,EACA,MAAO,QACP,gBAAAJ,EACA,aAAc,GACd,oBAAqB,CACnB,KAAM,CACJ,CACE,GAAI,WACJ,MAAO,kCACP,UAAW,MACX,uBAAyBK,GAAkB,gBAAgBA,CAAK,EAClE,EACA,CACE,GAAI,aACJ,MAAO,oCACP,UAAW,MACX,uBAAyBA,GAAkB,WAAWA,CAAK,OAC7D,EACA,CACE,GAAI,SACJ,MAAO,8BACP,UAAW,MACX,uBAAyBA,GAAkB,cAAcA,CAAK,EAChE,EACA,CACE,GAAI,sBACJ,MAAO,sBACP,UAAW,SACX,uBAAyBA,GAAkB,YAAYA,CAAK,GAC9D,EACA,CACE,GAAI,wBACJ,MAAO,wBACP,UAAW,SACX,uBAAyBA,GAAkB,eAAeA,CAAK,EACjE,CACF,CACF,EAEA,eAAgB,CACd,UAAW,SACX,KAAM,CACJ,CACE,MAAO,MACP,MAAO,MACP,GAAI,MACJ,mBAAqBC,GACnBA,EAAe,OAAQJ,GAAUA,EAAM,OAASC,EAAS,QAAQ,CACrE,EACA,CACE,MAAO,SACP,MAAO,SACP,GAAI,SACJ,mBAAqBG,GACnBA,EAAe,OAAQJ,GAAUA,EAAM,OAASC,EAAS,MAAM,CACnE,CACF,CACF,CACF,CACF,EApF+E,iBAsFzEI,EAAqDT,EAAA,KAAO,CAChE,OAAAU,GACA,YAAAC,GACA,QAAAC,GACA,WAAAd,GACA,cAAAC,EACF,GAN2D,0KC9J3Dc,GAAA,CAAA,EAAAC,EAAAD,GAAA,CAAA,WAAA,IAAAE,EAAA,YAAA,IAAAC,EAAAA,CAAAA,EAEO,SAASD,EAAWE,EAAwB,CACjD,GAAM,CAAC,CAAEC,CAAQ,EAAID,EAAQ,MAAM,EACnCC,EAAS,UAAW,IAAI,EACxBA,EAAS,WAAY,IAAI,EACzBA,EAAS,YAAa,EAAK,EAC3BA,EAAS,aAAc,EAAK,CAC9B,CANgBH,EAAAA,EAAAA,KAAAI,EAAAJ,EAAA,YAAA,EAQT,IAAMC,GAAc,CAAC,CAAC,aAAcD,CAAU,CAAU,ECV/DK,EAAA,CAAA,EAAAN,EAAAM,EAAA,CAAA,WAAA,IAAAL,EAAAA,CAAAA,EIsBO,IAAMM,GAAN,KAA6D,OAAA,CAAAF,EAAA,UAtBpE,MAsBoE,CAAAA,EAAA,KAAA,eAAA,CAAA,CACzD,KACTG,GAAqB,IAAI,IACzBC,GAAoB,IAAI,IACxBC,GAAuB,IAAI,IAC3BC,GAAwB,IAAI,IAC5BC,GAEA,YAAYC,EAAS,CACnB,KAAK,KAAOA,CACd,CAEO,IAAIC,EAAsD,CAC/D,OAAK,KAAKN,GAAK,IAAI,KAAK,IAAI,GAC1B,KAAKA,GAAK,IAAI,KAAK,KAAM,CAAC,CAAC,EAE7B,KAAKA,GAAK,IAAI,KAAK,IAAI,GAAG,KAAKM,CAAM,EAC9B,IACT,CAEO,GAAGA,EAAsD,CAC9D,OAAK,KAAKL,GAAI,IAAI,KAAK,IAAI,GACzB,KAAKA,GAAI,IAAI,KAAK,KAAM,CAAC,CAAC,EAE5B,KAAKA,GAAI,IAAI,KAAK,IAAI,GAAG,KAAKK,CAAM,EAC7B,IACT,CAEO,OAAOA,EAAsD,CAClE,OAAK,KAAKH,GAAQ,IAAI,KAAK,IAAI,GAC7B,KAAKA,GAAQ,IAAI,KAAK,KAAM,CAAC,CAAC,EAEhC,KAAKA,GAAQ,IAAI,KAAK,IAAI,GAAG,KAAKG,CAAM,EACjC,IACT,CAEO,MAAMA,EAAsD,CACjE,OAAK,KAAKJ,GAAO,IAAI,KAAK,IAAI,GAC5B,KAAKA,GAAO,IAAI,KAAK,KAAM,CAAC,CAAC,EAE/B,KAAKA,GAAO,IAAI,KAAK,IAAI,GAAG,KAAKI,CAAM,EAChC,IACT,CAEO,OAAOA,EAAqD,CACjE,OAAA,KAAKF,GAAUE,EACR,IACT,CAEO,OAAwC,CAC7C,GAAI,CAAC,KAAKF,GACR,MAAM,IAAI,MAAM,gDAAgD,EAGlE,MAAO,CACL,WAAY,KAAK,KACjB,OAAQ,KAAKA,GACb,OAAQ,KAAKD,GACb,MAAO,KAAKD,GACZ,IAAK,KAAKF,GACV,GAAI,KAAKC,EACX,CACF,CACF,EJ9EaR,GAAaI,EAAA,IAIxB,IAAIE,GACF,YACF,EAAE,OAAON,CAAgB,EAND,YAAA,EMCnB,SAASc,EAAmCC,EAAmB,CACpE,GAAIA,aAAa,MACf,MAAMA,EAGR,IAAIC,EAEF,OAAOD,GAAM,UACbA,IAAM,MACN,YAAaA,GACb,OAAOA,EAAE,SAAY,SAErBC,EAAeD,EAAE,QACR,OAAOA,GAAM,SACtBC,EAAeD,EAEfC,EAAe,OAAOD,CAAC,EAGzB,IAAME,EAAM,IAAI,MAAMD,CAAY,EAKlC,MAAI,OAAOD,GAAM,UAAYA,IAAM,OAC7B,SAAUA,IACZE,EAAI,KAAOF,EAAE,MAEX,SAAUA,IACZE,EAAI,KAAOF,EAAE,OAIXE,CACR,CAlCgBH,EAAAA,EAAAA,KAAAV,EAAAU,EAAA,oCAAA,ECMT,SAASI,GAAyBC,EAAmBJ,EAAmB,CAC7ED,EAAmCC,CAAC,CACtC,CAFgBG,EAAAA,GAAAA,KAAAd,EAAAc,GAAA,0BAAA,ECZT,SAASE,GAAuBlB,EAAkB,CACvD,GAAM,CAAC,CAAEC,CAAQ,EAAID,EAAQ,MAAM,EACnCC,EAAS,aAAc,EAAK,CAC9B,CAHgBiB,EAAAA,GAAAA,KAAAhB,EAAAgB,GAAA,wBAAA,ECAT,SAASC,EAAmBC,EAA0B,CAC3D,GAAI,CACF,OAAAC,EAAU,MAAMD,CAAO,EAChB,EACT,MAAQ,CACN,MAAO,EACT,CACF,CAPgBD,EAAAA,EAAAA,KAAAG,EAAAH,EAAA,oBAAA,ECMT,SAASI,GACdC,EACAC,EACA,CACA,GAAI,CAACA,EAAS,MAAMN,CAAkB,EACpC,MAAM,IAAI,MACR,4FAA4FM,CAAQ,EACtG,EAGF,GAAM,CAAC,CAAEC,CAAQ,EAAIF,EAAQ,MAAM,EACnC,OAAAE,EAAS,WAAYD,CAAQ,EAC7BC,EAAS,YAAa,EAAI,EACnBD,CACT,CAdgBF,EAAAA,GAAAA,KAAAD,EAAAC,GAAA,uCAAA,EAgBT,SAASI,GACdH,EACAC,EACA,CACA,GAAI,CAACA,EAAS,SAAS,MAAMN,CAAkB,EAC7C,MAAM,IAAI,MACR,4FAA4FM,EAAS,QAAQ,EAC/G,EAGF,GAAM,CAAC,CAAEC,CAAQ,EAAIF,EAAQ,MAAM,EACnC,OAAAE,EAAS,WAAYD,EAAS,QAAQ,EACtCC,EAAS,UAAWD,EAAS,OAAO,EACpCC,EAAS,YAAa,EAAI,EACnBD,CACT,CAfgBE,EAAAA,GAAAA,KAAAL,EAAAK,GAAA,uCAAA,ECtBT,SAASC,GAAeC,EAAkB,CAC/C,GAAM,CAAC,CAAEC,CAAQ,EAAID,EAAQ,MAAM,EACnCC,EAAS,aAAc,EAAI,CAC7B,CAHgBF,EAAAA,GAAAA,KAAAG,EAAAH,GAAA,gBAAA,EIAhB,OAA8B,kBAAAI,OAAsB,iKHFpDC,GAAA,CAAA,EAAAC,EAAAD,GAAA,CAAA,gBAAA,IAAAE,GAAA,iBAAA,IAAAC,GAAA,wBAAA,IAAAC,EAAA,sBAAA,IAAAC,EAAA,QAAA,IAAAC,EAAA,YAAA,IAAAC,EAAAA,CAAAA,ECEO,SAASC,EAAWC,EAAwB,CACjD,GAAM,CAAC,CAAEC,CAAQ,EAAID,EAAQ,MAAM,EACnCC,EAAS,UAAW,IAAI,EACxBA,EAAS,WAAY,IAAI,EACzBA,EAAS,YAAa,EAAK,EAC3BA,EAAS,aAAc,EAAK,CAC9B,CANgBF,EAAAA,EAAAA,KAAAG,EAAAH,EAAA,YAAA,EAQT,IAAMD,GAAc,CAAC,CAAC,aAAcC,CAAU,CAAU,ECVlDI,EAAiB,SCA9B,IAAAC,GAAA,CAAA,EAAAC,EAAAD,GAAA,CAAA,+BAAA,IAAAE,EAAA,YAAA,IAAAC,EAAA,qBAAA,IAAAC,EAAA,eAAA,IAAAC,EAAA,cAAA,IAAAC,EAAA,mBAAA,IAAAC,CAAAA,CAAAA,EAIA,eAAsBJ,EAAYK,EAAuB,CACvD,GAAM,CAACC,EAAUC,CAAO,EAAI,MAAM,QAAQ,IAAI,CAC5CF,EAAS,QAAQ,CAAE,OAAQ,qBAAsB,CAAC,EAClDA,EAAS,QAAQ,CAAE,OAAQ,aAAc,CAAC,CAC5C,CAAC,EAED,MAAO,CACL,SAAAC,EACA,QAAAC,CACF,CACF,CAVsBP,EAAAA,EAAAA,KAAAQ,EAAAR,EAAA,aAAA,EAYtB,eAAsBE,EAAeO,EAAuBC,EAAc,CACxE,OAAO,MAAMD,EAAS,QAAQ,CAC5B,OAAQ,0BACR,OAAQ,CAACC,CAAK,CAChB,CAAC,CACH,CALsBR,EAAAA,EAAAA,KAAAM,EAAAN,EAAA,gBAAA,EAOtB,eAAsBC,EAAcM,EAAuBF,EAAkB,CAC3E,OAAO,MAAME,EAAS,QAAQ,CAC5B,OAAQ,6BACR,OAAQ,CAAC,CAAE,QAASF,CAAQ,CAAC,CAC/B,CAAC,CACH,CALsBJ,EAAAA,EAAAA,KAAAK,EAAAL,EAAA,eAAA,EAMf,SAASJ,EAA+BY,EAAwB,CACrE,OAAOC,GAAeD,CAAI,EAAE,IAAKE,GAAeA,EAAW,IAAI,CACjE,CAFgBd,EAAAA,EAAAA,KAAAS,EAAAT,EAAA,gCAAA,EAGhB,eAAsBK,EACpBK,EACAC,EACA,CACA,GAAI,CACF,IAAMH,EAAU,OAAOG,GAAU,SAAWA,EAAQA,EAAM,QAC1D,MAAMP,EAAcM,EAAUF,CAAO,CACvC,OAASO,EAAa,CACpB,IAAMC,EAAQD,EAQd,GACE,OAAOJ,GAAU,WAChBK,EAAM,OAH0B,MAGa,CAACA,EAAM,MACrD,CAKA,MAAMb,EAAeO,EAAUC,CAAK,EACpC,MACF,CACA,MAAMI,CACR,CACF,CA7BsBV,EAAAA,EAAAA,KAAAI,EAAAJ,EAAA,oBAAA,EA+BtB,IAAMY,EAAqC,KACpC,SAASf,EAAqBc,EAAyB,CAE5D,GAAI,OAAOA,GAAU,UAAYA,IAAU,KAAM,CAC/C,IAAME,EAAQF,EAA4B,KACpCG,EAAaH,EAAwC,OAAO,KAClE,OACEE,IAASD,GACTE,IAAcF,CAElB,CACA,MAAO,EACT,CAXgBf,EAAAA,EAAAA,KAAAO,EAAAP,EAAA,sBAAA,EH3CT,IAAMkB,GAAc,CAAC,GAAGA,EAAiB,EAC1CC,GAAiB,GAChB,SAASC,EACdZ,EACAa,EACqD,CACrD,MAAO,OAAOC,EAAUb,IAAU,CAChC,IAAMc,EAAcf,EAAS,EAE7B,GAAI,CAACe,EACH,MAAM,IAAI,MACR,0DACF,EAGEd,IAOEY,GAAS,mBACX,MAAMA,EAAQ,mBAAmBE,EAAad,CAAK,EAEnD,MAAMN,EAAmBoB,EAAad,CAAK,GAI/C,IAAMe,EAAS,MAAMzB,EAAYwB,CAAW,EASxCjB,EAAUkB,EAAO,QACrB,OAAI,OAAOlB,GAAY,WACrBA,EAAU,KAAK,OAAOA,CAAO,EAAE,SAASa,EAAc,CAAC,IAclD,CACL,SAZqBK,EAAO,SAAS,IACpCC,GACCC,EAAU,OAAO,CACf,QAASD,EACT,QAAS,CACP,UAAWE,EACX,UAAWrB,CACb,CACF,CAAC,CACL,EAIE,QAASA,CACX,CACF,CACF,CAzDgBc,EAAAA,EAAAA,KAAAb,EAAAa,EAAA,SAAA,EA2DT,SAASQ,EACdpB,EACyD,CACzD,IAAIqB,EAGJ,MAAO,CACL,CAACC,EAASC,IAAQ,CAChB,IAAMR,EAAcf,EAAS,EAE7B,GAAI,CAACe,EACH,MAAM,IAAI,MACR,kFACF,EAGF,GAAM,CAAC,CAAES,CAAQ,EAAIF,EAAQ,MAAM,EA6BnC,GA3BAD,EAAgBtB,EAAA,MAAOF,GAAa,CAOlC,GAAI,CAACA,GAAYA,EAAS,SAAW,EAAG,CACtCyB,EAAQ,OAAO,YAAY,EAC3B,MACF,CAEA,IAAMxB,EAAU,MAAMiB,EAAY,QAAQ,CAAE,OAAQ,aAAc,CAAC,EAC7DU,GAAiB5B,EAAS,IAAKoB,IACnCC,EAAU,OAAO,CACf,QAASD,GACT,QAAS,CACP,UAAWE,EACX,UAAWrB,CACb,CACF,CAAC,CACH,EAEA0B,EAAS,WAAYC,EAAc,CACrC,EAxBgB,eAAA,EAyBhBV,EAAY,GAAG,kBAAmBM,CAAa,EAE3CE,aAAe,MACjB,MAAMA,CAEV,EACA,CAACG,EAAGH,IAAQ,CACV,IAAMR,EAAcf,EAAS,EAE7B,OAAIqB,GAAiBN,GACnBA,EAAY,iBAAiB,kBAAmBM,CAAa,EAGxDE,CACT,CACF,CACF,CA3DgBH,EAAAA,EAAAA,KAAArB,EAAAqB,EAAA,yBAAA,EA6DT,SAASO,EACd3B,EACyD,CACzD,IAAIqB,EAEJ,MAAO,CACJC,GAAY,CACX,IAAMP,EAAcf,EAAS,EAE7B,GAAI,CAACe,EACH,MAAM,IAAI,MACR,kFACF,EAGF,GAAM,CAAC,CAAES,CAAQ,EAAIF,EAAQ,MAAM,EAEnCD,EAAgBtB,EAAA,MAAOD,GAAoB,CACzC0B,EAAS,UAAW1B,CAAO,CAC7B,EAFgB,eAAA,EAGhBiB,EAAY,GAAG,eAAgBM,CAAa,CAC9C,EACA,IAAM,CACJ,IAAMN,EAAcf,EAAS,EAEzBqB,GAAiBN,GACnBA,EAAY,eAAe,eAAgBM,CAAa,CAE5D,CACF,CACF,CA9BgBM,EAAAA,EAAAA,KAAA5B,EAAA4B,EAAA,uBAAA,EAgCT,SAASC,GACd5B,EAC6B,CAC7B,MAAO,UAAY,CACjB,IAAMe,EAAcf,EAAS,EAE7B,GAAI,CAACe,EACH,MAAM,IAAI,MACR,wFACF,EAGF,GAAI,CAIF,MAAI,CAAA,EAHuB,MAAMA,EAAY,QAAQ,CACnD,OAAQ,cACV,CAAC,GACY,MAIf,MAAQ,CACN,MAAO,EACT,CACF,CACF,CAxBgBa,EAAAA,GAAAA,KAAA7B,EAAA6B,GAAA,iBAAA,EAyBT,SAASC,IAGd,CACA,MAAO,CAACP,EAASQ,IAAW,CAC1B,GAAM,CAAE,QAAAC,EAAS,gBAAAC,CAAgB,EAAIF,EACrC,OAAOxC,EAA+B0C,CAAe,EAAE,SAASD,CAAO,CACzE,CACF,CARgBF,EAAAA,GAAAA,KAAA9B,EAAA8B,GAAA,kBAAA,EIxMhB,IAAAI,GAAA,CAAA,EAAA5C,EAAA4C,GAAA,CAAA,YAAA,IAAAvB,EAAAA,CAAAA,ECEO,SAASwB,EAAuBZ,EAAkB,CACvD,GAAM,CAAC,CAAEE,CAAQ,EAAIF,EAAQ,MAAM,EACnCE,EAAS,aAAc,EAAK,CAC9B,CAHgBU,EAAAA,EAAAA,KAAAnC,EAAAmC,EAAA,wBAAA,EAKT,IAAMxB,GAAc,CAAC,CAAC,UAAWwB,CAAsB,CAAU,EDL3DxB,GAAc,CAAC,GAAGA,EAAiB,EEFhDyB,GAAA,CAAA,EAAA9C,EAAA8C,GAAA,CAAA,YAAA,IAAAzB,EAAAA,CAAAA,EIsBO,IAAM0B,EAAN,KAA6D,OAAA,CAAArC,EAAA,UAtBpE,MAsBoE,CAAAA,EAAA,KAAA,eAAA,CAAA,CACzD,KACTsC,GAAqB,IAAI,IACzBC,GAAoB,IAAI,IACxBC,GAAuB,IAAI,IAC3BC,GAAwB,IAAI,IAC5BC,GAEA,YAAYC,EAAS,CACnB,KAAK,KAAOA,CACd,CAEO,IAAIC,EAAsD,CAC/D,OAAK,KAAKN,GAAK,IAAI,KAAK,IAAI,GAC1B,KAAKA,GAAK,IAAI,KAAK,KAAM,CAAC,CAAC,EAE7B,KAAKA,GAAK,IAAI,KAAK,IAAI,GAAG,KAAKM,CAAM,EAC9B,IACT,CAEO,GAAGA,EAAsD,CAC9D,OAAK,KAAKL,GAAI,IAAI,KAAK,IAAI,GACzB,KAAKA,GAAI,IAAI,KAAK,KAAM,CAAC,CAAC,EAE5B,KAAKA,GAAI,IAAI,KAAK,IAAI,GAAG,KAAKK,CAAM,EAC7B,IACT,CAEO,OAAOA,EAAsD,CAClE,OAAK,KAAKH,GAAQ,IAAI,KAAK,IAAI,GAC7B,KAAKA,GAAQ,IAAI,KAAK,KAAM,CAAC,CAAC,EAEhC,KAAKA,GAAQ,IAAI,KAAK,IAAI,GAAG,KAAKG,CAAM,EACjC,IACT,CAEO,MAAMA,EAAsD,CACjE,OAAK,KAAKJ,GAAO,IAAI,KAAK,IAAI,GAC5B,KAAKA,GAAO,IAAI,KAAK,KAAM,CAAC,CAAC,EAE/B,KAAKA,GAAO,IAAI,KAAK,IAAI,GAAG,KAAKI,CAAM,EAChC,IACT,CAEO,OAAOA,EAAqD,CACjE,OAAA,KAAKF,GAAUE,EACR,IACT,CAEO,OAAwC,CAC7C,GAAI,CAAC,KAAKF,GACR,MAAM,IAAI,MAAM,gDAAgD,EAGlE,MAAO,CACL,WAAY,KAAK,KACjB,OAAQ,KAAKA,GACb,OAAQ,KAAKD,GACb,MAAO,KAAKD,GACZ,IAAK,KAAKF,GACV,GAAI,KAAKC,EACX,CACF,CACF,EEnFO,SAASM,GAAmBC,EAA0B,CAC3D,GAAI,CACF,OAAA3B,EAAU,MAAM2B,CAAO,EAChB,EACT,MAAQ,CACN,MAAO,EACT,CACF,CAPgBD,EAAAA,GAAAA,KAAA7C,EAAA6C,GAAA,oBAAA,ECsBT,SAASE,EACdxB,EACAzB,EACA,CACA,GAAI,CAACA,EAAS,SAAS,MAAM+C,EAAkB,EAC7C,MAAM,IAAI,MACR,4FAA4F/C,EAAS,QAAQ,EAC/G,EAGF,GAAM,CAAC,CAAE2B,CAAQ,EAAIF,EAAQ,MAAM,EACnC,OAAAE,EAAS,WAAY3B,EAAS,QAAQ,EACtC2B,EAAS,UAAW3B,EAAS,OAAO,EACpC2B,EAAS,YAAa,EAAI,EACnB3B,CACT,CAfgBiD,EAAAA,EAAAA,KAAA/C,EAAA+C,EAAA,uCAAA,ECtBT,SAASC,EAAezB,EAAkB,CAC/C,GAAM,CAAC,CAAEE,CAAQ,EAAIF,EAAQ,MAAM,EACnCE,EAAS,aAAc,EAAI,CAC7B,CAHgBuB,EAAAA,EAAAA,KAAAhD,EAAAgD,EAAA,gBAAA,EAMT,IAAMrC,GAAc,CAAC,CAAC,UAAWqC,CAAc,CAAU,ERNnDrC,GAAc,CACzB,CAAC,UAAWoC,CAAqC,CACnD,ESJAE,GAAA,CAAA,EAAA3D,EAAA2D,GAAA,CAAA,YAAA,IAAAtC,EAAAA,CAAAA,EAEO,IAAMA,GAAc,CAAC,GAAGA,EAAiB,ECFhDuC,EAAA,CAAA,EAAA5D,EAAA4D,EAAA,CAAA,gBAAA,IAAArB,GAAA,iBAAA,IAAAC,GAAA,QAAA,IAAAjB,EAAAA,CAAAA,EASO,IAAMA,GAAUb,EAAA,IACrB,IAAIqC,EAAqC,SAAS,EAC/C,IAAIU,CAAqC,EACzC,OAAOC,CAAc,EACrB,MAAMb,CAAsB,EAJV,SAAA,EAMVN,GAAkB7B,EAAA,IAC7B,IAAIqC,EAA6C,iBAAiB,EADrC,iBAAA,EAElBP,GAAmB9B,EAAA,IAC9B,IAAIqC,EAA8C,kBAAkB,EADtC,kBAAA,ECGhC,IAAMc,GAAUC,EACb,QAAQ,EACR,OAAO,eAAgBC,EAAUC,EAAQC,EAAS,CACjD,GAAI,CAACA,GAAS,eACZ,MAAM,IAAI,MAAM,mCAAmC,EAGrDC,EAAkBD,EAAQ,cAAc,EAExC,IAAME,EAAS,MAAMC,EAAoB,EAazC,MAAO,CACL,SAZqBD,EAAO,SAAS,IACpCE,GACCC,EAAK,UAAU,OAAO,CACpB,QAASD,EACT,QAAS,CACP,UAAWE,EACX,UAAWJ,EAAO,OACpB,CACF,CAAC,CACL,EAIE,QAASA,EAAO,OAClB,CACF,CAAC,EACA,GAAGK,CAA8B,EACjC,MAAM,EAEHC,GAAaC,EAAe,WAAuB,EAAE,MAAM,EAE3DC,GAAM,IAAIC,EAA6B,MAAOC,CAAS,EAC1D,OAAOhB,EAAO,EACd,OAAOY,EAAU,EACjB,MAAM,ECxCT,IAAMK,GAAUC,EACb,QAAQ,EACR,OAAO,eAAgBC,EAAUC,EAAS,CACzC,GAAI,CAACA,GAAS,eACZ,MAAM,IAAI,MAAM,mCAAmC,EAGrDC,EAAkBD,EAAQ,cAAc,EAExC,IAAME,EAAS,MAAMC,EAAkB,EAavC,OAXuBD,EAAO,SAAS,IACpCE,GACCC,EAAK,UAAU,OAAO,CACpB,QAASD,EACT,QAAS,CACP,UAAWE,EACX,UAAWJ,EAAO,OACpB,CACF,CAAC,CACL,CAGF,CAAC,EACA,GAAGK,CAA8B,EACjC,MAAM,EAEHC,GAAaC,EAAe,WAA0B,EAAE,MAAM,EAE9DC,GAAS,IAAIC,EAAgC,SAAUC,CAAS,EACnE,OAAOf,EAAO,EACd,OAAOW,EAAU,EACjB,MAAM,ECxCT,IAAMK,GAAgBC,EAAA,IACpB,IAAIC,EAAgBC,CAAS,EAC1B,KAAK,SAAUC,EAAS,CACvB,GAAM,CAAC,CAAEC,CAAQ,EAAID,EAAQ,MAAM,EAE/BE,EAAe,GACjBD,EAAS,YAAa,EAAI,CAE9B,CAAC,EACA,OAAO,WAAYE,CAAQ,EAC3B,IAAI,SAAUC,EAAM,EACpB,IAAI,MAAOC,EAAG,EACd,MAAM,EAZW,iBCFtB,IAAMC,GAAWC,EAAA,IACfC,EAAe,EACZ,QAAQ,QAASC,EAAoB,CAAC,EACtC,QAAQ,QAASC,GAAc,CAAC,EAChC,MAAM,EAJM",
6
- "names": ["generateStoreId", "providerId", "namespace", "__name", "pickVersion", "list", "targetVersion", "target", "version", "defineVersions", "versions", "api", "semver", "value", "legacyProviderImportsToVersionsInterface", "provider", "Networks", "WalletTypes", "config", "WalletTypes", "getInstance", "ledger", "connect", "__name", "namespaces", "results", "solanaNamespace", "namespaceItem", "evmNamespace", "setDerivationPath", "accounts", "getSolanaAccounts", "getEthereumAccounts", "getSigners", "getWalletInfo", "__name", "allBlockChains", "supportedChains", "ethereumBlockchain", "chain", "Networks", "solanaBlockchain", "index", "allBlockchains", "buildLegacyProvider", "config", "getInstance", "connect", "actions_exports", "__export", "disconnect", "recommended", "context", "setState", "__name", "builders_exports", "ActionBuilder", "#and", "#or", "#after", "#before", "#action", "name", "action", "parseErrorAndThrowStandardizeError", "e", "errorMessage", "err", "standardizeAndThrowError", "_context", "intoConnectionFinished", "isValidCaipAddress", "address", "AccountId", "__name", "connectAndUpdateStateForSingleNetwork", "context", "accounts", "setState", "connectAndUpdateStateForMultiNetworks", "intoConnecting", "context", "setState", "__name", "evmBlockchains", "actions_exports", "__export", "canEagerConnect", "canSwitchNetwork", "changeAccountSubscriber", "changeChainSubscriber", "connect", "recommended", "disconnect", "context", "setState", "__name", "CAIP_NAMESPACE", "utils_exports", "__export", "filterAndGetEvmBlockchainNames", "getAccounts", "isUserRejectionError", "suggestNetwork", "switchNetwork", "switchOrAddNetwork", "provider", "accounts", "chainId", "__name", "instance", "chain", "meta", "evmBlockchains", "blockchain", "switchError", "error", "EIP_1193_USER_REJECTION_ERROR_CODE", "code", "causeCode", "recommended", "CHAIN_ID_RADIX", "connect", "options", "_context", "evmInstance", "result", "account", "AccountId", "CAIP_NAMESPACE", "changeAccountSubscriber", "eventCallback", "context", "err", "setState", "formatAccounts", "_", "changeChainSubscriber", "canEagerConnect", "canSwitchNetwork", "params", "network", "supportedChains", "after_exports", "intoConnectionFinished", "and_exports", "ActionBuilder", "#and", "#or", "#after", "#before", "#action", "name", "action", "isValidCaipAddress", "address", "connectAndUpdateStateForMultiNetworks", "intoConnecting", "before_exports", "builders_exports", "connect", "W", "_context", "_chain", "options", "setDerivationPath", "result", "getEthereumAccounts", "account", "dist_exports", "m", "standardizeAndThrowLedgerError", "disconnect", "y", "evm", "S", "WALLET_ID", "connect", "M", "_context", "options", "setDerivationPath", "result", "getSolanaAccounts", "account", "dist_exports", "p", "standardizeAndThrowLedgerError", "disconnect", "y", "solana", "S", "WALLET_ID", "buildProvider", "__name", "x", "WALLET_ID", "context", "setState", "ledger", "metadata", "solana", "evm", "versions", "__name", "d", "buildLegacyProvider", "buildProvider"]
3
+ "sources": ["../../core/src/utils/mod.ts", "../../core/src/hub/helpers.ts", "../../core/src/utils/versions.ts", "../src/legacy/index.ts", "../../core/src/namespaces/common/actions.ts", "../../core/src/namespaces/common/builders.ts", "../../core/src/hub/store/store.ts", "../../core/src/hub/store/namespaces.ts", "../../core/src/hub/store/providers.ts", "../../core/src/builders/action.ts", "../../core/src/utils/mod.ts", "../../core/src/namespaces/common/utils.ts", "../../core/src/namespaces/common/or.ts", "../../core/src/namespaces/common/after.ts", "../../core/src/namespaces/common/helpers.ts", "../../core/src/namespaces/common/and.ts", "../../core/src/namespaces/common/before.ts", "../../core/src/namespaces/evm/actions.ts", "../../core/src/namespaces/common/actions.ts", "../../core/src/namespaces/evm/utils.ts", "../../core/src/namespaces/evm/constants.ts", "../../core/src/namespaces/evm/hooks.ts", "../../core/src/namespaces/evm/after.ts", "../../core/src/namespaces/common/after.ts", "../../core/src/namespaces/evm/and.ts", "../../core/src/hub/store/store.ts", "../../core/src/hub/store/namespaces.ts", "../../core/src/hub/store/providers.ts", "../../core/src/builders/action.ts", "../../core/src/utils/mod.ts", "../../core/src/namespaces/common/helpers.ts", "../../core/src/namespaces/common/and.ts", "../../core/src/namespaces/common/before.ts", "../../core/src/namespaces/evm/before.ts", "../../core/src/namespaces/evm/builders.ts", "../../core/src/namespaces/common/hooks/changeAccountSubscriber.ts", "../src/namespaces/evm.ts", "../src/namespaces/solana.ts", "../src/provider.ts", "../src/mod.ts"],
4
+ "sourcesContent": ["/*\n * It is not a good idea to re-export all of CAIP because if they have a breaking change, we will break as well.\n * It would be better to create an abstraction over them and export our own interface to ensure it is under our control.\n */\nexport * as CAIP from 'caip';\n\nexport { generateStoreId } from '../hub/helpers.js';\nexport * from './versions.js';\n", "/**\n * Note: This only works native async, if we are going to support for old transpilers like Babel.\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isAsync(fn: Function) {\n return fn.constructor.name === 'AsyncFunction';\n}\n\nexport function generateStoreId(providerId: string, namespace: string) {\n return `${providerId}$$${namespace}`;\n}\n", "import type { Provider } from '../hub/mod.js';\nimport type { LegacyProviderInterface } from '../legacy/mod.js';\n\ntype LegacyVersioned = ['0.0.0', LegacyProviderInterface];\ntype HubVersioned = ['1.0.0', Provider];\ntype AvailableVersionedProviders = LegacyVersioned | HubVersioned;\nexport type VersionedProviders = AvailableVersionedProviders[];\nexport type VersionInterface<T extends AvailableVersionedProviders[]> = T[1];\n\ntype SemVer<T extends [string, any]> = T extends [infer U, any] ? U : never;\ntype MatchVersion<T extends VersionedProviders, Version> = Extract<\n T[number],\n [Version, any]\n>;\n\nexport function pickVersion<\n L extends VersionedProviders,\n V extends SemVer<VersionedProviders[number]>\n>(list: L, targetVersion: V): MatchVersion<L, V> {\n if (!targetVersion) {\n throw new Error(`You should provide a valid semver, e.g 1.0.0.`);\n }\n\n const target = list.find(([version]) => version === targetVersion);\n\n if (!target) {\n throw new Error(\n `You target version hasn't been found. Available versions: ${Object.keys(\n list\n ).join(', ')}`\n );\n }\n return target as MatchVersion<L, V>;\n}\n\ninterface DefineVersionsApi {\n version: <T extends SemVer<VersionedProviders[number]>>(\n semver: T,\n value: VersionInterface<MatchVersion<VersionedProviders, T>>\n ) => DefineVersionsApi;\n build: () => VersionedProviders;\n}\n\nexport function defineVersions(): DefineVersionsApi {\n const versions: VersionedProviders = [];\n const api: DefineVersionsApi = {\n version: (semver, value) => {\n versions.push([semver, value]);\n return api;\n },\n build: () => {\n return versions;\n },\n };\n return api;\n}\n\nexport function legacyProviderImportsToVersionsInterface(\n provider: LegacyProviderInterface\n): VersionedProviders {\n return defineVersions().version('0.0.0', provider).build();\n}\n", "import type { LegacyProviderInterface } from '@rango-dev/wallets-core/legacy';\nimport type {\n Connect,\n Disconnect,\n ProviderConnectResult,\n WalletInfo,\n} from '@rango-dev/wallets-shared';\n\nimport { Networks, WalletTypes } from '@rango-dev/wallets-shared';\nimport { type BlockchainMeta, type SignerFactory } from 'rango-types';\n\nimport signer from '../signer.js';\nimport { setDerivationPath } from '../state.js';\nimport {\n getEthereumAccounts,\n ledger as getLedgerInstance,\n getSolanaAccounts,\n transportDisconnect,\n} from '../utils.js';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype InstanceType = any;\n\nexport const config = {\n type: WalletTypes.LEDGER,\n};\n\nexport const getInstance = getLedgerInstance;\nexport const connect: Connect = async ({ namespaces }) => {\n const results: ProviderConnectResult[] = [];\n\n const solanaNamespace = namespaces?.find(\n (namespaceItem) => namespaceItem.namespace === 'Solana'\n );\n const evmNamespace = namespaces?.find(\n (namespaceItem) => namespaceItem.namespace === 'EVM'\n );\n\n if (solanaNamespace) {\n if (solanaNamespace.derivationPath) {\n setDerivationPath(solanaNamespace.derivationPath);\n const accounts = await getSolanaAccounts();\n results.push(accounts);\n } else {\n throw new Error('Derivation Path can not be empty.');\n }\n } else if (evmNamespace) {\n if (evmNamespace.derivationPath) {\n setDerivationPath(evmNamespace.derivationPath);\n const accounts = await getEthereumAccounts();\n results.push(accounts);\n } else {\n throw new Error('Derivation Path can not be empty.');\n }\n } else {\n throw new Error(\n `It appears that you have selected a namespace that is not yet supported by our system. Your namespaces: ${namespaces?.map(\n (namespaceItem) => namespaceItem.namespace\n )}`\n );\n }\n\n return results;\n};\n\nexport const disconnect: Disconnect = async () => {\n void transportDisconnect();\n};\n\nexport const getSigners: (provider: InstanceType) => Promise<SignerFactory> =\n signer;\n\nexport const getWalletInfo: (allBlockChains: BlockchainMeta[]) => WalletInfo = (\n allBlockChains\n) => {\n const supportedChains: BlockchainMeta[] = [];\n\n const ethereumBlockchain = allBlockChains.find(\n (chain) => chain.name === Networks.ETHEREUM\n );\n if (ethereumBlockchain) {\n supportedChains.push(ethereumBlockchain);\n }\n\n const solanaBlockchain = allBlockChains.find(\n (chain) => chain.name === Networks.SOLANA\n );\n if (solanaBlockchain) {\n supportedChains.push(solanaBlockchain);\n }\n\n return {\n name: 'Ledger',\n img: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/ledger/icon.svg',\n installLink: {\n DEFAULT:\n 'https://support.ledger.com/hc/en-us/articles/4404389606417-Download-and-install-Ledger-Live?docs=true',\n },\n color: 'black',\n supportedChains,\n showOnMobile: false,\n needsDerivationPath: {\n data: [\n {\n id: 'metamask',\n label: `Metamask (m/44'/60'/0'/0/index)`,\n namespace: 'EVM',\n generateDerivationPath: (index: string) => `44'/60'/0'/0/${index}`,\n },\n {\n id: 'ledgerLive',\n label: `LedgerLive (m/44'/60'/index'/0/0)`,\n namespace: 'EVM',\n generateDerivationPath: (index: string) => `44'/60'/${index}'/0/0`,\n },\n {\n id: 'legacy',\n label: `Legacy (m/44'/60'/0'/index)`,\n namespace: 'EVM',\n generateDerivationPath: (index: string) => `44'/60'/0'/${index}`,\n },\n {\n id: `(m/44'/501'/index')`,\n label: `(m/44'/501'/index')`,\n namespace: 'Solana',\n generateDerivationPath: (index: string) => `44'/501'/${index}'`,\n },\n {\n id: `(m/44'/501'/0'/index)`,\n label: `(m/44'/501'/0'/index)`,\n namespace: 'Solana',\n generateDerivationPath: (index: string) => `44'/501'/0'/${index}`,\n },\n ],\n },\n\n needsNamespace: {\n selection: 'single',\n data: [\n {\n label: 'EVM',\n value: 'EVM',\n id: 'ETH',\n getSupportedChains: (allBlockchains: BlockchainMeta[]) =>\n allBlockchains.filter((chain) => chain.name === Networks.ETHEREUM),\n },\n {\n label: 'Solana',\n value: 'Solana',\n id: 'SOLANA',\n getSupportedChains: (allBlockchains: BlockchainMeta[]) =>\n allBlockchains.filter((chain) => chain.name === Networks.SOLANA),\n },\n ],\n },\n };\n};\n\nconst buildLegacyProvider: () => LegacyProviderInterface = () => ({\n config,\n getInstance,\n connect,\n getSigners,\n getWalletInfo,\n});\n\nexport { buildLegacyProvider };\n", "import type { Context } from '../../hub/namespaces/mod.js';\n\nexport function disconnect(context: Context): void {\n const [, setState] = context.state();\n setState('network', null);\n setState('accounts', null);\n setState('connected', false);\n setState('connecting', false);\n}\n\nexport const recommended = [['disconnect', disconnect] as const];\n", "import type { AutoImplementedActionsByRecommended } from './types.js';\nimport type { Actions } from '../../hub/namespaces/types.js';\n\nimport { ActionBuilder } from '../../mod.js';\n\nimport { disconnect as disconnectAction } from './actions.js';\n\nexport const disconnect = <\n T extends Actions<T> &\n Record<'disconnect', AutoImplementedActionsByRecommended['disconnect']>\n>() =>\n new ActionBuilder<AutoImplementedActionsByRecommended, 'disconnect'>(\n 'disconnect'\n ).action(disconnectAction) as unknown as ActionBuilder<T, 'disconnect'>;\n", "import type { StoreApi } from 'zustand/vanilla';\n\nimport { createStore as createZustandStore } from 'zustand/vanilla';\n\nimport { extend, type Store } from './extend.js';\nimport { hubStore, type HubStore } from './hub.js';\nimport { namespacesStore, type NamespaceStore } from './namespaces.js';\nimport { providersStore, type ProviderStore } from './providers.js';\n\n/************ State ************/\n\nexport interface State {\n hub: HubStore;\n providers: ProviderStore;\n namespaces: NamespaceStore;\n}\n\nexport type RawStore = StoreApi<State>;\n\nexport const createStore = (): Store => {\n const store = createZustandStore<State>((...api) => {\n return {\n hub: hubStore(...api),\n providers: providersStore(...api),\n namespaces: namespacesStore(...api),\n };\n });\n\n return extend(store);\n};\n", "/************ Namespace ************/\n\nimport type { StateCreator } from 'zustand';\n\nimport { produce } from 'immer';\n\nimport {\n ConsumableEvents,\n type NamespaceConnectedEvent,\n type NamespaceDisconnectedEvent,\n type NamespaceSwitchedAccountEvent,\n type NamespaceSwitchedNetworkEvent,\n} from './events.js';\nimport { namespaceStateSelector, type State } from './mod.js';\n\n// Currently, namespace doesn't has any config.\nexport type NamespaceConfig = object;\n\nexport interface NamespaceData {\n accounts: null | string[];\n network: null | string;\n connected: boolean;\n connecting: boolean;\n}\n\ninterface NamespaceInfo {\n providerId: string;\n namespaceId: string;\n}\n\ninterface NamespaceItem {\n info: NamespaceInfo;\n data: NamespaceData;\n error: unknown;\n}\n\ntype NamespaceState = {\n events: InstanceType<typeof ConsumableEvents>;\n list: Record<string, NamespaceItem>;\n};\n\ninterface NamespaceActions {\n addNamespace: (id: string, config: NamespaceInfo) => void;\n updateStatus: <K extends keyof NamespaceData>(\n id: string,\n key: K,\n value: NamespaceData[K]\n ) => void;\n\n _produceEventsWhenUpdatingStatus: <K extends keyof NamespaceData>(\n namespace: NamespaceItem,\n id: string,\n key: K,\n value: NamespaceData[K]\n ) => void;\n}\ninterface NamespaceSelectors {\n getNamespaceData(storeId: string): NamespaceData;\n}\n\nexport type NamespaceStore = NamespaceState &\n NamespaceActions &\n NamespaceSelectors;\ntype NamespaceStateCreator = StateCreator<State, [], [], NamespaceStore>;\n\nconst namespacesStore: NamespaceStateCreator = (set, get) => ({\n events: new ConsumableEvents(),\n\n list: {},\n addNamespace: (id, info) => {\n const data: NamespaceData = {\n accounts: null,\n network: null,\n connected: false,\n connecting: false,\n };\n\n const item = {\n data,\n error: '',\n info,\n };\n\n set(\n produce((state: State) => {\n state.namespaces.list[id] = item;\n })\n );\n },\n updateStatus: (id, key, value) => {\n const ns = get().namespaces.list[id];\n if (!ns) {\n throw new Error(`No namespace with '${id}' found.`);\n }\n\n get().namespaces._produceEventsWhenUpdatingStatus(ns, id, key, value);\n\n // Updating state\n set(\n produce((state: State) => {\n state.namespaces.list[id].data[key] = value;\n })\n );\n },\n getNamespaceData(storeId) {\n return namespaceStateSelector(get(), storeId);\n },\n\n _produceEventsWhenUpdatingStatus: (namespace, id, key, value) => {\n if (key === 'accounts') {\n // check for both null and empty array\n const isAccountsEmpty =\n Object.is(value, null) || (Array.isArray(value) && value.length === 0);\n\n if (isAccountsEmpty) {\n const currentConnectedStatus = get().namespaces.list[id].data.connected;\n if (currentConnectedStatus) {\n const event: NamespaceDisconnectedEvent = {\n type: 'namespace_disconnected',\n provider: namespace.info.providerId,\n namespace: namespace.info.namespaceId,\n };\n\n get().namespaces.events.push(event);\n }\n // Skip emitting disconnect event, if the `connected` is false\n } else {\n const currentAccounts = get().namespaces.list[id].data.accounts;\n\n if (!currentAccounts) {\n const event: NamespaceConnectedEvent = {\n type: 'namespace_connected',\n provider: namespace.info.providerId,\n namespace: namespace.info.namespaceId,\n accounts: value as string[],\n };\n\n get().namespaces.events.push(event);\n } else {\n const areSameAccounts =\n currentAccounts.sort().toString() ===\n (value as string[]).sort().toString();\n\n if (!areSameAccounts) {\n const event: NamespaceSwitchedAccountEvent = {\n type: 'namespace_account_switched',\n provider: namespace.info.providerId,\n namespace: namespace.info.namespaceId,\n previousAccounts: currentAccounts,\n accounts: value as string[],\n };\n\n get().namespaces.events.push(event);\n }\n }\n }\n } else if (key === 'network') {\n const currentNetwork = get().namespaces.list[id].data.network;\n\n const event: NamespaceSwitchedNetworkEvent = {\n type: 'namespace_network_switched',\n provider: namespace.info.providerId,\n namespace: namespace.info.namespaceId,\n network: value as string,\n previousNetwork: currentNetwork,\n };\n\n get().namespaces.events.push(event);\n }\n },\n});\n\nexport { namespacesStore };\n", "import type { Namespace } from '../../namespaces/common/types.js';\nimport type {\n GenerateDeepLink,\n State as InternalProviderState,\n} from '../provider/mod.js';\nimport type { BlockchainMeta, SignerFactory } from 'rango-types';\nimport type { StateCreator } from 'zustand';\n\nimport { produce } from 'immer';\n\nimport { ConsumableEvents, type ProviderDetectedEvent } from './events.js';\nimport { guessProviderStateSelector, type State } from './mod.js';\n\ntype Browsers = 'firefox' | 'chrome' | 'edge' | 'brave' | 'homepage';\ntype Property<N extends string, V> = { name: N; value: V };\n\ntype NamespacesProperty = Property<\n 'namespaces',\n {\n selection: 'single' | 'multiple';\n data: {\n label: string;\n id: string;\n value: Namespace;\n unsupported?: boolean;\n getSupportedChains: (chains: BlockchainMeta[]) => BlockchainMeta[];\n }[];\n }\n>;\ntype DerivationPathProperty = Property<\n 'derivationPath',\n {\n data: {\n id: string;\n label: string;\n namespace: Namespace;\n generateDerivationPath: (index: string) => string;\n }[];\n }\n>;\ntype DetailsProperty = Property<\n 'details',\n {\n mobileWallet?: boolean;\n showOnMobile?: boolean;\n isContractWallet?: boolean;\n }\n>;\ntype SignersProperty = Property<\n 'signers',\n {\n getSigners: () => Promise<SignerFactory>;\n }\n>;\n\nexport type ProviderMetadata = {\n name: string;\n icon: string;\n extensions: Partial<Record<Browsers, string>>;\n properties?: Array<\n | NamespacesProperty\n | DerivationPathProperty\n | DetailsProperty\n | SignersProperty\n >;\n};\n\nexport interface ProviderConfig {\n metadata: ProviderMetadata;\n deepLink?: GenerateDeepLink;\n}\n\nexport type ProviderInfo = ProviderConfig;\n\ninterface ProviderData {\n installed: boolean;\n}\n\ninterface ProviderItem {\n config: ProviderConfig;\n data: ProviderData;\n error: unknown;\n}\n\ntype ProviderState = {\n events: ConsumableEvents;\n list: Record<string, ProviderItem>;\n};\ninterface ProviderActions {\n addProvider: (id: string, config: ProviderConfig) => void;\n removeProvider: (id: string) => void;\n updateStatus: <K extends keyof ProviderData>(\n id: string,\n key: K,\n value: ProviderData[K]\n ) => void;\n\n _produceEventsWhenUpdatingStatus: <K extends keyof ProviderData>(\n provider: ProviderItem,\n id: string,\n key: K,\n value: ProviderData[K]\n ) => void;\n}\n\ninterface ProviderSelectors {\n /**\n * Provider has a limited state to itself, to be compatible with legacy, we try to produce same object as legacy\n * which includes namespace state as well.\n */\n guessNamespacesState: (id: string) => InternalProviderState;\n}\n\nexport type ProviderStore = ProviderState & ProviderActions & ProviderSelectors;\ntype ProvidersStateCreator = StateCreator<State, [], [], ProviderStore>;\n\nconst providersStore: ProvidersStateCreator = (set, get) => ({\n events: new ConsumableEvents(),\n\n list: {},\n addProvider: (id, config) => {\n const item = {\n data: {\n installed: false,\n },\n error: '',\n config,\n };\n\n set(\n produce((state: State) => {\n state.providers.list[id] = item;\n })\n );\n },\n removeProvider: (id) => {\n set(\n produce((state: State) => {\n delete state.providers.list[id];\n })\n );\n },\n updateStatus: (id, key, value) => {\n const provider = get().providers.list[id];\n if (!provider) {\n throw new Error(`No namespace namespace with '${id}' found.`);\n }\n\n get().providers._produceEventsWhenUpdatingStatus(provider, id, key, value);\n\n set(\n produce((state: State) => {\n state.providers.list[id].data[key] = value;\n })\n );\n },\n guessNamespacesState: (providerId: string): InternalProviderState => {\n return guessProviderStateSelector(get(), providerId);\n },\n\n _produceEventsWhenUpdatingStatus: (_provider, id, key, _value) => {\n if (key === 'installed') {\n const event: ProviderDetectedEvent = {\n type: 'provider_detected',\n provider: id,\n };\n\n get().providers.events.push(event);\n }\n },\n});\n\nexport { providersStore };\n", "import type { Actions, Context, Operators } from '../hub/namespaces/types.js';\nimport type { AnyFunction, FunctionWithContext } from '../types/actions.js';\n\nexport interface ActionByBuilder<T, Context> {\n actionName: keyof T;\n and: Operators<T>;\n or: Operators<T>;\n after: Operators<T>;\n before: Operators<T>;\n action: FunctionWithContext<T[keyof T], Context>;\n}\n\n/*\n * TODO:\n * Currently, to use this builder you will write something like this:\n * new ActionBuilder<EvmActions, 'disconnect'>('disconnect').after(....)\n *\n * I couldn't figure it out to be able typescript infer the constructor value as key of actions.\n * Ideal usage:\n * new ActionBuilder<EvmActions>('disconnect').after(....)\n *\n */\nexport class ActionBuilder<T extends Actions<T>, K extends keyof T> {\n readonly name: K;\n #and: Operators<T> = new Map();\n #or: Operators<T> = new Map();\n #after: Operators<T> = new Map();\n #before: Operators<T> = new Map();\n #action: FunctionWithContext<T[keyof T], Context<T>> | undefined;\n\n constructor(name: K) {\n this.name = name;\n }\n\n public and(action: FunctionWithContext<AnyFunction, Context<T>>) {\n if (!this.#and.has(this.name)) {\n this.#and.set(this.name, []);\n }\n this.#and.get(this.name)?.push(action);\n return this;\n }\n\n public or(action: FunctionWithContext<AnyFunction, Context<T>>) {\n if (!this.#or.has(this.name)) {\n this.#or.set(this.name, []);\n }\n this.#or.get(this.name)?.push(action);\n return this;\n }\n\n public before(action: FunctionWithContext<AnyFunction, Context<T>>) {\n if (!this.#before.has(this.name)) {\n this.#before.set(this.name, []);\n }\n this.#before.get(this.name)?.push(action);\n return this;\n }\n\n public after(action: FunctionWithContext<AnyFunction, Context<T>>) {\n if (!this.#after.has(this.name)) {\n this.#after.set(this.name, []);\n }\n this.#after.get(this.name)?.push(action);\n return this;\n }\n\n public action(action: FunctionWithContext<T[keyof T], Context<T>>) {\n this.#action = action;\n return this;\n }\n\n public build(): ActionByBuilder<T, Context<T>> {\n if (!this.#action) {\n throw new Error('Your action builder should includes an action.');\n }\n\n return {\n actionName: this.name,\n action: this.#action,\n before: this.#before,\n after: this.#after,\n and: this.#and,\n or: this.#or,\n };\n }\n}\n", "/*\n * It is not a good idea to re-export all of CAIP because if they have a breaking change, we will break as well.\n * It would be better to create an abstraction over them and export our own interface to ensure it is under our control.\n */\nexport * as CAIP from 'caip';\n\nexport { generateStoreId } from '../hub/helpers.js';\nexport * from './versions.js';\n", "/**\n * Standardizes an unknown error into an Error object and throws it.\n * If the input is already an Error, it's thrown directly.\n * Otherwise, a new Error is created with the input's message or string representation.\n *\n * @param e - The unknown error object.\n * @throws {Error} - The standardized Error object.\n */\nexport function parseErrorAndThrowStandardizeError(e: unknown): never {\n if (e instanceof Error) {\n throw e;\n }\n\n let errorMessage: string;\n if (\n typeof e === 'object' &&\n e !== null &&\n 'message' in e &&\n typeof e.message === 'string'\n ) {\n errorMessage = e.message;\n } else if (typeof e === 'string') {\n errorMessage = e;\n } else {\n errorMessage = String(e);\n }\n\n const err = new Error(errorMessage) as Error & {\n code?: unknown;\n data?: unknown;\n };\n\n if (typeof e === 'object' && e !== null) {\n if ('code' in e) {\n err.code = e.code;\n }\n if ('data' in e) {\n err.data = e.data;\n }\n }\n\n throw err;\n}\n", "import type { Context } from '../../hub/namespaces/mod.js';\n\nimport { parseErrorAndThrowStandardizeError } from './utils.js';\n\n/**\n * Standardizes an unknown error into an Error object and throws it.\n * If the input is already an Error, it's thrown directly.\n * Otherwise, a new Error is created with the input's message or string representation.\n * Note: The parseErrorAndThrowStandardizeError function is defined as a separate function, so that it can be used independently.\n *\n * @param _context - The context.\n * @param e - The unknown error object.\n * @throws {Error} - The standardized Error object.\n */\nexport function standardizeAndThrowError(_context: Context, e: unknown): never {\n parseErrorAndThrowStandardizeError(e);\n}\n", "import type { Context } from '../../hub/namespaces/mod.js';\n\nexport function intoConnectionFinished(context: Context) {\n const [, setState] = context.state();\n setState('connecting', false);\n}\n\nexport const recommended = [['connect', intoConnectionFinished] as const];\n", "import { AccountId } from 'caip';\n\nexport function isValidCaipAddress(address: string): boolean {\n try {\n AccountId.parse(address);\n return true;\n } catch {\n return false;\n }\n}\n", "import type {\n Accounts,\n AccountsWithActiveChain,\n} from './../../types/accounts.js';\nimport type { Context } from '../../hub/namespaces/mod.js';\n\nimport { isValidCaipAddress } from './helpers.js';\n\nexport function connectAndUpdateStateForSingleNetwork(\n context: Context,\n accounts: Accounts\n) {\n if (!accounts.every(isValidCaipAddress)) {\n throw new Error(\n `Your provider should format account addresses in CAIP-10 format. Your provided accounts: ${accounts}`\n );\n }\n\n const [, setState] = context.state();\n setState('accounts', accounts);\n setState('connected', true);\n return accounts;\n}\n\nexport function connectAndUpdateStateForMultiNetworks(\n context: Context,\n accounts: AccountsWithActiveChain\n) {\n if (!accounts.accounts.every(isValidCaipAddress)) {\n throw new Error(\n `Your provider should format account addresses in CAIP-10 format. Your provided accounts: ${accounts.accounts}`\n );\n }\n\n const [, setState] = context.state();\n setState('accounts', accounts.accounts);\n setState('network', accounts.network);\n setState('connected', true);\n return accounts;\n}\n\nexport const recommended = [];\n", "import type { Context } from '../../hub/namespaces/mod.js';\n\nexport function intoConnecting(context: Context) {\n const [, setState] = context.state();\n setState('connecting', true);\n}\n\n// Please consider if you are going to add something here, make sure it works on all namespaces.\nexport const recommended = [['connect', intoConnecting] as const];\n", "import type { ConnectOptions, EvmActions, ProviderAPI } from './types.js';\nimport type { Context } from '../../hub/namespaces/mod.js';\nimport type { CanEagerConnect } from '../../hub/namespaces/types.js';\nimport type { FunctionWithContext } from '../../types/actions.js';\n\nimport { recommended as commonRecommended } from '../common/actions.js';\n\nimport {\n filterAndGetEvmBlockchainNames,\n formatAccountsToCAIP,\n getAccounts,\n switchOrAddNetwork,\n} from './utils.js';\n\nexport const recommended = [...commonRecommended];\nexport function connect(\n instance: () => ProviderAPI,\n options?: ConnectOptions\n): FunctionWithContext<EvmActions['connect'], Context> {\n return async (_context, 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 const result = await getAccounts(evmInstance);\n\n const formattedAccounts = formatAccountsToCAIP(\n result.accounts,\n result.chainId\n );\n\n return {\n accounts: formattedAccounts,\n network: result.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", "import type { Context } from '../../hub/namespaces/mod.js';\n\nexport function disconnect(context: Context): void {\n const [, setState] = context.state();\n setState('network', null);\n setState('accounts', null);\n setState('connected', false);\n setState('connecting', false);\n}\n\nexport const recommended = [['disconnect', disconnect] as const];\n", "import type { Chain, ChainId, ProviderAPI } from './types.js';\nimport type { CaipAccount } from '../../types/accounts.js';\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 '../../mod.js';\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 { recommended as commonRecommended } from '../common/after.js';\n\nexport const recommended = [...commonRecommended];\n", "import type { Context } from '../../hub/namespaces/mod.js';\n\nexport function intoConnectionFinished(context: Context) {\n const [, setState] = context.state();\n setState('connecting', false);\n}\n\nexport const recommended = [['connect', intoConnectionFinished] as const];\n", "import { connectAndUpdateStateForMultiNetworks } from '../common/mod.js';\n\nexport const recommended = [\n ['connect', connectAndUpdateStateForMultiNetworks] as const,\n];\n", "import type { StoreApi } from 'zustand/vanilla';\n\nimport { createStore as createZustandStore } from 'zustand/vanilla';\n\nimport { extend, type Store } from './extend.js';\nimport { hubStore, type HubStore } from './hub.js';\nimport { namespacesStore, type NamespaceStore } from './namespaces.js';\nimport { providersStore, type ProviderStore } from './providers.js';\n\n/************ State ************/\n\nexport interface State {\n hub: HubStore;\n providers: ProviderStore;\n namespaces: NamespaceStore;\n}\n\nexport type RawStore = StoreApi<State>;\n\nexport const createStore = (): Store => {\n const store = createZustandStore<State>((...api) => {\n return {\n hub: hubStore(...api),\n providers: providersStore(...api),\n namespaces: namespacesStore(...api),\n };\n });\n\n return extend(store);\n};\n", "/************ Namespace ************/\n\nimport type { StateCreator } from 'zustand';\n\nimport { produce } from 'immer';\n\nimport {\n ConsumableEvents,\n type NamespaceConnectedEvent,\n type NamespaceDisconnectedEvent,\n type NamespaceSwitchedAccountEvent,\n type NamespaceSwitchedNetworkEvent,\n} from './events.js';\nimport { namespaceStateSelector, type State } from './mod.js';\n\n// Currently, namespace doesn't has any config.\nexport type NamespaceConfig = object;\n\nexport interface NamespaceData {\n accounts: null | string[];\n network: null | string;\n connected: boolean;\n connecting: boolean;\n}\n\ninterface NamespaceInfo {\n providerId: string;\n namespaceId: string;\n}\n\ninterface NamespaceItem {\n info: NamespaceInfo;\n data: NamespaceData;\n error: unknown;\n}\n\ntype NamespaceState = {\n events: InstanceType<typeof ConsumableEvents>;\n list: Record<string, NamespaceItem>;\n};\n\ninterface NamespaceActions {\n addNamespace: (id: string, config: NamespaceInfo) => void;\n updateStatus: <K extends keyof NamespaceData>(\n id: string,\n key: K,\n value: NamespaceData[K]\n ) => void;\n\n _produceEventsWhenUpdatingStatus: <K extends keyof NamespaceData>(\n namespace: NamespaceItem,\n id: string,\n key: K,\n value: NamespaceData[K]\n ) => void;\n}\ninterface NamespaceSelectors {\n getNamespaceData(storeId: string): NamespaceData;\n}\n\nexport type NamespaceStore = NamespaceState &\n NamespaceActions &\n NamespaceSelectors;\ntype NamespaceStateCreator = StateCreator<State, [], [], NamespaceStore>;\n\nconst namespacesStore: NamespaceStateCreator = (set, get) => ({\n events: new ConsumableEvents(),\n\n list: {},\n addNamespace: (id, info) => {\n const data: NamespaceData = {\n accounts: null,\n network: null,\n connected: false,\n connecting: false,\n };\n\n const item = {\n data,\n error: '',\n info,\n };\n\n set(\n produce((state: State) => {\n state.namespaces.list[id] = item;\n })\n );\n },\n updateStatus: (id, key, value) => {\n const ns = get().namespaces.list[id];\n if (!ns) {\n throw new Error(`No namespace with '${id}' found.`);\n }\n\n get().namespaces._produceEventsWhenUpdatingStatus(ns, id, key, value);\n\n // Updating state\n set(\n produce((state: State) => {\n state.namespaces.list[id].data[key] = value;\n })\n );\n },\n getNamespaceData(storeId) {\n return namespaceStateSelector(get(), storeId);\n },\n\n _produceEventsWhenUpdatingStatus: (namespace, id, key, value) => {\n if (key === 'accounts') {\n // check for both null and empty array\n const isAccountsEmpty =\n Object.is(value, null) || (Array.isArray(value) && value.length === 0);\n\n if (isAccountsEmpty) {\n const currentConnectedStatus = get().namespaces.list[id].data.connected;\n if (currentConnectedStatus) {\n const event: NamespaceDisconnectedEvent = {\n type: 'namespace_disconnected',\n provider: namespace.info.providerId,\n namespace: namespace.info.namespaceId,\n };\n\n get().namespaces.events.push(event);\n }\n // Skip emitting disconnect event, if the `connected` is false\n } else {\n const currentAccounts = get().namespaces.list[id].data.accounts;\n\n if (!currentAccounts) {\n const event: NamespaceConnectedEvent = {\n type: 'namespace_connected',\n provider: namespace.info.providerId,\n namespace: namespace.info.namespaceId,\n accounts: value as string[],\n };\n\n get().namespaces.events.push(event);\n } else {\n const areSameAccounts =\n currentAccounts.sort().toString() ===\n (value as string[]).sort().toString();\n\n if (!areSameAccounts) {\n const event: NamespaceSwitchedAccountEvent = {\n type: 'namespace_account_switched',\n provider: namespace.info.providerId,\n namespace: namespace.info.namespaceId,\n previousAccounts: currentAccounts,\n accounts: value as string[],\n };\n\n get().namespaces.events.push(event);\n }\n }\n }\n } else if (key === 'network') {\n const currentNetwork = get().namespaces.list[id].data.network;\n\n const event: NamespaceSwitchedNetworkEvent = {\n type: 'namespace_network_switched',\n provider: namespace.info.providerId,\n namespace: namespace.info.namespaceId,\n network: value as string,\n previousNetwork: currentNetwork,\n };\n\n get().namespaces.events.push(event);\n }\n },\n});\n\nexport { namespacesStore };\n", "import type { Namespace } from '../../namespaces/common/types.js';\nimport type {\n GenerateDeepLink,\n State as InternalProviderState,\n} from '../provider/mod.js';\nimport type { BlockchainMeta, SignerFactory } from 'rango-types';\nimport type { StateCreator } from 'zustand';\n\nimport { produce } from 'immer';\n\nimport { ConsumableEvents, type ProviderDetectedEvent } from './events.js';\nimport { guessProviderStateSelector, type State } from './mod.js';\n\ntype Browsers = 'firefox' | 'chrome' | 'edge' | 'brave' | 'homepage';\ntype Property<N extends string, V> = { name: N; value: V };\n\ntype NamespacesProperty = Property<\n 'namespaces',\n {\n selection: 'single' | 'multiple';\n data: {\n label: string;\n id: string;\n value: Namespace;\n unsupported?: boolean;\n getSupportedChains: (chains: BlockchainMeta[]) => BlockchainMeta[];\n }[];\n }\n>;\ntype DerivationPathProperty = Property<\n 'derivationPath',\n {\n data: {\n id: string;\n label: string;\n namespace: Namespace;\n generateDerivationPath: (index: string) => string;\n }[];\n }\n>;\ntype DetailsProperty = Property<\n 'details',\n {\n mobileWallet?: boolean;\n showOnMobile?: boolean;\n isContractWallet?: boolean;\n }\n>;\ntype SignersProperty = Property<\n 'signers',\n {\n getSigners: () => Promise<SignerFactory>;\n }\n>;\n\nexport type ProviderMetadata = {\n name: string;\n icon: string;\n extensions: Partial<Record<Browsers, string>>;\n properties?: Array<\n | NamespacesProperty\n | DerivationPathProperty\n | DetailsProperty\n | SignersProperty\n >;\n};\n\nexport interface ProviderConfig {\n metadata: ProviderMetadata;\n deepLink?: GenerateDeepLink;\n}\n\nexport type ProviderInfo = ProviderConfig;\n\ninterface ProviderData {\n installed: boolean;\n}\n\ninterface ProviderItem {\n config: ProviderConfig;\n data: ProviderData;\n error: unknown;\n}\n\ntype ProviderState = {\n events: ConsumableEvents;\n list: Record<string, ProviderItem>;\n};\ninterface ProviderActions {\n addProvider: (id: string, config: ProviderConfig) => void;\n removeProvider: (id: string) => void;\n updateStatus: <K extends keyof ProviderData>(\n id: string,\n key: K,\n value: ProviderData[K]\n ) => void;\n\n _produceEventsWhenUpdatingStatus: <K extends keyof ProviderData>(\n provider: ProviderItem,\n id: string,\n key: K,\n value: ProviderData[K]\n ) => void;\n}\n\ninterface ProviderSelectors {\n /**\n * Provider has a limited state to itself, to be compatible with legacy, we try to produce same object as legacy\n * which includes namespace state as well.\n */\n guessNamespacesState: (id: string) => InternalProviderState;\n}\n\nexport type ProviderStore = ProviderState & ProviderActions & ProviderSelectors;\ntype ProvidersStateCreator = StateCreator<State, [], [], ProviderStore>;\n\nconst providersStore: ProvidersStateCreator = (set, get) => ({\n events: new ConsumableEvents(),\n\n list: {},\n addProvider: (id, config) => {\n const item = {\n data: {\n installed: false,\n },\n error: '',\n config,\n };\n\n set(\n produce((state: State) => {\n state.providers.list[id] = item;\n })\n );\n },\n removeProvider: (id) => {\n set(\n produce((state: State) => {\n delete state.providers.list[id];\n })\n );\n },\n updateStatus: (id, key, value) => {\n const provider = get().providers.list[id];\n if (!provider) {\n throw new Error(`No namespace namespace with '${id}' found.`);\n }\n\n get().providers._produceEventsWhenUpdatingStatus(provider, id, key, value);\n\n set(\n produce((state: State) => {\n state.providers.list[id].data[key] = value;\n })\n );\n },\n guessNamespacesState: (providerId: string): InternalProviderState => {\n return guessProviderStateSelector(get(), providerId);\n },\n\n _produceEventsWhenUpdatingStatus: (_provider, id, key, _value) => {\n if (key === 'installed') {\n const event: ProviderDetectedEvent = {\n type: 'provider_detected',\n provider: id,\n };\n\n get().providers.events.push(event);\n }\n },\n});\n\nexport { providersStore };\n", "import type { Actions, Context, Operators } from '../hub/namespaces/types.js';\nimport type { AnyFunction, FunctionWithContext } from '../types/actions.js';\n\nexport interface ActionByBuilder<T, Context> {\n actionName: keyof T;\n and: Operators<T>;\n or: Operators<T>;\n after: Operators<T>;\n before: Operators<T>;\n action: FunctionWithContext<T[keyof T], Context>;\n}\n\n/*\n * TODO:\n * Currently, to use this builder you will write something like this:\n * new ActionBuilder<EvmActions, 'disconnect'>('disconnect').after(....)\n *\n * I couldn't figure it out to be able typescript infer the constructor value as key of actions.\n * Ideal usage:\n * new ActionBuilder<EvmActions>('disconnect').after(....)\n *\n */\nexport class ActionBuilder<T extends Actions<T>, K extends keyof T> {\n readonly name: K;\n #and: Operators<T> = new Map();\n #or: Operators<T> = new Map();\n #after: Operators<T> = new Map();\n #before: Operators<T> = new Map();\n #action: FunctionWithContext<T[keyof T], Context<T>> | undefined;\n\n constructor(name: K) {\n this.name = name;\n }\n\n public and(action: FunctionWithContext<AnyFunction, Context<T>>) {\n if (!this.#and.has(this.name)) {\n this.#and.set(this.name, []);\n }\n this.#and.get(this.name)?.push(action);\n return this;\n }\n\n public or(action: FunctionWithContext<AnyFunction, Context<T>>) {\n if (!this.#or.has(this.name)) {\n this.#or.set(this.name, []);\n }\n this.#or.get(this.name)?.push(action);\n return this;\n }\n\n public before(action: FunctionWithContext<AnyFunction, Context<T>>) {\n if (!this.#before.has(this.name)) {\n this.#before.set(this.name, []);\n }\n this.#before.get(this.name)?.push(action);\n return this;\n }\n\n public after(action: FunctionWithContext<AnyFunction, Context<T>>) {\n if (!this.#after.has(this.name)) {\n this.#after.set(this.name, []);\n }\n this.#after.get(this.name)?.push(action);\n return this;\n }\n\n public action(action: FunctionWithContext<T[keyof T], Context<T>>) {\n this.#action = action;\n return this;\n }\n\n public build(): ActionByBuilder<T, Context<T>> {\n if (!this.#action) {\n throw new Error('Your action builder should includes an action.');\n }\n\n return {\n actionName: this.name,\n action: this.#action,\n before: this.#before,\n after: this.#after,\n and: this.#and,\n or: this.#or,\n };\n }\n}\n", "/*\n * It is not a good idea to re-export all of CAIP because if they have a breaking change, we will break as well.\n * It would be better to create an abstraction over them and export our own interface to ensure it is under our control.\n */\nexport * as CAIP from 'caip';\n\nexport { generateStoreId } from '../hub/helpers.js';\nexport * from './versions.js';\n", "import { AccountId } from 'caip';\n\nexport function isValidCaipAddress(address: string): boolean {\n try {\n AccountId.parse(address);\n return true;\n } catch {\n return false;\n }\n}\n", "import type {\n Accounts,\n AccountsWithActiveChain,\n} from './../../types/accounts.js';\nimport type { Context } from '../../hub/namespaces/mod.js';\n\nimport { isValidCaipAddress } from './helpers.js';\n\nexport function connectAndUpdateStateForSingleNetwork(\n context: Context,\n accounts: Accounts\n) {\n if (!accounts.every(isValidCaipAddress)) {\n throw new Error(\n `Your provider should format account addresses in CAIP-10 format. Your provided accounts: ${accounts}`\n );\n }\n\n const [, setState] = context.state();\n setState('accounts', accounts);\n setState('connected', true);\n return accounts;\n}\n\nexport function connectAndUpdateStateForMultiNetworks(\n context: Context,\n accounts: AccountsWithActiveChain\n) {\n if (!accounts.accounts.every(isValidCaipAddress)) {\n throw new Error(\n `Your provider should format account addresses in CAIP-10 format. Your provided accounts: ${accounts.accounts}`\n );\n }\n\n const [, setState] = context.state();\n setState('accounts', accounts.accounts);\n setState('network', accounts.network);\n setState('connected', true);\n return accounts;\n}\n\nexport const recommended = [];\n", "import type { Context } from '../../hub/namespaces/mod.js';\n\nexport function intoConnecting(context: Context) {\n const [, setState] = context.state();\n setState('connecting', true);\n}\n\n// Please consider if you are going to add something here, make sure it works on all namespaces.\nexport const recommended = [['connect', intoConnecting] as const];\n", "import { beforeRecommended } from '../common/mod.js';\n\nexport const recommended = [...beforeRecommended];\n", "import type { EvmActions, ProviderAPI } from './types.js';\n\nimport { AccountId } from 'caip';\n\nimport { ActionBuilder } from '../../mod.js';\nimport { ChangeAccountSubscriberBuilder } from '../common/hooks/changeAccountSubscriber.js';\nimport {\n connectAndUpdateStateForMultiNetworks,\n intoConnecting,\n intoConnectionFinished,\n} from '../common/mod.js';\n\nimport { CAIP_NAMESPACE } from './constants.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>()\n .getInstance(getInstance)\n .validateEventPayload(\n (accounts) =>\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 accounts && accounts.length !== 0\n )\n .format(async (instance, accounts) => {\n const chainId = await instance.request({ method: 'eth_chainId' });\n return accounts.map((account) =>\n AccountId.format({\n address: account,\n chainId: {\n namespace: CAIP_NAMESPACE,\n reference: chainId,\n },\n })\n );\n })\n .addEventListener((instance, callback) => {\n instance.on('accountsChanged', callback);\n })\n .removeEventListener((instance, callback) => {\n instance.removeListener?.('accountsChanged', callback);\n });\n", "import type {\n Actions,\n SubscriberCleanUp,\n} from '../../../hub/namespaces/types.js';\nimport type { Subscriber } from '../../../mod.js';\nimport type { AutoImplementedActionsByRecommended } from '../types.js';\n\nexport class ChangeAccountSubscriberBuilder<EventType, ProviderAPI> {\n #getInstance: (() => ProviderAPI) | null = null;\n #format:\n | ((instance: ProviderAPI, event: EventType) => Promise<string[]>)\n | null = null;\n #validateEventPayload: ((event: EventType) => boolean) | null = null;\n\n #addEventListener:\n | ((\n instance: ProviderAPI,\n callback: (event: EventType) => void\n ) => (() => void) | void)\n | null = null;\n #removeEventListener:\n | ((instance: ProviderAPI, callback: (event: EventType) => void) => void)\n | null = null;\n\n /**\n * Sets the function that provides the provider API instance.\n *\n * @param operator - Function that returns the provider API instance\n * @returns The builder instance for method chaining\n * @example\n * ```typescript\n * builder.getInstance(() => window.ethereum)\n * ```\n */\n public getInstance(operator: () => ProviderAPI) {\n this.#getInstance = operator;\n return this;\n }\n\n /**\n * Sets the formatter function that converts provider events to account strings.\n *\n * @param operator - Function that takes a provider instance and event, returns array of account strings\n * @returns The builder instance for method chaining\n * @example\n * ```typescript\n * builder.format(async (instance, event) => event.accounts || [])\n * ```\n */\n public format(\n operator: (instance: ProviderAPI, event: EventType) => Promise<string[]>\n ) {\n this.#format = operator;\n return this;\n }\n\n /**\n * Sets the event payload validation function (optional).\n *\n * @param operator - Function that validates if an event payload is valid\n * @returns The builder instance for method chaining\n * @example\n * ```typescript\n * builder.validateEventPayload(event => !!event)\n * ```\n */\n public validateEventPayload(operator: (event: EventType) => boolean) {\n this.#validateEventPayload = operator;\n return this;\n }\n\n /**\n * Sets the event listener attachment function.\n *\n * @param operator - Function that attaches an event listener and optionally returns a cleanup function\n * @returns The builder instance for method chaining\n * @example\n * ```typescript\n * builder.addEventListener((instance, callback) => {\n * return instance.on('accountsChanged', callback);\n * })\n * ```\n */\n public addEventListener(\n operator: (\n instance: ProviderAPI,\n callback: (event: EventType) => void\n ) => (() => void) | void\n ) {\n this.#addEventListener = operator;\n return this;\n }\n\n /**\n * Sets the event listener removal function.\n *\n * @param operator - Function that removes an event listener from the provider\n * @returns The builder instance for method chaining\n * @example\n * ```typescript\n * builder.removeEventListener((instance, callback) => instance.off('accountsChanged', callback))\n * ```\n */\n public removeEventListener(\n operator: (\n instance: ProviderAPI,\n callback: (event: EventType) => void\n ) => void\n ) {\n this.#removeEventListener = operator;\n return this;\n }\n public build<\n ActionsType extends Actions<ActionsType> &\n Actions<AutoImplementedActionsByRecommended>\n >(): [Subscriber<ActionsType>, SubscriberCleanUp<ActionsType>] {\n if (this.#getInstance === null) {\n throw new Error(this.#getErrorMessage('getInstance'));\n }\n if (this.#format === null) {\n throw new Error(this.#getErrorMessage('format'));\n }\n if (this.#addEventListener === null) {\n throw new Error(this.#getErrorMessage('addEventListener'));\n }\n if (this.#removeEventListener === null) {\n throw new Error(this.#getErrorMessage('removeEventListener'));\n }\n\n /**\n * Capture current operator state at build time to ensure immutability.\n *\n * This creates a snapshot of all operators, preventing the built subscriber\n * from being affected by subsequent changes to the builder instance.\n * Each call to build() gets its own isolated set of operators, allowing\n * the builder to be reused for creating multiple independent subscribers.\n */\n const getInstance = this.#getInstance;\n const format = this.#format;\n const addEventListener = this.#addEventListener;\n const removeEventListener = this.#removeEventListener;\n const validateEventPayload = this.#validateEventPayload;\n let subscriber: (event: EventType) => void;\n let unsubscribe: (() => void) | void;\n return [\n async (context) => {\n const [, setState] = context.state();\n const instance = getInstance();\n\n if (!instance) {\n throw new Error(\n 'Trying to subscribe to your wallet, but seems its instance is not available.'\n );\n }\n subscriber = async (event) => {\n if (!!validateEventPayload && !validateEventPayload(event)) {\n context.action('disconnect');\n return;\n }\n setState('accounts', await format(instance, event));\n };\n unsubscribe = addEventListener(instance, subscriber);\n },\n (_, err) => {\n /**\n * Call the cleanup function if addEventListener returned one.\n * This handles providers that return an unsubscribe function from their event listeners.\n */\n if (unsubscribe && typeof unsubscribe === 'function') {\n unsubscribe();\n }\n const instance = getInstance();\n\n /**\n * Always call removeEventListener as well to handle the on/off pattern.\n * This ensures cleanup works regardless of which pattern the provider uses.\n */\n removeEventListener(instance, subscriber);\n\n // subscriber can be passed to `or`, it will get the error and should rethrow error to pass the error to next `or` or throw error.\n return err;\n },\n ];\n }\n #getErrorMessage(operatorName: string) {\n return `Required \"${operatorName}\" operation has not been set for \"changeAccountSubscriber\"`;\n }\n}\n", "import type { EvmActions } from '@rango-dev/wallets-core/namespaces/evm';\n\nimport { NamespaceBuilder } from '@rango-dev/wallets-core';\nimport {\n type CaipAccount,\n builders as commonBuilders,\n} from '@rango-dev/wallets-core/namespaces/common';\nimport {\n builders,\n CAIP_NAMESPACE,\n} from '@rango-dev/wallets-core/namespaces/evm';\nimport { CAIP } from '@rango-dev/wallets-core/utils';\n\nimport { WALLET_ID } from '../constants.js';\nimport { setDerivationPath } from '../state.js';\nimport {\n getEthereumAccounts,\n standardizeAndThrowLedgerError,\n} from '../utils.js';\n\nconst connect = builders\n .connect()\n .action(async function (_context, _chain, options) {\n if (!options?.derivationPath) {\n throw new Error('Derivation Path can not be empty.');\n }\n\n setDerivationPath(options.derivationPath);\n\n const result = await getEthereumAccounts();\n\n const formatAccounts = result.accounts.map(\n (account) =>\n CAIP.AccountId.format({\n address: account,\n chainId: {\n namespace: CAIP_NAMESPACE,\n reference: result.chainId,\n },\n }) as CaipAccount\n );\n\n return {\n accounts: formatAccounts,\n network: result.chainId,\n };\n })\n .or(standardizeAndThrowLedgerError)\n .build();\n\nconst disconnect = commonBuilders.disconnect<EvmActions>().build();\n\nconst evm = new NamespaceBuilder<EvmActions>('EVM', WALLET_ID)\n .action(connect)\n .action(disconnect)\n .build();\n\nexport { evm };\n", "import type { CaipAccount } from '@rango-dev/wallets-core/namespaces/common';\nimport type { SolanaActions } from '@rango-dev/wallets-core/namespaces/solana';\n\nimport { NamespaceBuilder } from '@rango-dev/wallets-core';\nimport { builders as commonBuilders } from '@rango-dev/wallets-core/namespaces/common';\nimport {\n builders,\n CAIP_NAMESPACE,\n} from '@rango-dev/wallets-core/namespaces/solana';\nimport { CAIP } from '@rango-dev/wallets-core/utils';\n\nimport { WALLET_ID } from '../constants.js';\nimport { setDerivationPath } from '../state.js';\nimport { getSolanaAccounts, standardizeAndThrowLedgerError } from '../utils.js';\n\nconst connect = builders\n .connect()\n .action(async function (_context, options) {\n if (!options?.derivationPath) {\n throw new Error('Derivation Path can not be empty.');\n }\n\n setDerivationPath(options.derivationPath);\n\n const result = await getSolanaAccounts();\n\n const formatAccounts = result.accounts.map(\n (account) =>\n CAIP.AccountId.format({\n address: account,\n chainId: {\n namespace: CAIP_NAMESPACE,\n reference: result.chainId,\n },\n }) as CaipAccount\n );\n\n return formatAccounts;\n })\n .or(standardizeAndThrowLedgerError)\n .build();\n\nconst disconnect = commonBuilders.disconnect<SolanaActions>().build();\n\nconst solana = new NamespaceBuilder<SolanaActions>('Solana', WALLET_ID)\n .action(connect)\n .action(disconnect)\n .build();\n\nexport { solana };\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 { ledger as ledgerInstance } from './utils.js';\n\nconst buildProvider = () =>\n new ProviderBuilder(WALLET_ID)\n .init(function (context) {\n const [, setState] = context.state();\n\n if (ledgerInstance()) {\n setState('installed', true);\n }\n })\n .config('metadata', metadata)\n .add('solana', solana)\n .add('evm', evm)\n .build();\n\nexport { buildProvider };\n", "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"],
5
+ "mappings": "+PCQO,SAASA,GAAgBC,EAAoBC,EAAmB,CACrE,MAAO,GAAGD,CAAU,KAAKC,CAAS,EACpC,CAFgBF,EAAAA,GAAAA,KAAAG,EAAAH,GAAA,iBAAA,ECOT,SAASI,GAGdC,EAASC,EAAsC,CAC/C,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,+CAA+C,EAGjE,IAAMC,EAASF,EAAK,KAAK,CAAC,CAACG,CAAO,IAAMA,IAAYF,CAAa,EAEjE,GAAI,CAACC,EACH,MAAM,IAAI,MACR,6DAA6D,OAAO,KAClEF,CACF,EAAE,KAAK,IAAI,CAAC,EACd,EAEF,OAAOE,CACT,CAlBgBH,EAAAA,GAAAA,KAAAD,EAAAC,GAAA,aAAA,EA4BT,SAASK,GAAoC,CAClD,IAAMC,EAA+B,CAAC,EAChCC,EAAyB,CAC7B,QAAS,CAACC,EAAQC,KAChBH,EAAS,KAAK,CAACE,EAAQC,CAAK,CAAC,EACtBF,GAET,MAAO,IACED,CAEX,EACA,OAAOC,CACT,CAZgBF,EAAAA,EAAAA,KAAAN,EAAAM,EAAA,gBAAA,EAcT,SAASK,GACdC,EACoB,CACpB,OAAON,EAAe,EAAE,QAAQ,QAASM,CAAQ,EAAE,MAAM,CAC3D,CAJgBD,EAAAA,GAAAA,KAAAX,EAAAW,GAAA,0CAAA,ECjDhB,OAAS,YAAAE,EAAU,eAAAC,OAAmB,4BACtC,MAAwD,cAcjD,IAAMC,GAAS,CACpB,KAAMC,GAAY,MACpB,EAEaC,GAAcC,EACdC,GAAmBC,EAAA,MAAO,CAAE,WAAAC,CAAW,IAAM,CACxD,IAAMC,EAAmC,CAAC,EAEpCC,EAAkBF,GAAY,KACjCG,GAAkBA,EAAc,YAAc,QACjD,EACMC,EAAeJ,GAAY,KAC9BG,GAAkBA,EAAc,YAAc,KACjD,EAEA,GAAID,EACF,GAAIA,EAAgB,eAAgB,CAClCG,EAAkBH,EAAgB,cAAc,EAChD,IAAMI,EAAW,MAAMC,EAAkB,EACzCN,EAAQ,KAAKK,CAAQ,CACvB,KACE,OAAM,IAAI,MAAM,mCAAmC,UAE5CF,EACT,GAAIA,EAAa,eAAgB,CAC/BC,EAAkBD,EAAa,cAAc,EAC7C,IAAME,EAAW,MAAME,EAAoB,EAC3CP,EAAQ,KAAKK,CAAQ,CACvB,KACE,OAAM,IAAI,MAAM,mCAAmC,MAGrD,OAAM,IAAI,MACR,2GAA2GN,GAAY,IACpHG,GAAkBA,EAAc,SACnC,CAAC,EACH,EAGF,OAAOF,CACT,EAnCgC,WAyCzB,IAAMQ,GACXA,EAEWC,GAAkEC,EAC7EC,GACG,CACH,IAAMC,EAAoC,CAAC,EAErCC,EAAqBF,EAAe,KACvCG,GAAUA,EAAM,OAASC,EAAS,QACrC,EACIF,GACFD,EAAgB,KAAKC,CAAkB,EAGzC,IAAMG,EAAmBL,EAAe,KACrCG,GAAUA,EAAM,OAASC,EAAS,MACrC,EACA,OAAIC,GACFJ,EAAgB,KAAKI,CAAgB,EAGhC,CACL,KAAM,SACN,IAAK,uFACL,YAAa,CACX,QACE,uGACJ,EACA,MAAO,QACP,gBAAAJ,EACA,aAAc,GACd,oBAAqB,CACnB,KAAM,CACJ,CACE,GAAI,WACJ,MAAO,kCACP,UAAW,MACX,uBAAyBK,GAAkB,gBAAgBA,CAAK,EAClE,EACA,CACE,GAAI,aACJ,MAAO,oCACP,UAAW,MACX,uBAAyBA,GAAkB,WAAWA,CAAK,OAC7D,EACA,CACE,GAAI,SACJ,MAAO,8BACP,UAAW,MACX,uBAAyBA,GAAkB,cAAcA,CAAK,EAChE,EACA,CACE,GAAI,sBACJ,MAAO,sBACP,UAAW,SACX,uBAAyBA,GAAkB,YAAYA,CAAK,GAC9D,EACA,CACE,GAAI,wBACJ,MAAO,wBACP,UAAW,SACX,uBAAyBA,GAAkB,eAAeA,CAAK,EACjE,CACF,CACF,EAEA,eAAgB,CACd,UAAW,SACX,KAAM,CACJ,CACE,MAAO,MACP,MAAO,MACP,GAAI,MACJ,mBAAqBC,GACnBA,EAAe,OAAQJ,GAAUA,EAAM,OAASC,EAAS,QAAQ,CACrE,EACA,CACE,MAAO,SACP,MAAO,SACP,GAAI,SACJ,mBAAqBG,GACnBA,EAAe,OAAQJ,GAAUA,EAAM,OAASC,EAAS,MAAM,CACnE,CACF,CACF,CACF,CACF,EApF+E,iBAsFzEI,EAAqDT,EAAA,KAAO,CAChE,OAAAU,GACA,YAAAC,GACA,QAAAC,GACA,WAAAd,GACA,cAAAC,EACF,GAN2D,0KC9J3Dc,GAAA,CAAA,EAAAC,EAAAD,GAAA,CAAA,WAAA,IAAAE,EAAA,YAAA,IAAAC,EAAAA,CAAAA,EAEO,SAASD,EAAWE,EAAwB,CACjD,GAAM,CAAC,CAAEC,CAAQ,EAAID,EAAQ,MAAM,EACnCC,EAAS,UAAW,IAAI,EACxBA,EAAS,WAAY,IAAI,EACzBA,EAAS,YAAa,EAAK,EAC3BA,EAAS,aAAc,EAAK,CAC9B,CANgBH,EAAAA,EAAAA,KAAAI,EAAAJ,EAAA,YAAA,EAQT,IAAMC,GAAc,CAAC,CAAC,aAAcD,CAAU,CAAU,ECV/DK,EAAA,CAAA,EAAAN,EAAAM,EAAA,CAAA,WAAA,IAAAL,EAAAA,CAAAA,EIsBO,IAAMM,GAAN,KAA6D,OAAA,CAAAF,EAAA,UAtBpE,MAsBoE,CAAAA,EAAA,KAAA,eAAA,CAAA,CACzD,KACTG,GAAqB,IAAI,IACzBC,GAAoB,IAAI,IACxBC,GAAuB,IAAI,IAC3BC,GAAwB,IAAI,IAC5BC,GAEA,YAAYC,EAAS,CACnB,KAAK,KAAOA,CACd,CAEO,IAAIC,EAAsD,CAC/D,OAAK,KAAKN,GAAK,IAAI,KAAK,IAAI,GAC1B,KAAKA,GAAK,IAAI,KAAK,KAAM,CAAC,CAAC,EAE7B,KAAKA,GAAK,IAAI,KAAK,IAAI,GAAG,KAAKM,CAAM,EAC9B,IACT,CAEO,GAAGA,EAAsD,CAC9D,OAAK,KAAKL,GAAI,IAAI,KAAK,IAAI,GACzB,KAAKA,GAAI,IAAI,KAAK,KAAM,CAAC,CAAC,EAE5B,KAAKA,GAAI,IAAI,KAAK,IAAI,GAAG,KAAKK,CAAM,EAC7B,IACT,CAEO,OAAOA,EAAsD,CAClE,OAAK,KAAKH,GAAQ,IAAI,KAAK,IAAI,GAC7B,KAAKA,GAAQ,IAAI,KAAK,KAAM,CAAC,CAAC,EAEhC,KAAKA,GAAQ,IAAI,KAAK,IAAI,GAAG,KAAKG,CAAM,EACjC,IACT,CAEO,MAAMA,EAAsD,CACjE,OAAK,KAAKJ,GAAO,IAAI,KAAK,IAAI,GAC5B,KAAKA,GAAO,IAAI,KAAK,KAAM,CAAC,CAAC,EAE/B,KAAKA,GAAO,IAAI,KAAK,IAAI,GAAG,KAAKI,CAAM,EAChC,IACT,CAEO,OAAOA,EAAqD,CACjE,OAAA,KAAKF,GAAUE,EACR,IACT,CAEO,OAAwC,CAC7C,GAAI,CAAC,KAAKF,GACR,MAAM,IAAI,MAAM,gDAAgD,EAGlE,MAAO,CACL,WAAY,KAAK,KACjB,OAAQ,KAAKA,GACb,OAAQ,KAAKD,GACb,MAAO,KAAKD,GACZ,IAAK,KAAKF,GACV,GAAI,KAAKC,EACX,CACF,CACF,EJ9EaR,GAAaI,EAAA,IAIxB,IAAIE,GACF,YACF,EAAE,OAAON,CAAgB,EAND,YAAA,EMCnB,SAASc,EAAmCC,EAAmB,CACpE,GAAIA,aAAa,MACf,MAAMA,EAGR,IAAIC,EAEF,OAAOD,GAAM,UACbA,IAAM,MACN,YAAaA,GACb,OAAOA,EAAE,SAAY,SAErBC,EAAeD,EAAE,QACR,OAAOA,GAAM,SACtBC,EAAeD,EAEfC,EAAe,OAAOD,CAAC,EAGzB,IAAME,EAAM,IAAI,MAAMD,CAAY,EAKlC,MAAI,OAAOD,GAAM,UAAYA,IAAM,OAC7B,SAAUA,IACZE,EAAI,KAAOF,EAAE,MAEX,SAAUA,IACZE,EAAI,KAAOF,EAAE,OAIXE,CACR,CAlCgBH,EAAAA,EAAAA,KAAAV,EAAAU,EAAA,oCAAA,ECMT,SAASI,GAAyBC,EAAmBJ,EAAmB,CAC7ED,EAAmCC,CAAC,CACtC,CAFgBG,EAAAA,GAAAA,KAAAd,EAAAc,GAAA,0BAAA,ECZT,SAASE,GAAuBlB,EAAkB,CACvD,GAAM,CAAC,CAAEC,CAAQ,EAAID,EAAQ,MAAM,EACnCC,EAAS,aAAc,EAAK,CAC9B,CAHgBiB,EAAAA,GAAAA,KAAAhB,EAAAgB,GAAA,wBAAA,ECAT,SAASC,EAAmBC,EAA0B,CAC3D,GAAI,CACF,OAAAC,EAAU,MAAMD,CAAO,EAChB,EACT,MAAQ,CACN,MAAO,EACT,CACF,CAPgBD,EAAAA,EAAAA,KAAAG,EAAAH,EAAA,oBAAA,ECMT,SAASI,GACdC,EACAC,EACA,CACA,GAAI,CAACA,EAAS,MAAMN,CAAkB,EACpC,MAAM,IAAI,MACR,4FAA4FM,CAAQ,EACtG,EAGF,GAAM,CAAC,CAAEC,CAAQ,EAAIF,EAAQ,MAAM,EACnC,OAAAE,EAAS,WAAYD,CAAQ,EAC7BC,EAAS,YAAa,EAAI,EACnBD,CACT,CAdgBF,EAAAA,GAAAA,KAAAD,EAAAC,GAAA,uCAAA,EAgBT,SAASI,GACdH,EACAC,EACA,CACA,GAAI,CAACA,EAAS,SAAS,MAAMN,CAAkB,EAC7C,MAAM,IAAI,MACR,4FAA4FM,EAAS,QAAQ,EAC/G,EAGF,GAAM,CAAC,CAAEC,CAAQ,EAAIF,EAAQ,MAAM,EACnC,OAAAE,EAAS,WAAYD,EAAS,QAAQ,EACtCC,EAAS,UAAWD,EAAS,OAAO,EACpCC,EAAS,YAAa,EAAI,EACnBD,CACT,CAfgBE,EAAAA,GAAAA,KAAAL,EAAAK,GAAA,uCAAA,ECtBT,SAASC,GAAeC,EAAkB,CAC/C,GAAM,CAAC,CAAEC,CAAQ,EAAID,EAAQ,MAAM,EACnCC,EAAS,aAAc,EAAI,CAC7B,CAHgBF,EAAAA,GAAAA,KAAAG,EAAAH,GAAA,gBAAA,EGEhB,OAA8B,kBAAAI,OAAsB,iKFJpDC,GAAA,CAAA,EAAAC,EAAAD,GAAA,CAAA,gBAAA,IAAAE,GAAA,iBAAA,IAAAC,GAAA,QAAA,IAAAC,GAAA,YAAA,IAAAC,EAAAA,CAAAA,ECEO,SAASC,EAAWC,EAAwB,CACjD,GAAM,CAAC,CAAEC,CAAQ,EAAID,EAAQ,MAAM,EACnCC,EAAS,UAAW,IAAI,EACxBA,EAAS,WAAY,IAAI,EACzBA,EAAS,YAAa,EAAK,EAC3BA,EAAS,aAAc,EAAK,CAC9B,CANgBF,EAAAA,EAAAA,KAAAG,EAAAH,EAAA,YAAA,EAQT,IAAMD,GAAc,CAAC,CAAC,aAAcC,CAAU,CAAU,ECV/DI,GAAA,CAAA,EAAAT,EAAAS,GAAA,CAAA,+BAAA,IAAAC,EAAA,qBAAA,IAAAC,EAAA,YAAA,IAAAC,EAAA,qBAAA,IAAAC,GAAA,eAAA,IAAAC,EAAA,cAAA,IAAAC,EAAA,mBAAA,IAAAC,CAAAA,CAAAA,ECAO,IAAMC,EAAiB,SDQ9B,IAAMC,GAAiB,GAEvB,eAAsBC,EAAYC,EAAuB,CACvD,GAAM,CAACC,EAAUC,CAAO,EAAI,MAAM,QAAQ,IAAI,CAC5CF,EAAS,QAAQ,CAAE,OAAQ,qBAAsB,CAAC,EAClDA,EAAS,QAAQ,CAAE,OAAQ,aAAc,CAAC,CAC5C,CAAC,EAQGG,EAAkBD,EACtB,OAAI,OAAOC,GAAoB,WAC7BA,EAAkB,KAAK,OAAOD,CAAO,EAAE,SAASJ,EAAc,CAAC,IAG1D,CACL,SAAAG,EACA,QAASE,CACX,CACF,CArBsBJ,EAAAA,EAAAA,KAAAK,EAAAL,EAAA,aAAA,EAuBtB,eAAsBM,EAAeC,EAAuBC,EAAc,CACxE,OAAO,MAAMD,EAAS,QAAQ,CAC5B,OAAQ,0BACR,OAAQ,CAACC,CAAK,CAChB,CAAC,CACH,CALsBF,EAAAA,EAAAA,KAAAD,EAAAC,EAAA,gBAAA,EAOtB,eAAsBG,EAAcF,EAAuBJ,EAAkB,CAC3E,OAAO,MAAMI,EAAS,QAAQ,CAC5B,OAAQ,6BACR,OAAQ,CAAC,CAAE,QAASJ,CAAQ,CAAC,CAC/B,CAAC,CACH,CALsBM,EAAAA,EAAAA,KAAAJ,EAAAI,EAAA,eAAA,EAMf,SAASC,EAA+BC,EAAwB,CACrE,OAAOC,GAAeD,CAAI,EAAE,IAAKE,GAAeA,EAAW,IAAI,CACjE,CAFgBH,EAAAA,EAAAA,KAAAL,EAAAK,EAAA,gCAAA,EAGhB,eAAsBI,EACpBP,EACAC,EACA,CACA,GAAI,CACF,IAAML,EAAU,OAAOK,GAAU,SAAWA,EAAQA,EAAM,QAC1D,MAAMC,EAAcF,EAAUJ,CAAO,CACvC,OAASY,EAAa,CACpB,IAAMC,EAAQD,EAQd,GACE,OAAOP,GAAU,WAChBQ,EAAM,OAH0B,MAGa,CAACA,EAAM,MACrD,CAKA,MAAMV,EAAeC,EAAUC,CAAK,EACpC,MACF,CACA,MAAMO,CACR,CACF,CA7BsBD,EAAAA,EAAAA,KAAAT,EAAAS,EAAA,oBAAA,EA+BtB,IAAMG,EAAqC,KACpC,SAASC,GAAqBF,EAAyB,CAE5D,GAAI,OAAOA,GAAU,UAAYA,IAAU,KAAM,CAC/C,IAAMG,EAAQH,EAA4B,KACpCI,EAAaJ,EAAwC,OAAO,KAClE,OACEG,IAASF,GACTG,IAAcH,CAElB,CACA,MAAO,EACT,CAXgBC,EAAAA,GAAAA,KAAAb,EAAAa,GAAA,sBAAA,EAaT,SAASG,EAAqBnB,EAAoBC,EAAiB,CACxE,OAAOD,EAAS,IACboB,GACCC,EAAU,OAAO,CACf,QAASD,EACT,QAAS,CACP,UAAWE,EACX,UAAWrB,CACb,CACF,CAAC,CACL,CACF,CAXgBkB,EAAAA,EAAAA,KAAAhB,EAAAgB,EAAA,sBAAA,EFhFT,IAAMI,GAAc,CAAC,GAAGA,EAAiB,EACzC,SAASC,GACdnB,EACAoB,EACqD,CACrD,MAAO,OAAOC,EAAUpB,IAAU,CAChC,IAAMqB,EAActB,EAAS,EAE7B,GAAI,CAACsB,EACH,MAAM,IAAI,MACR,0DACF,EAGErB,IAOEmB,GAAS,mBACX,MAAMA,EAAQ,mBAAmBE,EAAarB,CAAK,EAEnD,MAAMM,EAAmBe,EAAarB,CAAK,GAI/C,IAAMsB,EAAS,MAAM9B,EAAY6B,CAAW,EAO5C,MAAO,CACL,SANwBR,EACxBS,EAAO,SACPA,EAAO,OACT,EAIE,QAASA,EAAO,OAClB,CACF,CACF,CAvCgBJ,EAAAA,GAAAA,KAAArB,EAAAqB,GAAA,SAAA,EAyCT,SAASK,GACdxB,EAC6B,CAC7B,MAAO,UAAY,CACjB,IAAMsB,EAActB,EAAS,EAE7B,GAAI,CAACsB,EACH,MAAM,IAAI,MACR,wFACF,EAGF,GAAI,CAIF,MAAI,CAAA,EAHuB,MAAMA,EAAY,QAAQ,CACnD,OAAQ,cACV,CAAC,GACY,MAIf,MAAQ,CACN,MAAO,EACT,CACF,CACF,CAxBgBE,EAAAA,GAAAA,MAAA1B,EAAA0B,GAAA,iBAAA,EAyBT,SAASC,IAGd,CACA,MAAO,CAACC,EAASC,IAAW,CAC1B,GAAM,CAAE,QAAAC,EAAS,gBAAAC,CAAgB,EAAIF,EACrC,OAAOxB,EAA+B0B,CAAe,EAAE,SAASD,CAAO,CACzE,CACF,CARgBH,EAAAA,GAAAA,MAAA3B,EAAA2B,GAAA,kBAAA,EIjFhB,IAAAK,GAAA,CAAA,EAAAC,EAAAD,GAAA,CAAA,wBAAA,IAAAE,GAAA,sBAAA,IAAAC,EAAAA,CAAAA,EAMO,SAASD,GACdhC,EACyD,CACzD,OAAOkC,EAAS,wBAAwBlC,CAAQ,EAAE,MAAM,CAC1D,CAJgBgC,EAAAA,GAAAA,MAAAlC,EAAAkC,GAAA,yBAAA,EAMT,SAASC,GACdjC,EACyD,CACzD,IAAImC,EAEJ,MAAO,CACJT,GAAY,CACX,IAAMJ,EAActB,EAAS,EAE7B,GAAI,CAACsB,EACH,MAAM,IAAI,MACR,kFACF,EAGF,GAAM,CAAC,CAAEc,CAAQ,EAAIV,EAAQ,MAAM,EAEnCS,EAAgBrC,EAAA,MAAOF,GAAoB,CACzCwC,EAAS,UAAWxC,CAAO,CAC7B,EAFgB,eAAA,EAGhB0B,EAAY,GAAG,eAAgBa,CAAa,CAC9C,EACA,IAAM,CACJ,IAAMb,EAActB,EAAS,EAEzBmC,GAAiBb,GACnBA,EAAY,eAAe,eAAgBa,CAAa,CAE5D,CACF,CACF,CA9BgBF,EAAAA,GAAAA,MAAAnC,EAAAmC,GAAA,uBAAA,ECZhB,IAAAI,GAAA,CAAA,EAAAN,EAAAM,GAAA,CAAA,YAAA,IAAAnB,EAAAA,CAAAA,ECEO,SAASoB,EAAuBZ,EAAkB,CACvD,GAAM,CAAC,CAAEU,CAAQ,EAAIV,EAAQ,MAAM,EACnCU,EAAS,aAAc,EAAK,CAC9B,CAHgBE,EAAAA,EAAAA,KAAAxC,EAAAwC,EAAA,wBAAA,EAKT,IAAMpB,GAAc,CAAC,CAAC,UAAWoB,CAAsB,CAAU,EDL3DpB,GAAc,CAAC,GAAGA,EAAiB,EEFhDqB,GAAA,CAAA,EAAAR,EAAAQ,GAAA,CAAA,YAAA,IAAArB,EAAAA,CAAAA,EIsBO,IAAMsB,EAAN,KAA6D,OAAA,CAAA1C,EAAA,UAtBpE,MAsBoE,CAAAA,EAAA,KAAA,eAAA,CAAA,CACzD,KACT2C,GAAqB,IAAI,IACzBC,GAAoB,IAAI,IACxBC,GAAuB,IAAI,IAC3BC,GAAwB,IAAI,IAC5BC,GAEA,YAAYC,EAAS,CACnB,KAAK,KAAOA,CACd,CAEO,IAAIC,EAAsD,CAC/D,OAAK,KAAKN,GAAK,IAAI,KAAK,IAAI,GAC1B,KAAKA,GAAK,IAAI,KAAK,KAAM,CAAC,CAAC,EAE7B,KAAKA,GAAK,IAAI,KAAK,IAAI,GAAG,KAAKM,CAAM,EAC9B,IACT,CAEO,GAAGA,EAAsD,CAC9D,OAAK,KAAKL,GAAI,IAAI,KAAK,IAAI,GACzB,KAAKA,GAAI,IAAI,KAAK,KAAM,CAAC,CAAC,EAE5B,KAAKA,GAAI,IAAI,KAAK,IAAI,GAAG,KAAKK,CAAM,EAC7B,IACT,CAEO,OAAOA,EAAsD,CAClE,OAAK,KAAKH,GAAQ,IAAI,KAAK,IAAI,GAC7B,KAAKA,GAAQ,IAAI,KAAK,KAAM,CAAC,CAAC,EAEhC,KAAKA,GAAQ,IAAI,KAAK,IAAI,GAAG,KAAKG,CAAM,EACjC,IACT,CAEO,MAAMA,EAAsD,CACjE,OAAK,KAAKJ,GAAO,IAAI,KAAK,IAAI,GAC5B,KAAKA,GAAO,IAAI,KAAK,KAAM,CAAC,CAAC,EAE/B,KAAKA,GAAO,IAAI,KAAK,IAAI,GAAG,KAAKI,CAAM,EAChC,IACT,CAEO,OAAOA,EAAqD,CACjE,OAAA,KAAKF,GAAUE,EACR,IACT,CAEO,OAAwC,CAC7C,GAAI,CAAC,KAAKF,GACR,MAAM,IAAI,MAAM,gDAAgD,EAGlE,MAAO,CACL,WAAY,KAAK,KACjB,OAAQ,KAAKA,GACb,OAAQ,KAAKD,GACb,MAAO,KAAKD,GACZ,IAAK,KAAKF,GACV,GAAI,KAAKC,EACX,CACF,CACF,EEnFO,SAASM,GAAmBC,EAA0B,CAC3D,GAAI,CACF,OAAAjC,EAAU,MAAMiC,CAAO,EAChB,EACT,MAAQ,CACN,MAAO,EACT,CACF,CAPgBD,EAAAA,GAAAA,KAAAlD,EAAAkD,GAAA,oBAAA,ECsBT,SAASE,EACdxB,EACA/B,EACA,CACA,GAAI,CAACA,EAAS,SAAS,MAAMqD,EAAkB,EAC7C,MAAM,IAAI,MACR,4FAA4FrD,EAAS,QAAQ,EAC/G,EAGF,GAAM,CAAC,CAAEyC,CAAQ,EAAIV,EAAQ,MAAM,EACnC,OAAAU,EAAS,WAAYzC,EAAS,QAAQ,EACtCyC,EAAS,UAAWzC,EAAS,OAAO,EACpCyC,EAAS,YAAa,EAAI,EACnBzC,CACT,CAfgBuD,EAAAA,EAAAA,KAAApD,EAAAoD,EAAA,uCAAA,ECtBT,SAASC,EAAezB,EAAkB,CAC/C,GAAM,CAAC,CAAEU,CAAQ,EAAIV,EAAQ,MAAM,EACnCU,EAAS,aAAc,EAAI,CAC7B,CAHgBe,EAAAA,EAAAA,KAAArD,EAAAqD,EAAA,gBAAA,EAMT,IAAMjC,GAAc,CAAC,CAAC,UAAWiC,CAAc,CAAU,ERNnDjC,GAAc,CACzB,CAAC,UAAWgC,CAAqC,CACnD,ESJAE,GAAA,CAAA,EAAArB,EAAAqB,GAAA,CAAA,YAAA,IAAAlC,EAAAA,CAAAA,EAEO,IAAMA,GAAc,CAAC,GAAGA,EAAiB,ECFhDgB,EAAA,CAAA,EAAAH,EAAAG,EAAA,CAAA,gBAAA,IAAAV,GAAA,iBAAA,IAAAC,GAAA,wBAAA,IAAAO,GAAA,QAAA,IAAAb,EAAAA,CAAAA,ECOO,IAAMkC,GAAN,KAA6D,OAAA,CAAAvD,EAAA,UAPpE,MAOoE,CAAAA,EAAA,KAAA,gCAAA,CAAA,CAClEwD,GAA2C,KAC3CC,GAEW,KACXC,GAAgE,KAEhEC,GAKW,KACXC,GAEW,KAYJ,YAAYC,EAA6B,CAC9C,OAAA,KAAKL,GAAeK,EACb,IACT,CAYO,OACLA,EACA,CACA,OAAA,KAAKJ,GAAUI,EACR,IACT,CAYO,qBAAqBA,EAAyC,CACnE,OAAA,KAAKH,GAAwBG,EACtB,IACT,CAcO,iBACLA,EAIA,CACA,OAAA,KAAKF,GAAoBE,EAClB,IACT,CAYO,oBACLA,EAIA,CACA,OAAA,KAAKD,GAAuBC,EACrB,IACT,CACO,OAGwD,CAC7D,GAAI,KAAKL,KAAiB,KACxB,MAAM,IAAI,MAAM,KAAKM,GAAiB,aAAa,CAAC,EAEtD,GAAI,KAAKL,KAAY,KACnB,MAAM,IAAI,MAAM,KAAKK,GAAiB,QAAQ,CAAC,EAEjD,GAAI,KAAKH,KAAsB,KAC7B,MAAM,IAAI,MAAM,KAAKG,GAAiB,kBAAkB,CAAC,EAE3D,GAAI,KAAKF,KAAyB,KAChC,MAAM,IAAI,MAAM,KAAKE,GAAiB,qBAAqB,CAAC,EAW9D,IAAMC,EAAc,KAAKP,GACnBQ,EAAS,KAAKP,GACdQ,EAAmB,KAAKN,GACxBO,EAAsB,KAAKN,GAC3BO,EAAuB,KAAKT,GAC9BU,EACAC,EACJ,MAAO,CACL,MAAOzC,GAAY,CACjB,GAAM,CAAC,CAAEU,CAAQ,EAAIV,EAAQ,MAAM,EAC7B1B,EAAW6D,EAAY,EAE7B,GAAI,CAAC7D,EACH,MAAM,IAAI,MACR,8EACF,EAEFkE,EAAapE,EAAA,MAAOsE,GAAU,CAC5B,GAAMH,GAAwB,CAACA,EAAqBG,CAAK,EAAG,CAC1D1C,EAAQ,OAAO,YAAY,EAC3B,MACF,CACAU,EAAS,WAAY,MAAM0B,EAAO9D,EAAUoE,CAAK,CAAC,CACpD,EANa,YAAA,EAObD,EAAcJ,EAAiB/D,EAAUkE,CAAU,CACrD,EACA,CAACG,EAAGC,IAAQ,CAKNH,GAAe,OAAOA,GAAgB,YACxCA,EAAY,EAEd,IAAMnE,EAAW6D,EAAY,EAM7B,OAAAG,EAAoBhE,EAAUkE,CAAU,EAGjCI,CACT,CACF,CACF,CACAV,GAAiBW,EAAsB,CACrC,MAAO,aAAaA,CAAY,4DAClC,CACF,ED5KapD,GAAUrB,EAAA,IACrB,IAAI0C,EAAqC,SAAS,EAC/C,IAAIU,CAAqC,EACzC,OAAOC,CAAc,EACrB,MAAMb,CAAsB,EAJV,SAAA,EAMVd,GAAkB1B,EAAA,IAC7B,IAAI0C,EAA6C,iBAAiB,EADrC,iBAAA,EAElBf,GAAmB3B,EAAA,IAC9B,IAAI0C,EAA8C,kBAAkB,EADtC,kBAAA,EAInBR,GAA0BlC,EAAC+D,GACtC,IAAIR,GAAsD,EACvD,YAAYQ,CAAW,EACvB,qBACElE,GAMCA,GAAYA,EAAS,SAAW,CACpC,EACC,OAAO,MAAOK,EAAUL,IAAa,CACpC,IAAMC,EAAU,MAAMI,EAAS,QAAQ,CAAE,OAAQ,aAAc,CAAC,EAChE,OAAOL,EAAS,IAAKoB,GACnBC,EAAU,OAAO,CACf,QAASD,EACT,QAAS,CACP,UAAWE,EACX,UAAWrB,CACb,CACF,CAAC,CACH,CACF,CAAC,EACA,iBAAiB,CAACI,EAAUwE,IAAa,CACxCxE,EAAS,GAAG,kBAAmBwE,CAAQ,CACzC,CAAC,EACA,oBAAoB,CAACxE,EAAUwE,IAAa,CAC3CxE,EAAS,iBAAiB,kBAAmBwE,CAAQ,CACvD,CAAC,EA7BkC,yBAAA,EEPvC,IAAMC,GAAUC,EACb,QAAQ,EACR,OAAO,eAAgBC,EAAUC,EAAQC,EAAS,CACjD,GAAI,CAACA,GAAS,eACZ,MAAM,IAAI,MAAM,mCAAmC,EAGrDC,EAAkBD,EAAQ,cAAc,EAExC,IAAME,EAAS,MAAMC,EAAoB,EAazC,MAAO,CACL,SAZqBD,EAAO,SAAS,IACpCE,GACCC,EAAK,UAAU,OAAO,CACpB,QAASD,EACT,QAAS,CACP,UAAWE,EACX,UAAWJ,EAAO,OACpB,CACF,CAAC,CACL,EAIE,QAASA,EAAO,OAClB,CACF,CAAC,EACA,GAAGK,CAA8B,EACjC,MAAM,EAEHC,GAAaC,EAAe,WAAuB,EAAE,MAAM,EAE3DC,GAAM,IAAIC,EAA6B,MAAOC,CAAS,EAC1D,OAAOhB,EAAO,EACd,OAAOY,EAAU,EACjB,MAAM,ECxCT,IAAMK,GAAUC,EACb,QAAQ,EACR,OAAO,eAAgBC,EAAUC,EAAS,CACzC,GAAI,CAACA,GAAS,eACZ,MAAM,IAAI,MAAM,mCAAmC,EAGrDC,EAAkBD,EAAQ,cAAc,EAExC,IAAME,EAAS,MAAMC,EAAkB,EAavC,OAXuBD,EAAO,SAAS,IACpCE,GACCC,EAAK,UAAU,OAAO,CACpB,QAASD,EACT,QAAS,CACP,UAAWE,EACX,UAAWJ,EAAO,OACpB,CACF,CAAC,CACL,CAGF,CAAC,EACA,GAAGK,CAA8B,EACjC,MAAM,EAEHC,GAAaC,EAAe,WAA0B,EAAE,MAAM,EAE9DC,GAAS,IAAIC,EAAgC,SAAUC,CAAS,EACnE,OAAOf,EAAO,EACd,OAAOW,EAAU,EACjB,MAAM,ECxCT,IAAMK,GAAgBC,EAAA,IACpB,IAAIC,EAAgBC,CAAS,EAC1B,KAAK,SAAUC,EAAS,CACvB,GAAM,CAAC,CAAEC,CAAQ,EAAID,EAAQ,MAAM,EAE/BE,EAAe,GACjBD,EAAS,YAAa,EAAI,CAE9B,CAAC,EACA,OAAO,WAAYE,CAAQ,EAC3B,IAAI,SAAUC,EAAM,EACpB,IAAI,MAAOC,EAAG,EACd,MAAM,EAZW,iBCFtB,IAAMC,GAAWC,EAAA,IACfC,EAAe,EACZ,QAAQ,QAASC,EAAoB,CAAC,EACtC,QAAQ,QAASC,GAAc,CAAC,EAChC,MAAM,EAJM",
6
+ "names": ["generateStoreId", "providerId", "namespace", "__name", "pickVersion", "list", "targetVersion", "target", "version", "defineVersions", "versions", "api", "semver", "value", "legacyProviderImportsToVersionsInterface", "provider", "Networks", "WalletTypes", "config", "WalletTypes", "getInstance", "ledger", "connect", "__name", "namespaces", "results", "solanaNamespace", "namespaceItem", "evmNamespace", "setDerivationPath", "accounts", "getSolanaAccounts", "getEthereumAccounts", "getSigners", "getWalletInfo", "__name", "allBlockChains", "supportedChains", "ethereumBlockchain", "chain", "Networks", "solanaBlockchain", "index", "allBlockchains", "buildLegacyProvider", "config", "getInstance", "connect", "actions_exports", "__export", "disconnect", "recommended", "context", "setState", "__name", "builders_exports", "ActionBuilder", "#and", "#or", "#after", "#before", "#action", "name", "action", "parseErrorAndThrowStandardizeError", "e", "errorMessage", "err", "standardizeAndThrowError", "_context", "intoConnectionFinished", "isValidCaipAddress", "address", "AccountId", "__name", "connectAndUpdateStateForSingleNetwork", "context", "accounts", "setState", "connectAndUpdateStateForMultiNetworks", "intoConnecting", "context", "setState", "__name", "evmBlockchains", "actions_exports", "__export", "canEagerConnect", "canSwitchNetwork", "connect", "recommended", "disconnect", "context", "setState", "__name", "utils_exports", "filterAndGetEvmBlockchainNames", "formatAccountsToCAIP", "getAccounts", "isUserRejectionError", "suggestNetwork", "switchNetwork", "switchOrAddNetwork", "CAIP_NAMESPACE", "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", "connect", "options", "_context", "evmInstance", "result", "canEagerConnect", "canSwitchNetwork", "context", "params", "network", "supportedChains", "hooks_exports", "__export", "changeAccountSubscriber", "changeChainSubscriber", "builders_exports", "eventCallback", "setState", "after_exports", "intoConnectionFinished", "and_exports", "ActionBuilder", "#and", "#or", "#after", "#before", "#action", "name", "action", "isValidCaipAddress", "address", "connectAndUpdateStateForMultiNetworks", "intoConnecting", "before_exports", "ChangeAccountSubscriberBuilder", "#getInstance", "#format", "#validateEventPayload", "#addEventListener", "#removeEventListener", "operator", "#getErrorMessage", "getInstance", "format", "addEventListener", "removeEventListener", "validateEventPayload", "subscriber", "unsubscribe", "event", "_", "err", "operatorName", "callback", "connect", "h", "_context", "_chain", "options", "setDerivationPath", "result", "getEthereumAccounts", "account", "dist_exports", "p", "standardizeAndThrowLedgerError", "disconnect", "y", "evm", "S", "WALLET_ID", "connect", "u", "_context", "options", "setDerivationPath", "result", "getSolanaAccounts", "account", "dist_exports", "a", "standardizeAndThrowLedgerError", "disconnect", "y", "solana", "S", "WALLET_ID", "buildProvider", "__name", "x", "WALLET_ID", "context", "setState", "ledger", "metadata", "solana", "evm", "versions", "__name", "d", "buildLegacyProvider", "buildProvider"]
7
7
  }