@walletconnect/ethereum-provider 2.2.1 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs.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 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 v{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=v,exports.getEthereumChainId=h,exports.getRpcConfig=r,exports.getRpcUrl=o,exports.signerEvents=m,exports.signerMethods=g;
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/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 +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/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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"}