@farcaster/miniapp-wagmi-connector 1.1.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farcaster/miniapp-wagmi-connector",
3
- "version": "1.1.1",
3
+ "version": "2.0.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -17,14 +17,14 @@
17
17
  "@wagmi/core": "^2.16.3",
18
18
  "typescript": "^5.8.3",
19
19
  "viem": "^2.21.57",
20
- "@farcaster/miniapp-sdk": "0.2.3",
20
+ "@farcaster/miniapp-sdk": "0.3.0",
21
21
  "@farcaster/tsconfig": "0.1.1"
22
22
  },
23
23
  "publishConfig": {
24
24
  "access": "public"
25
25
  },
26
26
  "peerDependencies": {
27
- "@farcaster/miniapp-sdk": "^0.2.3",
27
+ "@farcaster/miniapp-sdk": "^0.3.0",
28
28
  "@wagmi/core": "^2.14.1",
29
29
  "viem": "^2.21.55"
30
30
  },
package/src/connector.ts CHANGED
@@ -8,10 +8,28 @@ import { fromHex, getAddress, numberToHex, SwitchChainError } from 'viem'
8
8
 
9
9
  farcasterMiniApp.type = 'farcasterMiniApp'
10
10
 
11
- let accountsChanged: Connector['onAccountsChanged'] | undefined
11
+ let accountsChanged: ((accounts: readonly `0x${string}`[]) => void) | undefined
12
12
  let chainChanged: Connector['onChainChanged'] | undefined
13
13
  let disconnect: Connector['onDisconnect'] | undefined
14
14
 
15
+ type MiniAppProvider = typeof MiniAppSDK.wallet.ethProvider
16
+ type MiniAppProviderWithEvents = MiniAppProvider & {
17
+ on: NonNullable<MiniAppProvider['on']>
18
+ removeListener: NonNullable<MiniAppProvider['removeListener']>
19
+ }
20
+
21
+ function assertProviderHasEventEmitterMethods(
22
+ provider: MiniAppProvider,
23
+ ): asserts provider is MiniAppProviderWithEvents {
24
+ if (typeof provider.on !== 'function') {
25
+ throw new Error('MiniApp provider does not support event listeners.')
26
+ }
27
+
28
+ if (typeof provider.removeListener !== 'function') {
29
+ throw new Error('MiniApp provider does not support removing listeners.')
30
+ }
31
+ }
32
+
15
33
  export function farcasterMiniApp() {
16
34
  return createConnector<typeof MiniAppSDK.wallet.ethProvider>((config) => ({
17
35
  id: 'farcaster',
@@ -22,6 +40,7 @@ export function farcasterMiniApp() {
22
40
 
23
41
  async connect({ chainId } = {}) {
24
42
  const provider = await this.getProvider()
43
+ assertProviderHasEventEmitterMethods(provider)
25
44
  const accounts = await provider.request({
26
45
  method: 'eth_requestAccounts',
27
46
  })
@@ -38,8 +57,8 @@ export function farcasterMiniApp() {
38
57
  if (!targetChainId) throw new Error('No chains found on connector.')
39
58
 
40
59
  if (!accountsChanged) {
41
- accountsChanged = this.onAccountsChanged.bind(this)
42
- // @ts-expect-error - provider type is stricter
60
+ const onAccountsChanged = this.onAccountsChanged.bind(this)
61
+ accountsChanged = (accounts) => onAccountsChanged([...accounts])
43
62
  provider.on('accountsChanged', accountsChanged)
44
63
  }
45
64
  if (!chainChanged) {
@@ -64,9 +83,9 @@ export function farcasterMiniApp() {
64
83
  },
65
84
  async disconnect() {
66
85
  const provider = await this.getProvider()
86
+ assertProviderHasEventEmitterMethods(provider)
67
87
 
68
88
  if (accountsChanged) {
69
- // @ts-expect-error - provider type is stricter
70
89
  provider.removeListener('accountsChanged', accountsChanged)
71
90
  accountsChanged = undefined
72
91
  }