@walletconnect/ethereum-provider 2.7.9-7fa58fba → 2.8.0-3884b2f0

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/README.md CHANGED
@@ -5,7 +5,7 @@ Ethereum Provider for WalletConnect Protocol.
5
5
  ## Installation
6
6
 
7
7
  ```
8
- npm i @walletconnect/ethereum-provider @web3modal/standalone
8
+ npm i @walletconnect/ethereum-provider @walletconnect/modal
9
9
  ```
10
10
 
11
11
  ## Initialization
@@ -16,19 +16,19 @@ import { EthereumProvider } from "@walletconnect/ethereum-provider";
16
16
  const provider = await EthereumProvider.init({
17
17
  projectId, // REQUIRED your projectId
18
18
  chains, // REQUIRED chain ids
19
- showQrModal, // REQUIRED set to "true" to use @web3modal/standalone,
19
+ showQrModal, // REQUIRED set to "true" to use @walletconnect/modal,
20
20
  methods, // OPTIONAL ethereum methods
21
21
  events, // OPTIONAL ethereum events
22
22
  rpcMap, // OPTIONAL rpc urls for each chain
23
23
  metadata, // OPTIONAL metadata of your app
24
- qrModalOptions, // OPTIONAL - `undefined` by default, see https://docs.walletconnect.com/2.0/web3modal/options
24
+ qrModalOptions, // OPTIONAL - `undefined` by default
25
25
  });
26
26
  ```
27
27
 
28
- ## Display Web3Modal with QR code / Handle connection URI
28
+ ## Display WalletConnectModal with QR code / Handle connection URI
29
29
 
30
30
  ```typescript
