@wagmi/core 2.0.0-alpha.3 → 2.0.0-alpha.4

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.
Files changed (44) hide show
  1. package/dist/esm/actions/connect.js +4 -4
  2. package/dist/esm/actions/connect.js.map +1 -1
  3. package/dist/esm/actions/disconnect.js +3 -3
  4. package/dist/esm/actions/disconnect.js.map +1 -1
  5. package/dist/esm/actions/reconnect.js +9 -5
  6. package/dist/esm/actions/reconnect.js.map +1 -1
  7. package/dist/esm/connectors/createConnector.js +8 -0
  8. package/dist/esm/connectors/createConnector.js.map +1 -0
  9. package/dist/esm/connectors/injected.js +380 -0
  10. package/dist/esm/connectors/injected.js.map +1 -0
  11. package/dist/esm/createConfig.js +40 -27
  12. package/dist/esm/createConfig.js.map +1 -1
  13. package/dist/esm/exports/index.js +4 -3
  14. package/dist/esm/exports/index.js.map +1 -1
  15. package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
  16. package/dist/esm/version.js +1 -1
  17. package/dist/types/actions/connect.d.ts +1 -1
  18. package/dist/types/actions/connect.d.ts.map +1 -1
  19. package/dist/types/actions/reconnect.d.ts +1 -1
  20. package/dist/types/actions/reconnect.d.ts.map +1 -1
  21. package/dist/types/{createConnector.d.ts → connectors/createConnector.d.ts} +5 -3
  22. package/dist/types/connectors/createConnector.d.ts.map +1 -0
  23. package/dist/types/connectors/injected.d.ts +345 -0
  24. package/dist/types/connectors/injected.d.ts.map +1 -0
  25. package/dist/types/createConfig.d.ts +8 -12
  26. package/dist/types/createConfig.d.ts.map +1 -1
  27. package/dist/types/exports/index.d.ts +2 -1
  28. package/dist/types/exports/index.d.ts.map +1 -1
  29. package/dist/types/query/connect.d.ts +1 -1
  30. package/dist/types/query/getWalletClient.d.ts +10 -10
  31. package/dist/types/query/signTypedData.d.ts +8 -8
  32. package/dist/types/version.d.ts +1 -1
  33. package/package.json +2 -1
  34. package/src/actions/connect.ts +4 -4
  35. package/src/actions/disconnect.ts +3 -3
  36. package/src/actions/reconnect.ts +9 -5
  37. package/src/{createConnector.ts → connectors/createConnector.ts} +7 -4
  38. package/src/connectors/injected.ts +533 -0
  39. package/src/createConfig.ts +60 -42
  40. package/src/exports/index.ts +14 -9
  41. package/src/version.ts +1 -1
  42. package/dist/esm/createConnector.js +0 -8
  43. package/dist/esm/createConnector.js.map +0 -1
  44. package/dist/types/createConnector.d.ts.map +0 -1
@@ -1,3 +1,4 @@
1
+ import { type EIP6963ProviderDetail, createStore as createMipd } from 'mipd'
1
2
  import {
2
3
  type Address,
3
4
  type Chain,
@@ -12,7 +13,8 @@ import { createStore } from 'zustand/vanilla'
12
13
  import {
13
14
  type ConnectorEventMap,
14
15
  type CreateConnectorFn,
15
- } from './createConnector.js'
16
+ } from './connectors/createConnector.js'
17
+ import { injected } from './connectors/injected.js'
16
18
  import { Emitter, type EventData, createEmitter } from './createEmitter.js'
17
19
  import { type Storage, createStorage, noopStorage } from './createStorage.js'
18
20
  import { ChainNotConfiguredError } from './errors/config.js'
@@ -29,7 +31,7 @@ export type CreateConfigParameters<
29
31
  {
30
32
  chains: chains
31
33
  connectors?: CreateConnectorFn[] | undefined
32
- reconnectOnMount?: boolean | undefined
34
+ multiInjectedProviderDiscovery?: boolean | undefined
33
35
  storage?: Storage | null | undefined
34
36
  syncConnectedChain?: boolean | undefined
35
37
  } & OneOf<
@@ -45,14 +47,7 @@ export type CreateConfigParameters<
45
47
  chains[number]
46
48
  >
47
49
  }
48
- > &
49
- OneOf<
50
- | {
51
- /** @deprecated Use `reconnectOnMount` instead */
52
- autoConnect?: boolean | undefined
53
- }
54
- | { reconnectOnMount?: boolean | undefined }
55
- >
50
+ >
56
51
  >
57
52
 
58
53
  export function createConfig<
@@ -62,9 +57,8 @@ export function createConfig<
62
57
  parameters: CreateConfigParameters<chains, transports>,
