@walletconnect/ethereum-provider 2.4.1 → 2.4.2
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 +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 +17 -17
- package/dist/index.umd.js.map +1 -1
- package/dist/types/EthereumProvider.d.ts +1 -1
- package/dist/types/EthereumProvider.d.ts.map +1 -1
- package/package.json +5 -5
package/dist/index.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var O=require("events"),u=require("@walletconnect/utils"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var O=require("events"),u=require("@walletconnect/utils"),j=require("@walletconnect/universal-provider");function P(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach(function(s){if(s!=="default"){var i=Object.getOwnPropertyDescriptor(e,s);Object.defineProperty(t,s,i.get?i:{enumerable:!0,get:function(){return e[s]}})}}),t.default=e,Object.freeze(t)}const _="wc",A="ethereum_provider",R=`${_}@${2}:${A}:`;var $=Object.defineProperty,q=Object.defineProperties,S=Object.getOwnPropertyDescriptors,w=Object.getOwnPropertySymbols,T=Object.prototype.hasOwnProperty,U=Object.prototype.propertyIsEnumerable,y=(e,t,s)=>t in e?$(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s,N=(e,t)=>{for(var s in t||(t={}))T.call(t,s)&&y(e,s,t[s]);if(w)for(var s of w(t))U.call(t,s)&&y(e,s,t[s]);return e},L=(e,t)=>q(e,S(t));const Q="https://rpc.walletconnect.com/v1/",g=["eth_sendTransaction","personal_sign"],f=["chainChanged","accountsChanged"];function I(e){return Number(e[0].split(":")[1])}function z(e){const{chains:t,optionalChains:s,methods:i,optionalMethods:n,events:a,optionalEvents:o,rpcMap:c}=e;if(!u.isValidArray(t))throw new Error("Invalid chains");const r=t,h=i||g,d=a||f,b={[I(r)]:c[I(r)]},C={chains:r,methods:h,events:d,rpcMap:b},l=a?.filter(v=>!f.includes(v)),p=i?.filter(v=>!g.includes(v));if(!s&&!o&&!n&&!(l!=null&&l.length)&&!(p!=null&&p.length))return{required:C};const E=l?.length&&p?.length||!s,M={chains:[...new Set(E?r.concat(s||[]):s)],methods:[...new Set(h.concat(n||[]))],events:[...new Set(d.concat(o||[]))],rpcMap:c};return{required:C,optional:M}}class m{constructor(){this.events=new O.EventEmitter,this.namespace="eip155",this.accounts=[],this.chainId=1,this.STORAGE_KEY=R,this.signer={},this.rpc={}}static async init(t){const s=new m;return await s.initialize(t),s}async request(t){return await this.signer.request(t,this.formatChainId(this.chainId))}sendAsync(t,s){this.signer.sendAsync(t,s,this.formatChainId(this.chainId))}get connected(){return this.signer.client?this.signer.client.core.relayer.connected:!1}get connecting(){return this.signer.client?this.signer.client.core.relayer.connecting:!1}async enable(){return this.session||await this.connect(),await this.request({method:"eth_requestAccounts"})}async connect(t){if(!this.signer.client)throw new Error("Provider not initialized. Call init() first");this.loadConnectOpts(t);const{required:s,optional:i}=z(this.rpc);try{const n=await new Promise(async(o,c)=>{var r;this.rpc.showQrModal&&((r=this.modal)==null||r.subscribeModal(d=>{!d.open&&!this.signer.session&&c(new Error("User rejected the request."))}));const h=await this.signer.connect(L(N({namespaces:{[this.namespace]:s}},i&&{optionalNamespaces:{[this.namespace]:i}}),{pairingTopic:t?.pairingTopic}));o(h)});if(!n)return;this.setChainIds(this.rpc.chains);const a=u.getAccountsFromNamespaces(n.namespaces,[this.namespace]);this.setAccounts(a),this.events.emit("connect",{chainId:this.chainId,accounts:this.accounts})}catch(n){throw this.signer.logger.error(n),n}finally{this.modal&&this.modal.closeModal()}}async disconnect(){this.session&&await this.signer.disconnect(),this.reset()}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,{event:i}=s;i.name==="accountsChanged"?(this.accounts=i.data,this.events.emit("accountsChanged",this.accounts)):i.name==="chainChanged"?this.setChainId(this.formatChainId(i.data)):this.events.emit(i.name,i.data),this.events.emit("session_event",t)}),this.signer.on("chainChanged",t=>{this.chainId=t,this.events.emit("chainChanged",t),this.persist()}),this.signer.on("session_update",t=>{this.events.emit("session_update",t)}),this.signer.on("session_delete",t=>{this.reset(),this.events.emit("session_delete",t)}),this.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));s.length&&(this.chainId=s[0],this.events.emit("chainChanged",this.chainId),this.persist())}setChainId(t){if(this.isCompatibleChainId(t)){const s=this.parseChainId(t);this.chainId=s,this.setHttpProvider(s)}}parseAccountId(t){const[s,i,n]=t.split(":");return{chainId:`${s}:${i}`,address:n}}setAccounts(t){this.accounts=t.filter(s=>this.parseChainId(this.parseAccountId(s).chainId)===this.chainId).map(s=>this.parseAccountId(s).address),this.events.emit("accountsChanged",this.accounts)}getRpcConfig(t){var s,i;return{chains:((s=t.chains)==null?void 0:s.map(n=>this.formatChainId(n)))||[`${this.namespace}:1`],optionalChains:t.optionalChains?t.optionalChains.map(n=>this.formatChainId(n)):void 0,methods:t?.methods||g,events:t?.events||f,optionalMethods:t?.optionalMethods||[],optionalEvents:t?.optionalEvents||[],rpcMap:t?.rpcMap||this.buildRpcMap(t.chains.concat(t.optionalChains||[]),t.projectId),showQrModal:(i=t?.showQrModal)!=null?i:!0,projectId:t.projectId,metadata:t.metadata}}buildRpcMap(t,s){const i={};return t.forEach(n=>{i[n]=this.getRpcUrl(n,s)}),i}async initialize(t){if(this.rpc=this.getRpcConfig(t),this.chainId=I(this.rpc.chains),this.signer=await j.UniversalProvider.init({projectId:this.rpc.projectId}),this.registerEventListeners(),await this.loadPersistedSession(),this.rpc.showQrModal){const{Web3Modal:s}=await Promise.resolve().then(function(){return P(require("@web3modal/standalone"))});this.modal=new s({walletConnectVersion:2,projectId:this.rpc.projectId,standaloneChains:this.rpc.chains})}}loadConnectOpts(t){if(!t)return;const{chains:s,optionalChains:i,rpcMap:n}=t;s&&u.isValidArray(s)&&(this.rpc.chains=s.map(a=>this.formatChainId(a)),s.forEach(a=>{this.rpc.rpcMap[a]=n?.[a]||this.getRpcUrl(a)})),i&&u.isValidArray(i)&&(this.rpc.optionalChains=[],this.rpc.optionalChains=i?.map(a=>this.formatChainId(a)),i.forEach(a=>{this.rpc.rpcMap[a]=n?.[a]||this.getRpcUrl(a)}))}getRpcUrl(t,s){var i;return((i=this.rpc.rpcMap)==null?void 0:i[t])||`${Q}?chainId=eip155:${t}&projectId=${s||this.rpc.projectId}`}async loadPersistedSession(){if(!this.session)return;const t=await this.signer.client.core.storage.getItem(`${this.STORAGE_KEY}/chainId`);this.setChainIds(t?[this.formatChainId(t)]:this.session.namespaces[this.namespace].accounts),this.setAccounts(this.session.namespaces[this.namespace].accounts)}reset(){this.chainId=1,this.accounts=[]}persist(){this.session&&this.signer.client.core.storage.setItem(`${this.STORAGE_KEY}/chainId`,this.chainId)}}const G=m;exports.EthereumProvider=G,exports.default=m;
|
|
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/constants/values.ts","../src/EthereumProvider.ts","../src/index.ts"],"sourcesContent":["export const PROTOCOL = \"wc\";\nexport const WC_VERSION = 2;\nexport const CONTEXT = \"ethereum_provider\";\nexport const STORAGE_KEY = `${PROTOCOL}@${WC_VERSION}:${CONTEXT}:`;\n","import { EventEmitter } from \"events\";\nimport { getAccountsFromNamespaces, isValidArray } from \"@walletconnect/utils\";\nimport {\n IEthereumProvider as IProvider,\n ProviderAccounts,\n RequestArguments,\n} from \"eip1193-provider\";\nimport { Metadata, Namespace, UniversalProvider } from \"@walletconnect/universal-provider\";\nimport { Web3Modal } from \"@web3modal/standalone\";\nimport { SessionTypes, SignClientTypes } from \"@walletconnect/types\";\nimport { STORAGE_KEY } from \"./constants\";\n\nexport const RPC_URL = \"https://rpc.walletconnect.com/v1/\";\n\nexport const signerMethods = [\"eth_sendTransaction\", \"personal_sign\"];\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 optionalChains?: string[];\n methods: string[];\n optionalMethods?: string[];\n /**\n * @description Events that the wallet MUST support or the connection will be rejected\n */\n events: string[];\n optionalEvents?: string[];\n rpcMap: EthereumRpcMap;\n projectId: string;\n metadata?: Metadata;\n showQrModal: boolean;\n}\nexport interface ConnectOps {\n chains?: number[];\n optionalChains?: number[];\n rpcMap?: EthereumRpcMap;\n pairingTopic?: string;\n}\n\nexport interface IEthereumProvider extends IProvider {\n connect(opts?: ConnectOps | undefined): Promise<void>;\n}\n\nexport function getRpcUrl(chainId: string, rpc: EthereumRpcConfig): string | undefined {\n let rpcUrl: string | undefined;\n if (rpc.rpcMap) {\n rpcUrl = rpc.rpcMap[getEthereumChainId([chainId])];\n }\n return rpcUrl;\n}\n\nexport function getEthereumChainId(chains: string[]): number {\n return Number(chains[0].split(\":\")[1]);\n}\n\nexport type NamespacesParams = {\n chains: EthereumRpcConfig[\"chains\"];\n optionalChains?: EthereumRpcConfig[\"optionalChains\"];\n methods?: EthereumRpcConfig[\"methods\"];\n optionalMethods?: EthereumRpcConfig[\"methods\"];\n events?: EthereumRpcConfig[\"events\"];\n rpcMap: EthereumRpcConfig[\"rpcMap\"];\n optionalEvents?: EthereumRpcConfig[\"events\"];\n};\n\nexport function buildNamespaces(params: NamespacesParams): {\n required: Namespace;\n optional?: Namespace;\n} {\n const { chains, optionalChains, methods, optionalMethods, events, optionalEvents, rpcMap } =\n params;\n\n if (!isValidArray(chains)) {\n throw new Error(\"Invalid chains\");\n }\n\n const requiredChains = chains;\n const requriedMethods = methods || signerMethods;\n const requiredEvents = events || signerEvents;\n const requiredRpcMap = {\n [getEthereumChainId(requiredChains)]: rpcMap[getEthereumChainId(requiredChains)],\n };\n\n const required: Namespace = {\n chains: requiredChains,\n methods: requriedMethods,\n events: requiredEvents,\n rpcMap: requiredRpcMap,\n };\n\n // make a list of events and methods that require additional permissions\n // so we know if we should to include the required chains in the optional namespace\n const eventsRequiringPermissions = events?.filter((event) => !signerEvents.includes(event));\n const methodsRequiringPermissions = methods?.filter((event) => !signerMethods.includes(event));\n\n if (\n !optionalChains &&\n !optionalEvents &&\n !optionalMethods &&\n !eventsRequiringPermissions?.length &&\n !methodsRequiringPermissions?.length\n ) {\n return { required };\n }\n\n /*\n * decides whether or not to include the required chains in the optional namespace\n * use case: if there is a single chain as required but additonal methods/events as optional\n */\n const shouldIncludeRequiredChains =\n (eventsRequiringPermissions?.length && methodsRequiringPermissions?.length) || !optionalChains;\n\n const optional: Namespace = {\n chains: [\n ...new Set(\n shouldIncludeRequiredChains ? requiredChains.concat(optionalChains || []) : optionalChains,\n ),\n ],\n methods: [...new Set(requriedMethods.concat(optionalMethods || []))],\n events: [...new Set(requiredEvents.concat(optionalEvents || []))],\n rpcMap,\n };\n\n return { required, optional };\n}\nexport interface EthereumProviderOptions {\n projectId: string;\n /**\n * @note Chains that your app intents to use and the peer MUST support. If the peer does not support these chains, the connection will be rejected.\n * @default [1]\n * @example [1, 3, 4, 5, 42]\n */\n chains: number[];\n /**\n * @note Optional chains that your app MAY attempt to use and the peer MAY support. If the peer does not support these chains, the connection will still be established.\n * @default [1]\n * @example [1, 3, 4, 5, 42]\n */\n optionalChains?: number[];\n /**\n * @note Methods that your app intents to use and the peer MUST support. If the peer does not support these methods, the connection will be rejected.\n * @default [\"eth_sendTransaction\", \"personal_sign\"]\n */\n methods?: string[];\n /**\n * @note Methods that your app MAY attempt to use and the peer MAY support. If the peer does not support these methods, the connection will still be established.\n */\n optionalMethods?: string[];\n events?: string[];\n optionalEvents?: string[];\n rpcMap?: EthereumRpcMap;\n metadata?: Metadata;\n showQrModal?: boolean;\n}\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 public modal?: Web3Modal;\n\n private rpc: EthereumRpcConfig;\n private readonly STORAGE_KEY = STORAGE_KEY;\n\n constructor() {\n // assigned during initialize\n this.signer = {} as InstanceType<typeof UniversalProvider>;\n this.rpc = {} as EthereumRpcConfig;\n }\n\n static async init(opts: EthereumProviderOptions): Promise<EthereumProvider> {\n const provider = new EthereumProvider();\n await provider.initialize(opts);\n return provider;\n }\n\n public async request<T = unknown>(args: RequestArguments): Promise<T> {\n return await this.signer.request(args, this.formatChainId(this.chainId));\n }\n\n public sendAsync(\n args: RequestArguments,\n callback: (error: Error | null, response: any) => void,\n ): void {\n this.signer.sendAsync(args, callback, this.formatChainId(this.chainId));\n }\n\n get connected(): boolean {\n if (!this.signer.client) return false;\n return this.signer.client.core.relayer.connected;\n }\n\n get connecting(): boolean {\n if (!this.signer.client) return false;\n return this.signer.client.core.relayer.connecting;\n }\n\n public async enable(): Promise<ProviderAccounts> {\n if (!this.session) await this.connect();\n const accounts = await this.request({ method: \"eth_requestAccounts\" });\n return accounts as ProviderAccounts;\n }\n\n public async connect(opts?: ConnectOps): Promise<void> {\n if (!this.signer.client) {\n throw new Error(\"Provider not initialized. Call init() first\");\n }\n\n this.loadConnectOpts(opts);\n const { required, optional } = buildNamespaces(this.rpc);\n try {\n const session = await new Promise<SessionTypes.Struct | undefined>(\n async (resolve, reject) => {\n if (this.rpc.showQrModal) {\n this.modal?.subscribeModal((state) => {\n // the modal was closed so reject the promise\n if (!state.open && !this.signer.session)\n reject(new Error(\"User rejected the request.\"));\n });\n }\n const session = await this.signer.connect({\n namespaces: {\n [this.namespace]: required,\n },\n ...(optional && {\n optionalNamespaces: {\n [this.namespace]: optional,\n },\n }),\n pairingTopic: opts?.pairingTopic,\n });\n resolve(session);\n },\n );\n if (!session) return;\n this.setChainIds(this.rpc.chains);\n const accounts = getAccountsFromNamespaces(session.namespaces, [this.namespace]);\n this.setAccounts(accounts);\n this.events.emit(\"connect\", { chainId: this.chainId, accounts: this.accounts });\n } catch (error) {\n this.signer.logger.error(error);\n throw error;\n } finally {\n if (this.modal) this.modal.closeModal();\n }\n }\n\n public async disconnect(): Promise<void> {\n if (this.session) {\n await this.signer.disconnect();\n }\n this.reset();\n }\n\n public on(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: SignClientTypes.EventArguments[\"session_event\"]) => {\n const { params } = payload;\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(this.formatChainId(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(\"chainChanged\", (chainId: number) => {\n this.chainId = chainId;\n this.events.emit(\"chainChanged\", chainId);\n this.persist();\n });\n\n this.signer.on(\n \"session_update\",\n (payload: SignClientTypes.EventArguments[\"session_update\"]) => {\n this.events.emit(\"session_update\", payload);\n },\n );\n\n this.signer.on(\n \"session_delete\",\n (payload: SignClientTypes.EventArguments[\"session_delete\"]) => {\n this.reset();\n this.events.emit(\"session_delete\", payload);\n },\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));\n if (chainIds.length) {\n this.chainId = chainIds[0];\n this.events.emit(\"chainChanged\", this.chainId);\n this.persist();\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 }\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 optionalChains: opts.optionalChains\n ? opts.optionalChains.map((chain) => this.formatChainId(chain))\n : undefined,\n methods: opts?.methods || signerMethods,\n events: opts?.events || signerEvents,\n optionalMethods: opts?.optionalMethods || [],\n optionalEvents: opts?.optionalEvents || [],\n rpcMap:\n opts?.rpcMap ||\n this.buildRpcMap(opts.chains.concat(opts.optionalChains || []), opts.projectId),\n showQrModal: 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 await this.loadPersistedSession();\n if (this.rpc.showQrModal)\n this.modal = new Web3Modal({\n walletConnectVersion: 2,\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, optionalChains, rpcMap } = opts;\n if (chains && isValidArray(chains)) {\n this.rpc.chains = chains.map((chain) => this.formatChainId(chain));\n chains.forEach((chain) => {\n this.rpc.rpcMap[chain] = rpcMap?.[chain] || this.getRpcUrl(chain);\n });\n }\n if (optionalChains && isValidArray(optionalChains)) {\n this.rpc.optionalChains = [];\n this.rpc.optionalChains = optionalChains?.map((chain) => this.formatChainId(chain));\n optionalChains.forEach((chain) => {\n this.rpc.rpcMap[chain] = rpcMap?.[chain] || this.getRpcUrl(chain);\n });\n }\n }\n\n 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 private async loadPersistedSession() {\n if (!this.session) return;\n const chainId = await this.signer.client.core.storage.getItem(`${this.STORAGE_KEY}/chainId`);\n this.setChainIds(\n chainId ? [this.formatChainId(chainId)] : this.session.namespaces[this.namespace].accounts,\n );\n this.setAccounts(this.session.namespaces[this.namespace].accounts);\n }\n\n private reset() {\n this.chainId = 1;\n this.accounts = [];\n }\n\n private persist() {\n if (!this.session) return;\n this.signer.client.core.storage.setItem(`${this.STORAGE_KEY}/chainId`, this.chainId);\n }\n}\n\nexport default EthereumProvider;\n","import { EthereumProvider as Provider } from \"./EthereumProvider\";\nexport const EthereumProvider = Provider;\nexport default Provider;\n"],"names":["chains","params","optionalChains","methods","optionalMethods","events","optionalEvents","rpcMap","isValidArray","requiredChains","requriedMethods","requiredEvents","requiredRpcMap","required","eventsRequiringPermissions","event","methodsRequiringPermissions","shouldIncludeRequiredChains","optional","EthereumProvider","EventEmitter","STORAGE_KEY","opts","provider","args","callback","session","resolve","reject","_a","state","__spreadProps","__spreadValues","accounts","getAccountsFromNamespaces","error","listener","payload","chainId","uri","formattedChain","chainIds","x","c","chain","account","namespace","reference","address","_b","projectId","map","UniversalProvider","Web3Modal","Provider"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../src/constants/values.ts","../src/EthereumProvider.ts","../src/index.ts"],"sourcesContent":["export const PROTOCOL = \"wc\";\nexport const WC_VERSION = 2;\nexport const CONTEXT = \"ethereum_provider\";\nexport const STORAGE_KEY = `${PROTOCOL}@${WC_VERSION}:${CONTEXT}:`;\n","import { EventEmitter } from \"events\";\nimport { getAccountsFromNamespaces, isValidArray } from \"@walletconnect/utils\";\nimport {\n IEthereumProvider as IProvider,\n ProviderAccounts,\n RequestArguments,\n} from \"eip1193-provider\";\nimport { Metadata, Namespace, UniversalProvider } from \"@walletconnect/universal-provider\";\nimport type { Web3Modal } from \"@web3modal/standalone\";\nimport { SessionTypes, SignClientTypes } from \"@walletconnect/types\";\nimport { STORAGE_KEY } from \"./constants\";\n\nexport const RPC_URL = \"https://rpc.walletconnect.com/v1/\";\n\nexport const signerMethods = [\"eth_sendTransaction\", \"personal_sign\"];\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 optionalChains?: string[];\n methods: string[];\n optionalMethods?: string[];\n /**\n * @description Events that the wallet MUST support or the connection will be rejected\n */\n events: string[];\n optionalEvents?: string[];\n rpcMap: EthereumRpcMap;\n projectId: string;\n metadata?: Metadata;\n showQrModal: boolean;\n}\nexport interface ConnectOps {\n chains?: number[];\n optionalChains?: number[];\n rpcMap?: EthereumRpcMap;\n pairingTopic?: string;\n}\n\nexport interface IEthereumProvider extends IProvider {\n connect(opts?: ConnectOps | undefined): Promise<void>;\n}\n\nexport function getRpcUrl(chainId: string, rpc: EthereumRpcConfig): string | undefined {\n let rpcUrl: string | undefined;\n if (rpc.rpcMap) {\n rpcUrl = rpc.rpcMap[getEthereumChainId([chainId])];\n }\n return rpcUrl;\n}\n\nexport function getEthereumChainId(chains: string[]): number {\n return Number(chains[0].split(\":\")[1]);\n}\n\nexport type NamespacesParams = {\n chains: EthereumRpcConfig[\"chains\"];\n optionalChains?: EthereumRpcConfig[\"optionalChains\"];\n methods?: EthereumRpcConfig[\"methods\"];\n optionalMethods?: EthereumRpcConfig[\"methods\"];\n events?: EthereumRpcConfig[\"events\"];\n rpcMap: EthereumRpcConfig[\"rpcMap\"];\n optionalEvents?: EthereumRpcConfig[\"events\"];\n};\n\nexport function buildNamespaces(params: NamespacesParams): {\n required: Namespace;\n optional?: Namespace;\n} {\n const { chains, optionalChains, methods, optionalMethods, events, optionalEvents, rpcMap } =\n params;\n\n if (!isValidArray(chains)) {\n throw new Error(\"Invalid chains\");\n }\n\n const requiredChains = chains;\n const requriedMethods = methods || signerMethods;\n const requiredEvents = events || signerEvents;\n const requiredRpcMap = {\n [getEthereumChainId(requiredChains)]: rpcMap[getEthereumChainId(requiredChains)],\n };\n\n const required: Namespace = {\n chains: requiredChains,\n methods: requriedMethods,\n events: requiredEvents,\n rpcMap: requiredRpcMap,\n };\n\n // make a list of events and methods that require additional permissions\n // so we know if we should to include the required chains in the optional namespace\n const eventsRequiringPermissions = events?.filter((event) => !signerEvents.includes(event));\n const methodsRequiringPermissions = methods?.filter((event) => !signerMethods.includes(event));\n\n if (\n !optionalChains &&\n !optionalEvents &&\n !optionalMethods &&\n !eventsRequiringPermissions?.length &&\n !methodsRequiringPermissions?.length\n ) {\n return { required };\n }\n\n /*\n * decides whether or not to include the required chains in the optional namespace\n * use case: if there is a single chain as required but additonal methods/events as optional\n */\n const shouldIncludeRequiredChains =\n (eventsRequiringPermissions?.length && methodsRequiringPermissions?.length) || !optionalChains;\n\n const optional: Namespace = {\n chains: [\n ...new Set(\n shouldIncludeRequiredChains ? requiredChains.concat(optionalChains || []) : optionalChains,\n ),\n ],\n methods: [...new Set(requriedMethods.concat(optionalMethods || []))],\n events: [...new Set(requiredEvents.concat(optionalEvents || []))],\n rpcMap,\n };\n\n return { required, optional };\n}\nexport interface EthereumProviderOptions {\n projectId: string;\n /**\n * @note Chains that your app intents to use and the peer MUST support. If the peer does not support these chains, the connection will be rejected.\n * @default [1]\n * @example [1, 3, 4, 5, 42]\n */\n chains: number[];\n /**\n * @note Optional chains that your app MAY attempt to use and the peer MAY support. If the peer does not support these chains, the connection will still be established.\n * @default [1]\n * @example [1, 3, 4, 5, 42]\n */\n optionalChains?: number[];\n /**\n * @note Methods that your app intents to use and the peer MUST support. If the peer does not support these methods, the connection will be rejected.\n * @default [\"eth_sendTransaction\", \"personal_sign\"]\n */\n methods?: string[];\n /**\n * @note Methods that your app MAY attempt to use and the peer MAY support. If the peer does not support these methods, the connection will still be established.\n */\n optionalMethods?: string[];\n events?: string[];\n optionalEvents?: string[];\n rpcMap?: EthereumRpcMap;\n metadata?: Metadata;\n showQrModal?: boolean;\n}\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 public modal?: Web3Modal;\n\n private rpc: EthereumRpcConfig;\n private readonly STORAGE_KEY = STORAGE_KEY;\n\n constructor() {\n // assigned during initialize\n this.signer = {} as InstanceType<typeof UniversalProvider>;\n this.rpc = {} as EthereumRpcConfig;\n }\n\n static async init(opts: EthereumProviderOptions): Promise<EthereumProvider> {\n const provider = new EthereumProvider();\n await provider.initialize(opts);\n return provider;\n }\n\n public async request<T = unknown>(args: RequestArguments): Promise<T> {\n return await this.signer.request(args, this.formatChainId(this.chainId));\n }\n\n public sendAsync(\n args: RequestArguments,\n callback: (error: Error | null, response: any) => void,\n ): void {\n this.signer.sendAsync(args, callback, this.formatChainId(this.chainId));\n }\n\n get connected(): boolean {\n if (!this.signer.client) return false;\n return this.signer.client.core.relayer.connected;\n }\n\n get connecting(): boolean {\n if (!this.signer.client) return false;\n return this.signer.client.core.relayer.connecting;\n }\n\n public async enable(): Promise<ProviderAccounts> {\n if (!this.session) await this.connect();\n const accounts = await this.request({ method: \"eth_requestAccounts\" });\n return accounts as ProviderAccounts;\n }\n\n public async connect(opts?: ConnectOps): Promise<void> {\n if (!this.signer.client) {\n throw new Error(\"Provider not initialized. Call init() first\");\n }\n\n this.loadConnectOpts(opts);\n const { required, optional } = buildNamespaces(this.rpc);\n try {\n const session = await new Promise<SessionTypes.Struct | undefined>(\n async (resolve, reject) => {\n if (this.rpc.showQrModal) {\n this.modal?.subscribeModal((state) => {\n // the modal was closed so reject the promise\n if (!state.open && !this.signer.session)\n reject(new Error(\"User rejected the request.\"));\n });\n }\n const session = await this.signer.connect({\n namespaces: {\n [this.namespace]: required,\n },\n ...(optional && {\n optionalNamespaces: {\n [this.namespace]: optional,\n },\n }),\n pairingTopic: opts?.pairingTopic,\n });\n resolve(session);\n },\n );\n if (!session) return;\n this.setChainIds(this.rpc.chains);\n const accounts = getAccountsFromNamespaces(session.namespaces, [this.namespace]);\n this.setAccounts(accounts);\n this.events.emit(\"connect\", { chainId: this.chainId, accounts: this.accounts });\n } catch (error) {\n this.signer.logger.error(error);\n throw error;\n } finally {\n if (this.modal) this.modal.closeModal();\n }\n }\n\n public async disconnect(): Promise<void> {\n if (this.session) {\n await this.signer.disconnect();\n }\n this.reset();\n }\n\n public on(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: SignClientTypes.EventArguments[\"session_event\"]) => {\n const { params } = payload;\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(this.formatChainId(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(\"chainChanged\", (chainId: number) => {\n this.chainId = chainId;\n this.events.emit(\"chainChanged\", chainId);\n this.persist();\n });\n\n this.signer.on(\n \"session_update\",\n (payload: SignClientTypes.EventArguments[\"session_update\"]) => {\n this.events.emit(\"session_update\", payload);\n },\n );\n\n this.signer.on(\n \"session_delete\",\n (payload: SignClientTypes.EventArguments[\"session_delete\"]) => {\n this.reset();\n this.events.emit(\"session_delete\", payload);\n },\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));\n if (chainIds.length) {\n this.chainId = chainIds[0];\n this.events.emit(\"chainChanged\", this.chainId);\n this.persist();\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 }\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 optionalChains: opts.optionalChains\n ? opts.optionalChains.map((chain) => this.formatChainId(chain))\n : undefined,\n methods: opts?.methods || signerMethods,\n events: opts?.events || signerEvents,\n optionalMethods: opts?.optionalMethods || [],\n optionalEvents: opts?.optionalEvents || [],\n rpcMap:\n opts?.rpcMap ||\n this.buildRpcMap(opts.chains.concat(opts.optionalChains || []), opts.projectId),\n showQrModal: 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 await this.loadPersistedSession();\n if (this.rpc.showQrModal) {\n const { Web3Modal } = await import(\"@web3modal/standalone\");\n this.modal = new Web3Modal({\n walletConnectVersion: 2,\n projectId: this.rpc.projectId,\n standaloneChains: this.rpc.chains,\n });\n }\n }\n\n private loadConnectOpts(opts?: ConnectOps) {\n if (!opts) return;\n const { chains, optionalChains, rpcMap } = opts;\n if (chains && isValidArray(chains)) {\n this.rpc.chains = chains.map((chain) => this.formatChainId(chain));\n chains.forEach((chain) => {\n this.rpc.rpcMap[chain] = rpcMap?.[chain] || this.getRpcUrl(chain);\n });\n }\n if (optionalChains && isValidArray(optionalChains)) {\n this.rpc.optionalChains = [];\n this.rpc.optionalChains = optionalChains?.map((chain) => this.formatChainId(chain));\n optionalChains.forEach((chain) => {\n this.rpc.rpcMap[chain] = rpcMap?.[chain] || this.getRpcUrl(chain);\n });\n }\n }\n\n 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 private async loadPersistedSession() {\n if (!this.session) return;\n const chainId = await this.signer.client.core.storage.getItem(`${this.STORAGE_KEY}/chainId`);\n this.setChainIds(\n chainId ? [this.formatChainId(chainId)] : this.session.namespaces[this.namespace].accounts,\n );\n this.setAccounts(this.session.namespaces[this.namespace].accounts);\n }\n\n private reset() {\n this.chainId = 1;\n this.accounts = [];\n }\n\n private persist() {\n if (!this.session) return;\n this.signer.client.core.storage.setItem(`${this.STORAGE_KEY}/chainId`, this.chainId);\n }\n}\n\nexport default EthereumProvider;\n","import { EthereumProvider as Provider } from \"./EthereumProvider\";\nexport const EthereumProvider = Provider;\nexport default Provider;\n"],"names":["chains","params","optionalChains","methods","optionalMethods","events","optionalEvents","rpcMap","isValidArray","requiredChains","requriedMethods","requiredEvents","requiredRpcMap","required","eventsRequiringPermissions","event","methodsRequiringPermissions","shouldIncludeRequiredChains","optional","EthereumProvider","EventEmitter","STORAGE_KEY","opts","provider","args","callback","session","resolve","reject","_a","state","__spreadProps","__spreadValues","accounts","getAccountsFromNamespaces","error","listener","payload","chainId","uri","formattedChain","chainIds","x","c","chain","account","namespace","reference","address","_b","projectId","map","UniversalProvider","Web3Modal","Provider"],"mappings":"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"}
|
package/dist/index.es.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{EventEmitter as O}from"events";import{getAccountsFromNamespaces as R,isValidArray as v}from"@walletconnect/utils";import{UniversalProvider as j}from"@walletconnect/universal-provider";
|
|
1
|
+
import{EventEmitter as O}from"events";import{getAccountsFromNamespaces as R,isValidArray as v}from"@walletconnect/utils";import{UniversalProvider as j}from"@walletconnect/universal-provider";const A="wc",P="ethereum_provider",_=`${A}@${2}:${P}:`;var $=Object.defineProperty,S=Object.defineProperties,T=Object.getOwnPropertyDescriptors,w=Object.getOwnPropertySymbols,q=Object.prototype.hasOwnProperty,U=Object.prototype.propertyIsEnumerable,y=(a,t,s)=>t in a?$(a,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):a[t]=s,L=(a,t)=>{for(var s in t||(t={}))q.call(t,s)&&y(a,s,t[s]);if(w)for(var s of w(t))U.call(t,s)&&y(a,s,t[s]);return a},N=(a,t)=>S(a,T(t));const Q="https://rpc.walletconnect.com/v1/",g=["eth_sendTransaction","personal_sign"],I=["chainChanged","accountsChanged"];function C(a){return Number(a[0].split(":")[1])}function G(a){const{chains:t,optionalChains:s,methods:i,optionalMethods:n,events:e,optionalEvents:o,rpcMap:c}=a;if(!v(t))throw new Error("Invalid chains");const r=t,h=i||g,d=e||I,E={[C(r)]:c[C(r)]},f={chains:r,methods:h,events:d,rpcMap:E},p=e?.filter(m=>!I.includes(m)),l=i?.filter(m=>!g.includes(m));if(!s&&!o&&!n&&!(p!=null&&p.length)&&!(l!=null&&l.length))return{required:f};const M=p?.length&&l?.length||!s,b={chains:[...new Set(M?r.concat(s||[]):s)],methods:[...new Set(h.concat(n||[]))],events:[...new Set(d.concat(o||[]))],rpcMap:c};return{required:f,optional:b}}class u{constructor(){this.events=new O,this.namespace="eip155",this.accounts=[],this.chainId=1,this.STORAGE_KEY=_,this.signer={},this.rpc={}}static async init(t){const s=new u;return await s.initialize(t),s}async request(t){return await this.signer.request(t,this.formatChainId(this.chainId))}sendAsync(t,s){this.signer.sendAsync(t,s,this.formatChainId(this.chainId))}get connected(){return this.signer.client?this.signer.client.core.relayer.connected:!1}get connecting(){return this.signer.client?this.signer.client.core.relayer.connecting:!1}async enable(){return this.session||await this.connect(),await this.request({method:"eth_requestAccounts"})}async connect(t){if(!this.signer.client)throw new Error("Provider not initialized. Call init() first");this.loadConnectOpts(t);const{required:s,optional:i}=G(this.rpc);try{const n=await new Promise(async(o,c)=>{var r;this.rpc.showQrModal&&((r=this.modal)==null||r.subscribeModal(d=>{!d.open&&!this.signer.session&&c(new Error("User rejected the request."))}));const h=await this.signer.connect(N(L({namespaces:{[this.namespace]:s}},i&&{optionalNamespaces:{[this.namespace]:i}}),{pairingTopic:t?.pairingTopic}));o(h)});if(!n)return;this.setChainIds(this.rpc.chains);const e=R(n.namespaces,[this.namespace]);this.setAccounts(e),this.events.emit("connect",{chainId:this.chainId,accounts:this.accounts})}catch(n){throw this.signer.logger.error(n),n}finally{this.modal&&this.modal.closeModal()}}async disconnect(){this.session&&await this.signer.disconnect(),this.reset()}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,{event:i}=s;i.name==="accountsChanged"?(this.accounts=i.data,this.events.emit("accountsChanged",this.accounts)):i.name==="chainChanged"?this.setChainId(this.formatChainId(i.data)):this.events.emit(i.name,i.data),this.events.emit("session_event",t)}),this.signer.on("chainChanged",t=>{this.chainId=t,this.events.emit("chainChanged",t),this.persist()}),this.signer.on("session_update",t=>{this.events.emit("session_update",t)}),this.signer.on("session_delete",t=>{this.reset(),this.events.emit("session_delete",t)}),this.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));s.length&&(this.chainId=s[0],this.events.emit("chainChanged",this.chainId),this.persist())}setChainId(t){if(this.isCompatibleChainId(t)){const s=this.parseChainId(t);this.chainId=s,this.setHttpProvider(s)}}parseAccountId(t){const[s,i,n]=t.split(":");return{chainId:`${s}:${i}`,address:n}}setAccounts(t){this.accounts=t.filter(s=>this.parseChainId(this.parseAccountId(s).chainId)===this.chainId).map(s=>this.parseAccountId(s).address),this.events.emit("accountsChanged",this.accounts)}getRpcConfig(t){var s,i;return{chains:((s=t.chains)==null?void 0:s.map(n=>this.formatChainId(n)))||[`${this.namespace}:1`],optionalChains:t.optionalChains?t.optionalChains.map(n=>this.formatChainId(n)):void 0,methods:t?.methods||g,events:t?.events||I,optionalMethods:t?.optionalMethods||[],optionalEvents:t?.optionalEvents||[],rpcMap:t?.rpcMap||this.buildRpcMap(t.chains.concat(t.optionalChains||[]),t.projectId),showQrModal:(i=t?.showQrModal)!=null?i:!0,projectId:t.projectId,metadata:t.metadata}}buildRpcMap(t,s){const i={};return t.forEach(n=>{i[n]=this.getRpcUrl(n,s)}),i}async initialize(t){if(this.rpc=this.getRpcConfig(t),this.chainId=C(this.rpc.chains),this.signer=await j.init({projectId:this.rpc.projectId}),this.registerEventListeners(),await this.loadPersistedSession(),this.rpc.showQrModal){const{Web3Modal:s}=await import("@web3modal/standalone");this.modal=new s({walletConnectVersion:2,projectId:this.rpc.projectId,standaloneChains:this.rpc.chains})}}loadConnectOpts(t){if(!t)return;const{chains:s,optionalChains:i,rpcMap:n}=t;s&&v(s)&&(this.rpc.chains=s.map(e=>this.formatChainId(e)),s.forEach(e=>{this.rpc.rpcMap[e]=n?.[e]||this.getRpcUrl(e)})),i&&v(i)&&(this.rpc.optionalChains=[],this.rpc.optionalChains=i?.map(e=>this.formatChainId(e)),i.forEach(e=>{this.rpc.rpcMap[e]=n?.[e]||this.getRpcUrl(e)}))}getRpcUrl(t,s){var i;return((i=this.rpc.rpcMap)==null?void 0:i[t])||`${Q}?chainId=eip155:${t}&projectId=${s||this.rpc.projectId}`}async loadPersistedSession(){if(!this.session)return;const t=await this.signer.client.core.storage.getItem(`${this.STORAGE_KEY}/chainId`);this.setChainIds(t?[this.formatChainId(t)]:this.session.namespaces[this.namespace].accounts),this.setAccounts(this.session.namespaces[this.namespace].accounts)}reset(){this.chainId=1,this.accounts=[]}persist(){this.session&&this.signer.client.core.storage.setItem(`${this.STORAGE_KEY}/chainId`,this.chainId)}}const K=u;export{K as EthereumProvider,u 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/constants/values.ts","../src/EthereumProvider.ts","../src/index.ts"],"sourcesContent":["export const PROTOCOL = \"wc\";\nexport const WC_VERSION = 2;\nexport const CONTEXT = \"ethereum_provider\";\nexport const STORAGE_KEY = `${PROTOCOL}@${WC_VERSION}:${CONTEXT}:`;\n","import { EventEmitter } from \"events\";\nimport { getAccountsFromNamespaces, isValidArray } from \"@walletconnect/utils\";\nimport {\n IEthereumProvider as IProvider,\n ProviderAccounts,\n RequestArguments,\n} from \"eip1193-provider\";\nimport { Metadata, Namespace, UniversalProvider } from \"@walletconnect/universal-provider\";\nimport { Web3Modal } from \"@web3modal/standalone\";\nimport { SessionTypes, SignClientTypes } from \"@walletconnect/types\";\nimport { STORAGE_KEY } from \"./constants\";\n\nexport const RPC_URL = \"https://rpc.walletconnect.com/v1/\";\n\nexport const signerMethods = [\"eth_sendTransaction\", \"personal_sign\"];\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 optionalChains?: string[];\n methods: string[];\n optionalMethods?: string[];\n /**\n * @description Events that the wallet MUST support or the connection will be rejected\n */\n events: string[];\n optionalEvents?: string[];\n rpcMap: EthereumRpcMap;\n projectId: string;\n metadata?: Metadata;\n showQrModal: boolean;\n}\nexport interface ConnectOps {\n chains?: number[];\n optionalChains?: number[];\n rpcMap?: EthereumRpcMap;\n pairingTopic?: string;\n}\n\nexport interface IEthereumProvider extends IProvider {\n connect(opts?: ConnectOps | undefined): Promise<void>;\n}\n\nexport function getRpcUrl(chainId: string, rpc: EthereumRpcConfig): string | undefined {\n let rpcUrl: string | undefined;\n if (rpc.rpcMap) {\n rpcUrl = rpc.rpcMap[getEthereumChainId([chainId])];\n }\n return rpcUrl;\n}\n\nexport function getEthereumChainId(chains: string[]): number {\n return Number(chains[0].split(\":\")[1]);\n}\n\nexport type NamespacesParams = {\n chains: EthereumRpcConfig[\"chains\"];\n optionalChains?: EthereumRpcConfig[\"optionalChains\"];\n methods?: EthereumRpcConfig[\"methods\"];\n optionalMethods?: EthereumRpcConfig[\"methods\"];\n events?: EthereumRpcConfig[\"events\"];\n rpcMap: EthereumRpcConfig[\"rpcMap\"];\n optionalEvents?: EthereumRpcConfig[\"events\"];\n};\n\nexport function buildNamespaces(params: NamespacesParams): {\n required: Namespace;\n optional?: Namespace;\n} {\n const { chains, optionalChains, methods, optionalMethods, events, optionalEvents, rpcMap } =\n params;\n\n if (!isValidArray(chains)) {\n throw new Error(\"Invalid chains\");\n }\n\n const requiredChains = chains;\n const requriedMethods = methods || signerMethods;\n const requiredEvents = events || signerEvents;\n const requiredRpcMap = {\n [getEthereumChainId(requiredChains)]: rpcMap[getEthereumChainId(requiredChains)],\n };\n\n const required: Namespace = {\n chains: requiredChains,\n methods: requriedMethods,\n events: requiredEvents,\n rpcMap: requiredRpcMap,\n };\n\n // make a list of events and methods that require additional permissions\n // so we know if we should to include the required chains in the optional namespace\n const eventsRequiringPermissions = events?.filter((event) => !signerEvents.includes(event));\n const methodsRequiringPermissions = methods?.filter((event) => !signerMethods.includes(event));\n\n if (\n !optionalChains &&\n !optionalEvents &&\n !optionalMethods &&\n !eventsRequiringPermissions?.length &&\n !methodsRequiringPermissions?.length\n ) {\n return { required };\n }\n\n /*\n * decides whether or not to include the required chains in the optional namespace\n * use case: if there is a single chain as required but additonal methods/events as optional\n */\n const shouldIncludeRequiredChains =\n (eventsRequiringPermissions?.length && methodsRequiringPermissions?.length) || !optionalChains;\n\n const optional: Namespace = {\n chains: [\n ...new Set(\n shouldIncludeRequiredChains ? requiredChains.concat(optionalChains || []) : optionalChains,\n ),\n ],\n methods: [...new Set(requriedMethods.concat(optionalMethods || []))],\n events: [...new Set(requiredEvents.concat(optionalEvents || []))],\n rpcMap,\n };\n\n return { required, optional };\n}\nexport interface EthereumProviderOptions {\n projectId: string;\n /**\n * @note Chains that your app intents to use and the peer MUST support. If the peer does not support these chains, the connection will be rejected.\n * @default [1]\n * @example [1, 3, 4, 5, 42]\n */\n chains: number[];\n /**\n * @note Optional chains that your app MAY attempt to use and the peer MAY support. If the peer does not support these chains, the connection will still be established.\n * @default [1]\n * @example [1, 3, 4, 5, 42]\n */\n optionalChains?: number[];\n /**\n * @note Methods that your app intents to use and the peer MUST support. If the peer does not support these methods, the connection will be rejected.\n * @default [\"eth_sendTransaction\", \"personal_sign\"]\n */\n methods?: string[];\n /**\n * @note Methods that your app MAY attempt to use and the peer MAY support. If the peer does not support these methods, the connection will still be established.\n */\n optionalMethods?: string[];\n events?: string[];\n optionalEvents?: string[];\n rpcMap?: EthereumRpcMap;\n metadata?: Metadata;\n showQrModal?: boolean;\n}\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 public modal?: Web3Modal;\n\n private rpc: EthereumRpcConfig;\n private readonly STORAGE_KEY = STORAGE_KEY;\n\n constructor() {\n // assigned during initialize\n this.signer = {} as InstanceType<typeof UniversalProvider>;\n this.rpc = {} as EthereumRpcConfig;\n }\n\n static async init(opts: EthereumProviderOptions): Promise<EthereumProvider> {\n const provider = new EthereumProvider();\n await provider.initialize(opts);\n return provider;\n }\n\n public async request<T = unknown>(args: RequestArguments): Promise<T> {\n return await this.signer.request(args, this.formatChainId(this.chainId));\n }\n\n public sendAsync(\n args: RequestArguments,\n callback: (error: Error | null, response: any) => void,\n ): void {\n this.signer.sendAsync(args, callback, this.formatChainId(this.chainId));\n }\n\n get connected(): boolean {\n if (!this.signer.client) return false;\n return this.signer.client.core.relayer.connected;\n }\n\n get connecting(): boolean {\n if (!this.signer.client) return false;\n return this.signer.client.core.relayer.connecting;\n }\n\n public async enable(): Promise<ProviderAccounts> {\n if (!this.session) await this.connect();\n const accounts = await this.request({ method: \"eth_requestAccounts\" });\n return accounts as ProviderAccounts;\n }\n\n public async connect(opts?: ConnectOps): Promise<void> {\n if (!this.signer.client) {\n throw new Error(\"Provider not initialized. Call init() first\");\n }\n\n this.loadConnectOpts(opts);\n const { required, optional } = buildNamespaces(this.rpc);\n try {\n const session = await new Promise<SessionTypes.Struct | undefined>(\n async (resolve, reject) => {\n if (this.rpc.showQrModal) {\n this.modal?.subscribeModal((state) => {\n // the modal was closed so reject the promise\n if (!state.open && !this.signer.session)\n reject(new Error(\"User rejected the request.\"));\n });\n }\n const session = await this.signer.connect({\n namespaces: {\n [this.namespace]: required,\n },\n ...(optional && {\n optionalNamespaces: {\n [this.namespace]: optional,\n },\n }),\n pairingTopic: opts?.pairingTopic,\n });\n resolve(session);\n },\n );\n if (!session) return;\n this.setChainIds(this.rpc.chains);\n const accounts = getAccountsFromNamespaces(session.namespaces, [this.namespace]);\n this.setAccounts(accounts);\n this.events.emit(\"connect\", { chainId: this.chainId, accounts: this.accounts });\n } catch (error) {\n this.signer.logger.error(error);\n throw error;\n } finally {\n if (this.modal) this.modal.closeModal();\n }\n }\n\n public async disconnect(): Promise<void> {\n if (this.session) {\n await this.signer.disconnect();\n }\n this.reset();\n }\n\n public on(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: SignClientTypes.EventArguments[\"session_event\"]) => {\n const { params } = payload;\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(this.formatChainId(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(\"chainChanged\", (chainId: number) => {\n this.chainId = chainId;\n this.events.emit(\"chainChanged\", chainId);\n this.persist();\n });\n\n this.signer.on(\n \"session_update\",\n (payload: SignClientTypes.EventArguments[\"session_update\"]) => {\n this.events.emit(\"session_update\", payload);\n },\n );\n\n this.signer.on(\n \"session_delete\",\n (payload: SignClientTypes.EventArguments[\"session_delete\"]) => {\n this.reset();\n this.events.emit(\"session_delete\", payload);\n },\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));\n if (chainIds.length) {\n this.chainId = chainIds[0];\n this.events.emit(\"chainChanged\", this.chainId);\n this.persist();\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 }\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 optionalChains: opts.optionalChains\n ? opts.optionalChains.map((chain) => this.formatChainId(chain))\n : undefined,\n methods: opts?.methods || signerMethods,\n events: opts?.events || signerEvents,\n optionalMethods: opts?.optionalMethods || [],\n optionalEvents: opts?.optionalEvents || [],\n rpcMap:\n opts?.rpcMap ||\n this.buildRpcMap(opts.chains.concat(opts.optionalChains || []), opts.projectId),\n showQrModal: 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 await this.loadPersistedSession();\n if (this.rpc.showQrModal)\n this.modal = new Web3Modal({\n walletConnectVersion: 2,\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, optionalChains, rpcMap } = opts;\n if (chains && isValidArray(chains)) {\n this.rpc.chains = chains.map((chain) => this.formatChainId(chain));\n chains.forEach((chain) => {\n this.rpc.rpcMap[chain] = rpcMap?.[chain] || this.getRpcUrl(chain);\n });\n }\n if (optionalChains && isValidArray(optionalChains)) {\n this.rpc.optionalChains = [];\n this.rpc.optionalChains = optionalChains?.map((chain) => this.formatChainId(chain));\n optionalChains.forEach((chain) => {\n this.rpc.rpcMap[chain] = rpcMap?.[chain] || this.getRpcUrl(chain);\n });\n }\n }\n\n 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 private async loadPersistedSession() {\n if (!this.session) return;\n const chainId = await this.signer.client.core.storage.getItem(`${this.STORAGE_KEY}/chainId`);\n this.setChainIds(\n chainId ? [this.formatChainId(chainId)] : this.session.namespaces[this.namespace].accounts,\n );\n this.setAccounts(this.session.namespaces[this.namespace].accounts);\n }\n\n private reset() {\n this.chainId = 1;\n this.accounts = [];\n }\n\n private persist() {\n if (!this.session) return;\n this.signer.client.core.storage.setItem(`${this.STORAGE_KEY}/chainId`, this.chainId);\n }\n}\n\nexport default EthereumProvider;\n","import { EthereumProvider as Provider } from \"./EthereumProvider\";\nexport const EthereumProvider = Provider;\nexport default Provider;\n"],"names":["chains","params","optionalChains","methods","optionalMethods","events","optionalEvents","rpcMap","isValidArray","requiredChains","requriedMethods","requiredEvents","requiredRpcMap","required","eventsRequiringPermissions","event","methodsRequiringPermissions","shouldIncludeRequiredChains","optional","EthereumProvider","EventEmitter","STORAGE_KEY","opts","provider","args","callback","session","resolve","reject","_a","state","__spreadProps","__spreadValues","accounts","getAccountsFromNamespaces","error","listener","payload","chainId","uri","formattedChain","chainIds","x","c","chain","account","namespace","reference","address","_b","projectId","map","UniversalProvider","Web3Modal","Provider"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../src/constants/values.ts","../src/EthereumProvider.ts","../src/index.ts"],"sourcesContent":["export const PROTOCOL = \"wc\";\nexport const WC_VERSION = 2;\nexport const CONTEXT = \"ethereum_provider\";\nexport const STORAGE_KEY = `${PROTOCOL}@${WC_VERSION}:${CONTEXT}:`;\n","import { EventEmitter } from \"events\";\nimport { getAccountsFromNamespaces, isValidArray } from \"@walletconnect/utils\";\nimport {\n IEthereumProvider as IProvider,\n ProviderAccounts,\n RequestArguments,\n} from \"eip1193-provider\";\nimport { Metadata, Namespace, UniversalProvider } from \"@walletconnect/universal-provider\";\nimport type { Web3Modal } from \"@web3modal/standalone\";\nimport { SessionTypes, SignClientTypes } from \"@walletconnect/types\";\nimport { STORAGE_KEY } from \"./constants\";\n\nexport const RPC_URL = \"https://rpc.walletconnect.com/v1/\";\n\nexport const signerMethods = [\"eth_sendTransaction\", \"personal_sign\"];\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 optionalChains?: string[];\n methods: string[];\n optionalMethods?: string[];\n /**\n * @description Events that the wallet MUST support or the connection will be rejected\n */\n events: string[];\n optionalEvents?: string[];\n rpcMap: EthereumRpcMap;\n projectId: string;\n metadata?: Metadata;\n showQrModal: boolean;\n}\nexport interface ConnectOps {\n chains?: number[];\n optionalChains?: number[];\n rpcMap?: EthereumRpcMap;\n pairingTopic?: string;\n}\n\nexport interface IEthereumProvider extends IProvider {\n connect(opts?: ConnectOps | undefined): Promise<void>;\n}\n\nexport function getRpcUrl(chainId: string, rpc: EthereumRpcConfig): string | undefined {\n let rpcUrl: string | undefined;\n if (rpc.rpcMap) {\n rpcUrl = rpc.rpcMap[getEthereumChainId([chainId])];\n }\n return rpcUrl;\n}\n\nexport function getEthereumChainId(chains: string[]): number {\n return Number(chains[0].split(\":\")[1]);\n}\n\nexport type NamespacesParams = {\n chains: EthereumRpcConfig[\"chains\"];\n optionalChains?: EthereumRpcConfig[\"optionalChains\"];\n methods?: EthereumRpcConfig[\"methods\"];\n optionalMethods?: EthereumRpcConfig[\"methods\"];\n events?: EthereumRpcConfig[\"events\"];\n rpcMap: EthereumRpcConfig[\"rpcMap\"];\n optionalEvents?: EthereumRpcConfig[\"events\"];\n};\n\nexport function buildNamespaces(params: NamespacesParams): {\n required: Namespace;\n optional?: Namespace;\n} {\n const { chains, optionalChains, methods, optionalMethods, events, optionalEvents, rpcMap } =\n params;\n\n if (!isValidArray(chains)) {\n throw new Error(\"Invalid chains\");\n }\n\n const requiredChains = chains;\n const requriedMethods = methods || signerMethods;\n const requiredEvents = events || signerEvents;\n const requiredRpcMap = {\n [getEthereumChainId(requiredChains)]: rpcMap[getEthereumChainId(requiredChains)],\n };\n\n const required: Namespace = {\n chains: requiredChains,\n methods: requriedMethods,\n events: requiredEvents,\n rpcMap: requiredRpcMap,\n };\n\n // make a list of events and methods that require additional permissions\n // so we know if we should to include the required chains in the optional namespace\n const eventsRequiringPermissions = events?.filter((event) => !signerEvents.includes(event));\n const methodsRequiringPermissions = methods?.filter((event) => !signerMethods.includes(event));\n\n if (\n !optionalChains &&\n !optionalEvents &&\n !optionalMethods &&\n !eventsRequiringPermissions?.length &&\n !methodsRequiringPermissions?.length\n ) {\n return { required };\n }\n\n /*\n * decides whether or not to include the required chains in the optional namespace\n * use case: if there is a single chain as required but additonal methods/events as optional\n */\n const shouldIncludeRequiredChains =\n (eventsRequiringPermissions?.length && methodsRequiringPermissions?.length) || !optionalChains;\n\n const optional: Namespace = {\n chains: [\n ...new Set(\n shouldIncludeRequiredChains ? requiredChains.concat(optionalChains || []) : optionalChains,\n ),\n ],\n methods: [...new Set(requriedMethods.concat(optionalMethods || []))],\n events: [...new Set(requiredEvents.concat(optionalEvents || []))],\n rpcMap,\n };\n\n return { required, optional };\n}\nexport interface EthereumProviderOptions {\n projectId: string;\n /**\n * @note Chains that your app intents to use and the peer MUST support. If the peer does not support these chains, the connection will be rejected.\n * @default [1]\n * @example [1, 3, 4, 5, 42]\n */\n chains: number[];\n /**\n * @note Optional chains that your app MAY attempt to use and the peer MAY support. If the peer does not support these chains, the connection will still be established.\n * @default [1]\n * @example [1, 3, 4, 5, 42]\n */\n optionalChains?: number[];\n /**\n * @note Methods that your app intents to use and the peer MUST support. If the peer does not support these methods, the connection will be rejected.\n * @default [\"eth_sendTransaction\", \"personal_sign\"]\n */\n methods?: string[];\n /**\n * @note Methods that your app MAY attempt to use and the peer MAY support. If the peer does not support these methods, the connection will still be established.\n */\n optionalMethods?: string[];\n events?: string[];\n optionalEvents?: string[];\n rpcMap?: EthereumRpcMap;\n metadata?: Metadata;\n showQrModal?: boolean;\n}\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 public modal?: Web3Modal;\n\n private rpc: EthereumRpcConfig;\n private readonly STORAGE_KEY = STORAGE_KEY;\n\n constructor() {\n // assigned during initialize\n this.signer = {} as InstanceType<typeof UniversalProvider>;\n this.rpc = {} as EthereumRpcConfig;\n }\n\n static async init(opts: EthereumProviderOptions): Promise<EthereumProvider> {\n const provider = new EthereumProvider();\n await provider.initialize(opts);\n return provider;\n }\n\n public async request<T = unknown>(args: RequestArguments): Promise<T> {\n return await this.signer.request(args, this.formatChainId(this.chainId));\n }\n\n public sendAsync(\n args: RequestArguments,\n callback: (error: Error | null, response: any) => void,\n ): void {\n this.signer.sendAsync(args, callback, this.formatChainId(this.chainId));\n }\n\n get connected(): boolean {\n if (!this.signer.client) return false;\n return this.signer.client.core.relayer.connected;\n }\n\n get connecting(): boolean {\n if (!this.signer.client) return false;\n return this.signer.client.core.relayer.connecting;\n }\n\n public async enable(): Promise<ProviderAccounts> {\n if (!this.session) await this.connect();\n const accounts = await this.request({ method: \"eth_requestAccounts\" });\n return accounts as ProviderAccounts;\n }\n\n public async connect(opts?: ConnectOps): Promise<void> {\n if (!this.signer.client) {\n throw new Error(\"Provider not initialized. Call init() first\");\n }\n\n this.loadConnectOpts(opts);\n const { required, optional } = buildNamespaces(this.rpc);\n try {\n const session = await new Promise<SessionTypes.Struct | undefined>(\n async (resolve, reject) => {\n if (this.rpc.showQrModal) {\n this.modal?.subscribeModal((state) => {\n // the modal was closed so reject the promise\n if (!state.open && !this.signer.session)\n reject(new Error(\"User rejected the request.\"));\n });\n }\n const session = await this.signer.connect({\n namespaces: {\n [this.namespace]: required,\n },\n ...(optional && {\n optionalNamespaces: {\n [this.namespace]: optional,\n },\n }),\n pairingTopic: opts?.pairingTopic,\n });\n resolve(session);\n },\n );\n if (!session) return;\n this.setChainIds(this.rpc.chains);\n const accounts = getAccountsFromNamespaces(session.namespaces, [this.namespace]);\n this.setAccounts(accounts);\n this.events.emit(\"connect\", { chainId: this.chainId, accounts: this.accounts });\n } catch (error) {\n this.signer.logger.error(error);\n throw error;\n } finally {\n if (this.modal) this.modal.closeModal();\n }\n }\n\n public async disconnect(): Promise<void> {\n if (this.session) {\n await this.signer.disconnect();\n }\n this.reset();\n }\n\n public on(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: SignClientTypes.EventArguments[\"session_event\"]) => {\n const { params } = payload;\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(this.formatChainId(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(\"chainChanged\", (chainId: number) => {\n this.chainId = chainId;\n this.events.emit(\"chainChanged\", chainId);\n this.persist();\n });\n\n this.signer.on(\n \"session_update\",\n (payload: SignClientTypes.EventArguments[\"session_update\"]) => {\n this.events.emit(\"session_update\", payload);\n },\n );\n\n this.signer.on(\n \"session_delete\",\n (payload: SignClientTypes.EventArguments[\"session_delete\"]) => {\n this.reset();\n this.events.emit(\"session_delete\", payload);\n },\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));\n if (chainIds.length) {\n this.chainId = chainIds[0];\n this.events.emit(\"chainChanged\", this.chainId);\n this.persist();\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 }\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 optionalChains: opts.optionalChains\n ? opts.optionalChains.map((chain) => this.formatChainId(chain))\n : undefined,\n methods: opts?.methods || signerMethods,\n events: opts?.events || signerEvents,\n optionalMethods: opts?.optionalMethods || [],\n optionalEvents: opts?.optionalEvents || [],\n rpcMap:\n opts?.rpcMap ||\n this.buildRpcMap(opts.chains.concat(opts.optionalChains || []), opts.projectId),\n showQrModal: 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 await this.loadPersistedSession();\n if (this.rpc.showQrModal) {\n const { Web3Modal } = await import(\"@web3modal/standalone\");\n this.modal = new Web3Modal({\n walletConnectVersion: 2,\n projectId: this.rpc.projectId,\n standaloneChains: this.rpc.chains,\n });\n }\n }\n\n private loadConnectOpts(opts?: ConnectOps) {\n if (!opts) return;\n const { chains, optionalChains, rpcMap } = opts;\n if (chains && isValidArray(chains)) {\n this.rpc.chains = chains.map((chain) => this.formatChainId(chain));\n chains.forEach((chain) => {\n this.rpc.rpcMap[chain] = rpcMap?.[chain] || this.getRpcUrl(chain);\n });\n }\n if (optionalChains && isValidArray(optionalChains)) {\n this.rpc.optionalChains = [];\n this.rpc.optionalChains = optionalChains?.map((chain) => this.formatChainId(chain));\n optionalChains.forEach((chain) => {\n this.rpc.rpcMap[chain] = rpcMap?.[chain] || this.getRpcUrl(chain);\n });\n }\n }\n\n 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 private async loadPersistedSession() {\n if (!this.session) return;\n const chainId = await this.signer.client.core.storage.getItem(`${this.STORAGE_KEY}/chainId`);\n this.setChainIds(\n chainId ? [this.formatChainId(chainId)] : this.session.namespaces[this.namespace].accounts,\n );\n this.setAccounts(this.session.namespaces[this.namespace].accounts);\n }\n\n private reset() {\n this.chainId = 1;\n this.accounts = [];\n }\n\n private persist() {\n if (!this.session) return;\n this.signer.client.core.storage.setItem(`${this.STORAGE_KEY}/chainId`, this.chainId);\n }\n}\n\nexport default EthereumProvider;\n","import { EthereumProvider as Provider } from \"./EthereumProvider\";\nexport const EthereumProvider = Provider;\nexport default Provider;\n"],"names":["chains","params","optionalChains","methods","optionalMethods","events","optionalEvents","rpcMap","isValidArray","requiredChains","requriedMethods","requiredEvents","requiredRpcMap","required","eventsRequiringPermissions","event","methodsRequiringPermissions","shouldIncludeRequiredChains","optional","EthereumProvider","EventEmitter","STORAGE_KEY","opts","provider","args","callback","session","resolve","reject","_a","state","__spreadProps","__spreadValues","accounts","getAccountsFromNamespaces","error","listener","payload","chainId","uri","formattedChain","chainIds","x","c","chain","account","namespace","reference","address","_b","projectId","map","UniversalProvider","Web3Modal","Provider"],"mappings":"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"}
|