31
- // Web3Modal is disabled by default, enable it during init() to display a QR code modal
31
+ // WalletConnectModal is disabled by default, enable it during init() to display a QR code modal
32
32
  await provider.connect({
33
33
  chains, // OPTIONAL chain ids
34
34
  rpcMap, // OPTIONAL rpc urls
@@ -39,7 +39,7 @@ await provider.enable();
39
39
  ```
40
40
 
41
41
  ```typescript
42
- // If you are not using Web3Modal,
42
+ // If you are not using WalletConnectModal,
43
43
  // you can subscribe to the `display_uri` event and handle the URI yourself.
44
44
  provider.on("display_uri", (uri: string) => {
45
45
  // ... custom logic
@@ -77,17 +77,6 @@ provider.on("display_uri", handler);
77
77
  provider.on("disconnect", handler);
78
78
  ```
79
79
 
80
- ## Supported Web3Modal options (qrModalOptions)
81
-
82
- - [themeMode](https://docs.walletconnect.com/2.0/web3modal/options#thememode-optional)
83
- - [themeVariables](https://docs.walletconnect.com/2.0/web3modal/options#themevariables-optional)
84
- - [chainImages](https://docs.walletconnect.com/2.0/web3modal/options#chainimages-optional)
85
- - [tokenImages](https://docs.walletconnect.com/2.0/web3modal/options#tokenimages-optional)
86
- - [walletImages](https://docs.walletconnect.com/2.0/web3modal/options#walletimages-optional)
87
- - [desktopWallets](https://docs.walletconnect.com/2.0/web3modal/options#desktopwallets-optional)
88
- - [mobileWallets](https://docs.walletconnect.com/2.0/web3modal/options#mobilewallets-optional)
89
- - [enableExplorer](https://docs.walletconnect.com/2.0/web3modal/options#enableexplorer-optional)
90
- - [explorerRecommendedWalletIds](https://docs.walletconnect.com/2.0/web3modal/options#explorerrecommendedwalletids-optional)
91
- - [explorerExcludedWalletIds](https://docs.walletconnect.com/2.0/web3modal/options#explorerexcludedwalletids-optional)
92
- - [privacyPolicyUrl](https://docs.walletconnect.com/2.0/web3modal/options#privacypolicyurl-optional)
93
- - [termsOfServiceUrl](https://docs.walletconnect.com/2.0/web3modal/options#privacypolicyurl-optional)
80
+ ## Supported WalletConnectModal options (qrModalOptions)
81
+
82
+ Please reference [up to date documentation](https://docs.walletconnect.com/2.0/web/web3modal/html/ethereum-provider/options) for `WalletConnectModal`
package/dist/index.cjs.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var A=require("events"),h=require("@walletconnect/utils"),T=require("@walletconnect/universal-provider");function R(i){if(i&&i.__esModule)return i;var t=Object.create(null);return i&&Object.keys(i).forEach(function(e){if(e!=="default"){var s=Object.getOwnPropertyDescriptor(i,e);Object.defineProperty(t,e,s.get?s:{enumerable:!0,get:function(){return i[e]}})}}),t.default=i,Object.freeze(t)}const S="wc",j="ethereum_provider",N=`${S}@2:${j}:`,q="https://rpc.walletconnect.com/v1/",u=["eth_sendTransaction","personal_sign"],D=["eth_accounts","eth_requestAccounts","eth_call","eth_getBalance","eth_sendRawTransaction","eth_sign","eth_signTransaction","eth_signTypedData","eth_signTypedData_v3","eth_signTypedData_v4","wallet_switchEthereumChain","wallet_addEthereumChain","wallet_getPermissions","wallet_requestPermissions","wallet_registerOnboarding","wallet_watchAsset","wallet_scanQRCode"],m=["chainChanged","accountsChanged"],$=["message","disconnect","connect"];var U=Object.defineProperty,Q=Object.defineProperties,L=Object.getOwnPropertyDescriptors,_=Object.getOwnPropertySymbols,V=Object.prototype.hasOwnProperty,H=Object.prototype.propertyIsEnumerable,O=(i,t,e)=>t in i?U(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e,I=(i,t)=>{for(var e in t||(t={}))V.call(t,e)&&O(i,e,t[e]);if(_)for(var e of _(t))H.call(t,e)&&O(i,e,t[e]);return i},y=(i,t)=>Q(i,L(t));function C(i){return Number(i[0].split(":")[1])}function E(i){return`0x${i.toString(16)}`}function z(i){const{chains:t,optionalChains:e,methods:s,optionalMethods:n,events:a,optionalEvents:l,rpcMap:c}=i;if(!h.isValidArray(t))throw new Error("Invalid chains");const o=t,r=s||u,f=a||m,b={[C(o)]:c[C(o)]},w={chains:o,methods:r,events:f,rpcMap:b},d=a?.filter(v=>!m.includes(v)),p=s?.filter(v=>!u.includes(v));if(!e&&!l&&!n&&!(d!=null&&d.length)&&!(p!=null&&p.length))return{required:w};const M=d?.length&&p?.length||!e,P={chains:[...new Set(M?o.concat(e||[]):e)],methods:[...new Set(r.concat(n||[]))],events:[...new Set(f.concat(l||[]))],rpcMap:c};return{required:w,optional:P}}class g{constructor(){this.events=new A.EventEmitter,this.namespace="eip155",this.accounts=[],this.chainId=1,this.STORAGE_KEY=N,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 g;return await e.initialize(t),e}async request(t){return await this.signer.request(t,this.formatChainId(this.chainId))}sendAsync(t,e){this.signer.sendAsync(t,e,this.formatChainId(this.chainId))}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}=z(this.rpc);try{const n=await new Promise(async(l,c)=>{var o;this.rpc.showQrModal&&((o=this.modal)==null||o.subscribeModal(r=>{!r.open&&!this.signer.session&&(this.signer.abortPairingAttempt(),c(new Error("Connection request reset. Please try again.")))})),await this.signer.connect(y(I({namespaces:{[this.namespace]:e}},s&&{optionalNamespaces:{[this.namespace]:s}}),{pairingTopic:t?.pairingTopic})).then(r=>{l(r)}).catch(r=>{c(new Error(r.message))})});if(!n)return;this.setChainIds(this.rpc.chains);const a=h.getAccountsFromNamespaces(n.namespaces,[this.namespace]);this.setAccounts(a),this.events.emit("connect",{chainId:E(this.chainId)})}catch(n){throw this.signer.logger.error(n),n}finally{this.modal&&this.modal.closeModal()}}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("chainChanged",t=>{const e=parseInt(t);this.chainId=e,this.events.emit("chainChanged",E(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",y(I({},h.getSdkError("USER_DISCONNECTED")),{data:t.topic,name:"USER_DISCONNECTED"}))}),this.signer.on("display_uri",t=>{var e,s;this.rpc.showQrModal&&((e=this.modal)==null||e.closeModal(),(s=this.modal)==null||s.openModal({uri:t})),this.events.emit("display_uri",t)})}setHttpProvider(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",E(this.chainId)),this.persist())}setChainId(t){if(this.isCompatibleChainId(t)){const e=this.parseChainId(t);this.chainId=e,this.setHttpProvider(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){var e,s;return{chains:((e=t.chains)==null?void 0:e.map(n=>this.formatChainId(n)))||[`${this.namespace}:1`],optionalChains:t.optionalChains?t.optionalChains.map(n=>this.formatChainId(n)):void 0,methods:t?.methods||u,events:t?.events||m,optionalMethods:t?.optionalMethods||[],optionalEvents:t?.optionalEvents||[],rpcMap:t?.rpcMap||this.buildRpcMap(t.chains.concat(t.optionalChains||[]),t.projectId),showQrModal:!!(t!=null&&t.showQrModal),qrModalOptions:(s=t?.qrModalOptions)!=null?s:void 0,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=C(this.rpc.chains),this.signer=await T.UniversalProvider.init({projectId:this.rpc.projectId,metadata:this.rpc.metadata,disableProviderPing:t.disableProviderPing}),this.registerEventListeners(),await this.loadPersistedSession(),this.rpc.showQrModal){let e;try{const{Web3Modal:s}=await Promise.resolve().then(function(){return R(require("@web3modal/standalone"))});e=s}catch{throw new Error("To use QR modal, please install @web3modal/standalone package")}if(e)try{this.modal=new e(I({walletConnectVersion:2,projectId:this.rpc.projectId,standaloneChains:this.rpc.chains},this.rpc.qrModalOptions))}catch(s){throw this.signer.logger.error(s),new Error("Could not generate Web3Modal Instance")}}}loadConnectOpts(t){if(!t)return;const{chains:e,optionalChains:s,rpcMap:n}=t;e&&h.isValidArray(e)&&(this.rpc.chains=e.map(a=>this.formatChainId(a)),e.forEach(a=>{this.rpc.rpcMap[a]=n?.[a]||this.getRpcUrl(a)})),s&&h.isValidArray(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){var s;return((s=this.rpc.rpcMap)==null?void 0:s[t])||`${q}?chainId=eip155:${t}&projectId=${e||this.rpc.projectId}`}async loadPersistedSession(){if(!this.session)return;const t=await this.signer.client.core.storage.getItem(`${this.STORAGE_KEY}/chainId`);this.setChainIds(t?[this.formatChainId(t)]:this.session.namespaces[this.namespace].accounts),this.setAccounts(this.session.namespaces[this.namespace].accounts)}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=g;exports.EthereumProvider=G,exports.OPTIONAL_EVENTS=$,exports.OPTIONAL_METHODS=D,exports.REQUIRED_EVENTS=m,exports.REQUIRED_METHODS=u,exports.default=g;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var A=require("events"),h=require("@walletconnect/utils"),T=require("@walletconnect/universal-provider");function R(i){if(i&&i.__esModule)return i;var t=Object.create(null);return i&&Object.keys(i).forEach(function(e){if(e!=="default"){var s=Object.getOwnPropertyDescriptor(i,e);Object.defineProperty(t,e,s.get?s:{enumerable:!0,get:function(){return i[e]}})}}),t.default=i,Object.freeze(t)}const S="wc",j="ethereum_provider",N=`${S}@2:${j}:`,q="https://rpc.walletconnect.com/v1/",u=["eth_sendTransaction","personal_sign"],D=["eth_accounts","eth_requestAccounts","eth_sendRawTransaction","eth_sign","eth_signTransaction","eth_signTypedData","eth_signTypedData_v3","eth_signTypedData_v4","wallet_switchEthereumChain","wallet_addEthereumChain","wallet_getPermissions","wallet_requestPermissions","wallet_registerOnboarding","wallet_watchAsset","wallet_scanQRCode"],m=["chainChanged","accountsChanged"],$=["message","disconnect","connect"];var U=Object.defineProperty,Q=Object.defineProperties,L=Object.getOwnPropertyDescriptors,_=Object.getOwnPropertySymbols,V=Object.prototype.hasOwnProperty,H=Object.prototype.propertyIsEnumerable,O=(i,t,e)=>t in i?U(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e,I=(i,t)=>{for(var e in t||(t={}))V.call(t,e)&&O(i,e,t[e]);if(_)for(var e of _(t))H.call(t,e)&&O(i,e,t[e]);return i},y=(i,t)=>Q(i,L(t));function C(i){return Number(i[0].split(":")[1])}function E(i){return`0x${i.toString(16)}`}function z(i){const{chains:t,optionalChains:e,methods:s,optionalMethods:n,events:a,optionalEvents:l,rpcMap:c}=i;if(!h.isValidArray(t))throw new Error("Invalid chains");const o=t,r=s||u,f=a||m,b={[C(o)]:c[C(o)]},w={chains:o,methods:r,events:f,rpcMap:b},d=a?.filter(v=>!m.includes(v)),p=s?.filter(v=>!u.includes(v));if(!e&&!l&&!n&&!(d!=null&&d.length)&&!(p!=null&&p.length))return{required:w};const M=d?.length&&p?.length||!e,P={chains:[...new Set(M?o.concat(e||[]):e)],methods:[...new Set(r.concat(n||[]))],events:[...new Set(f.concat(l||[]))],rpcMap:c};return{required:w,optional:P}}class g{constructor(){this.events=new A.EventEmitter,this.namespace="eip155",this.accounts=[],this.chainId=1,this.STORAGE_KEY=N,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 g;return await e.initialize(t),e}async request(t){return await this.signer.request(t,this.formatChainId(this.chainId))}sendAsync(t,e){this.signer.sendAsync(t,e,this.formatChainId(this.chainId))}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}=z(this.rpc);try{const n=await new Promise(async(l,c)=>{var o;this.rpc.showQrModal&&((o=this.modal)==null||o.subscribeModal(r=>{!r.open&&!this.signer.session&&(this.signer.abortPairingAttempt(),c(new Error("Connection request reset. Please try again.")))})),await this.signer.connect(y(I({namespaces:{[this.namespace]:e}},s&&{optionalNamespaces:{[this.namespace]:s}}),{pairingTopic:t?.pairingTopic})).then(r=>{l(r)}).catch(r=>{c(new Error(r.message))})});if(!n)return;this.setChainIds(this.rpc.chains);const a=h.getAccountsFromNamespaces(n.namespaces,[this.namespace]);this.setAccounts(a),this.events.emit("connect",{chainId:E(this.chainId)})}catch(n){throw this.signer.logger.error(n),n}finally{this.modal&&this.modal.closeModal()}}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("chainChanged",t=>{const e=parseInt(t);this.chainId=e,this.events.emit("chainChanged",E(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",y(I({},h.getSdkError("USER_DISCONNECTED")),{data:t.topic,name:"USER_DISCONNECTED"}))}),this.signer.on("display_uri",t=>{var e,s;this.rpc.showQrModal&&((e=this.modal)==null||e.closeModal(),(s=this.modal)==null||s.openModal({uri:t})),this.events.emit("display_uri",t)})}setHttpProvider(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",E(this.chainId)),this.persist())}setChainId(t){if(this.isCompatibleChainId(t)){const e=this.parseChainId(t);this.chainId=e,this.setHttpProvider(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){var e,s;return{chains:((e=t.chains)==null?void 0:e.map(n=>this.formatChainId(n)))||[`${this.namespace}:1`],optionalChains:t.optionalChains?t.optionalChains.map(n=>this.formatChainId(n)):void 0,methods:t?.methods||u,events:t?.events||m,optionalMethods:t?.optionalMethods||[],optionalEvents:t?.optionalEvents||[],rpcMap:t?.rpcMap||this.buildRpcMap(t.chains.concat(t.optionalChains||[]),t.projectId),showQrModal:!!(t!=null&&t.showQrModal),qrModalOptions:(s=t?.qrModalOptions)!=null?s:void 0,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=C(this.rpc.chains),this.signer=await T.UniversalProvider.init({projectId:this.rpc.projectId,metadata:this.rpc.metadata,disableProviderPing:t.disableProviderPing}),this.registerEventListeners(),await this.loadPersistedSession(),this.rpc.showQrModal){let e;try{const{WalletConnectModal:s}=await Promise.resolve().then(function(){return R(require("@walletconnect/modal"))});e=s}catch{throw new Error("To use QR modal, please install @walletconnect/modal package")}if(e)try{this.modal=new e(I({walletConnectVersion:2,projectId:this.rpc.projectId,standaloneChains:this.rpc.chains},this.rpc.qrModalOptions))}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&&h.isValidArray(e)&&(this.rpc.chains=e.map(a=>this.formatChainId(a)),e.forEach(a=>{this.rpc.rpcMap[a]=n?.[a]||this.getRpcUrl(a)})),s&&h.isValidArray(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){var s;return((s=this.rpc.rpcMap)==null?void 0:s[t])||`${q}?chainId=eip155:${t}&projectId=${e||this.rpc.projectId}`}async loadPersistedSession(){if(!this.session)return;const t=await this.signer.client.core.storage.getItem(`${this.STORAGE_KEY}/chainId`);this.setChainIds(t?[this.formatChainId(t)]:this.session.namespaces[this.namespace].accounts),this.setAccounts(this.session.namespaces[this.namespace].accounts)}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=g;exports.EthereumProvider=G,exports.OPTIONAL_EVENTS=$,exports.OPTIONAL_METHODS=D,exports.REQUIRED_EVENTS=m,exports.REQUIRED_METHODS=u,exports.default=g;
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/constants/values.ts","../src/constants/rpc.ts","../src/EthereumProvider.ts","../src/index.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.com/v1/\";\n","export const REQUIRED_METHODS = [\"eth_sendTransaction\", \"personal_sign\"];\nexport const OPTIONAL_METHODS = [\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];\nexport const REQUIRED_EVENTS = [\"chainChanged\", \"accountsChanged\"];\nexport const OPTIONAL_EVENTS = [\"message\", \"disconnect\", \"connect\"];\n","import { EventEmitter } from \"events\";\nimport { getAccountsFromNamespaces, getSdkError, isValidArray } from \"@walletconnect/utils\";\nimport {\n IEthereumProvider as IProvider,\n IEthereumProviderEvents,\n ProviderAccounts,\n RequestArguments,\n} from \"./types\";\nimport { Metadata, Namespace, UniversalProvider } from \"@walletconnect/universal-provider\";\nimport type { Web3ModalConfig, Web3Modal } from \"@web3modal/standalone\";\nimport { SessionTypes, SignClientTypes } from \"@walletconnect/types\";\nimport { STORAGE_KEY, REQUIRED_METHODS, REQUIRED_EVENTS, RPC_URL } from \"./constants\";\n\nexport type QrModalOptions = Pick<\n Web3ModalConfig,\n | \"themeMode\"\n | \"themeVariables\"\n | \"chainImages\"\n | \"desktopWallets\"\n | \"enableExplorer\"\n | \"explorerRecommendedWalletIds\"\n | \"explorerExcludedWalletIds\"\n | \"mobileWallets\"\n | \"privacyPolicyUrl\"\n | \"termsOfServiceUrl\"\n | \"tokenImages\"\n | \"walletImages\"\n>;\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\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}\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 requiredChains = chains;\n const requiredMethods = methods || REQUIRED_METHODS;\n const requiredEvents = events || REQUIRED_EVENTS;\n const requiredRpcMap = {\n [getEthereumChainId(requiredChains)]: rpcMap[getEthereumChainId(requiredChains)],\n };\n\n const required: Namespace = {\n chains: requiredChains,\n methods: requiredMethods,\n events: requiredEvents,\n rpcMap: requiredRpcMap,\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 };\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 additonal 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 ? requiredChains.concat(optionalChains || []) : optionalChains,\n ),\n ],\n methods: [...new Set(requiredMethods.concat(optionalMethods || []))],\n events: [...new Set(requiredEvents.concat(optionalEvents || []))],\n rpcMap,\n };\n\n return { required, optional };\n}\n\nexport interface EthereumProviderOptions {\n projectId: string;\n /**\n * @note Chains that your app intents to use and the peer MUST support. If the peer does not support these chains, the connection will be rejected.\n * @default [1]\n * @example [1, 3, 4, 5, 42]\n */\n chains: number[];\n /**\n * @note Optional chains that 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 * @default [1]\n * @example [1, 3, 4, 5, 42]\n */\n optionalChains?: number[];\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}\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?: Web3Modal;\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): Promise<T> {\n return await this.signer.request(args, this.formatChainId(this.chainId));\n }\n\n public sendAsync(\n args: RequestArguments,\n callback: (error: Error | null, response: any) => void,\n ): void {\n this.signer.sendAsync(args, callback, this.formatChainId(this.chainId));\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?.subscribeModal((state) => {\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 .connect({\n namespaces: {\n [this.namespace]: required,\n },\n ...(optional && {\n optionalNamespaces: {\n [this.namespace]: optional,\n },\n }),\n pairingTopic: opts?.pairingTopic,\n })\n .then((session) => {\n resolve(session);\n })\n .catch((error: Error) => {\n reject(new Error(error.message));\n });\n },\n );\n\n if (!session) return;\n this.setChainIds(this.rpc.chains);\n const accounts = getAccountsFromNamespaces(session.namespaces, [this.namespace]);\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 if (this.modal) this.modal.closeModal();\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(\"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 if (this.rpc.showQrModal) {\n // to refresh the QR we have to close the modal and open it again\n // until proper API is provided by web3modal\n this.modal?.closeModal();\n this.modal?.openModal({ uri });\n }\n this.events.emit(\"display_uri\", uri);\n });\n }\n\n protected setHttpProvider(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.setHttpProvider(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 return {\n chains: opts.chains?.map((chain) => this.formatChainId(chain)) || [`${this.namespace}:1`],\n optionalChains: opts.optionalChains\n ? opts.optionalChains.map((chain) => this.formatChainId(chain))\n : undefined,\n methods: opts?.methods || REQUIRED_METHODS,\n events: opts?.events || REQUIRED_EVENTS,\n optionalMethods: opts?.optionalMethods || [],\n optionalEvents: opts?.optionalEvents || [],\n rpcMap:\n opts?.rpcMap ||\n this.buildRpcMap(opts.chains.concat(opts.optionalChains || []), opts.projectId),\n showQrModal: Boolean(opts?.showQrModal),\n qrModalOptions: opts?.qrModalOptions ?? undefined,\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 this.chainId = getEthereumChainId(this.rpc.chains);\n this.signer = await UniversalProvider.init({\n projectId: this.rpc.projectId,\n metadata: this.rpc.metadata,\n disableProviderPing: opts.disableProviderPing,\n });\n this.registerEventListeners();\n await this.loadPersistedSession();\n if (this.rpc.showQrModal) {\n let Web3modalClass;\n try {\n const { Web3Modal } = await import(\"@web3modal/standalone\");\n Web3modalClass = Web3Modal;\n } catch {\n throw new Error(\"To use QR modal, please install @web3modal/standalone package\");\n }\n if (Web3modalClass) {\n try {\n this.modal = new Web3modalClass({\n walletConnectVersion: 2,\n projectId: this.rpc.projectId,\n standaloneChains: this.rpc.chains,\n ...this.rpc.qrModalOptions,\n });\n } catch (e) {\n this.signer.logger.error(e);\n throw new Error(\"Could not generate Web3Modal 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 const chainId = await this.signer.client.core.storage.getItem(`${this.STORAGE_KEY}/chainId`);\n this.setChainIds(\n chainId ? [this.formatChainId(chainId)] : this.session.namespaces[this.namespace].accounts,\n );\n this.setAccounts(this.session.namespaces[this.namespace].accounts);\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\";\nexport const EthereumProvider = Provider;\nexport type { RpcEvent, RpcMethod } from \"./EthereumProvider\";\nexport * from \"./constants/rpc\";\nexport default Provider;\n"],"names":["chains","chainId","params","optionalChains","methods","optionalMethods","events","optionalEvents","rpcMap","isValidArray","requiredChains","requiredMethods","REQUIRED_METHODS","requiredEvents","REQUIRED_EVENTS","requiredRpcMap","required","eventsRequiringPermissions","event","methodsRequiringPermissions","shouldIncludeRequiredChains","optional","EthereumProvider","EventEmitter","STORAGE_KEY","listener","payload","opts","provider","args","callback","session","resolve","reject","_a","state","__spreadProps","__spreadValues","error","accounts","getAccountsFromNamespaces","chain","getSdkError","uri","_b","chainIds","x","c","account","namespace","reference","address","projectId","map","UniversalProvider","Web3modalClass","Web3Modal","e","RPC_URL","Provider"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/constants/values.ts","../src/constants/rpc.ts","../src/EthereumProvider.ts","../src/index.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.com/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 \"wallet_switchEthereumChain\",\n \"wallet_addEthereumChain\",\n \"wallet_getPermissions\",\n \"wallet_requestPermissions\",\n \"wallet_registerOnboarding\",\n \"wallet_watchAsset\",\n \"wallet_scanQRCode\",\n];\nexport const REQUIRED_EVENTS = [\"chainChanged\", \"accountsChanged\"];\nexport const OPTIONAL_EVENTS = [\"message\", \"disconnect\", \"connect\"];\n","import { EventEmitter } from \"events\";\nimport { getAccountsFromNamespaces, getSdkError, isValidArray } from \"@walletconnect/utils\";\nimport {\n IEthereumProvider as IProvider,\n IEthereumProviderEvents,\n ProviderAccounts,\n RequestArguments,\n} from \"./types\";\nimport { Metadata, Namespace, UniversalProvider } from \"@walletconnect/universal-provider\";\nimport type { WalletConnectModalConfig, WalletConnectModal } from \"@walletconnect/modal\";\nimport { SessionTypes, SignClientTypes } from \"@walletconnect/types\";\nimport { STORAGE_KEY, REQUIRED_METHODS, REQUIRED_EVENTS, RPC_URL } from \"./constants\";\n\nexport type QrModalOptions = Pick<\n WalletConnectModalConfig,\n | \"themeMode\"\n | \"themeVariables\"\n | \"chainImages\"\n | \"desktopWallets\"\n | \"enableExplorer\"\n | \"explorerRecommendedWalletIds\"\n | \"explorerExcludedWalletIds\"\n | \"mobileWallets\"\n | \"privacyPolicyUrl\"\n | \"termsOfServiceUrl\"\n | \"tokenImages\"\n | \"walletImages\"\n>;\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\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}\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 requiredChains = chains;\n const requiredMethods = methods || REQUIRED_METHODS;\n const requiredEvents = events || REQUIRED_EVENTS;\n const requiredRpcMap = {\n [getEthereumChainId(requiredChains)]: rpcMap[getEthereumChainId(requiredChains)],\n };\n\n const required: Namespace = {\n chains: requiredChains,\n methods: requiredMethods,\n events: requiredEvents,\n rpcMap: requiredRpcMap,\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 };\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 additonal 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 ? requiredChains.concat(optionalChains || []) : optionalChains,\n ),\n ],\n methods: [...new Set(requiredMethods.concat(optionalMethods || []))],\n events: [...new Set(requiredEvents.concat(optionalEvents || []))],\n rpcMap,\n };\n\n return { required, optional };\n}\n\nexport interface EthereumProviderOptions {\n projectId: string;\n /**\n * @note Chains that your app intents to use and the peer MUST support. If the peer does not support these chains, the connection will be rejected.\n * @default [1]\n * @example [1, 3, 4, 5, 42]\n */\n chains: number[];\n /**\n * @note Optional chains that 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 * @default [1]\n * @example [1, 3, 4, 5, 42]\n */\n optionalChains?: number[];\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}\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?: WalletConnectModal;\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): Promise<T> {\n return await this.signer.request(args, this.formatChainId(this.chainId));\n }\n\n public sendAsync(\n args: RequestArguments,\n callback: (error: Error | null, response: any) => void,\n ): void {\n this.signer.sendAsync(args, callback, this.formatChainId(this.chainId));\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?.subscribeModal((state) => {\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 .connect({\n namespaces: {\n [this.namespace]: required,\n },\n ...(optional && {\n optionalNamespaces: {\n [this.namespace]: optional,\n },\n }),\n pairingTopic: opts?.pairingTopic,\n })\n .then((session) => {\n resolve(session);\n })\n .catch((error: Error) => {\n reject(new Error(error.message));\n });\n },\n );\n\n if (!session) return;\n this.setChainIds(this.rpc.chains);\n const accounts = getAccountsFromNamespaces(session.namespaces, [this.namespace]);\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 if (this.modal) this.modal.closeModal();\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(\"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 if (this.rpc.showQrModal) {\n // to refresh the QR we have to close the modal and open it again\n // until proper API is provided by walletconnect modal\n this.modal?.closeModal();\n this.modal?.openModal({ uri });\n }\n this.events.emit(\"display_uri\", uri);\n });\n }\n\n protected setHttpProvider(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.setHttpProvider(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 return {\n chains: opts.chains?.map((chain) => this.formatChainId(chain)) || [`${this.namespace}:1`],\n optionalChains: opts.optionalChains\n ? opts.optionalChains.map((chain) => this.formatChainId(chain))\n : undefined,\n methods: opts?.methods || REQUIRED_METHODS,\n events: opts?.events || REQUIRED_EVENTS,\n optionalMethods: opts?.optionalMethods || [],\n optionalEvents: opts?.optionalEvents || [],\n rpcMap:\n opts?.rpcMap ||\n this.buildRpcMap(opts.chains.concat(opts.optionalChains || []), opts.projectId),\n showQrModal: Boolean(opts?.showQrModal),\n qrModalOptions: opts?.qrModalOptions ?? undefined,\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 this.chainId = getEthereumChainId(this.rpc.chains);\n this.signer = await UniversalProvider.init({\n projectId: this.rpc.projectId,\n metadata: this.rpc.metadata,\n disableProviderPing: opts.disableProviderPing,\n });\n this.registerEventListeners();\n await this.loadPersistedSession();\n if (this.rpc.showQrModal) {\n let WalletConnectModalClass;\n try {\n const { WalletConnectModal } = await import(\"@walletconnect/modal\");\n WalletConnectModalClass = WalletConnectModal;\n } catch {\n throw new Error(\"To use QR modal, please install @walletconnect/modal package\");\n }\n if (WalletConnectModalClass) {\n try {\n this.modal = new WalletConnectModalClass({\n walletConnectVersion: 2,\n projectId: this.rpc.projectId,\n standaloneChains: this.rpc.chains,\n ...this.rpc.qrModalOptions,\n });\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 const chainId = await this.signer.client.core.storage.getItem(`${this.STORAGE_KEY}/chainId`);\n this.setChainIds(\n chainId ? [this.formatChainId(chainId)] : this.session.namespaces[this.namespace].accounts,\n );\n this.setAccounts(this.session.namespaces[this.namespace].accounts);\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\";\nexport const EthereumProvider = Provider;\nexport type { RpcEvent, RpcMethod } from \"./EthereumProvider\";\nexport * from \"./constants/rpc\";\nexport default Provider;\n"],"names":["chains","chainId","params","optionalChains","methods","optionalMethods","events","optionalEvents","rpcMap","isValidArray","requiredChains","requiredMethods","REQUIRED_METHODS","requiredEvents","REQUIRED_EVENTS","requiredRpcMap","required","eventsRequiringPermissions","event","methodsRequiringPermissions","shouldIncludeRequiredChains","optional","EthereumProvider","EventEmitter","STORAGE_KEY","listener","payload","opts","provider","args","callback","session","resolve","reject","_a","state","__spreadProps","__spreadValues","error","accounts","getAccountsFromNamespaces","chain","getSdkError","uri","_b","chainIds","x","c","account","namespace","reference","address","projectId","map","UniversalProvider","WalletConnectModalClass","WalletConnectModal","e","RPC_URL","Provider"],"mappings":"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"}
package/dist/index.es.js CHANGED
@@ -1,2 +1,2 @@
1
- import{EventEmitter as P}from"events";import{getAccountsFromNamespaces as R,getSdkError as T,isValidArray as v}from"@walletconnect/utils";import{UniversalProvider as S}from"@walletconnect/universal-provider";const j="wc",q="ethereum_provider",N=`${j}@2:${q}:`,$="https://rpc.walletconnect.com/v1/",p=["eth_sendTransaction","personal_sign"],D=["eth_accounts","eth_requestAccounts","eth_call","eth_getBalance","eth_sendRawTransaction","eth_sign","eth_signTransaction","eth_signTypedData","eth_signTypedData_v3","eth_signTypedData_v4","wallet_switchEthereumChain","wallet_addEthereumChain","wallet_getPermissions","wallet_requestPermissions","wallet_registerOnboarding","wallet_watchAsset","wallet_scanQRCode"],u=["chainChanged","accountsChanged"],U=["message","disconnect","connect"];var Q=Object.defineProperty,L=Object.defineProperties,H=Object.getOwnPropertyDescriptors,_=Object.getOwnPropertySymbols,G=Object.prototype.hasOwnProperty,K=Object.prototype.propertyIsEnumerable,y=(a,t,s)=>t in a?Q(a,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):a[t]=s,I=(a,t)=>{for(var s in t||(t={}))G.call(t,s)&&y(a,s,t[s]);if(_)for(var s of _(t))K.call(t,s)&&y(a,s,t[s]);return a},b=(a,t)=>L(a,H(t));function C(a){return Number(a[0].split(":")[1])}function w(a){return`0x${a.toString(16)}`}function V(a){const{chains:t,optionalChains:s,methods:i,optionalMethods:e,events:n,optionalEvents:c,rpcMap:h}=a;if(!v(t))throw new Error("Invalid chains");const o=t,r=i||p,f=n||u,M={[C(o)]:h[C(o)]},E={chains:o,methods:r,events:f,rpcMap:M},l=n?.filter(g=>!u.includes(g)),d=i?.filter(g=>!p.includes(g));if(!s&&!c&&!e&&!(l!=null&&l.length)&&!(d!=null&&d.length))return{required:E};const O=l?.length&&d?.length||!s,A={chains:[...new Set(O?o.concat(s||[]):s)],methods:[...new Set(r.concat(e||[]))],events:[...new Set(f.concat(c||[]))],rpcMap:h};return{required:E,optional:A}}class m{constructor(){this.events=new P,this.namespace="eip155",this.accounts=[],this.chainId=1,this.STORAGE_KEY=N,this.on=(t,s)=>(this.events.on(t,s),this),this.once=(t,s)=>(this.events.once(t,s),this),this.removeListener=(t,s)=>(this.events.removeListener(t,s),this),this.off=(t,s)=>(this.events.off(t,s),this),this.parseAccount=t=>this.isCompatibleChainId(t)?this.parseAccountId(t).address:t,this.signer={},this.rpc={}}static async init(t){const s=new m;return await s.initialize(t),s}async request(t){return await this.signer.request(t,this.formatChainId(this.chainId))}sendAsync(t,s){this.signer.sendAsync(t,s,this.formatChainId(this.chainId))}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:s,optional:i}=V(this.rpc);try{const e=await new Promise(async(c,h)=>{var o;this.rpc.showQrModal&&((o=this.modal)==null||o.subscribeModal(r=>{!r.open&&!this.signer.session&&(this.signer.abortPairingAttempt(),h(new Error("Connection request reset. Please try again.")))})),await this.signer.connect(b(I({namespaces:{[this.namespace]:s}},i&&{optionalNamespaces:{[this.namespace]:i}}),{pairingTopic:t?.pairingTopic})).then(r=>{c(r)}).catch(r=>{h(new Error(r.message))})});if(!e)return;this.setChainIds(this.rpc.chains);const n=R(e.namespaces,[this.namespace]);this.setAccounts(n),this.events.emit("connect",{chainId:w(this.chainId)})}catch(e){throw this.signer.logger.error(e),e}finally{this.modal&&this.modal.closeModal()}}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:s}=t,{event:i}=s;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("chainChanged",t=>{const s=parseInt(t);this.chainId=s,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",b(I({},T("USER_DISCONNECTED")),{data:t.topic,name:"USER_DISCONNECTED"}))}),this.signer.on("display_uri",t=>{var s,i;this.rpc.showQrModal&&((s=this.modal)==null||s.closeModal(),(i=this.modal)==null||i.openModal({uri:t})),this.events.emit("display_uri",t)})}setHttpProvider(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 s=t.filter(i=>this.isCompatibleChainId(i)).map(i=>this.parseChainId(i));s.length&&(this.chainId=s[0],this.events.emit("chainChanged",w(this.chainId)),this.persist())}setChainId(t){if(this.isCompatibleChainId(t)){const s=this.parseChainId(t);this.chainId=s,this.setHttpProvider(s)}}parseAccountId(t){const[s,i,e]=t.split(":");return{chainId:`${s}:${i}`,address:e}}setAccounts(t){this.accounts=t.filter(s=>this.parseChainId(this.parseAccountId(s).chainId)===this.chainId).map(s=>this.parseAccountId(s).address),this.events.emit("accountsChanged",this.accounts)}getRpcConfig(t){var s,i;return{chains:((s=t.chains)==null?void 0:s.map(e=>this.formatChainId(e)))||[`${this.namespace}:1`],optionalChains:t.optionalChains?t.optionalChains.map(e=>this.formatChainId(e)):void 0,methods:t?.methods||p,events:t?.events||u,optionalMethods:t?.optionalMethods||[],optionalEvents:t?.optionalEvents||[],rpcMap:t?.rpcMap||this.buildRpcMap(t.chains.concat(t.optionalChains||[]),t.projectId),showQrModal:!!(t!=null&&t.showQrModal),qrModalOptions:(i=t?.qrModalOptions)!=null?i:void 0,projectId:t.projectId,metadata:t.metadata}}buildRpcMap(t,s){const i={};return t.forEach(e=>{i[e]=this.getRpcUrl(e,s)}),i}async initialize(t){if(this.rpc=this.getRpcConfig(t),this.chainId=C(this.rpc.chains),this.signer=await S.init({projectId:this.rpc.projectId,metadata:this.rpc.metadata,disableProviderPing:t.disableProviderPing}),this.registerEventListeners(),await this.loadPersistedSession(),this.rpc.showQrModal){let s;try{const{Web3Modal:i}=await import("@web3modal/standalone");s=i}catch{throw new Error("To use QR modal, please install @web3modal/standalone package")}if(s)try{this.modal=new s(I({walletConnectVersion:2,projectId:this.rpc.projectId,standaloneChains:this.rpc.chains},this.rpc.qrModalOptions))}catch(i){throw this.signer.logger.error(i),new Error("Could not generate Web3Modal Instance")}}}loadConnectOpts(t){if(!t)return;const{chains:s,optionalChains:i,rpcMap:e}=t;s&&v(s)&&(this.rpc.chains=s.map(n=>this.formatChainId(n)),s.forEach(n=>{this.rpc.rpcMap[n]=e?.[n]||this.getRpcUrl(n)})),i&&v(i)&&(this.rpc.optionalChains=[],this.rpc.optionalChains=i?.map(n=>this.formatChainId(n)),i.forEach(n=>{this.rpc.rpcMap[n]=e?.[n]||this.getRpcUrl(n)}))}getRpcUrl(t,s){var i;return((i=this.rpc.rpcMap)==null?void 0:i[t])||`${$}?chainId=eip155:${t}&projectId=${s||this.rpc.projectId}`}async loadPersistedSession(){if(!this.session)return;const t=await this.signer.client.core.storage.getItem(`${this.STORAGE_KEY}/chainId`);this.setChainIds(t?[this.formatChainId(t)]:this.session.namespaces[this.namespace].accounts),this.setAccounts(this.session.namespaces[this.namespace].accounts)}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(s=>this.parseAccount(s))}}const W=m;export{W as EthereumProvider,U as OPTIONAL_EVENTS,D as OPTIONAL_METHODS,u as REQUIRED_EVENTS,p as REQUIRED_METHODS,m as default};
1
+ import{EventEmitter as P}from"events";import{getAccountsFromNamespaces as R,getSdkError as T,isValidArray as v}from"@walletconnect/utils";import{UniversalProvider as S}from"@walletconnect/universal-provider";const j="wc",q="ethereum_provider",N=`${j}@2:${q}:`,$="https://rpc.walletconnect.com/v1/",p=["eth_sendTransaction","personal_sign"],D=["eth_accounts","eth_requestAccounts","eth_sendRawTransaction","eth_sign","eth_signTransaction","eth_signTypedData","eth_signTypedData_v3","eth_signTypedData_v4","wallet_switchEthereumChain","wallet_addEthereumChain","wallet_getPermissions","wallet_requestPermissions","wallet_registerOnboarding","wallet_watchAsset","wallet_scanQRCode"],u=["chainChanged","accountsChanged"],U=["message","disconnect","connect"];var Q=Object.defineProperty,L=Object.defineProperties,H=Object.getOwnPropertyDescriptors,_=Object.getOwnPropertySymbols,G=Object.prototype.hasOwnProperty,K=Object.prototype.propertyIsEnumerable,y=(a,t,s)=>t in a?Q(a,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):a[t]=s,I=(a,t)=>{for(var s in t||(t={}))G.call(t,s)&&y(a,s,t[s]);if(_)for(var s of _(t))K.call(t,s)&&y(a,s,t[s]);return a},M=(a,t)=>L(a,H(t));function C(a){return Number(a[0].split(":")[1])}function w(a){return`0x${a.toString(16)}`}function V(a){const{chains:t,optionalChains:s,methods:i,optionalMethods:n,events:e,optionalEvents:h,rpcMap:c}=a;if(!v(t))throw new Error("Invalid chains");const o=t,r=i||p,f=e||u,O={[C(o)]:c[C(o)]},E={chains:o,methods:r,events:f,rpcMap:O},l=e?.filter(g=>!u.includes(g)),d=i?.filter(g=>!p.includes(g));if(!s&&!h&&!n&&!(l!=null&&l.length)&&!(d!=null&&d.length))return{required:E};const b=l?.length&&d?.length||!s,A={chains:[...new Set(b?o.concat(s||[]):s)],methods:[...new Set(r.concat(n||[]))],events:[...new Set(f.concat(h||[]))],rpcMap:c};return{required:E,optional:A}}class m{constructor(){this.events=new P,this.namespace="eip155",this.accounts=[],this.chainId=1,this.STORAGE_KEY=N,this.on=(t,s)=>(this.events.on(t,s),this),this.once=(t,s)=>(this.events.once(t,s),this),this.removeListener=(t,s)=>(this.events.removeListener(t,s),this),this.off=(t,s)=>(this.events.off(t,s),this),this.parseAccount=t=>this.isCompatibleChainId(t)?this.parseAccountId(t).address:t,this.signer={},this.rpc={}}static async init(t){const s=new m;return await s.initialize(t),s}async request(t){return await this.signer.request(t,this.formatChainId(this.chainId))}sendAsync(t,s){this.signer.sendAsync(t,s,this.formatChainId(this.chainId))}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:s,optional:i}=V(this.rpc);try{const n=await new Promise(async(h,c)=>{var o;this.rpc.showQrModal&&((o=this.modal)==null||o.subscribeModal(r=>{!r.open&&!this.signer.session&&(this.signer.abortPairingAttempt(),c(new Error("Connection request reset. Please try again.")))})),await this.signer.connect(M(I({namespaces:{[this.namespace]:s}},i&&{optionalNamespaces:{[this.namespace]:i}}),{pairingTopic:t?.pairingTopic})).then(r=>{h(r)}).catch(r=>{c(new Error(r.message))})});if(!n)return;this.setChainIds(this.rpc.chains);const e=R(n.namespaces,[this.namespace]);this.setAccounts(e),this.events.emit("connect",{chainId:w(this.chainId)})}catch(n){throw this.signer.logger.error(n),n}finally{this.modal&&this.modal.closeModal()}}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:s}=t,{event:i}=s;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("chainChanged",t=>{const s=parseInt(t);this.chainId=s,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",M(I({},T("USER_DISCONNECTED")),{data:t.topic,name:"USER_DISCONNECTED"}))}),this.signer.on("display_uri",t=>{var s,i;this.rpc.showQrModal&&((s=this.modal)==null||s.closeModal(),(i=this.modal)==null||i.openModal({uri:t})),this.events.emit("display_uri",t)})}setHttpProvider(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 s=t.filter(i=>this.isCompatibleChainId(i)).map(i=>this.parseChainId(i));s.length&&(this.chainId=s[0],this.events.emit("chainChanged",w(this.chainId)),this.persist())}setChainId(t){if(this.isCompatibleChainId(t)){const s=this.parseChainId(t);this.chainId=s,this.setHttpProvider(s)}}parseAccountId(t){const[s,i,n]=t.split(":");return{chainId:`${s}:${i}`,address:n}}setAccounts(t){this.accounts=t.filter(s=>this.parseChainId(this.parseAccountId(s).chainId)===this.chainId).map(s=>this.parseAccountId(s).address),this.events.emit("accountsChanged",this.accounts)}getRpcConfig(t){var s,i;return{chains:((s=t.chains)==null?void 0:s.map(n=>this.formatChainId(n)))||[`${this.namespace}:1`],optionalChains:t.optionalChains?t.optionalChains.map(n=>this.formatChainId(n)):void 0,methods:t?.methods||p,events:t?.events||u,optionalMethods:t?.optionalMethods||[],optionalEvents:t?.optionalEvents||[],rpcMap:t?.rpcMap||this.buildRpcMap(t.chains.concat(t.optionalChains||[]),t.projectId),showQrModal:!!(t!=null&&t.showQrModal),qrModalOptions:(i=t?.qrModalOptions)!=null?i:void 0,projectId:t.projectId,metadata:t.metadata}}buildRpcMap(t,s){const i={};return t.forEach(n=>{i[n]=this.getRpcUrl(n,s)}),i}async initialize(t){if(this.rpc=this.getRpcConfig(t),this.chainId=C(this.rpc.chains),this.signer=await S.init({projectId:this.rpc.projectId,metadata:this.rpc.metadata,disableProviderPing:t.disableProviderPing}),this.registerEventListeners(),await this.loadPersistedSession(),this.rpc.showQrModal){let s;try{const{WalletConnectModal:i}=await import("@walletconnect/modal");s=i}catch{throw new Error("To use QR modal, please install @walletconnect/modal package")}if(s)try{this.modal=new s(I({walletConnectVersion:2,projectId:this.rpc.projectId,standaloneChains:this.rpc.chains},this.rpc.qrModalOptions))}catch(i){throw this.signer.logger.error(i),new Error("Could not generate WalletConnectModal Instance")}}}loadConnectOpts(t){if(!t)return;const{chains:s,optionalChains:i,rpcMap:n}=t;s&&v(s)&&(this.rpc.chains=s.map(e=>this.formatChainId(e)),s.forEach(e=>{this.rpc.rpcMap[e]=n?.[e]||this.getRpcUrl(e)})),i&&v(i)&&(this.rpc.optionalChains=[],this.rpc.optionalChains=i?.map(e=>this.formatChainId(e)),i.forEach(e=>{this.rpc.rpcMap[e]=n?.[e]||this.getRpcUrl(e)}))}getRpcUrl(t,s){var i;return((i=this.rpc.rpcMap)==null?void 0:i[t])||`${$}?chainId=eip155:${t}&projectId=${s||this.rpc.projectId}`}async loadPersistedSession(){if(!this.session)return;const t=await this.signer.client.core.storage.getItem(`${this.STORAGE_KEY}/chainId`);this.setChainIds(t?[this.formatChainId(t)]:this.session.namespaces[this.namespace].accounts),this.setAccounts(this.session.namespaces[this.namespace].accounts)}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(s=>this.parseAccount(s))}}const W=m;export{W as EthereumProvider,U as OPTIONAL_EVENTS,D as OPTIONAL_METHODS,u as REQUIRED_EVENTS,p as REQUIRED_METHODS,m as default};
2
2
  //# sourceMappingURL=index.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/constants/values.ts","../src/constants/rpc.ts","../src/EthereumProvider.ts","../src/index.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.com/v1/\";\n","export const REQUIRED_METHODS = [\"eth_sendTransaction\", \"personal_sign\"];\nexport const OPTIONAL_METHODS = [\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];\nexport const REQUIRED_EVENTS = [\"chainChanged\", \"accountsChanged\"];\nexport const OPTIONAL_EVENTS = [\"message\", \"disconnect\", \"connect\"];\n","import { EventEmitter } from \"events\";\nimport { getAccountsFromNamespaces, getSdkError, isValidArray } from \"@walletconnect/utils\";\nimport {\n IEthereumProvider as IProvider,\n IEthereumProviderEvents,\n ProviderAccounts,\n RequestArguments,\n} from \"./types\";\nimport { Metadata, Namespace, UniversalProvider } from \"@walletconnect/universal-provider\";\nimport type { Web3ModalConfig, Web3Modal } from \"@web3modal/standalone\";\nimport { SessionTypes, SignClientTypes } from \"@walletconnect/types\";\nimport { STORAGE_KEY, REQUIRED_METHODS, REQUIRED_EVENTS, RPC_URL } from \"./constants\";\n\nexport type QrModalOptions = Pick<\n Web3ModalConfig,\n | \"themeMode\"\n | \"themeVariables\"\n | \"chainImages\"\n | \"desktopWallets\"\n | \"enableExplorer\"\n | \"explorerRecommendedWalletIds\"\n | \"explorerExcludedWalletIds\"\n | \"mobileWallets\"\n | \"privacyPolicyUrl\"\n | \"termsOfServiceUrl\"\n | \"tokenImages\"\n | \"walletImages\"\n>;\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\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}\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 requiredChains = chains;\n const requiredMethods = methods || REQUIRED_METHODS;\n const requiredEvents = events || REQUIRED_EVENTS;\n const requiredRpcMap = {\n [getEthereumChainId(requiredChains)]: rpcMap[getEthereumChainId(requiredChains)],\n };\n\n const required: Namespace = {\n chains: requiredChains,\n methods: requiredMethods,\n events: requiredEvents,\n rpcMap: requiredRpcMap,\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 };\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 additonal 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 ? requiredChains.concat(optionalChains || []) : optionalChains,\n ),\n ],\n methods: [...new Set(requiredMethods.concat(optionalMethods || []))],\n events: [...new Set(requiredEvents.concat(optionalEvents || []))],\n rpcMap,\n };\n\n return { required, optional };\n}\n\nexport interface EthereumProviderOptions {\n projectId: string;\n /**\n * @note Chains that your app intents to use and the peer MUST support. If the peer does not support these chains, the connection will be rejected.\n * @default [1]\n * @example [1, 3, 4, 5, 42]\n */\n chains: number[];\n /**\n * @note Optional chains that 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 * @default [1]\n * @example [1, 3, 4, 5, 42]\n */\n optionalChains?: number[];\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}\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?: Web3Modal;\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): Promise<T> {\n return await this.signer.request(args, this.formatChainId(this.chainId));\n }\n\n public sendAsync(\n args: RequestArguments,\n callback: (error: Error | null, response: any) => void,\n ): void {\n this.signer.sendAsync(args, callback, this.formatChainId(this.chainId));\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?.subscribeModal((state) => {\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 .connect({\n namespaces: {\n [this.namespace]: required,\n },\n ...(optional && {\n optionalNamespaces: {\n [this.namespace]: optional,\n },\n }),\n pairingTopic: opts?.pairingTopic,\n })\n .then((session) => {\n resolve(session);\n })\n .catch((error: Error) => {\n reject(new Error(error.message));\n });\n },\n );\n\n if (!session) return;\n this.setChainIds(this.rpc.chains);\n const accounts = getAccountsFromNamespaces(session.namespaces, [this.namespace]);\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 if (this.modal) this.modal.closeModal();\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(\"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 if (this.rpc.showQrModal) {\n // to refresh the QR we have to close the modal and open it again\n // until proper API is provided by web3modal\n this.modal?.closeModal();\n this.modal?.openModal({ uri });\n }\n this.events.emit(\"display_uri\", uri);\n });\n }\n\n protected setHttpProvider(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.setHttpProvider(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 return {\n chains: opts.chains?.map((chain) => this.formatChainId(chain)) || [`${this.namespace}:1`],\n optionalChains: opts.optionalChains\n ? opts.optionalChains.map((chain) => this.formatChainId(chain))\n : undefined,\n methods: opts?.methods || REQUIRED_METHODS,\n events: opts?.events || REQUIRED_EVENTS,\n optionalMethods: opts?.optionalMethods || [],\n optionalEvents: opts?.optionalEvents || [],\n rpcMap:\n opts?.rpcMap ||\n this.buildRpcMap(opts.chains.concat(opts.optionalChains || []), opts.projectId),\n showQrModal: Boolean(opts?.showQrModal),\n qrModalOptions: opts?.qrModalOptions ?? undefined,\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 this.chainId = getEthereumChainId(this.rpc.chains);\n this.signer = await UniversalProvider.init({\n projectId: this.rpc.projectId,\n metadata: this.rpc.metadata,\n disableProviderPing: opts.disableProviderPing,\n });\n this.registerEventListeners();\n await this.loadPersistedSession();\n if (this.rpc.showQrModal) {\n let Web3modalClass;\n try {\n const { Web3Modal } = await import(\"@web3modal/standalone\");\n Web3modalClass = Web3Modal;\n } catch {\n throw new Error(\"To use QR modal, please install @web3modal/standalone package\");\n }\n if (Web3modalClass) {\n try {\n this.modal = new Web3modalClass({\n walletConnectVersion: 2,\n projectId: this.rpc.projectId,\n standaloneChains: this.rpc.chains,\n ...this.rpc.qrModalOptions,\n });\n } catch (e) {\n this.signer.logger.error(e);\n throw new Error(\"Could not generate Web3Modal 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 const chainId = await this.signer.client.core.storage.getItem(`${this.STORAGE_KEY}/chainId`);\n this.setChainIds(\n chainId ? [this.formatChainId(chainId)] : this.session.namespaces[this.namespace].accounts,\n );\n this.setAccounts(this.session.namespaces[this.namespace].accounts);\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\";\nexport const EthereumProvider = Provider;\nexport type { RpcEvent, RpcMethod } from \"./EthereumProvider\";\nexport * from \"./constants/rpc\";\nexport default Provider;\n"],"names":["chains","chainId","params","optionalChains","methods","optionalMethods","events","optionalEvents","rpcMap","isValidArray","requiredChains","requiredMethods","REQUIRED_METHODS","requiredEvents","REQUIRED_EVENTS","requiredRpcMap","required","eventsRequiringPermissions","event","methodsRequiringPermissions","shouldIncludeRequiredChains","optional","EthereumProvider","EventEmitter","STORAGE_KEY","listener","payload","opts","provider","args","callback","session","resolve","reject","_a","state","__spreadProps","__spreadValues","error","accounts","getAccountsFromNamespaces","chain","getSdkError","uri","_b","chainIds","x","c","account","namespace","reference","address","projectId","map","UniversalProvider","Web3modalClass","Web3Modal","e","RPC_URL","Provider"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/constants/values.ts","../src/constants/rpc.ts","../src/EthereumProvider.ts","../src/index.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.com/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 \"wallet_switchEthereumChain\",\n \"wallet_addEthereumChain\",\n \"wallet_getPermissions\",\n \"wallet_requestPermissions\",\n \"wallet_registerOnboarding\",\n \"wallet_watchAsset\",\n \"wallet_scanQRCode\",\n];\nexport const REQUIRED_EVENTS = [\"chainChanged\", \"accountsChanged\"];\nexport const OPTIONAL_EVENTS = [\"message\", \"disconnect\", \"connect\"];\n","import { EventEmitter } from \"events\";\nimport { getAccountsFromNamespaces, getSdkError, isValidArray } from \"@walletconnect/utils\";\nimport {\n IEthereumProvider as IProvider,\n IEthereumProviderEvents,\n ProviderAccounts,\n RequestArguments,\n} from \"./types\";\nimport { Metadata, Namespace, UniversalProvider } from \"@walletconnect/universal-provider\";\nimport type { WalletConnectModalConfig, WalletConnectModal } from \"@walletconnect/modal\";\nimport { SessionTypes, SignClientTypes } from \"@walletconnect/types\";\nimport { STORAGE_KEY, REQUIRED_METHODS, REQUIRED_EVENTS, RPC_URL } from \"./constants\";\n\nexport type QrModalOptions = Pick<\n WalletConnectModalConfig,\n | \"themeMode\"\n | \"themeVariables\"\n | \"chainImages\"\n | \"desktopWallets\"\n | \"enableExplorer\"\n | \"explorerRecommendedWalletIds\"\n | \"explorerExcludedWalletIds\"\n | \"mobileWallets\"\n | \"privacyPolicyUrl\"\n | \"termsOfServiceUrl\"\n | \"tokenImages\"\n | \"walletImages\"\n>;\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\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}\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 requiredChains = chains;\n const requiredMethods = methods || REQUIRED_METHODS;\n const requiredEvents = events || REQUIRED_EVENTS;\n const requiredRpcMap = {\n [getEthereumChainId(requiredChains)]: rpcMap[getEthereumChainId(requiredChains)],\n };\n\n const required: Namespace = {\n chains: requiredChains,\n methods: requiredMethods,\n events: requiredEvents,\n rpcMap: requiredRpcMap,\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 };\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 additonal 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 ? requiredChains.concat(optionalChains || []) : optionalChains,\n ),\n ],\n methods: [...new Set(requiredMethods.concat(optionalMethods || []))],\n events: [...new Set(requiredEvents.concat(optionalEvents || []))],\n rpcMap,\n };\n\n return { required, optional };\n}\n\nexport interface EthereumProviderOptions {\n projectId: string;\n /**\n * @note Chains that your app intents to use and the peer MUST support. If the peer does not support these chains, the connection will be rejected.\n * @default [1]\n * @example [1, 3, 4, 5, 42]\n */\n chains: number[];\n /**\n * @note Optional chains that 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 * @default [1]\n * @example [1, 3, 4, 5, 42]\n */\n optionalChains?: number[];\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}\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?: WalletConnectModal;\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): Promise<T> {\n return await this.signer.request(args, this.formatChainId(this.chainId));\n }\n\n public sendAsync(\n args: RequestArguments,\n callback: (error: Error | null, response: any) => void,\n ): void {\n this.signer.sendAsync(args, callback, this.formatChainId(this.chainId));\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?.subscribeModal((state) => {\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 .connect({\n namespaces: {\n [this.namespace]: required,\n },\n ...(optional && {\n optionalNamespaces: {\n [this.namespace]: optional,\n },\n }),\n pairingTopic: opts?.pairingTopic,\n })\n .then((session) => {\n resolve(session);\n })\n .catch((error: Error) => {\n reject(new Error(error.message));\n });\n },\n );\n\n if (!session) return;\n this.setChainIds(this.rpc.chains);\n const accounts = getAccountsFromNamespaces(session.namespaces, [this.namespace]);\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 if (this.modal) this.modal.closeModal();\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(\"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 if (this.rpc.showQrModal) {\n // to refresh the QR we have to close the modal and open it again\n // until proper API is provided by walletconnect modal\n this.modal?.closeModal();\n this.modal?.openModal({ uri });\n }\n this.events.emit(\"display_uri\", uri);\n });\n }\n\n protected setHttpProvider(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.setHttpProvider(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 return {\n chains: opts.chains?.map((chain) => this.formatChainId(chain)) || [`${this.namespace}:1`],\n optionalChains: opts.optionalChains\n ? opts.optionalChains.map((chain) => this.formatChainId(chain))\n : undefined,\n methods: opts?.methods || REQUIRED_METHODS,\n events: opts?.events || REQUIRED_EVENTS,\n optionalMethods: opts?.optionalMethods || [],\n optionalEvents: opts?.optionalEvents || [],\n rpcMap:\n opts?.rpcMap ||\n this.buildRpcMap(opts.chains.concat(opts.optionalChains || []), opts.projectId),\n showQrModal: Boolean(opts?.showQrModal),\n qrModalOptions: opts?.qrModalOptions ?? undefined,\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 this.chainId = getEthereumChainId(this.rpc.chains);\n this.signer = await UniversalProvider.init({\n projectId: this.rpc.projectId,\n metadata: this.rpc.metadata,\n disableProviderPing: opts.disableProviderPing,\n });\n this.registerEventListeners();\n await this.loadPersistedSession();\n if (this.rpc.showQrModal) {\n let WalletConnectModalClass;\n try {\n const { WalletConnectModal } = await import(\"@walletconnect/modal\");\n WalletConnectModalClass = WalletConnectModal;\n } catch {\n throw new Error(\"To use QR modal, please install @walletconnect/modal package\");\n }\n if (WalletConnectModalClass) {\n try {\n this.modal = new WalletConnectModalClass({\n walletConnectVersion: 2,\n projectId: this.rpc.projectId,\n standaloneChains: this.rpc.chains,\n ...this.rpc.qrModalOptions,\n });\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 const chainId = await this.signer.client.core.storage.getItem(`${this.STORAGE_KEY}/chainId`);\n this.setChainIds(\n chainId ? [this.formatChainId(chainId)] : this.session.namespaces[this.namespace].accounts,\n );\n this.setAccounts(this.session.namespaces[this.namespace].accounts);\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\";\nexport const EthereumProvider = Provider;\nexport type { RpcEvent, RpcMethod } from \"./EthereumProvider\";\nexport * from \"./constants/rpc\";\nexport default Provider;\n"],"names":["chains","chainId","params","optionalChains","methods","optionalMethods","events","optionalEvents","rpcMap","isValidArray","requiredChains","requiredMethods","REQUIRED_METHODS","requiredEvents","REQUIRED_EVENTS","requiredRpcMap","required","eventsRequiringPermissions","event","methodsRequiringPermissions","shouldIncludeRequiredChains","optional","EthereumProvider","EventEmitter","STORAGE_KEY","listener","payload","opts","provider","args","callback","session","resolve","reject","_a","state","__spreadProps","__spreadValues","error","accounts","getAccountsFromNamespaces","chain","getSdkError","uri","_b","chainIds","x","c","account","namespace","reference","address","projectId","map","UniversalProvider","WalletConnectModalClass","WalletConnectModal","e","RPC_URL","Provider"],"mappings":"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"}