@walletconnect/ethereum-provider 2.23.7 → 2.23.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var j=require("events"),w=require("@walletconnect/utils"),N=require("@walletconnect/universal-provider");function W(n){if(n&&n.__esModule)return n;var t=Object.create(null);return n&&Object.keys(n).forEach(function(e){if(e!=="default"){var s=Object.getOwnPropertyDescriptor(n,e);Object.defineProperty(t,e,s.get?s:{enumerable:!0,get:function(){return n[e]}})}}),t.default=n,Object.freeze(t)}const x="wc",q="ethereum_provider",$=`${x}@2:${q}:`,D="https://rpc.walletconnect.org/v1/",I=["eth_sendTransaction","personal_sign"],_=["eth_accounts","eth_requestAccounts","eth_sendRawTransaction","eth_sign","eth_signTransaction","eth_signTypedData","eth_signTypedData_v3","eth_signTypedData_v4","eth_sendTransaction","personal_sign","wallet_switchEthereumChain","wallet_addEthereumChain","wallet_getPermissions","wallet_requestPermissions","wallet_registerOnboarding","wallet_watchAsset","wallet_scanQRCode","wallet_sendCalls","wallet_getCapabilities","wallet_getCallsStatus","wallet_showCallsStatus"],C=["chainChanged","accountsChanged"],P=["chainChanged","accountsChanged","message","disconnect","connect"],U=async()=>{const{createAppKit:n}=await Promise.resolve().then(function(){return W(require("@reown/appkit/core"))});return n};var k=Object.defineProperty,z=Object.defineProperties,L=Object.getOwnPropertyDescriptors,A=Object.getOwnPropertySymbols,Q=Object.prototype.hasOwnProperty,K=Object.prototype.propertyIsEnumerable,O=(n,t,e)=>t in n?k(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e,v=(n,t)=>{for(var e in t||(t={}))Q.call(t,e)&&O(n,e,t[e]);if(A)for(var e of A(t))K.call(t,e)&&O(n,e,t[e]);return n},f=(n,t)=>z(n,L(t)),p=(n,t,e)=>O(n,typeof t!="symbol"?t+"":t,e);function E(n){return Number(n[0].split(":")[1])}function b(n){return`0x${n.toString(16)}`}function V(n){const{chains:t,optionalChains:e,methods:s,optionalMethods:i,events:a,optionalEvents:r,rpcMap:u}=n;if(!w.isValidArray(t))throw new Error("Invalid chains");const c={chains:t,methods:s||I,events:a||C,rpcMap:v({},t.length?{[E(t)]:u[E(t)]}:{})},l=a?.filter(d=>!C.includes(d)),o=s?.filter(d=>!I.includes(d));if(!e&&!r&&!i&&!(l!=null&&l.length)&&!(o!=null&&o.length))return{required:t.length?c:void 0};const m=l?.length&&o?.length||!e,h={chains:[...new Set(m?c.chains.concat(e||[]):e)],methods:[...new Set(c.methods.concat(i!=null&&i.length?i:_))],events:[...new Set(c.events.concat(r!=null&&r.length?r:P))],rpcMap:u};return{required:t.length?c:void 0,optional:e.length?h:void 0}}class y{constructor(){p(this,"events",new j.EventEmitter),p(this,"namespace","eip155"),p(this,"accounts",[]),p(this,"signer"),p(this,"chainId",1),p(this,"modal"),p(this,"rpc"),p(this,"STORAGE_KEY",$),p(this,"on",(t,e)=>(this.events.on(t,e),this)),p(this,"once",(t,e)=>(this.events.once(t,e),this)),p(this,"removeListener",(t,e)=>(this.events.removeListener(t,e),this)),p(this,"off",(t,e)=>(this.events.off(t,e),this)),p(this,"parseAccount",t=>this.isCompatibleChainId(t)?this.parseAccountId(t).address:t),this.signer={},this.rpc={}}static async init(t){const e=new y;return await e.initialize(t),e}async request(t,e){return await this.signer.request(t,this.formatChainId(this.chainId),e)}sendAsync(t,e,s){this.signer.sendAsync(t,e,this.formatChainId(this.chainId),s)}get connected(){return this.signer.client?this.signer.client.core.relayer.connected:!1}get connecting(){return this.signer.client?this.signer.client.core.relayer.connecting:!1}async enable(){return this.session||await this.connect(),await this.request({method:"eth_requestAccounts"})}async connect(t){var e;if(!this.signer.client)throw new Error("Provider not initialized. Call init() first");this.loadConnectOpts(t);const{required:s,optional:i}=V(this.rpc);try{const a=await new Promise(async(u,c)=>{var l,o;this.rpc.showQrModal&&((l=this.modal)==null||l.open(),(o=this.modal)==null||o.subscribeState(h=>{!h.open&&!this.signer.session&&(this.signer.abortPairingAttempt(),c(new Error("Connection request reset. Please try again.")))}));const m=t!=null&&t.scopedProperties?{[this.namespace]:t.scopedProperties}:void 0;await this.signer.connect(f(v({namespaces:v({},s&&{[this.namespace]:s})},i&&{optionalNamespaces:{[this.namespace]:i}}),{pairingTopic:t?.pairingTopic,scopedProperties:m})).then(h=>{u(h)}).catch(h=>{var d;(d=this.modal)==null||d.showErrorMessage("Unable to connect"),c(new Error(h.message))})});if(!a)return;const r=w.getAccountsFromNamespaces(a.namespaces,[this.namespace]);this.setChainIds(this.rpc.chains.length?this.rpc.chains:r),this.setAccounts(r),this.events.emit("connect",{chainId:b(this.chainId)})}catch(a){throw this.signer.logger.error(a),a}finally{(e=this.modal)==null||e.close()}}async authenticate(t,e){var s;if(!this.signer.client)throw new Error("Provider not initialized. Call init() first");this.loadConnectOpts({chains:t?.chains});try{const i=await new Promise(async(r,u)=>{var c,l;this.rpc.showQrModal&&((c=this.modal)==null||c.open(),(l=this.modal)==null||l.subscribeState(o=>{!o.open&&!this.signer.session&&(this.signer.abortPairingAttempt(),u(new Error("Connection request reset. Please try again.")))})),await this.signer.authenticate(f(v({},t),{chains:this.rpc.chains}),e).then(o=>{r(o)}).catch(o=>{var m;(m=this.modal)==null||m.showErrorMessage("Unable to connect"),u(new Error(o.message))})}),a=i.session;if(a){const r=w.getAccountsFromNamespaces(a.namespaces,[this.namespace]);this.setChainIds(this.rpc.chains.length?this.rpc.chains:r),this.setAccounts(r),this.events.emit("connect",{chainId:b(this.chainId)})}return i}catch(i){throw this.signer.logger.error(i),i}finally{(s=this.modal)==null||s.close()}}async disconnect(){this.session&&await this.signer.disconnect(),this.reset()}get isWalletConnect(){return!0}get session(){return this.signer.session}registerEventListeners(){this.signer.on("session_event",t=>{const{params:e}=t,{event:s}=e;s.name==="accountsChanged"?(this.accounts=this.parseAccounts(s.data),this.events.emit("accountsChanged",this.accounts)):s.name==="chainChanged"?this.setChainId(this.formatChainId(s.data)):this.events.emit(s.name,s.data),this.events.emit("session_event",t)}),this.signer.on("accountsChanged",t=>{this.accounts=this.parseAccounts(t),this.events.emit("accountsChanged",this.accounts)}),this.signer.on("chainChanged",t=>{const e=parseInt(t);this.chainId=e,this.events.emit("chainChanged",b(this.chainId)),this.persist()}),this.signer.on("session_update",t=>{this.events.emit("session_update",t)}),this.signer.on("session_delete",t=>{this.reset(),this.events.emit("session_delete",t),this.events.emit("disconnect",f(v({},w.getSdkError("USER_DISCONNECTED")),{data:t.topic,name:"USER_DISCONNECTED"}))}),this.signer.on("display_uri",t=>{this.events.emit("display_uri",t)})}switchEthereumChain(t){this.request({method:"wallet_switchEthereumChain",params:[{chainId:t.toString(16)}]})}isCompatibleChainId(t){return typeof t=="string"?t.startsWith(`${this.namespace}:`):!1}formatChainId(t){return`${this.namespace}:${t}`}parseChainId(t){return Number(t.split(":")[1])}setChainIds(t){const e=t.filter(s=>this.isCompatibleChainId(s)).map(s=>this.parseChainId(s));e.length&&(this.chainId=e[0],this.events.emit("chainChanged",b(this.chainId)),this.persist())}setChainId(t){if(this.isCompatibleChainId(t)){const e=this.parseChainId(t);this.chainId=e,this.switchEthereumChain(e)}}parseAccountId(t){const[e,s,i]=t.split(":");return{chainId:`${e}:${s}`,address:i}}setAccounts(t){this.accounts=t.filter(e=>this.parseChainId(this.parseAccountId(e).chainId)===this.chainId).map(e=>this.parseAccountId(e).address),this.events.emit("accountsChanged",this.accounts)}getRpcConfig(t){var e,s;const i=(e=t?.chains)!=null?e:[],a=(s=t?.optionalChains)!=null?s:[],r=i.concat(a);if(!r.length)throw new Error("No chains specified in either `chains` or `optionalChains`");const u=i.length?t?.methods||I:[],c=i.length?t?.events||C:[],l=t?.optionalMethods||[],o=t?.optionalEvents||[],m=t?.rpcMap||this.buildRpcMap(r,t.projectId),h=t?.qrModalOptions||void 0;return{chains:i?.map(d=>this.formatChainId(d)),optionalChains:a.map(d=>this.formatChainId(d)),methods:u,events:c,optionalMethods:l,optionalEvents:o,rpcMap:m,showQrModal:!!(t!=null&&t.showQrModal),qrModalOptions:h,projectId:t.projectId,metadata:t.metadata}}buildRpcMap(t,e){const s={};return t.forEach(i=>{s[i]=this.getRpcUrl(i,e)}),s}async initialize(t){var e;if(this.rpc=this.getRpcConfig(t),this.chainId=this.rpc.chains.length?E(this.rpc.chains):E(this.rpc.optionalChains),this.signer=await N.UniversalProvider.init({projectId:this.rpc.projectId,metadata:this.rpc.metadata,disableProviderPing:t.disableProviderPing,relayUrl:t.relayUrl,storage:t.storage,storageOptions:t.storageOptions,customStoragePrefix:t.customStoragePrefix,telemetryEnabled:t.telemetryEnabled,logger:t.logger}),this.registerEventListeners(),await this.loadPersistedSession(),this.rpc.showQrModal){let s;try{const i=await U(),{convertWCMToAppKitOptions:a}=await Promise.resolve().then(function(){return nt}),r=a(f(v({},this.rpc.qrModalOptions),{chains:[...new Set([...this.rpc.chains,...this.rpc.optionalChains])],metadata:this.rpc.metadata,projectId:this.rpc.projectId}));if(!r.networks.length)throw new Error("No networks found for WalletConnect");s=i(f(v({},r),{universalProvider:this.signer,manualWCControl:!0,enableMobileFullScreen:((e=this.rpc.qrModalOptions)==null?void 0:e.enableMobileFullScreen)===!0}))}catch(i){throw console.warn(i),new Error("To use QR modal, please install @reown/appkit package")}if(s)try{this.modal=s}catch(i){throw this.signer.logger.error(i),new Error("Could not generate WalletConnectModal Instance")}}}loadConnectOpts(t){if(!t)return;const{chains:e,optionalChains:s,rpcMap:i}=t;e&&w.isValidArray(e)&&(this.rpc.chains=e.map(a=>this.formatChainId(a)),e.forEach(a=>{this.rpc.rpcMap[a]=i?.[a]||this.getRpcUrl(a)})),s&&w.isValidArray(s)&&(this.rpc.optionalChains=[],this.rpc.optionalChains=s?.map(a=>this.formatChainId(a)),s.forEach(a=>{this.rpc.rpcMap[a]=i?.[a]||this.getRpcUrl(a)}))}getRpcUrl(t,e){var s;return((s=this.rpc.rpcMap)==null?void 0:s[t])||`${D}?chainId=eip155:${t}&projectId=${e||this.rpc.projectId}`}async loadPersistedSession(){if(this.session)try{const t=await this.signer.client.core.storage.getItem(`${this.STORAGE_KEY}/chainId`),e=this.session.namespaces[`${this.namespace}:${t}`]?this.session.namespaces[`${this.namespace}:${t}`]:this.session.namespaces[this.namespace];this.setChainIds(t?[this.formatChainId(t)]:e?.accounts),this.setAccounts(e?.accounts)}catch(t){this.signer.logger.error("Failed to load persisted session, clearing state..."),this.signer.logger.error(t),await this.disconnect().catch(e=>this.signer.logger.warn(e))}}reset(){this.chainId=1,this.accounts=[]}persist(){this.session&&this.signer.client.core.storage.setItem(`${this.STORAGE_KEY}/chainId`,this.chainId)}parseAccounts(t){return typeof t=="string"||t instanceof String?[this.parseAccount(t)]:t.map(e=>this.parseAccount(e))}}const F=y;var H=Object.defineProperty,G=Object.defineProperties,Y=Object.getOwnPropertyDescriptors,M=Object.getOwnPropertySymbols,B=Object.prototype.hasOwnProperty,X=Object.prototype.propertyIsEnumerable,S=(n,t,e)=>t in n?H(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e,T=(n,t)=>{for(var e in t||(t={}))B.call(t,e)&&S(n,e,t[e]);if(M)for(var e of M(t))X.call(t,e)&&S(n,e,t[e]);return n},J=(n,t)=>G(n,Y(t));function Z(n){if(n)return{"--w3m-font-family":n["--wcm-font-family"],"--w3m-accent":n["--wcm-accent-color"],"--w3m-color-mix":n["--wcm-background-color"],"--w3m-z-index":n["--wcm-z-index"]?Number(n["--wcm-z-index"]):void 0,"--w3m-qr-color":n["--wcm-accent-color"],"--w3m-font-size-master":n["--wcm-text-medium-regular-size"],"--w3m-border-radius-master":n["--wcm-container-border-radius"],"--w3m-color-mix-strength":0}}const tt=n=>{const[t,e]=n.split(":");return R({id:e,caipNetworkId:n,chainNamespace:t,name:"",nativeCurrency:{name:"",symbol:"",decimals:8},rpcUrls:{default:{http:["https://rpc.walletconnect.org/v1"]}}})};function et(n){var t,e,s,i,a,r,u;const c=(t=n.chains)==null?void 0:t.map(tt).filter(Boolean);if(c.length===0)throw new Error("At least one chain must be specified");const l=c.find(m=>{var h;return m.id===((h=n.defaultChain)==null?void 0:h.id)}),o={projectId:n.projectId,networks:c,themeMode:n.themeMode,themeVariables:Z(n.themeVariables),chainImages:n.chainImages,connectorImages:n.walletImages,defaultNetwork:l,metadata:J(T({},n.metadata),{name:((e=n.metadata)==null?void 0:e.name)||"WalletConnect",description:((s=n.metadata)==null?void 0:s.description)||"Connect to WalletConnect-compatible wallets",url:((i=n.metadata)==null?void 0:i.url)||"https://walletconnect.org",icons:((a=n.metadata)==null?void 0:a.icons)||["https://walletconnect.org/walletconnect-logo.png"]}),showWallets:!0,featuredWalletIds:n.explorerRecommendedWalletIds==="NONE"?[]:Array.isArray(n.explorerRecommendedWalletIds)?n.explorerRecommendedWalletIds:[],excludeWalletIds:n.explorerExcludedWalletIds==="ALL"?[]:Array.isArray(n.explorerExcludedWalletIds)?n.explorerExcludedWalletIds:[],enableEIP6963:!1,enableInjected:!1,enableCoinbase:!0,enableWalletConnect:!0,features:{email:!1,socials:!1}};if((r=n.mobileWallets)!=null&&r.length||(u=n.desktopWallets)!=null&&u.length){const m=[...(n.mobileWallets||[]).map(g=>({id:g.id,name:g.name,links:g.links})),...(n.desktopWallets||[]).map(g=>({id:g.id,name:g.name,links:{native:g.links.native,universal:g.links.universal}}))],h=[...o.featuredWalletIds||[],...o.excludeWalletIds||[]],d=m.filter(g=>!h.includes(g.id));d.length&&(o.customWallets=d)}return o}function R(n){return T({formatters:void 0,fees:void 0,serializers:void 0},n)}var nt=Object.freeze({__proto__:null,convertWCMToAppKitOptions:et,defineChain:R});exports.EthereumProvider=F,exports.OPTIONAL_EVENTS=P,exports.OPTIONAL_METHODS=_,exports.REQUIRED_EVENTS=C,exports.REQUIRED_METHODS=I,exports.default=y;
1
+ "use strict";var A=Object.create;var I=Object.defineProperty;var M=Object.getOwnPropertyDescriptor;var O=Object.getOwnPropertyNames;var P=Object.getPrototypeOf,T=Object.prototype.hasOwnProperty;var S=(s,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of O(t))!T.call(s,n)&&n!==e&&I(s,n,{get:()=>t[n],enumerable:!(i=M(t,n))||i.enumerable});return s};var R=(s,t,e)=>(e=s!=null?A(P(s)):{},S(t||!s||!s.__esModule?I(e,"default",{value:s,enumerable:!0}):e,s));Object.defineProperty(exports,"__esModule",{value:!0});var N=require("events"),l=require("@walletconnect/utils"),W=require("@walletconnect/universal-provider");const x="wc",q="ethereum_provider",$=`${x}@2:${q}:`,k="https://rpc.walletconnect.org/v1/",m=["eth_sendTransaction","personal_sign"],f=["eth_accounts","eth_requestAccounts","eth_sendRawTransaction","eth_sign","eth_signTransaction","eth_signTypedData","eth_signTypedData_v3","eth_signTypedData_v4","eth_sendTransaction","personal_sign","wallet_switchEthereumChain","wallet_addEthereumChain","wallet_getPermissions","wallet_requestPermissions","wallet_registerOnboarding","wallet_watchAsset","wallet_scanQRCode","wallet_sendCalls","wallet_getCapabilities","wallet_getCallsStatus","wallet_showCallsStatus"],u=["chainChanged","accountsChanged"],v=["chainChanged","accountsChanged","message","disconnect","connect"],U=async()=>{const{createAppKit:s}=await import("@reown/appkit/core");return s};function g(s){return Number(s[0].split(":")[1])}function w(s){return`0x${s.toString(16)}`}function D(s){const{chains:t,optionalChains:e,methods:i,optionalMethods:n,events:a,optionalEvents:o,rpcMap:r}=s;if(!l.isValidArray(t))throw new Error("Invalid chains");const h={chains:t,methods:i||m,events:a||u,rpcMap:{...t.length?{[g(t)]:r[g(t)]}:{}}},c=a?.filter(C=>!u.includes(C)),p=i?.filter(C=>!m.includes(C));if(!e&&!o&&!n&&!c?.length&&!p?.length)return{required:t.length?h:void 0};const d=c?.length&&p?.length||!e,b={chains:[...new Set(d?h.chains.concat(e||[]):e)],methods:[...new Set(h.methods.concat(n?.length?n:f))],events:[...new Set(h.events.concat(o?.length?o:v))],rpcMap:r};return{required:t.length?h:void 0,optional:e.length?b:void 0}}let E=class y{constructor(){this.events=new N.EventEmitter,this.namespace="eip155",this.accounts=[],this.chainId=1,this.STORAGE_KEY=$,this.on=(t,e)=>(this.events.on(t,e),this),this.once=(t,e)=>(this.events.once(t,e),this),this.removeListener=(t,e)=>(this.events.removeListener(t,e),this),this.off=(t,e)=>(this.events.off(t,e),this),this.parseAccount=t=>this.isCompatibleChainId(t)?this.parseAccountId(t).address:t,this.signer={},this.rpc={}}static async init(t){const e=new y;return await e.initialize(t),e}async request(t,e){return await this.signer.request(t,this.formatChainId(this.chainId),e)}sendAsync(t,e,i){this.signer.sendAsync(t,e,this.formatChainId(this.chainId),i)}get connected(){return this.signer.client?this.signer.client.core.relayer.connected:!1}get connecting(){return this.signer.client?this.signer.client.core.relayer.connecting:!1}async enable(){return this.session||await this.connect(),await this.request({method:"eth_requestAccounts"})}async connect(t){if(!this.signer.client)throw new Error("Provider not initialized. Call init() first");this.loadConnectOpts(t);const{required:e,optional:i}=D(this.rpc);try{const n=await new Promise(async(o,r)=>{this.rpc.showQrModal&&(this.modal?.open(),this.modal?.subscribeState(c=>{!c.open&&!this.signer.session&&(this.signer.abortPairingAttempt(),r(new Error("Connection request reset. Please try again.")))}));const h=t?.scopedProperties?{[this.namespace]:t.scopedProperties}:void 0;await this.signer.connect({namespaces:{...e&&{[this.namespace]:e}},...i&&{optionalNamespaces:{[this.namespace]:i}},pairingTopic:t?.pairingTopic,scopedProperties:h}).then(c=>{o(c)}).catch(c=>{this.modal?.showErrorMessage("Unable to connect"),r(new Error(c.message))})});if(!n)return;const a=l.getAccountsFromNamespaces(n.namespaces,[this.namespace]);this.setChainIds(this.rpc.chains.length?this.rpc.chains:a),this.setAccounts(a),this.events.emit("connect",{chainId:w(this.chainId)})}catch(n){throw this.signer.logger.error(n),n}finally{this.modal?.close()}}async authenticate(t,e){if(!this.signer.client)throw new Error("Provider not initialized. Call init() first");this.loadConnectOpts({chains:t?.chains});try{const i=await new Promise(async(a,o)=>{this.rpc.showQrModal&&(this.modal?.open(),this.modal?.subscribeState(r=>{!r.open&&!this.signer.session&&(this.signer.abortPairingAttempt(),o(new Error("Connection request reset. Please try again.")))})),await this.signer.authenticate({...t,chains:this.rpc.chains},e).then(r=>{a(r)}).catch(r=>{this.modal?.showErrorMessage("Unable to connect"),o(new Error(r.message))})}),n=i.session;if(n){const a=l.getAccountsFromNamespaces(n.namespaces,[this.namespace]);this.setChainIds(this.rpc.chains.length?this.rpc.chains:a),this.setAccounts(a),this.events.emit("connect",{chainId:w(this.chainId)})}return i}catch(i){throw this.signer.logger.error(i),i}finally{this.modal?.close()}}async disconnect(){this.session&&await this.signer.disconnect(),this.reset()}get isWalletConnect(){return!0}get session(){return this.signer.session}registerEventListeners(){this.signer.on("session_event",t=>{const{params:e}=t,{event:i}=e;i.name==="accountsChanged"?(this.accounts=this.parseAccounts(i.data),this.events.emit("accountsChanged",this.accounts)):i.name==="chainChanged"?this.setChainId(this.formatChainId(i.data)):this.events.emit(i.name,i.data),this.events.emit("session_event",t)}),this.signer.on("accountsChanged",t=>{this.accounts=this.parseAccounts(t),this.events.emit("accountsChanged",this.accounts)}),this.signer.on("chainChanged",t=>{const e=parseInt(t);this.chainId=e,this.events.emit("chainChanged",w(this.chainId)),this.persist()}),this.signer.on("session_update",t=>{this.events.emit("session_update",t)}),this.signer.on("session_delete",t=>{this.reset(),this.events.emit("session_delete",t),this.events.emit("disconnect",{...l.getSdkError("USER_DISCONNECTED"),data:t.topic,name:"USER_DISCONNECTED"})}),this.signer.on("display_uri",t=>{this.events.emit("display_uri",t)})}switchEthereumChain(t){this.request({method:"wallet_switchEthereumChain",params:[{chainId:t.toString(16)}]})}isCompatibleChainId(t){return typeof t=="string"?t.startsWith(`${this.namespace}:`):!1}formatChainId(t){return`${this.namespace}:${t}`}parseChainId(t){return Number(t.split(":")[1])}setChainIds(t){const e=t.filter(i=>this.isCompatibleChainId(i)).map(i=>this.parseChainId(i));e.length&&(this.chainId=e[0],this.events.emit("chainChanged",w(this.chainId)),this.persist())}setChainId(t){if(this.isCompatibleChainId(t)){const e=this.parseChainId(t);this.chainId=e,this.switchEthereumChain(e)}}parseAccountId(t){const[e,i,n]=t.split(":");return{chainId:`${e}:${i}`,address:n}}setAccounts(t){this.accounts=t.filter(e=>this.parseChainId(this.parseAccountId(e).chainId)===this.chainId).map(e=>this.parseAccountId(e).address),this.events.emit("accountsChanged",this.accounts)}getRpcConfig(t){const e=t?.chains??[],i=t?.optionalChains??[],n=e.concat(i);if(!n.length)throw new Error("No chains specified in either `chains` or `optionalChains`");const a=e.length?t?.methods||m:[],o=e.length?t?.events||u:[],r=t?.optionalMethods||[],h=t?.optionalEvents||[],c=t?.rpcMap||this.buildRpcMap(n,t.projectId),p=t?.qrModalOptions||void 0;return{chains:e?.map(d=>this.formatChainId(d)),optionalChains:i.map(d=>this.formatChainId(d)),methods:a,events:o,optionalMethods:r,optionalEvents:h,rpcMap:c,showQrModal:!!t?.showQrModal,qrModalOptions:p,projectId:t.projectId,metadata:t.metadata}}buildRpcMap(t,e){const i={};return t.forEach(n=>{i[n]=this.getRpcUrl(n,e)}),i}async initialize(t){if(this.rpc=this.getRpcConfig(t),this.chainId=this.rpc.chains.length?g(this.rpc.chains):g(this.rpc.optionalChains),this.signer=await W.UniversalProvider.init({projectId:this.rpc.projectId,metadata:this.rpc.metadata,disableProviderPing:t.disableProviderPing,relayUrl:t.relayUrl,storage:t.storage,storageOptions:t.storageOptions,customStoragePrefix:t.customStoragePrefix,telemetryEnabled:t.telemetryEnabled,logger:t.logger}),this.registerEventListeners(),await this.loadPersistedSession(),this.rpc.showQrModal){let e;try{const i=await U(),{convertWCMToAppKitOptions:n}=await Promise.resolve().then(function(){return K}),a=n({...this.rpc.qrModalOptions,chains:[...new Set([...this.rpc.chains,...this.rpc.optionalChains])],metadata:this.rpc.metadata,projectId:this.rpc.projectId});if(!a.networks.length)throw new Error("No networks found for WalletConnect");e=i({...a,universalProvider:this.signer,manualWCControl:!0,enableMobileFullScreen:this.rpc.qrModalOptions?.enableMobileFullScreen===!0})}catch(i){throw console.warn(i),new Error("To use QR modal, please install @reown/appkit package")}if(e)try{this.modal=e}catch(i){throw this.signer.logger.error(i),new Error("Could not generate WalletConnectModal Instance")}}}loadConnectOpts(t){if(!t)return;const{chains:e,optionalChains:i,rpcMap:n}=t;e&&l.isValidArray(e)&&(this.rpc.chains=e.map(a=>this.formatChainId(a)),e.forEach(a=>{this.rpc.rpcMap[a]=n?.[a]||this.getRpcUrl(a)})),i&&l.isValidArray(i)&&(this.rpc.optionalChains=[],this.rpc.optionalChains=i?.map(a=>this.formatChainId(a)),i.forEach(a=>{this.rpc.rpcMap[a]=n?.[a]||this.getRpcUrl(a)}))}getRpcUrl(t,e){return this.rpc.rpcMap?.[t]||`${k}?chainId=eip155:${t}&projectId=${e||this.rpc.projectId}`}async loadPersistedSession(){if(this.session)try{const t=await this.signer.client.core.storage.getItem(`${this.STORAGE_KEY}/chainId`),e=this.session.namespaces[`${this.namespace}:${t}`]?this.session.namespaces[`${this.namespace}:${t}`]:this.session.namespaces[this.namespace];this.setChainIds(t?[this.formatChainId(t)]:e?.accounts),this.setAccounts(e?.accounts)}catch(t){this.signer.logger.error("Failed to load persisted session, clearing state..."),this.signer.logger.error(t),await this.disconnect().catch(e=>this.signer.logger.warn(e))}}reset(){this.chainId=1,this.accounts=[]}persist(){this.session&&this.signer.client.core.storage.setItem(`${this.STORAGE_KEY}/chainId`,this.chainId)}parseAccounts(t){return typeof t=="string"||t instanceof String?[this.parseAccount(t)]:t.map(e=>this.parseAccount(e))}};const j=E;function L(s){if(s)return{"--w3m-font-family":s["--wcm-font-family"],"--w3m-accent":s["--wcm-accent-color"],"--w3m-color-mix":s["--wcm-background-color"],"--w3m-z-index":s["--wcm-z-index"]?Number(s["--wcm-z-index"]):void 0,"--w3m-qr-color":s["--wcm-accent-color"],"--w3m-font-size-master":s["--wcm-text-medium-regular-size"],"--w3m-border-radius-master":s["--wcm-container-border-radius"],"--w3m-color-mix-strength":0}}const z=s=>{const[t,e]=s.split(":");return _({id:e,caipNetworkId:s,chainNamespace:t,name:"",nativeCurrency:{name:"",symbol:"",decimals:8},rpcUrls:{default:{http:["https://rpc.walletconnect.org/v1"]}}})};function Q(s){const t=s.chains?.map(z).filter(Boolean);if(t.length===0)throw new Error("At least one chain must be specified");const e=t.find(n=>n.id===s.defaultChain?.id),i={projectId:s.projectId,networks:t,themeMode:s.themeMode,themeVariables:L(s.themeVariables),chainImages:s.chainImages,connectorImages:s.walletImages,defaultNetwork:e,metadata:{...s.metadata,name:s.metadata?.name||"WalletConnect",description:s.metadata?.description||"Connect to WalletConnect-compatible wallets",url:s.metadata?.url||"https://walletconnect.org",icons:s.metadata?.icons||["https://walletconnect.org/walletconnect-logo.png"]},showWallets:!0,featuredWalletIds:s.explorerRecommendedWalletIds==="NONE"?[]:Array.isArray(s.explorerRecommendedWalletIds)?s.explorerRecommendedWalletIds:[],excludeWalletIds:s.explorerExcludedWalletIds==="ALL"?[]:Array.isArray(s.explorerExcludedWalletIds)?s.explorerExcludedWalletIds:[],enableEIP6963:!1,enableInjected:!1,enableCoinbase:!0,enableWalletConnect:!0,features:{email:!1,socials:!1}};if(s.mobileWallets?.length||s.desktopWallets?.length){const n=[...(s.mobileWallets||[]).map(r=>({id:r.id,name:r.name,links:r.links})),...(s.desktopWallets||[]).map(r=>({id:r.id,name:r.name,links:{native:r.links.native,universal:r.links.universal}}))],a=[...i.featuredWalletIds||[],...i.excludeWalletIds||[]],o=n.filter(r=>!a.includes(r.id));o.length&&(i.customWallets=o)}return i}function _(s){return{formatters:void 0,fees:void 0,serializers:void 0,...s}}var K=Object.freeze({__proto__:null,convertWCMToAppKitOptions:Q,defineChain:_});exports.EthereumProvider=j,exports.OPTIONAL_EVENTS=v,exports.OPTIONAL_METHODS=f,exports.REQUIRED_EVENTS=u,exports.REQUIRED_METHODS=m,exports.default=E;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/constants/values.ts","../src/constants/rpc.ts","../src/utils/appkit.ts","../src/EthereumProvider.ts","../src/index.ts","../src/wcmToAppKit.ts"],"sourcesContent":["export const PROTOCOL = \"wc\";\nexport const WC_VERSION = 2;\nexport const CONTEXT = \"ethereum_provider\";\nexport const STORAGE_KEY = `${PROTOCOL}@${WC_VERSION}:${CONTEXT}:`;\nexport const RPC_URL = \"https://rpc.walletconnect.org/v1/\";\n","export const REQUIRED_METHODS = [\"eth_sendTransaction\", \"personal_sign\"];\nexport const OPTIONAL_METHODS = [\n \"eth_accounts\",\n \"eth_requestAccounts\",\n \"eth_sendRawTransaction\",\n \"eth_sign\",\n \"eth_signTransaction\",\n \"eth_signTypedData\",\n \"eth_signTypedData_v3\",\n \"eth_signTypedData_v4\",\n \"eth_sendTransaction\",\n \"personal_sign\",\n \"wallet_switchEthereumChain\",\n \"wallet_addEthereumChain\",\n \"wallet_getPermissions\",\n \"wallet_requestPermissions\",\n \"wallet_registerOnboarding\",\n \"wallet_watchAsset\",\n \"wallet_scanQRCode\",\n \"wallet_sendCalls\",\n \"wallet_getCapabilities\",\n \"wallet_getCallsStatus\",\n \"wallet_showCallsStatus\",\n];\nexport const REQUIRED_EVENTS = [\"chainChanged\", \"accountsChanged\"];\nexport const OPTIONAL_EVENTS = [\n \"chainChanged\",\n \"accountsChanged\",\n \"message\",\n \"disconnect\",\n \"connect\",\n];\n","export const getAppkit = async () => {\n const { createAppKit } = await import(\"@reown/appkit/core\");\n return createAppKit;\n};\n","import { EventEmitter } from \"events\";\nimport { getAccountsFromNamespaces, getSdkError, isValidArray } from \"@walletconnect/utils\";\nimport { KeyValueStorageOptions } from \"@walletconnect/keyvaluestorage\";\nimport {\n IEthereumProvider as IProvider,\n IEthereumProviderEvents,\n ProviderAccounts,\n RequestArguments,\n QrModalOptions,\n} from \"./types.js\";\nimport {\n Metadata,\n Namespace,\n UniversalProvider,\n UniversalProviderOpts,\n} from \"@walletconnect/universal-provider\";\nimport { AuthTypes, SessionTypes, SignClientTypes } from \"@walletconnect/types\";\nimport { JsonRpcResult } from \"@walletconnect/jsonrpc-types\";\nimport {\n STORAGE_KEY,\n REQUIRED_METHODS,\n REQUIRED_EVENTS,\n RPC_URL,\n OPTIONAL_METHODS,\n OPTIONAL_EVENTS,\n} from \"./constants/index.js\";\nimport { getAppkit } from \"./utils/appkit.js\";\n\nexport type RpcMethod =\n | \"personal_sign\"\n | \"eth_sendTransaction\"\n | \"eth_accounts\"\n | \"eth_requestAccounts\"\n | \"eth_call\"\n | \"eth_getBalance\"\n | \"eth_sendRawTransaction\"\n | \"eth_sign\"\n | \"eth_signTransaction\"\n | \"eth_signTypedData\"\n | \"eth_signTypedData_v3\"\n | \"eth_signTypedData_v4\"\n | \"wallet_switchEthereumChain\"\n | \"wallet_addEthereumChain\"\n | \"wallet_getPermissions\"\n | \"wallet_requestPermissions\"\n | \"wallet_registerOnboarding\"\n | \"wallet_watchAsset\"\n | \"wallet_scanQRCode\"\n | \"wallet_sendCalls\"\n | \"wallet_getCapabilities\"\n | \"wallet_getCallsStatus\"\n | \"wallet_showCallsStatus\";\n\nexport type RpcEvent = \"accountsChanged\" | \"chainChanged\" | \"message\" | \"disconnect\" | \"connect\";\n\nexport interface EthereumRpcMap {\n [chainId: string]: string;\n}\n\nexport interface SessionEvent {\n event: { name: string; data: any };\n chainId: string;\n}\n\nexport interface EthereumRpcConfig {\n chains: string[];\n optionalChains: string[];\n methods: string[];\n optionalMethods?: string[];\n /**\n * @description Events that the wallet MUST support or the connection will be rejected\n */\n events: string[];\n optionalEvents?: string[];\n rpcMap: EthereumRpcMap;\n projectId: string;\n metadata?: Metadata;\n showQrModal: boolean;\n qrModalOptions?: QrModalOptions;\n}\nexport interface ConnectOps {\n chains?: number[];\n optionalChains?: number[];\n rpcMap?: EthereumRpcMap;\n pairingTopic?: string;\n scopedProperties?: unknown;\n}\n\nexport type AuthenticateParams = {\n chains?: number[];\n} & Omit<AuthTypes.SessionAuthenticateParams, \"chains\">;\n\nexport interface IEthereumProvider extends IProvider {\n connect(opts?: ConnectOps | undefined): Promise<void>;\n}\n\nexport function getRpcUrl(chainId: string, rpc: EthereumRpcConfig): string | undefined {\n let rpcUrl: string | undefined;\n if (rpc.rpcMap) {\n rpcUrl = rpc.rpcMap[getEthereumChainId([chainId])];\n }\n return rpcUrl;\n}\n\nexport function getEthereumChainId(chains: string[]): number {\n return Number(chains[0].split(\":\")[1]);\n}\n\nexport function toHexChainId(chainId: number): string {\n return `0x${chainId.toString(16)}`;\n}\n\nexport type NamespacesParams = {\n chains: EthereumRpcConfig[\"chains\"];\n optionalChains: EthereumRpcConfig[\"optionalChains\"];\n methods?: EthereumRpcConfig[\"methods\"];\n optionalMethods?: EthereumRpcConfig[\"methods\"];\n events?: EthereumRpcConfig[\"events\"];\n rpcMap: EthereumRpcConfig[\"rpcMap\"];\n optionalEvents?: EthereumRpcConfig[\"events\"];\n};\n\nexport function buildNamespaces(params: NamespacesParams): {\n required?: Namespace;\n optional?: Namespace;\n} {\n const { chains, optionalChains, methods, optionalMethods, events, optionalEvents, rpcMap } =\n params;\n if (!isValidArray(chains)) {\n throw new Error(\"Invalid chains\");\n }\n\n const required: Namespace = {\n chains,\n methods: methods || REQUIRED_METHODS,\n events: events || REQUIRED_EVENTS,\n rpcMap: {\n ...(chains.length\n ? { [getEthereumChainId(chains)]: rpcMap[getEthereumChainId(chains)] }\n : {}),\n },\n };\n\n // make a list of events and methods that require additional permissions\n // so we know if we should to include the required chains in the optional namespace\n const eventsRequiringPermissions = events?.filter((event) => !REQUIRED_EVENTS.includes(event));\n const methodsRequiringPermissions = methods?.filter((event) => !REQUIRED_METHODS.includes(event));\n\n if (\n !optionalChains &&\n !optionalEvents &&\n !optionalMethods &&\n !eventsRequiringPermissions?.length &&\n !methodsRequiringPermissions?.length\n ) {\n return { required: chains.length ? required : undefined };\n }\n\n /*\n * decides whether or not to include the required chains in the optional namespace\n * use case: if there is a single chain as required but additional methods/events as optional\n */\n const shouldIncludeRequiredChains =\n (eventsRequiringPermissions?.length && methodsRequiringPermissions?.length) || !optionalChains;\n\n const optional: Namespace = {\n chains: [\n ...new Set(\n shouldIncludeRequiredChains ? required.chains.concat(optionalChains || []) : optionalChains,\n ),\n ],\n methods: [\n ...new Set(\n required.methods.concat(optionalMethods?.length ? optionalMethods : OPTIONAL_METHODS),\n ),\n ],\n events: [\n ...new Set(required.events.concat(optionalEvents?.length ? optionalEvents : OPTIONAL_EVENTS)),\n ],\n rpcMap,\n };\n\n return {\n required: chains.length ? required : undefined,\n optional: optionalChains.length ? optional : undefined,\n };\n}\n\n// helper type to force setting at least one value in an array\ntype ArrayOneOrMore<T> = {\n 0: T;\n} & Array<T>;\n\n/**\n * @param {number[]} chains - The Chains your app intents to use and the peer MUST support. If the peer does not support these chains, the connection will be rejected.\n * @param {number[]} optionalChains - The Chains your app MAY attempt to use and the peer MAY support. If the peer does not support these chains, the connection will still be established.\n * @description either chains or optionalChains must be provided\n */\nexport type ChainsProps =\n | {\n chains: ArrayOneOrMore<number>;\n optionalChains?: number[];\n }\n | {\n chains?: number[];\n optionalChains: ArrayOneOrMore<number>;\n };\n\nexport type EthereumProviderOptions = {\n projectId: string;\n /**\n * @note Methods that your app intents to use and the peer MUST support. If the peer does not support these methods, the connection will be rejected.\n * @default [\"eth_sendTransaction\", \"personal_sign\"]\n */\n methods?: string[];\n /**\n * @note Methods that your app MAY attempt to use and the peer MAY support. If the peer does not support these methods, the connection will still be established.\n */\n optionalMethods?: string[];\n events?: string[];\n optionalEvents?: string[];\n rpcMap?: EthereumRpcMap;\n metadata?: Metadata;\n showQrModal: boolean;\n qrModalOptions?: QrModalOptions;\n disableProviderPing?: boolean;\n relayUrl?: string;\n storageOptions?: KeyValueStorageOptions;\n} & ChainsProps &\n UniversalProviderOpts;\n\nexport class EthereumProvider implements IEthereumProvider {\n public events = new EventEmitter();\n public namespace = \"eip155\";\n public accounts: string[] = [];\n public signer: InstanceType<typeof UniversalProvider>;\n public chainId = 1;\n public modal?: any;\n\n protected rpc: EthereumRpcConfig;\n protected readonly STORAGE_KEY = STORAGE_KEY;\n\n constructor() {\n // assigned during initialize\n this.signer = {} as InstanceType<typeof UniversalProvider>;\n this.rpc = {} as EthereumRpcConfig;\n }\n\n static async init(opts: EthereumProviderOptions): Promise<EthereumProvider> {\n const provider = new EthereumProvider();\n await provider.initialize(opts);\n return provider;\n }\n\n public async request<T = unknown>(args: RequestArguments, expiry?: number): Promise<T> {\n return await this.signer.request(args, this.formatChainId(this.chainId), expiry);\n }\n\n public sendAsync(\n args: RequestArguments,\n callback: (error: Error | null, response: JsonRpcResult) => void,\n expiry?: number,\n ): void {\n this.signer.sendAsync(args, callback, this.formatChainId(this.chainId), expiry);\n }\n\n get connected(): boolean {\n if (!this.signer.client) return false;\n return this.signer.client.core.relayer.connected;\n }\n\n get connecting(): boolean {\n if (!this.signer.client) return false;\n return this.signer.client.core.relayer.connecting;\n }\n\n public async enable(): Promise<ProviderAccounts> {\n if (!this.session) await this.connect();\n const accounts = await this.request({ method: \"eth_requestAccounts\" });\n return accounts as ProviderAccounts;\n }\n\n public async connect(opts?: ConnectOps): Promise<void> {\n if (!this.signer.client) {\n throw new Error(\"Provider not initialized. Call init() first\");\n }\n\n this.loadConnectOpts(opts);\n const { required, optional } = buildNamespaces(this.rpc);\n try {\n const session = await new Promise<SessionTypes.Struct | undefined>(\n async (resolve, reject) => {\n if (this.rpc.showQrModal) {\n this.modal?.open();\n\n this.modal?.subscribeState((state: { open: boolean }) => {\n // the modal was closed so reject the promise\n if (!state.open && !this.signer.session) {\n this.signer.abortPairingAttempt();\n reject(new Error(\"Connection request reset. Please try again.\"));\n }\n });\n }\n const scopedProperties = opts?.scopedProperties\n ? { [this.namespace]: opts.scopedProperties }\n : undefined;\n\n await this.signer\n .connect({\n namespaces: {\n ...(required && {\n [this.namespace]: required,\n }),\n },\n ...(optional && {\n optionalNamespaces: {\n [this.namespace]: optional,\n },\n }),\n pairingTopic: opts?.pairingTopic,\n scopedProperties,\n })\n .then((session?: SessionTypes.Struct) => {\n resolve(session);\n })\n .catch((error: Error) => {\n this.modal?.showErrorMessage(\"Unable to connect\");\n reject(new Error(error.message));\n });\n },\n );\n\n if (!session) return;\n\n const accounts = getAccountsFromNamespaces(session.namespaces, [this.namespace]);\n // if no required chains are set, use the approved accounts to fetch chainIds\n this.setChainIds(this.rpc.chains.length ? this.rpc.chains : accounts);\n this.setAccounts(accounts);\n this.events.emit(\"connect\", { chainId: toHexChainId(this.chainId) });\n } catch (error) {\n this.signer.logger.error(error);\n throw error;\n } finally {\n this.modal?.close();\n }\n }\n\n public async authenticate(\n params: AuthenticateParams,\n walletUniversalLink?: string,\n ): Promise<AuthTypes.AuthenticateResponseResult | undefined> {\n if (!this.signer.client) {\n throw new Error(\"Provider not initialized. Call init() first\");\n }\n\n this.loadConnectOpts({\n chains: params?.chains,\n });\n\n try {\n const result = await new Promise<AuthTypes.AuthenticateResponseResult>(\n async (resolve, reject) => {\n if (this.rpc.showQrModal) {\n this.modal?.open();\n this.modal?.subscribeState((state: { open: boolean }) => {\n // the modal was closed so reject the promise\n if (!state.open && !this.signer.session) {\n this.signer.abortPairingAttempt();\n reject(new Error(\"Connection request reset. Please try again.\"));\n }\n });\n }\n await this.signer\n .authenticate(\n {\n ...params,\n chains: this.rpc.chains,\n },\n walletUniversalLink,\n )\n .then((result: AuthTypes.AuthenticateResponseResult) => {\n resolve(result);\n })\n .catch((error: Error) => {\n this.modal?.showErrorMessage(\"Unable to connect\");\n reject(new Error(error.message));\n });\n },\n );\n\n const session = result.session;\n if (session) {\n const accounts = getAccountsFromNamespaces(session.namespaces, [this.namespace]);\n // if no required chains are set, use the approved accounts to fetch chainIds as both contain <namespace>:<chainId>\n this.setChainIds(this.rpc.chains.length ? this.rpc.chains : accounts);\n this.setAccounts(accounts);\n\n this.events.emit(\"connect\", { chainId: toHexChainId(this.chainId) });\n }\n\n return result;\n } catch (error) {\n this.signer.logger.error(error);\n throw error;\n } finally {\n this.modal?.close();\n }\n }\n\n public async disconnect(): Promise<void> {\n if (this.session) {\n await this.signer.disconnect();\n }\n this.reset();\n }\n\n public on: IEthereumProviderEvents[\"on\"] = (event, listener) => {\n this.events.on(event, listener);\n return this;\n };\n\n public once: IEthereumProviderEvents[\"once\"] = (event, listener) => {\n this.events.once(event, listener);\n return this;\n };\n\n public removeListener: IEthereumProviderEvents[\"removeListener\"] = (event, listener) => {\n this.events.removeListener(event, listener);\n return this;\n };\n\n public off: IEthereumProviderEvents[\"off\"] = (event, listener) => {\n this.events.off(event, listener);\n return this;\n };\n\n get isWalletConnect() {\n return true;\n }\n\n get session() {\n return this.signer.session;\n }\n\n // ---------- Protected --------------------------------------------- //\n\n protected registerEventListeners() {\n this.signer.on(\"session_event\", (payload: SignClientTypes.EventArguments[\"session_event\"]) => {\n const { params } = payload;\n const { event } = params;\n if (event.name === \"accountsChanged\") {\n this.accounts = this.parseAccounts(event.data);\n this.events.emit(\"accountsChanged\", this.accounts);\n } else if (event.name === \"chainChanged\") {\n this.setChainId(this.formatChainId(event.data));\n } else {\n this.events.emit(event.name as any, event.data);\n }\n this.events.emit(\"session_event\", payload);\n });\n\n this.signer.on(\"accountsChanged\", (accounts: string[]) => {\n this.accounts = this.parseAccounts(accounts);\n this.events.emit(\"accountsChanged\", this.accounts);\n });\n\n this.signer.on(\"chainChanged\", (chainId: string) => {\n const chain = parseInt(chainId);\n this.chainId = chain;\n this.events.emit(\"chainChanged\", toHexChainId(this.chainId));\n this.persist();\n });\n\n this.signer.on(\n \"session_update\",\n (payload: SignClientTypes.EventArguments[\"session_update\"]) => {\n this.events.emit(\"session_update\", payload);\n },\n );\n\n this.signer.on(\n \"session_delete\",\n (payload: SignClientTypes.EventArguments[\"session_delete\"]) => {\n this.reset();\n this.events.emit(\"session_delete\", payload);\n this.events.emit(\"disconnect\", {\n ...getSdkError(\"USER_DISCONNECTED\"),\n data: payload.topic,\n name: \"USER_DISCONNECTED\",\n });\n },\n );\n\n this.signer.on(\"display_uri\", (uri: string) => {\n this.events.emit(\"display_uri\", uri);\n });\n }\n\n protected switchEthereumChain(chainId: number): void {\n this.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId: chainId.toString(16) }],\n });\n }\n\n protected isCompatibleChainId(chainId: string): boolean {\n return typeof chainId === \"string\" ? chainId.startsWith(`${this.namespace}:`) : false;\n }\n\n protected formatChainId(chainId: number): string {\n return `${this.namespace}:${chainId}`;\n }\n\n protected parseChainId(chainId: string): number {\n return Number(chainId.split(\":\")[1]);\n }\n\n protected setChainIds(chains: string[]) {\n const compatible = chains.filter((x) => this.isCompatibleChainId(x));\n const chainIds = compatible.map((c) => this.parseChainId(c));\n if (chainIds.length) {\n this.chainId = chainIds[0];\n this.events.emit(\"chainChanged\", toHexChainId(this.chainId));\n this.persist();\n }\n }\n\n protected setChainId(chain: string) {\n if (this.isCompatibleChainId(chain)) {\n const chainId = this.parseChainId(chain);\n this.chainId = chainId;\n this.switchEthereumChain(chainId);\n }\n }\n\n protected parseAccountId(account: string): { chainId: string; address: string } {\n const [namespace, reference, address] = account.split(\":\");\n const chainId = `${namespace}:${reference}`;\n return { chainId, address };\n }\n\n protected setAccounts(accounts: string[]) {\n this.accounts = accounts\n .filter((x) => this.parseChainId(this.parseAccountId(x).chainId) === this.chainId)\n .map((x) => this.parseAccountId(x).address);\n this.events.emit(\"accountsChanged\", this.accounts);\n }\n\n protected getRpcConfig(opts: EthereumProviderOptions): EthereumRpcConfig {\n const requiredChains = opts?.chains ?? [];\n const optionalChains = opts?.optionalChains ?? [];\n const allChains = requiredChains.concat(optionalChains);\n if (!allChains.length)\n throw new Error(\"No chains specified in either `chains` or `optionalChains`\");\n const requiredMethods = requiredChains.length ? opts?.methods || REQUIRED_METHODS : [];\n const requiredEvents = requiredChains.length ? opts?.events || REQUIRED_EVENTS : [];\n const optionalMethods = opts?.optionalMethods || [];\n const optionalEvents = opts?.optionalEvents || [];\n const rpcMap = opts?.rpcMap || this.buildRpcMap(allChains, opts.projectId);\n const qrModalOptions = opts?.qrModalOptions || undefined;\n return {\n chains: requiredChains?.map((chain: number) => this.formatChainId(chain)),\n optionalChains: optionalChains.map((chain: number) => this.formatChainId(chain)),\n methods: requiredMethods,\n events: requiredEvents,\n optionalMethods,\n optionalEvents,\n rpcMap,\n showQrModal: Boolean(opts?.showQrModal),\n qrModalOptions,\n projectId: opts.projectId,\n metadata: opts.metadata,\n };\n }\n\n protected buildRpcMap(chains: number[], projectId: string): EthereumRpcMap {\n const map: EthereumRpcMap = {};\n chains.forEach((chain) => {\n map[chain] = this.getRpcUrl(chain, projectId);\n });\n return map;\n }\n\n protected async initialize(opts: EthereumProviderOptions) {\n this.rpc = this.getRpcConfig(opts);\n\n this.chainId = this.rpc.chains.length\n ? getEthereumChainId(this.rpc.chains)\n : getEthereumChainId(this.rpc.optionalChains);\n this.signer = await UniversalProvider.init({\n projectId: this.rpc.projectId,\n metadata: this.rpc.metadata,\n disableProviderPing: opts.disableProviderPing,\n relayUrl: opts.relayUrl,\n storage: opts.storage,\n storageOptions: opts.storageOptions,\n customStoragePrefix: opts.customStoragePrefix,\n telemetryEnabled: opts.telemetryEnabled,\n logger: opts.logger,\n });\n this.registerEventListeners();\n await this.loadPersistedSession();\n if (this.rpc.showQrModal) {\n let appKit;\n try {\n const createAppKit = await getAppkit();\n const { convertWCMToAppKitOptions } = await import(\"./wcmToAppKit.js\");\n const options = convertWCMToAppKitOptions({\n ...this.rpc.qrModalOptions,\n chains: [...new Set([...this.rpc.chains, ...this.rpc.optionalChains])],\n metadata: this.rpc.metadata,\n projectId: this.rpc.projectId,\n });\n\n if (!options.networks.length) {\n throw new Error(\"No networks found for WalletConnect\");\n }\n\n appKit = createAppKit({\n ...options,\n universalProvider: this.signer as any,\n manualWCControl: true,\n enableMobileFullScreen: this.rpc.qrModalOptions?.enableMobileFullScreen === true,\n });\n } catch (e) {\n console.warn(e);\n throw new Error(\"To use QR modal, please install @reown/appkit package\");\n }\n if (appKit) {\n try {\n this.modal = appKit;\n } catch (e) {\n this.signer.logger.error(e);\n throw new Error(\"Could not generate WalletConnectModal Instance\");\n }\n }\n }\n }\n\n protected loadConnectOpts(opts?: ConnectOps) {\n if (!opts) return;\n const { chains, optionalChains, rpcMap } = opts;\n if (chains && isValidArray(chains)) {\n this.rpc.chains = chains.map((chain) => this.formatChainId(chain));\n chains.forEach((chain) => {\n this.rpc.rpcMap[chain] = rpcMap?.[chain] || this.getRpcUrl(chain);\n });\n }\n if (optionalChains && isValidArray(optionalChains)) {\n this.rpc.optionalChains = [];\n this.rpc.optionalChains = optionalChains?.map((chain) => this.formatChainId(chain));\n optionalChains.forEach((chain) => {\n this.rpc.rpcMap[chain] = rpcMap?.[chain] || this.getRpcUrl(chain);\n });\n }\n }\n\n protected getRpcUrl(chainId: number, projectId?: string): string {\n const providedRpc = this.rpc.rpcMap?.[chainId];\n return (\n providedRpc ||\n `${RPC_URL}?chainId=eip155:${chainId}&projectId=${projectId || this.rpc.projectId}`\n );\n }\n\n protected async loadPersistedSession() {\n if (!this.session) return;\n try {\n const chainId = await this.signer.client.core.storage.getItem(`${this.STORAGE_KEY}/chainId`);\n\n // cater to both inline & nested namespace formats\n const namespace = this.session.namespaces[`${this.namespace}:${chainId}`]\n ? this.session.namespaces[`${this.namespace}:${chainId}`]\n : this.session.namespaces[this.namespace];\n\n this.setChainIds(chainId ? [this.formatChainId(chainId)] : namespace?.accounts);\n this.setAccounts(namespace?.accounts);\n } catch (error) {\n this.signer.logger.error(\"Failed to load persisted session, clearing state...\");\n this.signer.logger.error(error);\n await this.disconnect().catch((error) => this.signer.logger.warn(error));\n }\n }\n\n protected reset() {\n this.chainId = 1;\n this.accounts = [];\n }\n\n protected persist() {\n if (!this.session) return;\n this.signer.client.core.storage.setItem(`${this.STORAGE_KEY}/chainId`, this.chainId);\n }\n\n protected parseAccounts(payload: string | string[]): string[] {\n if (typeof payload === \"string\" || payload instanceof String) {\n return [this.parseAccount(payload)];\n }\n return payload.map((account: string) => this.parseAccount(account));\n }\n\n protected parseAccount = (payload: any): string => {\n return this.isCompatibleChainId(payload) ? this.parseAccountId(payload).address : payload;\n };\n}\n\nexport default EthereumProvider;\n","import { EthereumProvider as Provider } from \"./EthereumProvider.js\";\nexport const EthereumProvider = Provider;\nexport type { EthereumProviderOptions, RpcEvent, RpcMethod } from \"./EthereumProvider\";\nexport * from \"./constants/rpc.js\";\nexport default Provider;\n","import type { AppKitOptions, CaipNetwork, CaipNetworkId } from \"@reown/appkit\";\nimport type { WalletConnectModalConfig, Assign, ChainFormatters, Prettify } from \"./types.js\";\nimport type { AppKitNetwork } from \"@reown/appkit/networks\";\nimport type { EthereumProviderOptions } from \"./EthereumProvider.js\";\n\nfunction convertThemeVariables(\n wcmTheme?: WalletConnectModalConfig[\"themeVariables\"],\n): AppKitOptions[\"themeVariables\"] | undefined {\n if (!wcmTheme) return undefined;\n\n return {\n \"--w3m-font-family\": wcmTheme[\"--wcm-font-family\"],\n \"--w3m-accent\": wcmTheme[\"--wcm-accent-color\"],\n \"--w3m-color-mix\": wcmTheme[\"--wcm-background-color\"],\n \"--w3m-z-index\": wcmTheme[\"--wcm-z-index\"] ? Number(wcmTheme[\"--wcm-z-index\"]) : undefined,\n\n \"--w3m-qr-color\": wcmTheme[\"--wcm-accent-color\"],\n\n \"--w3m-font-size-master\": wcmTheme[\"--wcm-text-medium-regular-size\"],\n \"--w3m-border-radius-master\": wcmTheme[\"--wcm-container-border-radius\"],\n \"--w3m-color-mix-strength\": 0,\n };\n}\n\nconst mapCaipIdToAppKitCaipNetwork = (caipId: CaipNetworkId): CaipNetwork => {\n const [namespace, chainId] = caipId.split(\":\");\n const chain = defineChain({\n id: chainId,\n caipNetworkId: caipId,\n chainNamespace: namespace as CaipNetwork[\"chainNamespace\"],\n name: \"\",\n nativeCurrency: {\n name: \"\",\n symbol: \"\",\n decimals: 8,\n },\n rpcUrls: {\n default: { http: [\"https://rpc.walletconnect.org/v1\"] },\n },\n });\n\n return chain as CaipNetwork;\n};\n\nexport function convertWCMToAppKitOptions(\n wcmConfig: WalletConnectModalConfig & { metadata?: EthereumProviderOptions[\"metadata\"] },\n): AppKitOptions {\n // Convert chains toCaipNetwork format\n const networks: CaipNetwork[] = (wcmConfig.chains as CaipNetworkId[])\n ?.map(mapCaipIdToAppKitCaipNetwork)\n .filter(Boolean);\n\n // Ensure at least one network is present\n if (networks.length === 0) {\n throw new Error(\"At least one chain must be specified\");\n }\n\n const defaultNetwork = networks.find((network) => network.id === wcmConfig.defaultChain?.id);\n const appKitOptions: AppKitOptions = {\n projectId: wcmConfig.projectId,\n networks: networks as [AppKitNetwork, ...AppKitNetwork[]],\n themeMode: wcmConfig.themeMode,\n themeVariables: convertThemeVariables(wcmConfig.themeVariables),\n chainImages: wcmConfig.chainImages,\n connectorImages: wcmConfig.walletImages,\n defaultNetwork,\n metadata: {\n ...wcmConfig.metadata,\n name: wcmConfig.metadata?.name || \"WalletConnect\",\n description: wcmConfig.metadata?.description || \"Connect to WalletConnect-compatible wallets\",\n url: wcmConfig.metadata?.url || \"https://walletconnect.org\",\n icons: wcmConfig.metadata?.icons || [\"https://walletconnect.org/walletconnect-logo.png\"],\n },\n showWallets: true,\n // Explorer options mapping\n featuredWalletIds:\n wcmConfig.explorerRecommendedWalletIds === \"NONE\"\n ? []\n : Array.isArray(wcmConfig.explorerRecommendedWalletIds)\n ? wcmConfig.explorerRecommendedWalletIds\n : [],\n\n excludeWalletIds:\n wcmConfig.explorerExcludedWalletIds === \"ALL\"\n ? []\n : Array.isArray(wcmConfig.explorerExcludedWalletIds)\n ? wcmConfig.explorerExcludedWalletIds\n : [],\n\n // Additional AppKit-specific options that don't have direct WCM equivalents\n enableEIP6963: false, // Disable 6963 by default\n enableInjected: false, // Disable injected by default\n enableCoinbase: true, // Default to true\n enableWalletConnect: true, // Default to true,\n features: {\n email: false,\n socials: false,\n },\n };\n\n // Add mobile and desktop wallets as custom wallets if provided\n if (wcmConfig.mobileWallets?.length || wcmConfig.desktopWallets?.length) {\n const customWallets = [\n ...(wcmConfig.mobileWallets || []).map((wallet) => ({\n id: wallet.id,\n name: wallet.name,\n links: wallet.links,\n })),\n ...(wcmConfig.desktopWallets || []).map((wallet) => ({\n id: wallet.id,\n name: wallet.name,\n links: {\n native: wallet.links.native,\n universal: wallet.links.universal,\n },\n })),\n ];\n\n const allWallets = [\n ...(appKitOptions.featuredWalletIds || []),\n ...(appKitOptions.excludeWalletIds || []),\n ];\n\n // Only add a custom wallet if it's not on the other lists\n const uniqueCustomWallets = customWallets.filter((wallet) => !allWallets.includes(wallet.id));\n\n if (uniqueCustomWallets.length) {\n appKitOptions.customWallets = uniqueCustomWallets;\n }\n }\n\n return appKitOptions;\n}\n\nexport function defineChain<\n formatters extends ChainFormatters,\n const chain extends CaipNetwork<formatters>,\n>(chain: chain): Prettify<Assign<CaipNetwork<undefined>, chain>> {\n return {\n formatters: undefined,\n fees: undefined,\n serializers: undefined,\n ...chain,\n } as Assign<CaipNetwork<undefined>, chain>;\n}\n"],"names":["createAppKit","chains","chainId","params","optionalChains","methods","optionalMethods","events","optionalEvents","rpcMap","isValidArray","required","REQUIRED_METHODS","REQUIRED_EVENTS","__spreadValues","eventsRequiringPermissions","event","methodsRequiringPermissions","shouldIncludeRequiredChains","optional","OPTIONAL_METHODS","OPTIONAL_EVENTS","EthereumProvider","__publicField","EventEmitter","STORAGE_KEY","listener","payload","opts","provider","args","expiry","callback","_a","session","resolve","reject","_b","state","scopedProperties","__spreadProps","error","accounts","getAccountsFromNamespaces","walletUniversalLink","result","chain","getSdkError","uri","chainIds","x","c","account","namespace","reference","address","requiredChains","allChains","requiredMethods","requiredEvents","qrModalOptions","projectId","map","UniversalProvider","appKit","getAppkit","convertWCMToAppKitOptions","options","e","RPC_URL","Provider","convertThemeVariables","wcmTheme","mapCaipIdToAppKitCaipNetwork","caipId","wcmConfig","_c","_d","_e","_f","_g","networks","defaultNetwork","network","appKitOptions","customWallets","wallet","allWallets","uniqueCustomWallets"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/constants/values.ts","../src/constants/rpc.ts","../src/utils/appkit.ts","../src/EthereumProvider.ts","../src/index.ts","../src/wcmToAppKit.ts"],"sourcesContent":["export const PROTOCOL = \"wc\";\nexport const WC_VERSION = 2;\nexport const CONTEXT = \"ethereum_provider\";\nexport const STORAGE_KEY = `${PROTOCOL}@${WC_VERSION}:${CONTEXT}:`;\nexport const RPC_URL = \"https://rpc.walletconnect.org/v1/\";\n","export const REQUIRED_METHODS = [\"eth_sendTransaction\", \"personal_sign\"];\nexport const OPTIONAL_METHODS = [\n \"eth_accounts\",\n \"eth_requestAccounts\",\n \"eth_sendRawTransaction\",\n \"eth_sign\",\n \"eth_signTransaction\",\n \"eth_signTypedData\",\n \"eth_signTypedData_v3\",\n \"eth_signTypedData_v4\",\n \"eth_sendTransaction\",\n \"personal_sign\",\n \"wallet_switchEthereumChain\",\n \"wallet_addEthereumChain\",\n \"wallet_getPermissions\",\n \"wallet_requestPermissions\",\n \"wallet_registerOnboarding\",\n \"wallet_watchAsset\",\n \"wallet_scanQRCode\",\n \"wallet_sendCalls\",\n \"wallet_getCapabilities\",\n \"wallet_getCallsStatus\",\n \"wallet_showCallsStatus\",\n];\nexport const REQUIRED_EVENTS = [\"chainChanged\", \"accountsChanged\"];\nexport const OPTIONAL_EVENTS = [\n \"chainChanged\",\n \"accountsChanged\",\n \"message\",\n \"disconnect\",\n \"connect\",\n];\n","export const getAppkit = async () => {\n const { createAppKit } = await import(\"@reown/appkit/core\");\n return createAppKit;\n};\n","import { EventEmitter } from \"events\";\nimport { getAccountsFromNamespaces, getSdkError, isValidArray } from \"@walletconnect/utils\";\nimport { KeyValueStorageOptions } from \"@walletconnect/keyvaluestorage\";\nimport {\n IEthereumProvider as IProvider,\n IEthereumProviderEvents,\n ProviderAccounts,\n RequestArguments,\n QrModalOptions,\n} from \"./types.js\";\nimport {\n Metadata,\n Namespace,\n UniversalProvider,\n UniversalProviderOpts,\n} from \"@walletconnect/universal-provider\";\nimport { AuthTypes, SessionTypes, SignClientTypes } from \"@walletconnect/types\";\nimport { JsonRpcResult } from \"@walletconnect/jsonrpc-types\";\nimport {\n STORAGE_KEY,\n REQUIRED_METHODS,\n REQUIRED_EVENTS,\n RPC_URL,\n OPTIONAL_METHODS,\n OPTIONAL_EVENTS,\n} from \"./constants/index.js\";\nimport { getAppkit } from \"./utils/appkit.js\";\n\nexport type RpcMethod =\n | \"personal_sign\"\n | \"eth_sendTransaction\"\n | \"eth_accounts\"\n | \"eth_requestAccounts\"\n | \"eth_call\"\n | \"eth_getBalance\"\n | \"eth_sendRawTransaction\"\n | \"eth_sign\"\n | \"eth_signTransaction\"\n | \"eth_signTypedData\"\n | \"eth_signTypedData_v3\"\n | \"eth_signTypedData_v4\"\n | \"wallet_switchEthereumChain\"\n | \"wallet_addEthereumChain\"\n | \"wallet_getPermissions\"\n | \"wallet_requestPermissions\"\n | \"wallet_registerOnboarding\"\n | \"wallet_watchAsset\"\n | \"wallet_scanQRCode\"\n | \"wallet_sendCalls\"\n | \"wallet_getCapabilities\"\n | \"wallet_getCallsStatus\"\n | \"wallet_showCallsStatus\";\n\nexport type RpcEvent = \"accountsChanged\" | \"chainChanged\" | \"message\" | \"disconnect\" | \"connect\";\n\nexport interface EthereumRpcMap {\n [chainId: string]: string;\n}\n\nexport interface SessionEvent {\n event: { name: string; data: any };\n chainId: string;\n}\n\nexport interface EthereumRpcConfig {\n chains: string[];\n optionalChains: string[];\n methods: string[];\n optionalMethods?: string[];\n /**\n * @description Events that the wallet MUST support or the connection will be rejected\n */\n events: string[];\n optionalEvents?: string[];\n rpcMap: EthereumRpcMap;\n projectId: string;\n metadata?: Metadata;\n showQrModal: boolean;\n qrModalOptions?: QrModalOptions;\n}\nexport interface ConnectOps {\n chains?: number[];\n optionalChains?: number[];\n rpcMap?: EthereumRpcMap;\n pairingTopic?: string;\n scopedProperties?: unknown;\n}\n\nexport type AuthenticateParams = {\n chains?: number[];\n} & Omit<AuthTypes.SessionAuthenticateParams, \"chains\">;\n\nexport interface IEthereumProvider extends IProvider {\n connect(opts?: ConnectOps | undefined): Promise<void>;\n}\n\nexport function getRpcUrl(chainId: string, rpc: EthereumRpcConfig): string | undefined {\n let rpcUrl: string | undefined;\n if (rpc.rpcMap) {\n rpcUrl = rpc.rpcMap[getEthereumChainId([chainId])];\n }\n return rpcUrl;\n}\n\nexport function getEthereumChainId(chains: string[]): number {\n return Number(chains[0].split(\":\")[1]);\n}\n\nexport function toHexChainId(chainId: number): string {\n return `0x${chainId.toString(16)}`;\n}\n\nexport type NamespacesParams = {\n chains: EthereumRpcConfig[\"chains\"];\n optionalChains: EthereumRpcConfig[\"optionalChains\"];\n methods?: EthereumRpcConfig[\"methods\"];\n optionalMethods?: EthereumRpcConfig[\"methods\"];\n events?: EthereumRpcConfig[\"events\"];\n rpcMap: EthereumRpcConfig[\"rpcMap\"];\n optionalEvents?: EthereumRpcConfig[\"events\"];\n};\n\nexport function buildNamespaces(params: NamespacesParams): {\n required?: Namespace;\n optional?: Namespace;\n} {\n const { chains, optionalChains, methods, optionalMethods, events, optionalEvents, rpcMap } =\n params;\n if (!isValidArray(chains)) {\n throw new Error(\"Invalid chains\");\n }\n\n const required: Namespace = {\n chains,\n methods: methods || REQUIRED_METHODS,\n events: events || REQUIRED_EVENTS,\n rpcMap: {\n ...(chains.length\n ? { [getEthereumChainId(chains)]: rpcMap[getEthereumChainId(chains)] }\n : {}),\n },\n };\n\n // make a list of events and methods that require additional permissions\n // so we know if we should to include the required chains in the optional namespace\n const eventsRequiringPermissions = events?.filter((event) => !REQUIRED_EVENTS.includes(event));\n const methodsRequiringPermissions = methods?.filter((event) => !REQUIRED_METHODS.includes(event));\n\n if (\n !optionalChains &&\n !optionalEvents &&\n !optionalMethods &&\n !eventsRequiringPermissions?.length &&\n !methodsRequiringPermissions?.length\n ) {\n return { required: chains.length ? required : undefined };\n }\n\n /*\n * decides whether or not to include the required chains in the optional namespace\n * use case: if there is a single chain as required but additional methods/events as optional\n */\n const shouldIncludeRequiredChains =\n (eventsRequiringPermissions?.length && methodsRequiringPermissions?.length) || !optionalChains;\n\n const optional: Namespace = {\n chains: [\n ...new Set(\n shouldIncludeRequiredChains ? required.chains.concat(optionalChains || []) : optionalChains,\n ),\n ],\n methods: [\n ...new Set(\n required.methods.concat(optionalMethods?.length ? optionalMethods : OPTIONAL_METHODS),\n ),\n ],\n events: [\n ...new Set(required.events.concat(optionalEvents?.length ? optionalEvents : OPTIONAL_EVENTS)),\n ],\n rpcMap,\n };\n\n return {\n required: chains.length ? required : undefined,\n optional: optionalChains.length ? optional : undefined,\n };\n}\n\n// helper type to force setting at least one value in an array\ntype ArrayOneOrMore<T> = {\n 0: T;\n} & Array<T>;\n\n/**\n * @param {number[]} chains - The Chains your app intents to use and the peer MUST support. If the peer does not support these chains, the connection will be rejected.\n * @param {number[]} optionalChains - The Chains your app MAY attempt to use and the peer MAY support. If the peer does not support these chains, the connection will still be established.\n * @description either chains or optionalChains must be provided\n */\nexport type ChainsProps =\n | {\n chains: ArrayOneOrMore<number>;\n optionalChains?: number[];\n }\n | {\n chains?: number[];\n optionalChains: ArrayOneOrMore<number>;\n };\n\nexport type EthereumProviderOptions = {\n projectId: string;\n /**\n * @note Methods that your app intents to use and the peer MUST support. If the peer does not support these methods, the connection will be rejected.\n * @default [\"eth_sendTransaction\", \"personal_sign\"]\n */\n methods?: string[];\n /**\n * @note Methods that your app MAY attempt to use and the peer MAY support. If the peer does not support these methods, the connection will still be established.\n */\n optionalMethods?: string[];\n events?: string[];\n optionalEvents?: string[];\n rpcMap?: EthereumRpcMap;\n metadata?: Metadata;\n showQrModal: boolean;\n qrModalOptions?: QrModalOptions;\n disableProviderPing?: boolean;\n relayUrl?: string;\n storageOptions?: KeyValueStorageOptions;\n} & ChainsProps &\n UniversalProviderOpts;\n\nexport class EthereumProvider implements IEthereumProvider {\n public events = new EventEmitter();\n public namespace = \"eip155\";\n public accounts: string[] = [];\n public signer: InstanceType<typeof UniversalProvider>;\n public chainId = 1;\n public modal?: any;\n\n protected rpc: EthereumRpcConfig;\n protected readonly STORAGE_KEY = STORAGE_KEY;\n\n constructor() {\n // assigned during initialize\n this.signer = {} as InstanceType<typeof UniversalProvider>;\n this.rpc = {} as EthereumRpcConfig;\n }\n\n static async init(opts: EthereumProviderOptions): Promise<EthereumProvider> {\n const provider = new EthereumProvider();\n await provider.initialize(opts);\n return provider;\n }\n\n public async request<T = unknown>(args: RequestArguments, expiry?: number): Promise<T> {\n return await this.signer.request(args, this.formatChainId(this.chainId), expiry);\n }\n\n public sendAsync(\n args: RequestArguments,\n callback: (error: Error | null, response: JsonRpcResult) => void,\n expiry?: number,\n ): void {\n this.signer.sendAsync(args, callback, this.formatChainId(this.chainId), expiry);\n }\n\n get connected(): boolean {\n if (!this.signer.client) return false;\n return this.signer.client.core.relayer.connected;\n }\n\n get connecting(): boolean {\n if (!this.signer.client) return false;\n return this.signer.client.core.relayer.connecting;\n }\n\n public async enable(): Promise<ProviderAccounts> {\n if (!this.session) await this.connect();\n const accounts = await this.request({ method: \"eth_requestAccounts\" });\n return accounts as ProviderAccounts;\n }\n\n public async connect(opts?: ConnectOps): Promise<void> {\n if (!this.signer.client) {\n throw new Error(\"Provider not initialized. Call init() first\");\n }\n\n this.loadConnectOpts(opts);\n const { required, optional } = buildNamespaces(this.rpc);\n try {\n const session = await new Promise<SessionTypes.Struct | undefined>(\n async (resolve, reject) => {\n if (this.rpc.showQrModal) {\n this.modal?.open();\n\n this.modal?.subscribeState((state: { open: boolean }) => {\n // the modal was closed so reject the promise\n if (!state.open && !this.signer.session) {\n this.signer.abortPairingAttempt();\n reject(new Error(\"Connection request reset. Please try again.\"));\n }\n });\n }\n const scopedProperties = opts?.scopedProperties\n ? { [this.namespace]: opts.scopedProperties }\n : undefined;\n\n await this.signer\n .connect({\n namespaces: {\n ...(required && {\n [this.namespace]: required,\n }),\n },\n ...(optional && {\n optionalNamespaces: {\n [this.namespace]: optional,\n },\n }),\n pairingTopic: opts?.pairingTopic,\n scopedProperties,\n })\n .then((session?: SessionTypes.Struct) => {\n resolve(session);\n })\n .catch((error: Error) => {\n this.modal?.showErrorMessage(\"Unable to connect\");\n reject(new Error(error.message));\n });\n },\n );\n\n if (!session) return;\n\n const accounts = getAccountsFromNamespaces(session.namespaces, [this.namespace]);\n // if no required chains are set, use the approved accounts to fetch chainIds\n this.setChainIds(this.rpc.chains.length ? this.rpc.chains : accounts);\n this.setAccounts(accounts);\n this.events.emit(\"connect\", { chainId: toHexChainId(this.chainId) });\n } catch (error) {\n this.signer.logger.error(error);\n throw error;\n } finally {\n this.modal?.close();\n }\n }\n\n public async authenticate(\n params: AuthenticateParams,\n walletUniversalLink?: string,\n ): Promise<AuthTypes.AuthenticateResponseResult | undefined> {\n if (!this.signer.client) {\n throw new Error(\"Provider not initialized. Call init() first\");\n }\n\n this.loadConnectOpts({\n chains: params?.chains,\n });\n\n try {\n const result = await new Promise<AuthTypes.AuthenticateResponseResult>(\n async (resolve, reject) => {\n if (this.rpc.showQrModal) {\n this.modal?.open();\n this.modal?.subscribeState((state: { open: boolean }) => {\n // the modal was closed so reject the promise\n if (!state.open && !this.signer.session) {\n this.signer.abortPairingAttempt();\n reject(new Error(\"Connection request reset. Please try again.\"));\n }\n });\n }\n await this.signer\n .authenticate(\n {\n ...params,\n chains: this.rpc.chains,\n },\n walletUniversalLink,\n )\n .then((result: AuthTypes.AuthenticateResponseResult) => {\n resolve(result);\n })\n .catch((error: Error) => {\n this.modal?.showErrorMessage(\"Unable to connect\");\n reject(new Error(error.message));\n });\n },\n );\n\n const session = result.session;\n if (session) {\n const accounts = getAccountsFromNamespaces(session.namespaces, [this.namespace]);\n // if no required chains are set, use the approved accounts to fetch chainIds as both contain <namespace>:<chainId>\n this.setChainIds(this.rpc.chains.length ? this.rpc.chains : accounts);\n this.setAccounts(accounts);\n\n this.events.emit(\"connect\", { chainId: toHexChainId(this.chainId) });\n }\n\n return result;\n } catch (error) {\n this.signer.logger.error(error);\n throw error;\n } finally {\n this.modal?.close();\n }\n }\n\n public async disconnect(): Promise<void> {\n if (this.session) {\n await this.signer.disconnect();\n }\n this.reset();\n }\n\n public on: IEthereumProviderEvents[\"on\"] = (event, listener) => {\n this.events.on(event, listener);\n return this;\n };\n\n public once: IEthereumProviderEvents[\"once\"] = (event, listener) => {\n this.events.once(event, listener);\n return this;\n };\n\n public removeListener: IEthereumProviderEvents[\"removeListener\"] = (event, listener) => {\n this.events.removeListener(event, listener);\n return this;\n };\n\n public off: IEthereumProviderEvents[\"off\"] = (event, listener) => {\n this.events.off(event, listener);\n return this;\n };\n\n get isWalletConnect() {\n return true;\n }\n\n get session() {\n return this.signer.session;\n }\n\n // ---------- Protected --------------------------------------------- //\n\n protected registerEventListeners() {\n this.signer.on(\"session_event\", (payload: SignClientTypes.EventArguments[\"session_event\"]) => {\n const { params } = payload;\n const { event } = params;\n if (event.name === \"accountsChanged\") {\n this.accounts = this.parseAccounts(event.data);\n this.events.emit(\"accountsChanged\", this.accounts);\n } else if (event.name === \"chainChanged\") {\n this.setChainId(this.formatChainId(event.data));\n } else {\n this.events.emit(event.name as any, event.data);\n }\n this.events.emit(\"session_event\", payload);\n });\n\n this.signer.on(\"accountsChanged\", (accounts: string[]) => {\n this.accounts = this.parseAccounts(accounts);\n this.events.emit(\"accountsChanged\", this.accounts);\n });\n\n this.signer.on(\"chainChanged\", (chainId: string) => {\n const chain = parseInt(chainId);\n this.chainId = chain;\n this.events.emit(\"chainChanged\", toHexChainId(this.chainId));\n this.persist();\n });\n\n this.signer.on(\n \"session_update\",\n (payload: SignClientTypes.EventArguments[\"session_update\"]) => {\n this.events.emit(\"session_update\", payload);\n },\n );\n\n this.signer.on(\n \"session_delete\",\n (payload: SignClientTypes.EventArguments[\"session_delete\"]) => {\n this.reset();\n this.events.emit(\"session_delete\", payload);\n this.events.emit(\"disconnect\", {\n ...getSdkError(\"USER_DISCONNECTED\"),\n data: payload.topic,\n name: \"USER_DISCONNECTED\",\n });\n },\n );\n\n this.signer.on(\"display_uri\", (uri: string) => {\n this.events.emit(\"display_uri\", uri);\n });\n }\n\n protected switchEthereumChain(chainId: number): void {\n this.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId: chainId.toString(16) }],\n });\n }\n\n protected isCompatibleChainId(chainId: string): boolean {\n return typeof chainId === \"string\" ? chainId.startsWith(`${this.namespace}:`) : false;\n }\n\n protected formatChainId(chainId: number): string {\n return `${this.namespace}:${chainId}`;\n }\n\n protected parseChainId(chainId: string): number {\n return Number(chainId.split(\":\")[1]);\n }\n\n protected setChainIds(chains: string[]) {\n const compatible = chains.filter((x) => this.isCompatibleChainId(x));\n const chainIds = compatible.map((c) => this.parseChainId(c));\n if (chainIds.length) {\n this.chainId = chainIds[0];\n this.events.emit(\"chainChanged\", toHexChainId(this.chainId));\n this.persist();\n }\n }\n\n protected setChainId(chain: string) {\n if (this.isCompatibleChainId(chain)) {\n const chainId = this.parseChainId(chain);\n this.chainId = chainId;\n this.switchEthereumChain(chainId);\n }\n }\n\n protected parseAccountId(account: string): { chainId: string; address: string } {\n const [namespace, reference, address] = account.split(\":\");\n const chainId = `${namespace}:${reference}`;\n return { chainId, address };\n }\n\n protected setAccounts(accounts: string[]) {\n this.accounts = accounts\n .filter((x) => this.parseChainId(this.parseAccountId(x).chainId) === this.chainId)\n .map((x) => this.parseAccountId(x).address);\n this.events.emit(\"accountsChanged\", this.accounts);\n }\n\n protected getRpcConfig(opts: EthereumProviderOptions): EthereumRpcConfig {\n const requiredChains = opts?.chains ?? [];\n const optionalChains = opts?.optionalChains ?? [];\n const allChains = requiredChains.concat(optionalChains);\n if (!allChains.length)\n throw new Error(\"No chains specified in either `chains` or `optionalChains`\");\n const requiredMethods = requiredChains.length ? opts?.methods || REQUIRED_METHODS : [];\n const requiredEvents = requiredChains.length ? opts?.events || REQUIRED_EVENTS : [];\n const optionalMethods = opts?.optionalMethods || [];\n const optionalEvents = opts?.optionalEvents || [];\n const rpcMap = opts?.rpcMap || this.buildRpcMap(allChains, opts.projectId);\n const qrModalOptions = opts?.qrModalOptions || undefined;\n return {\n chains: requiredChains?.map((chain: number) => this.formatChainId(chain)),\n optionalChains: optionalChains.map((chain: number) => this.formatChainId(chain)),\n methods: requiredMethods,\n events: requiredEvents,\n optionalMethods,\n optionalEvents,\n rpcMap,\n showQrModal: Boolean(opts?.showQrModal),\n qrModalOptions,\n projectId: opts.projectId,\n metadata: opts.metadata,\n };\n }\n\n protected buildRpcMap(chains: number[], projectId: string): EthereumRpcMap {\n const map: EthereumRpcMap = {};\n chains.forEach((chain) => {\n map[chain] = this.getRpcUrl(chain, projectId);\n });\n return map;\n }\n\n protected async initialize(opts: EthereumProviderOptions) {\n this.rpc = this.getRpcConfig(opts);\n\n this.chainId = this.rpc.chains.length\n ? getEthereumChainId(this.rpc.chains)\n : getEthereumChainId(this.rpc.optionalChains);\n this.signer = await UniversalProvider.init({\n projectId: this.rpc.projectId,\n metadata: this.rpc.metadata,\n disableProviderPing: opts.disableProviderPing,\n relayUrl: opts.relayUrl,\n storage: opts.storage,\n storageOptions: opts.storageOptions,\n customStoragePrefix: opts.customStoragePrefix,\n telemetryEnabled: opts.telemetryEnabled,\n logger: opts.logger,\n });\n this.registerEventListeners();\n await this.loadPersistedSession();\n if (this.rpc.showQrModal) {\n let appKit;\n try {\n const createAppKit = await getAppkit();\n const { convertWCMToAppKitOptions } = await import(\"./wcmToAppKit.js\");\n const options = convertWCMToAppKitOptions({\n ...this.rpc.qrModalOptions,\n chains: [...new Set([...this.rpc.chains, ...this.rpc.optionalChains])],\n metadata: this.rpc.metadata,\n projectId: this.rpc.projectId,\n });\n\n if (!options.networks.length) {\n throw new Error(\"No networks found for WalletConnect\");\n }\n\n appKit = createAppKit({\n ...options,\n universalProvider: this.signer as any,\n manualWCControl: true,\n enableMobileFullScreen: this.rpc.qrModalOptions?.enableMobileFullScreen === true,\n });\n } catch (e) {\n console.warn(e);\n throw new Error(\"To use QR modal, please install @reown/appkit package\");\n }\n if (appKit) {\n try {\n this.modal = appKit;\n } catch (e) {\n this.signer.logger.error(e);\n throw new Error(\"Could not generate WalletConnectModal Instance\");\n }\n }\n }\n }\n\n protected loadConnectOpts(opts?: ConnectOps) {\n if (!opts) return;\n const { chains, optionalChains, rpcMap } = opts;\n if (chains && isValidArray(chains)) {\n this.rpc.chains = chains.map((chain) => this.formatChainId(chain));\n chains.forEach((chain) => {\n this.rpc.rpcMap[chain] = rpcMap?.[chain] || this.getRpcUrl(chain);\n });\n }\n if (optionalChains && isValidArray(optionalChains)) {\n this.rpc.optionalChains = [];\n this.rpc.optionalChains = optionalChains?.map((chain) => this.formatChainId(chain));\n optionalChains.forEach((chain) => {\n this.rpc.rpcMap[chain] = rpcMap?.[chain] || this.getRpcUrl(chain);\n });\n }\n }\n\n protected getRpcUrl(chainId: number, projectId?: string): string {\n const providedRpc = this.rpc.rpcMap?.[chainId];\n return (\n providedRpc ||\n `${RPC_URL}?chainId=eip155:${chainId}&projectId=${projectId || this.rpc.projectId}`\n );\n }\n\n protected async loadPersistedSession() {\n if (!this.session) return;\n try {\n const chainId = await this.signer.client.core.storage.getItem(`${this.STORAGE_KEY}/chainId`);\n\n // cater to both inline & nested namespace formats\n const namespace = this.session.namespaces[`${this.namespace}:${chainId}`]\n ? this.session.namespaces[`${this.namespace}:${chainId}`]\n : this.session.namespaces[this.namespace];\n\n this.setChainIds(chainId ? [this.formatChainId(chainId)] : namespace?.accounts);\n this.setAccounts(namespace?.accounts);\n } catch (error) {\n this.signer.logger.error(\"Failed to load persisted session, clearing state...\");\n this.signer.logger.error(error);\n await this.disconnect().catch((error) => this.signer.logger.warn(error));\n }\n }\n\n protected reset() {\n this.chainId = 1;\n this.accounts = [];\n }\n\n protected persist() {\n if (!this.session) return;\n this.signer.client.core.storage.setItem(`${this.STORAGE_KEY}/chainId`, this.chainId);\n }\n\n protected parseAccounts(payload: string | string[]): string[] {\n if (typeof payload === \"string\" || payload instanceof String) {\n return [this.parseAccount(payload)];\n }\n return payload.map((account: string) => this.parseAccount(account));\n }\n\n protected parseAccount = (payload: any): string => {\n return this.isCompatibleChainId(payload) ? this.parseAccountId(payload).address : payload;\n };\n}\n\nexport default EthereumProvider;\n","import { EthereumProvider as Provider } from \"./EthereumProvider.js\";\nexport const EthereumProvider = Provider;\nexport type { EthereumProviderOptions, RpcEvent, RpcMethod } from \"./EthereumProvider\";\nexport * from \"./constants/rpc.js\";\nexport default Provider;\n","import type { AppKitOptions, CaipNetwork, CaipNetworkId } from \"@reown/appkit\";\nimport type { WalletConnectModalConfig, Assign, ChainFormatters, Prettify } from \"./types.js\";\nimport type { AppKitNetwork } from \"@reown/appkit/networks\";\nimport type { EthereumProviderOptions } from \"./EthereumProvider.js\";\n\nfunction convertThemeVariables(\n wcmTheme?: WalletConnectModalConfig[\"themeVariables\"],\n): AppKitOptions[\"themeVariables\"] | undefined {\n if (!wcmTheme) return undefined;\n\n return {\n \"--w3m-font-family\": wcmTheme[\"--wcm-font-family\"],\n \"--w3m-accent\": wcmTheme[\"--wcm-accent-color\"],\n \"--w3m-color-mix\": wcmTheme[\"--wcm-background-color\"],\n \"--w3m-z-index\": wcmTheme[\"--wcm-z-index\"] ? Number(wcmTheme[\"--wcm-z-index\"]) : undefined,\n\n \"--w3m-qr-color\": wcmTheme[\"--wcm-accent-color\"],\n\n \"--w3m-font-size-master\": wcmTheme[\"--wcm-text-medium-regular-size\"],\n \"--w3m-border-radius-master\": wcmTheme[\"--wcm-container-border-radius\"],\n \"--w3m-color-mix-strength\": 0,\n };\n}\n\nconst mapCaipIdToAppKitCaipNetwork = (caipId: CaipNetworkId): CaipNetwork => {\n const [namespace, chainId] = caipId.split(\":\");\n const chain = defineChain({\n id: chainId,\n caipNetworkId: caipId,\n chainNamespace: namespace as CaipNetwork[\"chainNamespace\"],\n name: \"\",\n nativeCurrency: {\n name: \"\",\n symbol: \"\",\n decimals: 8,\n },\n rpcUrls: {\n default: { http: [\"https://rpc.walletconnect.org/v1\"] },\n },\n });\n\n return chain as CaipNetwork;\n};\n\nexport function convertWCMToAppKitOptions(\n wcmConfig: WalletConnectModalConfig & { metadata?: EthereumProviderOptions[\"metadata\"] },\n): AppKitOptions {\n // Convert chains toCaipNetwork format\n const networks: CaipNetwork[] = (wcmConfig.chains as CaipNetworkId[])\n ?.map(mapCaipIdToAppKitCaipNetwork)\n .filter(Boolean);\n\n // Ensure at least one network is present\n if (networks.length === 0) {\n throw new Error(\"At least one chain must be specified\");\n }\n\n const defaultNetwork = networks.find((network) => network.id === wcmConfig.defaultChain?.id);\n const appKitOptions: AppKitOptions = {\n projectId: wcmConfig.projectId,\n networks: networks as [AppKitNetwork, ...AppKitNetwork[]],\n themeMode: wcmConfig.themeMode,\n themeVariables: convertThemeVariables(wcmConfig.themeVariables),\n chainImages: wcmConfig.chainImages,\n connectorImages: wcmConfig.walletImages,\n defaultNetwork,\n metadata: {\n ...wcmConfig.metadata,\n name: wcmConfig.metadata?.name || \"WalletConnect\",\n description: wcmConfig.metadata?.description || \"Connect to WalletConnect-compatible wallets\",\n url: wcmConfig.metadata?.url || \"https://walletconnect.org\",\n icons: wcmConfig.metadata?.icons || [\"https://walletconnect.org/walletconnect-logo.png\"],\n },\n showWallets: true,\n // Explorer options mapping\n featuredWalletIds:\n wcmConfig.explorerRecommendedWalletIds === \"NONE\"\n ? []\n : Array.isArray(wcmConfig.explorerRecommendedWalletIds)\n ? wcmConfig.explorerRecommendedWalletIds\n : [],\n\n excludeWalletIds:\n wcmConfig.explorerExcludedWalletIds === \"ALL\"\n ? []\n : Array.isArray(wcmConfig.explorerExcludedWalletIds)\n ? wcmConfig.explorerExcludedWalletIds\n : [],\n\n // Additional AppKit-specific options that don't have direct WCM equivalents\n enableEIP6963: false, // Disable 6963 by default\n enableInjected: false, // Disable injected by default\n enableCoinbase: true, // Default to true\n enableWalletConnect: true, // Default to true,\n features: {\n email: false,\n socials: false,\n },\n };\n\n // Add mobile and desktop wallets as custom wallets if provided\n if (wcmConfig.mobileWallets?.length || wcmConfig.desktopWallets?.length) {\n const customWallets = [\n ...(wcmConfig.mobileWallets || []).map((wallet) => ({\n id: wallet.id,\n name: wallet.name,\n links: wallet.links,\n })),\n ...(wcmConfig.desktopWallets || []).map((wallet) => ({\n id: wallet.id,\n name: wallet.name,\n links: {\n native: wallet.links.native,\n universal: wallet.links.universal,\n },\n })),\n ];\n\n const allWallets = [\n ...(appKitOptions.featuredWalletIds || []),\n ...(appKitOptions.excludeWalletIds || []),\n ];\n\n // Only add a custom wallet if it's not on the other lists\n const uniqueCustomWallets = customWallets.filter((wallet) => !allWallets.includes(wallet.id));\n\n if (uniqueCustomWallets.length) {\n appKitOptions.customWallets = uniqueCustomWallets;\n }\n }\n\n return appKitOptions;\n}\n\nexport function defineChain<\n formatters extends ChainFormatters,\n const chain extends CaipNetwork<formatters>,\n>(chain: chain): Prettify<Assign<CaipNetwork<undefined>, chain>> {\n return {\n formatters: undefined,\n fees: undefined,\n serializers: undefined,\n ...chain,\n } as Assign<CaipNetwork<undefined>, chain>;\n}\n"],"names":["PROTOCOL","CONTEXT","STORAGE_KEY","RPC_URL","REQUIRED_METHODS","OPTIONAL_METHODS","REQUIRED_EVENTS","OPTIONAL_EVENTS","getAppkit","createAppKit","getEthereumChainId","chains","toHexChainId","chainId","buildNamespaces","params","optionalChains","methods","optionalMethods","events","optionalEvents","rpcMap","isValidArray","required","eventsRequiringPermissions","event","methodsRequiringPermissions","shouldIncludeRequiredChains","optional","EthereumProvider$1","EthereumProvider","EventEmitter","listener","payload","opts","provider","args","expiry","callback","session","resolve","reject","state","scopedProperties","error","accounts","getAccountsFromNamespaces","walletUniversalLink","result","chain","getSdkError","uri","chainIds","x","c","account","namespace","reference","address","requiredChains","allChains","requiredMethods","requiredEvents","qrModalOptions","projectId","map","UniversalProvider","appKit","convertWCMToAppKitOptions","options","e","Provider","convertThemeVariables","wcmTheme","mapCaipIdToAppKitCaipNetwork","caipId","defineChain","wcmConfig","networks","defaultNetwork","network","appKitOptions","customWallets","wallet","allWallets","uniqueCustomWallets"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{EventEmitter as j}from"events";import{getAccountsFromNamespaces as O,getSdkError as x,isValidArray as y}from"@walletconnect/utils";import{UniversalProvider as N}from"@walletconnect/universal-provider";const $="wc",k="ethereum_provider",q=`${$}@2:${k}:`,U="https://rpc.walletconnect.org/v1/",f=["eth_sendTransaction","personal_sign"],A=["eth_accounts","eth_requestAccounts","eth_sendRawTransaction","eth_sign","eth_signTransaction","eth_signTypedData","eth_signTypedData_v3","eth_signTypedData_v4","eth_sendTransaction","personal_sign","wallet_switchEthereumChain","wallet_addEthereumChain","wallet_getPermissions","wallet_requestPermissions","wallet_registerOnboarding","wallet_watchAsset","wallet_scanQRCode","wallet_sendCalls","wallet_getCapabilities","wallet_getCallsStatus","wallet_showCallsStatus"],C=["chainChanged","accountsChanged"],P=["chainChanged","accountsChanged","message","disconnect","connect"],D=async()=>{const{createAppKit:s}=await import("@reown/appkit/core");return s};var z=Object.defineProperty,L=Object.defineProperties,K=Object.getOwnPropertyDescriptors,M=Object.getOwnPropertySymbols,Q=Object.prototype.hasOwnProperty,V=Object.prototype.propertyIsEnumerable,_=(s,t,e)=>t in s?z(s,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):s[t]=e,v=(s,t)=>{for(var e in t||(t={}))Q.call(t,e)&&_(s,e,t[e]);if(M)for(var e of M(t))V.call(t,e)&&_(s,e,t[e]);return s},w=(s,t)=>L(s,K(t)),p=(s,t,e)=>_(s,typeof t!="symbol"?t+"":t,e);function I(s){return Number(s[0].split(":")[1])}function b(s){return`0x${s.toString(16)}`}function F(s){const{chains:t,optionalChains:e,methods:n,optionalMethods:i,events:a,optionalEvents:r,rpcMap:u}=s;if(!y(t))throw new Error("Invalid chains");const c={chains:t,methods:n||f,events:a||C,rpcMap:v({},t.length?{[I(t)]:u[I(t)]}:{})},l=a?.filter(d=>!C.includes(d)),o=n?.filter(d=>!f.includes(d));if(!e&&!r&&!i&&!(l!=null&&l.length)&&!(o!=null&&o.length))return{required:t.length?c:void 0};const m=l?.length&&o?.length||!e,h={chains:[...new Set(m?c.chains.concat(e||[]):e)],methods:[...new Set(c.methods.concat(i!=null&&i.length?i:A))],events:[...new Set(c.events.concat(r!=null&&r.length?r:P))],rpcMap:u};return{required:t.length?c:void 0,optional:e.length?h:void 0}}class E{constructor(){p(this,"events",new j),p(this,"namespace","eip155"),p(this,"accounts",[]),p(this,"signer"),p(this,"chainId",1),p(this,"modal"),p(this,"rpc"),p(this,"STORAGE_KEY",q),p(this,"on",(t,e)=>(this.events.on(t,e),this)),p(this,"once",(t,e)=>(this.events.once(t,e),this)),p(this,"removeListener",(t,e)=>(this.events.removeListener(t,e),this)),p(this,"off",(t,e)=>(this.events.off(t,e),this)),p(this,"parseAccount",t=>this.isCompatibleChainId(t)?this.parseAccountId(t).address:t),this.signer={},this.rpc={}}static async init(t){const e=new E;return await e.initialize(t),e}async request(t,e){return await this.signer.request(t,this.formatChainId(this.chainId),e)}sendAsync(t,e,n){this.signer.sendAsync(t,e,this.formatChainId(this.chainId),n)}get connected(){return this.signer.client?this.signer.client.core.relayer.connected:!1}get connecting(){return this.signer.client?this.signer.client.core.relayer.connecting:!1}async enable(){return this.session||await this.connect(),await this.request({method:"eth_requestAccounts"})}async connect(t){var e;if(!this.signer.client)throw new Error("Provider not initialized. Call init() first");this.loadConnectOpts(t);const{required:n,optional:i}=F(this.rpc);try{const a=await new Promise(async(u,c)=>{var l,o;this.rpc.showQrModal&&((l=this.modal)==null||l.open(),(o=this.modal)==null||o.subscribeState(h=>{!h.open&&!this.signer.session&&(this.signer.abortPairingAttempt(),c(new Error("Connection request reset. Please try again.")))}));const m=t!=null&&t.scopedProperties?{[this.namespace]:t.scopedProperties}:void 0;await this.signer.connect(w(v({namespaces:v({},n&&{[this.namespace]:n})},i&&{optionalNamespaces:{[this.namespace]:i}}),{pairingTopic:t?.pairingTopic,scopedProperties:m})).then(h=>{u(h)}).catch(h=>{var d;(d=this.modal)==null||d.showErrorMessage("Unable to connect"),c(new Error(h.message))})});if(!a)return;const r=O(a.namespaces,[this.namespace]);this.setChainIds(this.rpc.chains.length?this.rpc.chains:r),this.setAccounts(r),this.events.emit("connect",{chainId:b(this.chainId)})}catch(a){throw this.signer.logger.error(a),a}finally{(e=this.modal)==null||e.close()}}async authenticate(t,e){var n;if(!this.signer.client)throw new Error("Provider not initialized. Call init() first");this.loadConnectOpts({chains:t?.chains});try{const i=await new Promise(async(r,u)=>{var c,l;this.rpc.showQrModal&&((c=this.modal)==null||c.open(),(l=this.modal)==null||l.subscribeState(o=>{!o.open&&!this.signer.session&&(this.signer.abortPairingAttempt(),u(new Error("Connection request reset. Please try again.")))})),await this.signer.authenticate(w(v({},t),{chains:this.rpc.chains}),e).then(o=>{r(o)}).catch(o=>{var m;(m=this.modal)==null||m.showErrorMessage("Unable to connect"),u(new Error(o.message))})}),a=i.session;if(a){const r=O(a.namespaces,[this.namespace]);this.setChainIds(this.rpc.chains.length?this.rpc.chains:r),this.setAccounts(r),this.events.emit("connect",{chainId:b(this.chainId)})}return i}catch(i){throw this.signer.logger.error(i),i}finally{(n=this.modal)==null||n.close()}}async disconnect(){this.session&&await this.signer.disconnect(),this.reset()}get isWalletConnect(){return!0}get session(){return this.signer.session}registerEventListeners(){this.signer.on("session_event",t=>{const{params:e}=t,{event:n}=e;n.name==="accountsChanged"?(this.accounts=this.parseAccounts(n.data),this.events.emit("accountsChanged",this.accounts)):n.name==="chainChanged"?this.setChainId(this.formatChainId(n.data)):this.events.emit(n.name,n.data),this.events.emit("session_event",t)}),this.signer.on("accountsChanged",t=>{this.accounts=this.parseAccounts(t),this.events.emit("accountsChanged",this.accounts)}),this.signer.on("chainChanged",t=>{const e=parseInt(t);this.chainId=e,this.events.emit("chainChanged",b(this.chainId)),this.persist()}),this.signer.on("session_update",t=>{this.events.emit("session_update",t)}),this.signer.on("session_delete",t=>{this.reset(),this.events.emit("session_delete",t),this.events.emit("disconnect",w(v({},x("USER_DISCONNECTED")),{data:t.topic,name:"USER_DISCONNECTED"}))}),this.signer.on("display_uri",t=>{this.events.emit("display_uri",t)})}switchEthereumChain(t){this.request({method:"wallet_switchEthereumChain",params:[{chainId:t.toString(16)}]})}isCompatibleChainId(t){return typeof t=="string"?t.startsWith(`${this.namespace}:`):!1}formatChainId(t){return`${this.namespace}:${t}`}parseChainId(t){return Number(t.split(":")[1])}setChainIds(t){const e=t.filter(n=>this.isCompatibleChainId(n)).map(n=>this.parseChainId(n));e.length&&(this.chainId=e[0],this.events.emit("chainChanged",b(this.chainId)),this.persist())}setChainId(t){if(this.isCompatibleChainId(t)){const e=this.parseChainId(t);this.chainId=e,this.switchEthereumChain(e)}}parseAccountId(t){const[e,n,i]=t.split(":");return{chainId:`${e}:${n}`,address:i}}setAccounts(t){this.accounts=t.filter(e=>this.parseChainId(this.parseAccountId(e).chainId)===this.chainId).map(e=>this.parseAccountId(e).address),this.events.emit("accountsChanged",this.accounts)}getRpcConfig(t){var e,n;const i=(e=t?.chains)!=null?e:[],a=(n=t?.optionalChains)!=null?n:[],r=i.concat(a);if(!r.length)throw new Error("No chains specified in either `chains` or `optionalChains`");const u=i.length?t?.methods||f:[],c=i.length?t?.events||C:[],l=t?.optionalMethods||[],o=t?.optionalEvents||[],m=t?.rpcMap||this.buildRpcMap(r,t.projectId),h=t?.qrModalOptions||void 0;return{chains:i?.map(d=>this.formatChainId(d)),optionalChains:a.map(d=>this.formatChainId(d)),methods:u,events:c,optionalMethods:l,optionalEvents:o,rpcMap:m,showQrModal:!!(t!=null&&t.showQrModal),qrModalOptions:h,projectId:t.projectId,metadata:t.metadata}}buildRpcMap(t,e){const n={};return t.forEach(i=>{n[i]=this.getRpcUrl(i,e)}),n}async initialize(t){var e;if(this.rpc=this.getRpcConfig(t),this.chainId=this.rpc.chains.length?I(this.rpc.chains):I(this.rpc.optionalChains),this.signer=await N.init({projectId:this.rpc.projectId,metadata:this.rpc.metadata,disableProviderPing:t.disableProviderPing,relayUrl:t.relayUrl,storage:t.storage,storageOptions:t.storageOptions,customStoragePrefix:t.customStoragePrefix,telemetryEnabled:t.telemetryEnabled,logger:t.logger}),this.registerEventListeners(),await this.loadPersistedSession(),this.rpc.showQrModal){let n;try{const i=await D(),{convertWCMToAppKitOptions:a}=await Promise.resolve().then(function(){return nt}),r=a(w(v({},this.rpc.qrModalOptions),{chains:[...new Set([...this.rpc.chains,...this.rpc.optionalChains])],metadata:this.rpc.metadata,projectId:this.rpc.projectId}));if(!r.networks.length)throw new Error("No networks found for WalletConnect");n=i(w(v({},r),{universalProvider:this.signer,manualWCControl:!0,enableMobileFullScreen:((e=this.rpc.qrModalOptions)==null?void 0:e.enableMobileFullScreen)===!0}))}catch(i){throw console.warn(i),new Error("To use QR modal, please install @reown/appkit package")}if(n)try{this.modal=n}catch(i){throw this.signer.logger.error(i),new Error("Could not generate WalletConnectModal Instance")}}}loadConnectOpts(t){if(!t)return;const{chains:e,optionalChains:n,rpcMap:i}=t;e&&y(e)&&(this.rpc.chains=e.map(a=>this.formatChainId(a)),e.forEach(a=>{this.rpc.rpcMap[a]=i?.[a]||this.getRpcUrl(a)})),n&&y(n)&&(this.rpc.optionalChains=[],this.rpc.optionalChains=n?.map(a=>this.formatChainId(a)),n.forEach(a=>{this.rpc.rpcMap[a]=i?.[a]||this.getRpcUrl(a)}))}getRpcUrl(t,e){var n;return((n=this.rpc.rpcMap)==null?void 0:n[t])||`${U}?chainId=eip155:${t}&projectId=${e||this.rpc.projectId}`}async loadPersistedSession(){if(this.session)try{const t=await this.signer.client.core.storage.getItem(`${this.STORAGE_KEY}/chainId`),e=this.session.namespaces[`${this.namespace}:${t}`]?this.session.namespaces[`${this.namespace}:${t}`]:this.session.namespaces[this.namespace];this.setChainIds(t?[this.formatChainId(t)]:e?.accounts),this.setAccounts(e?.accounts)}catch(t){this.signer.logger.error("Failed to load persisted session, clearing state..."),this.signer.logger.error(t),await this.disconnect().catch(e=>this.signer.logger.warn(e))}}reset(){this.chainId=1,this.accounts=[]}persist(){this.session&&this.signer.client.core.storage.setItem(`${this.STORAGE_KEY}/chainId`,this.chainId)}parseAccounts(t){return typeof t=="string"||t instanceof String?[this.parseAccount(t)]:t.map(e=>this.parseAccount(e))}}const G=E;var Y=Object.defineProperty,H=Object.defineProperties,B=Object.getOwnPropertyDescriptors,S=Object.getOwnPropertySymbols,X=Object.prototype.hasOwnProperty,J=Object.prototype.propertyIsEnumerable,T=(s,t,e)=>t in s?Y(s,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):s[t]=e,R=(s,t)=>{for(var e in t||(t={}))X.call(t,e)&&T(s,e,t[e]);if(S)for(var e of S(t))J.call(t,e)&&T(s,e,t[e]);return s},Z=(s,t)=>H(s,B(t));function tt(s){if(s)return{"--w3m-font-family":s["--wcm-font-family"],"--w3m-accent":s["--wcm-accent-color"],"--w3m-color-mix":s["--wcm-background-color"],"--w3m-z-index":s["--wcm-z-index"]?Number(s["--wcm-z-index"]):void 0,"--w3m-qr-color":s["--wcm-accent-color"],"--w3m-font-size-master":s["--wcm-text-medium-regular-size"],"--w3m-border-radius-master":s["--wcm-container-border-radius"],"--w3m-color-mix-strength":0}}const et=s=>{const[t,e]=s.split(":");return W({id:e,caipNetworkId:s,chainNamespace:t,name:"",nativeCurrency:{name:"",symbol:"",decimals:8},rpcUrls:{default:{http:["https://rpc.walletconnect.org/v1"]}}})};function st(s){var t,e,n,i,a,r,u;const c=(t=s.chains)==null?void 0:t.map(et).filter(Boolean);if(c.length===0)throw new Error("At least one chain must be specified");const l=c.find(m=>{var h;return m.id===((h=s.defaultChain)==null?void 0:h.id)}),o={projectId:s.projectId,networks:c,themeMode:s.themeMode,themeVariables:tt(s.themeVariables),chainImages:s.chainImages,connectorImages:s.walletImages,defaultNetwork:l,metadata:Z(R({},s.metadata),{name:((e=s.metadata)==null?void 0:e.name)||"WalletConnect",description:((n=s.metadata)==null?void 0:n.description)||"Connect to WalletConnect-compatible wallets",url:((i=s.metadata)==null?void 0:i.url)||"https://walletconnect.org",icons:((a=s.metadata)==null?void 0:a.icons)||["https://walletconnect.org/walletconnect-logo.png"]}),showWallets:!0,featuredWalletIds:s.explorerRecommendedWalletIds==="NONE"?[]:Array.isArray(s.explorerRecommendedWalletIds)?s.explorerRecommendedWalletIds:[],excludeWalletIds:s.explorerExcludedWalletIds==="ALL"?[]:Array.isArray(s.explorerExcludedWalletIds)?s.explorerExcludedWalletIds:[],enableEIP6963:!1,enableInjected:!1,enableCoinbase:!0,enableWalletConnect:!0,features:{email:!1,socials:!1}};if((r=s.mobileWallets)!=null&&r.length||(u=s.desktopWallets)!=null&&u.length){const m=[...(s.mobileWallets||[]).map(g=>({id:g.id,name:g.name,links:g.links})),...(s.desktopWallets||[]).map(g=>({id:g.id,name:g.name,links:{native:g.links.native,universal:g.links.universal}}))],h=[...o.featuredWalletIds||[],...o.excludeWalletIds||[]],d=m.filter(g=>!h.includes(g.id));d.length&&(o.customWallets=d)}return o}function W(s){return R({formatters:void 0,fees:void 0,serializers:void 0},s)}var nt=Object.freeze({__proto__:null,convertWCMToAppKitOptions:st,defineChain:W});export{G as EthereumProvider,P as OPTIONAL_EVENTS,A as OPTIONAL_METHODS,C as REQUIRED_EVENTS,f as REQUIRED_METHODS,E as default};
1
+ import{EventEmitter as A}from"events";import{getAccountsFromNamespaces as I,getSdkError as M,isValidArray as C}from"@walletconnect/utils";import{UniversalProvider as P}from"@walletconnect/universal-provider";const O="wc",S="ethereum_provider",T=`${O}@2:${S}:`,R="https://rpc.walletconnect.org/v1/",p=["eth_sendTransaction","personal_sign"],f=["eth_accounts","eth_requestAccounts","eth_sendRawTransaction","eth_sign","eth_signTransaction","eth_signTypedData","eth_signTypedData_v3","eth_signTypedData_v4","eth_sendTransaction","personal_sign","wallet_switchEthereumChain","wallet_addEthereumChain","wallet_getPermissions","wallet_requestPermissions","wallet_registerOnboarding","wallet_watchAsset","wallet_scanQRCode","wallet_sendCalls","wallet_getCapabilities","wallet_getCallsStatus","wallet_showCallsStatus"],m=["chainChanged","accountsChanged"],v=["chainChanged","accountsChanged","message","disconnect","connect"],W=async()=>{const{createAppKit:i}=await import("@reown/appkit/core");return i};function g(i){return Number(i[0].split(":")[1])}function u(i){return`0x${i.toString(16)}`}function x(i){const{chains:t,optionalChains:e,methods:s,optionalMethods:n,events:a,optionalEvents:o,rpcMap:r}=i;if(!C(t))throw new Error("Invalid chains");const h={chains:t,methods:s||p,events:a||m,rpcMap:{...t.length?{[g(t)]:r[g(t)]}:{}}},c=a?.filter(w=>!m.includes(w)),d=s?.filter(w=>!p.includes(w));if(!e&&!o&&!n&&!c?.length&&!d?.length)return{required:t.length?h:void 0};const l=c?.length&&d?.length||!e,y={chains:[...new Set(l?h.chains.concat(e||[]):e)],methods:[...new Set(h.methods.concat(n?.length?n:f))],events:[...new Set(h.events.concat(o?.length?o:v))],rpcMap:r};return{required:t.length?h:void 0,optional:e.length?y:void 0}}let E=class b{constructor(){this.events=new A,this.namespace="eip155",this.accounts=[],this.chainId=1,this.STORAGE_KEY=T,this.on=(t,e)=>(this.events.on(t,e),this),this.once=(t,e)=>(this.events.once(t,e),this),this.removeListener=(t,e)=>(this.events.removeListener(t,e),this),this.off=(t,e)=>(this.events.off(t,e),this),this.parseAccount=t=>this.isCompatibleChainId(t)?this.parseAccountId(t).address:t,this.signer={},this.rpc={}}static async init(t){const e=new b;return await e.initialize(t),e}async request(t,e){return await this.signer.request(t,this.formatChainId(this.chainId),e)}sendAsync(t,e,s){this.signer.sendAsync(t,e,this.formatChainId(this.chainId),s)}get connected(){return this.signer.client?this.signer.client.core.relayer.connected:!1}get connecting(){return this.signer.client?this.signer.client.core.relayer.connecting:!1}async enable(){return this.session||await this.connect(),await this.request({method:"eth_requestAccounts"})}async connect(t){if(!this.signer.client)throw new Error("Provider not initialized. Call init() first");this.loadConnectOpts(t);const{required:e,optional:s}=x(this.rpc);try{const n=await new Promise(async(o,r)=>{this.rpc.showQrModal&&(this.modal?.open(),this.modal?.subscribeState(c=>{!c.open&&!this.signer.session&&(this.signer.abortPairingAttempt(),r(new Error("Connection request reset. Please try again.")))}));const h=t?.scopedProperties?{[this.namespace]:t.scopedProperties}:void 0;await this.signer.connect({namespaces:{...e&&{[this.namespace]:e}},...s&&{optionalNamespaces:{[this.namespace]:s}},pairingTopic:t?.pairingTopic,scopedProperties:h}).then(c=>{o(c)}).catch(c=>{this.modal?.showErrorMessage("Unable to connect"),r(new Error(c.message))})});if(!n)return;const a=I(n.namespaces,[this.namespace]);this.setChainIds(this.rpc.chains.length?this.rpc.chains:a),this.setAccounts(a),this.events.emit("connect",{chainId:u(this.chainId)})}catch(n){throw this.signer.logger.error(n),n}finally{this.modal?.close()}}async authenticate(t,e){if(!this.signer.client)throw new Error("Provider not initialized. Call init() first");this.loadConnectOpts({chains:t?.chains});try{const s=await new Promise(async(a,o)=>{this.rpc.showQrModal&&(this.modal?.open(),this.modal?.subscribeState(r=>{!r.open&&!this.signer.session&&(this.signer.abortPairingAttempt(),o(new Error("Connection request reset. Please try again.")))})),await this.signer.authenticate({...t,chains:this.rpc.chains},e).then(r=>{a(r)}).catch(r=>{this.modal?.showErrorMessage("Unable to connect"),o(new Error(r.message))})}),n=s.session;if(n){const a=I(n.namespaces,[this.namespace]);this.setChainIds(this.rpc.chains.length?this.rpc.chains:a),this.setAccounts(a),this.events.emit("connect",{chainId:u(this.chainId)})}return s}catch(s){throw this.signer.logger.error(s),s}finally{this.modal?.close()}}async disconnect(){this.session&&await this.signer.disconnect(),this.reset()}get isWalletConnect(){return!0}get session(){return this.signer.session}registerEventListeners(){this.signer.on("session_event",t=>{const{params:e}=t,{event:s}=e;s.name==="accountsChanged"?(this.accounts=this.parseAccounts(s.data),this.events.emit("accountsChanged",this.accounts)):s.name==="chainChanged"?this.setChainId(this.formatChainId(s.data)):this.events.emit(s.name,s.data),this.events.emit("session_event",t)}),this.signer.on("accountsChanged",t=>{this.accounts=this.parseAccounts(t),this.events.emit("accountsChanged",this.accounts)}),this.signer.on("chainChanged",t=>{const e=parseInt(t);this.chainId=e,this.events.emit("chainChanged",u(this.chainId)),this.persist()}),this.signer.on("session_update",t=>{this.events.emit("session_update",t)}),this.signer.on("session_delete",t=>{this.reset(),this.events.emit("session_delete",t),this.events.emit("disconnect",{...M("USER_DISCONNECTED"),data:t.topic,name:"USER_DISCONNECTED"})}),this.signer.on("display_uri",t=>{this.events.emit("display_uri",t)})}switchEthereumChain(t){this.request({method:"wallet_switchEthereumChain",params:[{chainId:t.toString(16)}]})}isCompatibleChainId(t){return typeof t=="string"?t.startsWith(`${this.namespace}:`):!1}formatChainId(t){return`${this.namespace}:${t}`}parseChainId(t){return Number(t.split(":")[1])}setChainIds(t){const e=t.filter(s=>this.isCompatibleChainId(s)).map(s=>this.parseChainId(s));e.length&&(this.chainId=e[0],this.events.emit("chainChanged",u(this.chainId)),this.persist())}setChainId(t){if(this.isCompatibleChainId(t)){const e=this.parseChainId(t);this.chainId=e,this.switchEthereumChain(e)}}parseAccountId(t){const[e,s,n]=t.split(":");return{chainId:`${e}:${s}`,address:n}}setAccounts(t){this.accounts=t.filter(e=>this.parseChainId(this.parseAccountId(e).chainId)===this.chainId).map(e=>this.parseAccountId(e).address),this.events.emit("accountsChanged",this.accounts)}getRpcConfig(t){const e=t?.chains??[],s=t?.optionalChains??[],n=e.concat(s);if(!n.length)throw new Error("No chains specified in either `chains` or `optionalChains`");const a=e.length?t?.methods||p:[],o=e.length?t?.events||m:[],r=t?.optionalMethods||[],h=t?.optionalEvents||[],c=t?.rpcMap||this.buildRpcMap(n,t.projectId),d=t?.qrModalOptions||void 0;return{chains:e?.map(l=>this.formatChainId(l)),optionalChains:s.map(l=>this.formatChainId(l)),methods:a,events:o,optionalMethods:r,optionalEvents:h,rpcMap:c,showQrModal:!!t?.showQrModal,qrModalOptions:d,projectId:t.projectId,metadata:t.metadata}}buildRpcMap(t,e){const s={};return t.forEach(n=>{s[n]=this.getRpcUrl(n,e)}),s}async initialize(t){if(this.rpc=this.getRpcConfig(t),this.chainId=this.rpc.chains.length?g(this.rpc.chains):g(this.rpc.optionalChains),this.signer=await P.init({projectId:this.rpc.projectId,metadata:this.rpc.metadata,disableProviderPing:t.disableProviderPing,relayUrl:t.relayUrl,storage:t.storage,storageOptions:t.storageOptions,customStoragePrefix:t.customStoragePrefix,telemetryEnabled:t.telemetryEnabled,logger:t.logger}),this.registerEventListeners(),await this.loadPersistedSession(),this.rpc.showQrModal){let e;try{const s=await W(),{convertWCMToAppKitOptions:n}=await Promise.resolve().then(function(){return U}),a=n({...this.rpc.qrModalOptions,chains:[...new Set([...this.rpc.chains,...this.rpc.optionalChains])],metadata:this.rpc.metadata,projectId:this.rpc.projectId});if(!a.networks.length)throw new Error("No networks found for WalletConnect");e=s({...a,universalProvider:this.signer,manualWCControl:!0,enableMobileFullScreen:this.rpc.qrModalOptions?.enableMobileFullScreen===!0})}catch(s){throw console.warn(s),new Error("To use QR modal, please install @reown/appkit package")}if(e)try{this.modal=e}catch(s){throw this.signer.logger.error(s),new Error("Could not generate WalletConnectModal Instance")}}}loadConnectOpts(t){if(!t)return;const{chains:e,optionalChains:s,rpcMap:n}=t;e&&C(e)&&(this.rpc.chains=e.map(a=>this.formatChainId(a)),e.forEach(a=>{this.rpc.rpcMap[a]=n?.[a]||this.getRpcUrl(a)})),s&&C(s)&&(this.rpc.optionalChains=[],this.rpc.optionalChains=s?.map(a=>this.formatChainId(a)),s.forEach(a=>{this.rpc.rpcMap[a]=n?.[a]||this.getRpcUrl(a)}))}getRpcUrl(t,e){return this.rpc.rpcMap?.[t]||`${R}?chainId=eip155:${t}&projectId=${e||this.rpc.projectId}`}async loadPersistedSession(){if(this.session)try{const t=await this.signer.client.core.storage.getItem(`${this.STORAGE_KEY}/chainId`),e=this.session.namespaces[`${this.namespace}:${t}`]?this.session.namespaces[`${this.namespace}:${t}`]:this.session.namespaces[this.namespace];this.setChainIds(t?[this.formatChainId(t)]:e?.accounts),this.setAccounts(e?.accounts)}catch(t){this.signer.logger.error("Failed to load persisted session, clearing state..."),this.signer.logger.error(t),await this.disconnect().catch(e=>this.signer.logger.warn(e))}}reset(){this.chainId=1,this.accounts=[]}persist(){this.session&&this.signer.client.core.storage.setItem(`${this.STORAGE_KEY}/chainId`,this.chainId)}parseAccounts(t){return typeof t=="string"||t instanceof String?[this.parseAccount(t)]:t.map(e=>this.parseAccount(e))}};const N=E;function $(i){if(i)return{"--w3m-font-family":i["--wcm-font-family"],"--w3m-accent":i["--wcm-accent-color"],"--w3m-color-mix":i["--wcm-background-color"],"--w3m-z-index":i["--wcm-z-index"]?Number(i["--wcm-z-index"]):void 0,"--w3m-qr-color":i["--wcm-accent-color"],"--w3m-font-size-master":i["--wcm-text-medium-regular-size"],"--w3m-border-radius-master":i["--wcm-container-border-radius"],"--w3m-color-mix-strength":0}}const k=i=>{const[t,e]=i.split(":");return _({id:e,caipNetworkId:i,chainNamespace:t,name:"",nativeCurrency:{name:"",symbol:"",decimals:8},rpcUrls:{default:{http:["https://rpc.walletconnect.org/v1"]}}})};function q(i){const t=i.chains?.map(k).filter(Boolean);if(t.length===0)throw new Error("At least one chain must be specified");const e=t.find(n=>n.id===i.defaultChain?.id),s={projectId:i.projectId,networks:t,themeMode:i.themeMode,themeVariables:$(i.themeVariables),chainImages:i.chainImages,connectorImages:i.walletImages,defaultNetwork:e,metadata:{...i.metadata,name:i.metadata?.name||"WalletConnect",description:i.metadata?.description||"Connect to WalletConnect-compatible wallets",url:i.metadata?.url||"https://walletconnect.org",icons:i.metadata?.icons||["https://walletconnect.org/walletconnect-logo.png"]},showWallets:!0,featuredWalletIds:i.explorerRecommendedWalletIds==="NONE"?[]:Array.isArray(i.explorerRecommendedWalletIds)?i.explorerRecommendedWalletIds:[],excludeWalletIds:i.explorerExcludedWalletIds==="ALL"?[]:Array.isArray(i.explorerExcludedWalletIds)?i.explorerExcludedWalletIds:[],enableEIP6963:!1,enableInjected:!1,enableCoinbase:!0,enableWalletConnect:!0,features:{email:!1,socials:!1}};if(i.mobileWallets?.length||i.desktopWallets?.length){const n=[...(i.mobileWallets||[]).map(r=>({id:r.id,name:r.name,links:r.links})),...(i.desktopWallets||[]).map(r=>({id:r.id,name:r.name,links:{native:r.links.native,universal:r.links.universal}}))],a=[...s.featuredWalletIds||[],...s.excludeWalletIds||[]],o=n.filter(r=>!a.includes(r.id));o.length&&(s.customWallets=o)}return s}function _(i){return{formatters:void 0,fees:void 0,serializers:void 0,...i}}var U=Object.freeze({__proto__:null,convertWCMToAppKitOptions:q,defineChain:_});export{N as EthereumProvider,v as OPTIONAL_EVENTS,f as OPTIONAL_METHODS,m as REQUIRED_EVENTS,p as REQUIRED_METHODS,E as default};
2
2
  //# sourceMappingURL=index.js.map