63
58
  ): Config<chains, transports> {
64
59
  const {
65
- autoConnect,
66
60
  chains,
67
- reconnectOnMount = autoConnect ?? true,
61
+ multiInjectedProviderDiscovery = true,
68
62
  storage = createStorage({
69
63
  storage:
70
64
  typeof window !== 'undefined' && window.localStorage
@@ -79,7 +73,17 @@ export function createConfig<
79
73
  // Set up connectors, clients, etc.
80
74
  /////////////////////////////////////////////////////////////////////////////////////////////////
81
75
 
82
- const connectors = createStore(() => (rest.connectors ?? []).map(setup))
76
+ const mipd =
77
+ typeof window !== 'undefined' && multiInjectedProviderDiscovery
78
+ ? createMipd()
79
+ : undefined
80
+
81
+ const connectors = createStore(() =>
82
+ [
83
+ ...(rest.connectors ?? []),
84
+ ...(mipd?.getProviders().map(providerDetailToConnector) ?? []),
85
+ ].map(setup),
86
+ )
83
87
  function setup(connectorFn: CreateConnectorFn) {
84
88
  // Set up emitter with uid and add to connector so they are "linked" together.
85
89
  const emitter = createEmitter<ConnectorEventMap>(uid())
@@ -89,13 +93,19 @@ export function createConfig<
89
93
  uid: emitter.uid,
90
94
  }
91
95
 
92
- // Start listening for `connect` events if `reconnectOnMount` is switched on.
96
+ // Start listening for `connect` events on connector setup
93
97
  // This allows connectors to "connect" themselves without user interaction (e.g. MetaMask's "Manually connect to current site")
94
- if (reconnectOnMount) emitter.on('connect', connect)
98
+ emitter.on('connect', connect)
95
99
  connector.setup?.()
96
100
 
97
101
  return connector
98
102
  }
103
+ function providerDetailToConnector(providerDetail: EIP6963ProviderDetail) {
104
+ const { info, provider } = providerDetail
105
+ return injected({
106
+ target: { ...info, id: info.rdns, provider: provider as any },
107
+ })
108
+ }
99
109
 
100
110
  const clients = new Map<number, Client<Transport, chains[number]>>()
101
111
  function getClient<chainId extends chains[number]['id']>(
@@ -164,9 +174,11 @@ export function createConfig<
164
174
  ? persist(() => initialState, {
165
175
  name: 'store',
166
176
  partialize(state) {
167
- return state satisfies PartializedState
177
+ return {
178
+ chainId: state.chainId,
179
+ current: state.current,
180
+ } satisfies PartializedState
168
181
  },
169
- skipHydration: !reconnectOnMount,
170
182
  storage: storage as Storage<Record<string, unknown>>,
171
183
  version: 1,
172
184
  })
@@ -195,6 +207,14 @@ export function createConfig<
195
207
  },
196
208
  )
197
209
 
210
+ // EIP-6963 subscribe for new wallet providers
211
+ mipd?.subscribe((providerDetails) => {
212
+ for (const providerDetail of providerDetails) {
213
+ const connector = setup(providerDetailToConnector(providerDetail))
214
+ connectors.setState((x) => [...x, connector])
215
+ }
216
+ })
217
+
198
218
  /////////////////////////////////////////////////////////////////////////////////////////////////
199
219
  // Emitter listeners
200
220
  /////////////////////////////////////////////////////////////////////////////////////////////////
@@ -215,8 +235,12 @@ export function createConfig<
215
235
  })
216
236
  }
217
237
  function connect(data: EventData<ConnectorEventMap, 'connect'>) {
218
- // Disable handling if reconnecting
219
- if (store.getState().status === 'reconnecting') return
238
+ // Disable handling if reconnecting/connecting
239
+ if (
240
+ store.getState().status === 'connecting' ||
241
+ store.getState().status === 'reconnecting'
242
+ )
243
+ return
220
244
 
221
245
  store.setState((x) => {
222
246
  const connector = connectors.getState().find((x) => x.uid === data.uid)
@@ -268,6 +292,7 @@ export function createConfig<
268
292
  },
269
293
  storage,
270
294
 
295
+ getClient,
271
296
  get state() {
272
297
  return store.getState() as unknown as State<chains>
273
298
  },
@@ -287,32 +312,25 @@ export function createConfig<
287
312
  return store.subscribe(
288
313
  selector as unknown as (state: State) => any,
289
314
  listener,
290
- options,
315
+ options
316
+ ? { ...options, fireImmediately: options.emitOnBegin }
317
+ : undefined,
291
318
  )
292
319
  },
293
320
 
294
- getClient,
295
-
296
321
  _internal: {
297
- reconnectOnMount,
298
322
  syncConnectedChain,
299
323
  transports: rest.transports as transports,
300
- change,
301
- connect,
302
- disconnect,
303
324
  connectors: {
304
325
  setup,
305
- setState(value) {
306
- let newState: Connector[]
307
- if (typeof value === 'function')
308
- newState = value(connectors.getState())
309
- else newState = value
310
- connectors.setState(newState, true)
311
- },
312
- subscribe(listener) {
313
- return connectors.subscribe(listener)
314
- },
326
+ setState: (value) =>
327
+ connectors.setState(
328
+ typeof value === 'function' ? value(connectors.getState()) : value,
329
+ true,
330
+ ),
331
+ subscribe: (listener) => connectors.subscribe(listener),
315
332
  },
333
+ events: { change, connect, disconnect },
316
334
  },
317
335
  }
