@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 +74 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +1 -1
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +70 -6
- package/dist/index.umd.js.map +1 -1
- package/dist/types/EthereumProvider.d.ts +83 -0
- package/dist/types/EthereumProvider.d.ts.map +1 -0
- package/dist/types/index.d.ts +3 -57
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +9 -6
- package/dist/tsconfig.tsbuildinfo +0 -1
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
|
|
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
|
package/dist/index.cjs.js.map
CHANGED
|
@@ -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":";;;;;;;;;;AAYa,MAAA,aAAA,CAAgB,CAC3B,qBACA,CAAA,cAAA,CACA,cACA,qBACA,CAAA,qBAAA,CACA,WACA,mBACA,CAAA,eACF,EAEa,YAAe,CAAA,CAAC,eAAgB,iBAAiB,WAa9C,YAAaA,CAAAA,CAAAA,CAAkD,CAC7E,OAAO,CACL,MAAA,CAAQA,GAAA,IAAAA,EAAAA,CAAAA,CAAM,QAAU,CAAC,CAAA,OAAA,EAAUA,EAAK,OAAS,CAAA,CAAA,CAAA,CAAI,EACrD,CAAA,OAAA,CAAA,CAASA,GAAA,IAAAA,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAM,UAAW,EAAC,CAC3B,QAAQA,CAAA,EAAA,IAAA,CAAA,KAAA,CAAA,CAAAA,EAAM,MAAU,GAAA,GACxB,MAAQA,CAAAA,CAAAA,CAAAA,EAAA,YAAAA,CAAM,CAAA,MAAA,GAAU,MAC1B,CACF,UAEgB,SAAUC,CAAAA,CAAAA,CAAiBC,EAA4C,CACrF,IAAIC,EACJ,OAAID,CAAAA,CAAI,SACNC,CAASD,CAAAA,CAAAA,CAAI,MAAO,CAAA,kBAAA,CAAmB,CAACD,CAAO,CAAC,CAE3CE,CAAAA,CAAAA,CAAAA,CACT,CAEgB,SAAA,kBAAA,CAAmBC,EAA0B,CAC3D,OAAO,OAAOA,CAAO,CAAA,CAAA,CAAA,CAAG,MAAM,GAAG,CAAA,CAAE,EAAE,CACvC,CAUA,MAAMC,CAA8C,CAUlD,YAAYL,CAA+B,CAAA,CAT3C,KAAO,MAAc,CAAA,IAAIM,oBACzB,IAAO,CAAA,SAAA,CAAY,SACnB,IAAO,CAAA,QAAA,CAAqB,EAQ1B,CAAA,IAAA,CAAK,IAAM,YAAaN,CAAAA,CAAI,EAC5B,IAAK,CAAA,MAAA,CAAS,KAAK,iBAAkBA,CAAAA,CAAAA,EAAA,IAAAA,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAM,MAAM,CAAA,CACjD,KAAK,OAAU,CAAA,kBAAA,CAAmB,KAAK,GAAI,CAAA,MAAM,EACjD,IAAK,CAAA,IAAA,CAAO,KAAK,eAAgB,CAAA,IAAA,CAAK,OAAO,CAC7C,CAAA,IAAA,CAAK,yBACP,CAEA,MAAa,OAAqBO,CAAAA,CAAAA,CAAoC,CACpE,OAAQA,CAAAA,CAAK,QACX,IAAK,sBACH,OAAM,MAAA,IAAA,CAAK,SACJ,CAAA,IAAA,CAAK,SACd,IAAK,cAAA,CACH,OAAO,IAAK,CAAA,QAAA,CACd,IAAK,aACH,CAAA,OAAO,KAAK,OACd,CAEF,CACA,GAAIA,CAAAA,CAAK,OAAO,UAAW,CAAA,mBAAmB,GAAK,IAAK,CAAA,GAAA,CAAI,QAAQ,QAASA,CAAAA,CAAAA,CAAK,MAAM,CACtF,CAAA,OAAO,KAAK,MAAO,CAAA,OAAA,CAAQA,EAAM,CAAE,OAAA,CAAS,KAAK,aAAc,CAAA,IAAA,CAAK,OAAO,CAAE,CAAC,EAEhF,GAAI,OAAO,KAAK,IAAS,EAAA,WAAA,CACvB,MAAM,IAAI,KAAA,CAAM,mCAAmCA,CAAK,CAAA,MAAA,CAAA,0BAAA,CAAkC,EAE5F,OAAO,IAAA,CAAK,KAAK,OAAQA,CAAAA,CAAI,CAC/B,CAEO,SAAA,CACLA,CACAC,CAAAA,CAAAA,CACM,CACN,IAAA,CAAK,QAAQD,CAAI,CAAA,CACd,KAAME,CAAaD,EAAAA,CAAAA,CAAS,KAAMC,CAAQ,CAAC,EAC3C,KAAOC,CAAAA,CAAAA,EAAUF,EAASE,CAAO,CAAA,KAAA,CAAS,CAAC,EAChD,CAEA,IAAI,SAAqB,EAAA,CACvB,OAAQ,IAAK,CAAA,MAAA,CAAO,WAAgC,SACtD,CAEA,IAAI,UAAsB,EAAA,CACxB,OAAQ,IAAK,CAAA,MAAA,CAAO,WAAgC,UACtD,CAEA,MAAa,MAAoC,EAAA,CAE/C,OADiB,MAAM,IAAA,CAAK,QAAQ,CAAE,MAAA,CAAQ,qBAAsB,CAAC,CAEvE,CAEA,MAAa,OAAyB,EAAA,CACpC,MAAM,IAAK,CAAA,MAAA,CAAO,UACpB,CAEA,MAAa,UAA4B,EAAA,CACvC,MAAM,IAAK,CAAA,MAAA,CAAO,aACpB,CAEO,GAAGC,CAAYC,CAAAA,CAAAA,CAAqB,CACzC,IAAK,CAAA,MAAA,CAAO,GAAGD,CAAOC,CAAAA,CAAQ,EAChC,CAEO,IAAA,CAAKD,EAAeC,CAAqB,CAAA,CAC9C,KAAK,MAAO,CAAA,IAAA,CAAKD,EAAOC,CAAQ,EAClC,CAEO,cAAeD,CAAAA,CAAAA,CAAeC,EAAqB,CACxD,IAAA,CAAK,MAAO,CAAA,cAAA,CAAeD,CAAOC,CAAAA,CAAQ,EAC5C,CAEO,GAAA,CAAID,EAAeC,CAAqB,CAAA,CAC7C,KAAK,MAAO,CAAA,GAAA,CAAID,EAAOC,CAAQ,EACjC,CAEA,IAAI,eAAA,EAAkB,CACpB,OAAO,CAAA,CACT,CAIQ,sBAAyB,EAAA,CAC/B,KAAK,MAAO,CAAA,EAAA,CAAG,UAAW,IAAM,CAC9B,MAAMR,CAAU,CAAA,IAAA,CAAK,OAAO,UAAgC,CAAA,MAAA,CACxDA,GAAUA,CAAO,CAAA,MAAA,EAAQ,KAAK,WAAYA,CAAAA,CAAM,EACpD,MAAMS,CAAAA,CAAY,KAAK,MAAO,CAAA,UAAA,CAAgC,QAC1DA,CAAAA,CAAAA,EAAYA,CAAS,CAAA,MAAA,EAAQ,KAAK,WAAYA,CAAAA,CAAQ,EAC5D,CAAC,CAAA,CACD,KAAK,MAAO,CAAA,UAAA,CAAW,GAAGC,8BAAc,CAAA,OAAA,CAAUC,GAAiC,CACjF,MAAMX,EAASY,6BAAwBD,CAAAA,CAAAA,CAAQ,WAAY,CAAC,IAAA,CAAK,SAAS,CAAC,CAAA,CAC3E,KAAK,WAAYX,CAAAA,CAAM,EACvB,MAAMS,CAAAA,CAAWI,gCAA0BF,CAAQ,CAAA,UAAA,CAAY,CAAC,IAAK,CAAA,SAAS,CAAC,CAC/E,CAAA,IAAA,CAAK,YAAYF,CAAQ,EAC3B,CAAC,CACD,CAAA,IAAA,CAAK,MAAO,CAAA,UAAA,CAAW,EAAGC,CAAAA,8BAAAA,CAAc,QAAUC,CAAiC,EAAA,CACjF,MAAMX,CAASY,CAAAA,6BAAAA,CAAwBD,EAAQ,UAAY,CAAA,CAAC,KAAK,SAAS,CAAC,EAC3E,IAAK,CAAA,WAAA,CAAYX,CAAM,CACvB,CAAA,MAAMS,EAAWI,+BAA0BF,CAAAA,CAAAA,CAAQ,WAAY,CAAC,IAAA,CAAK,SAAS,CAAC,CAAA,CAC3EF,IAAa,IAAK,CAAA,QAAA,EACpB,KAAK,WAAYA,CAAAA,CAAQ,EAE7B,CAAC,CAAA,CACD,KAAK,MAAO,CAAA,UAAA,CAAW,GAAGC,8BAAc,CAAA,KAAA,CAAQI,GAAgB,CAC9D,GAAI,CAAC,IAAA,CAAK,GAAI,CAAA,MAAA,CAAO,SAASA,CAAO,CAAA,OAAO,EAAG,OAC/C,KAAM,CAAE,KAAAP,CAAAA,CAAM,EAAIO,CACdP,CAAAA,CAAAA,CAAM,OAAS,iBACjB,EAAA,IAAA,CAAK,SAAWA,CAAM,CAAA,IAAA,CACtB,KAAK,MAAO,CAAA,IAAA,CAAK,kBAAmB,IAAK,CAAA,QAAQ,GACxCA,CAAM,CAAA,IAAA,GAAS,eACxB,IAAK,CAAA,UAAA,CAAWA,EAAM,IAAI,CAAA,CAE1B,KAAK,MAAO,CAAA,IAAA,CAAKA,EAAM,IAAMA,CAAAA,CAAAA,CAAM,IAAI,EAE3C,CAAC,EACD,IAAK,CAAA,MAAA,CAAO,EAAG,CAAA,YAAA,CAAc,IAAM,CACjC,KAAK,MAAO,CAAA,IAAA,CAAK,YAAY,EAC/B,CAAC,EACD,IAAK,CAAA,MAAA,CAAO,GAAG,cAAiBV,CAAAA,CAAAA,EAAoB,KAAK,eAAgBA,CAAAA,CAAO,CAAC,EACnF,CAEQ,kBAAkBkB,CAAqC,CAAA,CAC7D,MAAMC,CAAa,CAAA,IAAIC,kCAAiB,CACtC,kBAAA,CAAoB,CAClB,CAAC,IAAA,CAAK,WAAY,CAChB,MAAA,CAAQ,KAAK,GAAI,CAAA,MAAA,CACjB,QAAS,IAAK,CAAA,GAAA,CAAI,QAClB,MAAQ,CAAA,IAAA,CAAK,IAAI,MACnB,CACF,CACA,CAAA,MAAA,CAAAF,CACF,CAAC,EACD,OAAO,IAAIG,gCAAgBF,CAAU,CACvC,CAEQ,eAAgBnB,CAAAA,CAAAA,CAA8C,CACpE,MAAME,CAAAA,CAAS,UAAU,CAAG,EAAA,IAAA,CAAK,aAAaF,CAAW,CAAA,CAAA,CAAA,IAAA,CAAK,GAAG,CACjE,CAAA,OAAI,OAAOE,CAAW,EAAA,WAAA,CAAa,OACtB,IAAImB,+BAAAA,CAAgB,IAAIC,oCAAepB,CAAAA,CAAM,CAAC,CAE7D,CAEQ,oBAAoBF,CAA0B,CAAA,CACpD,OAAO,OAAOA,CAAAA,EAAY,SAAWA,CAAQ,CAAA,UAAA,CAAW,GAAG,IAAK,CAAA,SAAA,CAAA,CAAA,CAAY,CAAI,CAAA,CAAA,CAClF,CAEQ,aAAA,CAAcA,EAAyB,CAC7C,OAAO,GAAG,IAAK,CAAA,SAAA,CAAA,CAAA,EAAaA,GAC9B,CAEQ,YAAA,CAAaA,EAAyB,CAC5C,OAAO,OAAOA,CAAQ,CAAA,KAAA,CAAM,GAAG,CAAE,CAAA,CAAA,CAAE,CACrC,CAEQ,WAAA,CAAYG,EAAkB,CAEpC,MAAMoB,EADapB,CAAO,CAAA,MAAA,CAAQqB,GAAM,IAAK,CAAA,mBAAA,CAAoBA,CAAC,CAAC,CAAA,CACvC,IAAKC,CAAM,EAAA,IAAA,CAAK,aAAaA,CAAC,CAAC,EAAE,MAAQA,CAAAA,CAAAA,EAAMA,IAAM,IAAK,CAAA,OAAO,CACzFF,CAAAA,CAAAA,CAAS,MACX,GAAA,IAAA,CAAK,QAAUA,CAAS,CAAA,CAAA,CAAA,CACxB,KAAK,MAAO,CAAA,IAAA,CAAK,eAAgB,IAAK,CAAA,OAAO,GAEjD,CAEQ,UAAA,CAAWG,EAAe,CAChC,GAAI,KAAK,mBAAoBA,CAAAA,CAAK,EAAG,CACnC,MAAM1B,EAAU,IAAK,CAAA,YAAA,CAAa0B,CAAK,CACvC,CAAA,IAAA,CAAK,QAAU1B,CACf,CAAA,IAAA,CAAK,OAAO,IAAK,CAAA,cAAA,CAAgB,KAAK,OAAO,EAC/C,CACF,CAEQ,cAAA,CAAe2B,EAAuD,CAC5E,KAAM,CAACC,CAAWC,CAAAA,CAAAA,CAAWC,CAAO,CAAA,CAAIH,CAAQ,CAAA,KAAA,CAAM,GAAG,CAEzD,CAAA,OAAO,CAAE,OADO,CAAA,CAAA,EAAGC,KAAaC,CACd,CAAA,CAAA,CAAA,OAAA,CAAAC,CAAQ,CAC5B,CAEQ,YAAYlB,CAAoB,CAAA,CACtC,KAAK,QAAWA,CAAAA,CAAAA,CACb,OAAQY,CAAM,EAAA,IAAA,CAAK,YAAa,CAAA,IAAA,CAAK,cAAeA,CAAAA,CAAC,EAAE,OAAO,CAAA,GAAM,KAAK,OAAO,CAAA,CAChF,IAAKA,CAAM,EAAA,IAAA,CAAK,eAAeA,CAAC,CAAA,CAAE,OAAO,CAC5C,CAAA,IAAA,CAAK,OAAO,IAAK,CAAA,iBAAA,CAAmB,KAAK,QAAQ,EACnD,CACF;;;;;;;;;"}
|
|
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":";;;;;;;;;MAca,OAAU,CAAA,mCAAA,CAEV,aAAgB,CAAA,CAC3B,qBACA,CAAA,cAAA,CACA,cACA,qBACA,CAAA,qBAAA,CACA,UACA,CAAA,mBAAA,CACA,eACF,CAAA,CAEa,aAAe,CAAC,cAAA,CAAgB,iBAAiB,CAAA,CAuCvD,SAAS,kBAAmBA,CAAAA,CAAAA,CAA0B,CAC3D,OAAO,MAAA,CAAOA,CAAO,CAAA,CAAC,CAAE,CAAA,KAAA,CAAM,GAAG,CAAE,CAAA,CAAC,CAAC,CACvC,CAWO,MAAMC,kBAA8C,CAUzD,WAAA,EAAc,CATd,IAAA,CAAO,MAAc,CAAA,IAAIC,oBACzB,IAAO,CAAA,SAAA,CAAY,QACnB,CAAA,IAAA,CAAO,QAAqB,CAAA,GAE5B,IAAO,CAAA,OAAA,CAAU,CAOf,CAAA,IAAA,CAAK,MAAS,CAAA,GACd,IAAK,CAAA,GAAA,CAAM,GACb,CAEA,aAAa,IAAKC,CAAAA,CAAAA,CAA0D,CAC1E,MAAMC,CAAW,CAAA,IAAIH,kBACrB,CAAA,OAAA,MAAMG,EAAS,UAAWD,CAAAA,CAAI,CACvBC,CAAAA,CACT,CAEA,MAAa,QAAqBC,CAAoC,CAAA,CACpE,OAAO,MAAM,IAAK,CAAA,MAAA,CAAO,QAAQA,CAAM,CAAA,IAAA,CAAK,aAAc,CAAA,IAAA,CAAK,OAAO,CAAC,CACzE,CAEO,SAAA,CACLA,CACAC,CAAAA,CAAAA,CACM,CACN,IAAA,CAAK,OAAO,SAAUD,CAAAA,CAAAA,CAAMC,CAAU,CAAA,IAAA,CAAK,aAAc,CAAA,IAAA,CAAK,OAAO,CAAC,EACxE,CAEA,IAAI,SAAqB,EAAA,CACvB,OAAK,IAAK,CAAA,MAAA,CAAO,MACV,CAAA,IAAA,CAAK,MAAO,CAAA,MAAA,CAAO,IAAK,CAAA,OAAA,CAAQ,SADP,CAAA,CAAA,CAElC,CAEA,IAAI,UAAsB,EAAA,CACxB,OAAK,IAAK,CAAA,MAAA,CAAO,MACV,CAAA,IAAA,CAAK,MAAO,CAAA,MAAA,CAAO,KAAK,OAAQ,CAAA,UAAA,CADP,CAElC,CAAA,CAEA,MAAa,MAAA,EAAoC,CAC/C,OAAK,IAAA,CAAK,OAAS,EAAA,MAAM,IAAK,CAAA,OAAA,EACb,CAAA,MAAM,IAAK,CAAA,OAAA,CAAQ,CAAE,MAAA,CAAQ,qBAAsB,CAAC,CAEvE,CAEA,MAAa,OAAQH,CAAAA,CAAAA,CAAkC,CACrD,GAAI,CAAC,IAAK,CAAA,MAAA,CAAO,MACf,CAAA,MAAM,IAAI,KAAA,CAAM,6CAA6C,CAG/D,CAAA,IAAA,CAAK,eAAgBA,CAAAA,CAAI,CAEzB,CAAA,GAAI,CACF,MAAMI,CAAU,CAAA,MAAM,IAAK,CAAA,MAAA,CAAO,OAAQ,CAAA,CACxC,WAAY,CACV,CAAC,IAAK,CAAA,SAAS,EAAG,CAChB,OAAQ,IAAK,CAAA,GAAA,CAAI,MACjB,CAAA,OAAA,CAAS,IAAK,CAAA,GAAA,CAAI,QAClB,MAAQ,CAAA,IAAA,CAAK,GAAI,CAAA,MAAA,CACjB,MAAQ,CAAA,IAAA,CAAK,IAAI,MACnB,CACF,CACA,CAAA,YAAA,CAAcJ,CAAA,EAAA,IAAA,CAAA,KAAA,CAAA,CAAAA,EAAM,YACtB,CAAC,CACD,CAAA,GAAI,CAACI,CAAAA,CAAS,OACd,MAAMP,CAAAA,CAASQ,6BAAwBD,CAAAA,CAAAA,CAAQ,UAAY,CAAA,CAAC,KAAK,SAAS,CAAC,CAC3E,CAAA,IAAA,CAAK,WAAYP,CAAAA,CAAM,CACvB,CAAA,MAAMS,CAAWC,CAAAA,+BAAAA,CAA0BH,CAAQ,CAAA,UAAA,CAAY,CAAC,IAAA,CAAK,SAAS,CAAC,CAAA,CAC/E,IAAK,CAAA,WAAA,CAAYE,CAAQ,CAAA,CACzB,KAAK,MAAO,CAAA,IAAA,CAAK,SAAW,CAAA,CAAE,OAAS,CAAA,IAAA,CAAK,QAAS,QAAU,CAAA,IAAA,CAAK,QAAS,CAAC,EAChF,CAAA,MAASE,EAAP,CACA,MAAM,IAAI,KAAA,CAAOA,CAAgB,CAAA,OAAO,CAC1C,CAAE,OAAA,CACI,IAAK,CAAA,KAAA,EAAO,IAAK,CAAA,KAAA,CAAM,aAC7B,CACF,CAEA,MAAa,UAA4B,EAAA,CACvC,MAAM,IAAK,CAAA,MAAA,CAAO,UAAW,GAC/B,CAEO,EAAA,CAAGC,CAAYC,CAAAA,CAAAA,CAAqB,CACzC,IAAA,CAAK,MAAO,CAAA,EAAA,CAAGD,CAAOC,CAAAA,CAAQ,EAChC,CAEO,IAAA,CAAKD,CAAeC,CAAAA,CAAAA,CAAqB,CAC9C,IAAA,CAAK,OAAO,IAAKD,CAAAA,CAAAA,CAAOC,CAAQ,EAClC,CAEO,cAAA,CAAeD,EAAeC,CAAqB,CAAA,CACxD,IAAK,CAAA,MAAA,CAAO,cAAeD,CAAAA,CAAAA,CAAOC,CAAQ,EAC5C,CAEO,GAAID,CAAAA,CAAAA,CAAeC,CAAqB,CAAA,CAC7C,KAAK,MAAO,CAAA,GAAA,CAAID,CAAOC,CAAAA,CAAQ,EACjC,CAEA,IAAI,eAAkB,EAAA,CACpB,OAAO,CAAA,CACT,CAEA,IAAI,SAAU,CACZ,OAAO,IAAK,CAAA,MAAA,CAAO,OACrB,CAGQ,sBAAyB,EAAA,CAC/B,IAAK,CAAA,MAAA,CAAO,EAAG,CAAA,eAAA,CAAkBC,CAAiB,EAAA,CAChD,KAAM,CAAE,MAAA,CAAAC,CAAO,CAAA,CAAID,CACnB,CAAA,GAAI,CAAC,IAAK,CAAA,GAAA,CAAI,MAAO,CAAA,QAAA,CAASC,CAAO,CAAA,OAAO,EAAG,OAC/C,KAAM,CAAE,KAAA,CAAAH,CAAM,CAAA,CAAIG,CACdH,CAAAA,CAAAA,CAAM,IAAS,GAAA,iBAAA,EACjB,IAAK,CAAA,QAAA,CAAWA,CAAM,CAAA,IAAA,CACtB,KAAK,MAAO,CAAA,IAAA,CAAK,iBAAmB,CAAA,IAAA,CAAK,QAAQ,CAAA,EACxCA,EAAM,IAAS,GAAA,cAAA,CACxB,IAAK,CAAA,UAAA,CAAWA,CAAM,CAAA,IAAI,EAE1B,IAAK,CAAA,MAAA,CAAO,IAAKA,CAAAA,CAAAA,CAAM,IAAMA,CAAAA,CAAAA,CAAM,IAAI,CAAA,CAEzC,IAAK,CAAA,MAAA,CAAO,IAAK,CAAA,eAAA,CAAiBE,CAAO,EAC3C,CAAC,CAED,CAAA,IAAA,CAAK,MAAO,CAAA,EAAA,CAAG,YAAc,CAAA,IAAM,CACjC,IAAK,CAAA,MAAA,CAAO,IAAK,CAAA,YAAY,EAC/B,CAAC,EAED,IAAK,CAAA,MAAA,CAAO,EAAG,CAAA,aAAA,CAAgBE,CAAgB,EAAA,CAjNnD,IAAAC,CAkNU,CAAA,IAAA,CAAK,GAAI,CAAA,WAAA,GAAA,CACXA,CAAA,CAAA,IAAA,CAAK,QAAL,IAAAA,EAAAA,CAAAA,CAAY,SAAU,CAAA,CAAE,GAAAD,CAAAA,CAAI,IAE9B,IAAK,CAAA,MAAA,CAAO,IAAK,CAAA,aAAA,CAAeA,CAAG,EACrC,CAAC,EACH,CAEQ,eAAgBE,CAAAA,CAAAA,CAAuB,CAC7C,MAAMC,CAAiB,CAAA,IAAA,CAAK,aAAcD,CAAAA,CAAO,CACjD,CAAA,IAAA,CAAK,MAAO,CAAA,eAAA,CAAgBC,EAAgB,IAAK,CAAA,SAAA,CAAUD,CAAO,CAAC,EACrE,CAEQ,oBAAoBA,CAA0B,CAAA,CACpD,OAAO,OAAOA,CAAY,EAAA,QAAA,CAAWA,EAAQ,UAAW,CAAA,CAAA,EAAG,IAAK,CAAA,SAAA,CAAA,CAAA,CAAY,CAAI,CAAA,CAAA,CAClF,CAEQ,aAAcA,CAAAA,CAAAA,CAAyB,CAC7C,OAAO,CAAG,EAAA,IAAA,CAAK,aAAaA,CAC9B,CAAA,CAAA,CAEQ,YAAaA,CAAAA,CAAAA,CAAyB,CAC5C,OAAO,OAAOA,CAAQ,CAAA,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CACrC,CAEQ,WAAA,CAAYlB,CAAkB,CAAA,CAEpC,MAAMoB,CAAAA,CADapB,CAAO,CAAA,MAAA,CAAQqB,CAAM,EAAA,IAAA,CAAK,mBAAoBA,CAAAA,CAAC,CAAC,CAAA,CACvC,IAAKC,CAAM,EAAA,IAAA,CAAK,YAAaA,CAAAA,CAAC,CAAC,CAAA,CAAE,OAAQA,CAAMA,EAAAA,CAAAA,GAAM,IAAK,CAAA,OAAO,CACzFF,CAAAA,CAAAA,CAAS,SACX,IAAK,CAAA,OAAA,CAAUA,CAAS,CAAA,CAAC,CACzB,CAAA,IAAA,CAAK,OAAO,IAAK,CAAA,cAAA,CAAgB,IAAK,CAAA,OAAO,CAEjD,EAAA,CAEQ,WAAWG,CAAe,CAAA,CAChC,GAAI,IAAA,CAAK,mBAAoBA,CAAAA,CAAK,EAAG,CACnC,MAAML,CAAU,CAAA,IAAA,CAAK,YAAaK,CAAAA,CAAK,EACvC,IAAK,CAAA,OAAA,CAAUL,CACf,CAAA,IAAA,CAAK,eAAgBA,CAAAA,CAAO,CAC5B,CAAA,IAAA,CAAK,MAAO,CAAA,IAAA,CAAK,cAAgB,CAAA,IAAA,CAAK,OAAO,EAC/C,CACF,CAEQ,cAAA,CAAeM,CAAuD,CAAA,CAC5E,KAAM,CAACC,EAAWC,CAAWC,CAAAA,CAAO,CAAIH,CAAAA,CAAAA,CAAQ,KAAM,CAAA,GAAG,EAEzD,OAAO,CAAE,OADO,CAAA,CAAA,EAAGC,CAAaC,CAAAA,CAAAA,EAAAA,CAAAA,CAAAA,CAAAA,CACd,OAAAC,CAAAA,CAAQ,CAC5B,CAEQ,WAAYlB,CAAAA,CAAAA,CAAoB,CACtC,IAAA,CAAK,SAAWA,CACb,CAAA,MAAA,CAAQY,CAAM,EAAA,IAAA,CAAK,YAAa,CAAA,IAAA,CAAK,eAAeA,CAAC,CAAA,CAAE,OAAO,CAAA,GAAM,IAAK,CAAA,OAAO,EAChF,GAAKA,CAAAA,CAAAA,EAAM,IAAK,CAAA,cAAA,CAAeA,CAAC,CAAA,CAAE,OAAO,CAAA,CAC5C,IAAK,CAAA,MAAA,CAAO,IAAK,CAAA,iBAAA,CAAmB,IAAK,CAAA,QAAQ,EACnD,CAEQ,YAAA,CAAalB,CAAkD,CAAA,CACrE,OAAO,CACL,OAAQA,CAAK,CAAA,MAAA,CAAO,GAAKoB,CAAAA,CAAAA,EAAU,IAAK,CAAA,aAAA,CAAcA,CAAK,CAAC,CAAA,EAAK,CAAC,CAAA,EAAG,IAAK,CAAA,SAAA,CAAA,EAAA,CAAa,EACvF,OAASpB,CAAAA,CAAAA,CAAAA,EAAA,IAAAA,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAM,OAAW,GAAA,aAAA,CAC1B,QAAQA,CAAA,EAAA,IAAA,CAAA,KAAA,CAAA,CAAAA,CAAM,CAAA,MAAA,GAAU,YACxB,CAAA,MAAA,CAAA,CAAQA,GAAA,IAAAA,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAM,MAAU,GAAA,IAAA,CAAK,WAAYA,CAAAA,CAAAA,CAAK,OAAQA,CAAK,CAAA,SAAS,CACpE,CAAA,WAAA,CAAA,CAAaA,CAAA,EAAA,IAAA,CAAA,KAAA,CAAA,CAAAA,CAAM,CAAA,WAAA,GAAe,CAClC,CAAA,CAAA,SAAA,CAAWA,CAAK,CAAA,SAAA,CAChB,QAAUA,CAAAA,CAAAA,CAAK,QACjB,CACF,CAEQ,WAAYH,CAAAA,CAAAA,CAAkB4B,CAAmC,CAAA,CACvE,MAAMC,CAAsB,CAAA,EAC5B,CAAA,OAAA7B,CAAO,CAAA,OAAA,CAASuB,GAAU,CACxBM,CAAAA,CAAIN,CAAK,CAAA,CAAI,IAAK,CAAA,SAAA,CAAUA,CAAOK,CAAAA,CAAS,EAC9C,CAAC,CACMC,CAAAA,CACT,CAEA,MAAc,WAAW1B,CAA+B,CAAA,CACtD,IAAK,CAAA,GAAA,CAAM,IAAK,CAAA,YAAA,CAAaA,CAAI,CACjC,CAAA,IAAA,CAAK,OAAU,CAAA,kBAAA,CAAmB,IAAK,CAAA,GAAA,CAAI,MAAM,CACjD,CAAA,IAAA,CAAK,MAAS,CAAA,MAAM2B,mCAAkB,CAAA,IAAA,CAAK,CAAE,SAAA,CAAW,IAAK,CAAA,GAAA,CAAI,SAAU,CAAC,CAC5E,CAAA,IAAA,CAAK,wBACD,CAAA,IAAA,CAAK,GAAI,CAAA,WAAA,GACX,IAAK,CAAA,KAAA,CAAQ,IAAIC,oBAAU,CAAA,CACzB,SAAW,CAAA,IAAA,CAAK,GAAI,CAAA,SAAA,CACpB,iBAAkB,IAAK,CAAA,GAAA,CAAI,MAC7B,CAAC,CACL,EAAA,CAEQ,gBAAgB5B,CAAmB,CAAA,CACzC,GAAI,CAACA,CAAM,CAAA,OACX,KAAM,CAAE,MAAA,CAAAH,CAAQ,CAAA,MAAA,CAAAgC,CAAO,CAAA,CAAI7B,EACvB,CAAC8B,kBAAAA,CAAajC,CAAM,CAAA,EAAK,CAACA,CAAAA,GAC9B,KAAK,GAAI,CAAA,MAAA,CAAS,IAAK,CAAA,GAAA,CAAI,MAAO,CAAA,MAAA,CAAOA,CAAO,CAAA,GAAA,CAAKuB,CAAU,EAAA,IAAA,CAAK,aAAcA,CAAAA,CAAK,CAAC,CAAC,EAEzF,IAAK,CAAA,GAAA,CAAI,MAAS,CAAA,CAAC,GAAG,IAAI,IAAI,IAAK,CAAA,GAAA,CAAI,MAAM,CAAC,CAC9CvB,CAAAA,CAAAA,CAAO,QAASuB,CAAU,EAAA,CACxB,IAAK,CAAA,GAAA,CAAI,MAAOA,CAAAA,CAAK,CAAIS,CAAAA,CAAAA,CAAAA,EAAA,IAAAA,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAST,CAAU,CAAA,GAAA,IAAA,CAAK,SAAUA,CAAAA,CAAK,EAClE,CAAC,CAAA,EACH,CAEQ,SAAA,CAAUL,CAAiBU,CAAAA,CAAAA,CAA4B,CArTjE,IAAAX,CAAAA,CAuTI,OADoBA,CAAAA,CAAAA,CAAAA,CAAA,IAAK,CAAA,GAAA,CAAI,SAAT,IAAAA,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAkBC,CAGpC,CAAA,GAAA,CAAA,EAAG,OAA0BA,CAAAA,gBAAAA,EAAAA,CAAAA,CAAAA,WAAAA,EAAqBU,CAAa,EAAA,IAAA,CAAK,GAAI,CAAA,SAAA,CAAA,CAE5E,CACF;;AC3Ta,MAAA,gBAAA,CAAmBM;;;;;"}
|
package/dist/index.es.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{EventEmitter as
|
|
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
|
package/dist/index.es.js.map
CHANGED
|
@@ -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":";;;;;MAca,OAAU,CAAA,mCAAA,CAEV,aAAgB,CAAA,CAC3B,qBACA,CAAA,cAAA,CACA,cACA,qBACA,CAAA,qBAAA,CACA,UACA,CAAA,mBAAA,CACA,eACF,CAAA,CAEa,aAAe,CAAC,cAAA,CAAgB,iBAAiB,CAAA,CAuCvD,SAAS,kBAAmBA,CAAAA,CAAAA,CAA0B,CAC3D,OAAO,MAAA,CAAOA,CAAO,CAAA,CAAC,CAAE,CAAA,KAAA,CAAM,GAAG,CAAE,CAAA,CAAC,CAAC,CACvC,CAWO,MAAMC,kBAA8C,CAUzD,WAAA,EAAc,CATd,IAAA,CAAO,MAAc,CAAA,IAAIC,aACzB,IAAO,CAAA,SAAA,CAAY,QACnB,CAAA,IAAA,CAAO,QAAqB,CAAA,GAE5B,IAAO,CAAA,OAAA,CAAU,CAOf,CAAA,IAAA,CAAK,MAAS,CAAA,GACd,IAAK,CAAA,GAAA,CAAM,GACb,CAEA,aAAa,IAAKC,CAAAA,CAAAA,CAA0D,CAC1E,MAAMC,CAAW,CAAA,IAAIH,kBACrB,CAAA,OAAA,MAAMG,EAAS,UAAWD,CAAAA,CAAI,CACvBC,CAAAA,CACT,CAEA,MAAa,QAAqBC,CAAoC,CAAA,CACpE,OAAO,MAAM,IAAK,CAAA,MAAA,CAAO,QAAQA,CAAM,CAAA,IAAA,CAAK,aAAc,CAAA,IAAA,CAAK,OAAO,CAAC,CACzE,CAEO,SAAA,CACLA,CACAC,CAAAA,CAAAA,CACM,CACN,IAAA,CAAK,OAAO,SAAUD,CAAAA,CAAAA,CAAMC,CAAU,CAAA,IAAA,CAAK,aAAc,CAAA,IAAA,CAAK,OAAO,CAAC,EACxE,CAEA,IAAI,SAAqB,EAAA,CACvB,OAAK,IAAK,CAAA,MAAA,CAAO,MACV,CAAA,IAAA,CAAK,MAAO,CAAA,MAAA,CAAO,IAAK,CAAA,OAAA,CAAQ,SADP,CAAA,CAAA,CAElC,CAEA,IAAI,UAAsB,EAAA,CACxB,OAAK,IAAK,CAAA,MAAA,CAAO,MACV,CAAA,IAAA,CAAK,MAAO,CAAA,MAAA,CAAO,KAAK,OAAQ,CAAA,UAAA,CADP,CAElC,CAAA,CAEA,MAAa,MAAA,EAAoC,CAC/C,OAAK,IAAA,CAAK,OAAS,EAAA,MAAM,IAAK,CAAA,OAAA,EACb,CAAA,MAAM,IAAK,CAAA,OAAA,CAAQ,CAAE,MAAA,CAAQ,qBAAsB,CAAC,CAEvE,CAEA,MAAa,OAAQH,CAAAA,CAAAA,CAAkC,CACrD,GAAI,CAAC,IAAK,CAAA,MAAA,CAAO,MACf,CAAA,MAAM,IAAI,KAAA,CAAM,6CAA6C,CAG/D,CAAA,IAAA,CAAK,eAAgBA,CAAAA,CAAI,CAEzB,CAAA,GAAI,CACF,MAAMI,CAAU,CAAA,MAAM,IAAK,CAAA,MAAA,CAAO,OAAQ,CAAA,CACxC,WAAY,CACV,CAAC,IAAK,CAAA,SAAS,EAAG,CAChB,OAAQ,IAAK,CAAA,GAAA,CAAI,MACjB,CAAA,OAAA,CAAS,IAAK,CAAA,GAAA,CAAI,QAClB,MAAQ,CAAA,IAAA,CAAK,GAAI,CAAA,MAAA,CACjB,MAAQ,CAAA,IAAA,CAAK,IAAI,MACnB,CACF,CACA,CAAA,YAAA,CAAcJ,CAAA,EAAA,IAAA,CAAA,KAAA,CAAA,CAAAA,EAAM,YACtB,CAAC,CACD,CAAA,GAAI,CAACI,CAAAA,CAAS,OACd,MAAMP,CAAAA,CAASQ,uBAAwBD,CAAAA,CAAAA,CAAQ,UAAY,CAAA,CAAC,KAAK,SAAS,CAAC,CAC3E,CAAA,IAAA,CAAK,WAAYP,CAAAA,CAAM,CACvB,CAAA,MAAMS,CAAWC,CAAAA,yBAAAA,CAA0BH,CAAQ,CAAA,UAAA,CAAY,CAAC,IAAA,CAAK,SAAS,CAAC,CAAA,CAC/E,IAAK,CAAA,WAAA,CAAYE,CAAQ,CAAA,CACzB,KAAK,MAAO,CAAA,IAAA,CAAK,SAAW,CAAA,CAAE,OAAS,CAAA,IAAA,CAAK,QAAS,QAAU,CAAA,IAAA,CAAK,QAAS,CAAC,EAChF,CAAA,MAASE,EAAP,CACA,MAAM,IAAI,KAAA,CAAOA,CAAgB,CAAA,OAAO,CAC1C,CAAE,OAAA,CACI,IAAK,CAAA,KAAA,EAAO,IAAK,CAAA,KAAA,CAAM,aAC7B,CACF,CAEA,MAAa,UAA4B,EAAA,CACvC,MAAM,IAAK,CAAA,MAAA,CAAO,UAAW,GAC/B,CAEO,EAAA,CAAGC,CAAYC,CAAAA,CAAAA,CAAqB,CACzC,IAAA,CAAK,MAAO,CAAA,EAAA,CAAGD,CAAOC,CAAAA,CAAQ,EAChC,CAEO,IAAA,CAAKD,CAAeC,CAAAA,CAAAA,CAAqB,CAC9C,IAAA,CAAK,OAAO,IAAKD,CAAAA,CAAAA,CAAOC,CAAQ,EAClC,CAEO,cAAA,CAAeD,EAAeC,CAAqB,CAAA,CACxD,IAAK,CAAA,MAAA,CAAO,cAAeD,CAAAA,CAAAA,CAAOC,CAAQ,EAC5C,CAEO,GAAID,CAAAA,CAAAA,CAAeC,CAAqB,CAAA,CAC7C,KAAK,MAAO,CAAA,GAAA,CAAID,CAAOC,CAAAA,CAAQ,EACjC,CAEA,IAAI,eAAkB,EAAA,CACpB,OAAO,CAAA,CACT,CAEA,IAAI,SAAU,CACZ,OAAO,IAAK,CAAA,MAAA,CAAO,OACrB,CAGQ,sBAAyB,EAAA,CAC/B,IAAK,CAAA,MAAA,CAAO,EAAG,CAAA,eAAA,CAAkBC,CAAiB,EAAA,CAChD,KAAM,CAAE,MAAA,CAAAC,CAAO,CAAA,CAAID,CACnB,CAAA,GAAI,CAAC,IAAK,CAAA,GAAA,CAAI,MAAO,CAAA,QAAA,CAASC,CAAO,CAAA,OAAO,EAAG,OAC/C,KAAM,CAAE,KAAA,CAAAH,CAAM,CAAA,CAAIG,CACdH,CAAAA,CAAAA,CAAM,IAAS,GAAA,iBAAA,EACjB,IAAK,CAAA,QAAA,CAAWA,CAAM,CAAA,IAAA,CACtB,KAAK,MAAO,CAAA,IAAA,CAAK,iBAAmB,CAAA,IAAA,CAAK,QAAQ,CAAA,EACxCA,EAAM,IAAS,GAAA,cAAA,CACxB,IAAK,CAAA,UAAA,CAAWA,CAAM,CAAA,IAAI,EAE1B,IAAK,CAAA,MAAA,CAAO,IAAKA,CAAAA,CAAAA,CAAM,IAAMA,CAAAA,CAAAA,CAAM,IAAI,CAAA,CAEzC,IAAK,CAAA,MAAA,CAAO,IAAK,CAAA,eAAA,CAAiBE,CAAO,EAC3C,CAAC,CAED,CAAA,IAAA,CAAK,MAAO,CAAA,EAAA,CAAG,YAAc,CAAA,IAAM,CACjC,IAAK,CAAA,MAAA,CAAO,IAAK,CAAA,YAAY,EAC/B,CAAC,EAED,IAAK,CAAA,MAAA,CAAO,EAAG,CAAA,aAAA,CAAgBE,CAAgB,EAAA,CAjNnD,IAAAC,CAkNU,CAAA,IAAA,CAAK,GAAI,CAAA,WAAA,GAAA,CACXA,CAAA,CAAA,IAAA,CAAK,QAAL,IAAAA,EAAAA,CAAAA,CAAY,SAAU,CAAA,CAAE,GAAAD,CAAAA,CAAI,IAE9B,IAAK,CAAA,MAAA,CAAO,IAAK,CAAA,aAAA,CAAeA,CAAG,EACrC,CAAC,EACH,CAEQ,eAAgBE,CAAAA,CAAAA,CAAuB,CAC7C,MAAMC,CAAiB,CAAA,IAAA,CAAK,aAAcD,CAAAA,CAAO,CACjD,CAAA,IAAA,CAAK,MAAO,CAAA,eAAA,CAAgBC,EAAgB,IAAK,CAAA,SAAA,CAAUD,CAAO,CAAC,EACrE,CAEQ,oBAAoBA,CAA0B,CAAA,CACpD,OAAO,OAAOA,CAAY,EAAA,QAAA,CAAWA,EAAQ,UAAW,CAAA,CAAA,EAAG,IAAK,CAAA,SAAA,CAAA,CAAA,CAAY,CAAI,CAAA,CAAA,CAClF,CAEQ,aAAcA,CAAAA,CAAAA,CAAyB,CAC7C,OAAO,CAAG,EAAA,IAAA,CAAK,aAAaA,CAC9B,CAAA,CAAA,CAEQ,YAAaA,CAAAA,CAAAA,CAAyB,CAC5C,OAAO,OAAOA,CAAQ,CAAA,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CACrC,CAEQ,WAAA,CAAYlB,CAAkB,CAAA,CAEpC,MAAMoB,CAAAA,CADapB,CAAO,CAAA,MAAA,CAAQqB,CAAM,EAAA,IAAA,CAAK,mBAAoBA,CAAAA,CAAC,CAAC,CAAA,CACvC,IAAKC,CAAM,EAAA,IAAA,CAAK,YAAaA,CAAAA,CAAC,CAAC,CAAA,CAAE,OAAQA,CAAMA,EAAAA,CAAAA,GAAM,IAAK,CAAA,OAAO,CACzFF,CAAAA,CAAAA,CAAS,SACX,IAAK,CAAA,OAAA,CAAUA,CAAS,CAAA,CAAC,CACzB,CAAA,IAAA,CAAK,OAAO,IAAK,CAAA,cAAA,CAAgB,IAAK,CAAA,OAAO,CAEjD,EAAA,CAEQ,WAAWG,CAAe,CAAA,CAChC,GAAI,IAAA,CAAK,mBAAoBA,CAAAA,CAAK,EAAG,CACnC,MAAML,CAAU,CAAA,IAAA,CAAK,YAAaK,CAAAA,CAAK,EACvC,IAAK,CAAA,OAAA,CAAUL,CACf,CAAA,IAAA,CAAK,eAAgBA,CAAAA,CAAO,CAC5B,CAAA,IAAA,CAAK,MAAO,CAAA,IAAA,CAAK,cAAgB,CAAA,IAAA,CAAK,OAAO,EAC/C,CACF,CAEQ,cAAA,CAAeM,CAAuD,CAAA,CAC5E,KAAM,CAACC,EAAWC,CAAWC,CAAAA,CAAO,CAAIH,CAAAA,CAAAA,CAAQ,KAAM,CAAA,GAAG,EAEzD,OAAO,CAAE,OADO,CAAA,CAAA,EAAGC,CAAaC,CAAAA,CAAAA,EAAAA,CAAAA,CAAAA,CAAAA,CACd,OAAAC,CAAAA,CAAQ,CAC5B,CAEQ,WAAYlB,CAAAA,CAAAA,CAAoB,CACtC,IAAA,CAAK,SAAWA,CACb,CAAA,MAAA,CAAQY,CAAM,EAAA,IAAA,CAAK,YAAa,CAAA,IAAA,CAAK,eAAeA,CAAC,CAAA,CAAE,OAAO,CAAA,GAAM,IAAK,CAAA,OAAO,EAChF,GAAKA,CAAAA,CAAAA,EAAM,IAAK,CAAA,cAAA,CAAeA,CAAC,CAAA,CAAE,OAAO,CAAA,CAC5C,IAAK,CAAA,MAAA,CAAO,IAAK,CAAA,iBAAA,CAAmB,IAAK,CAAA,QAAQ,EACnD,CAEQ,YAAA,CAAalB,CAAkD,CAAA,CACrE,OAAO,CACL,OAAQA,CAAK,CAAA,MAAA,CAAO,GAAKoB,CAAAA,CAAAA,EAAU,IAAK,CAAA,aAAA,CAAcA,CAAK,CAAC,CAAA,EAAK,CAAC,CAAA,EAAG,IAAK,CAAA,SAAA,CAAA,EAAA,CAAa,EACvF,OAASpB,CAAAA,CAAAA,CAAAA,EAAA,IAAAA,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAM,OAAW,GAAA,aAAA,CAC1B,QAAQA,CAAA,EAAA,IAAA,CAAA,KAAA,CAAA,CAAAA,CAAM,CAAA,MAAA,GAAU,YACxB,CAAA,MAAA,CAAA,CAAQA,GAAA,IAAAA,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAM,MAAU,GAAA,IAAA,CAAK,WAAYA,CAAAA,CAAAA,CAAK,OAAQA,CAAK,CAAA,SAAS,CACpE,CAAA,WAAA,CAAA,CAAaA,CAAA,EAAA,IAAA,CAAA,KAAA,CAAA,CAAAA,CAAM,CAAA,WAAA,GAAe,CAClC,CAAA,CAAA,SAAA,CAAWA,CAAK,CAAA,SAAA,CAChB,QAAUA,CAAAA,CAAAA,CAAK,QACjB,CACF,CAEQ,WAAYH,CAAAA,CAAAA,CAAkB4B,CAAmC,CAAA,CACvE,MAAMC,CAAsB,CAAA,EAC5B,CAAA,OAAA7B,CAAO,CAAA,OAAA,CAASuB,GAAU,CACxBM,CAAAA,CAAIN,CAAK,CAAA,CAAI,IAAK,CAAA,SAAA,CAAUA,CAAOK,CAAAA,CAAS,EAC9C,CAAC,CACMC,CAAAA,CACT,CAEA,MAAc,WAAW1B,CAA+B,CAAA,CACtD,IAAK,CAAA,GAAA,CAAM,IAAK,CAAA,YAAA,CAAaA,CAAI,CACjC,CAAA,IAAA,CAAK,OAAU,CAAA,kBAAA,CAAmB,IAAK,CAAA,GAAA,CAAI,MAAM,CACjD,CAAA,IAAA,CAAK,MAAS,CAAA,MAAM2B,iBAAkB,CAAA,IAAA,CAAK,CAAE,SAAA,CAAW,IAAK,CAAA,GAAA,CAAI,SAAU,CAAC,CAC5E,CAAA,IAAA,CAAK,wBACD,CAAA,IAAA,CAAK,GAAI,CAAA,WAAA,GACX,IAAK,CAAA,KAAA,CAAQ,IAAIC,SAAU,CAAA,CACzB,SAAW,CAAA,IAAA,CAAK,GAAI,CAAA,SAAA,CACpB,iBAAkB,IAAK,CAAA,GAAA,CAAI,MAC7B,CAAC,CACL,EAAA,CAEQ,gBAAgB5B,CAAmB,CAAA,CACzC,GAAI,CAACA,CAAM,CAAA,OACX,KAAM,CAAE,MAAA,CAAAH,CAAQ,CAAA,MAAA,CAAAgC,CAAO,CAAA,CAAI7B,EACvB,CAAC8B,YAAAA,CAAajC,CAAM,CAAA,EAAK,CAACA,CAAAA,GAC9B,KAAK,GAAI,CAAA,MAAA,CAAS,IAAK,CAAA,GAAA,CAAI,MAAO,CAAA,MAAA,CAAOA,CAAO,CAAA,GAAA,CAAKuB,CAAU,EAAA,IAAA,CAAK,aAAcA,CAAAA,CAAK,CAAC,CAAC,EAEzF,IAAK,CAAA,GAAA,CAAI,MAAS,CAAA,CAAC,GAAG,IAAI,IAAI,IAAK,CAAA,GAAA,CAAI,MAAM,CAAC,CAC9CvB,CAAAA,CAAAA,CAAO,QAASuB,CAAU,EAAA,CACxB,IAAK,CAAA,GAAA,CAAI,MAAOA,CAAAA,CAAK,CAAIS,CAAAA,CAAAA,CAAAA,EAAA,IAAAA,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAST,CAAU,CAAA,GAAA,IAAA,CAAK,SAAUA,CAAAA,CAAK,EAClE,CAAC,CAAA,EACH,CAEQ,SAAA,CAAUL,CAAiBU,CAAAA,CAAAA,CAA4B,CArTjE,IAAAX,CAAAA,CAuTI,OADoBA,CAAAA,CAAAA,CAAAA,CAAA,IAAK,CAAA,GAAA,CAAI,SAAT,IAAAA,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAkBC,CAGpC,CAAA,GAAA,CAAA,EAAG,OAA0BA,CAAAA,gBAAAA,EAAAA,CAAAA,CAAAA,WAAAA,EAAqBU,CAAa,EAAA,IAAA,CAAK,GAAI,CAAA,SAAA,CAAA,CAE5E,CACF;;AC3Ta,MAAA,gBAAA,CAAmBM;;;;"}
|