@wagmi/connectors 4.0.0-alpha.3 → 4.0.0-alpha.5

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.
@@ -1,2 +1,2 @@
1
- export const version = '4.0.0-alpha.3';
1
+ export const version = '4.0.0-alpha.5';
2
2
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"coinbaseWallet.d.ts","sourceRoot":"","sources":["../../src/coinbaseWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,sBAAsB,EAC3B,iBAAiB,EAClB,MAAM,sBAAsB,CAAA;AAM7B,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AASnE,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAC7C,OAAO,CACL,IAAI,CACF,qBAAqB,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAClD,oBAAoB,CACrB,CACF,GAAG;IACF;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC/B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CACzC,CACF,CAAA;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,wBAAwB,2EAmKlE"}
1
+ {"version":3,"file":"coinbaseWallet.d.ts","sourceRoot":"","sources":["../../src/coinbaseWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,sBAAsB,EAC3B,iBAAiB,EAClB,MAAM,sBAAsB,CAAA;AAM7B,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AASnE,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAC7C,OAAO,CACL,IAAI,CACF,qBAAqB,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAClD,oBAAoB,CACrB,CACF,GAAG;IACF;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC/B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CACzC,CACF,CAAA;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,wBAAwB,2EAiKlE"}
@@ -1,5 +1,5 @@
1
+ export { type InjectedParameters, injected, type MockParameters, mock, } from '@wagmi/core/internal';
1
2
  export { type CoinbaseWalletParameters, coinbaseWallet, } from '../coinbaseWallet.js';
2
- export { type InjectedParameters, injected } from '../injected.js';
3
3
  export { type LedgerParameters, ledger } from '../ledger.js';
4
4
  export { type SafeParameters, safe } from '../safe.js';
5
5
  export { type WalletConnectParameters, walletConnect, } from '../walletConnect.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/exports/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,wBAAwB,EAC7B,cAAc,GACf,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,KAAK,kBAAkB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAElE,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAE5D,OAAO,EAAE,KAAK,cAAc,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEtD,OAAO,EACL,KAAK,uBAAuB,EAC5B,aAAa,GACd,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/exports/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EACvB,QAAQ,EACR,KAAK,cAAc,EACnB,IAAI,GACL,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EACL,KAAK,wBAAwB,EAC7B,cAAc,GACf,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAE5D,OAAO,EAAE,KAAK,cAAc,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEtD,OAAO,EACL,KAAK,uBAAuB,EAC5B,aAAa,GACd,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA"}
@@ -12,7 +12,7 @@ export type SafeParameters = Evaluate<Opts & {
12
12
  */
13
13
  shimDisconnect?: boolean | undefined;
14
14
  }>;
15
- export declare function safe(parameters?: SafeParameters): import("@wagmi/core").CreateConnectorFn<SafeAppProvider, {}, {
16
- 'safe.shimDisconnect': true;
15
+ export declare function safe(parameters?: SafeParameters): import("@wagmi/core").CreateConnectorFn<SafeAppProvider | undefined, {}, {
16
+ 'safe.disconnected': true;
17
17
  }>;
18
18
  //# sourceMappingURL=safe.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"safe.d.ts","sourceRoot":"","sources":["../../src/safe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AACjE,OAAO,EAAE,KAAK,IAAI,EAA0B,MAAM,4BAA4B,CAAA;AAG9E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAGpD,MAAM,MAAM,cAAc,GAAG,QAAQ,CACnC,IAAI,GAAG;IACL;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CACrC,CACF,CAAA;AAED,wBAAgB,IAAI,CAAC,UAAU,GAAE,cAAmB;2BAGN,IAAI;GAyFjD"}
1
+ {"version":3,"file":"safe.d.ts","sourceRoot":"","sources":["../../src/safe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AACjE,OAAO,EAAE,KAAK,IAAI,EAA0B,MAAM,4BAA4B,CAAA;AAM9E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAGpD,MAAM,MAAM,cAAc,GAAG,QAAQ,CACnC,IAAI,GAAG;IACL;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CACrC,CACF,CAAA;AAED,wBAAgB,IAAI,CAAC,UAAU,GAAE,cAAmB;yBAKR,IAAI;GAwF/C"}
@@ -1,2 +1,2 @@
1
- export declare const version = "4.0.0-alpha.3";
1
+ export declare const version = "4.0.0-alpha.5";
2
2
  //# sourceMappingURL=version.d.ts.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@wagmi/connectors",
3
3
  "description": "Collection of connectors for Wagmi",
4
- "version": "4.0.0-alpha.3",
4
+ "version": "4.0.0-alpha.5",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
@@ -29,8 +29,8 @@
29
29
  },
30
30
  "peerDependencies": {
31
31
  "typescript": ">=5",
32
- "viem": ">2.0.0-alpha.9",
33
- "@wagmi/core": "2.0.0-alpha.3"
32
+ "viem": "2.0.0-alpha.12",
33
+ "@wagmi/core": "2.0.0-alpha.5"
34
34
  },
35
35
  "peerDependenciesMeta": {
36
36
  "typescript": {
@@ -47,8 +47,8 @@
47
47
  },
48
48
  "devDependencies": {
49
49
  "lokijs": "^1.5.12",
50
- "msw": "^1.3.0",
51
- "@wagmi/core": "2.0.0-alpha.3"
50
+ "msw": "^1.3.1",
51
+ "@wagmi/core": "2.0.0-alpha.5"
52
52
  },
53
53
  "contributors": [
54
54
  "awkweb.eth <t@wagmi.sh>",
@@ -48,7 +48,7 @@ export function coinbaseWallet(parameters: CoinbaseWalletParameters) {
48
48
  type Properties = {}
49
49
 
50
50
  let sdk: CoinbaseWalletSDK | undefined
51
- let provider_: Provider | undefined
51
+ let walletProvider: Provider | undefined
52
52
 
53
53
  return createConnector<Provider, Properties>((config) => ({
54
54
  id: 'coinbaseWalletSDK',
@@ -61,6 +61,7 @@ export function coinbaseWallet(parameters: CoinbaseWalletParameters) {
61
61
  method: 'eth_requestAccounts',
62
62
  })) as string[]
63
63
  ).map(getAddress)
64
+
64
65
  provider.on('accountsChanged', this.onAccountsChanged)
65
66
  provider.on('chainChanged', this.onChainChanged)
66
67
  provider.on('disconnect', this.onDisconnect.bind(this))
@@ -103,14 +104,15 @@ export function coinbaseWallet(parameters: CoinbaseWalletParameters) {
103
104
  })
104
105
  ).map(getAddress)
105
106
  },
107
+ async getChainId() {
108
+ const provider = await this.getProvider()
109
+ return normalizeChainId(provider.chainId)
110
+ },
106
111
  async getProvider() {
107
- if (!provider_) {
112
+ if (!walletProvider) {
108
113
  sdk = new CoinbaseWalletSDK({ reloadOnDisconnect, ...parameters })
109
114
 
110
- /**
111
- * Mock implementations to retrieve private `walletExtension` method
112
- * from the Coinbase Wallet SDK.
113
- */
115
+ // Mock implementations to retrieve private `walletExtension` method from the Coinbase Wallet SDK.
114
116
  abstract class WalletProvider {
115
117
  // https://github.com/coinbase/coinbase-wallet-sdk/blob/b4cca90022ffeb46b7bbaaab9389a33133fe0844/packages/wallet-sdk/src/provider/CoinbaseWalletProvider.ts#L927-L936
116
118
  abstract getChainId(): number
@@ -133,13 +135,9 @@ export function coinbaseWallet(parameters: CoinbaseWalletParameters) {
133
135
  const jsonRpcUrl =
134
136
  parameters.jsonRpcUrl || chain?.rpcUrls.default.http[0]
135
137
 
136
- provider_ = sdk.makeWeb3Provider(jsonRpcUrl, chainId)
138
+ walletProvider = sdk.makeWeb3Provider(jsonRpcUrl, chainId)
137
139
  }
138
- return provider_
139
- },
140
- async getChainId() {
141
- const provider = await this.getProvider()
142
- return normalizeChainId(provider.chainId)
140
+ return walletProvider
143
141
  },
144
142
  async isAuthorized() {
145
143
  try {
@@ -1,10 +1,15 @@
1
+ export {
2
+ type InjectedParameters,
3
+ injected,
4
+ type MockParameters,
5
+ mock,
6
+ } from '@wagmi/core/internal'
7
+
1
8
  export {
2
9
  type CoinbaseWalletParameters,
3
10
  coinbaseWallet,
4
11
  } from '../coinbaseWallet.js'
5
12
 
6
- export { type InjectedParameters, injected } from '../injected.js'
7
-
8
13
  export { type LedgerParameters, ledger } from '../ledger.js'
9
14
 
10
15
  export { type SafeParameters, safe } from '../safe.js'
package/src/ledger.ts CHANGED
@@ -137,7 +137,7 @@ export function ledger(parameters: LedgerParameters = {}) {
137
137
  walletConnectVersion: 2,
138
138
  })
139
139
 
140
- return (await connectKit.getProvider()) as unknown as EthereumProvider
140
+ return connectKit.getProvider()
141
141
  }
142
142
 
143
143
  if (!provider_) {
package/src/safe.ts CHANGED
@@ -1,7 +1,10 @@
1
1
  import { SafeAppProvider } from '@safe-global/safe-apps-provider'
2
2
  import { type Opts, default as SafeAppsSDK } from '@safe-global/safe-apps-sdk'
3
- import { ProviderNotFoundError } from '@wagmi/core'
4
- import { createConnector, normalizeChainId } from '@wagmi/core'
3
+ import {
4
+ ProviderNotFoundError,
5
+ createConnector,
6
+ normalizeChainId,
7
+ } from '@wagmi/core'
5
8
  import type { Evaluate } from '@wagmi/core/internal'
6
9
  import { getAddress } from 'viem'
7
10
 
@@ -20,11 +23,11 @@ export type SafeParameters = Evaluate<
20
23
  >
21
24
 
22
25
  export function safe(parameters: SafeParameters = {}) {
23
- type Provider = SafeAppProvider
24
- type Properties = {}
25
- type StorageItem = { 'safe.shimDisconnect': true }
26
+ const { shimDisconnect = false } = parameters
26
27
 
27
- const shimDisconnectStorageKey = 'safe.shimDisconnect'
28
+ type Provider = SafeAppProvider | undefined
29
+ type Properties = {}
30
+ type StorageItem = { 'safe.disconnected': true }
28
31
 
29
32
  let provider_: Provider | undefined
30
33
  let SDK: typeof SafeAppsSDK.default
@@ -40,11 +43,6 @@ export function safe(parameters: SafeParameters = {}) {
40
43
  id: 'safe',
41
44
  name: 'Safe',
42
45
  async connect() {
43
- // Only allowed in iframe context
44
- const isIframe =
45
- typeof window !== 'undefined' && window?.parent !== window
46
- if (!isIframe) throw new ProviderNotFoundError()
47
-
48
46
  const provider = await this.getProvider()
49
47
  if (!provider) throw new ProviderNotFoundError()
50
48
 
@@ -53,19 +51,20 @@ export function safe(parameters: SafeParameters = {}) {
53
51
 
54
52
  provider.on('disconnect', this.onDisconnect.bind(this))
55
53
 
56
- // Add shim to storage signalling wallet is connected
57
- if (parameters.shimDisconnect)
58
- await config.storage?.setItem(shimDisconnectStorageKey, true)
54
+ // Remove disconnected shim if it exists
55
+ if (shimDisconnect) await config.storage?.removeItem('safe.disconnected')
59
56
 
60
57
  return { accounts, chainId }
61
58
  },
62
59
  async disconnect() {
63
60
  const provider = await this.getProvider()
61
+ if (!provider) throw new ProviderNotFoundError()
62
+
64
63
  provider.removeListener('disconnect', this.onDisconnect.bind(this))
65
64
 
66
- // Remove shim signalling wallet is disconnected
67
- if (parameters.shimDisconnect)
68
- await config.storage?.removeItem(shimDisconnectStorageKey)
65
+ // Add shim signalling connector is disconnected
66
+ if (shimDisconnect)
67
+ await config.storage?.setItem('safe.disconnected', true)
69
68
  },
70
69
  async getAccounts() {
71
70
  const provider = await this.getProvider()
@@ -75,6 +74,11 @@ export function safe(parameters: SafeParameters = {}) {
75
74
  )
76
75
  },
77
76
  async getProvider() {
77
+ // Only allowed in iframe context
78
+ const isIframe =
79
+ typeof window !== 'undefined' && window?.parent !== window
80
+ if (!isIframe) return
81
+
78
82
  if (!provider_) {
79
83
  const safe = await sdk.safe.getInfo()
80
84
  if (!safe) throw new Error('Could not load Safe information')
@@ -90,9 +94,9 @@ export function safe(parameters: SafeParameters = {}) {
90
94
  async isAuthorized() {
91
95
  try {
92
96
  const isDisconnected =
93
- parameters.shimDisconnect &&
94
- // If shim does not exist in storage, wallet is disconnected
95
- !(await config.storage?.getItem(shimDisconnectStorageKey))
97
+ shimDisconnect &&
98
+ // If shim exists in storage, connector is disconnected
99
+ (await config.storage?.getItem('safe.disconnected'))
96
100
  if (isDisconnected) return false
97
101
 
98
102
  const accounts = await this.getAccounts()
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = '4.0.0-alpha.3'
1
+ export const version = '4.0.0-alpha.5'
@@ -1,374 +0,0 @@
1
- import { ChainNotConfiguredError, ProviderNotFoundError, createConnector, normalizeChainId, } from '@wagmi/core';
2
- import { ProviderRpcError, ResourceUnavailableRpcError, RpcError, SwitchChainError, UserRejectedRequestError, getAddress, numberToHex, } from 'viem';
3
- const targetMap = {
4
- coinbaseWallet: {
5
- name: 'Coinbase Wallet',
6
- provider(window) {
7
- if (window?.coinbaseWalletExtension)
8
- return window.coinbaseWalletExtension;
9
- return findProvider(window, 'isCoinbaseWallet');
10
- },
11
- },
12
- metaMask: {
13
- name: 'MetaMask',
14
- provider(window) {
15
- return findProvider(window, (provider) => {
16
- if (!provider.isMetaMask)
17
- return false;
18
- // Brave tries to make itself look like MetaMask
19
- // Could also try RPC `web3_clientVersion` if following is unreliable
20
- if (provider.isBraveWallet && !provider._events && !provider._state)
21
- return false;
22
- // Other wallets that try to look like MetaMask
23
- const flags = [
24
- 'isApexWallet',
25
- 'isAvalanche',
26
- 'isBitKeep',
27
- 'isBlockWallet',
28
- 'isKuCoinWallet',
29
- 'isMathWallet',
30
- 'isOkxWallet',
31
- 'isOKExWallet',
32
- 'isOneInchIOSWallet',
33
- 'isOneInchAndroidWallet',
34
- 'isOpera',
35
- 'isPortal',
36
- 'isRabby',
37
- 'isTokenPocket',
38
- 'isTokenary',
39
- 'isZerion',
40
- ];
41
- for (const flag of flags)
42
- if (provider[flag])
43
- return false;
44
- return true;
45
- });
46
- },
47
- },
48
- phantom: {
49
- name: 'Phantom',
50
- provider(window) {
51
- if (window?.phantom?.ethereum)
52
- return window.phantom?.ethereum;
53
- return findProvider(window, 'isPhantom');
54
- },
55
- },
56
- };
57
- export function injected(parameters = {}) {
58
- const { shimDisconnect = true, unstable_shimAsyncInject } = parameters;
59
- function getTarget() {
60
- const target = parameters.target;
61
- if (typeof target === 'function') {
62
- const result = target();
63
- if (result)
64
- return result;
65
- }
66
- if (typeof target === 'object')
67
- return target;
68
- if (typeof target === 'string')
69
- return {
70
- ...(targetMap[target] ?? {
71
- name: `${target[0].toUpperCase()}${target.slice(1)}`,
72
- provider: `is${target[0].toUpperCase()}${target.slice(1)}`,
73
- }),
74
- id: target,
75
- };
76
- return {
77
- id: 'injected',
78
- name: 'Injected',
79
- provider(window) {
80
- return window?.ethereum;
81
- },
82
- };
83
- }
84
- return createConnector((config) => ({
85
- get id() {
86
- return getTarget().id;
87
- },
88
- get name() {
89
- return getTarget().name;
90
- },
91
- async setup() {
92
- const provider = await this.getProvider();
93
- // Only start listening for events if `target` is set, otherwise `injected()` will also receive events
94
- if (provider && parameters.target) {
95
- provider.on('accountsChanged', this.onAccountsChanged.bind(this));
96
- provider.on('connect', this.onConnect.bind(this));
97
- }
98
- },
99
- async connect({ chainId } = {}) {
100
- const provider = await this.getProvider();
101
- if (!provider)
102
- throw new ProviderNotFoundError();
103
- // Attempt to show select prompt with `wallet_requestPermissions` when
104
- // `shimDisconnect` is active and account is in disconnected state (flag in storage)
105
- const isDisconnected = shimDisconnect &&
106
- !(await config.storage?.getItem(`${this.id}.connected`));
107
- let accounts = null;
108
- if (isDisconnected) {
109
- accounts = await this.getAccounts().catch(() => null);
110
- const isAuthorized = !!accounts?.length;
111
- if (isAuthorized)
112
- // Attempt to show another prompt for selecting connector if already connected
113
- try {
114
- const permissions = await provider.request({
115
- method: 'wallet_requestPermissions',
116
- params: [{ eth_accounts: {} }],
117
- });
118
- accounts = permissions[0]?.caveats?.[0]?.value?.map(getAddress);
119
- }
120
- catch (err) {
121
- const error = err;
122
- // Not all injected providers support `wallet_requestPermissions` (e.g. MetaMask iOS).
123
- // Only bubble up error if user rejects request
124
- if (error.code === UserRejectedRequestError.code)
125
- throw new UserRejectedRequestError(error);
126
- // Or prompt is already open
127
- if (error.code === ResourceUnavailableRpcError.code)
128
- throw error;
129
- }
130
- }
131
- try {
132
- if (!accounts?.length) {
133
- const requestedAccounts = await provider.request({
134
- method: 'eth_requestAccounts',
135
- });
136
- accounts = requestedAccounts.map(getAddress);
137
- }
138
- provider.removeListener('connect', this.onConnect.bind(this));
139
- provider.on('accountsChanged', this.onAccountsChanged.bind(this));
140
- provider.on('chainChanged', this.onChainChanged);
141
- provider.on('disconnect', this.onDisconnect.bind(this));
142
- // Switch to chain if provided
143
- let currentChainId = await this.getChainId();
144
- if (chainId && currentChainId !== chainId) {
145
- const chain = await this.switchChain?.({ chainId }).catch(() => ({
146
- id: currentChainId,
147
- }));
148
- currentChainId = chain?.id ?? currentChainId;
149
- }
150
- // Add shim to storage signalling connector is connected
151
- if (shimDisconnect)
152
- await config.storage?.setItem(`${this.id}.connected`, true);
153
- return { accounts, chainId: currentChainId };
154
- }
155
- catch (err) {
156
- const error = err;
157
- if (error.code === UserRejectedRequestError.code)
158
- throw new UserRejectedRequestError(error);
159
- if (error.code === ResourceUnavailableRpcError.code)
160
- throw new ResourceUnavailableRpcError(error);
161
- throw error;
162
- }
163
- },
164
- async disconnect() {
165
- const provider = await this.getProvider();
166
- if (!provider)
167
- throw new ProviderNotFoundError();
168
- provider.removeListener('accountsChanged', this.onAccountsChanged.bind(this));
169
- provider.removeListener('chainChanged', this.onChainChanged);
170
- provider.removeListener('disconnect', this.onDisconnect.bind(this));
171
- provider.on('connect', this.onConnect.bind(this));
172
- // Remove shim signalling connector is disconnected
173
- if (shimDisconnect)
174
- await config.storage?.removeItem(`${this.id}.connected`);
175
- },
176
- async getAccounts() {
177
- const provider = await this.getProvider();
178
- if (!provider)
179
- throw new ProviderNotFoundError();
180
- const accounts = await provider.request({ method: 'eth_accounts' });
181
- return accounts.map(getAddress);
182
- },
183
- async getChainId() {
184
- const provider = await this.getProvider();
185
- if (!provider)
186
- throw new ProviderNotFoundError();
187
- const hexChainId = await provider.request({ method: 'eth_chainId' });
188
- return normalizeChainId(hexChainId);
189
- },
190
- async getProvider() {
191
- if (typeof window === 'undefined')
192
- return undefined;
193
- const target = getTarget();
194
- if (typeof target.provider === 'function')
195
- return target.provider(window);
196
- return findProvider(window, target.provider);
197
- },
198
- async isAuthorized() {
199
- try {
200
- const isDisconnected = shimDisconnect &&
201
- // If shim does not exist in storage, connector is disconnected
202
- !(await config.storage?.getItem(`${this.id}.connected`));
203
- if (isDisconnected)
204
- return false;
205
- const provider = await this.getProvider();
206
- if (!provider) {
207
- if (unstable_shimAsyncInject !== undefined &&
208
- unstable_shimAsyncInject !== false) {
209
- // If no provider is found, check for async injection
210
- // https://github.com/wagmi-dev/references/issues/167
211
- // https://github.com/MetaMask/detect-provider
212
- const handleEthereum = async () => {
213
- if (typeof window !== 'undefined')
214
- window.removeEventListener('ethereum#initialized', handleEthereum);
215
- const provider = await this.getProvider();
216
- return !!provider;
217
- };
218
- const timeout = typeof unstable_shimAsyncInject === 'number'
219
- ? unstable_shimAsyncInject
220
- : 1000;
221
- const res = await Promise.race([
222
- ...(typeof window !== 'undefined'
223
- ? [
224
- new Promise((resolve) => window.addEventListener('ethereum#initialized', () => resolve(handleEthereum()), { once: true })),
225
- ]
226
- : []),
227
- new Promise((resolve) => setTimeout(() => resolve(handleEthereum()), timeout)),
228
- ]);
229
- if (res)
230
- return true;
231
- }
232
- throw new ProviderNotFoundError();
233
- }
234
- const accounts = await this.getAccounts();
235
- return !!accounts.length;
236
- }
237
- catch {
238
- return false;
239
- }
240
- },
241
- async switchChain({ chainId }) {
242
- const provider = await this.getProvider();
243
- if (!provider)
244
- throw new ProviderNotFoundError();
245
- const chain = config.chains.find((x) => x.id === chainId);
246
- if (!chain)
247
- throw new SwitchChainError(new ChainNotConfiguredError());
248
- const id = numberToHex(chainId);
249
- try {
250
- await Promise.all([
251
- provider.request({
252
- method: 'wallet_switchEthereumChain',
253
- params: [{ chainId: id }],
254
- }),
255
- new Promise((resolve) => config.emitter.once('change', ({ chainId: currentChainId }) => {
256
- if (currentChainId === chainId)
257
- resolve();
258
- })),
259
- ]);
260
- return chain;
261
- }
262
- catch (err) {
263
- const error = err;
264
- // Indicates chain is not added to provider
265
- if (error.code === 4902 ||
266
- // Unwrapping for MetaMask Mobile
267
- // https://github.com/MetaMask/metamask-mobile/issues/2944#issuecomment-976988719
268
- error
269
- ?.data?.originalError?.code === 4902) {
270
- try {
271
- const { default: blockExplorer, ...blockExplorers } = chain.blockExplorers ?? {};
272
- let blockExplorerUrls = [];
273
- if (blockExplorer)
274
- blockExplorerUrls = [
275
- blockExplorer.url,
276
- ...Object.values(blockExplorers).map((x) => x.url),
277
- ];
278
- await provider.request({
279
- method: 'wallet_addEthereumChain',
280
- params: [
281
- {
282
- chainId: id,
283
- chainName: chain.name,
284
- nativeCurrency: chain.nativeCurrency,
285
- rpcUrls: [chain.rpcUrls.public?.http[0] ?? ''],
286
- blockExplorerUrls,
287
- },
288
- ],
289
- });
290
- const currentChainId = await this.getChainId();
291
- if (currentChainId !== chainId)
292
- throw new UserRejectedRequestError(new Error('User rejected switch after adding network.'));
293
- return chain;
294
- }
295
- catch (error) {
296
- throw new UserRejectedRequestError(error);
297
- }
298
- }
299
- if (error.code === UserRejectedRequestError.code)
300
- throw new UserRejectedRequestError(error);
301
- throw new SwitchChainError(error);
302
- }
303
- },
304
- async onAccountsChanged(accounts) {
305
- // Disconnect if there are no accounts
306
- if (accounts.length === 0)
307
- this.onDisconnect();
308
- // Connect if emitter is listening for connect event (e.g. is disconnected)
309
- else if (config.emitter.listenerCount('connect')) {
310
- const chainId = (await this.getChainId()).toString();
311
- this.onConnect({ chainId });
312
- }
313
- // Regular change event
314
- else
315
- config.emitter.emit('change', { accounts: accounts.map(getAddress) });
316
- },
317
- onChainChanged(chain) {
318
- const chainId = normalizeChainId(chain);
319
- config.emitter.emit('change', { chainId });
320
- },
321
- async onConnect(connectInfo) {
322
- const accounts = await this.getAccounts();
323
- if (accounts.length === 0)
324
- return;
325
- const chainId = normalizeChainId(connectInfo.chainId);
326
- config.emitter.emit('connect', { accounts, chainId });
327
- const provider = await this.getProvider();
328
- if (provider) {
329
- provider.removeListener('connect', this.onConnect.bind(this));
330
- provider.on('accountsChanged', this.onAccountsChanged.bind(this));
331
- provider.on('chainChanged', this.onChainChanged);
332
- provider.on('disconnect', this.onDisconnect.bind(this));
333
- }
334
- // Add shim to storage signalling connector is connected
335
- if (shimDisconnect)
336
- await config.storage?.setItem(`${this.id}.connected`, true);
337
- },
338
- async onDisconnect(error) {
339
- const provider = await this.getProvider();
340
- // If MetaMask emits a `code: 1013` error, wait for reconnection before disconnecting
341
- // https://github.com/MetaMask/providers/pull/120
342
- if (error && error.code === 1013) {
343
- if (provider && !!(await this.getAccounts()).length)
344
- return;
345
- }
346
- // No need to remove `shimDisconnectStorageKey` from storage because `onDisconnect` is typically
347
- // only called when the wallet is disconnected through the wallet's interface, meaning the wallet
348
- // actually disconnected and we don't need to simulate it.
349
- config.emitter.emit('disconnect');
350
- if (provider) {
351
- provider.removeListener('accountsChanged', this.onAccountsChanged.bind(this));
352
- provider.removeListener('chainChanged', this.onChainChanged);
353
- provider.removeListener('disconnect', this.onDisconnect.bind(this));
354
- provider.on('connect', this.onConnect.bind(this));
355
- }
356
- },
357
- }));
358
- }
359
- function findProvider(window, select) {
360
- function isProvider(provider) {
361
- if (typeof select === 'function')
362
- return select(provider);
363
- if (typeof select === 'string')
364
- return provider[select];
365
- return true;
366
- }
367
- const ethereum = window.ethereum;
368
- if (ethereum?.providers)
369
- return ethereum.providers.find((provider) => isProvider(provider));
370
- if (ethereum && isProvider(ethereum))
371
- return ethereum;
372
- return undefined;
373
- }
374
- //# sourceMappingURL=injected.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"injected.js","sourceRoot":"","sources":["../../src/injected.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,GACjB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAIL,gBAAgB,EAChB,2BAA2B,EAC3B,QAAQ,EACR,gBAAgB,EAChB,wBAAwB,EACxB,UAAU,EACV,WAAW,GACZ,MAAM,MAAM,CAAA;AAoBb,MAAM,SAAS,GAAG;IAChB,cAAc,EAAE;QACd,IAAI,EAAE,iBAAiB;QACvB,QAAQ,CAAC,MAAM;YACb,IAAI,MAAM,EAAE,uBAAuB;gBAAE,OAAO,MAAM,CAAC,uBAAuB,CAAA;YAC1E,OAAO,YAAY,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;QACjD,CAAC;KACF;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,QAAQ,CAAC,MAAM;YACb,OAAO,YAAY,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE;gBACvC,IAAI,CAAC,QAAQ,CAAC,UAAU;oBAAE,OAAO,KAAK,CAAA;gBACtC,gDAAgD;gBAChD,qEAAqE;gBACrE,IAAI,QAAQ,CAAC,aAAa,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM;oBACjE,OAAO,KAAK,CAAA;gBACd,+CAA+C;gBAC/C,MAAM,KAAK,GAA0B;oBACnC,cAAc;oBACd,aAAa;oBACb,WAAW;oBACX,eAAe;oBACf,gBAAgB;oBAChB,cAAc;oBACd,aAAa;oBACb,cAAc;oBACd,oBAAoB;oBACpB,wBAAwB;oBACxB,SAAS;oBACT,UAAU;oBACV,SAAS;oBACT,eAAe;oBACf,YAAY;oBACZ,UAAU;iBACX,CAAA;gBACD,KAAK,MAAM,IAAI,IAAI,KAAK;oBAAE,IAAI,QAAQ,CAAC,IAAI,CAAC;wBAAE,OAAO,KAAK,CAAA;gBAC1D,OAAO,IAAI,CAAA;YACb,CAAC,CAAC,CAAA;QACJ,CAAC;KACF;IACD,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,QAAQ,CAAC,MAAM;YACb,IAAI,MAAM,EAAE,OAAO,EAAE,QAAQ;gBAAE,OAAO,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAA;YAC9D,OAAO,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;QAC1C,CAAC;KACF;CAC2B,CAAA;AAE9B,MAAM,UAAU,QAAQ,CAAC,aAAiC,EAAE;IAC1D,MAAM,EAAE,cAAc,GAAG,IAAI,EAAE,wBAAwB,EAAE,GAAG,UAAU,CAAA;IAEtE,SAAS,SAAS;QAChB,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAA;QAChC,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE;YAChC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAA;YACvB,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAA;SAC1B;QAED,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAA;QAE7C,IAAI,OAAO,MAAM,KAAK,QAAQ;YAC5B,OAAO;gBACL,GAAG,CAAC,SAAS,CAAC,MAAgC,CAAC,IAAI;oBACjD,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;oBACrD,QAAQ,EAAE,KAAK,MAAM,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;iBAC5D,CAAC;gBACF,EAAE,EAAE,MAAM;aACX,CAAA;QAEH,OAAO;YACL,EAAE,EAAE,UAAU;YACd,IAAI,EAAE,UAAU;YAChB,QAAQ,CAAC,MAAM;gBACb,OAAO,MAAM,EAAE,QAAQ,CAAA;YACzB,CAAC;SACF,CAAA;IACH,CAAC;IAQD,OAAO,eAAe,CAAoC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACrE,IAAI,EAAE;YACJ,OAAO,SAAS,EAAE,CAAC,EAAE,CAAA;QACvB,CAAC;QACD,IAAI,IAAI;YACN,OAAO,SAAS,EAAE,CAAC,IAAI,CAAA;QACzB,CAAC;QACD,KAAK,CAAC,KAAK;YACT,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAA;YACzC,sGAAsG;YACtG,IAAI,QAAQ,IAAI,UAAU,CAAC,MAAM,EAAE;gBACjC,QAAQ,CAAC,EAAE,CAAC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;gBACjE,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;aAClD;QACH,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE;YAC5B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAA;YACzC,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,qBAAqB,EAAE,CAAA;YAEhD,sEAAsE;YACtE,oFAAoF;YACpF,MAAM,cAAc,GAClB,cAAc;gBACd,CAAC,CAAC,MAAM,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC,CAAA;YAE1D,IAAI,QAAQ,GAA8B,IAAI,CAAA;YAC9C,IAAI,cAAc,EAAE;gBAClB,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;gBACrD,MAAM,YAAY,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAA;gBACvC,IAAI,YAAY;oBACd,8EAA8E;oBAC9E,IAAI;wBACF,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC;4BACzC,MAAM,EAAE,2BAA2B;4BACnC,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;yBAC/B,CAAC,CAAA;wBACF,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,UAAU,CAAC,CAAA;qBAChE;oBAAC,OAAO,GAAG,EAAE;wBACZ,MAAM,KAAK,GAAG,GAAe,CAAA;wBAC7B,sFAAsF;wBACtF,+CAA+C;wBAC/C,IAAI,KAAK,CAAC,IAAI,KAAK,wBAAwB,CAAC,IAAI;4BAC9C,MAAM,IAAI,wBAAwB,CAAC,KAAK,CAAC,CAAA;wBAC3C,4BAA4B;wBAC5B,IAAI,KAAK,CAAC,IAAI,KAAK,2BAA2B,CAAC,IAAI;4BAAE,MAAM,KAAK,CAAA;qBACjE;aACJ;YAED,IAAI;gBACF,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;oBACrB,MAAM,iBAAiB,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC;wBAC/C,MAAM,EAAE,qBAAqB;qBAC9B,CAAC,CAAA;oBACF,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;iBAC7C;gBAED,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;gBAC7D,QAAQ,CAAC,EAAE,CAAC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;gBACjE,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;gBAChD,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;gBAEvD,8BAA8B;gBAC9B,IAAI,cAAc,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;gBAC5C,IAAI,OAAO,IAAI,cAAc,KAAK,OAAO,EAAE;oBACzC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;wBAC/D,EAAE,EAAE,cAAc;qBACnB,CAAC,CAAC,CAAA;oBACH,cAAc,GAAG,KAAK,EAAE,EAAE,IAAI,cAAc,CAAA;iBAC7C;gBAED,wDAAwD;gBACxD,IAAI,cAAc;oBAChB,MAAM,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,CAAA;gBAE7D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,CAAA;aAC7C;YAAC,OAAO,GAAG,EAAE;gBACZ,MAAM,KAAK,GAAG,GAAe,CAAA;gBAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,wBAAwB,CAAC,IAAI;oBAC9C,MAAM,IAAI,wBAAwB,CAAC,KAAK,CAAC,CAAA;gBAC3C,IAAI,KAAK,CAAC,IAAI,KAAK,2BAA2B,CAAC,IAAI;oBACjD,MAAM,IAAI,2BAA2B,CAAC,KAAK,CAAC,CAAA;gBAC9C,MAAM,KAAK,CAAA;aACZ;QACH,CAAC;QACD,KAAK,CAAC,UAAU;YACd,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAA;YACzC,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,qBAAqB,EAAE,CAAA;YAEhD,QAAQ,CAAC,cAAc,CACrB,iBAAiB,EACjB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAClC,CAAA;YACD,QAAQ,CAAC,cAAc,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;YAC5D,QAAQ,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;YACnE,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;YAEjD,mDAAmD;YACnD,IAAI,cAAc;gBAChB,MAAM,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAI,CAAC,EAAE,YAAY,CAAC,CAAA;QAC5D,CAAC;QACD,KAAK,CAAC,WAAW;YACf,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAA;YACzC,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,qBAAqB,EAAE,CAAA;YAChD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAA;YACnE,OAAO,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QACjC,CAAC;QACD,KAAK,CAAC,UAAU;YACd,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAA;YACzC,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,qBAAqB,EAAE,CAAA;YAChD,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAA;YACpE,OAAO,gBAAgB,CAAC,UAAU,CAAC,CAAA;QACrC,CAAC;QACD,KAAK,CAAC,WAAW;YACf,IAAI,OAAO,MAAM,KAAK,WAAW;gBAAE,OAAO,SAAS,CAAA;YACnD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;YAC1B,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,UAAU;gBACvC,OAAO,MAAM,CAAC,QAAQ,CAAC,MAA4B,CAAC,CAAA;YACtD,OAAO,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;QAC9C,CAAC;QACD,KAAK,CAAC,YAAY;YAChB,IAAI;gBACF,MAAM,cAAc,GAClB,cAAc;oBACd,+DAA+D;oBAC/D,CAAC,CAAC,MAAM,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC,CAAA;gBAC1D,IAAI,cAAc;oBAAE,OAAO,KAAK,CAAA;gBAEhC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAA;gBACzC,IAAI,CAAC,QAAQ,EAAE;oBACb,IACE,wBAAwB,KAAK,SAAS;wBACtC,wBAAwB,KAAK,KAAK,EAClC;wBACA,qDAAqD;wBACrD,qDAAqD;wBACrD,8CAA8C;wBAC9C,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE;4BAChC,IAAI,OAAO,MAAM,KAAK,WAAW;gCAC/B,MAAM,CAAC,mBAAmB,CACxB,sBAAsB,EACtB,cAAc,CACf,CAAA;4BACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAA;4BACzC,OAAO,CAAC,CAAC,QAAQ,CAAA;wBACnB,CAAC,CAAA;wBACD,MAAM,OAAO,GACX,OAAO,wBAAwB,KAAK,QAAQ;4BAC1C,CAAC,CAAC,wBAAwB;4BAC1B,CAAC,CAAC,IAAK,CAAA;wBACX,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;4BAC7B,GAAG,CAAC,OAAO,MAAM,KAAK,WAAW;gCAC/B,CAAC,CAAC;oCACE,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE,CAC/B,MAAM,CAAC,gBAAgB,CACrB,sBAAsB,EACtB,GAAG,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,EAC/B,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CACF;iCACF;gCACH,CAAC,CAAC,EAAE,CAAC;4BACP,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE,CAC/B,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,EAAE,OAAO,CAAC,CACrD;yBACF,CAAC,CAAA;wBACF,IAAI,GAAG;4BAAE,OAAO,IAAI,CAAA;qBACrB;oBAED,MAAM,IAAI,qBAAqB,EAAE,CAAA;iBAClC;gBAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAA;gBACzC,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAA;aACzB;YAAC,MAAM;gBACN,OAAO,KAAK,CAAA;aACb;QACH,CAAC;QACD,KAAK,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE;YAC3B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAA;YACzC,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,qBAAqB,EAAE,CAAA;YAEhD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAA;YACzD,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,gBAAgB,CAAC,IAAI,uBAAuB,EAAE,CAAC,CAAA;YAErE,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;YAE/B,IAAI;gBACF,MAAM,OAAO,CAAC,GAAG,CAAC;oBAChB,QAAQ,CAAC,OAAO,CAAC;wBACf,MAAM,EAAE,4BAA4B;wBACpC,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;qBAC1B,CAAC;oBACF,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAC5B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE;wBAC5D,IAAI,cAAc,KAAK,OAAO;4BAAE,OAAO,EAAE,CAAA;oBAC3C,CAAC,CAAC,CACH;iBACF,CAAC,CAAA;gBACF,OAAO,KAAK,CAAA;aACb;YAAC,OAAO,GAAG,EAAE;gBACZ,MAAM,KAAK,GAAG,GAAe,CAAA;gBAE7B,2CAA2C;gBAC3C,IACE,KAAK,CAAC,IAAI,KAAK,IAAI;oBACnB,iCAAiC;oBACjC,iFAAiF;oBAChF,KAAgE;wBAC/D,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,KAAK,IAAI,EACtC;oBACA,IAAI;wBACF,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,cAAc,EAAE,GACjD,KAAK,CAAC,cAAc,IAAI,EAAE,CAAA;wBAC5B,IAAI,iBAAiB,GAAa,EAAE,CAAA;wBACpC,IAAI,aAAa;4BACf,iBAAiB,GAAG;gCAClB,aAAa,CAAC,GAAG;gCACjB,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;6BACnD,CAAA;wBAEH,MAAM,QAAQ,CAAC,OAAO,CAAC;4BACrB,MAAM,EAAE,yBAAyB;4BACjC,MAAM,EAAE;gCACN;oCACE,OAAO,EAAE,EAAE;oCACX,SAAS,EAAE,KAAK,CAAC,IAAI;oCACrB,cAAc,EAAE,KAAK,CAAC,cAAc;oCACpC,OAAO,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oCAC9C,iBAAiB;iCAClB;6BACF;yBACF,CAAC,CAAA;wBAEF,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;wBAC9C,IAAI,cAAc,KAAK,OAAO;4BAC5B,MAAM,IAAI,wBAAwB,CAChC,IAAI,KAAK,CAAC,4CAA4C,CAAC,CACxD,CAAA;wBAEH,OAAO,KAAK,CAAA;qBACb;oBAAC,OAAO,KAAK,EAAE;wBACd,MAAM,IAAI,wBAAwB,CAAC,KAAc,CAAC,CAAA;qBACnD;iBACF;gBAED,IAAI,KAAK,CAAC,IAAI,KAAK,wBAAwB,CAAC,IAAI;oBAC9C,MAAM,IAAI,wBAAwB,CAAC,KAAK,CAAC,CAAA;gBAC3C,MAAM,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAA;aAClC;QACH,CAAC;QACD,KAAK,CAAC,iBAAiB,CAAC,QAAQ;YAC9B,sCAAsC;YACtC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,IAAI,CAAC,YAAY,EAAE,CAAA;YAC9C,2EAA2E;iBACtE,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE;gBAChD,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAA;gBACpD,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;aAC5B;YACD,uBAAuB;;gBAClB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;QAC5E,CAAC;QACD,cAAc,CAAC,KAAK;YAClB,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;YACvC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;QAC5C,CAAC;QACD,KAAK,CAAC,SAAS,CAAC,WAAW;YACzB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAA;YACzC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAM;YAEjC,MAAM,OAAO,GAAG,gBAAgB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;YACrD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAA;YAErD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAA;YACzC,IAAI,QAAQ,EAAE;gBACZ,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;gBAC7D,QAAQ,CAAC,EAAE,CAAC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;gBACjE,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;gBAChD,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;aACxD;YAED,wDAAwD;YACxD,IAAI,cAAc;gBAChB,MAAM,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,CAAA;QAC/D,CAAC;QACD,KAAK,CAAC,YAAY,CAAC,KAAK;YACtB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAA;YAEzC,qFAAqF;YACrF,iDAAiD;YACjD,IAAI,KAAK,IAAK,KAAwB,CAAC,IAAI,KAAK,IAAI,EAAE;gBACpD,IAAI,QAAQ,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM;oBAAE,OAAM;aAC5D;YAED,gGAAgG;YAChG,iGAAiG;YACjG,0DAA0D;YAC1D,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YAEjC,IAAI,QAAQ,EAAE;gBACZ,QAAQ,CAAC,cAAc,CACrB,iBAAiB,EACjB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAClC,CAAA;gBACD,QAAQ,CAAC,cAAc,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;gBAC5D,QAAQ,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;gBACnE,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;aAClD;QACH,CAAC;KACF,CAAC,CAAC,CAAA;AACL,CAAC;AAkFD,SAAS,YAAY,CACnB,MAA8C,EAC9C,MAAsE;IAEtE,SAAS,UAAU,CAAC,QAAwB;QAC1C,IAAI,OAAO,MAAM,KAAK,UAAU;YAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAA;QACzD,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAA;QACvD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,QAAQ,GAAI,MAAiB,CAAC,QAAQ,CAAA;IAC5C,IAAI,QAAQ,EAAE,SAAS;QACrB,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAA;IACpE,IAAI,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAA;IACrD,OAAO,SAAS,CAAA;AAClB,CAAC"}