@walletconnect/ethereum-provider 2.2.1 → 2.3.1

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
@@ -1,3 +1,76 @@
1
1
  # @walletconnect/ethereum-provider
2
2
 
3
- Ethereum Provider for WalletConnect Protocol
3
+ Ethereum Provider for WalletConnect Protocol.
4
+
5
+ ## Installation
6
+
7
+ ```
8
+ npm i @walletconnect/ethereum-provider
9
+ ```
10
+
11
+ ## Initialization
12
+
13
+ ```typescript
14
+ import { EthereumProvider } from "@walletconnect/ethereum-provider";
15
+
16
+ const provider = await EthereumProvider.init({
17
+ projectId, // REQUIRED your projectId
18
+ chains, // REQUIRED chain ids
19
+ methods, // OPTIONAL ethereum methods
20
+ events, // OPTIONAL ethereum events
21
+ rpcMap, // OPTIONAL rpc urls for each chain
22
+ metadata, // OPTIONAL metadata of your app
23
+ showQrModal, // OPTIONAL - `true` by default
24
+ });
25
+ ```
26
+
27
+ ## Display Web3Modal with QR code / Handle connection URI
28
+
29
+ ```typescript
30
+ // Web3Modal is enabled by default and will display a QR code modal
31
+ await provider.connect({
32
+ chains, // OPTIONAL chain ids
33
+ rpcMap, // OPTIONAL rpc urls
34
+ pairingTopic, // OPTIONAL pairing topic
35
+ });
36
+ // or
37
+ await provider.enable();
38
+ ```
39
+
40
+ ```typescript
41
+ // If you wish to disable the built-in modal via `showQrModal`, you can subscribe to
42
+ provider.on("display_uri", (uri: string) => {
43
+ // ... custom logic
44
+ });
45
+
46
+ await provider.connect();
47
+ // or
48
+ await provider.enable();
49
+ ```
50
+
51
+ ## Sending Requests
52
+
53
+ ```typescript
54
+ const result = await provider.request({ method: "eth_requestAccounts" });
55
+
56
+ // OR
57
+
58
+ provider.sendAsync({ method: "eth_requestAccounts" }, CallBackFunction);
59
+ ```
60
+
61
+ ## Events
62
+
63
+ ```typescript
64
+ // chain changed
65
+ provider.on("chainChanged", handler);
66
+ // accounts changed
67
+ provider.on("accountsChanged", handler);
68
+ // session established
69
+ provider.on("connect", handler);
70
+ // session event - chainChanged/accountsChanged/custom events
71
+ provider.on("session_event", handler);
72
+ // connection uri
73
+ provider.on("display_uri", handler);
74
+ // session disconnect
75
+ provider.on("disconnect", handler);
76
+ ```
package/dist/index.cjs.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var u=require("events"),a=require("@walletconnect/jsonrpc-provider"),p=require("@walletconnect/jsonrpc-http-connection"),i=require("@walletconnect/utils"),c=require("@walletconnect/signer-connection");const g=["eth_requestAccounts","eth_accounts","eth_chainId","eth_sendTransaction","eth_signTransaction","eth_sign","eth_signTypedData","personal_sign"],m=["chainChanged","accountsChanged"];function r(s){return{chains:s!=null&&s.chainId?[`eip155:${s.chainId}`]:[],methods:s?.methods||[],events:s?.events||[],rpcMap:s?.rpcMap||void 0}}function o(s,t){let e;return t.rpcMap&&(e=t.rpcMap[h([s])]),e}function h(s){return Number(s[0].split(":")[1])}class l{constructor(t){this.events=new u.EventEmitter,this.namespace="eip155",this.accounts=[],this.rpc=r(t),this.signer=this.setSignerProvider(t?.client),this.chainId=h(this.rpc.chains),this.http=this.setHttpProvider(this.chainId),this.registerEventListeners()}async request(t){switch(t.method){case"eth_requestAccounts":return await this.connect(),this.accounts;case"eth_accounts":return this.accounts;case"eth_chainId":return this.chainId}if(t.method.startsWith("eth_signTypedData")||this.rpc.methods.includes(t.method))return this.signer.request(t,{chainId:this.formatChainId(this.chainId)});if(typeof this.http>"u")throw new Error(`Cannot request JSON-RPC method (${t.method}) without provided rpc url`);return this.http.request(t)}sendAsync(t,e){this.request(t).then(n=>e(null,n)).catch(n=>e(n,void 0))}get connected(){return this.signer.connection.connected}get connecting(){return this.signer.connection.connecting}async enable(){return await this.request({method:"eth_requestAccounts"})}async connect(){await this.signer.connect()}async disconnect(){await this.signer.disconnect()}on(t,e){this.events.on(t,e)}once(t,e){this.events.once(t,e)}removeListener(t,e){this.events.removeListener(t,e)}off(t,e){this.events.off(t,e)}get isWalletConnect(){return!0}registerEventListeners(){this.signer.on("connect",()=>{const t=this.signer.connection.chains;t&&t.length&&this.setChainIds(t);const e=this.signer.connection.accounts;e&&e.length&&this.setAccounts(e)}),this.signer.connection.on(c.SIGNER_EVENTS.created,t=>{const e=i.getChainsFromNamespaces(t.namespaces,[this.namespace]);this.setChainIds(e);const n=i.getAccountsFromNamespaces(t.namespaces,[this.namespace]);this.setAccounts(n)}),this.signer.connection.on(c.SIGNER_EVENTS.updated,t=>{const e=i.getChainsFromNamespaces(t.namespaces,[this.namespace]);this.setChainIds(e);const n=i.getAccountsFromNamespaces(t.namespaces,[this.namespace]);n!==this.accounts&&this.setAccounts(n)}),this.signer.connection.on(c.SIGNER_EVENTS.event,t=>{if(!this.rpc.chains.includes(t.chainId))return;const{event:e}=t;e.name==="accountsChanged"?(this.accounts=e.data,this.events.emit("accountsChanged",this.accounts)):e.name==="chainChanged"?this.setChainId(e.data):this.events.emit(e.name,e.data)}),this.signer.on("disconnect",()=>{this.events.emit("disconnect")}),this.events.on("chainChanged",t=>this.setHttpProvider(t))}setSignerProvider(t){const e=new c.SignerConnection({requiredNamespaces:{[this.namespace]:{chains:this.rpc.chains,methods:this.rpc.methods,events:this.rpc.events}},client:t});return new a.JsonRpcProvider(e)}setHttpProvider(t){const e=o(`${this.namespace}:${t}`,this.rpc);return typeof e>"u"?void 0:new a.JsonRpcProvider(new p.HttpConnection(e))}isCompatibleChainId(t){return typeof t=="string"?t.startsWith(`${this.namespace}:`):!1}formatChainId(t){return`${this.namespace}:${t}`}parseChainId(t){return Number(t.split(":")[1])}setChainIds(t){const e=t.filter(n=>this.isCompatibleChainId(n)).map(n=>this.parseChainId(n)).filter(n=>n!==this.chainId);e.length&&(this.chainId=e[0],this.events.emit("chainChanged",this.chainId))}setChainId(t){if(this.isCompatibleChainId(t)){const e=this.parseChainId(t);this.chainId=e,this.events.emit("chainChanged",this.chainId)}}parseAccountId(t){const[e,n,d]=t.split(":");return{chainId:`${e}:${n}`,address:d}}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)}}exports.default=l,exports.getEthereumChainId=h,exports.getRpcConfig=r,exports.getRpcUrl=o,exports.signerEvents=m,exports.signerMethods=g;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var r=require("events"),a=require("@walletconnect/utils"),h=require("@walletconnect/universal-provider"),o=require("@web3modal/standalone");const d="https://rpc.walletconnect.com/v1/",p=["eth_requestAccounts","eth_accounts","eth_chainId","eth_sendTransaction","eth_signTransaction","eth_sign","eth_signTypedData","personal_sign"],l=["chainChanged","accountsChanged"];function u(c){return Number(c[0].split(":")[1])}class n{constructor(){this.events=new r.EventEmitter,this.namespace="eip155",this.accounts=[],this.chainId=1,this.signer={},this.rpc={}}static async init(t){const s=new n;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);try{const s=await this.signer.connect({namespaces:{[this.namespace]:{chains:this.rpc.chains,methods:this.rpc.methods,events:this.rpc.events,rpcMap:this.rpc.rpcMap}},pairingTopic:t?.pairingTopic});if(!s)return;const i=a.getChainsFromNamespaces(s.namespaces,[this.namespace]);this.setChainIds(i);const e=a.getAccountsFromNamespaces(s.namespaces,[this.namespace]);this.setAccounts(e),this.events.emit("connect",{chainId:this.chainId,accounts:this.accounts})}catch(s){throw new Error(s.message)}finally{this.modal&&this.modal.closeModal()}}async disconnect(){await this.signer.disconnect()}on(t,s){this.events.on(t,s)}once(t,s){this.events.once(t,s)}removeListener(t,s){this.events.removeListener(t,s)}off(t,s){this.events.off(t,s)}get isWalletConnect(){return!0}get session(){return this.signer.session}registerEventListeners(){this.signer.on("session_event",t=>{const{params:s}=t;if(!this.rpc.chains.includes(s.chainId))return;const{event:i}=s;i.name==="accountsChanged"?(this.accounts=i.data,this.events.emit("accountsChanged",this.accounts)):i.name==="chainChanged"?this.setChainId(i.data):this.events.emit(i.name,i.data),this.events.emit("session_event",t)}),this.signer.on("disconnect",()=>{this.events.emit("disconnect")}),this.signer.on("display_uri",t=>{var s;this.rpc.showQrModal&&((s=this.modal)==null||s.openModal({uri:t})),this.events.emit("display_uri",t)})}setHttpProvider(t){const s=this.formatChainId(t);this.signer.setDefaultChain(s,this.getRpcUrl(t))}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)).filter(i=>i!==this.chainId);s.length&&(this.chainId=s[0],this.events.emit("chainChanged",this.chainId))}setChainId(t){if(this.isCompatibleChainId(t)){const s=this.parseChainId(t);this.chainId=s,this.setHttpProvider(s),this.events.emit("chainChanged",this.chainId)}}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){return{chains:t.chains.map(s=>this.formatChainId(s))||[`${this.namespace}:1`],methods:t?.methods||p,events:t?.events||l,rpcMap:t?.rpcMap||this.buildRpcMap(t.chains,t.projectId),showQrModal:t?.showQrModal||!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){this.rpc=this.getRpcConfig(t),this.chainId=u(this.rpc.chains),this.signer=await h.UniversalProvider.init({projectId:this.rpc.projectId}),this.registerEventListeners(),this.rpc.showQrModal&&(this.modal=new o.Web3Modal({projectId:this.rpc.projectId,standaloneChains:this.rpc.chains}))}loadConnectOpts(t){if(!t)return;const{chains:s,rpcMap:i}=t;!a.isValidArray(s)||!s||(this.rpc.chains=this.rpc.chains.concat(s.map(e=>this.formatChainId(e))),this.rpc.chains=[...new Set(this.rpc.chains)],s.forEach(e=>{this.rpc.rpcMap[e]=i?.[e]||this.getRpcUrl(e)}))}getRpcUrl(t,s){var i;return((i=this.rpc.rpcMap)==null?void 0:i[t])||`${d}?chainId=eip155:${t}&projectId=${s||this.rpc.projectId}`}}const m=n;exports.EthereumProvider=m,exports.default=n;
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/index.ts"],"sourcesContent":["import { EventEmitter } from \"events\";\nimport { JsonRpcProvider } from \"@walletconnect/jsonrpc-provider\";\nimport { HttpConnection } from \"@walletconnect/jsonrpc-http-connection\";\nimport { SessionTypes } from \"@walletconnect/types\";\nimport { getChainsFromNamespaces, getAccountsFromNamespaces } from \"@walletconnect/utils\";\nimport {\n SignerConnection,\n SIGNER_EVENTS,\n SignerConnectionClientOpts,\n} from \"@walletconnect/signer-connection\";\nimport { IEthereumProvider, ProviderAccounts, RequestArguments } from \"eip1193-provider\";\n\nexport const signerMethods = [\n \"eth_requestAccounts\",\n \"eth_accounts\",\n \"eth_chainId\",\n \"eth_sendTransaction\",\n \"eth_signTransaction\",\n \"eth_sign\",\n \"eth_signTypedData\",\n \"personal_sign\",\n];\n\nexport const signerEvents = [\"chainChanged\", \"accountsChanged\"];\n\nexport interface EthereumRpcMap {\n [chainId: string]: string;\n}\n\nexport interface EthereumRpcConfig {\n chains: string[];\n methods: string[];\n events: string[];\n rpcMap?: EthereumRpcMap;\n}\n\nexport function getRpcConfig(opts: EthereumProviderOptions): EthereumRpcConfig {\n return {\n chains: opts?.chainId ? [`eip155:${opts.chainId}`] : [],\n methods: opts?.methods || [],\n events: opts?.events || [],\n rpcMap: opts?.rpcMap || undefined,\n };\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 interface EthereumProviderOptions {\n chainId: number;\n methods?: string[];\n events?: string[];\n rpcMap?: EthereumRpcMap;\n client?: SignerConnectionClientOpts;\n}\n\nclass EthereumProvider implements IEthereumProvider {\n public events: any = new EventEmitter();\n public namespace = \"eip155\";\n public accounts: string[] = [];\n public signer: JsonRpcProvider;\n public http: JsonRpcProvider | undefined;\n public chainId: number;\n\n private rpc: EthereumRpcConfig;\n\n constructor(opts: EthereumProviderOptions) {\n this.rpc = getRpcConfig(opts);\n this.signer = this.setSignerProvider(opts?.client);\n this.chainId = getEthereumChainId(this.rpc.chains);\n this.http = this.setHttpProvider(this.chainId);\n this.registerEventListeners();\n }\n\n public async request<T = unknown>(args: RequestArguments): Promise<T> {\n switch (args.method) {\n case \"eth_requestAccounts\":\n await this.connect();\n return this.accounts as any;\n case \"eth_accounts\":\n return this.accounts as any;\n case \"eth_chainId\":\n return this.chainId as any;\n default:\n break;\n }\n if (args.method.startsWith(\"eth_signTypedData\") || this.rpc.methods.includes(args.method)) {\n return this.signer.request(args, { chainId: this.formatChainId(this.chainId) });\n }\n if (typeof this.http === \"undefined\") {\n throw new Error(`Cannot request JSON-RPC method (${args.method}) without provided rpc url`);\n }\n return this.http.request(args);\n }\n\n public sendAsync(\n args: RequestArguments,\n callback: (error: Error | null, response: any) => void,\n ): void {\n this.request(args)\n .then((response) => callback(null, response))\n .catch((error) => callback(error, undefined));\n }\n\n get connected(): boolean {\n return (this.signer.connection as SignerConnection).connected;\n }\n\n get connecting(): boolean {\n return (this.signer.connection as SignerConnection).connecting;\n }\n\n public async enable(): Promise<ProviderAccounts> {\n const accounts = await this.request({ method: \"eth_requestAccounts\" });\n return accounts as ProviderAccounts;\n }\n\n public async connect(): Promise<void> {\n await this.signer.connect();\n }\n\n public async disconnect(): Promise<void> {\n await this.signer.disconnect();\n }\n\n public on(event: any, listener: any): void {\n this.events.on(event, listener);\n }\n\n public once(event: string, listener: any): void {\n this.events.once(event, listener);\n }\n\n public removeListener(event: string, listener: any): void {\n this.events.removeListener(event, listener);\n }\n\n public off(event: string, listener: any): void {\n this.events.off(event, listener);\n }\n\n get isWalletConnect() {\n return true;\n }\n\n // ---------- Private ----------------------------------------------- //\n\n private registerEventListeners() {\n this.signer.on(\"connect\", () => {\n const chains = (this.signer.connection as SignerConnection).chains;\n if (chains && chains.length) this.setChainIds(chains);\n const accounts = (this.signer.connection as SignerConnection).accounts;\n if (accounts && accounts.length) this.setAccounts(accounts);\n });\n this.signer.connection.on(SIGNER_EVENTS.created, (session: SessionTypes.Struct) => {\n const chains = getChainsFromNamespaces(session.namespaces, [this.namespace]);\n this.setChainIds(chains);\n const accounts = getAccountsFromNamespaces(session.namespaces, [this.namespace]);\n this.setAccounts(accounts);\n });\n this.signer.connection.on(SIGNER_EVENTS.updated, (session: SessionTypes.Struct) => {\n const chains = getChainsFromNamespaces(session.namespaces, [this.namespace]);\n this.setChainIds(chains);\n const accounts = getAccountsFromNamespaces(session.namespaces, [this.namespace]);\n if (accounts !== this.accounts) {\n this.setAccounts(accounts);\n }\n });\n this.signer.connection.on(SIGNER_EVENTS.event, (params: any) => {\n if (!this.rpc.chains.includes(params.chainId)) return;\n const { event } = params;\n if (event.name === \"accountsChanged\") {\n this.accounts = event.data;\n this.events.emit(\"accountsChanged\", this.accounts);\n } else if (event.name === \"chainChanged\") {\n this.setChainId(event.data);\n } else {\n this.events.emit(event.name, event.data);\n }\n });\n this.signer.on(\"disconnect\", () => {\n this.events.emit(\"disconnect\");\n });\n this.events.on(\"chainChanged\", (chainId: number) => this.setHttpProvider(chainId));\n }\n\n private setSignerProvider(client?: SignerConnectionClientOpts) {\n const connection = new SignerConnection({\n requiredNamespaces: {\n [this.namespace]: {\n chains: this.rpc.chains,\n methods: this.rpc.methods,\n events: this.rpc.events,\n },\n },\n client,\n });\n return new JsonRpcProvider(connection);\n }\n\n private setHttpProvider(chainId: number): JsonRpcProvider | undefined {\n const rpcUrl = getRpcUrl(`${this.namespace}:${chainId}`, this.rpc);\n if (typeof rpcUrl === \"undefined\") return undefined;\n const http = new JsonRpcProvider(new HttpConnection(rpcUrl));\n return http;\n }\n\n private isCompatibleChainId(chainId: string): boolean {\n return typeof chainId === \"string\" ? chainId.startsWith(`${this.namespace}:`) : false;\n }\n\n private formatChainId(chainId: number): string {\n return `${this.namespace}:${chainId}`;\n }\n\n private parseChainId(chainId: string): number {\n return Number(chainId.split(\":\")[1]);\n }\n\n private setChainIds(chains: string[]) {\n const compatible = chains.filter((x) => this.isCompatibleChainId(x));\n const chainIds = compatible.map((c) => this.parseChainId(c)).filter((c) => c !== this.chainId);\n if (chainIds.length) {\n this.chainId = chainIds[0];\n this.events.emit(\"chainChanged\", this.chainId);\n }\n }\n\n private setChainId(chain: string) {\n if (this.isCompatibleChainId(chain)) {\n const chainId = this.parseChainId(chain);\n this.chainId = chainId;\n this.events.emit(\"chainChanged\", this.chainId);\n }\n }\n\n private 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 private 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\nexport default EthereumProvider;\n"],"names":["opts","chainId","rpc","rpcUrl","chains","EthereumProvider","EventEmitter","args","callback","response","error","event","listener","accounts","SIGNER_EVENTS","session","getChainsFromNamespaces","getAccountsFromNamespaces","params","client","connection","SignerConnection","JsonRpcProvider","HttpConnection","chainIds","x","c","chain","account","namespace","reference","address"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/EthereumProvider.ts","../src/index.ts"],"sourcesContent":["import { EventEmitter } from \"events\";\nimport {\n getChainsFromNamespaces,\n getAccountsFromNamespaces,\n isValidArray,\n} from \"@walletconnect/utils\";\nimport {\n IEthereumProvider as IProvider,\n ProviderAccounts,\n RequestArguments,\n} from \"eip1193-provider\";\nimport { Metadata, UniversalProvider } from \"@walletconnect/universal-provider\";\nimport { Web3Modal } from \"@web3modal/standalone\";\n\nexport const RPC_URL = \"https://rpc.walletconnect.com/v1/\";\n\nexport const signerMethods = [\n \"eth_requestAccounts\",\n \"eth_accounts\",\n \"eth_chainId\",\n \"eth_sendTransaction\",\n \"eth_signTransaction\",\n \"eth_sign\",\n \"eth_signTypedData\",\n \"personal_sign\",\n];\n\nexport const signerEvents = [\"chainChanged\", \"accountsChanged\"];\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 methods: string[];\n events: string[];\n rpcMap: EthereumRpcMap;\n projectId: string;\n metadata?: Metadata;\n showQrModal: boolean;\n}\n\nexport interface ConnectOps {\n chains?: 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}\nexport interface EthereumProviderOptions {\n projectId: string;\n chains: number[];\n methods?: string[];\n events?: string[];\n rpcMap?: EthereumRpcMap;\n metadata?: Metadata;\n showQrModal?: boolean;\n}\n\nexport class EthereumProvider implements IEthereumProvider {\n public events: any = new EventEmitter();\n public namespace = \"eip155\";\n public accounts: string[] = [];\n public signer: InstanceType<typeof UniversalProvider>;\n public chainId = 1;\n\n private rpc: EthereumRpcConfig;\n private modal?: Web3Modal;\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\n try {\n const session = await this.signer.connect({\n namespaces: {\n [this.namespace]: {\n chains: this.rpc.chains,\n methods: this.rpc.methods,\n events: this.rpc.events,\n rpcMap: this.rpc.rpcMap,\n },\n },\n pairingTopic: opts?.pairingTopic,\n });\n if (!session) return;\n const chains = getChainsFromNamespaces(session.namespaces, [this.namespace]);\n this.setChainIds(chains);\n const accounts = getAccountsFromNamespaces(session.namespaces, [this.namespace]);\n this.setAccounts(accounts);\n this.events.emit(\"connect\", { chainId: this.chainId, accounts: this.accounts });\n } catch (error) {\n throw new Error((error as Error).message);\n } finally {\n if (this.modal) this.modal.closeModal();\n }\n }\n\n public async disconnect(): Promise<void> {\n await this.signer.disconnect();\n }\n\n public on(event: any, listener: any): void {\n this.events.on(event, listener);\n }\n\n public once(event: string, listener: any): void {\n this.events.once(event, listener);\n }\n\n public removeListener(event: string, listener: any): void {\n this.events.removeListener(event, listener);\n }\n\n public off(event: string, listener: any): void {\n this.events.off(event, listener);\n }\n\n get isWalletConnect() {\n return true;\n }\n\n get session() {\n return this.signer.session;\n }\n // ---------- Private ----------------------------------------------- //\n\n private registerEventListeners() {\n this.signer.on(\"session_event\", (payload: any) => {\n const { params } = payload;\n if (!this.rpc.chains.includes(params.chainId)) return;\n const { event } = params;\n if (event.name === \"accountsChanged\") {\n this.accounts = event.data;\n this.events.emit(\"accountsChanged\", this.accounts);\n } else if (event.name === \"chainChanged\") {\n this.setChainId(event.data);\n } else {\n this.events.emit(event.name, event.data);\n }\n this.events.emit(\"session_event\", payload);\n });\n\n this.signer.on(\"disconnect\", () => {\n this.events.emit(\"disconnect\");\n });\n\n this.signer.on(\"display_uri\", (uri: string) => {\n if (this.rpc.showQrModal) {\n this.modal?.openModal({ uri });\n }\n this.events.emit(\"display_uri\", uri);\n });\n }\n\n private setHttpProvider(chainId: number): void {\n const formattedChain = this.formatChainId(chainId);\n this.signer.setDefaultChain(formattedChain, this.getRpcUrl(chainId));\n }\n\n private isCompatibleChainId(chainId: string): boolean {\n return typeof chainId === \"string\" ? chainId.startsWith(`${this.namespace}:`) : false;\n }\n\n private formatChainId(chainId: number): string {\n return `${this.namespace}:${chainId}`;\n }\n\n private parseChainId(chainId: string): number {\n return Number(chainId.split(\":\")[1]);\n }\n\n private setChainIds(chains: string[]) {\n const compatible = chains.filter((x) => this.isCompatibleChainId(x));\n const chainIds = compatible.map((c) => this.parseChainId(c)).filter((c) => c !== this.chainId);\n if (chainIds.length) {\n this.chainId = chainIds[0];\n this.events.emit(\"chainChanged\", this.chainId);\n }\n }\n\n private setChainId(chain: string) {\n if (this.isCompatibleChainId(chain)) {\n const chainId = this.parseChainId(chain);\n this.chainId = chainId;\n this.setHttpProvider(chainId);\n this.events.emit(\"chainChanged\", this.chainId);\n }\n }\n\n private 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 private 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 private getRpcConfig(opts: EthereumProviderOptions): EthereumRpcConfig {\n return {\n chains: opts.chains.map((chain) => this.formatChainId(chain)) || [`${this.namespace}:1`],\n methods: opts?.methods || signerMethods,\n events: opts?.events || signerEvents,\n rpcMap: opts?.rpcMap || this.buildRpcMap(opts.chains, opts.projectId),\n showQrModal: opts?.showQrModal || true,\n projectId: opts.projectId,\n metadata: opts.metadata,\n };\n }\n\n private 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 private async initialize(opts: EthereumProviderOptions) {\n this.rpc = this.getRpcConfig(opts);\n this.chainId = getEthereumChainId(this.rpc.chains);\n this.signer = await UniversalProvider.init({ projectId: this.rpc.projectId });\n this.registerEventListeners();\n if (this.rpc.showQrModal)\n this.modal = new Web3Modal({\n projectId: this.rpc.projectId,\n standaloneChains: this.rpc.chains,\n });\n }\n\n private loadConnectOpts(opts?: ConnectOps) {\n if (!opts) return;\n const { chains, rpcMap } = opts;\n if (!isValidArray(chains) || !chains) return;\n this.rpc.chains = this.rpc.chains.concat(chains.map((chain) => this.formatChainId(chain)));\n // filter duplicate chains\n this.rpc.chains = [...new Set(this.rpc.chains)];\n chains.forEach((chain) => {\n this.rpc.rpcMap[chain] = rpcMap?.[chain] || this.getRpcUrl(chain);\n });\n }\n\n private 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\nexport default EthereumProvider;\n","import { EthereumProvider as Provider } from \"./EthereumProvider\";\nexport const EthereumProvider = Provider;\nexport default Provider;\n"],"names":["chains","EthereumProvider","EventEmitter","opts","provider","args","callback","session","getChainsFromNamespaces","accounts","getAccountsFromNamespaces","error","event","listener","payload","params","uri","_a","chainId","formattedChain","chainIds","x","c","chain","account","namespace","reference","address","projectId","map","UniversalProvider","Web3Modal","rpcMap","isValidArray","Provider"],"mappings":"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"}
package/dist/index.es.js CHANGED
@@ -1,2 +1,2 @@
1
- import{EventEmitter as p}from"events";import{JsonRpcProvider as h}from"@walletconnect/jsonrpc-provider";import{HttpConnection as m}from"@walletconnect/jsonrpc-http-connection";import{getChainsFromNamespaces as a,getAccountsFromNamespaces as r}from"@walletconnect/utils";import{SIGNER_EVENTS as i,SignerConnection as g}from"@walletconnect/signer-connection";const v=["eth_requestAccounts","eth_accounts","eth_chainId","eth_sendTransaction","eth_signTransaction","eth_sign","eth_signTypedData","personal_sign"],I=["chainChanged","accountsChanged"];function o(s){return{chains:s!=null&&s.chainId?[`eip155:${s.chainId}`]:[],methods:s?.methods||[],events:s?.events||[],rpcMap:s?.rpcMap||void 0}}function d(s,t){let n;return t.rpcMap&&(n=t.rpcMap[c([s])]),n}function c(s){return Number(s[0].split(":")[1])}class l{constructor(t){this.events=new p,this.namespace="eip155",this.accounts=[],this.rpc=o(t),this.signer=this.setSignerProvider(t?.client),this.chainId=c(this.rpc.chains),this.http=this.setHttpProvider(this.chainId),this.registerEventListeners()}async request(t){switch(t.method){case"eth_requestAccounts":return await this.connect(),this.accounts;case"eth_accounts":return this.accounts;case"eth_chainId":return this.chainId}if(t.method.startsWith("eth_signTypedData")||this.rpc.methods.includes(t.method))return this.signer.request(t,{chainId:this.formatChainId(this.chainId)});if(typeof this.http>"u")throw new Error(`Cannot request JSON-RPC method (${t.method}) without provided rpc url`);return this.http.request(t)}sendAsync(t,n){this.request(t).then(e=>n(null,e)).catch(e=>n(e,void 0))}get connected(){return this.signer.connection.connected}get connecting(){return this.signer.connection.connecting}async enable(){return await this.request({method:"eth_requestAccounts"})}async connect(){await this.signer.connect()}async disconnect(){await this.signer.disconnect()}on(t,n){this.events.on(t,n)}once(t,n){this.events.once(t,n)}removeListener(t,n){this.events.removeListener(t,n)}off(t,n){this.events.off(t,n)}get isWalletConnect(){return!0}registerEventListeners(){this.signer.on("connect",()=>{const t=this.signer.connection.chains;t&&t.length&&this.setChainIds(t);const n=this.signer.connection.accounts;n&&n.length&&this.setAccounts(n)}),this.signer.connection.on(i.created,t=>{const n=a(t.namespaces,[this.namespace]);this.setChainIds(n);const e=r(t.namespaces,[this.namespace]);this.setAccounts(e)}),this.signer.connection.on(i.updated,t=>{const n=a(t.namespaces,[this.namespace]);this.setChainIds(n);const e=r(t.namespaces,[this.namespace]);e!==this.accounts&&this.setAccounts(e)}),this.signer.connection.on(i.event,t=>{if(!this.rpc.chains.includes(t.chainId))return;const{event:n}=t;n.name==="accountsChanged"?(this.accounts=n.data,this.events.emit("accountsChanged",this.accounts)):n.name==="chainChanged"?this.setChainId(n.data):this.events.emit(n.name,n.data)}),this.signer.on("disconnect",()=>{this.events.emit("disconnect")}),this.events.on("chainChanged",t=>this.setHttpProvider(t))}setSignerProvider(t){const n=new g({requiredNamespaces:{[this.namespace]:{chains:this.rpc.chains,methods:this.rpc.methods,events:this.rpc.events}},client:t});return new h(n)}setHttpProvider(t){const n=d(`${this.namespace}:${t}`,this.rpc);return typeof n>"u"?void 0:new h(new m(n))}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 n=t.filter(e=>this.isCompatibleChainId(e)).map(e=>this.parseChainId(e)).filter(e=>e!==this.chainId);n.length&&(this.chainId=n[0],this.events.emit("chainChanged",this.chainId))}setChainId(t){if(this.isCompatibleChainId(t)){const n=this.parseChainId(t);this.chainId=n,this.events.emit("chainChanged",this.chainId)}}parseAccountId(t){const[n,e,u]=t.split(":");return{chainId:`${n}:${e}`,address:u}}setAccounts(t){this.accounts=t.filter(n=>this.parseChainId(this.parseAccountId(n).chainId)===this.chainId).map(n=>this.parseAccountId(n).address),this.events.emit("accountsChanged",this.accounts)}}export{l as default,c as getEthereumChainId,o as getRpcConfig,d as getRpcUrl,I as signerEvents,v as signerMethods};
1
+ import{EventEmitter as c}from"events";import{getChainsFromNamespaces as h,getAccountsFromNamespaces as r,isValidArray as o}from"@walletconnect/utils";import{UniversalProvider as d}from"@walletconnect/universal-provider";import{Web3Modal as p}from"@web3modal/standalone";const l="https://rpc.walletconnect.com/v1/",m=["eth_requestAccounts","eth_accounts","eth_chainId","eth_sendTransaction","eth_signTransaction","eth_sign","eth_signTypedData","personal_sign"],u=["chainChanged","accountsChanged"];function g(a){return Number(a[0].split(":")[1])}class e{constructor(){this.events=new c,this.namespace="eip155",this.accounts=[],this.chainId=1,this.signer={},this.rpc={}}static async init(t){const s=new e;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);try{const s=await this.signer.connect({namespaces:{[this.namespace]:{chains:this.rpc.chains,methods:this.rpc.methods,events:this.rpc.events,rpcMap:this.rpc.rpcMap}},pairingTopic:t?.pairingTopic});if(!s)return;const i=h(s.namespaces,[this.namespace]);this.setChainIds(i);const n=r(s.namespaces,[this.namespace]);this.setAccounts(n),this.events.emit("connect",{chainId:this.chainId,accounts:this.accounts})}catch(s){throw new Error(s.message)}finally{this.modal&&this.modal.closeModal()}}async disconnect(){await this.signer.disconnect()}on(t,s){this.events.on(t,s)}once(t,s){this.events.once(t,s)}removeListener(t,s){this.events.removeListener(t,s)}off(t,s){this.events.off(t,s)}get isWalletConnect(){return!0}get session(){return this.signer.session}registerEventListeners(){this.signer.on("session_event",t=>{const{params:s}=t;if(!this.rpc.chains.includes(s.chainId))return;const{event:i}=s;i.name==="accountsChanged"?(this.accounts=i.data,this.events.emit("accountsChanged",this.accounts)):i.name==="chainChanged"?this.setChainId(i.data):this.events.emit(i.name,i.data),this.events.emit("session_event",t)}),this.signer.on("disconnect",()=>{this.events.emit("disconnect")}),this.signer.on("display_uri",t=>{var s;this.rpc.showQrModal&&((s=this.modal)==null||s.openModal({uri:t})),this.events.emit("display_uri",t)})}setHttpProvider(t){const s=this.formatChainId(t);this.signer.setDefaultChain(s,this.getRpcUrl(t))}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)).filter(i=>i!==this.chainId);s.length&&(this.chainId=s[0],this.events.emit("chainChanged",this.chainId))}setChainId(t){if(this.isCompatibleChainId(t)){const s=this.parseChainId(t);this.chainId=s,this.setHttpProvider(s),this.events.emit("chainChanged",this.chainId)}}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){return{chains:t.chains.map(s=>this.formatChainId(s))||[`${this.namespace}:1`],methods:t?.methods||m,events:t?.events||u,rpcMap:t?.rpcMap||this.buildRpcMap(t.chains,t.projectId),showQrModal:t?.showQrModal||!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){this.rpc=this.getRpcConfig(t),this.chainId=g(this.rpc.chains),this.signer=await d.init({projectId:this.rpc.projectId}),this.registerEventListeners(),this.rpc.showQrModal&&(this.modal=new p({projectId:this.rpc.projectId,standaloneChains:this.rpc.chains}))}loadConnectOpts(t){if(!t)return;const{chains:s,rpcMap:i}=t;!o(s)||!s||(this.rpc.chains=this.rpc.chains.concat(s.map(n=>this.formatChainId(n))),this.rpc.chains=[...new Set(this.rpc.chains)],s.forEach(n=>{this.rpc.rpcMap[n]=i?.[n]||this.getRpcUrl(n)}))}getRpcUrl(t,s){var i;return((i=this.rpc.rpcMap)==null?void 0:i[t])||`${l}?chainId=eip155:${t}&projectId=${s||this.rpc.projectId}`}}const I=e;export{I as EthereumProvider,e as default};
2
2
  //# sourceMappingURL=index.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/index.ts"],"sourcesContent":["import { EventEmitter } from \"events\";\nimport { JsonRpcProvider } from \"@walletconnect/jsonrpc-provider\";\nimport { HttpConnection } from \"@walletconnect/jsonrpc-http-connection\";\nimport { SessionTypes } from \"@walletconnect/types\";\nimport { getChainsFromNamespaces, getAccountsFromNamespaces } from \"@walletconnect/utils\";\nimport {\n SignerConnection,\n SIGNER_EVENTS,\n SignerConnectionClientOpts,\n} from \"@walletconnect/signer-connection\";\nimport { IEthereumProvider, ProviderAccounts, RequestArguments } from \"eip1193-provider\";\n\nexport const signerMethods = [\n \"eth_requestAccounts\",\n \"eth_accounts\",\n \"eth_chainId\",\n \"eth_sendTransaction\",\n \"eth_signTransaction\",\n \"eth_sign\",\n \"eth_signTypedData\",\n \"personal_sign\",\n];\n\nexport const signerEvents = [\"chainChanged\", \"accountsChanged\"];\n\nexport interface EthereumRpcMap {\n [chainId: string]: string;\n}\n\nexport interface EthereumRpcConfig {\n chains: string[];\n methods: string[];\n events: string[];\n rpcMap?: EthereumRpcMap;\n}\n\nexport function getRpcConfig(opts: EthereumProviderOptions): EthereumRpcConfig {\n return {\n chains: opts?.chainId ? [`eip155:${opts.chainId}`] : [],\n methods: opts?.methods || [],\n events: opts?.events || [],\n rpcMap: opts?.rpcMap || undefined,\n };\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 interface EthereumProviderOptions {\n chainId: number;\n methods?: string[];\n events?: string[];\n rpcMap?: EthereumRpcMap;\n client?: SignerConnectionClientOpts;\n}\n\nclass EthereumProvider implements IEthereumProvider {\n public events: any = new EventEmitter();\n public namespace = \"eip155\";\n public accounts: string[] = [];\n public signer: JsonRpcProvider;\n public http: JsonRpcProvider | undefined;\n public chainId: number;\n\n private rpc: EthereumRpcConfig;\n\n constructor(opts: EthereumProviderOptions) {\n this.rpc = getRpcConfig(opts);\n this.signer = this.setSignerProvider(opts?.client);\n this.chainId = getEthereumChainId(this.rpc.chains);\n this.http = this.setHttpProvider(this.chainId);\n this.registerEventListeners();\n }\n\n public async request<T = unknown>(args: RequestArguments): Promise<T> {\n switch (args.method) {\n case \"eth_requestAccounts\":\n await this.connect();\n return this.accounts as any;\n case \"eth_accounts\":\n return this.accounts as any;\n case \"eth_chainId\":\n return this.chainId as any;\n default:\n break;\n }\n if (args.method.startsWith(\"eth_signTypedData\") || this.rpc.methods.includes(args.method)) {\n return this.signer.request(args, { chainId: this.formatChainId(this.chainId) });\n }\n if (typeof this.http === \"undefined\") {\n throw new Error(`Cannot request JSON-RPC method (${args.method}) without provided rpc url`);\n }\n return this.http.request(args);\n }\n\n public sendAsync(\n args: RequestArguments,\n callback: (error: Error | null, response: any) => void,\n ): void {\n this.request(args)\n .then((response) => callback(null, response))\n .catch((error) => callback(error, undefined));\n }\n\n get connected(): boolean {\n return (this.signer.connection as SignerConnection).connected;\n }\n\n get connecting(): boolean {\n return (this.signer.connection as SignerConnection).connecting;\n }\n\n public async enable(): Promise<ProviderAccounts> {\n const accounts = await this.request({ method: \"eth_requestAccounts\" });\n return accounts as ProviderAccounts;\n }\n\n public async connect(): Promise<void> {\n await this.signer.connect();\n }\n\n public async disconnect(): Promise<void> {\n await this.signer.disconnect();\n }\n\n public on(event: any, listener: any): void {\n this.events.on(event, listener);\n }\n\n public once(event: string, listener: any): void {\n this.events.once(event, listener);\n }\n\n public removeListener(event: string, listener: any): void {\n this.events.removeListener(event, listener);\n }\n\n public off(event: string, listener: any): void {\n this.events.off(event, listener);\n }\n\n get isWalletConnect() {\n return true;\n }\n\n // ---------- Private ----------------------------------------------- //\n\n private registerEventListeners() {\n this.signer.on(\"connect\", () => {\n const chains = (this.signer.connection as SignerConnection).chains;\n if (chains && chains.length) this.setChainIds(chains);\n const accounts = (this.signer.connection as SignerConnection).accounts;\n if (accounts && accounts.length) this.setAccounts(accounts);\n });\n this.signer.connection.on(SIGNER_EVENTS.created, (session: SessionTypes.Struct) => {\n const chains = getChainsFromNamespaces(session.namespaces, [this.namespace]);\n this.setChainIds(chains);\n const accounts = getAccountsFromNamespaces(session.namespaces, [this.namespace]);\n this.setAccounts(accounts);\n });\n this.signer.connection.on(SIGNER_EVENTS.updated, (session: SessionTypes.Struct) => {\n const chains = getChainsFromNamespaces(session.namespaces, [this.namespace]);\n this.setChainIds(chains);\n const accounts = getAccountsFromNamespaces(session.namespaces, [this.namespace]);\n if (accounts !== this.accounts) {\n this.setAccounts(accounts);\n }\n });\n this.signer.connection.on(SIGNER_EVENTS.event, (params: any) => {\n if (!this.rpc.chains.includes(params.chainId)) return;\n const { event } = params;\n if (event.name === \"accountsChanged\") {\n this.accounts = event.data;\n this.events.emit(\"accountsChanged\", this.accounts);\n } else if (event.name === \"chainChanged\") {\n this.setChainId(event.data);\n } else {\n this.events.emit(event.name, event.data);\n }\n });\n this.signer.on(\"disconnect\", () => {\n this.events.emit(\"disconnect\");\n });\n this.events.on(\"chainChanged\", (chainId: number) => this.setHttpProvider(chainId));\n }\n\n private setSignerProvider(client?: SignerConnectionClientOpts) {\n const connection = new SignerConnection({\n requiredNamespaces: {\n [this.namespace]: {\n chains: this.rpc.chains,\n methods: this.rpc.methods,\n events: this.rpc.events,\n },\n },\n client,\n });\n return new JsonRpcProvider(connection);\n }\n\n private setHttpProvider(chainId: number): JsonRpcProvider | undefined {\n const rpcUrl = getRpcUrl(`${this.namespace}:${chainId}`, this.rpc);\n if (typeof rpcUrl === \"undefined\") return undefined;\n const http = new JsonRpcProvider(new HttpConnection(rpcUrl));\n return http;\n }\n\n private isCompatibleChainId(chainId: string): boolean {\n return typeof chainId === \"string\" ? chainId.startsWith(`${this.namespace}:`) : false;\n }\n\n private formatChainId(chainId: number): string {\n return `${this.namespace}:${chainId}`;\n }\n\n private parseChainId(chainId: string): number {\n return Number(chainId.split(\":\")[1]);\n }\n\n private setChainIds(chains: string[]) {\n const compatible = chains.filter((x) => this.isCompatibleChainId(x));\n const chainIds = compatible.map((c) => this.parseChainId(c)).filter((c) => c !== this.chainId);\n if (chainIds.length) {\n this.chainId = chainIds[0];\n this.events.emit(\"chainChanged\", this.chainId);\n }\n }\n\n private setChainId(chain: string) {\n if (this.isCompatibleChainId(chain)) {\n const chainId = this.parseChainId(chain);\n this.chainId = chainId;\n this.events.emit(\"chainChanged\", this.chainId);\n }\n }\n\n private 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 private 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\nexport default EthereumProvider;\n"],"names":["opts","chainId","rpc","rpcUrl","chains","EthereumProvider","EventEmitter","args","callback","response","error","event","listener","accounts","SIGNER_EVENTS","session","getChainsFromNamespaces","getAccountsFromNamespaces","params","client","connection","SignerConnection","JsonRpcProvider","HttpConnection","chainIds","x","c","chain","account","namespace","reference","address"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/EthereumProvider.ts","../src/index.ts"],"sourcesContent":["import { EventEmitter } from \"events\";\nimport {\n getChainsFromNamespaces,\n getAccountsFromNamespaces,\n isValidArray,\n} from \"@walletconnect/utils\";\nimport {\n IEthereumProvider as IProvider,\n ProviderAccounts,\n RequestArguments,\n} from \"eip1193-provider\";\nimport { Metadata, UniversalProvider } from \"@walletconnect/universal-provider\";\nimport { Web3Modal } from \"@web3modal/standalone\";\n\nexport const RPC_URL = \"https://rpc.walletconnect.com/v1/\";\n\nexport const signerMethods = [\n \"eth_requestAccounts\",\n \"eth_accounts\",\n \"eth_chainId\",\n \"eth_sendTransaction\",\n \"eth_signTransaction\",\n \"eth_sign\",\n \"eth_signTypedData\",\n \"personal_sign\",\n];\n\nexport const signerEvents = [\"chainChanged\", \"accountsChanged\"];\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 methods: string[];\n events: string[];\n rpcMap: EthereumRpcMap;\n projectId: string;\n metadata?: Metadata;\n showQrModal: boolean;\n}\n\nexport interface ConnectOps {\n chains?: 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}\nexport interface EthereumProviderOptions {\n projectId: string;\n chains: number[];\n methods?: string[];\n events?: string[];\n rpcMap?: EthereumRpcMap;\n metadata?: Metadata;\n showQrModal?: boolean;\n}\n\nexport class EthereumProvider implements IEthereumProvider {\n public events: any = new EventEmitter();\n public namespace = \"eip155\";\n public accounts: string[] = [];\n public signer: InstanceType<typeof UniversalProvider>;\n public chainId = 1;\n\n private rpc: EthereumRpcConfig;\n private modal?: Web3Modal;\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\n try {\n const session = await this.signer.connect({\n namespaces: {\n [this.namespace]: {\n chains: this.rpc.chains,\n methods: this.rpc.methods,\n events: this.rpc.events,\n rpcMap: this.rpc.rpcMap,\n },\n },\n pairingTopic: opts?.pairingTopic,\n });\n if (!session) return;\n const chains = getChainsFromNamespaces(session.namespaces, [this.namespace]);\n this.setChainIds(chains);\n const accounts = getAccountsFromNamespaces(session.namespaces, [this.namespace]);\n this.setAccounts(accounts);\n this.events.emit(\"connect\", { chainId: this.chainId, accounts: this.accounts });\n } catch (error) {\n throw new Error((error as Error).message);\n } finally {\n if (this.modal) this.modal.closeModal();\n }\n }\n\n public async disconnect(): Promise<void> {\n await this.signer.disconnect();\n }\n\n public on(event: any, listener: any): void {\n this.events.on(event, listener);\n }\n\n public once(event: string, listener: any): void {\n this.events.once(event, listener);\n }\n\n public removeListener(event: string, listener: any): void {\n this.events.removeListener(event, listener);\n }\n\n public off(event: string, listener: any): void {\n this.events.off(event, listener);\n }\n\n get isWalletConnect() {\n return true;\n }\n\n get session() {\n return this.signer.session;\n }\n // ---------- Private ----------------------------------------------- //\n\n private registerEventListeners() {\n this.signer.on(\"session_event\", (payload: any) => {\n const { params } = payload;\n if (!this.rpc.chains.includes(params.chainId)) return;\n const { event } = params;\n if (event.name === \"accountsChanged\") {\n this.accounts = event.data;\n this.events.emit(\"accountsChanged\", this.accounts);\n } else if (event.name === \"chainChanged\") {\n this.setChainId(event.data);\n } else {\n this.events.emit(event.name, event.data);\n }\n this.events.emit(\"session_event\", payload);\n });\n\n this.signer.on(\"disconnect\", () => {\n this.events.emit(\"disconnect\");\n });\n\n this.signer.on(\"display_uri\", (uri: string) => {\n if (this.rpc.showQrModal) {\n this.modal?.openModal({ uri });\n }\n this.events.emit(\"display_uri\", uri);\n });\n }\n\n private setHttpProvider(chainId: number): void {\n const formattedChain = this.formatChainId(chainId);\n this.signer.setDefaultChain(formattedChain, this.getRpcUrl(chainId));\n }\n\n private isCompatibleChainId(chainId: string): boolean {\n return typeof chainId === \"string\" ? chainId.startsWith(`${this.namespace}:`) : false;\n }\n\n private formatChainId(chainId: number): string {\n return `${this.namespace}:${chainId}`;\n }\n\n private parseChainId(chainId: string): number {\n return Number(chainId.split(\":\")[1]);\n }\n\n private setChainIds(chains: string[]) {\n const compatible = chains.filter((x) => this.isCompatibleChainId(x));\n const chainIds = compatible.map((c) => this.parseChainId(c)).filter((c) => c !== this.chainId);\n if (chainIds.length) {\n this.chainId = chainIds[0];\n this.events.emit(\"chainChanged\", this.chainId);\n }\n }\n\n private setChainId(chain: string) {\n if (this.isCompatibleChainId(chain)) {\n const chainId = this.parseChainId(chain);\n this.chainId = chainId;\n this.setHttpProvider(chainId);\n this.events.emit(\"chainChanged\", this.chainId);\n }\n }\n\n private 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 private 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 private getRpcConfig(opts: EthereumProviderOptions): EthereumRpcConfig {\n return {\n chains: opts.chains.map((chain) => this.formatChainId(chain)) || [`${this.namespace}:1`],\n methods: opts?.methods || signerMethods,\n events: opts?.events || signerEvents,\n rpcMap: opts?.rpcMap || this.buildRpcMap(opts.chains, opts.projectId),\n showQrModal: opts?.showQrModal || true,\n projectId: opts.projectId,\n metadata: opts.metadata,\n };\n }\n\n private 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 private async initialize(opts: EthereumProviderOptions) {\n this.rpc = this.getRpcConfig(opts);\n this.chainId = getEthereumChainId(this.rpc.chains);\n this.signer = await UniversalProvider.init({ projectId: this.rpc.projectId });\n this.registerEventListeners();\n if (this.rpc.showQrModal)\n this.modal = new Web3Modal({\n projectId: this.rpc.projectId,\n standaloneChains: this.rpc.chains,\n });\n }\n\n private loadConnectOpts(opts?: ConnectOps) {\n if (!opts) return;\n const { chains, rpcMap } = opts;\n if (!isValidArray(chains) || !chains) return;\n this.rpc.chains = this.rpc.chains.concat(chains.map((chain) => this.formatChainId(chain)));\n // filter duplicate chains\n this.rpc.chains = [...new Set(this.rpc.chains)];\n chains.forEach((chain) => {\n this.rpc.rpcMap[chain] = rpcMap?.[chain] || this.getRpcUrl(chain);\n });\n }\n\n private 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\nexport default EthereumProvider;\n","import { EthereumProvider as Provider } from \"./EthereumProvider\";\nexport const EthereumProvider = Provider;\nexport default Provider;\n"],"names":["chains","EthereumProvider","EventEmitter","opts","provider","args","callback","session","getChainsFromNamespaces","accounts","getAccountsFromNamespaces","error","event","listener","payload","params","uri","_a","chainId","formattedChain","chainIds","x","c","chain","account","namespace","reference","address","projectId","map","UniversalProvider","Web3Modal","rpcMap","isValidArray","Provider"],"mappings":"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"}