318
336
  }
@@ -341,8 +359,8 @@ export type Config<
341
359
  listener: (state: state, previousState: state) => void,
342
360
  options?:
343
361
  | {
362
+ emitOnBegin?: boolean | undefined
344
363
  equalityFn?: ((a: state, b: state) => boolean) | undefined
345
- fireImmediately?: boolean | undefined
346
364
  }
347
365
  | undefined,
348
366
  ): () => void
@@ -352,14 +370,9 @@ export type Config<
352
370
  }): Client<transports[chainId], Extract<chains[number], { id: chainId }>>
353
371
 
354
372
  _internal: {
355
- readonly reconnectOnMount: boolean
356
373
  readonly syncConnectedChain: boolean
357
374
  readonly transports: transports
358
375
 
359
- change(data: EventData<ConnectorEventMap, 'change'>): void
360
- connect(data: EventData<ConnectorEventMap, 'connect'>): void
361
- disconnect(data: EventData<ConnectorEventMap, 'disconnect'>): void
362
-
363
376
  connectors: {
364
377
  setup(connectorFn: CreateConnectorFn): Connector
365
378
  setState(value: Connector[] | ((state: Connector[]) => Connector[])): void
@@ -370,6 +383,11 @@ export type Config<
370
383
  ) => void,
371
384
  ): () => void
372
385
  }
386
+ events: {
387
+ change(data: EventData<ConnectorEventMap, 'change'>): void
388
+ connect(data: EventData<ConnectorEventMap, 'connect'>): void
389
+ disconnect(data: EventData<ConnectorEventMap, 'disconnect'>): void
390
+ }
373
391
  }
374
392
  }
375
393
 
@@ -292,6 +292,20 @@ export {
292
292
  writeContract,
293
293
  } from '../actions/writeContract.js'
294
294
 
295
+ ////////////////////////////////////////////////////////////////////////////////
296
+ // connectors
297
+
298
+ export {
299
+ type InjectedParameters,
300
+ injected,
301
+ } from '../connectors/injected.js'
302
+
303
+ export {
304
+ type ConnectorEventMap,
305
+ type CreateConnectorFn,
306
+ createConnector,
307
+ } from '../connectors/createConnector.js'
308
+
295
309
  ////////////////////////////////////////////////////////////////////////////////
296
310
  // createConfig
297
311
 
@@ -304,15 +318,6 @@ export {
304
318
  createConfig,
305
319
  } from '../createConfig.js'
306
320
 
307
- ////////////////////////////////////////////////////////////////////////////////
308
- // createConnector
309
-
310
- export {
311
- type ConnectorEventMap,
312
- type CreateConnectorFn,
313
- createConnector,
314
- } from '../createConnector.js'
315
-
316
321
  ////////////////////////////////////////////////////////////////////////////////
317
322
  // createStorage
318
323
 
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = '2.0.0-alpha.3'
1
+ export const version = '2.0.0-alpha.4'
@@ -1,8 +0,0 @@
1
- import {} from 'viem';
2
- import { Emitter } from './createEmitter.js';
3
- import {} from './createStorage.js';
4
- import {} from './types/utils.js';
5
- export function createConnector(fn) {
6
- return fn;
7
- }
8
- //# sourceMappingURL=createConnector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createConnector.js","sourceRoot":"","sources":["../../src/createConnector.ts"],"names":[],"mappings":"AAAA,OAAO,EAMN,MAAM,MAAM,CAAA;AAEb,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAgB,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAiB,MAAM,kBAAkB,CAAA;AAqDhD,MAAM,UAAU,eAAe,CAI7B,EAAwD;IACxD,OAAO,EAAE,CAAA;AACX,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"createConnector.d.ts","sourceRoot":"","sources":["../../src/createConnector.ts"],"names":[],"mappings":"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"}